/[anubis]/anubis/src/anubisdb.c
ViewVC logotype

Diff of /anubis/src/anubisdb.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.2 by polak, Fri Nov 21 09:22:16 2003 UTC revision 1.3 by gray, Sun Nov 30 00:46:44 2003 UTC
# Line 24  Line 24 
24    
25  #include "headers.h"  #include "headers.h"
26    
27    #if defined(WITH_GSASL)
28    
29  struct anubis_db_type {  struct anubis_db_type {
30          char *db_id;                    char *db_id;          
31          anubis_db_open_t db_open;          anubis_db_open_t db_open;
32          anubis_db_close_t db_close;          anubis_db_close_t db_close;
33          anubis_db_io_t db_get_record;          anubis_db_io_t db_get_record;
34          anubis_db_io_t db_put_record;          anubis_db_io_t db_put_record;
35            anubis_db_delete_t db_delete;
36          anubis_db_strerror_t db_strerror;          anubis_db_strerror_t db_strerror;
37  };  };
38    
# Line 61  anubis_db_register(char *dbid, Line 64  anubis_db_register(char *dbid,
64                     anubis_db_close_t _db_close,                     anubis_db_close_t _db_close,
65                     anubis_db_io_t _db_get,                     anubis_db_io_t _db_get,
66                     anubis_db_io_t _db_put,                     anubis_db_io_t _db_put,
67                       anubis_db_delete_t _db_delete,
68                     anubis_db_strerror_t _db_strerror)                     anubis_db_strerror_t _db_strerror)
69  {  {
70          struct anubis_db_type *dbt = xmalloc(sizeof *dbt);          struct anubis_db_type *dbt = xmalloc(sizeof *dbt);
# Line 69  anubis_db_register(char *dbid, Line 73  anubis_db_register(char *dbid,
73          dbt->db_close = _db_close;          dbt->db_close = _db_close;
74          dbt->db_get_record = _db_get;          dbt->db_get_record = _db_get;
75          dbt->db_put_record = _db_put;          dbt->db_put_record = _db_put;
76            dbt->db_delete = _db_delete;
77          dbt->db_strerror = _db_strerror;          dbt->db_strerror = _db_strerror;
78          if (!dbtab)          if (!dbtab)
79                  dbtab = list_create();                  dbtab = list_create();
# Line 78  anubis_db_register(char *dbid, Line 83  anubis_db_register(char *dbid,
83    
84    
85  int  int
86  anubis_db_open(char *dbid, char *arg, enum anubis_db_mode mode, void **dptr)  anubis_db_open(char *arg, enum anubis_db_mode mode, void **dptr)
87  {  {
88          struct anubis_db_instance *inst;          struct anubis_db_instance *inst;
89          struct anubis_db_type *dbt = anubis_db_locate(dbid);          ANUBIS_URL *url;
90            struct anubis_db_type *dbt;
91            int rc;
92                    
93            if (anubis_url_parse(&url, arg))
94                    return EINVAL;
95            
96            dbt = anubis_db_locate(url->method);
97          if (!dbt)          if (!dbt)
98                  return ENOENT;                  return ENOENT;
99          inst = xmalloc(sizeof *inst);          inst = xmalloc(sizeof *inst);
# Line 90  anubis_db_open(char *dbid, char *arg, en Line 102  anubis_db_open(char *dbid, char *arg, en
102          inst->mode = mode;          inst->mode = mode;
103          inst->error_code = 0;          inst->error_code = 0;
104          *dptr = inst;          *dptr = inst;
105          return dbt->db_open(&inst->db_handle, arg, mode);          rc = dbt->db_open(&inst->db_handle, url, mode);
106            anubis_url_destroy(&url);
107            return rc;
108  }  }
109    
110  int  int
# Line 128  anubis_db_put_record(void *dptr, char *k Line 142  anubis_db_put_record(void *dptr, char *k
142                                              &inst->error_code);                                              &inst->error_code);
143  }  }
144    
145    int
146    anubis_db_delete_record(void *dptr, char *key)
147    {
148            struct anubis_db_instance *inst = dptr;
149            if (inst->mode == anubis_db_rdonly) {
150                    inst->error_code = 0;
151                    errno = EACCES;
152                    return 1;
153            }
154            return inst->db_type->db_delete(inst->db_handle, key,
155                                            &inst->error_code);
156    }
157    
158  const char *  const char *
159  anubis_db_strerror(void *dptr)  anubis_db_strerror(void *dptr)
160  {  {
# Line 150  anubis_db_free_record(ANUBIS_USER *rec) Line 177  anubis_db_free_record(ANUBIS_USER *rec)
177          free(rec->rc_file_name);          free(rec->rc_file_name);
178          memset(rec, 0, sizeof *rec);          memset(rec, 0, sizeof *rec);
179  }  }
180    
181    #endif

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.3

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26