You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@apr.apache.org by wr...@apache.org on 2001/07/16 22:44:17 UTC
cvs commit: apr/include apr_file_io.h
wrowe 01/07/16 13:44:17
Modified: file_io/unix open.c filedup.c
include apr_file_io.h
Log:
This should introduce the APR_INHERIT flag for Unix.
Revision Changes Path
1.78 +7 -1 apr/file_io/unix/open.c
Index: open.c
===================================================================
RCS file: /home/cvs/apr/file_io/unix/open.c,v
retrieving revision 1.77
retrieving revision 1.78
diff -u -r1.77 -r1.78
--- open.c 2001/06/27 19:40:34 1.77
+++ open.c 2001/07/16 20:44:16 1.78
@@ -167,7 +167,8 @@
(*new)->dataRead = 0;
(*new)->direction = 0;
apr_pool_cleanup_register((*new)->cntxt, (void *)(*new), apr_unix_file_cleanup,
- apr_pool_cleanup_null);
+ ((*new)->flag & APR_INHERIT) ? apr_pool_cleanup_null
+ : apr_unix_file_cleanup);
return APR_SUCCESS;
}
@@ -223,6 +224,7 @@
/* buffer already NULL;
* don't get a lock (only for buffered files)
*/
+ (*file)->inherit = 1;
return APR_SUCCESS;
}
@@ -254,5 +256,9 @@
return apr_os_file_put(thefile, &fd, cont);
}
+
+APR_IMPLEMENT_SET_INHERIT(file, flags, cntxt, apr_unix_file_cleanup)
+
+APR_IMPLEMENT_UNSET_INHERIT(file, flags, cntxt, apr_unix_file_cleanup)
APR_POOL_IMPLEMENT_ACCESSOR_X(file, cntxt);
1.31 +4 -2 apr/file_io/unix/filedup.c
Index: filedup.c
===================================================================
RCS file: /home/cvs/apr/file_io/unix/filedup.c,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- filedup.c 2001/06/27 19:40:34 1.30
+++ filedup.c 2001/07/16 20:44:16 1.31
@@ -87,8 +87,10 @@
}
(*new_file)->blocking = old_file->blocking; /* this is the way dup() works */
(*new_file)->flags = old_file->flags;
- apr_pool_cleanup_register((*new_file)->cntxt, (void *)(*new_file), apr_unix_file_cleanup,
- apr_pool_cleanup_null);
+ apr_pool_cleanup_register((*new_file)->cntxt, (void *)(*new_file),
+ apr_unix_file_cleanup,
+ (*new_file)->flags ? apr_pool_cleanup_null
+ : apr_unix_file_cleanup);
return APR_SUCCESS;
}
1.104 +30 -1 apr/include/apr_file_io.h
Index: apr_file_io.h
===================================================================
RCS file: /home/cvs/apr/include/apr_file_io.h,v
retrieving revision 1.103
retrieving revision 1.104
diff -u -r1.103 -r1.104
--- apr_file_io.h 2001/06/27 19:40:46 1.103
+++ apr_file_io.h 2001/07/16 20:44:17 1.104
@@ -60,6 +60,7 @@
#include "apr_time.h"
#include "apr_errno.h"
#include "apr_file_info.h"
+#include "apr_inherit.h"
#define APR_WANT_STDIO /* for SEEK_* */
#define APR_WANT_IOVEC
@@ -89,6 +90,12 @@
#define APR_SHARELOCK 1024 /* Platform dependent support for higher
level locked read/write access to support
writes across process/machines */
+#ifndef APR_INHERIT
+#define APR_INHERIT (2^24) /* Create the file inheritable by the child
+ process. fork()ed implementations
+ automatically register a child cleanup
+ in the _absense_ of this flag. */
+#endif
/* flags for apr_file_seek */
#define APR_SET SEEK_SET
@@ -96,7 +103,7 @@
#define APR_END SEEK_END
/* should be same as whence type in lseek, POSIX defines this as int */
-typedef apr_int32_t apr_seek_where_t;
+typedef int apr_seek_where_t;
/**
* Structure for referencing files.
@@ -141,6 +148,10 @@
* APR_SHARELOCK Platform dependent support for higher
* level locked read/write access to support
* writes across process/machines
+ * APR_INHERIT Create the file inheritable by the child
+ * processes. fork()ed implementations
+ * automatically register a child cleanup
+ * in the _absense_ of this flag.
* </PRE>
* @param perm Access permissions for file.
* @param cont The pool to use.
@@ -568,6 +579,24 @@
* @deffunc apr_pool_t apr_file_pool_get(apr_file_t *f)
*/
APR_POOL_DECLARE_ACCESSOR(file);
+
+/**
+ * Set a file to be inherited by child processes.
+ * @param file The file to enable inheritance.
+ * @deffunc void apr_file_set_inherit(apr_file_t *file)
+ * @tip Same effect as passing the APR_INHERIT flag to apr_file_open(),
+ * but it is far more efficient to pass the correct value in the first place.
+ */
+APR_DECLARE_SET_INHERIT(file);
+
+/**
+ * Unset a file from being inherited by child processes.
+ * @param file The file to disable inheritance.
+ * @deffunc void apr_file_unset_inherit(apr_file_t *file)
+ * @tip Same effect as omiting the APR_INHERIT flag to apr_file_open(),
+ * but it is far more efficient to pass the correct value in the first place.
+ */
+APR_DECLARE_UNSET_INHERIT(file);
#ifdef __cplusplus
}