]> arthur.barton.de Git - netatalk.git/blobdiff - libatalk/locking/locking.c
Big configure.in cleanup
[netatalk.git] / libatalk / locking / locking.c
index c19f27cdd9214112b32c71a9fdda13ddd2f550a0..1511c5d8fba1e08918c18d39393e6a4dc379e54e 100644 (file)
 #include <stdio.h>
 #include <string.h>
 #include <errno.h>
-#include <pthread.h>
+#include <unistd.h>
 
 #include <atalk/logger.h>
 #include <atalk/errchk.h>
 #include <atalk/locking.h>
 #include <atalk/cnid.h>
-#define AFP_LOCKTABLE_SIZE (8*1024*1024)
+#include <atalk/paths.h>
+
+#include "smb_share_modes.h"
+
+/***************************************************************************
+ * structures and defines
+ ***************************************************************************/
+
+#define LOCKTABLE_PATH         "/tmp/netatalk-afp-locks.tdb" 
 
 /* 
  * Struct for building the the main database of file locks.
  * vid + cnid build the primary key for database access.
  */
-struct afp_lock {
+typedef struct afp_lock {
     /* Keys */
-    uint32_t vid;
-    cnid_t cnid;
+    uint32_t l_vid;
+    cnid_t   l_cnid;
+    uint64_t l_dev;
+    uint64_t l_ino;
+
+    /* pid holding the lock, also secondary key */
+    pid_t    l_pid;
 
     /* Refcounting access and deny modes */
-    uint16_t amode_r;
-    uint16_t amode_w;
-    uint16_t dmode_r;
-    uint16_t dmode_w;
-};
+    uint16_t l_amode_r;
+    uint16_t l_amode_w;
+    uint16_t l_dmode_r;
+    uint16_t l_dmode_w;
+} afp_lock_t;
 
-/* 
- * Structure for building a table which provides the way to find locks by pid
- */
-struct pid_lock {
-    /* Key */
-    pid_t pid;
+#define PACKED_AFP_LOCK_SIZE                 \
+    sizeof(((afp_lock_t *)0)->l_vid) +       \
+    sizeof(((afp_lock_t *)0)->l_cnid) +      \
+    sizeof(((afp_lock_t *)0)->l_dev) +       \
+    sizeof(((afp_lock_t *)0)->l_ino) +       \
+    sizeof(((afp_lock_t *)0)->l_pid) +       \
+    sizeof(((afp_lock_t *)0)->l_amode_r) +   \
+    sizeof(((afp_lock_t *)0)->l_amode_w) +   \
+    sizeof(((afp_lock_t *)0)->l_dmode_r) +   \
+    sizeof(((afp_lock_t *)0)->l_dmode_r)
 
-    /* Key for afp_lock */
-    uint32_t vid;
-    cnid_t cnid;
-};
+/***************************************************************************
+ * Data
+ ***************************************************************************/
+
+static struct smbdb_ctx *tdb;
 
 /***************************************************************************
- * Public functios
+ * Private functions
  ***************************************************************************/
 
-int locktable_init(void)
+/***************************************************************************
+ * Public functions
+ ***************************************************************************/
+
+/*!
+ * Open locktable from path
+ */
+int locktable_init(const char *path)
 {
     EC_INIT;
 
+    EC_NULL_LOG(tdb = smb_share_mode_db_open(path));
 
 EC_CLEANUP:
     EC_EXIT;