[prev in list] [next in list] [prev in thread] [next in thread] 

List:       apr-cvs
Subject:    cvs commit: apr-util/dbm apr_dbm.c
From:       wrowe () apache ! org
Date:       2001-04-28 0:23:42
[Download RAW message or body]

wrowe       01/04/27 17:23:42

  Modified:    .        CHANGES
               include  apr_dbm.h
               dbm      apr_dbm.c
  Log:
    Adding perms to apr_dbm_open
  
  Revision  Changes    Path
  1.12      +2 -0      apr-util/CHANGES
  
  Index: CHANGES
  ===================================================================
  RCS file: /home/cvs/apr-util/CHANGES,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- CHANGES	2001/04/11 19:07:02	1.11
  +++ CHANGES	2001/04/28 00:23:41	1.12
  @@ -1,5 +1,7 @@
   Changes with APR-util b1  
   
  +  *) Introduce an apr_fileperms_t argument to apr_dbm_open(). [Will Rowe]
  +
     *) Removed apr_bucket_do_create() macro, which was causing warnings
        about unreachable code in some compilers (notably MSVC).  What
        used to be done by this macro is now done inline in the various
  
  
  
  1.10      +4 -1      apr-util/include/apr_dbm.h
  
  Index: apr_dbm.h
  ===================================================================
  RCS file: /home/cvs/apr-util/include/apr_dbm.h,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- apr_dbm.h	2001/02/16 04:17:10	1.9
  +++ apr_dbm.h	2001/04/28 00:23:41	1.10
  @@ -59,6 +59,7 @@
   #include "apr.h"
   #include "apr_errno.h"
   #include "apr_pools.h"
  +#include "apr_file_info.h"
   
   #ifdef __cplusplus
   extern "C" {
  @@ -99,13 +100,15 @@
    *           APR_DBM_READWRITE  open for read-write access
    *           APR_DBM_RWCREATE   open for r/w, create if needed
    * </PRE>
  + * @param perm Permissions to apply to if created
    * @param cntxt The pool to use when creating the dbm
    * @deffunc apr_status_t apr_dbm_open(apr_dbm_t **dbm, const char *name, int mode
    * @tip The dbm name may not be a true file name, as many dbm packages
    * append suffixes for seperate data and index files.
    */
   APU_DECLARE(apr_status_t) apr_dbm_open(apr_dbm_t **dbm, const char *name, 
  -                                       int mode, apr_pool_t *cntxt);
  +                                       apr_int32_t mode, apr_fileperms_t perm,
  +                                       apr_pool_t *cntxt);
   
   /**
    * Close a dbm file previously opened by apr_dbm_open
  
  
  
  1.19      +32 -13    apr-util/dbm/apr_dbm.c
  
  Index: apr_dbm.c
  ===================================================================
  RCS file: /home/cvs/apr-util/dbm/apr_dbm.c,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- apr_dbm.c	2001/02/16 04:17:09	1.18
  +++ apr_dbm.c	2001/04/28 00:23:41	1.19
  @@ -65,11 +65,9 @@
      to stop "no effect" warnings from GCC. */
   #define NOOP_FUNCTION if (0) ; else
   
  -/* some of the DBM functions take a POSIX mode for creating files. use this. */
  -#define POSIX_FILEMODE 0660
   
  -
   #if APU_USE_SDBM
  +
   #include "apr_sdbm.h"
   
   typedef SDBM *real_file_t;
  @@ -92,7 +90,23 @@
   #define APR_DBM_DBMODE_RW       (APR_READ | APR_WRITE)
   #define APR_DBM_DBMODE_RWCREATE (APR_READ | APR_WRITE | APR_CREATE)
   
  -#elif APU_USE_GDBM
  +#else /* Not using SDBM: */
  +
  +/* Most DBM libraries take a POSIX mode for creating files.  Don't trust
  + * the mode_t type, some platforms may not support it, int is safe.
  + */
  +int apr_posix_perms2mode(apr_fileperms_t perm) 
  +{
  +    int mode = 0;
  +
  +    mode |= 0700 & (perm >> 2); /* User  is off-by-2 bits */
  +    mode |= 0070 & (perm >> 1); /* Group is off-by-1 bit */
  +    mode |= 0007 & (perm);      /* World maps 1 for 1 */
  +    return mode;
  +}
  +
  +#if APU_USE_GDBM
  +
   #include <gdbm.h>
   #include <stdlib.h>     /* for free() */
   
  @@ -253,10 +267,11 @@
       return db2s(dberr);
   }
   
  -#else
  +#else /* Not in the USE_xDBM list above */
   #error a DBM implementation was not specified
   #endif
   
  +#endif /* Not USE_SDBM */
   
   struct apr_dbm_t
   {
  @@ -341,7 +356,8 @@
   }
   
   APU_DECLARE(apr_status_t) apr_dbm_open(apr_dbm_t **pdb, const char *pathname, 
  -                                       int mode, apr_pool_t *pool)
  +                                       apr_int32_t mode, apr_fileperms_t perm,
  +                                       apr_pool_t *pool)
   {
       real_file_t file;
       int dbmode;
  @@ -367,7 +383,7 @@
       {
           apr_status_t rv;
   
  -        rv = sdbm_open(&file, pathname, dbmode, APR_OS_DEFAULT, pool);
  +        rv = sdbm_open(&file, pathname, dbmode, perm, pool);
           if (rv != APR_SUCCESS)
               return rv;
       }
  @@ -376,7 +392,8 @@
   
       {
           /* Note: stupid cast to get rid of "const" on the pathname */
  -        file = gdbm_open((char *) pathname, 0, dbmode, POSIX_FILEMODE, NULL);
  +        file = gdbm_open((char *) pathname, 0, dbmode,
  +                         apr_posix_perms2mode(perm), NULL);
           if (file == NULL)
               return APR_EGENERAL;      /* ### need a better error */
       }
  @@ -388,19 +405,21 @@
   
   #if DB_VER == 3
           if ((dberr = db_create(&file.bdb, NULL, 0)) == 0) {
  -            if ((dberr = (*file.bdb->open)(file.bdb, pathname, NULL, DB_HASH,
  -                                           dbmode, POSIX_FILEMODE)) != 0) {
  +            if ((dberr = (*file.bdb->open)(file.bdb, pathname, NULL, 
  +                                           DB_HASH, dbmode, 
  +                                           apr_posix_perms2mode(perm))) != 0) {
                   /* close the DB handler */
                   (void) (*file.bdb->close)(file.bdb, 0);
               }
           }
           file.curs = NULL;
   #elif DB_VER == 2
  -        dberr = db_open(pathname, DB_HASH, dbmode, POSIX_FILEMODE, NULL, NULL,
  -                        &file.bdb);
  +        dberr = db_open(pathname, DB_HASH, dbmode, apr_posix_perms2mode(perm),
  +                        NULL, NULL, &file.bdb);
           file.curs = NULL;
   #else
  -        file.bdb = dbopen(pathname, dbmode, POSIX_FILEMODE, DB_HASH, NULL);
  +        file.bdb = dbopen(pathname, dbmode, apr_posix_perms2mode(perm),
  +                          DB_HASH, NULL);
           if (file.bdb == NULL)
               return APR_EGENERAL;      /* ### need a better error */
           dberr = 0;
  
  
  

[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic