You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by Brian Behlendorf <br...@hyperreal.com> on 1996/10/01 05:24:07 UTC

cvs commit: apache/src alloc.c

brian       96/09/30 20:24:06

  Modified:    src       alloc.c
  Log:
  Reviewed by:	Brian Behlendorf
  Submitted by:	Mark Brown, mbrown@openmarket.com
  
  On Tue, 24 Sep 1996, Mark Brown wrote:
  > Here is a patch for the error log overwrite problem I reported
  > earlier.  I have tested the patch on SunOS 4.1.4.
  >
  > The patch should have no ill effect on correct systems.
  
  Revision  Changes    Path
  1.13      +16 -2     apache/src/alloc.c
  
  Index: alloc.c
  ===================================================================
  RCS file: /export/home/cvs/apache/src/alloc.c,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -C3 -r1.12 -r1.13
  *** alloc.c	1996/09/13 00:24:51	1.12
  --- alloc.c	1996/10/01 03:24:04	1.13
  ***************
  *** 50,56 ****
     *
     */
    
  ! /* $Id: alloc.c,v 1.12 1996/09/13 00:24:51 jim Exp $ */
    
    
    /*
  --- 50,56 ----
     *
     */
    
  ! /* $Id: alloc.c,v 1.13 1996/10/01 03:24:04 brian Exp $ */
    
    
    /*
  ***************
  *** 773,781 ****
    
    FILE *pfopen(struct pool *a, char *name, char *mode)
    {
  !   FILE *fd;
    
      block_alarms();
      fd = fopen(name, mode);
      if (fd != NULL) note_cleanups_for_file (a, fd);
      unblock_alarms();
  --- 773,795 ----
    
    FILE *pfopen(struct pool *a, char *name, char *mode)
    {
  !   FILE *fd = NULL;
  !   int baseFlag, desc;
    
      block_alarms();
  + 
  +   if (*mode == 'a') {
  +     /* Work around faulty implementations of fopen */
  +     baseFlag = (*(mode+1) == '+') ? O_RDWR : O_WRONLY;
  +     desc = open(name, baseFlag | O_APPEND | O_CREAT,
  + 		S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH);
  +     if (desc >= 0) {
  +       fd = fdopen(desc, mode);
  +     }
  +   } else {
  +     fd = fopen(name, mode);
  +   }
  + 
      fd = fopen(name, mode);
      if (fd != NULL) note_cleanups_for_file (a, fd);
      unblock_alarms();