X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=daemon%2Fconf.c;h=07e408ea4189f836c1ced1b51ff94fd2862110b6;hb=363c7059ebeac9d54a372a26737e2235d849eae5;hp=6fd317bd25dae81eb4d6ffa641a33315dc90a9de;hpb=cc03465029bc3d92e2fd85230ae0efc5d03b8f62;p=doldaconnect.git diff --git a/daemon/conf.c b/daemon/conf.c index 6fd317b..07e408e 100644 --- a/daemon/conf.c +++ b/daemon/conf.c @@ -1,6 +1,6 @@ /* * Dolda Connect - Modular multiuser Direct Connect-style client - * Copyright (C) 2004 Fredrik Tolf (fredrik@dolda2000.com) + * Copyright (C) 2004 Fredrik Tolf * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -16,10 +16,11 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ + +#include #include #include #include -#include #include #include #include @@ -28,6 +29,7 @@ #include #include #include +#include #ifdef HAVE_CONFIG_H #include @@ -360,3 +362,48 @@ void readconfig(FILE *stream) if(state != 0) flog(LOG_WARNING, "unexpected end of file"); } + +/* {store,fetch}var re-opens the database every time, just in case two + * doldacond processes would be running simultaneously. */ +void storevar(char *key, void *val, size_t len) +{ + char *dbname; + GDBM_FILE db; + datum k, v; + + dbname = findfile("dc-vardb", NULL, 1); + if((db = gdbm_open(dbname, 0, GDBM_WRCREAT, 0666, NULL)) == NULL) + { + flog(LOG_CRIT, "could not open var database for writing, cannot continue: %s", gdbm_strerror(gdbm_errno)); + abort(); + } + free(dbname); + k.dptr = key; + k.dsize = strlen(key); + v.dptr = val; + v.dsize = len; + gdbm_store(db, k, v, GDBM_REPLACE); + gdbm_close(db); +} + +void *fetchvar(char *key, size_t *lenb) +{ + char *dbname; + GDBM_FILE db; + datum k, v; + + if((dbname = findfile("dc-vardb", NULL, 0)) == NULL) + return(NULL); + if((db = gdbm_open(dbname, 0, GDBM_READER, 0666, NULL)) == NULL) + return(NULL); + free(dbname); + k.dptr = key; + k.dsize = strlen(key); + v = gdbm_fetch(db, k); + gdbm_close(db); + if(v.dptr == NULL) + return(NULL); + if(lenb != NULL) + *lenb = v.dsize; + return(v.dptr); +}