2 * Copyright (c) 1999. Adrian Sun (asun@zoology.washington.edu)
3 * All Rights Reserved. See COPYRIGHT.
5 * cnid_delete: delete a CNID from the database
14 #include <netatalk/endian.h>
15 #include <atalk/adouble.h>
16 #include <atalk/cnid.h>
18 #include "cnid_private.h"
20 int cnid_delete(void *CNID, const cnid_t id)
27 if (!(db = CNID) || !id || (db->flags & CNIDFLAG_DB_RO))
30 txnp = db->dbenv.tx_info;
31 memset(&key, 0, sizeof(key));
32 memset(&data, 0, sizeof(data));
36 if (errno = txn_begin(txnp, NULL, &tid)) {
40 /* get from main database */
42 key.size = sizeof(id);
43 if (errno = db->db_cnid->get(db->db_cnid, tid, &key, &data, 0)) {
50 syslog(LOG_INFO, "cnid_delete: CNID(%x) not in database", id);
53 syslog(LOG_ERR, "cnid_delete: can't delete entry");
58 /* now delete from dev/ino database */
60 key.size = CNID_DEVINO_LEN;
61 if (errno = db->db_devino->del(db->db_devino, tid, &key, 0)) {
62 if (errno == EAGAIN) {
67 /* be silent if there isn't an entry */
68 if (errno != DB_NOTFOUND) {
74 /* get data from the did/name database */
75 /* free from did/macname, did/shortname, and did/longname databases */
77 /* delete from did/name database */
78 key.data = data.data + CNID_DEVINO_LEN;
79 key.size = data.size - CNID_DEVINO_LEN;
80 if (errno = db->db_didname->del(db->db_didname, tid, &key, 0)) {
81 if (errno == EAGAIN) {
86 /* be silent if there isn't an entry */
87 if (errno != DB_NOTFOUND) {
93 /* now delete from main database */
95 key.size = sizeof(id);
96 if (errno = db->db_cnid->del(db->db_cnid, tid, &key, 0)) {
98 if (errno == EAGAIN) {
104 return txn_commit(tid);
107 syslog(LOG_ERR, "cnid_del: unable to delete CNID(%x)", id);