Mercurial > hg > xemacs-beta
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;