source: branches/libc-0.6/src/binutils/libiberty/tmpnam.c

Last change on this file was 610, checked in by bird, 22 years ago

This commit was generated by cvs2svn to compensate for changes in r609,
which included commits to RCS files with non-trunk default branches.

  • Property cvs2svn:cvs-rev set to 1.1.1.2
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 1.0 KB
Line 
1/*
2
3@deftypefn Supplemental char* tmpnam (char *@var{s})
4
5This function attempts to create a name for a temporary file, which
6will be a valid file name yet not exist when @code{tmpnam} checks for
7it. @var{s} must point to a buffer of at least @code{L_tmpnam} bytes,
8or be @code{NULL}. Use of this function creates a security risk, and it must
9not be used in new projects. Use @code{mkstemp} instead.
10
11@end deftypefn
12
13*/
14
15#include <stdio.h>
16
17#ifndef L_tmpnam
18#define L_tmpnam 100
19#endif
20#ifndef P_tmpdir
21#define P_tmpdir "/usr/tmp"
22#endif
23
24static char tmpnam_buffer[L_tmpnam];
25static int tmpnam_counter;
26
27extern int getpid ();
28
29char *
30tmpnam (s)
31 char *s;
32{
33 int pid = getpid ();
34
35 if (s == NULL)
36 s = tmpnam_buffer;
37
38 /* Generate the filename and make sure that there isn't one called
39 it already. */
40
41 while (1)
42 {
43 FILE *f;
44 sprintf (s, "%s/%s%x.%x", P_tmpdir, "t", pid, tmpnam_counter);
45 f = fopen (s, "r");
46 if (f == NULL)
47 break;
48 tmpnam_counter++;
49 fclose (f);
50 }
51
52 return s;
53}
Note: See TracBrowser for help on using the repository browser.