home *** CD-ROM | disk | FTP | other *** search
/ GEMini Atari / GEMini_Atari_CD-ROM_Walnut_Creek_December_1993.iso / zip / gnu / gawk213s.lzh / GAWK213S / TMPNAM.C < prev    next >
C/C++ Source or Header  |  1993-07-29  |  1KB  |  48 lines

  1. /* tmpnam.c : return a temporary file name */
  2. /* written by Eric R. Smith and placed in the public domain */
  3. /**
  4.  *  - modified for gawk needs - pattern /$$XXXXXX from the original
  5.  *    code creates names which are hard to remove when somethig
  6.  *    goes wrong
  7.  *  - retuned name can be passed outside via system(); other programs
  8.  *    may not dig '/' as a path separator
  9.  *  - somehow more frugal in a memory use
  10.  *    (mj - October 1990)
  11.  **/
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14. #include <string.h>
  15.  
  16. extern char *    getenv(const char *);
  17. extern char *    mktemp(char *);
  18. extern char *    strcpy(char *, const char *);
  19. extern char *    strcat(char *, const char *);
  20. extern size_t     strlen(const char *s);
  21. static char pattern[] = "\\gwkXXXXX";
  22.  
  23. char *tmpnam(buf)
  24.     char *buf;
  25. {
  26.     char *tmpdir;
  27.  
  28.     if (!(tmpdir = getenv("TEMP")) && !(tmpdir = getenv("TMPDIR")))
  29.         tmpdir = ".";
  30.  
  31.     if (!buf) {
  32.         size_t blen;
  33.         
  34.         blen = strlen (tmpdir) + sizeof(pattern);
  35.         if (NULL == (buf = malloc(blen)))
  36.             return NULL;
  37.     }
  38.     (void) strcat(strcpy(buf, tmpdir), pattern);
  39.     return(mktemp(buf));
  40. }
  41.  
  42. /* used by gawk_popen() */
  43. char *tempnam(path, base)
  44. const char *path, *base;    /* ignored */
  45. {
  46.     return tmpnam(NULL);
  47. }
  48.