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);