static int com_lsblob_callback(struct osl_table *table,
const struct osl_object *query, struct osl_object *result)
{
- struct lsblob_action_data lbad = {.flags = *(uint32_t *)query};
+ struct lsblob_action_data lbad = {.flags = *(uint32_t *)query->data};
struct pattern_match_data pmd = {
.table = table,
.patterns = {.data = (char *)query->data + sizeof(uint32_t),
flags |= BLOB_LS_FLAG_REVERSE;
continue;
}
+ break;
}
// if (argc > i)
// return -E_BLOB_SYNTAX;
return blob_get_name_by_id(table_name ## _table, id, name); \
}
+static int blob_get_def_by_id(struct osl_table *table, uint32_t id,
+ struct osl_object *def)
+{
+ struct osl_row *row;
+ struct osl_object obj = {.data = &id, .size = sizeof(id)};
+ int ret;
+
+ def->data = NULL;
+ if (!id)
+ return 1;
+ ret = osl_get_row(table, BLOBCOL_ID, &obj, &row);
+ if (ret < 0)
+ return ret;
+ return osl_open_disk_object(table, row, BLOBCOL_DEF, def);
+}
+
+/** Define the \p get_def_by_id function for this blob type. */
+#define DEFINE_GET_DEF_BY_ID(table_name, cmd_prefix) \
+ int cmd_prefix ## _get_def_by_id(uint32_t id, struct osl_object *def) \
+ { \
+ return blob_get_def_by_id(table_name ## _table, id, def); \
+ }
+
static int blob_get_name_and_def_by_row(struct osl_table *table,
const struct osl_row *row, char **name, struct osl_object *def)
{
DEFINE_BLOB_COMMAND(rm, table_name, cmd_prefix) \
DEFINE_BLOB_COMMAND(mv, 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);