]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/cnid/cnid_resolve.c
apply parts of the netbsd build patch by Patrick Welche <prlw1@newn.cam.ac.uk>, mostl...
[netatalk.git] / libatalk / cnid / cnid_resolve.c
index 95574fe38f9e0559c56375917e10db1b55ebd17d..86bc4789792bc7ae60e5645a1d753907847c58bb 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * $Id: cnid_resolve.c,v 1.8 2001-10-21 08:33:33 jmarcus Exp $
+ * $Id: cnid_resolve.c,v 1.13 2002-08-30 03:12:52 jmarcus Exp $
  */
 
 #ifdef HAVE_CONFIG_H
@@ -11,7 +11,7 @@
 #include <string.h>
 #include <sys/param.h>
 #include <sys/stat.h>
-#include <syslog.h>
+#include <atalk/logger.h>
 #include <errno.h>
 
 #include <db.h>
 #include "cnid_private.h"
 
 /* Return the did/name pair corresponding to a CNID. */
-char *cnid_resolve(void *CNID, cnid_t *id) {
-       CNID_private *db;
-       DBT key, data;
-       int rc;
-
-       if (!(db = CNID) || !id || !(*id)) {
-               return NULL;
-       }
-
-       memset(&key, 0, sizeof(key));
-       memset(&data, 0, sizeof(data));
-
-       key.data = id;
-       key.size = sizeof(cnid_t);
-       while ((rc = db->db_cnid->get(db->db_cnid, NULL, &key, &data, 0))) {
-               if (rc == DB_LOCK_DEADLOCK) {
-                       continue;
-               }
-
-               if (rc != DB_NOTFOUND) {
-                       syslog(LOG_ERR, "cnid_resolve: Unable to get did/name: %s",
-                              db_strerror(rc));
-               }
-
-               *id = 0;
-               return NULL;
-       }
-
-       memcpy(id, (char *)data.data + CNID_DEVINO_LEN, sizeof(cnid_t));
+char *cnid_resolve(void *CNID, cnid_t *id, void *buffer, u_int32_t len) {
+    CNID_private *db;
+    DBT key, data;
+    int rc;
+
+    if (!(db = CNID) || !id || !(*id)) {
+        return NULL;
+    }
+
+    memset(&key, 0, sizeof(key));
+    memset(&data, 0, sizeof(data));
+
+    data.data = buffer;
+    data.ulen = len;
+    data.flags = DB_DBT_USERMEM;
+
+    key.data = id;
+    key.size = sizeof(cnid_t);
+    while ((rc = db->db_cnid->get(db->db_cnid, NULL, &key, &data, 0))) {
+#ifndef CNID_DB_CDB
+        if (rc == DB_LOCK_DEADLOCK) {
+            continue;
+        }
+#endif /* CNID_DB_CDB */
+
+        if (rc != DB_NOTFOUND) {
+            LOG(log_error, logtype_default, "cnid_resolve: Unable to get did/name: %s",
+                db_strerror(rc));
+        }
+
+        *id = 0;
+        return NULL;
+    }
+
+    memcpy(id, (char *)data.data + CNID_DEVINO_LEN, sizeof(cnid_t));
 #ifdef DEBUG
-       syslog(LOG_INFO, "cnid_resolve: Returning id = %u, did/name = %s",
-              ntohl(*id), (char *)data.data + CNID_HEADER_LEN);
+    LOG(log_info, logtype_default, "cnid_resolve: Returning id = %u, did/name = %s",
+        ntohl(*id), (char *)data.data + CNID_HEADER_LEN);
 #endif
-       return (char *)data.data + CNID_HEADER_LEN;
+    return (char *)data.data + CNID_HEADER_LEN;
 }
 #endif /* CNID_DB */