#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
-#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 ;
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