* doc/internals.texi (Relaxing with a table) <after relaxation>:
[external/binutils.git] / libiberty / tmpnam.c
1 #include <stdio.h>
2
3 #ifndef L_tmpnam
4 #define L_tmpnam 100
5 #endif
6 #ifndef P_tmpdir
7 #define P_tmpdir "/usr/tmp"
8 #endif
9
10 static char tmpnam_buffer[L_tmpnam];
11 static int tmpnam_counter;
12
13 extern int getpid ();
14
15 char *
16 tmpnam (s)
17      char *s;
18 {
19   int pid = getpid ();
20
21   if (s == NULL)
22     s = tmpnam_buffer;
23
24   /*  Generate the filename and make sure that there isn't one called
25       it already.  */
26
27   while (1)
28     {
29       FILE *f;
30       sprintf (s, "%s/%s%x.%x", P_tmpdir, "t", pid, tmpnam_counter);
31       f = fopen (s, "r");
32       if (f == NULL)
33         break;
34       tmpnam_counter++;
35       fclose (f);
36     }
37
38   return s;
39 }