You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by jw...@apache.org on 2001/10/01 21:12:49 UTC
cvs commit: apr/file_io/unix mktemp.c open.c
jwoolley 01/10/01 12:12:49
Modified: . CHANGES
file_io/unix mktemp.c open.c
Log:
Even though it's not unusual for temporary files to be unlinked as soon as
they're open on Unix, it makes the use of those files harder in some cases.
For example, the filename we were getting back from apr_file_mktemp() was
useless because the file had already been unlinked. Now we defer the unlink
until the file is actually closed. This also makes the behavior on Unix
somewhat more consistent with other platforms.
Revision Changes Path
1.165 +5 -0 apr/CHANGES
Index: CHANGES
===================================================================
RCS file: /home/cvs/apr/CHANGES,v
retrieving revision 1.164
retrieving revision 1.165
diff -u -d -u -r1.164 -r1.165
--- CHANGES 2001/10/01 18:46:40 1.164
+++ CHANGES 2001/10/01 19:12:49 1.165
@@ -1,5 +1,10 @@
Changes with APR b1
+ *) Files opened on Unix with the flag APR_DELONCLOSE are now
+ not unlinked until they are actually closed, rather than as
+ soon as they're opened. The old approach worked but made
+ handling temp files harder. [Cliff Woolley]
+
*) Fix potential segfault when closing a file on Unix. If
apr_file_close() was called and it failed, it would not
deregister the file cleanup. Therefore the cleanup would
1.11 +0 -1 apr/file_io/unix/mktemp.c
Index: mktemp.c
===================================================================
RCS file: /home/cvs/apr/file_io/unix/mktemp.c,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -d -u -r1.10 -r1.11
--- mktemp.c 2001/09/30 08:13:51 1.10
+++ mktemp.c 2001/10/01 19:12:49 1.11
@@ -196,7 +196,6 @@
(*fp)->filedes = fd;
#endif
- apr_file_remove((*fp)->fname, p);
#ifdef WIN32
apr_pool_cleanup_register((*fp)->cntxt, (void *)(*fp),
file_cleanup, file_cleanup);
1.86 +3 -3 apr/file_io/unix/open.c
Index: open.c
===================================================================
RCS file: /home/cvs/apr/file_io/unix/open.c,v
retrieving revision 1.85
retrieving revision 1.86
diff -u -d -u -r1.85 -r1.86
--- open.c 2001/10/01 18:46:40 1.85
+++ open.c 2001/10/01 19:12:49 1.86
@@ -69,6 +69,9 @@
rc = close(file->filedes);
if (rc == 0) {
file->filedes = -1;
+ if (file->flags & APR_DELONCLOSE) {
+ unlink(file->fname);
+ }
#if APR_HAS_THREADS
if (file->thlock) {
rv = apr_lock_destroy(file->thlock);
@@ -156,9 +159,6 @@
return errno;
}
- if (flag & APR_DELONCLOSE) {
- unlink(fname);
- }
(*new)->pipe = 0;
(*new)->timeout = -1;
(*new)->ungetchar = -1;