You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by rb...@hyperreal.org on 1999/12/13 14:57:11 UTC
cvs commit: apache-2.0/src/lib/apr/file_io/unix filedup.c open.c
rbb 99/12/13 05:57:10
Modified: src/lib/apr/file_io/unix filedup.c open.c
Log:
A bug fix to ap_open_stderr, and a new feature for ap_dupfile. The previous
implementation wouldn't let the user supply two file descriptors and make
them equivalent, it would only allow us to create a new descriptor. This
wasn't good enough. This patch rectifies that problem.
Revision Changes Path
1.7 +16 -5 apache-2.0/src/lib/apr/file_io/unix/filedup.c
Index: filedup.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/filedup.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- filedup.c 1999/12/03 15:18:22 1.6
+++ filedup.c 1999/12/13 13:57:05 1.7
@@ -64,12 +64,18 @@
ap_status_t ap_dupfile(struct file_t **new_file, struct file_t *old_file)
{
char *buf_oflags;
- (*new_file) = (struct file_t *)ap_palloc(old_file->cntxt,
- sizeof(struct file_t));
-
+ int have_file = 0;
+
if ((*new_file) == NULL) {
- return APR_ENOMEM;
+ (*new_file) = (struct file_t *)ap_pcalloc(old_file->cntxt,
+ sizeof(struct file_t));
+ if ((*new_file) == NULL) {
+ return APR_ENOMEM;
+ }
+ } else {
+ have_file = 1;
}
+
(*new_file)->cntxt = old_file->cntxt;
if (old_file->buffered) {
switch (old_file->oflags) {
@@ -89,7 +95,12 @@
old_file->filehand);
}
else {
- (*new_file)->filedes = dup(old_file->filedes);
+ if (have_file) {
+ dup2(old_file->filedes, (*new_file)->filedes);
+ }
+ else {
+ (*new_file)->filedes = dup(old_file->filedes);
+ }
}
(*new_file)->fname = ap_pstrdup(old_file->cntxt, old_file->fname);
(*new_file)->buffered = old_file->buffered;
1.27 +2 -1 apache-2.0/src/lib/apr/file_io/unix/open.c
Index: open.c
===================================================================
RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/open.c,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- open.c 1999/12/11 20:24:13 1.26
+++ open.c 1999/12/13 13:57:06 1.27
@@ -307,12 +307,13 @@
*/
ap_status_t ap_open_stderr(struct file_t **thefile, ap_context_t *cont)
{
- (*thefile) = ap_palloc(cont, sizeof(ap_os_file_t *));
+ (*thefile) = ap_pcalloc(cont, sizeof(ap_os_file_t *));
if ((*thefile) == NULL) {
return APR_ENOMEM;
}
(*thefile)->filedes = STDERR_FILENO;
(*thefile)->cntxt = cont;
+ (*thefile)->fname = NULL;
(*thefile)->filehand = NULL;
(*thefile)->stated = 0;
(*thefile)->buffered = 0;