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 2000/01/06 15:43:52 UTC

cvs commit: apache-2.0/src/modules/standard mod_actions.c mod_asis.c mod_autoindex.c mod_cgi.c mod_dir.c mod_include.c mod_mime.c mod_negotiation.c mod_userdir.c

rbb         00/01/06 06:43:51

  Modified:    src/include httpd.h
               src/lib/apr/file_io/unix fileacc.c filedup.c fileio.h
                        filestat.c open.c pipe.c readwrite.c
               src/lib/apr/include apr_file_io.h
               src/lib/apr/test ab_apr.c testmmap.c
               src/main http_config.c http_core.c http_log.c
                        http_protocol.c http_request.c util.c
               src/modules/standard mod_actions.c mod_asis.c
                        mod_autoindex.c mod_cgi.c mod_dir.c mod_include.c
                        mod_mime.c mod_negotiation.c mod_userdir.c
  Log:
  Separate the stat structure from the file structure and use ap_stat and
  ap_getfileinfo in apache.
  
  Revision  Changes    Path
  1.17      +1 -1      apache-2.0/src/include/httpd.h
  
  Index: httpd.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/include/httpd.h,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- httpd.h	1999/12/21 21:41:43	1.16
  +++ httpd.h	2000/01/06 14:43:00	1.17
  @@ -768,7 +768,7 @@
       char *filename;
       char *path_info;
       char *args;			/* QUERY_ARGS, if any */
  -    struct stat finfo;		/* ST_MODE set to zero if no such file */
  +    ap_finfo_t finfo;		/* ST_MODE set to zero if no such file */
       uri_components parsed_uri;	/* components of uri, dismantled */
   
       /* Various other config info which may change with .htaccess files
  
  
  
  1.13      +16 -130   apache-2.0/src/lib/apr/file_io/unix/fileacc.c
  
  Index: fileacc.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/fileacc.c,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- fileacc.c	1999/12/03 15:18:22	1.12
  +++ fileacc.c	2000/01/06 14:43:05	1.13
  @@ -104,144 +104,30 @@
   }
   
   /* ***APRDOC********************************************************
  - * ap_status_t ap_get_filesize(ap_ssize_t *, ap_file_t *)
  - *    Return the size of the current file.
  - * arg 1) The currently open file.
  - * arg 2) The size of the file.  
  - */                     
  -ap_status_t ap_get_filesize(ap_ssize_t *size, struct file_t *file)
  -{
  -    if (file != NULL) {
  -        if (file->stated == 0) {
  -            ap_getfileinfo(file);
  -        }
  -        *size = file->size;
  -        return APR_SUCCESS;
  -    }
  -    else {
  -        *size = -1;
  -        return APR_ENOFILE;
  -    }
  -}
  -
  -/* ***APRDOC********************************************************
  - * ap_status_t ap_get_fileperms(ap_fileperms_t *, ap_file_t *)
  - *    Return the permissions of the current file.
  - * arg 1) The currently open file.
  - * arg 2) The permissions of the file.  
  - */                     
  -ap_status_t ap_get_fileperms(ap_fileperms_t *perm, struct file_t *file)
  -{
  -    if (file != NULL) {
  -        if (file->stated == 0) {
  -            ap_getfileinfo(file);
  -        }
  -        *perm = file->protection;
  -        return APR_SUCCESS;
  -    }
  -    else {
  -        *perm = -1;
  -        return APR_ENOFILE;
  -    }
  -}
  -
  -/* ***APRDOC********************************************************
  - * ap_status_t ap_get_fileatime(time_t *, ap_file_t *)
  - *    Return the last access time of the current file.
  - * arg 1) The currently open file.
  - * arg 2) The last access time of the file.  
  - */                     
  -ap_status_t ap_get_fileatime(time_t *atime, struct file_t *file)
  -{    
  -    if (file != NULL) {
  -        if (file->stated == 0) {
  -            ap_getfileinfo(file);
  -        }
  -        *atime = file->atime;
  -        return APR_SUCCESS;
  -    }
  -    else {
  -        *atime = -1;
  -        return APR_ENOFILE;
  -    }
  -}
  -
  -/* ***APRDOC********************************************************
  - * ap_status_t ap_get_filectime(time_t *, ap_file_t *)
  - *    Return the time of the last change to the current file.
  - * arg 1) The currently open file.
  - * arg 2) The last change time of the file.  
  - */                     
  -ap_status_t ap_get_filectime(time_t *ptime, struct file_t *file)
  -{    
  -    if (file != NULL) {
  -        if (file->stated == 0) {
  -            ap_getfileinfo(file);
  -        }
  -        *ptime = file->ctime;
  -        return APR_SUCCESS;
  -    }
  -    else {
  -        *ptime = -1;
  -        return APR_ENOFILE;
  -    }
  -}
  -
  -/* ***APRDOC********************************************************
  - * ap_status_t ap_get_filemtime(time_t *, ap_file_t *)
  - *    Return the last modified time of the current file.
  - * arg 1) The currently open file.
  - * arg 2) The last modified time of the file.  
  - */                     
  -ap_status_t ap_get_filemtime(time_t *mtime, struct file_t *file)
  -{    
  -    if (file != NULL) {
  -        if (file->stated == 0) {
  -            ap_getfileinfo(file);
  -        }
  -        *mtime = file->mtime;
  -        return APR_SUCCESS;
  -    }
  -    else {
  -        *mtime = -1;
  -        return APR_ENOFILE;
  -    }
  -}
  -
  -/* ***APRDOC********************************************************
    * ap_status_t ap_get_filetype(ap_filetype_e, ap_file_t *)
    *    Return the type of the current file.
    * arg 1) The currently open file.
    * arg 2) The file type
    */                     
  -ap_status_t ap_get_filetype(ap_filetype_e *type, struct file_t *file)
  +ap_status_t ap_get_filetype(ap_filetype_e *type, ap_fileperms_t perms)
   {    
  -    if (file != NULL) {
  -        if (file->stated == 0) {
  -            ap_getfileinfo(file);
  -        }
  -        if (S_ISREG(file->protection))
  -            *type = APR_REG;
  -        if (S_ISDIR(file->protection))
  -            *type = APR_DIR;
  -        if (S_ISCHR(file->protection))
  -            *type = APR_CHR;
  -        if (S_ISBLK(file->protection))
  -            *type = APR_BLK;
  -        if (S_ISFIFO(file->protection))
  -            *type = APR_PIPE;
  -        if (S_ISLNK(file->protection))
  -            *type = APR_LNK;
  +    if (S_ISREG(perms))
  +        *type = APR_REG;
  +    if (S_ISDIR(perms))
  +        *type = APR_DIR;
  +    if (S_ISCHR(perms))
  +        *type = APR_CHR;
  +    if (S_ISBLK(perms))
  +        *type = APR_BLK;
  +    if (S_ISFIFO(perms))
  +        *type = APR_PIPE;
  +    if (S_ISLNK(perms))
  +        *type = APR_LNK;
   #ifndef BEOS
  -        if (S_ISSOCK(file->protection))
  -            *type = APR_SOCK;
  +    if (S_ISSOCK(perms))
  +        *type = APR_SOCK;
   #endif
  -        return APR_SUCCESS;
  -    }
  -    else {
  -        *type = APR_REG;
  -        return APR_ENOFILE;
  -    }
  +    return APR_SUCCESS;
   }
   
   /* ***APRDOC********************************************************
  
  
  
  1.8       +0 -7      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.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- filedup.c	1999/12/13 13:57:05	1.7
  +++ filedup.c	2000/01/06 14:43:07	1.8
  @@ -104,13 +104,6 @@
       }
       (*new_file)->fname = ap_pstrdup(old_file->cntxt, old_file->fname);
       (*new_file)->buffered = old_file->buffered;
  -    (*new_file)->protection = old_file->protection;
  -    (*new_file)->user = old_file->user;
  -    (*new_file)->group = old_file->group;
  -    (*new_file)->size = old_file->size;
  -    (*new_file)->atime = old_file->atime;    
  -    (*new_file)->mtime = old_file->mtime;
  -    (*new_file)->ctime = old_file->ctime;
       ap_register_cleanup((*new_file)->cntxt, (void *)(*new_file), file_cleanup,
                           ap_null_cleanup);
       return APR_SUCCESS;
  
  
  
  1.7       +1 -8      apache-2.0/src/lib/apr/file_io/unix/fileio.h
  
  Index: fileio.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/fileio.h,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- fileio.h	1999/12/03 15:18:23	1.6
  +++ fileio.h	2000/01/06 14:43:07	1.7
  @@ -108,15 +108,8 @@
       char * fname;
       int oflags;
       int buffered;
  -    int stated;
       int eof_hit;
  -    mode_t protection;
  -    uid_t user;
  -    gid_t group;
  -    off_t size;
  -    time_t atime;
  -    time_t mtime;
  -    time_t ctime;
  +    int pipe;
       int timeout;
   };
   
  
  
  
  1.7       +25 -33    apache-2.0/src/lib/apr/file_io/unix/filestat.c
  
  Index: filestat.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/filestat.c,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- filestat.c	2000/01/04 20:46:48	1.6
  +++ filestat.c	2000/01/06 14:43:08	1.7
  @@ -63,20 +63,24 @@
    *    get the specified file's stats..
    * arg 1) The file to get information about. 
    */ 
  -ap_status_t ap_getfileinfo(struct file_t *thefile)
  +ap_status_t ap_getfileinfo(ap_finfo_t *finfo, struct file_t *thefile)
   {
       struct stat info;
       int rv = stat(thefile->fname, &info);
   
       if (rv == 0) {
  -        thefile->protection = info.st_mode;
  -        thefile->user = info.st_uid;
  -        thefile->group = info.st_gid;
  -        thefile->size = info.st_size;
  -        thefile->atime = info.st_atime;
  -        thefile->mtime = info.st_mtime;
  -        thefile->ctime = info.st_ctime;
  -        thefile->stated = 1; 
  +        finfo->protection = info.st_mode;
  +        finfo->user = info.st_uid;
  +        finfo->group = info.st_gid;
  +        finfo->size = info.st_size;
  +        finfo->inode = info.st_ino;
  +        ap_make_time(&finfo->atime, thefile->cntxt);
  +        ap_set_curtime(finfo->atime, info.st_atime);
  +        ap_make_time(&finfo->mtime, thefile->cntxt);
  +        ap_set_curtime(finfo->mtime, info.st_mtime);
  +        ap_make_time(&finfo->ctime, thefile->cntxt);
  +        ap_set_curtime(finfo->ctime, info.st_ctime);
  +
           return APR_SUCCESS;
       }
       else {
  @@ -92,35 +96,23 @@
    * arg 2) The name of the file to stat.
    * arg 3) the context to use to allocate the new file. 
    */ 
  -ap_status_t ap_stat(struct file_t **thefile, const char *fname, ap_context_t *cont)
  +ap_status_t ap_stat(ap_finfo_t *finfo, const char *fname, ap_context_t *cont)
   {
       struct stat info;
       int rv = stat(fname, &info);
   
       if (rv == 0) {
  -        if ((*thefile) == NULL) {
  -            /* Only allocate more space and initialize the object if it is
  -             * NULL when passed in.
  -             */ 
  -            (*thefile) = ap_pcalloc(cont, sizeof(struct file_t));
  -            if ((*thefile) == NULL) {
  -                return APR_ENOMEM;
  -            }
  -            (*thefile)->cntxt = cont;
  -            ap_register_cleanup((*thefile)->cntxt, (void *)(*thefile),
  -                                file_cleanup, ap_null_cleanup);
  -            (*thefile)->fname = ap_pstrdup(cont, fname);
  -            (*thefile)->filehand = NULL;
  -            (*thefile)->filedes = -1;
  -        }
  -        (*thefile)->protection = info.st_mode;
  -        (*thefile)->user = info.st_uid;
  -        (*thefile)->group = info.st_gid;
  -        (*thefile)->size = info.st_size;
  -        (*thefile)->atime = info.st_atime;
  -        (*thefile)->mtime = info.st_mtime;
  -        (*thefile)->ctime = info.st_ctime;
  -        (*thefile)->stated = 1; 
  +        finfo->protection = info.st_mode;
  +        finfo->user = info.st_uid;
  +        finfo->group = info.st_gid;
  +        finfo->size = info.st_size;
  +        finfo->inode = info.st_ino;
  +        ap_make_time(&finfo->atime, cont);
  +        ap_set_curtime(finfo->atime, info.st_atime);
  +        ap_make_time(&finfo->mtime, cont);
  +        ap_set_curtime(finfo->mtime, info.st_mtime);
  +        ap_make_time(&finfo->ctime, cont);
  +        ap_set_curtime(finfo->ctime, info.st_ctime);
           return APR_SUCCESS;
       }
       else {
  
  
  
  1.31      +1 -3      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.30
  retrieving revision 1.31
  diff -u -r1.30 -r1.31
  --- open.c	2000/01/04 19:00:42	1.30
  +++ open.c	2000/01/06 14:43:09	1.31
  @@ -176,7 +176,7 @@
       if (flag & APR_DELONCLOSE) {
           unlink(fname);
       }
  -    (*new)->stated = 0;  /* we haven't called stat for this file yet. */
  +    (*new)->pipe = 0;
       (*new)->timeout = -1;
       (*new)->eof_hit = 0;
       ap_register_cleanup((*new)->cntxt, (void *)(*new), file_cleanup,
  @@ -265,7 +265,6 @@
       (*file)->buffered = 0;
       (*file)->eof_hit = 0;
       (*file)->timeout = -1;
  -    (*file)->stated = 0;
       (*file)->filedes = *dafile;
       return APR_SUCCESS;
   }    
  @@ -321,7 +320,6 @@
       (*thefile)->cntxt = cont;
       (*thefile)->fname = NULL;
       (*thefile)->filehand = NULL;
  -    (*thefile)->stated = 0;
       (*thefile)->buffered = 0;
       (*thefile)->eof_hit = 0;
   
  
  
  
  1.10      +3 -3      apache-2.0/src/lib/apr/file_io/unix/pipe.c
  
  Index: pipe.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/pipe.c,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- pipe.c	1999/12/15 13:07:21	1.9
  +++ pipe.c	2000/01/06 14:43:09	1.10
  @@ -88,7 +88,7 @@
    */
   ap_status_t ap_set_pipe_timeout(struct file_t *thepipe, ap_int32_t timeout)
   {
  -    if (thepipe->stated == -1) {
  +    if (thepipe->pipe == 1) {
           thepipe->timeout = timeout;
           return APR_SUCCESS;
       }
  @@ -114,16 +114,16 @@
       (*in)->cntxt = cont;
       (*in)->filedes = filedes[0];
       (*in)->buffered = 0;
  +    (*in)->pipe = 1;
       (*in)->fname = ap_pstrdup(cont, "PIPE");
  -    (*in)->stated = -1;
       (*in)->timeout = -1;
   
       (*out) = (struct file_t *)ap_palloc(cont, sizeof(struct file_t));
       (*out)->cntxt = cont;
       (*out)->filedes = filedes[1];
       (*out)->buffered = 0;
  +    (*in)->pipe = 1;
       (*out)->fname = ap_pstrdup(cont, "PIPE");
  -    (*out)->stated = -1;
       (*out)->timeout = -1;
   
       pipenonblock(*in);
  
  
  
  1.19      +0 -9      apache-2.0/src/lib/apr/file_io/unix/readwrite.c
  
  Index: readwrite.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/readwrite.c,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- readwrite.c	1999/12/03 15:18:23	1.18
  +++ readwrite.c	2000/01/06 14:43:10	1.19
  @@ -193,7 +193,6 @@
           }  
       }   /* BUFFERED ?? */
   
  -    thefile->stated = 0;
       *nbytes = rv;
       if (rv == -1) {
           return errno;
  @@ -234,7 +233,6 @@
       }
       else {
           *iocnt = bytes;
  -        thefile->stated = 0;
           return APR_SUCCESS;
       }
   }
  @@ -250,7 +248,6 @@
   {
       if (thefile->buffered) {
           if (fputc(ch, thefile->filehand) == ch) {
  -            thefile->stated = 0;
               return APR_SUCCESS;
           }
           return errno;
  @@ -258,7 +255,6 @@
       if (write(thefile->filedes, &ch, 1) != 1) {
           return errno;
       }
  -    thefile->stated = 0;
       return APR_SUCCESS; 
   }
   
  @@ -272,13 +268,11 @@
   {
       if (thefile->buffered) {
           if (ungetc(ch, thefile->filehand) == ch) {
  -            thefile->stated = 0;
               return APR_SUCCESS;
           }
           return errno;
       }
       /* Not sure what to do in this case.  For now, return SUCCESS. */
  -    thefile->stated = 0;
       return APR_SUCCESS; 
   }
   
  @@ -330,7 +324,6 @@
   
       if (thefile->buffered) {
           if (fputs(str, thefile->filehand)) {
  -            thefile->stated = 0;
               return APR_SUCCESS;
           }
           return errno;
  @@ -340,7 +333,6 @@
       if (rv != len) {
           return errno;
       }
  -    thefile->stated = 0;
       return APR_SUCCESS; 
   }
   
  @@ -353,7 +345,6 @@
   {
       if (thefile->buffered) {
           if (!fflush(thefile->filehand)) {
  -            thefile->stated = 0;
               return APR_SUCCESS;
           }
           return errno;
  
  
  
  1.26      +20 -9     apache-2.0/src/lib/apr/include/apr_file_io.h
  
  Index: apr_file_io.h
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/include/apr_file_io.h,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- apr_file_io.h	2000/01/04 19:00:44	1.25
  +++ apr_file_io.h	2000/01/06 14:43:19	1.26
  @@ -57,6 +57,7 @@
   #define APR_FILE_IO_H
   
   #include "apr_general.h"
  +#include "apr_time.h"
   #include "apr_errno.h"
   #if APR_HAVE_SYS_UIO_H
   #include <sys/uio.h>
  @@ -101,13 +102,28 @@
   
   #define APR_OS_DEFAULT 0xFFF
   
  -/* should be same as whence type in lseek, POSIZ defines this as int */
  +/* should be same as whence type in lseek, POSIX defines this as int */
   typedef ap_int32_t       ap_seek_where_t;
   
   typedef struct file_t            ap_file_t;
  +typedef struct ap_finfo_t        ap_finfo_t;
   typedef struct dir_t             ap_dir_t;
   typedef struct iovec_t           ap_iovec_t;
   typedef ap_int32_t               ap_fileperms_t;
  +typedef uid_t                    ap_uid_t;
  +typedef gid_t                    ap_gid_t;
  +typedef ino_t                    ap_ino_t;
  +
  +struct ap_finfo_t {
  +    ap_fileperms_t protection;
  +    ap_uid_t user;
  +    ap_gid_t group;
  +    ap_ino_t inode;
  +    ap_off_t size;
  +    ap_time_t *atime;
  +    ap_time_t *mtime;
  +    ap_time_t *ctime;
  +};
   
   /*   Function definitions */
   ap_status_t ap_open(ap_file_t **, const char *, ap_int32_t, ap_fileperms_t, ap_context_t *);
  @@ -131,8 +147,8 @@
   
   ap_status_t ap_make_iov(ap_iovec_t **, struct iovec *, ap_context_t *);
   ap_status_t ap_dupfile(ap_file_t **, ap_file_t *);
  -ap_status_t ap_getfileinfo(ap_file_t *);
  -ap_status_t ap_stat(ap_file_t **thefile, const char *fname, ap_context_t *cont);
  +ap_status_t ap_getfileinfo(ap_finfo_t *finfo, ap_file_t *thefile);
  +ap_status_t ap_stat(ap_finfo_t *finfo, const char *fname, ap_context_t *cont);
   ap_status_t ap_seek(ap_file_t *, ap_seek_where_t, ap_off_t *);
   
   ap_status_t ap_opendir(ap_dir_t **, const char *, ap_context_t *);
  @@ -158,12 +174,7 @@
   ap_status_t ap_dir_entry_mtime(time_t *, ap_dir_t *);
   ap_status_t ap_dir_entry_ftype(ap_filetype_e *, ap_dir_t *);
   
  -ap_status_t ap_get_filesize(ap_ssize_t *, ap_file_t *);
  -ap_status_t ap_get_filetype(ap_filetype_e *, ap_file_t *);
  -ap_status_t ap_get_fileperms(ap_fileperms_t *, ap_file_t *);
  -ap_status_t ap_get_fileatime(time_t *, ap_file_t *);
  -ap_status_t ap_get_filectime(time_t *, ap_file_t *);
  -ap_status_t ap_get_filemtime(time_t *, ap_file_t *);
  +ap_status_t ap_get_filetype(ap_filetype_e *, ap_fileperms_t);
   
   #ifdef __cplusplus
   }
  
  
  
  1.14      +3 -3      apache-2.0/src/lib/apr/test/ab_apr.c
  
  Index: ab_apr.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/test/ab_apr.c,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- ab_apr.c	1999/12/17 12:32:13	1.13
  +++ ab_apr.c	2000/01/06 14:43:21	1.14
  @@ -858,6 +858,7 @@
   static int open_postfile(char *pfile)
   {
       ap_file_t *postfd = NULL;
  +    ap_finfo_t finfo;
       ap_fileperms_t mode = APR_OS_DEFAULT;
       ap_ssize_t length;
   
  @@ -866,9 +867,8 @@
           return errno;
       }
   
  -    /* No need to perform stat here, the ap_open will do it for us.  */  
  -
  -    ap_get_filesize(&postlen, postfd);
  +    ap_getfileinfo(&finfo, postfd);
  +    postlen = finfo.size;
       postdata = (char *)malloc(postlen);
       if (!postdata) {
           printf("Can\'t alloc postfile buffer\n");
  
  
  
  1.6       +3 -2      apache-2.0/src/lib/apr/test/testmmap.c
  
  Index: testmmap.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/test/testmmap.c,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- testmmap.c	2000/01/04 19:00:49	1.5
  +++ testmmap.c	2000/01/06 14:43:22	1.6
  @@ -71,6 +71,7 @@
       ap_context_t *context;
       ap_mmap_t *themmap = NULL;
       ap_file_t *thefile = NULL;
  +    ap_finfo_t finfo;
       ap_int32_t flag = APR_READ;
       char *file1;
       ap_ssize_t filesize;
  @@ -98,12 +99,12 @@
       }
       
       fprintf(stderr, "Getting file size...................");
  -    if (ap_get_filesize(&filesize, thefile) != APR_SUCCESS) {
  +    if (ap_getfileinfo(&finfo, thefile) != APR_SUCCESS) {
           perror("Didn't open file");
           exit(-1);
       }
       else {
  -        fprintf(stdout, "%d bytes\n", filesize);
  +        fprintf(stdout, "%d bytes\n", finfo.size);
       }  
   
       fprintf(stdout,"Trying to mmap the open file........");
  
  
  
  1.22      +3 -3      apache-2.0/src/main/http_config.c
  
  Index: http_config.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_config.c,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- http_config.c	2000/01/04 19:00:52	1.21
  +++ http_config.c	2000/01/06 14:43:25	1.22
  @@ -1021,20 +1021,20 @@
   {
       const char *errmsg;
       cmd_parms parms;
  -    ap_file_t *finfo = NULL;
  +    ap_finfo_t finfo;
   
       fname = ap_server_root_relative(p, fname);
   
       if (!(strcmp(fname, ap_server_root_relative(p, RESOURCE_CONFIG_FILE))) ||
   	!(strcmp(fname, ap_server_root_relative(p, ACCESS_CONFIG_FILE)))) {
  -	if (ap_stat(&finfo, fname, ptemp) != APR_SUCCESS)   
  +	if (ap_stat(&finfo, fname, p) != APR_SUCCESS)   
   	    return;
       }
   
       /* don't require conf/httpd.conf if we have a -C or -c switch */
       if((ap_server_pre_read_config->nelts || ap_server_post_read_config->nelts) &&
          !(strcmp(fname, ap_server_root_relative(p, SERVER_CONFIG_FILE)))) {
  -	if (ap_stat(&finfo, fname, ptemp) != APR_SUCCESS)     
  +	if (ap_stat(&finfo, fname, p) != APR_SUCCESS)     
   	    return;
       }
   
  
  
  
  1.30      +8 -10     apache-2.0/src/main/http_core.c
  
  Index: http_core.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_core.c,v
  retrieving revision 1.29
  retrieving revision 1.30
  diff -u -r1.29 -r1.30
  --- http_core.c	1999/12/21 07:54:08	1.29
  +++ http_core.c	2000/01/06 14:43:26	1.30
  @@ -2491,7 +2491,7 @@
       if (r->method_number == M_PUT) {
           return METHOD_NOT_ALLOWED;
       }
  -    if (r->finfo.st_mode == 0 || (r->path_info && *r->path_info)) {
  +    if (r->finfo.protection == 0 || (r->path_info && *r->path_info)) {
   	ap_log_rerror(APLOG_MARK, APLOG_ERR|APLOG_NOERRNO, 0, r,
   		      "File does not exist: %s",r->path_info ?
   		      ap_pstrcat(r->pool, r->filename, r->path_info, NULL)
  @@ -2507,25 +2507,23 @@
   		     "file permissions deny server access: %s", r->filename);
           return FORBIDDEN;
       }
  -    ap_make_time(&temp, r->pool);	
  -    ap_set_curtime(temp, r->finfo.st_mtime);
  -    ap_update_mtime(r, temp);
  +    ap_update_mtime(r, r->finfo.mtime);
       ap_set_last_modified(r);
       ap_set_etag(r);
       ap_table_setn(r->headers_out, "Accept-Ranges", "bytes");
       if (((errstatus = ap_meets_conditions(r)) != OK)
  -	|| (errstatus = ap_set_content_length(r, r->finfo.st_size))) {
  +	|| (errstatus = ap_set_content_length(r, r->finfo.size))) {
           ap_close(fd);
           return errstatus;
       }
   
   #ifdef USE_MMAP_FILES
  -    if ((r->finfo.st_size >= MMAP_THRESHOLD)
  -	&& (r->finfo.st_size < MMAP_LIMIT)
  +    if ((r->finfo.size >= MMAP_THRESHOLD)
  +	&& (r->finfo.size < MMAP_LIMIT)
   	&& (!r->header_only || (d->content_md5 & 1))) {
   	/* we need to protect ourselves in case we die while we've got the
    	 * file mmapped */
  -    if (ap_mmap_create(&mm, fd, 0, r->finfo.st_size, r->pool) != APR_SUCCESS){
  +    if (ap_mmap_create(&mm, fd, 0, r->finfo.size, r->pool) != APR_SUCCESS){
   	    ap_log_rerror(APLOG_MARK, APLOG_CRIT, errno, r,
   			 "default_handler: mmap failed: %s", r->filename);
   	    mm = NULL;
  @@ -2584,7 +2582,7 @@
   	    AP_MD5_CTX context;
   	    
   	    ap_MD5Init(&context);
  -	    ap_MD5Update(&context, addr, (unsigned int)r->finfo.st_size);
  +	    ap_MD5Update(&context, addr, (unsigned int)r->finfo.size);
   	    ap_table_setn(r->headers_out, "Content-MD5",
   			  ap_md5contextTo64(r->pool, &context));
   	}
  @@ -2594,7 +2592,7 @@
   	
   	if (!r->header_only) {
   	    if (!rangestatus) {
  -		ap_send_mmap(mm, r, 0, r->finfo.st_size);
  +		ap_send_mmap(mm, r, 0, r->finfo.size);
   	    }
   	    else {
   		ap_off_t offset;
  
  
  
  1.24      +2 -1      apache-2.0/src/main/http_log.c
  
  Index: http_log.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_log.c,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- http_log.c	2000/01/04 19:00:53	1.23
  +++ http_log.c	2000/01/06 14:43:26	1.24
  @@ -514,6 +514,7 @@
   void ap_log_pid(ap_context_t *p, const char *fname)
   {
       ap_file_t *pid_file = NULL;
  +    ap_finfo_t finfo;
       static pid_t saved_pid = -1;
       pid_t mypid;
   
  @@ -522,7 +523,7 @@
   
       fname = ap_server_root_relative(p, fname);
       mypid = getpid();
  -    if (mypid != saved_pid && ap_stat(&pid_file, fname, p) == 0) {
  +    if (mypid != saved_pid && ap_stat(&finfo, fname, p) == APR_SUCCESS) {
         /* WINCH and HUP call this on each restart.
          * Only warn on first time through for this pid.
          *
  
  
  
  1.45      +3 -3      apache-2.0/src/main/http_protocol.c
  
  Index: http_protocol.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_protocol.c,v
  retrieving revision 1.44
  retrieving revision 1.45
  diff -u -r1.44 -r1.45
  --- http_protocol.c	1999/12/21 16:21:44	1.44
  +++ http_protocol.c	2000/01/06 14:43:27	1.45
  @@ -537,11 +537,11 @@
       ap_timediff(r->request_time, r->mtime, &diff);
       weak = ((diff > 1) && !force_weak) ? "" : "W/";
   
  -    if (r->finfo.st_mode != 0) {
  +    if (r->finfo.protection != 0) {
           etag = ap_psprintf(r->pool,
                       "%s\"%lx-%lx-%lx\"", weak,
  -                    (unsigned long) r->finfo.st_ino,
  -                    (unsigned long) r->finfo.st_size,
  +                    (unsigned long) r->finfo.inode,
  +                    (unsigned long) r->finfo.size,
                       (unsigned long) r->mtime);
       }
       else {
  
  
  
  1.12      +16 -16    apache-2.0/src/main/http_request.c
  
  Index: http_request.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/http_request.c,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- http_request.c	1999/12/20 16:38:35	1.11
  +++ http_request.c	2000/01/06 14:43:27	1.12
  @@ -116,10 +116,10 @@
   static int check_safe_file(request_rec *r)
   {
   
  -    if (r->finfo.st_mode == 0         /* doesn't exist */
  -        || S_ISDIR(r->finfo.st_mode)
  -        || S_ISREG(r->finfo.st_mode)
  -        || S_ISLNK(r->finfo.st_mode)) {
  +    if (r->finfo.protection == 0         /* doesn't exist */
  +        || S_ISDIR(r->finfo.protection)
  +        || S_ISREG(r->finfo.protection)
  +        || S_ISLNK(r->finfo.protection)) {
           return OK;
       }
       ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
  @@ -200,7 +200,7 @@
       char bStripSlash=1;
   #endif
   
  -    if (r->finfo.st_mode) {
  +    if (r->finfo.protection) {
   	/* assume path_info already set */
   	return OK;
       }
  @@ -260,20 +260,20 @@
            }
            else {
                errno = 0;
  -             rv = stat(path, &r->finfo);
  +             rv = ap_stat(&r->finfo, path, r->pool);
            }
   
           if (cp != end)
               *cp = '/';
   
  -        if (!rv) {    
  +        if (rv != APR_SUCCESS) {    
               /*
                * Aha!  Found something.  If it was a directory, we will search
                * contents of that directory for a multi_match, so the PATH_INFO
                * argument starts with the component after that.
                */
  -            if (S_ISDIR(r->finfo.st_mode) && last_cp) {
  -                r->finfo.st_mode = 0;   /* No such file... */
  +            if (S_ISDIR(r->finfo.protection) && last_cp) {
  +                r->finfo.protection = 0;   /* No such file... */
                   cp = last_cp;
               }
   
  @@ -284,7 +284,7 @@
   	/* must set this to zero, some stat()s may have corrupted it
   	 * even if they returned an error.
   	 */
  -	r->finfo.st_mode = 0;
  +	r->finfo.protection = 0;
   
   #if defined(ENOENT) && defined(ENOTDIR)
           if (errno == ENOENT || errno == ENOTDIR) {
  @@ -354,7 +354,7 @@
   
       if (r->filename == NULL) {
           r->filename = ap_pstrdup(r->pool, r->uri);
  -        r->finfo.st_mode = 0;   /* Not really a file... */
  +        r->finfo.protection = 0;   /* Not really a file... */
           r->per_dir_config = per_dir_defaults;
   
           return OK;
  @@ -436,7 +436,7 @@
       if (test_filename[test_filename_len - 1] == '/')
           --num_dirs;
   
  -    if (S_ISDIR(r->finfo.st_mode))     
  +    if (S_ISDIR(r->finfo.protection))     
           ++num_dirs;
   
       /*
  @@ -571,7 +571,7 @@
        * S_ISDIR test.  But if you accessed /symlink/index.html, for example,
        * you would *not* get the 403.
        */
  -    if (!S_ISDIR(r->finfo.st_mode) 
  +    if (!S_ISDIR(r->finfo.protection) 
           && (res = check_symlinks(r->filename, ap_allow_options(r)))) {
           ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
                       "Symbolic link not allowed: %s", r->filename);
  @@ -860,8 +860,8 @@
           rnew->filename = ap_make_full_path(rnew->pool, fdir, new_file);
           ap_parse_uri(rnew, rnew->uri);    /* fill in parsed_uri values */
   
  -        if (stat(rnew->filename, &rnew->finfo) < 0) {
  -            rnew->finfo.st_mode = 0;
  +        if (ap_stat(&rnew->finfo, rnew->filename, rnew->pool) != APR_SUCCESS) {
  +            rnew->finfo.protection = 0;
           }
   
           if ((res = check_safe_file(rnew))) {
  @@ -875,7 +875,7 @@
            * no matter what, if it's a subdirectory, we need to re-run
            * directory_walk
            */
  -        if (S_ISDIR(rnew->finfo.st_mode)) {  
  +        if (S_ISDIR(rnew->finfo.protection)) {  
               res = directory_walk(rnew);
               if (!res) {
                   res = file_walk(rnew);
  
  
  
  1.24      +3 -1      apache-2.0/src/main/util.c
  
  Index: util.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/main/util.c,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- util.c	2000/01/04 19:00:53	1.23
  +++ util.c	2000/01/06 14:43:28	1.24
  @@ -766,6 +766,7 @@
   {
       configfile_t *new_cfg;
       ap_file_t *file = NULL;
  +    ap_finfo_t finfo;
       ap_status_t stat;
       ap_filetype_e type;
   
  @@ -791,7 +792,8 @@
       if (stat != APR_SUCCESS)
           return stat;
   
  -    stat = ap_get_filetype(&type, file);
  +    ap_getfileinfo(&finfo, file);
  +    stat = ap_get_filetype(&type, finfo.protection);
       if (stat != APR_SUCCESS)
           return stat;
   
  
  
  
  1.5       +1 -1      apache-2.0/src/modules/standard/mod_actions.c
  
  Index: mod_actions.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_actions.c,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- mod_actions.c	1999/10/20 12:50:07	1.4
  +++ mod_actions.c	2000/01/06 14:43:37	1.5
  @@ -187,7 +187,7 @@
       if ((t = ap_table_get(conf->action_types,
   		       action ? action : ap_default_type(r)))) {
   	script = t;
  -	if (r->finfo.st_mode == 0) {
  +	if (r->finfo.protection == 0) {
   	    ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
   			"File does not exist: %s", r->filename);
   	    return NOT_FOUND;
  
  
  
  1.14      +1 -1      apache-2.0/src/modules/standard/mod_asis.c
  
  Index: mod_asis.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_asis.c,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- mod_asis.c	2000/01/04 19:01:00	1.13
  +++ mod_asis.c	2000/01/06 14:43:37	1.14
  @@ -72,7 +72,7 @@
       r->allowed |= (1 << M_GET);
       if (r->method_number != M_GET)
   	return DECLINED;
  -    if (r->finfo.st_mode == 0) {
  +    if (r->finfo.protection == 0) {
   	ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
   		    "File does not exist: %s", r->filename);
   	return NOT_FOUND;
  
  
  
  1.16      +6 -6      apache-2.0/src/modules/standard/mod_autoindex.c
  
  Index: mod_autoindex.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_autoindex.c,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- mod_autoindex.c	2000/01/04 19:01:01	1.15
  +++ mod_autoindex.c	2000/01/06 14:43:38	1.16
  @@ -953,7 +953,7 @@
   	&& (rr = ap_sub_req_lookup_uri(header_fname, r))
   	&& (rr->status == HTTP_OK)
   	&& (rr->filename != NULL)
  -	&& S_ISREG(rr->finfo.st_mode)) {
  +	&& S_ISREG(rr->finfo.protection)) {
   	/*
   	 * Check for the two specific cases we allow: text/html and
   	 * text/anything-else.  The former is allowed to be processed for
  @@ -1036,7 +1036,7 @@
   	&& (rr = ap_sub_req_lookup_uri(readme_fname, r))
   	&& (rr->status == HTTP_OK)
   	&& (rr->filename != NULL)
  -	&& S_ISREG(rr->finfo.st_mode)) {
  +	&& S_ISREG(rr->finfo.protection)) {
   	/*
   	 * Check for the two specific cases we allow: text/html and
   	 * text/anything-else.  The former is allowed to be processed for
  @@ -1161,9 +1161,9 @@
       if (autoindex_opts & FANCY_INDEXING) {
           request_rec *rr = ap_sub_req_lookup_file(name, r);
   
  -	if (rr->finfo.st_mode != 0) {
  -	    p->lm = rr->finfo.st_mtime;
  -	    if (S_ISDIR(rr->finfo.st_mode)) {
  +	if (rr->finfo.protection != 0) {
  +	    ap_get_curtime(rr->finfo.mtime, (ap_int64_t *)&p->lm);
  +	    if (S_ISDIR(rr->finfo.protection)) {
   	        if (!(p->icon = find_icon(d, rr, 1))) {
   		    p->icon = find_default_icon(d, "^^DIRECTORY^^");
   		}
  @@ -1176,7 +1176,7 @@
   	    else {
   		p->icon = find_icon(d, rr, 0);
   		p->alt = find_alt(d, rr, 0);
  -		p->size = rr->finfo.st_size;
  +		p->size = rr->finfo.size;
   	    }
   	}
   
  
  
  
  1.23      +2 -2      apache-2.0/src/modules/standard/mod_cgi.c
  
  Index: mod_cgi.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_cgi.c,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- mod_cgi.c	2000/01/04 19:01:01	1.22
  +++ mod_cgi.c	2000/01/06 14:43:38	1.23
  @@ -492,11 +492,11 @@
           }
       }
   #else
  -    if (r->finfo.st_mode == 0)
  +    if (r->finfo.protection == 0)
   	return log_scripterror(r, conf, NOT_FOUND, APLOG_NOERRNO,
   			       "script not found or unable to stat");
   #endif
  -    if (S_ISDIR(r->finfo.st_mode))
  +    if (S_ISDIR(r->finfo.protection))
   	return log_scripterror(r, conf, FORBIDDEN, APLOG_NOERRNO,
   			       "attempt to invoke directory as script");
   
  
  
  
  1.4       +1 -1      apache-2.0/src/modules/standard/mod_dir.c
  
  Index: mod_dir.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_dir.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- mod_dir.c	1999/08/31 05:33:47	1.3
  +++ mod_dir.c	2000/01/06 14:43:39	1.4
  @@ -161,7 +161,7 @@
           char *name_ptr = *names_ptr;
           request_rec *rr = ap_sub_req_lookup_uri(name_ptr, r);
   
  -        if (rr->status == HTTP_OK && S_ISREG(rr->finfo.st_mode)) {
  +        if (rr->status == HTTP_OK && S_ISREG(rr->finfo.protection)) {
               char *new_uri = ap_escape_uri(r->pool, rr->uri);
   
               if (rr->args != NULL)
  
  
  
  1.15      +12 -20    apache-2.0/src/modules/standard/mod_include.c
  
  Index: mod_include.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_include.c,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- mod_include.c	2000/01/04 19:01:02	1.14
  +++ mod_include.c	2000/01/06 14:43:39	1.15
  @@ -127,23 +127,21 @@
       ap_time_t *date = r->request_time;
       ap_time_t *mtime = NULL;
   
  -    ap_make_time(&mtime, r->pool);
  -    ap_set_curtime(mtime, r->finfo.st_mtime); 
   
       ap_table_setn(e, "DATE_LOCAL", ap_ht_time(r->pool, date, timefmt, 0));
       ap_table_setn(e, "DATE_GMT", ap_ht_time(r->pool, date, timefmt, 1));
       ap_table_setn(e, "LAST_MODIFIED",
  -              ap_ht_time(r->pool, mtime, timefmt, 0));
  +              ap_ht_time(r->pool, r->finfo.mtime, timefmt, 0));
       ap_table_setn(e, "DOCUMENT_URI", r->uri);
       ap_table_setn(e, "DOCUMENT_PATH_INFO", r->path_info);
   #ifndef WIN32
  -    pw = getpwuid(r->finfo.st_uid);
  +    pw = getpwuid(r->finfo.user);
       if (pw) {
           ap_table_setn(e, "USER_NAME", ap_pstrdup(r->pool, pw->pw_name));
       }
       else {
           ap_table_setn(e, "USER_NAME", ap_psprintf(r->pool, "user#%lu",
  -                    (unsigned long) r->finfo.st_uid));
  +                    (unsigned long) r->finfo.user));
       }
   #endif /* ndef WIN32 */
   
  @@ -596,7 +594,7 @@
       if ((rr->path_info && rr->path_info[0]) || rr->args) {
           return -1;
       }
  -    if (rr->finfo.st_mode == 0) {
  +    if (rr->finfo.protection == 0) {
           return -1;
       }
   
  @@ -1026,16 +1024,12 @@
           }
           else if (!strcmp(tag, "timefmt")) {
               ap_time_t *date = r->request_time;
  -            ap_time_t *mtime = NULL;
   
  -            ap_make_time(&mtime, r->pool);
  -            ap_set_curtime(mtime, r->finfo.st_mtime);
  -
               parse_string(r, tag_val, tf, MAX_STRING_LEN, 0);
               ap_table_setn(env, "DATE_LOCAL", ap_ht_time(r->pool, date, tf, 0));
               ap_table_setn(env, "DATE_GMT", ap_ht_time(r->pool, date, tf, 1));
               ap_table_setn(env, "LAST_MODIFIED",
  -                      ap_ht_time(r->pool, mtime, tf, 0));
  +                      ap_ht_time(r->pool, r->finfo.mtime, tf, 0));
           }
           else if (!strcmp(tag, "sizefmt")) {
               parse_string(r, tag_val, parsed_string, sizeof(parsed_string), 0);
  @@ -1078,7 +1072,7 @@
               ap_getparents(tag_val);    /* get rid of any nasties */
               rr = ap_sub_req_lookup_file(tag_val, r);
   
  -            if (rr->status == HTTP_OK && rr->finfo.st_mode != 0) {
  +            if (rr->status == HTTP_OK && rr->finfo.protection != 0) {
                   to_send = rr->filename;
                   if (stat(to_send, finfo)) {
                       error_fmt = "unable to get information about \"%s\" "
  @@ -1104,7 +1098,7 @@
       else if (!strcmp(tag, "virtual")) {
           rr = ap_sub_req_lookup_uri(tag_val, r);
   
  -        if (rr->status == HTTP_OK && rr->finfo.st_mode != 0) {
  +        if (rr->status == HTTP_OK && rr->finfo.protection != 0) {
               memcpy((char *) finfo, (const char *) &rr->finfo,
                      sizeof(struct stat));
               ap_destroy_sub_req(rr);
  @@ -2361,7 +2355,7 @@
       if (r->method_number != M_GET) {
           return DECLINED;
       }
  -    if (r->finfo.st_mode == 0) {
  +    if (r->finfo.protection == 0) {
           ap_log_rerror(APLOG_MARK, APLOG_NOERRNO|APLOG_ERR, 0, r,
   		    "File does not exist: %s",
                       (r->path_info
  @@ -2381,12 +2375,10 @@
       if ((*state == xbithack_full)
   #if !defined(OS2) && !defined(WIN32)
       /*  OS/2 dosen't support Groups. */
  -        && (r->finfo.st_mode & S_IXGRP)
  +        && (r->finfo.protection & S_IXGRP)
   #endif
           ) {
  -        ap_make_time(&mtime, r->pool);
  -        ap_set_curtime(mtime, r->finfo.st_mtime);
  -        ap_update_mtime(r, mtime);
  +        ap_update_mtime(r, r->finfo.mtime);
           ap_set_last_modified(r);
       }
       if ((errstatus = ap_meets_conditions(r)) != OK) {
  @@ -2411,7 +2403,7 @@
   	 */
   	r->subprocess_env = parent->subprocess_env;
   	ap_pool_join(parent->pool, r->pool);
  -	r->finfo.st_mtime = parent->finfo.st_mtime;
  +	r->finfo.mtime = parent->finfo.mtime;
       }
       else {
   	/* we're not a nested include, so we create an initial
  @@ -2455,7 +2447,7 @@
   #else
       enum xbithack *state;
   
  -    if (!(r->finfo.st_mode & S_IXUSR)) {
  +    if (!(r->finfo.protection & S_IXUSR)) {
           return DECLINED;
       }
   
  
  
  
  1.6       +1 -1      apache-2.0/src/modules/standard/mod_mime.c
  
  Index: mod_mime.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_mime.c,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- mod_mime.c	1999/11/02 15:15:08	1.5
  +++ mod_mime.c	2000/01/06 14:43:40	1.6
  @@ -286,7 +286,7 @@
       const char *orighandler = r->handler;
       const char *type;
   
  -    if (S_ISDIR(r->finfo.st_mode)) {
  +    if (S_ISDIR(r->finfo.protection)) {
           r->content_type = DIR_MAGIC_TYPE;
           return OK;
       }
  
  
  
  1.15      +3 -6      apache-2.0/src/modules/standard/mod_negotiation.c
  
  Index: mod_negotiation.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_negotiation.c,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- mod_negotiation.c	2000/01/04 19:01:04	1.14
  +++ mod_negotiation.c	2000/01/06 14:43:40	1.15
  @@ -284,15 +284,12 @@
   
   static void set_vlist_validator(request_rec *r, request_rec *vlistr)
   {
  -    ap_time_t *temp;
       /* Calculating the variant list validator is similar to
        * calculating an etag for the source of the variant list
        * information, so we use ap_make_etag().  Note that this
        * validator can be 'weak' in extreme case.
        */
  -    ap_make_time(&temp, vlistr->pool);
  -    ap_set_curtime(temp, vlistr->finfo.st_mtime);
  -    ap_update_mtime(vlistr, temp);
  +    ap_update_mtime(vlistr, vlistr->finfo.mtime);
       r->vlist_validator = ap_make_etag(vlistr, 0);
   
       /* ap_set_etag will later take r->vlist_validator into account
  @@ -2581,7 +2578,7 @@
       int res;
       int j;
   
  -    if (r->finfo.st_mode != 0 || !(ap_allow_options(r) & OPT_MULTI)) {
  +    if (r->finfo.protection != 0 || !(ap_allow_options(r) & OPT_MULTI)) {
           return DECLINED;
       }
   
  @@ -2624,7 +2621,7 @@
   
       /* BLECH --- don't multi-resolve non-ordinary files */
   
  -    if (!S_ISREG(sub_req->finfo.st_mode)) {
  +    if (!S_ISREG(sub_req->finfo.protection)) {
           res = NOT_FOUND;
           goto return_from_multi;
       }
  
  
  
  1.4       +3 -2      apache-2.0/src/modules/standard/mod_userdir.c
  
  Index: mod_userdir.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/modules/standard/mod_userdir.c,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- mod_userdir.c	1999/08/31 05:34:04	1.3
  +++ mod_userdir.c	2000/01/06 14:43:41	1.4
  @@ -199,7 +199,7 @@
       const char *w, *dname;
       char *redirect;
       char *x = NULL;
  -    struct stat statbuf;
  +    ap_finfo_t statbuf;
   
       /*
        * If the URI doesn't match our basic pattern, we've nothing to do with
  @@ -313,7 +313,8 @@
            * anyway, in the hope that some handler might handle it. This can be
            * used, for example, to run a CGI script for the user.
            */
  -        if (filename && (!*userdirs || stat(filename, &statbuf) != -1)) {
  +        if (filename && (!*userdirs || 
  +            ap_stat(&statbuf, filename, r->pool) == APR_SUCCESS)) {
               r->filename = ap_pstrcat(r->pool, filename, dname, NULL);
   	    /* when statbuf contains info on r->filename we can save a syscall
   	     * by copying it to r->finfo
  
  
  

Re: cvs commit: apache-2.0/src/modules/standard mod_actions.c mod_asis.c mod_autoindex.c mod_cgi.c mod_dir.c mod_include.c mod_mime.c mod_negotiation.c mod_userdir.c

Posted by Manoj Kasichainula <ma...@io.com>.
On Tue, Mar 21, 2000 at 05:12:06PM -0800, Dean Gaudet wrote:
> On Sun, 9 Jan 2000 rbb@apache.org wrote:
> 
> > 2) Merge the IOL stuff into APR types.  This was discussed a while ago,
> > and there are people who don't like this idea, but it does solve this
> > problem.
> 
> who doesn't like it and why?

I used to not like it, but I've changed my mind (I think :). 


Re: cvs commit: apache-2.0/src/modules/standard mod_actions.c mod_asis.c mod_autoindex.c mod_cgi.c mod_dir.c mod_include.c mod_mime.c mod_negotiation.c mod_userdir.c

Posted by Dean Gaudet <dg...@arctic.org>.

On Sun, 9 Jan 2000 rbb@apache.org wrote:

> 2) Merge the IOL stuff into APR types.  This was discussed a while ago,
> and there are people who don't like this idea, but it does solve this
> problem.

who doesn't like it and why?

> 3) Re-design the IOL stuff to hide the internals a bit less.
> 
> I really don't care what we do, but I see no way to redesign this code to
> fix the problem without affecting the IOL's in some big way.  I'll
> probably put this off until tomorrow, because I don't really feel like
> dealing with it today.

i tried to stress a long time ago that iols were just something to get me
up and going... proof of concept.  i figured that when ben demonstrated
ssl that it was "good enough" for now.

by all means, do something more complicated.

might i suggest looking at NSPR again?  :)  just look at what their
layering provides.

Dean


Re: cvs commit: apache-2.0/src/modules/standard mod_actions.c mod_asis.c mod_autoindex.c mod_cgi.c mod_dir.c mod_include.c mod_mime.c mod_negotiation.c mod_userdir.c

Posted by Brian Havard <br...@kheldar.apana.org.au>.
On Mon, 10 Jan 2000 07:04:17 -0500 (EST), Ryan Bloom wrote:

>
>Please, commit away.  :-)

Ok, but it may take a little while to get my source tree cleaned up a bit.
I've got a few other assorted changes mixed in.



>> There's an easy way to do it, just add a filetype field to ap_finfo_t and set
>> it when doing the stat. This removes the need for ap_get_filetype()
>> altogether just like ap_get_filesize() & friends.
>> 
>> This also requires that tests like "S_ISDIR(finfo.protection)" are changed to
>> "finfo.filetype == APR_DIR".
>> 
>> I've already implemented this for OS/2 and have a running server using it. If
>> there are no objections I'll commit it.

-- 
 ______________________________________________________________________________
 |  Brian Havard                 |  "He is not the messiah!                   |
 |  brianh@kheldar.apana.org.au  |  He's a very naughty boy!" - Life of Brian |
 ------------------------------------------------------------------------------


Re: cvs commit: apache-2.0/src/modules/standard mod_actions.c mod_asis.c mod_autoindex.c mod_cgi.c mod_dir.c mod_include.c mod_mime.c mod_negotiation.c mod_userdir.c

Posted by Ryan Bloom <rb...@raleigh.ibm.com>.
Please, commit away.  :-)

Ryan

> There's an easy way to do it, just add a filetype field to ap_finfo_t and set
> it when doing the stat. This removes the need for ap_get_filetype()
> altogether just like ap_get_filesize() & friends.
> 
> This also requires that tests like "S_ISDIR(finfo.protection)" are changed to
> "finfo.filetype == APR_DIR".
> 
> I've already implemented this for OS/2 and have a running server using it. If
> there are no objections I'll commit it.


_______________________________________________________________________
Ryan Bloom		rbb@raleigh.ibm.com
4205 S Miami Blvd	
RTP, NC 27709		

Come to the first official Apache Software Foundation
Conference!  <http://ApacheCon.Com/>



Re: cvs commit: apache-2.0/src/modules/standard mod_actions.c mod_asis.c mod_autoindex.c mod_cgi.c mod_dir.c mod_include.c mod_mime.c mod_negotiation.c mod_userdir.c

Posted by Brian Havard <br...@kheldar.apana.org.au>.
On Sun, 9 Jan 2000 16:07:17 -0500 (EST), rbb@apache.org wrote:

>
>> >  -ap_status_t ap_get_filetype(ap_filetype_e *, ap_file_t *);
>> >  +ap_status_t ap_get_filetype(ap_filetype_e *, ap_fileperms_t);
>> 
>> This API change is not right. It assumes a file's type can be derived from a
>> ap_fileperms_t which is not true for all platforms, probably only true for
>> unix. The OS/2 implementation of ap_get_filetype() needs the file handle.
>
>This is actually harder to do than I had hoped.  The problem is that
>Apache no longer stores a copy of the file handle in the request
>structure.  Now, we store a pointer to an IOL, which if you follow far
>enough, you can resolve to a file handle.  This is what caused me to make
>this change originally.  I think we basically have a few options.
>
>1) Add a ap_iol_filetype which returns the file type from the IOL.
>
>2) Merge the IOL stuff into APR types.  This was discussed a while ago,
>and there are people who don't like this idea, but it does solve this
>problem.
>
>3) Re-design the IOL stuff to hide the internals a bit less.
>
>I really don't care what we do, but I see no way to redesign this code to
>fix the problem without affecting the IOL's in some big way.  I'll
>probably put this off until tomorrow, because I don't really feel like
>dealing with it today.

There's an easy way to do it, just add a filetype field to ap_finfo_t and set
it when doing the stat. This removes the need for ap_get_filetype()
altogether just like ap_get_filesize() & friends.

This also requires that tests like "S_ISDIR(finfo.protection)" are changed to
"finfo.filetype == APR_DIR".

I've already implemented this for OS/2 and have a running server using it. If
there are no objections I'll commit it.

-- 
 ______________________________________________________________________________
 |  Brian Havard                 |  "He is not the messiah!                   |
 |  brianh@kheldar.apana.org.au  |  He's a very naughty boy!" - Life of Brian |
 ------------------------------------------------------------------------------


Re: cvs commit: apache-2.0/src/modules/standard mod_actions.c mod_asis.c mod_autoindex.c mod_cgi.c mod_dir.c mod_include.c mod_mime.c mod_negotiation.c mod_userdir.c

Posted by rb...@apache.org.
> >  -ap_status_t ap_get_filetype(ap_filetype_e *, ap_file_t *);
> >  +ap_status_t ap_get_filetype(ap_filetype_e *, ap_fileperms_t);
> 
> This API change is not right. It assumes a file's type can be derived from a
> ap_fileperms_t which is not true for all platforms, probably only true for
> unix. The OS/2 implementation of ap_get_filetype() needs the file handle.

This is actually harder to do than I had hoped.  The problem is that
Apache no longer stores a copy of the file handle in the request
structure.  Now, we store a pointer to an IOL, which if you follow far
enough, you can resolve to a file handle.  This is what caused me to make
this change originally.  I think we basically have a few options.

1) Add a ap_iol_filetype which returns the file type from the IOL.

2) Merge the IOL stuff into APR types.  This was discussed a while ago,
and there are people who don't like this idea, but it does solve this
problem.

3) Re-design the IOL stuff to hide the internals a bit less.

I really don't care what we do, but I see no way to redesign this code to
fix the problem without affecting the IOL's in some big way.  I'll
probably put this off until tomorrow, because I don't really feel like
dealing with it today.

Ryan

_______________________________________________________________________________
Ryan Bloom                        	rbb@ntrnet.net
6209 H Shanda Dr.
Raleigh, NC 27609		Ryan Bloom -- thinker, adventurer, artist,
				     writer, but mostly, friend.
-------------------------------------------------------------------------------


Re: cvs commit: apache-2.0/src/modules/standard mod_actions.c mod_asis.c mod_autoindex.c mod_cgi.c mod_dir.c mod_include.c mod_mime.c mod_negotiation.c mod_userdir.c

Posted by rb...@apache.org.
> >  -ap_status_t ap_get_filetype(ap_filetype_e *, ap_file_t *);
> >  +ap_status_t ap_get_filetype(ap_filetype_e *, ap_fileperms_t);
> 
> This API change is not right. It assumes a file's type can be derived from a
> ap_fileperms_t which is not true for all platforms, probably only true for
> unix. The OS/2 implementation of ap_get_filetype() needs the file handle.

Okay, fair enough.  I'll change it back today.  :)

Ryan

_______________________________________________________________________________
Ryan Bloom                        	rbb@ntrnet.net
6209 H Shanda Dr.
Raleigh, NC 27609		Ryan Bloom -- thinker, adventurer, artist,
				     writer, but mostly, friend.
-------------------------------------------------------------------------------


Re: cvs commit: apache-2.0/src/modules/standard mod_actions.c mod_asis.c mod_autoindex.c mod_cgi.c mod_dir.c mod_include.c mod_mime.c mod_negotiation.c mod_userdir.c

Posted by Brian Havard <br...@kheldar.apana.org.au>.
On 6 Jan 2000 14:43:52 -0000, rbb@hyperreal.org wrote:

>rbb         00/01/06 06:43:51
>
>  Modified:    src/include httpd.h
>               src/lib/apr/file_io/unix fileacc.c filedup.c fileio.h
>                        filestat.c open.c pipe.c readwrite.c
>               src/lib/apr/include apr_file_io.h
>               src/lib/apr/test ab_apr.c testmmap.c
>               src/main http_config.c http_core.c http_log.c
>                        http_protocol.c http_request.c util.c
>               src/modules/standard mod_actions.c mod_asis.c
>                        mod_autoindex.c mod_cgi.c mod_dir.c mod_include.c
>                        mod_mime.c mod_negotiation.c mod_userdir.c
>  Log:
>  Separate the stat structure from the file structure and use ap_stat and
>  ap_getfileinfo in apache.
>  
>  Revision  Changes    Path

[...]

>  1.26      +20 -9     apache-2.0/src/lib/apr/include/apr_file_io.h
>  
>  Index: apr_file_io.h
>  ===================================================================
>  RCS file: /home/cvs/apache-2.0/src/lib/apr/include/apr_file_io.h,v
>  retrieving revision 1.25
>  retrieving revision 1.26
>  diff -u -r1.25 -r1.26
>  --- apr_file_io.h	2000/01/04 19:00:44	1.25
>  +++ apr_file_io.h	2000/01/06 14:43:19	1.26

[...]

>  -ap_status_t ap_get_filetype(ap_filetype_e *, ap_file_t *);
>  +ap_status_t ap_get_filetype(ap_filetype_e *, ap_fileperms_t);

This API change is not right. It assumes a file's type can be derived from a
ap_fileperms_t which is not true for all platforms, probably only true for
unix. The OS/2 implementation of ap_get_filetype() needs the file handle.

-- 
 ______________________________________________________________________________
 |  Brian Havard                 |  "He is not the messiah!                   |
 |  brianh@kheldar.apana.org.au  |  He's a very naughty boy!" - Life of Brian |
 ------------------------------------------------------------------------------