const struct osl_object *obj)
{
HASH_TYPE hash[HASH_SIZE];
- hash_object(obj, hash);
+ hash_object(t, obj, hash);
return disk_storage_name_of_hash(t, hash);
}
return -E_OSL_NOMEM;
}
-static void column_name_hash(const char *col_name, HASH_TYPE *hash)
+static void column_name_hash(const struct osl_table *t, const char *col_name,
+ HASH_TYPE *hash)
{
- hash_function(col_name, strlen(col_name), hash);
+ hash_function(t->version, col_name, strlen(col_name), hash);
}
static int init_column_descriptions(struct osl_table *t)
* Read the index header, check for the osl magic string and the table version
* number. Read all information stored in the index header into \a desc.
*
- * \return Standard.
+ * \return The on-disk table version number on success, negative on errors.
*
* \sa struct osl_table_description, osl_create_table.
*/
offset, header_size);
goto err;
}
- return 1;
+ return table_version;
err:
FOR_EACH_COLUMN(i, desc, cd)
free(cd->name);
ret = read_table_desc(&t->index_map, &desc);
if (ret < 0)
return ret;
+ t->version = ret;
ret = -E_OSL_BAD_TABLE_FLAGS;
if (desc.flags != t->desc->flags)
goto out;
sprintf(buf + IDX_OSL_MAGIC, "%s", OSL_MAGIC);
write_u8(buf + IDX_TABLE_FLAGS, t->desc->flags);
write_u8(buf + IDX_DIRTY_FLAG, 0);
- write_u8(buf + IDX_VERSION, CURRENT_TABLE_VERSION);
+ write_u8(buf + IDX_VERSION, t->version);
write_u16(buf + IDX_NUM_COLUMNS, t->num_mapped_columns + t->num_disk_storage_columns);
write_u16(buf + IDX_HEADER_SIZE, t->index_header_size);
offset = IDX_COLUMN_DESCRIPTIONS;
if (ret < 0)
return ret;
- INFO_LOG("creating %s\n", desc->name);
+ t->version = CURRENT_TABLE_VERSION;
+ INFO_LOG("creating version %u table %s\n", t->version, desc->name);
FOR_EACH_COLUMN(i, t->desc, cd) {
if (cd->storage_type == OSL_NO_STORAGE)
continue;
if (ret < 0)
goto out;
}
- column_name_hash(cd->name, t->columns[i].name_hash);
+ column_name_hash(t, cd->name, t->columns[i].name_hash);
ret = -E_OSL_NOMEM;
filename = column_filename(t, i);
if (!filename)
FOR_EACH_COLUMN(i, t->desc, cd) {
if (cd->storage_type == OSL_NO_STORAGE)
continue;
- column_name_hash(cd->name, t->columns[i].name_hash);
+ column_name_hash(t, cd->name, t->columns[i].name_hash);
if (num_rows > 0 && cd->storage_type == OSL_MAPPED_STORAGE) {
ret = map_column(t, i);
if (ret < 0)
int row_is_invalid(struct osl_table *t, uint32_t row_num)
{
char *row_index;
- int i, ret = get_row_index(t, row_num, &row_index);
+ int ret = get_row_index(t, row_num, &row_index);
+ unsigned n;
if (ret < 0)
return ret;
- for (i = 0; i < t->row_index_size; i++) {
- if ((unsigned char)row_index[i] != 0xff)
+ for (n = 0; n < t->row_index_size; n++) {
+ if ((unsigned char)row_index[n] != 0xff)
return 0;
}
INFO_LOG("row %d is invalid\n", row_num);
*/
int init_rbtrees(struct osl_table *t)
{
- int i, ret;
+ int ret;
+ unsigned n;
const struct osl_column_description *cd;
/* create rbtrees */
- FOR_EACH_RBTREE_COLUMN(i, t, cd)
- t->columns[i].rbtree = RB_ROOT;
+ FOR_EACH_RBTREE_COLUMN(n, t, cd)
+ t->columns[n].rbtree = RB_ROOT;
/* add valid rows to rbtrees */
t->num_invalid_rows = 0;
- for (i = 0; i < t->num_rows; i++) {
+ for (n = 0; n < t->num_rows; n++) {
struct osl_object *volatile_objs;
- ret = row_is_invalid(t, i);
+ ret = row_is_invalid(t, n);
if (ret < 0)
return ret;
if (ret) {
return -E_OSL_NOMEM;
} else
volatile_objs = NULL;
- ret = add_row_to_rbtrees(t, i, volatile_objs, NULL);
+ ret = add_row_to_rbtrees(t, n, volatile_objs, NULL);
if (ret < 0)
return ret;
}