Mercurial > hg > xemacs-beta
comparison src/database.c @ 14:9ee227acff29 r19-15b90
Import from CVS: tag r19-15b90
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:48:42 +0200 |
parents | 376386a54a3c |
children | 859a2309aef8 |
comparison
equal
deleted
inserted
replaced
13:13c6d0aaafe5 | 14:9ee227acff29 |
---|---|
136 | 136 |
137 type = dbase->funcs->get_type (dbase); | 137 type = dbase->funcs->get_type (dbase); |
138 subtype = dbase->funcs->get_subtype (dbase); | 138 subtype = dbase->funcs->get_subtype (dbase); |
139 | 139 |
140 sprintf (buf, "#<database %s (%s/%s/%s) 0x%x>", | 140 sprintf (buf, "#<database %s (%s/%s/%s) 0x%x>", |
141 string_data (XSTRING (dbase->fname)), type, subtype, perms, | 141 XSTRING_DATA (dbase->fname), type, subtype, perms, |
142 dbase->header.uid); | 142 dbase->header.uid); |
143 write_c_string (buf, printcharfun); | 143 write_c_string (buf, printcharfun); |
144 } | 144 } |
145 } | 145 } |
146 | 146 |
262 static Lisp_Object | 262 static Lisp_Object |
263 dbm_get (struct database_struct *db, Lisp_Object key) | 263 dbm_get (struct database_struct *db, Lisp_Object key) |
264 { | 264 { |
265 datum keydatum, valdatum; | 265 datum keydatum, valdatum; |
266 DBM *handle = (DBM *)db->db_handle; | 266 DBM *handle = (DBM *)db->db_handle; |
267 keydatum.dptr = (char *) string_data (XSTRING (key)); | 267 keydatum.dptr = (char *) XSTRING_DATA (key); |
268 keydatum.dsize = string_length (XSTRING (key)); | 268 keydatum.dsize = XSTRING_LENGTH (key); |
269 valdatum = dbm_fetch (handle, keydatum); | 269 valdatum = dbm_fetch (handle, keydatum); |
270 | 270 |
271 return (valdatum.dptr | 271 return (valdatum.dptr |
272 ? make_string ((unsigned char *) valdatum.dptr, valdatum.dsize) | 272 ? make_string ((unsigned char *) valdatum.dptr, valdatum.dsize) |
273 : Qnil); | 273 : Qnil); |
280 Lisp_Object replace) | 280 Lisp_Object replace) |
281 { | 281 { |
282 DBM *handle = (DBM *)db->db_handle; | 282 DBM *handle = (DBM *)db->db_handle; |
283 datum keydatum, valdatum; | 283 datum keydatum, valdatum; |
284 | 284 |
285 valdatum.dptr = (char *) string_data (XSTRING (val)); | 285 valdatum.dptr = (char *) XSTRING_DATA (val); |
286 valdatum.dsize = string_length (XSTRING (val)); | 286 valdatum.dsize = XSTRING_LENGTH (val); |
287 keydatum.dptr = (char *) string_data (XSTRING (key)); | 287 keydatum.dptr = (char *) XSTRING_DATA (key); |
288 keydatum.dsize = string_length (XSTRING (key)); | 288 keydatum.dsize = XSTRING_LENGTH (key); |
289 | 289 |
290 return (!dbm_store (handle, keydatum, valdatum, | 290 return (!dbm_store (handle, keydatum, valdatum, |
291 (NILP (replace)) ? DBM_INSERT : DBM_REPLACE)); | 291 (NILP (replace)) ? DBM_INSERT : DBM_REPLACE)); |
292 } | 292 } |
293 | 293 |
294 static int | 294 static int |
295 dbm_remove (struct database_struct *db, Lisp_Object key) | 295 dbm_remove (struct database_struct *db, Lisp_Object key) |
296 { | 296 { |
297 datum keydatum; | 297 datum keydatum; |
298 keydatum.dptr = (char *) string_data (XSTRING (key)); | 298 keydatum.dptr = (char *) XSTRING_DATA (key); |
299 keydatum.dsize = string_length (XSTRING (key)); | 299 keydatum.dsize = XSTRING_LENGTH (key); |
300 return (dbm_delete (db->db_handle, keydatum)); | 300 return (dbm_delete (db->db_handle, keydatum)); |
301 } | 301 } |
302 | 302 |
303 static Lisp_Object | 303 static Lisp_Object |
304 dbm_lisp_type (struct database_struct *db) | 304 dbm_lisp_type (struct database_struct *db) |
421 { | 421 { |
422 DBT keydatum, valdatum; | 422 DBT keydatum, valdatum; |
423 DB *dbp = (DB *) db->db_handle; | 423 DB *dbp = (DB *) db->db_handle; |
424 int status = 0; | 424 int status = 0; |
425 | 425 |
426 keydatum.data = string_data (XSTRING (key)); | 426 keydatum.data = XSTRING_DATA (key); |
427 keydatum.size = string_length (XSTRING (key)); | 427 keydatum.size = XSTRING_LENGTH (key); |
428 | 428 |
429 status = dbp->get (dbp, &keydatum, &valdatum, 0); | 429 status = dbp->get (dbp, &keydatum, &valdatum, 0); |
430 | 430 |
431 if (!status) | 431 if (!status) |
432 return (make_string (valdatum.data, valdatum.size)); | 432 return (make_string (valdatum.data, valdatum.size)); |
443 { | 443 { |
444 DBT keydatum, valdatum; | 444 DBT keydatum, valdatum; |
445 DB *dbp = (DB *) db->db_handle; | 445 DB *dbp = (DB *) db->db_handle; |
446 int status = 0; | 446 int status = 0; |
447 | 447 |
448 keydatum.data = string_data (XSTRING (key)); | 448 keydatum.data = XSTRING_DATA (key); |
449 keydatum.size = string_length (XSTRING (key)); | 449 keydatum.size = XSTRING_LENGTH (key); |
450 valdatum.data = string_data (XSTRING (val)); | 450 valdatum.data = XSTRING_DATA (val); |
451 valdatum.size = string_length (XSTRING (val)); | 451 valdatum.size = XSTRING_LENGTH (val); |
452 status = dbp->put (dbp, &keydatum, &valdatum, NILP (replace) | 452 status = dbp->put (dbp, &keydatum, &valdatum, NILP (replace) |
453 ? R_NOOVERWRITE : 0); | 453 ? R_NOOVERWRITE : 0); |
454 db->errno = (status == 1) ? -1 : errno; | 454 db->errno = (status == 1) ? -1 : errno; |
455 return status; | 455 return status; |
456 } | 456 } |
460 { | 460 { |
461 DBT keydatum; | 461 DBT keydatum; |
462 DB *dbp = (DB *) db->db_handle; | 462 DB *dbp = (DB *) db->db_handle; |
463 int status; | 463 int status; |
464 | 464 |
465 keydatum.data = string_data (XSTRING (key)); | 465 keydatum.data = XSTRING_DATA (key); |
466 keydatum.size = string_length (XSTRING (key)); | 466 keydatum.size = XSTRING_LENGTH (key); |
467 | 467 |
468 status = dbp->del (dbp, &keydatum, 0); | 468 status = dbp->del (dbp, &keydatum, 0); |
469 if (!status) | 469 if (!status) |
470 return 0; | 470 return 0; |
471 | 471 |
561 } | 561 } |
562 else | 562 else |
563 { | 563 { |
564 char *acc; | 564 char *acc; |
565 CHECK_STRING (ackcess); | 565 CHECK_STRING (ackcess); |
566 acc = (char *) string_data (XSTRING (ackcess)); | 566 acc = (char *) XSTRING_DATA (ackcess); |
567 | 567 |
568 if (strchr (acc, '+')) | 568 if (strchr (acc, '+')) |
569 accessmask |= O_CREAT; | 569 accessmask |= O_CREAT; |
570 | 570 |
571 if (strchr (acc, 'r') && strchr (acc, 'w')) | 571 if (strchr (acc, 'r') && strchr (acc, 'w')) |
613 | 613 |
614 signal_simple_error ("Unsupported database type", type); | 614 signal_simple_error ("Unsupported database type", type); |
615 return (Qnil); | 615 return (Qnil); |
616 | 616 |
617 db_done: | 617 db_done: |
618 db = funcblock->open_file ((char *) string_data (XSTRING (file)), subtype, | 618 db = funcblock->open_file ((char *) XSTRING_DATA (file), subtype, |
619 accessmask, modemask); | 619 accessmask, modemask); |
620 | 620 |
621 if (!db) | 621 if (!db) |
622 { | 622 { |
623 return (Qnil); | 623 return (Qnil); |