You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@httpd.apache.org by gs...@locus.apache.org on 2000/07/03 14:06:42 UTC

cvs commit: apache-2.0/src/lib/apr/file_io/win32 filestat.c

gstein      00/07/03 05:06:40

  Modified:    src/lib/apr/include apr_file_io.h
               src/lib/apr/file_io/os2 filestat.c
               src/lib/apr/file_io/unix dir.c fileacc.c fileio.h filestat.c
                        open.c pipe.c
               src/lib/apr/file_io/win32 filestat.c
  Log:
  add ap_finfo_t.device
  add ap_setfileperms() for setting file permissions (chmod cover).
      - OS/2 and Win32 currently return APR_ENOTIMPL
  fix the file perm handling in APR: some conversion between ap_fileperms_t
      and mode_t was not occurring; adding new conversion function; renamed
      old conversion func.
  
  Revision  Changes    Path
  1.58      +23 -3     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.57
  retrieving revision 1.58
  diff -u -r1.57 -r1.58
  --- apr_file_io.h	2000/06/20 19:36:33	1.57
  +++ apr_file_io.h	2000/07/03 12:06:26	1.58
  @@ -111,6 +111,7 @@
   typedef uid_t                    ap_uid_t;
   typedef gid_t                    ap_gid_t;
   typedef ino_t                    ap_ino_t;
  +typedef dev_t                    ap_dev_t;
   
   struct ap_finfo_t {
       ap_fileperms_t protection;
  @@ -118,6 +119,7 @@
       ap_uid_t user;
       ap_gid_t group;
       ap_ino_t inode;
  +    ap_dev_t device;
       ap_off_t size;
       ap_time_t atime;
       ap_time_t mtime;
  @@ -362,7 +364,7 @@
   B<Put the string into a specified file.>
   
       arg 1) The string to write. 
  -    arg 2) The file descriptor to write to from
  +    arg 2) The file descriptor to write to
   
   =cut
    */
  @@ -402,14 +404,32 @@
   
   =head1 ap_status_t ap_getfileinfo(ap_finfo_t *finfo, ap_file_t *thefile)
   
  -B<get the specified file's stats..>
  +B<get the specified file's stats.>
   
       arg 1) Where to store the information about the file.
  -    arg 2) The file to get information about. 
  +    arg 2) The file to get information about.
   
   =cut
    */ 
   ap_status_t ap_getfileinfo(ap_finfo_t *finfo, ap_file_t *thefile);
  +
  +/*
  +
  +=head1 ap_status_t ap_setfileperms(const char *fname, ap_fileperms_t perms)
  +
  +B<set the specified file's permission bits.>
  +
  +    arg 1) The file (name) to apply the permissions to.
  +    arg 2) The permission bits to apply to the file.
  +
  +   Some platforms may not be able to apply all of the available permission
  +   bits; APR_INCOMPLETE will be returned if some permissions are specified
  +   which could not be set.
  +
  +   Platforms which do not implement this feature will return APR_ENOTIMPL.
  +=cut
  + */
  +ap_status_t ap_setfileperms(const char *fname, ap_fileperms_t perms);
   
   /*
   
  
  
  
  1.10      +5 -0      apache-2.0/src/lib/apr/file_io/os2/filestat.c
  
  Index: filestat.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/os2/filestat.c,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- filestat.c	2000/04/14 15:58:21	1.9
  +++ filestat.c	2000/07/03 12:06:27	1.10
  @@ -73,6 +73,7 @@
       finfo->user = 0;
       finfo->group = 0;
       finfo->inode = 0;
  +    finfo->device = 0;
       finfo->size = fstatus->cbFile;
       ap_os2_time_to_ap_time(&finfo->atime, fstatus->fdateLastAccess, fstatus->ftimeLastAccess );
       ap_os2_time_to_ap_time(&finfo->mtime, fstatus->fdateLastWrite,  fstatus->ftimeLastWrite );
  @@ -136,6 +137,10 @@
       return APR_OS2_STATUS(rc);
   }
   
  +ap_status_t ap_setfileperms(const char *fname, ap_fileperms_t perms)
  +{
  +    return APR_ENOTIMPL;
  +}
   
   
   ap_status_t ap_stat(ap_finfo_t *finfo, const char *fname, ap_pool_t *cont)
  
  
  
  1.34      +1 -1      apache-2.0/src/lib/apr/file_io/unix/dir.c
  
  Index: dir.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/unix/dir.c,v
  retrieving revision 1.33
  retrieving revision 1.34
  diff -u -r1.33 -r1.34
  --- dir.c	2000/04/30 21:17:55	1.33
  +++ dir.c	2000/07/03 12:06:28	1.34
  @@ -142,7 +142,7 @@
   
   ap_status_t ap_make_dir(const char *path, ap_fileperms_t perm, ap_pool_t *cont)
   {
  -    mode_t mode = ap_unix_get_fileperms(perm);
  +    mode_t mode = ap_unix_perms2mode(perm);
   
       if (mkdir(path, mode) == 0) {
           return APR_SUCCESS;
  
  
  
  1.29      +51 -23    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.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- fileacc.c	2000/05/24 22:32:28	1.28
  +++ fileacc.c	2000/07/03 12:06:28	1.29
  @@ -82,32 +82,60 @@
   }
   
   #if !defined(OS2) && !defined(WIN32)
  -mode_t ap_unix_get_fileperms(ap_fileperms_t mode)
  +mode_t ap_unix_perms2mode(ap_fileperms_t perms)
   {
  -    mode_t rv = 0;
  +    mode_t mode = 0;
   
  -    if (mode & APR_UREAD)
  -        rv |= S_IRUSR;
  -    if (mode & APR_UWRITE)
  -        rv |= S_IWUSR;
  -    if (mode & APR_UEXECUTE)
  -        rv |= S_IXUSR;
  -
  -    if (mode & APR_GREAD)
  -        rv |= S_IRGRP;
  -    if (mode & APR_GWRITE)
  -        rv |= S_IWGRP;
  -    if (mode & APR_GEXECUTE)
  -        rv |= S_IXGRP;
  -
  -    if (mode & APR_WREAD)
  -        rv |= S_IROTH;
  -    if (mode & APR_WWRITE)
  -        rv |= S_IWOTH;
  -    if (mode & APR_WEXECUTE)
  -        rv |= S_IXOTH;
  +    if (perms & APR_UREAD)
  +        mode |= S_IRUSR;
  +    if (perms & APR_UWRITE)
  +        mode |= S_IWUSR;
  +    if (perms & APR_UEXECUTE)
  +        mode |= S_IXUSR;
   
  -    return rv;
  +    if (perms & APR_GREAD)
  +        mode |= S_IRGRP;
  +    if (perms & APR_GWRITE)
  +        mode |= S_IWGRP;
  +    if (perms & APR_GEXECUTE)
  +        mode |= S_IXGRP;
  +
  +    if (perms & APR_WREAD)
  +        mode |= S_IROTH;
  +    if (perms & APR_WWRITE)
  +        mode |= S_IWOTH;
  +    if (perms & APR_WEXECUTE)
  +        mode |= S_IXOTH;
  +
  +    return mode;
  +}
  +
  +ap_fileperms_t ap_unix_mode2perms(mode_t mode)
  +{
  +    ap_fileperms_t perms = 0;
  +
  +    if (mode & S_IRUSR)
  +        perms |= APR_UREAD;
  +    if (mode & S_IWUSR)
  +        perms |= APR_UWRITE;
  +    if (mode & S_IXUSR)
  +        perms |= APR_UEXECUTE;
  +
  +    if (mode & S_IRGRP)
  +        perms |= APR_GREAD;
  +    if (mode & S_IWGRP)
  +        perms |= APR_GWRITE;
  +    if (mode & S_IXGRP)
  +        perms |= APR_GEXECUTE;
  +
  +    if (mode & S_IROTH)
  +        perms |= APR_WREAD;
  +    if (mode & S_IWOTH)
  +        perms |= APR_WWRITE;
  +    if (mode & S_IXOTH)
  +        perms |= APR_WEXECUTE;
  +
  +    return perms;
   }
   #endif
   
  
  
  
  1.25      +3 -1      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.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- fileio.h	2000/06/28 14:33:29	1.24
  +++ fileio.h	2000/07/03 12:06:29	1.25
  @@ -143,7 +143,9 @@
   };
   
   ap_status_t ap_unix_file_cleanup(void *);
  -mode_t ap_unix_get_fileperms(ap_fileperms_t);
  +
  +mode_t ap_unix_perms2mode(ap_fileperms_t perms);
  +ap_fileperms_t ap_unix_mode2perms(mode_t mode);
   
   #endif  /* ! FILE_IO_H */
   
  
  
  
  1.27      +13 -3     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.26
  retrieving revision 1.27
  diff -u -r1.26 -r1.27
  --- filestat.c	2000/06/12 15:28:50	1.26
  +++ filestat.c	2000/07/03 12:06:29	1.27
  @@ -85,12 +85,13 @@
       struct stat info;
   
       if (fstat(thefile->filedes, &info) == 0) {
  -        finfo->protection = info.st_mode;
  +        finfo->protection = ap_unix_mode2perms(info.st_mode);
           finfo->filetype = filetype_from_mode(info.st_mode);
           finfo->user = info.st_uid;
           finfo->group = info.st_gid;
           finfo->size = info.st_size;
           finfo->inode = info.st_ino;
  +        finfo->device = info.st_dev;
           ap_ansi_time_to_ap_time(&finfo->atime, info.st_atime);
           ap_ansi_time_to_ap_time(&finfo->mtime, info.st_mtime);
           ap_ansi_time_to_ap_time(&finfo->ctime, info.st_ctime);
  @@ -101,12 +102,21 @@
       }
   }
   
  +ap_status_t ap_setfileperms(const char *fname, ap_fileperms_t perms)
  +{
  +    mode_t mode = ap_unix_perms2mode(perms);
  +
  +    if (chmod(fname, mode) == -1)
  +        return errno;
  +    return APR_SUCCESS;
  +}
  +
   ap_status_t ap_stat(ap_finfo_t *finfo, const char *fname, ap_pool_t *cont)
   {
       struct stat info;
   
       if (stat(fname, &info) == 0) {
  -        finfo->protection = info.st_mode;
  +        finfo->protection = ap_unix_mode2perms(info.st_mode);
           finfo->filetype = filetype_from_mode(info.st_mode);
           finfo->user = info.st_uid;
           finfo->group = info.st_gid;
  @@ -127,7 +137,7 @@
       struct stat info;
   
       if (lstat(fname, &info) == 0) {
  -        finfo->protection = info.st_mode;
  +        finfo->protection = ap_unix_mode2perms(info.st_mode);
           finfo->filetype = filetype_from_mode(info.st_mode);
           finfo->user = info.st_uid;
           finfo->group = info.st_gid;
  
  
  
  1.60      +1 -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.59
  retrieving revision 1.60
  diff -u -r1.59 -r1.60
  --- open.c	2000/06/27 01:26:15	1.59
  +++ open.c	2000/07/03 12:06:29	1.60
  @@ -145,7 +145,7 @@
           (*new)->filedes = open(fname, oflags, 0666);
       }
       else {
  -        (*new)->filedes = open(fname, oflags, ap_unix_get_fileperms(perm));
  +        (*new)->filedes = open(fname, oflags, ap_unix_perms2mode(perm));
       }    
   
       if ((*new)->filedes < 0) {
  
  
  
  1.36      +1 -1      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.35
  retrieving revision 1.36
  diff -u -r1.35 -r1.36
  --- pipe.c	2000/06/20 19:36:25	1.35
  +++ pipe.c	2000/07/03 12:06:30	1.36
  @@ -183,7 +183,7 @@
   ap_status_t ap_create_namedpipe(const char *filename, 
                                   ap_fileperms_t perm, ap_pool_t *cont)
   {
  -    mode_t mode = ap_unix_get_fileperms(perm);
  +    mode_t mode = ap_unix_perms2mode(perm);
   
       if (mkfifo(filename, mode) == -1) {
           return errno;
  
  
  
  1.22      +6 -0      apache-2.0/src/lib/apr/file_io/win32/filestat.c
  
  Index: filestat.c
  ===================================================================
  RCS file: /home/cvs/apache-2.0/src/lib/apr/file_io/win32/filestat.c,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- filestat.c	2000/06/20 03:13:30	1.21
  +++ filestat.c	2000/07/03 12:06:38	1.22
  @@ -130,6 +130,7 @@
       finfo->user = 0;
       finfo->group = 0;
       finfo->inode = 0;
  +    finfo->device = 0;  /* ### use drive letter - 'A' ? */
   
       /* Filetype - Directory or file: this case _will_ never happen */
       if (FileInformation.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
  @@ -179,6 +180,11 @@
       finfo->size = FileInformation.nFileSizeLow;
   
       return APR_SUCCESS;
  +}
  +
  +ap_status_t ap_setfileperms(const char *fname, ap_fileperms_t perms)
  +{
  +    return APR_ENOTIMPL;
   }
   
   ap_status_t ap_stat(ap_finfo_t *finfo, const char *fname, ap_pool_t *cont)
  
  
  

Re: cvs commit: apache-2.0/src/lib/apr/file_io/win32 filestat.c

Posted by Greg Stein <gs...@lyra.org>.
On Mon, Jul 03, 2000 at 08:43:04AM -0700, rbb@covalent.net wrote:
> On 3 Jul 2000 gstein@locus.apache.org wrote:
> > gstein      00/07/03 05:06:40
> > 
> >   Modified:    src/lib/apr/include apr_file_io.h
> >                src/lib/apr/file_io/os2 filestat.c
> >                src/lib/apr/file_io/unix dir.c fileacc.c fileio.h filestat.c
> >                         open.c pipe.c
> >                src/lib/apr/file_io/win32 filestat.c
> >   Log:
> >   add ap_finfo_t.device
> >   add ap_setfileperms() for setting file permissions (chmod cover).
> >       - OS/2 and Win32 currently return APR_ENOTIMPL
> >   fix the file perm handling in APR: some conversion between ap_fileperms_t
> >       and mode_t was not occurring; adding new conversion function; renamed
> >       old conversion func.
> >   
> 
> Why were these done in one commit?  These are three VERY distinct
> patches.

It was small and easy work, easy to review, and it was all the same set of
files. Also, I've seen much larger and disparate changes checked in as a
batch before; this didn't even seem close to those.

> I would also like to understand why the function was
> renamed.  This looks like a personal preference as far as the name goes,
> which IMHO is not a great reason for the change.  It isn't worth it to
> rename it back, but this sure looks like a change for the sake of change.

I introduced a second function with the opposite semantics. The rename was
done to create a matched pair of function (ap_unix_perms2mode and
ap_unix_mode2perms). The name also made it clearer what the function did
(ap_unix_get_fileperms() returned a mode_t given an ap_fileperms_t; the new
name makes this a bit more obvious)

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/

Re: cvs commit: apache-2.0/src/lib/apr/file_io/win32 filestat.c

Posted by Greg Stein <gs...@lyra.org>.
On Mon, Jul 03, 2000 at 08:43:04AM -0700, rbb@covalent.net wrote:
> On 3 Jul 2000 gstein@locus.apache.org wrote:
> > gstein      00/07/03 05:06:40
> > 
> >   Modified:    src/lib/apr/include apr_file_io.h
> >                src/lib/apr/file_io/os2 filestat.c
> >                src/lib/apr/file_io/unix dir.c fileacc.c fileio.h filestat.c
> >                         open.c pipe.c
> >                src/lib/apr/file_io/win32 filestat.c
> >   Log:
> >   add ap_finfo_t.device
> >   add ap_setfileperms() for setting file permissions (chmod cover).
> >       - OS/2 and Win32 currently return APR_ENOTIMPL
> >   fix the file perm handling in APR: some conversion between ap_fileperms_t
> >       and mode_t was not occurring; adding new conversion function; renamed
> >       old conversion func.
> >   
> 
> Why were these done in one commit?  These are three VERY distinct
> patches.

It was small and easy work, easy to review, and it was all the same set of
files. Also, I've seen much larger and disparate changes checked in as a
batch before; this didn't even seem close to those.

> I would also like to understand why the function was
> renamed.  This looks like a personal preference as far as the name goes,
> which IMHO is not a great reason for the change.  It isn't worth it to
> rename it back, but this sure looks like a change for the sake of change.

I introduced a second function with the opposite semantics. The rename was
done to create a matched pair of function (ap_unix_perms2mode and
ap_unix_mode2perms). The name also made it clearer what the function did
(ap_unix_get_fileperms() returned a mode_t given an ap_fileperms_t; the new
name makes this a bit more obvious)

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/

Re: cvs commit: apache-2.0/src/lib/apr/file_io/win32 filestat.c

Posted by Greg Stein <gs...@lyra.org>.
On Wed, Jul 05, 2000 at 04:37:53PM +0100, Tony Finch wrote:
> Greg Stein <gs...@lyra.org> wrote:
> >On Mon, Jul 03, 2000 at 08:43:04AM -0700, rbb@covalent.net wrote:
> >> 
> >> Why were these done in one commit?  These are three VERY distinct
> >> patches.
> >
> >It was small and easy work, easy to review, and it was all the same set of
> >files. Also, I've seen much larger and disparate changes checked in as a
> >batch before; this didn't even seem close to those.
> 
> Just because people have done the wrong thing in the past doesn't mean
> the mistake should be repeated.

Why is this such a big deal? We're talking a few dozen lines.

Next time, I'll check it as "APR changes needed for DAV." There. It is now a
"group of related changes" (per the dev guidelines).

Honestly guys... I break up my changes in many cases (e.g. in this case, I
checked in the APR changes as a unit, then the DAV changes as a unit). Also
for this case, the set of files was the same and it all went in together,
after testing the set with the DAV changes.

I really don't see the big deal here, other than simply getting a feeling of
being singled out and harshed on.

Cheers,
-g

-- 
Greg Stein, http://www.lyra.org/

Re: cvs commit: apache-2.0/src/lib/apr/file_io/win32 filestat.c

Posted by Tony Finch <do...@dotat.at>.
Greg Stein <gs...@lyra.org> wrote:
>On Mon, Jul 03, 2000 at 08:43:04AM -0700, rbb@covalent.net wrote:
>> 
>> Why were these done in one commit?  These are three VERY distinct
>> patches.
>
>It was small and easy work, easy to review, and it was all the same set of
>files. Also, I've seen much larger and disparate changes checked in as a
>batch before; this didn't even seem close to those.

Just because people have done the wrong thing in the past doesn't mean
the mistake should be repeated.

Tony.
-- 
f.a.n.finch    fanf@covalent.net    dot@dotat.at
329 itch-fighting cortex ointment

Re: cvs commit: apache-2.0/src/lib/apr/file_io/win32 filestat.c

Posted by rb...@covalent.net.
On 3 Jul 2000 gstein@locus.apache.org wrote:

> gstein      00/07/03 05:06:40
> 
>   Modified:    src/lib/apr/include apr_file_io.h
>                src/lib/apr/file_io/os2 filestat.c
>                src/lib/apr/file_io/unix dir.c fileacc.c fileio.h filestat.c
>                         open.c pipe.c
>                src/lib/apr/file_io/win32 filestat.c
>   Log:
>   add ap_finfo_t.device
>   add ap_setfileperms() for setting file permissions (chmod cover).
>       - OS/2 and Win32 currently return APR_ENOTIMPL
>   fix the file perm handling in APR: some conversion between ap_fileperms_t
>       and mode_t was not occurring; adding new conversion function; renamed
>       old conversion func.
>   

Why were these done in one commit?  These are three VERY distinct
patches.  I would also like to understand why the function was
renamed.  This looks like a personal preference as far as the name goes,
which IMHO is not a great reason for the change.  It isn't worth it to
rename it back, but this sure looks like a change for the sake of change.

Ryan

_______________________________________________________________________________
Ryan Bloom                        	rbb@apache.org
406 29th St.
San Francisco, CA 94131
-------------------------------------------------------------------------------


Re: cvs commit: apache-2.0/src/lib/apr/file_io/win32 filestat.c

Posted by rb...@covalent.net.
On 3 Jul 2000 gstein@locus.apache.org wrote:

> gstein      00/07/03 05:06:40
> 
>   Modified:    src/lib/apr/include apr_file_io.h
>                src/lib/apr/file_io/os2 filestat.c
>                src/lib/apr/file_io/unix dir.c fileacc.c fileio.h filestat.c
>                         open.c pipe.c
>                src/lib/apr/file_io/win32 filestat.c
>   Log:
>   add ap_finfo_t.device
>   add ap_setfileperms() for setting file permissions (chmod cover).
>       - OS/2 and Win32 currently return APR_ENOTIMPL
>   fix the file perm handling in APR: some conversion between ap_fileperms_t
>       and mode_t was not occurring; adding new conversion function; renamed
>       old conversion func.
>   

Why were these done in one commit?  These are three VERY distinct
patches.  I would also like to understand why the function was
renamed.  This looks like a personal preference as far as the name goes,
which IMHO is not a great reason for the change.  It isn't worth it to
rename it back, but this sure looks like a change for the sake of change.

Ryan

_______________________________________________________________________________
Ryan Bloom                        	rbb@apache.org
406 29th St.
San Francisco, CA 94131
-------------------------------------------------------------------------------