#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>
+
+/***************************************************************************
+ * 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;