DB_File 1.61 patch for 5.005_53 & 5.005_02
Paul Marquess [Fri, 20 Nov 1998 12:20:41 +0000 (14:20 +0200)]
Newsgroups: hut.lists.perl5-porters
To: gsar@engin.umich.edu (Gurusamy Sarathy)
Cc: perl5-porters@perl.org (Perl5 Porters)

p4raw-id: //depot/cfgperl@2265

ext/DB_File/Changes
ext/DB_File/DB_File.pm
ext/DB_File/DB_File.xs

index 993fe32..e13178c 100644 (file)
 
 1.60
    Changed the test to check for full tied array support
+
+1.61 19th November 1998
+
+   Added a note to README about how to build Berkeley DB 2.x when
+   using HP-UX.
+   Minor modifications to get the module to build with DB 2.5.x
+   Fixed a typo in the definition of O_RDONLY, courtesy of Mark Kettenis.
+
index fcd0746..3d3b9ff 100644 (file)
@@ -1,8 +1,8 @@
 # DB_File.pm -- Perl 5 interface to Berkeley DB 
 #
 # written by Paul Marquess (pmarquess@bfsec.bt.co.uk)
-# last modified 16th May 1998
-# version 1.60
+# last modified 19th November 1998
+# version 1.61
 #
 #     Copyright (c) 1995-8 Paul Marquess. All rights reserved.
 #     This program is free software; you can redistribute it and/or
@@ -145,7 +145,7 @@ use vars qw($VERSION @ISA @EXPORT $AUTOLOAD $DB_BTREE $DB_HASH $DB_RECNO $db_ver
 use Carp;
 
 
-$VERSION = "1.60" ;
+$VERSION = "1.61" ;
 
 #typedef enum { DB_BTREE, DB_HASH, DB_RECNO } DBTYPE;
 $DB_BTREE = new DB_File::BTREEINFO ;
index c661023..5856f4f 100644 (file)
@@ -3,8 +3,8 @@
  DB_File.xs -- Perl 5 interface to Berkeley DB 
 
  written by Paul Marquess (pmarquess@bfsec.bt.co.uk)
- last modified 16th May 1998
- version 1.60
+ last modified 19th November 1998
+ version 1.61
 
  All comments/suggestions/problems are welcome
 
@@ -56,6 +56,8 @@
                This was ok for DB 1.x, but isn't for DB 2.x.
         1.59 -  No change to DB_File.xs
         1.60 -  Some code tidy up
+        1.61 -  added flagSet macro for DB 2.5.x
+               fixed typo in O_RDONLY test.
 
 
 
@@ -153,6 +155,12 @@ typedef db_recno_t recno_t;
 #define DBT_flags(x)   x.flags = 0
 #define DB_flags(x, v) x |= v 
 
+#if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 5
+#define flagSet(flags, bitmask)        ((flags) & (bitmask))
+#else
+#define flagSet(flags, bitmask)        (((flags) & DB_OPFLAGS_MASK) == (bitmask))
+#endif
+
 #else /* db version 1.x */
 
 typedef union INFO {
@@ -205,6 +213,7 @@ typedef union INFO {
 #define do_SEQ(db, key, value, flag)   (db->dbp->seq)(db->dbp, &key, &value, flag)
 #define DBT_flags(x)   
 #define DB_flags(x, v) 
+#define flagSet(flags, bitmask)        ((flags) & (bitmask))
 
 #endif /* db version 1 */
 
@@ -216,10 +225,11 @@ typedef union INFO {
 
 #define db_sync(db, flags)              ((db->dbp)->sync)(db->dbp, flags)
 #define db_get(db, key, value, flags)   ((db->dbp)->get)(db->dbp, TXN &key, &value, flags)
+
 #ifdef DB_VERSION_MAJOR
 #define db_DESTROY(db)                  ((db->dbp)->close)(db->dbp, 0)
 #define db_close(db)                   ((db->dbp)->close)(db->dbp, 0)
-#define db_del(db, key, flags)          ((flags & R_CURSOR)                                    \
+#define db_del(db, key, flags)          (flagSet(flags, R_CURSOR)                                      \
                                                ? ((db->cursor)->c_del)(db->cursor, 0)          \
                                                : ((db->dbp)->del)(db->dbp, NULL, &key, flags) )
 
@@ -232,6 +242,7 @@ typedef union INFO {
 
 #endif
 
+
 #define db_seq(db, key, value, flags)   do_SEQ(db, key, value, flags)
 
 typedef struct {
@@ -288,12 +299,17 @@ u_int             flags ;
 {
     int status ;
 
-    if (flags & R_CURSOR) {
+    if (flagSet(flags, R_CURSOR)) {
        status = ((db->cursor)->c_del)(db->cursor, 0);
        if (status != 0)
            return status ;
 
+#if DB_VERSION_MAJOR == 2 && DB_VERSION_MINOR < 5
        flags &= ~R_CURSOR ;
+#else
+       flags &= ~DB_OPFLAGS_MASK ;
+#endif
+
     }
 
     return ((db->dbp)->put)(db->dbp, NULL, &key, &value, flags) ;
@@ -808,7 +824,7 @@ SV *   sv ;
 #if O_RDONLY == 0
         if (flags == O_RDONLY)
 #else
-        if (flags & O_RDONLY) == O_RDONLY)
+        if ((flags & O_RDONLY) == O_RDONLY)
 #endif
             Flags |= DB_RDONLY ;
 
@@ -1436,7 +1452,7 @@ db_put(db, key, value, flags=0)
 #endif
        OUTPUT:
          RETVAL
-         key           if (flags & (R_IAFTER|R_IBEFORE)) OutputKey(ST(1), key);
+         key           if (flagSet(flags, R_IAFTER) || flagSet(flags, R_IBEFORE)) OutputKey(ST(1), key);
 
 int
 db_fd(db)