Replace struct table_info by struct afs_table.
[paraslash.git] / blob.c
diff --git a/blob.c b/blob.c
index 9282b5f..3c87774 100644 (file)
--- a/blob.c
+++ b/blob.c
@@ -9,9 +9,9 @@
 #include <fnmatch.h>
 #include "para.h"
 #include "error.h"
+#include "string.h"
 #include "afh.h"
 #include "afs.h"
-#include "string.h"
 #include "net.h"
 
 static struct osl_column_description blob_cols[] = {
@@ -452,41 +452,62 @@ static int blob_get_name_and_def_by_row(struct osl_table *table,
                        row, name, def); \
        }
 
-/** Define the \p shutdown function for this blob type. */
-#define DEFINE_BLOB_SHUTDOWN(table_name) \
-       void table_name ## _shutdown(enum osl_close_flags flags) \
+/** Define the \p close function for this blob type. */
+#define DEFINE_BLOB_CLOSE(table_name) \
+       void table_name ## _close(void) \
        { \
-               osl_close_table(table_name ## _table, flags); \
+               osl_close_table(table_name ## _table, OSL_MARK_CLEAN); \
                table_name ## _table = NULL; \
        }
 
-static int blob_init(struct osl_table **table,
+/** Define the \p create function for this blob type. */
+#define DEFINE_BLOB_CREATE(table_name) \
+       int table_name ## _create(const char *dir) \
+       { \
+               table_name ## _table_desc.dir = dir; \
+               return osl_create_table(&table_name ## _table_desc); \
+       }
+
+static int blob_open(struct osl_table **table,
                struct osl_table_description *desc,
-               struct table_info *ti, const char *db)
+               const char *dir)
 {
        int ret;
-       desc->dir = db;
-       ti->desc = desc;
-       ret = osl_open_table(ti->desc, table);
+       desc->dir = dir;
+       ret = osl_open_table(desc, table);
        if (ret >= 0)
                return ret;
        *table = NULL;
-       if (ret >= 0 || is_errno(-ret, -ENOENT))
+       if (ret >= 0 || is_errno(-ret, ENOENT))
                return 1;
        return ret;
 }
 
+#define DEFINE_BLOB_OPEN(table_name) \
+       int table_name ## _open(const char *dir) \
+       { \
+               return blob_open(&table_name ## _table, \
+                       &table_name ## _table_desc, dir); \
+       }
+
+
 /** Define the \p init function for this blob type. */
 #define DEFINE_BLOB_INIT(table_name) \
-       int table_name ## _init(struct table_info *ti, const char *db) \
+       void table_name ## _init(struct afs_table *t) \
        { \
-               return blob_init(&table_name ## _table, \
-                       &table_name ## _table_desc, ti, db); \
+               t->name = table_name ## _table_desc.name; \
+               t->open = table_name ## _open; \
+               t->close = table_name ## _close; \
+               t->create = table_name ## _create;\
        }
 
 
 /** Define all functions for this blob type. */
 #define DEFINE_BLOB_FUNCTIONS(table_name, cmd_prefix) \
+       DEFINE_BLOB_OPEN(table_name) \
+       DEFINE_BLOB_CLOSE(table_name) \
+       DEFINE_BLOB_CREATE(table_name) \
+       DEFINE_BLOB_INIT(table_name) \
        DEFINE_BLOB_COMMAND(ls, table_name, cmd_prefix) \
        DEFINE_BLOB_COMMAND(cat, table_name, cmd_prefix) \
        DEFINE_BLOB_COMMAND(add, table_name, cmd_prefix) \
@@ -495,8 +516,6 @@ static int blob_init(struct osl_table **table,
        DEFINE_GET_NAME_BY_ID(table_name, cmd_prefix); \
        DEFINE_GET_DEF_BY_ID(table_name, cmd_prefix); \
        DEFINE_GET_NAME_AND_DEF_BY_ROW(table_name, cmd_prefix); \
-       DEFINE_BLOB_SHUTDOWN(table_name); \
-       DEFINE_BLOB_INIT(table_name);
 
 /** \cond doxygen isn't smart enough to recognize these */
 DEFINE_BLOB_FUNCTIONS(lyrics, lyr);