diff options
Diffstat (limited to 'stdio-common')
-rw-r--r-- | stdio-common/tempnam.c | 17 | ||||
-rw-r--r-- | stdio-common/tmpfile.c | 18 | ||||
-rw-r--r-- | stdio-common/tmpfile64.c | 23 | ||||
-rw-r--r-- | stdio-common/tmpnam.c | 22 | ||||
-rw-r--r-- | stdio-common/tmpnam_r.c | 16 |
5 files changed, 46 insertions, 50 deletions
diff --git a/stdio-common/tempnam.c b/stdio-common/tempnam.c index 987fbbb..8683643 100644 --- a/stdio-common/tempnam.c +++ b/stdio-common/tempnam.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1993, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,13 +16,9 @@ write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ -#include <errno.h> -#include <stddef.h> #include <stdio.h> -#include <stdlib.h> #include <string.h> - /* Generate a unique temporary filename using up to five characters of PFX if it is not NULL. The directory to put this file in is searched for as follows: First the environment variable "TMPDIR" is checked. @@ -34,17 +30,12 @@ char * tempnam (const char *dir, const char *pfx) { char buf[FILENAME_MAX]; - size_t len; - char *s; - char *t = __stdio_gen_tempname (buf, sizeof (buf), dir, pfx, 1, - &len, (FILE **) NULL, 0); - if (t == NULL) + if (__path_search (buf, FILENAME_MAX, dir, pfx)) return NULL; - s = (char *) malloc (len); - if (s == NULL) + if (__gen_tempname (buf, 0, 0)) return NULL; - return (char *) memcpy (s, t, len); + return strdup (buf); } diff --git a/stdio-common/tmpfile.c b/stdio-common/tmpfile.c index c3afd3f..488b43b 100644 --- a/stdio-common/tmpfile.c +++ b/stdio-common/tmpfile.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1993, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -18,6 +18,9 @@ #include <stdio.h> +#ifdef _USE_IN_LIBIO +# define fdopen _IO_new_fdopen +#endif /* This returns a new stream opened on a temporary file (generated by tmpnam) The file is opened with mode "w+b" (binary read/write). @@ -27,17 +30,20 @@ FILE * tmpfile () { char buf[FILENAME_MAX]; - char *filename; + int fd; FILE *f; - filename = __stdio_gen_tempname (buf, sizeof (buf), (char *) NULL, "tmpf", 0, - (size_t *) NULL, &f, 0); - if (filename == NULL) + if (__path_search (buf, FILENAME_MAX, NULL, "tmpf")) + return NULL; + if ((fd = __gen_tempname (buf, 1, 0)) < 0) return NULL; /* Note that this relies on the Unix semantics that a file is not really removed until it is closed. */ - (void) remove (filename); + (void) remove (buf); + + if ((f = fdopen (fd, "w+b")) == NULL) + close (fd); return f; } diff --git a/stdio-common/tmpfile64.c b/stdio-common/tmpfile64.c index 5a6e323..5854f14 100644 --- a/stdio-common/tmpfile64.c +++ b/stdio-common/tmpfile64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1993, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -19,6 +19,9 @@ #include <errno.h> #include <stdio.h> +#ifdef _USE_IN_LIBIO +# define fdopen _IO_new_fdopen +#endif /* This returns a new stream opened on a temporary file (generated by tmpnam) The file is opened with mode "w+b" (binary read/write). @@ -27,23 +30,21 @@ FILE * tmpfile64 () { -#ifdef _G_OPEN64 char buf[FILENAME_MAX]; - char *filename; + int fd; FILE *f; - filename = __stdio_gen_tempname (buf, sizeof (buf), (char *) NULL, "tmpf", 0, - (size_t *) NULL, &f, 1); - if (filename == NULL) + if (__path_search (buf, FILENAME_MAX, NULL, "tmpf")) + return NULL; + if ((fd = __gen_tempname (buf, 1, 1)) < 0) return NULL; /* Note that this relies on the Unix semantics that a file is not really removed until it is closed. */ - (void) remove (filename); + (void) remove (buf); + + if ((f = fdopen (fd, "w+b")) == NULL) + close (fd); return f; -#else - __set_errno (ENOSYS); - return NULL; -#endif } diff --git a/stdio-common/tmpnam.c b/stdio-common/tmpnam.c index 3389ff5..e5c6bf1 100644 --- a/stdio-common/tmpnam.c +++ b/stdio-common/tmpnam.c @@ -19,7 +19,6 @@ #include <stdio.h> #include <string.h> - /* Generate a unique filename in P_tmpdir. This function is *not* thread safe! */ @@ -30,20 +29,21 @@ tmpnam (char *s) where S != NULL. */ static char buf[L_tmpnam]; char tmpbuf[L_tmpnam]; - char *result; /* In the following call we use the buffer pointed to by S if non-NULL although we don't know the size. But we limit the size - to FILENAME_MAX characters in any case. */ - result = __stdio_gen_tempname (s ?: tmpbuf, L_tmpnam, (const char *) NULL, - (const char *) NULL, 0, - (size_t *) NULL, (FILE **) NULL, 0); + to L_tmpnam characters in any case. */ + if (__path_search (s ? : tmpbuf, L_tmpnam, NULL, NULL)) + return NULL; + + if (__gen_tempname (s ? : tmpbuf, 0, 0)) + return NULL; - if (result != NULL && s == NULL) + if (s == NULL) { - memcpy (buf, result, L_tmpnam); - result = buf; + memcpy (buf, tmpbuf, L_tmpnam); + return buf; } - - return result; + else + return s; } diff --git a/stdio-common/tmpnam_r.c b/stdio-common/tmpnam_r.c index 5e67cc6..07c4650 100644 --- a/stdio-common/tmpnam_r.c +++ b/stdio-common/tmpnam_r.c @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1993, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1993, 1996, 1997, 1998 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -17,8 +17,6 @@ Boston, MA 02111-1307, USA. */ #include <stdio.h> -#include <string.h> - /* Generate a unique filename in P_tmpdir. If S is NULL return NULL. This makes this function thread safe. */ @@ -28,10 +26,10 @@ tmpnam_r (char *s) if (s == NULL) return NULL; - /* In the following call we use the buffer pointed to by S if - non-NULL although we don't know the size. But we limit the size - to L_tmpnam characters in any case. */ - return __stdio_gen_tempname (s, L_tmpnam, (const char *) NULL, - (const char *) NULL, 0, - (size_t *) NULL, (FILE **) NULL, 0); + if (__path_search (s, L_tmpnam, NULL, NULL)) + return NULL; + if (__gen_tempname (s, 0, 0)) + return NULL; + + return s; } |