#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[] = {
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) \
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);