3 #include "chiark_tcl_cdb.h"
5 /*---------- Pathbuf ----------*/
13 static void pathbuf_init(Pathbuf *pb, const char *pathb) {
15 pb->buf= TALLOC(l + 4);
16 memcpy(pb->buf, pathb, l);
20 static const char *pathbuf_sfx(Pathbuf *pb, const char *suffix) {
21 assert(strlen(suffix) <= MAX_SUFFIX);
22 strcpy(pb->sfx, suffix);
25 static void pathbuf_free(Pathbuf *pb) {
30 /*---------- Rw data structure ----------*/
33 Pathbuf pbsome, pbtmp;
36 static void destroy_cdbrw_idtabcb(Tcl_Interp *ip, void *val) { abort(); }
38 const IdDataSpec cdbtcl_rwdatabases= {
39 "cdb-rwdb", "cdb-openrwdatabases-table", destroy_cdbrw_idtabcb
44 /*---------- Misc functionality ----------*/
46 int cht_do_cdbwr_create_empty(ClientData cd, Tcl_Interp *ip,
49 int lock_fd=-1, fd=-1;
51 pathbuf_init(&pb, pathb);
52 rc= acquire_lock(ip, &pb, &lock_fd); if (rc) goto x_rc;
54 fd= open(pathbuf_sfx(".lock"), O_RDONLY
58 int cht_do_cdbwr_open(ClientData cd, Tcl_Interp *ip, const char *pathb, Tcl_Obj *on_info, void **result);
61 int cht_do_cdbwr_close(ClientData cd, Tcl_Interp *ip, void *db);
62 int cht_do_cdbwr_close_quick(ClientData cd, Tcl_Interp *ip, void *db);
63 int cht_do_cdbwr_lookup(ClientData cd, Tcl_Interp *ip, void *db, Tcl_Obj *key, Tcl_Obj **result);
64 int cht_do_cdbwr_lookup_hb(ClientData cd, Tcl_Interp *ip, void *db, HBytes_Value key, HBytes_Value *result);
65 int cht_do_cdbwr_update(ClientData cd, Tcl_Interp *ip, void *db, Tcl_Obj *key, Tcl_Obj *value);
66 int cht_do_cdbwr_update_hb(ClientData cd, Tcl_Interp *ip, void *db, HBytes_Value key, HBytes_Value value);
67 int cht_do_cdbwr_update_quick(ClientData cd, Tcl_Interp *ip, void *db, Tcl_Obj *key, Tcl_Obj *value);
68 int cht_do_cdbwr_update_quick_hb(ClientData cd, Tcl_Interp *ip, void *db, HBytes_Value key, HBytes_Value value);