1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- /*
- @deftypefn Supplemental char* tmpnam (char *@var{s})
- This function attempts to create a name for a temporary file, which
- will be a valid file name yet not exist when @code{tmpnam} checks for
- it. @var{s} must point to a buffer of at least @code{L_tmpnam} bytes,
- or be @code{NULL}. Use of this function creates a security risk, and it must
- not be used in new projects. Use @code{mkstemp} instead.
- @end deftypefn
- */
- #include <stdio.h>
- #ifndef L_tmpnam
- #define L_tmpnam 100
- #endif
- #ifndef P_tmpdir
- #define P_tmpdir "/usr/tmp"
- #endif
- static char tmpnam_buffer[L_tmpnam];
- static int tmpnam_counter;
- extern int getpid (void);
- char *
- tmpnam (char *s)
- {
- int pid = getpid ();
- if (s == NULL)
- s = tmpnam_buffer;
- /* Generate the filename and make sure that there isn't one called
- it already. */
- while (1)
- {
- FILE *f;
- sprintf (s, "%s/%s%x.%x", P_tmpdir, "t", pid, tmpnam_counter);
- f = fopen (s, "r");
- if (f == NULL)
- break;
- tmpnam_counter++;
- fclose (f);
- }
- return s;
- }
|