apr-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From gst...@apache.org
Subject cvs commit: apr/include apr_file_info.h apr_file_io.h
Date Fri, 01 Feb 2002 01:40:39 GMT
gstein      02/01/31 17:40:39

  Modified:    .        libapr.dsp
               file_io/unix Makefile.in filestat.c
               file_io/win32 filestat.c
               include  apr_file_info.h apr_file_io.h
  Log:
  Add apr_file_copy() and apr_file_append() functions. These are written
  in terms of APR itself, so each platform just uses the one function. A
  future improvement would use CopyFile(Ex) on Windows and sendfile() on
  sendfile-capable systems.
  
  Also add apr_file_attrs_set() for setting file attributes in a logical
  fashion, rather than based on (Posix) permission bits. This is not
  (yet) implemented for Windows, and still needs a way to turn *off* the
  readonly and executable modes.
  
  Submitted by: Philip Martin <philip@codematters.co.uk>
  
  Revision  Changes    Path
  1.55      +4 -0      apr/libapr.dsp
  
  Index: libapr.dsp
  ===================================================================
  RCS file: /home/cvs/apr/libapr.dsp,v
  retrieving revision 1.54
  retrieving revision 1.55
  diff -u -r1.54 -r1.55
  --- libapr.dsp	31 Jan 2002 17:29:09 -0000	1.54
  +++ libapr.dsp	1 Feb 2002 01:40:38 -0000	1.55
  @@ -103,6 +103,10 @@
   # PROP Default_Filter ""
   # Begin Source File
   
  +SOURCE=.\file_io\unix\copy.c
  +# End Source File
  +# Begin Source File
  +
   SOURCE=.\file_io\win32\dir.c
   # End Source File
   # Begin Source File
  
  
  
  1.24      +1 -0      apr/file_io/unix/Makefile.in
  
  Index: Makefile.in
  ===================================================================
  RCS file: /home/cvs/apr/file_io/unix/Makefile.in,v
  retrieving revision 1.23
  retrieving revision 1.24
  diff -u -r1.23 -r1.24
  --- Makefile.in	31 Mar 2001 06:22:38 -0000	1.23
  +++ Makefile.in	1 Feb 2002 01:40:38 -0000	1.24
  @@ -1,5 +1,6 @@
   
   TARGETS = \
  +	copy.lo \
   	dir.lo \
   	fileacc.lo \
   	filedup.lo \
  
  
  
  1.49      +26 -0     apr/file_io/unix/filestat.c
  
  Index: filestat.c
  ===================================================================
  RCS file: /home/cvs/apr/file_io/unix/filestat.c,v
  retrieving revision 1.48
  retrieving revision 1.49
  diff -u -r1.48 -r1.49
  --- filestat.c	16 Oct 2001 23:24:09 -0000	1.48
  +++ filestat.c	1 Feb 2002 01:40:38 -0000	1.49
  @@ -136,6 +136,32 @@
       return APR_SUCCESS;
   }
   
  +APR_DECLARE(apr_status_t) apr_file_attrs_set(const char *fname,
  +                                             apr_fileattrs_t attributes,
  +                                             apr_pool_t *cont)
  +{
  +    apr_status_t status;
  +    apr_finfo_t finfo;
  +
  +    status = apr_stat(&finfo, fname, APR_FINFO_PROT, cont);
  +    if (!APR_STATUS_IS_SUCCESS(status))
  +        return status;
  +
  +    if (attributes & APR_FILE_ATTR_READONLY) {
  +        finfo.protection &= ~APR_UWRITE;
  +        finfo.protection &= ~APR_GWRITE;
  +        finfo.protection &= ~APR_WWRITE;
  +    }
  +    if (attributes & APR_FILE_ATTR_EXECUTABLE) {
  +        /* ### TODO: should this be umask'd? */
  +        finfo.protection |= APR_UEXECUTE;
  +        finfo.protection |= APR_GEXECUTE;
  +        finfo.protection |= APR_WEXECUTE;
  +    }
  +
  +   return apr_file_perms_set(fname, finfo.protection);
  +}
  +                                                  
   APR_DECLARE(apr_status_t) apr_stat(apr_finfo_t *finfo, 
                                      const char *fname, 
                                      apr_int32_t wanted, apr_pool_t *cont)
  
  
  
  1.62      +7 -0      apr/file_io/win32/filestat.c
  
  Index: filestat.c
  ===================================================================
  RCS file: /home/cvs/apr/file_io/win32/filestat.c,v
  retrieving revision 1.61
  retrieving revision 1.62
  diff -u -r1.61 -r1.62
  --- filestat.c	28 Jan 2002 15:56:08 -0000	1.61
  +++ filestat.c	1 Feb 2002 01:40:38 -0000	1.62
  @@ -611,3 +611,10 @@
   {
       return apr_stat(finfo, fname, wanted | APR_FINFO_LINK, cont);
   }
  +
  +APR_DECLARE(apr_status_t) apr_file_attrs_set(const char *fname,
  +                                             apr_fileattrs_t attributes,
  +                                             apr_pool_t *cont)
  +{
  +   return APR_ENOTIMPL;
  +}
  
  
  
  1.25      +17 -12    apr/include/apr_file_info.h
  
  Index: apr_file_info.h
  ===================================================================
  RCS file: /home/cvs/apr/include/apr_file_info.h,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- apr_file_info.h	9 Sep 2001 06:03:05 -0000	1.24
  +++ apr_file_info.h	1 Feb 2002 01:40:38 -0000	1.25
  @@ -94,20 +94,25 @@
    * @{
    */
   
  -#define APR_UREAD     0x400 /**< Read by user */
  -#define APR_UWRITE    0x200 /**< Write by user */
  -#define APR_UEXECUTE  0x100 /**< Execute by user */
  -
  -#define APR_GREAD     0x040 /**< Read by group */
  -#define APR_GWRITE    0x020 /**< Write by group */
  -#define APR_GEXECUTE  0x010 /**< Execute by group */
  -
  -#define APR_WREAD     0x004 /**< Read by others */
  -#define APR_WWRITE    0x002 /**< Write by others */
  -#define APR_WEXECUTE  0x001 /**< Execute by others */
  +#define APR_UREAD       0x4000 /**< Read by user */
  +#define APR_UWRITE      0x2000 /**< Write by user */
  +#define APR_UEXECUTE    0x1000 /**< Execute by user */
  +
  +#define APR_GREAD       0x0040 /**< Read by group */
  +#define APR_GWRITE      0x0020 /**< Write by group */
  +#define APR_GEXECUTE    0x0010 /**< Execute by group */
  +
  +#define APR_WREAD       0x0004 /**< Read by others */
  +#define APR_WWRITE      0x0002 /**< Write by others */
  +#define APR_WEXECUTE    0x0001 /**< Execute by others */
  +
  +#define APR_OS_DEFAULT  0x0FFF /**< use OS's default permissions */
  +
  +/* additional permission flags for apr_file_copy  and apr_file_append */
  +#define APR_FILE_SOURCE_PERMS 0x1000 /**< Copy source file's permissions */
   
  -#define APR_OS_DEFAULT 0xFFF /**< use default permissions of Underlying Operating System*/
   /** @} */
  +
   
   /**
    * Structure for referencing directories.
  
  
  
  1.117     +66 -0     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.116
  retrieving revision 1.117
  diff -u -r1.116 -r1.117
  --- apr_file_io.h	25 Jan 2002 21:07:49 -0000	1.116
  +++ apr_file_io.h	1 Feb 2002 01:40:38 -0000	1.117
  @@ -115,6 +115,19 @@
   #define APR_END SEEK_END
   /** @} */
   
  +/**
  + * @defgroup APR_file_set_attributes File Attribute Flags
  + * @{
  + */
  +
  +/* flags for apr_file_set_attributes */
  +#define APR_FILE_ATTR_READONLY   0x01          /**< File is read-only */
  +#define APR_FILE_ATTR_EXECUTABLE 0x02          /**< File is executable */
  +/** @} */
  +
  +/** File attributes */
  +typedef apr_int32_t apr_fileattrs_t;
  +
   /** should be same as whence type in lseek, POSIX defines this as int */
   typedef int       apr_seek_where_t;
   
  @@ -205,6 +218,39 @@
                                             apr_pool_t *pool);
   
   /**
  + * copy the specified file to another file.
  + * @param from_path The full path to the original file (using / on all systems)
  + * @param to_path The full path to the new file (using / on all systems)
  + * @param perms Access permissions for the new file if it is created.
  + *     In place of the usual or'd combination of file permissions, the
  + *     value APR_FILE_SOURCE_PERMS may be given, in which case the source
  + *     file's permissions are copied.
  + * @param pool The pool to use.
  + * @remark The new file does not need to exist, it will be created if required.
  + * @warning If the new file already exists, its contents will be overwritten.
  + */
  +APR_DECLARE(apr_status_t) apr_file_copy(const char *from_path, 
  +                                        const char *to_path,
  +                                        apr_fileperms_t perms,
  +                                        apr_pool_t *pool);
  +
  +/**
  + * append the specified file to another file.
  + * @param from_path The full path to the source file (using / on all systems)
  + * @param to_path The full path to the destination file (using / on all systems)
  + * @param perms Access permissions for the destination file if it is created.
  + *     In place of the usual or'd combination of file permissions, the
  + *     value APR_FILE_SOURCE_PERMS may be given, in which case the source
  + *     file's permissions are copied.
  + * @param pool The pool to use.
  + * @remark The new file does not need to exist, it will be created if required.
  + */
  +APR_DECLARE(apr_status_t) apr_file_append(const char *from_path, 
  +                                          const char *to_path,
  +                                          apr_fileperms_t perms,
  +                                          apr_pool_t *pool);
  +
  +/**
    * Are we at the end of the file
    * @param fptr The apr file we are testing.
    * @remark Returns APR_EOF if we are at the end of file, APR_SUCCESS otherwise.
  @@ -528,6 +574,26 @@
    */
   APR_DECLARE(apr_status_t) apr_file_perms_set(const char *fname,
                                              apr_fileperms_t perms);
  +
  +/**
  + * Set attributes of the specified file.
  + * @param fname The full path to the file (using / on all systems)
  + * @param attributes Or'd combination of
  + * <PRE>
  + *            APR_FILE_ATTR_READONLY   - make the file readonly
  + *            APR_FILE_ATTR_EXECUTABLE - make the file executable
  + * </PRE>
  + * @param cont the pool to use.
  + * @remark This function should be used in preference to explict manipulation
  + *      of the file permissions, because the operations to provide these
  + *      attributes are platform specific and may involve more than simply
  + *      setting permission bits.
  + * @warning Platforms which do not implement this feature will return
  + *      APR_ENOTIMPL.
  + */
  +APR_DECLARE(apr_status_t) apr_file_attrs_set(const char *fname,
  +                                             apr_fileattrs_t attributes,
  +                                             apr_pool_t *cont);
   
   /**
    * Create a new directory on the file system.
  
  
  

Mime
View raw message