diff src/database.c @ 5125:b5df3737028a ben-lisp-object

merge
author Ben Wing <ben@xemacs.org>
date Wed, 24 Feb 2010 01:58:04 -0600
parents 623d57b7fbe8 97c45e3ad810
children a9c41067dd88
line wrap: on
line diff
--- a/src/database.c	Wed Jan 20 07:05:57 2010 -0600
+++ b/src/database.c	Wed Feb 24 01:58:04 2010 -0600
@@ -85,26 +85,28 @@
 #endif /* HAVE_BERKELEY_DB */
 
 #ifdef HAVE_DBM
-#if defined (CYGWIN) || defined (MINGW)
+# ifdef TRUST_NDBM_H_PROTOTYPES
+#  include NDBM_H_FILE
+# else /* not TRUST_NDBM_H_PROTOTYPES */
+
+/* The prototypes in gdbm/ndbm.h currently are broken when compiling
+using C++, since they are of the form `datum dbm_firstkey()', without any
+args given. */
 
 #if defined(__cplusplus) || defined(c_plusplus)
 extern "C" {
 #endif
 
-/* As of Cygwin 1.7.0, the prototypes in ndbm.h are broken when compiling
-using C++, since they are of the form `datum dbm_firstkey()', without any
-args given. */
 /* Parameters to dbm_store for simple insertion or replacement. */
 #define  DBM_INSERT  0
 #define  DBM_REPLACE 1
 
-
 /* The data and key structure.  This structure is defined for compatibility. */
-typedef struct {
-        char *dptr;
-        int   dsize;
-      } datum;
-
+typedef struct
+{
+  char *dptr;
+  int   dsize;
+} datum;
 
 /* The file information header. This is good enough for most applications. */
 typedef struct {int dummy[10];} DBM;
@@ -123,9 +125,7 @@
 }
 #endif
 
-#else
-#include NDBM_H_FILE
-#endif
+# endif /* (not) TRUST_NDBM_H_PROTOTYPES */
 Lisp_Object Qdbm;
 #endif /* HAVE_DBM */
 
@@ -217,7 +217,7 @@
   Lisp_Database *db = XDATABASE (obj);
 
   if (print_readably)
-    printing_unreadable_object ("#<database 0x%x>", db->header.uid);
+    printing_unreadable_lcrecord (obj, 0);
 
   write_fmt_string_lisp (printcharfun, "#<database \"%s\" (%s/%s/",
 			 3, db->fname, db->funcs->get_type (db),
@@ -321,9 +321,9 @@
        keydatum = dbm_nextkey (db->dbm_handle))
     {
       valdatum = dbm_fetch (db->dbm_handle, keydatum);
-      key = make_ext_string ((Extbyte *) keydatum.dptr, keydatum.dsize,
+      key = make_extstring ((Extbyte *) keydatum.dptr, keydatum.dsize,
 			     db->coding_system);
-      val = make_ext_string ((Extbyte *) valdatum.dptr, valdatum.dsize,
+      val = make_extstring ((Extbyte *) valdatum.dptr, valdatum.dsize,
 			     db->coding_system);
       call2 (func, key, val);
     }
@@ -334,13 +334,12 @@
 {
   datum keydatum, valdatum;
 
-  TO_EXTERNAL_FORMAT (LISP_STRING, key,
-		      ALLOCA, (keydatum.dptr, keydatum.dsize),
-		      db->coding_system);
+  LISP_STRING_TO_SIZED_EXTERNAL (key, keydatum.dptr, keydatum.dsize,
+				 db->coding_system);
   valdatum = dbm_fetch (db->dbm_handle, keydatum);
 
   return (valdatum.dptr
-	  ? make_ext_string ((Extbyte *) valdatum.dptr, valdatum.dsize,
+	  ? make_extstring ((Extbyte *) valdatum.dptr, valdatum.dsize,
 			     db->coding_system)
 	  : Qnil);
 }
@@ -351,12 +350,10 @@
 {
   datum keydatum, valdatum;
 
-  TO_EXTERNAL_FORMAT (LISP_STRING, val,
-		      ALLOCA, (valdatum.dptr, valdatum.dsize),
-		      db->coding_system);
-  TO_EXTERNAL_FORMAT (LISP_STRING, key,
-		      ALLOCA, (keydatum.dptr, keydatum.dsize),
-		      db->coding_system);
+  LISP_STRING_TO_SIZED_EXTERNAL (val, valdatum.dptr, valdatum.dsize,
+				 db->coding_system);
+  LISP_STRING_TO_SIZED_EXTERNAL (key, keydatum.dptr, keydatum.dsize,
+				 db->coding_system);
 
   return !dbm_store (db->dbm_handle, keydatum, valdatum,
 		     NILP (replace) ? DBM_INSERT : DBM_REPLACE);
@@ -367,9 +364,8 @@
 {
   datum keydatum;
 
-  TO_EXTERNAL_FORMAT (LISP_STRING, key,
-		      ALLOCA, (keydatum.dptr, keydatum.dsize),
-		      db->coding_system);
+  LISP_STRING_TO_SIZED_EXTERNAL (key, keydatum.dptr, keydatum.dsize,
+				 db->coding_system);
 
   return dbm_delete (db->dbm_handle, keydatum);
 }
@@ -456,9 +452,8 @@
   xzero (keydatum);
   xzero (valdatum);
 
-  TO_EXTERNAL_FORMAT (LISP_STRING, key,
-		      ALLOCA, (keydatum.data, keydatum.size),
-		      db->coding_system);
+  LISP_STRING_TO_SIZED_EXTERNAL (key, keydatum.data, keydatum.size,
+				 db->coding_system);
 
 #if DB_VERSION_MAJOR == 1
   status = db->db_handle->get (db->db_handle, &keydatum, &valdatum, 0);
@@ -467,7 +462,7 @@
 #endif /* DB_VERSION_MAJOR */
 
   if (!status)
-    return make_ext_string ((const Extbyte *) valdatum.data, valdatum.size,
+    return make_extstring ((const Extbyte *) valdatum.data, valdatum.size,
 			    db->coding_system);
 
 #if DB_VERSION_MAJOR == 1
@@ -492,12 +487,10 @@
   xzero (keydatum);
   xzero (valdatum);
 
-  TO_EXTERNAL_FORMAT (LISP_STRING, key,
-		      ALLOCA, (keydatum.data, keydatum.size),
-		      db->coding_system);
-  TO_EXTERNAL_FORMAT (LISP_STRING, val,
-		      ALLOCA, (valdatum.data, valdatum.size),
-		      db->coding_system);
+  LISP_STRING_TO_SIZED_EXTERNAL (key, keydatum.data, keydatum.size,
+				 db->coding_system);
+  LISP_STRING_TO_SIZED_EXTERNAL (val, valdatum.data, valdatum.size,
+				 db->coding_system);
 #if DB_VERSION_MAJOR == 1
   status = db->db_handle->put (db->db_handle, &keydatum, &valdatum,
  			       NILP (replace) ? R_NOOVERWRITE : 0);
@@ -520,9 +513,8 @@
   /* DB Version 2 requires DBT's to be zeroed before use. */
   xzero (keydatum);
 
-  TO_EXTERNAL_FORMAT (LISP_STRING, key,
-		      ALLOCA, (keydatum.data, keydatum.size),
-		      db->coding_system);
+  LISP_STRING_TO_SIZED_EXTERNAL (key, keydatum.data, keydatum.size,
+				 db->coding_system);
 
 #if DB_VERSION_MAJOR == 1
   status = db->db_handle->del (db->db_handle, &keydatum, 0);
@@ -558,9 +550,9 @@
        status == 0;
        status = dbp->seq (dbp, &keydatum, &valdatum, R_NEXT))
     {
-      key = make_ext_string ((const Extbyte *) keydatum.data, keydatum.size,
+      key = make_extstring ((const Extbyte *) keydatum.data, keydatum.size,
 			     db->coding_system);
-      val = make_ext_string ((const Extbyte *) valdatum.data, valdatum.size,
+      val = make_extstring ((const Extbyte *) valdatum.data, valdatum.size,
 			     db->coding_system);
       call2 (func, key, val);
     }
@@ -577,9 +569,9 @@
 	 status == 0;
 	 status = dbcp->c_get (dbcp, &keydatum, &valdatum, DB_NEXT))
       {
-	key = make_ext_string ((const Extbyte *) keydatum.data, keydatum.size,
+	key = make_extstring ((const Extbyte *) keydatum.data, keydatum.size,
 			       db->coding_system);
-	val = make_ext_string ((const Extbyte *) valdatum.data, valdatum.size,
+	val = make_extstring ((const Extbyte *) valdatum.data, valdatum.size,
 			       db->coding_system);
 	call2 (func, key, val);
       }
@@ -647,7 +639,7 @@
   int modemask;
   int accessmask = 0;
   Lisp_Database *db = NULL;
-  char *filename;
+  Extbyte *filename;
   struct gcpro gcpro1, gcpro2;
 
   CHECK_STRING (file);
@@ -655,9 +647,7 @@
   file = Fexpand_file_name (file, Qnil);
   UNGCPRO;
 
-  TO_EXTERNAL_FORMAT (LISP_STRING, file,
-		      C_STRING_ALLOCA, filename,
-		      Qfile_name);
+  LISP_PATHNAME_CONVERT_OUT (file, filename);
 
   if (NILP (access_))
     {
@@ -665,16 +655,16 @@
     }
   else
     {
-      char *acc;
+      Ibyte *acc;
       CHECK_STRING (access_);
-      acc = (char *) XSTRING_DATA (access_);
+      acc = XSTRING_DATA (access_);
 
-      if (strchr (acc, '+'))
+      if (qxestrchr (acc, '+'))
 	accessmask |= O_CREAT;
 
       {
-	char *rp = strchr (acc, 'r');
-	char *wp = strchr (acc, 'w');
+	int rp = !!qxestrchr (acc, 'r');
+	int wp = !!qxestrchr (acc, 'w');
 	if (rp && wp) accessmask |= O_RDWR;
 	else if (wp)  accessmask |= O_WRONLY;
 	else          accessmask |= O_RDONLY;