2 * Copyright (C) Joerg Lenneis 2003
3 * Copyright (C) Frank Lahm 2009,2010
4 * All Rights Reserved. See COPYING.
9 #endif /* HAVE_CONFIG_H */
13 #include <atalk/logger.h>
14 #include <netatalk/endian.h>
15 #include <atalk/cnid_dbd_private.h>
24 cnid_update: takes the given cnid and updates the metadata.
25 First, delete given CNID, then re-insert.
28 int dbd_update(DBD *dbd, struct cnid_dbd_rqst *rqst, struct cnid_dbd_rply *rply)
32 memset(&key, 0, sizeof(key));
33 memset(&data, 0, sizeof(data));
36 /* Try to wipe everything, also using the indexes */
37 if (dbd_delete(dbd, rqst, rply, DBIF_CNID) < 0)
39 if (dbd_delete(dbd, rqst, rply, DBIF_IDX_DEVINO) < 0)
41 if (dbd_delete(dbd, rqst, rply, DBIF_IDX_DIDNAME) < 0)
44 /* Make a new entry. */
45 key.data = &rqst->cnid;
46 key.size = sizeof(rqst->cnid);
47 data.data = pack_cnid_data(rqst);
48 data.size = CNID_HEADER_LEN + rqst->namelen + 1;
49 memcpy(data.data, &rqst->cnid, sizeof(rqst->cnid));
51 if (dbif_put(dbd, DBIF_CNID, &key, &data, 0) < 0)
54 LOG(log_debug, logtype_cnid, "dbd_update: Updated dbd with dev/ino: 0x%llx/0x%llx, did: %u, name: %s, cnid: %u",
55 (unsigned long long)rqst->dev, (unsigned long long)rqst->ino, ntohl(rqst->did), rqst->name, ntohl(rqst->cnid));
57 rply->result = CNID_DBD_RES_OK;
61 LOG(log_error, logtype_cnid, "dbd_update: Unable to update CNID: %u, dev/ino: 0x%llx/0x%llx, DID: %u: %s",
62 ntohl(rqst->cnid), (unsigned long long)rqst->dev, (unsigned long long)rqst->ino, ntohl(rqst->did), rqst->name);
64 rply->result = CNID_DBD_RES_ERR_DB;