2 * $Id: cnid_delete.c,v 1.2 2001-06-29 14:14:46 rufustfirefly Exp $
4 * Copyright (c) 1999. Adrian Sun (asun@zoology.washington.edu)
5 * All Rights Reserved. See COPYRIGHT.
7 * cnid_delete: delete a CNID from the database
12 #endif /* HAVE_CONFIG_H */
20 #include <netatalk/endian.h>
21 #include <atalk/adouble.h>
22 #include <atalk/cnid.h>
24 #include "cnid_private.h"
26 int cnid_delete(void *CNID, const cnid_t id)
33 if (!(db = CNID) || !id || (db->flags & CNIDFLAG_DB_RO))
36 txnp = db->dbenv.tx_info;
37 memset(&key, 0, sizeof(key));
38 memset(&data, 0, sizeof(data));
42 if (errno = txn_begin(txnp, NULL, &tid)) {
46 /* get from main database */
48 key.size = sizeof(id);
49 if (errno = db->db_cnid->get(db->db_cnid, tid, &key, &data, 0)) {
56 syslog(LOG_INFO, "cnid_delete: CNID(%x) not in database", id);
59 syslog(LOG_ERR, "cnid_delete: can't delete entry");
64 /* now delete from dev/ino database */
66 key.size = CNID_DEVINO_LEN;
67 if (errno = db->db_devino->del(db->db_devino, tid, &key, 0)) {
68 if (errno == EAGAIN) {
73 /* be silent if there isn't an entry */
74 if (errno != DB_NOTFOUND) {
80 /* get data from the did/name database */
81 /* free from did/macname, did/shortname, and did/longname databases */
83 /* delete from did/name database */
84 key.data = data.data + CNID_DEVINO_LEN;
85 key.size = data.size - CNID_DEVINO_LEN;
86 if (errno = db->db_didname->del(db->db_didname, tid, &key, 0)) {
87 if (errno == EAGAIN) {
92 /* be silent if there isn't an entry */
93 if (errno != DB_NOTFOUND) {
99 /* now delete from main database */
101 key.size = sizeof(id);
102 if (errno = db->db_cnid->del(db->db_cnid, tid, &key, 0)) {
104 if (errno == EAGAIN) {
110 return txn_commit(tid);
113 syslog(LOG_ERR, "cnid_del: unable to delete CNID(%x)", id);