home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 2 / DATAFILE_PDCD2.iso / utilities2 / unixlib36d / UnixLib36d / src / stdio / c / tmpfile < prev    next >
Encoding:
Text File  |  1994-03-08  |  1.3 KB  |  83 lines

  1. static char sccs_id[] = "@(#) tmpfile.c 1.1 " __DATE__ " HJR";
  2.  
  3. /* tmpfile.c (c) Copyright 1990 H.Rogers */
  4.  
  5. #include <string.h>
  6. #include <stdio.h>
  7.  
  8. #include "fcntl.h"
  9.  
  10. extern int access (char *, int);
  11. extern int open (char *, int,...);
  12.  
  13. __STDIOLIB__
  14.  
  15. #define MKTEMP
  16.  
  17. FILE * tmpfile (void)
  18. {
  19.   if (__tmpf)
  20.     return (0);
  21.  
  22.   tmpnam (__tmpn);
  23.   return (__tmpf = fopen (__tmpn, "wb+"));
  24. }
  25.  
  26. static char *
  27. __tmpnam (register char *buf, register char *dir,
  28.       register char *template)
  29. {
  30.   register char *s = buf;
  31.   register int i, j = 0;
  32.  
  33.   if (dir)
  34.     {
  35.       while (*s++ = *dir++);
  36.       s--;
  37.       *s++ = '/';
  38.     }
  39.   while (*s++ = *template++);
  40.   s -= 7;
  41.   if (*s != 'X')
  42.     return (0);
  43.  
  44. loop:i = __tmpcnt++, j++;
  45.   sprintf (s, "%.6x", i);
  46.  
  47.   if (!access (buf, 0))
  48.     {
  49.       if ((__tmpcnt += 0x131) >= 0x1000000)
  50.     __tmpcnt &= 0x3ff;
  51.       if (j > 256)
  52.     return (0);        /* max. 256 tries */
  53.       goto loop;
  54.     }
  55.  
  56.   return (buf);
  57. }
  58.  
  59. static char __tmpbuf[L_tmpnam + 1];
  60.  
  61. char *
  62. tmpnam (register char *buf)
  63. {
  64.   if (!buf)
  65.     buf = __tmpbuf;
  66.  
  67.   return (__tmpnam (buf, P_tmpdir, "__XXXXXX"));
  68. }
  69.  
  70. #ifdef MKTEMP
  71. char *
  72. mktemp (register char *template)
  73. {
  74.   return (__tmpnam (template, 0, template));
  75. }
  76.  
  77. int
  78. mkstemp (char *template)
  79. {
  80.   return (open (mktemp (template), O_RDWR | O_CREAT | O_TRUNC, 0666));
  81. }
  82. #endif
  83.