Mercurial > hg > CbC > CbC_gcc
comparison libiberty/tmpnam.c @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 /* | |
2 | |
3 @deftypefn Supplemental char* tmpnam (char *@var{s}) | |
4 | |
5 This function attempts to create a name for a temporary file, which | |
6 will be a valid file name yet not exist when @code{tmpnam} checks for | |
7 it. @var{s} must point to a buffer of at least @code{L_tmpnam} bytes, | |
8 or be @code{NULL}. Use of this function creates a security risk, and it must | |
9 not 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 | |
24 static char tmpnam_buffer[L_tmpnam]; | |
25 static int tmpnam_counter; | |
26 | |
27 extern int getpid (void); | |
28 | |
29 char * | |
30 tmpnam (char *s) | |
31 { | |
32 int pid = getpid (); | |
33 | |
34 if (s == NULL) | |
35 s = tmpnam_buffer; | |
36 | |
37 /* Generate the filename and make sure that there isn't one called | |
38 it already. */ | |
39 | |
40 while (1) | |
41 { | |
42 FILE *f; | |
43 sprintf (s, "%s/%s%x.%x", P_tmpdir, "t", pid, tmpnam_counter); | |
44 f = fopen (s, "r"); | |
45 if (f == NULL) | |
46 break; | |
47 tmpnam_counter++; | |
48 fclose (f); | |
49 } | |
50 | |
51 return s; | |
52 } |