Upgrade to Attribute::Handlers 0.87 (which is just a core sync) -- for real
[p5sagit/p5-mst-13.2.git] / ext / NDBM_File / NDBM_File.xs
index 201ab6c..aa769ec 100644 (file)
@@ -1,11 +1,29 @@
 #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> */
-#include <ndbm.h>
+#undef NDBM_HEADER_USES_PROTOTYPES
+#if defined(I_GDBM_NDBM)
+#  ifdef GDBM_NDBM_H_USES_PROTOTYPES
+#    define NDBM_HEADER_USES_PROTOTYPES
+START_EXTERN_C
+#  endif
+#  include <gdbm-ndbm.h> /* Debian compatibility version */
+#elif defined(I_GDBMNDBM)
+#  ifdef GDBMNDBM_H_USES_PROTOTYPES
+#    define NDBM_HEADER_USES_PROTOTYPES
+START_EXTERN_C
+#  endif
+#  include <gdbm/ndbm.h> /* RedHat compatibility version */
+#elif defined(I_NDBM)
+#  ifdef NDBM_H_USES_PROTOTYPES
+#    define NDBM_HEADER_USES_PROTOTYPES
+START_EXTERN_C
+#  endif
+#  include <ndbm.h>
+#endif
+#ifdef NDBM_HEADER_USES_PROTOTYPES
+END_EXTERN_C
+#endif
 
 typedef struct {
        DBM *   dbp ;
@@ -20,6 +38,20 @@ typedef NDBM_File_type * NDBM_File ;
 typedef datum datum_key ;
 typedef datum datum_value ;
 
+
+#if defined(__cplusplus) && !defined(NDBM_HEADER_USES_PROTOTYPES)
+/* gdbm's header file used for compatibility with gdbm */
+/* isn't compatible to C++ syntax, so we need these */
+/* declarations to make everyone happy. */
+EXTERN_C DBM *dbm_open(const char *, int, mode_t);
+EXTERN_C void dbm_close(DBM *);
+EXTERN_C datum dbm_fetch(DBM *, datum);
+EXTERN_C int dbm_store(DBM *, datum, datum, int);
+EXTERN_C int dbm_delete(DBM *, datum);
+EXTERN_C datum dbm_firstkey(DBM *);
+EXTERN_C datum dbm_nextkey(DBM *);
+#endif
+
 MODULE = NDBM_File     PACKAGE = NDBM_File     PREFIX = ndbm_
 
 NDBM_File