]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/cnid/cdb/cnid_cdb_add.c
Support for using $u username variable in AFP volume definitions
[netatalk.git] / libatalk / cnid / cdb / cnid_cdb_add.c
index e5e28ab460deff1b111fa0731d936415b8fd82a2..18f42c3cc0ffc36c89fde8c2ba6310d2871bdba0 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * $Id: cnid_cdb_add.c,v 1.2 2005-04-28 20:49:59 bfernhomberg Exp $
- *
  * Copyright (c) 1999. Adrian Sun (asun@zoology.washington.edu)
  * All Rights Reserved. See COPYRIGHT.
  *
 #endif /* HAVE_CONFIG_H */
 
 #ifdef CNID_BACKEND_CDB
+#include <arpa/inet.h>
 #include "cnid_cdb_private.h"
 
+extern int cnid_cdb_update(struct _cnid_db *cdb, cnid_t id, const struct stat *st,
+                           cnid_t did, const char *name, size_t len);
+
 #define tid    NULL
 
-#ifdef ATACC
 static void make_devino_data(unsigned char *buf, dev_t dev, ino_t ino)
 {
     buf[CNID_DEV_LEN - 1] = dev; dev >>= 8;
@@ -40,17 +41,17 @@ static void make_devino_data(unsigned char *buf, dev_t dev, ino_t ino)
     buf[CNID_DEV_LEN + CNID_INO_LEN - 8] = ino;    
 }
 
-char *make_cnid_data(const struct stat *st,const cnid_t did,
-                     const char *name, const int len)
+unsigned char *make_cnid_data(u_int32_t flags, const struct stat *st, const cnid_t did,
+                     const char *name, const size_t len)
 {
-    static char start[CNID_HEADER_LEN + MAXPATHLEN + 1];
-    char *buf = start  +CNID_LEN;
+    static unsigned char start[CNID_HEADER_LEN + MAXPATHLEN + 1];
+    unsigned char *buf = start  +CNID_LEN;
     u_int32_t i;
 
     if (len > MAXPATHLEN)
         return NULL;
 
-    make_devino_data(buf, st->st_dev, st->st_ino);
+    make_devino_data(buf, !(flags & CNID_FLAG_NODEV)?st->st_dev:0, st->st_ino);
     buf += CNID_DEVINO_LEN;
 
     i = S_ISDIR(st->st_mode)?1:0;
@@ -67,13 +68,9 @@ char *make_cnid_data(const struct stat *st,const cnid_t did,
 
     return start;
 }    
-#endif
-
-extern int cnid_cdb_update(struct _cnid_db *cdb, const cnid_t id, const struct stat *st,
-                const cnid_t did, char *name, const int len);
 
 /* --------------- */
-int db_stamp(void *buffer, size_t size)
+static int db_stamp(void *buffer, size_t size)
 {
 time_t t;
     memset(buffer, 0, size);
@@ -169,15 +166,14 @@ cleanup:
 
 /* ------------------------ */
 cnid_t cnid_cdb_add(struct _cnid_db *cdb, const struct stat *st,
-                const cnid_t did, char *name, const int len,
-                cnid_t hint)
+                    cnid_t did, const char *name, size_t len, cnid_t hint)
 {
     CNID_private *db;
     DBT key, data;
     cnid_t id;
     int rc;
 
-    if (!cdb || !(db = cdb->_private) || !st || !name) {
+    if (!cdb || !(db = cdb->cnid_db_private) || !st || !name) {
         errno = CNID_ERR_PARAM;
         return CNID_INVALID;
     }
@@ -187,7 +183,7 @@ cnid_t cnid_cdb_add(struct _cnid_db *cdb, const struct stat *st,
     /* ... Return id if it is valid, or if Rootinfo is read-only. */
     if (id || (db->flags & CNIDFLAG_DB_RO)) {
 #ifdef DEBUG
-        LOG(log_info, logtype_default, "cnid_add: Looked up did %u, name %s as %u", ntohl(did), name, ntohl(id));
+        LOG(log_debug9, logtype_default, "cnid_add: Looked up did %u, name %s as %u", ntohl(did), name, ntohl(id));
 #endif
         return id;
     }
@@ -196,7 +192,7 @@ cnid_t cnid_cdb_add(struct _cnid_db *cdb, const struct stat *st,
     memset(&key, 0, sizeof(key));
     memset(&data, 0, sizeof(data));
 
-    if ((data.data = make_cnid_data(st, did, name, len)) == NULL) {
+    if ((data.data = make_cnid_data(cdb->cnid_db_flags, st, did, name, len)) == NULL) {
         LOG(log_error, logtype_default, "cnid_add: Path name is too long");
         errno = CNID_ERR_PATH;
         return CNID_INVALID;
@@ -238,7 +234,7 @@ cnid_t cnid_cdb_add(struct _cnid_db *cdb, const struct stat *st,
     }
 
 #ifdef DEBUG
-    LOG(log_info, logtype_default, "cnid_add: Returned CNID for did %u, name %s as %u", ntohl(did), name, ntohl(hint));
+    LOG(log_debug9, logtype_default, "cnid_add: Returned CNID for did %u, name %s as %u", ntohl(did), name, ntohl(hint));
 #endif
 
     return hint;
@@ -246,13 +242,13 @@ cnid_t cnid_cdb_add(struct _cnid_db *cdb, const struct stat *st,
 
 /* cnid_cbd_getstamp */
 /*-----------------------*/
-int cnid_cdb_getstamp(struct _cnid_db *cdb, void *buffer, const int len)
+int cnid_cdb_getstamp(struct _cnid_db *cdb, void *buffer, const size_t len)
 {
     DBT key, data;
     int rc;
     CNID_private *db;
 
-    if (!cdb || !(db = cdb->_private) || !buffer || !len) {
+    if (!cdb || !(db = cdb->cnid_db_private) || !buffer || !len) {
         errno = CNID_ERR_PARAM;
         return -1;
     }
@@ -287,7 +283,7 @@ int cnid_cdb_getstamp(struct _cnid_db *cdb, void *buffer, const int len)
 
     memcpy(buffer, (char*)data.data + CNID_DEV_OFS, len);
 #ifdef DEBUG
-    LOG(log_info, logtype_cnid, "cnid_getstamp: Returning stamp");
+    LOG(log_debug9, logtype_cnid, "cnid_getstamp: Returning stamp");
 #endif
    return 0;
 }