Portability tweak.
[p5sagit/p5-mst-13.2.git] / ext / NDBM_File / NDBM_File.xs
index f5bc0f9..78a56cb 100644 (file)
@@ -1,6 +1,11 @@
 #include "EXTERN.h"
 #include "perl.h"
 #include "XSUB.h"
+/* If using the DB3 emulation, ENTER is defined both
+ * by DB3 and Perl.  We drop the Perl definition now.
+ * See also INSTALL section on DB3.
+ * -- Stanislav Brabec <utx@penguin.cz> */
+#undef ENTER
 #include <ndbm.h>
 
 typedef struct {
@@ -35,10 +40,10 @@ typedef datum datum_value ;
        }
 
 
-MODULE = NDBM_File     PACKAGE = NDBM_File     PREFIX = dbm_
+MODULE = NDBM_File     PACKAGE = NDBM_File     PREFIX = ndbm_
 
 NDBM_File
-dbm_TIEHASH(dbtype, filename, flags, mode)
+ndbm_TIEHASH(dbtype, filename, flags, mode)
        char *          dbtype
        char *          filename
        int             flags
@@ -48,7 +53,7 @@ dbm_TIEHASH(dbtype, filename, flags, mode)
            DBM *       dbp ;
 
            RETVAL = NULL ;
-           if (dbp =  dbm_open(filename, flags, mode)) {
+           if ((dbp =  dbm_open(filename, flags, mode))) {
                RETVAL = (NDBM_File)safemalloc(sizeof(NDBM_File_type)) ;
                Zero(RETVAL, 1, NDBM_File_type) ;
                RETVAL->dbp = dbp ;
@@ -59,20 +64,21 @@ dbm_TIEHASH(dbtype, filename, flags, mode)
          RETVAL
 
 void
-dbm_DESTROY(db)
+ndbm_DESTROY(db)
        NDBM_File       db
        CODE:
        dbm_close(db->dbp);
+       safefree(db);
 
-#define dbm_FETCH(db,key)                      dbm_fetch(db->dbp,key)
+#define ndbm_FETCH(db,key)                     dbm_fetch(db->dbp,key)
 datum_value
-dbm_FETCH(db, key)
+ndbm_FETCH(db, key)
        NDBM_File       db
        datum_key       key
 
-#define dbm_STORE(db,key,value,flags)          dbm_store(db->dbp,key,value,flags)
+#define ndbm_STORE(db,key,value,flags)         dbm_store(db->dbp,key,value,flags)
 int
-dbm_STORE(db, key, value, flags = DBM_REPLACE)
+ndbm_STORE(db, key, value, flags = DBM_REPLACE)
        NDBM_File       db
        datum_key       key
        datum_value     value
@@ -86,38 +92,39 @@ dbm_STORE(db, key, value, flags = DBM_REPLACE)
            dbm_clearerr(db->dbp);
        }
 
-#define dbm_DELETE(db,key)                     dbm_delete(db->dbp,key)
+#define ndbm_DELETE(db,key)                    dbm_delete(db->dbp,key)
 int
-dbm_DELETE(db, key)
+ndbm_DELETE(db, key)
        NDBM_File       db
        datum_key       key
 
-#define dbm_FIRSTKEY(db)                       dbm_firstkey(db->dbp)
+#define ndbm_FIRSTKEY(db)                      dbm_firstkey(db->dbp)
 datum_key
-dbm_FIRSTKEY(db)
+ndbm_FIRSTKEY(db)
        NDBM_File       db
 
-#define dbm_NEXTKEY(db,key)                    dbm_nextkey(db->dbp)
+#define ndbm_NEXTKEY(db,key)                   dbm_nextkey(db->dbp)
 datum_key
-dbm_NEXTKEY(db, key)
+ndbm_NEXTKEY(db, key)
        NDBM_File       db
-       datum_key       key
+       datum_key       key = NO_INIT
 
-#define dbm_error(db)                          dbm_error(db->dbp)
+#define ndbm_error(db)                         dbm_error(db->dbp)
 int
-dbm_error(db)
+ndbm_error(db)
        NDBM_File       db
 
-#define dbm_clearerr(db)                       dbm_clearerr(db->dbp)
+#define ndbm_clearerr(db)                      dbm_clearerr(db->dbp)
 void
-dbm_clearerr(db)
+ndbm_clearerr(db)
        NDBM_File       db
 
 
 #define setFilter(type)                                        \
        {                                               \
            if (db->type)                               \
-               RETVAL = newSVsv(db->type) ;            \
+               RETVAL = sv_mortalcopy(db->type) ;      \
+           ST(0) = RETVAL ;                            \
            if (db->type && (code == &PL_sv_undef)) {   \
                 SvREFCNT_dec(db->type) ;               \
                db->type = NULL ;                       \
@@ -139,8 +146,6 @@ filter_fetch_key(db, code)
        SV *            RETVAL = &PL_sv_undef ;
        CODE:
            setFilter(filter_fetch_key) ;
-       OUTPUT:
-           RETVAL
 
 SV *
 filter_store_key(db, code)
@@ -149,8 +154,6 @@ filter_store_key(db, code)
        SV *            RETVAL =  &PL_sv_undef ;
        CODE:
            setFilter(filter_store_key) ;
-       OUTPUT:
-           RETVAL
 
 SV *
 filter_fetch_value(db, code)
@@ -159,8 +162,6 @@ filter_fetch_value(db, code)
        SV *            RETVAL =  &PL_sv_undef ;
        CODE:
            setFilter(filter_fetch_value) ;
-       OUTPUT:
-           RETVAL
 
 SV *
 filter_store_value(db, code)
@@ -169,6 +170,4 @@ filter_store_value(db, code)
        SV *            RETVAL =  &PL_sv_undef ;
        CODE:
            setFilter(filter_store_value) ;
-       OUTPUT:
-           RETVAL