]> arthur.barton.de Git - netatalk.git/blob - libatalk/cnid/tdb/cnid_tdb_delete.c
a16a99519327bcab826589b3995524b44a67b2d0
[netatalk.git] / libatalk / cnid / tdb / cnid_tdb_delete.c
1 /*
2  *
3  * Copyright (c) 1999. Adrian Sun (asun@zoology.washington.edu)
4  * All Rights Reserved. See COPYRIGHT.
5  *
6  * cnid_delete: delete a CNID from the database 
7  */
8
9 #ifdef HAVE_CONFIG_H
10 #include "config.h"
11 #endif 
12
13 #ifdef CNID_BACKEND_TDB
14
15 #include "cnid_tdb.h"
16
17 int cnid_tdb_delete(struct _cnid_db *cdb, const cnid_t id)
18 {
19     struct _cnid_tdb_private *db;
20     TDB_DATA key, data;
21
22     if (!cdb || !(db = cdb->_private) || !id) {
23         return -1;
24     }
25     memset(&key, 0, sizeof(key));
26     memset(&data, 0, sizeof(data));
27
28     key.dptr  = (unsigned char *)&id;
29     key.dsize = sizeof(cnid_t);
30     data = tdb_fetch(db->tdb_cnid, key);
31     if (!data.dptr)
32     {
33         return 0;
34     }
35     
36     tdb_delete(db->tdb_cnid, key); 
37
38     key.dptr = data.dptr +CNID_DEVINO_OFS;
39     key.dsize = CNID_DEVINO_LEN;
40     tdb_delete(db->tdb_devino, key); 
41
42     key.dptr = data.dptr +CNID_DID_OFS;
43     key.dsize = data.dsize -CNID_DID_OFS;
44     tdb_delete(db->tdb_didname, key); 
45
46     free(data.dptr);
47     return 0;
48 }
49
50 #endif