#include "errtab.h"
#undef _S
};
+
__export const char *osl_strerror(int num)
{
if (IS_SYSTEM_ERROR(num))
return msgstr.str + errmsgidx[num];
}
+static int loglevel;
+
+static void __attribute ((constructor)) init_loglevel(void)
+{
+ char *p = getenv("OSL_LOGLEVEL");
+
+ /* don't log anything if unset */
+ loglevel = p? atoi(p) : EMERG + 1;
+}
+
/**
* The log function.
*
time_t t1;
char str[255] = "";
- if (ll < 2)
+ if (ll < loglevel)
return;
outfd = stderr;
time(&t1);
return 1;
}
-/**
- * Compare two osl objects pointing to unsigned integers of 32 bit size.
- *
- * \param obj1 Pointer to the first integer.
- * \param obj2 Pointer to the second integer.
- *
- * \return The values required for an osl compare function.
- *
- * \sa osl_compare_func, osl_hash_compare().
- */
-int uint32_compare(const struct osl_object *obj1, const struct osl_object *obj2)
-{
- uint32_t d1 = read_u32((const char *)obj1->data);
- uint32_t d2 = read_u32((const char *)obj2->data);
-
- if (d1 < d2)
- return 1;
- if (d1 > d2)
- return -1;
- return 0;
-}
-
/**
* Compare two osl objects pointing to hash values.
*
return -E_OSL_VERSION_MISMATCH;
desc->flags = read_u8(buf + IDX_TABLE_FLAGS);
desc->num_columns = read_u16(buf + IDX_NUM_COLUMNS);
- DEBUG_LOG("%u columns\n", desc->num_columns);
+ INFO_LOG("%u columns\n", desc->num_columns);
if (!desc->num_columns)
return -E_OSL_NO_COLUMNS;
header_size = read_u16(buf + IDX_HEADER_SIZE);
if (strcmp(cd1->name, cd2->name))
goto out;
}
- DEBUG_LOG("table description of '%s' matches on-disk data, good\n",
+ INFO_LOG("table description of '%s' matches on-disk data, good\n",
t->desc->name);
ret = 1;
out:
if (!t->num_mapped_columns) /* can this ever happen? */
return 1;
- DEBUG_LOG("unmapping table '%s'\n", t->desc->name);
+ INFO_LOG("unmapping table '%s'\n", t->desc->name);
if (!t->index_map.data)
return -E_OSL_NOT_MAPPED;
if (flags & OSL_MARK_CLEAN)
filename = index_filename(t->desc);
if (!filename)
return -ERRNO_TO_ERROR(ENOMEM);
- DEBUG_LOG("mapping table '%s' (index: %s)\n", t->desc->name, filename);
+ INFO_LOG("mapping table '%s' (index: %s)\n", t->desc->name, filename);
ret = mmap_full_file(filename, flags & MAP_TBL_FL_MAP_RDONLY?
O_RDONLY : O_RDWR, &t->index_map.data, &t->index_map.size, NULL);
free(filename);
if (!t)
return -E_OSL_BAD_TABLE;
+ NOTICE_LOG("closing table %s\n", t->desc->name);
free_volatile_objects(t, flags);
clear_rbtrees(t);
ret = unmap_table(t, flags);
struct osl_table *t;
const struct osl_column_description *cd;
- INFO_LOG("opening table %s\n", table_desc->name);
+ NOTICE_LOG("opening table %s\n", table_desc->name);
ret = init_table_structure(table_desc, &t);
if (ret < 0)
return ret;
return 1;
}
-static int rbtree_loop(struct osl_column *col, void *private_data,
+static int rbtree_loop(struct osl_column *col, void *private_data,
osl_rbtree_loop_func *func)
{
struct rb_node *n, *tmp;
n;
n = tmp, tmp = tmp? rb_next(tmp) : NULL) {
struct osl_row *r = get_row_pointer(n, col->rbtree_num);
- int ret = func(r, private_data);
- if (ret < 0)
- return ret;
+ if (func(r, private_data) < 0)
+ return -E_OSL_LOOP;
}
return 1;
}
-static int rbtree_loop_reverse(struct osl_column *col, void *private_data,
+static int rbtree_loop_reverse(struct osl_column *col, void *private_data,
osl_rbtree_loop_func *func)
{
struct rb_node *n, *tmp;
n;
n = tmp, tmp = tmp? rb_prev(tmp) : NULL) {
struct osl_row *r = get_row_pointer(n, col->rbtree_num);
- int ret = func(r, private_data);
- if (ret < 0)
- return ret;
+ if (func(r, private_data) < 0)
+ return -E_OSL_LOOP;
}
return 1;
}
*
*
* \return Standard. If the termination of the loop was caused by \a func
- * returning a negative value, this value is returned.
+ * returning a negative value, \p -E_OSL_LOOP is returned.
*
* \sa osl_storage_flags, osl_rbtree_loop_reverse(), osl_compare_func.
*/