]> git.tuebingen.mpg.de Git - osl.git/blobdiff - osl.c
Remove sha1.h.
[osl.git] / osl.c
diff --git a/osl.c b/osl.c
index 80bec0f4fb8fcc8b7ea38b9329a3aa04a54feacd..c5f70ffa1af9bfa5f57c29f5c3ee4a8ce2462b98 100644 (file)
--- a/osl.c
+++ b/osl.c
 #include "util.h"
 #include "osl_core.h"
 
-/* Taken from Drepper: How to write shared libraries, Appendix B. */
+/*
+ * Taken from Drepper: How to write shared libraries, Appendix B.
+ *
+ * The main reason for this rather fancy implementation of strerror() is to
+ * avoid having an array of pointers. This is desirable because initialized
+ * pointer variables increase the startup time of the library due to the
+ * processing of relocations.
+ */
 #include <stddef.h>
 #define MSGSTRFIELD(line) MSGSTRFIELD1(line)
 #define MSGSTRFIELD1(line) str##line
@@ -342,7 +349,7 @@ err:
 int read_table_desc(struct osl_object *map, struct osl_table_description *desc)
 {
        char *buf = map->data;
-       uint8_t version, compat_version, create_version;
+       uint8_t table_version;
        uint16_t header_size;
        int ret, i;
        unsigned offset;
@@ -352,20 +359,11 @@ int read_table_desc(struct osl_object *map, struct osl_table_description *desc)
                return -E_OSL_SHORT_TABLE;
        if (strncmp(buf + IDX_OSL_MAGIC, OSL_MAGIC, strlen(OSL_MAGIC)))
                return -E_OSL_NO_MAGIC;
-       version = read_u8(buf + IDX_VERSION);
-       /*
-        * The on-disk version consists of two version numbers: the
-        * create_version (low 4 bits) is the CURRENT_TABLE_VERSION version
-        * number of the library that created the table, and compat_version
-        * (high 4 bits) tells us the lowest version of the library that can
-        * still read this table.
-        */
-       create_version = version & 0xf;
-       compat_version = version >> 4;
-       INFO_LOG("create_version: %u, compat_version: %u\n", create_version,
-               compat_version);
-       if (create_version < MIN_TABLE_VERSION /* table too old */
-               || compat_version > CURRENT_TABLE_VERSION) /* libosl too old */
+       table_version = read_u8(buf + IDX_VERSION);
+       INFO_LOG("osl versions (table/min/current): %u/%u/%u\n",
+               table_version, MIN_TABLE_VERSION, CURRENT_TABLE_VERSION);
+       if (table_version < MIN_TABLE_VERSION /* table too old */
+               || table_version > CURRENT_TABLE_VERSION) /* libosl too old */
                return -E_OSL_VERSION_MISMATCH;
        desc->flags = read_u8(buf + IDX_TABLE_FLAGS);
        desc->num_columns = read_u16(buf + IDX_NUM_COLUMNS);
@@ -500,8 +498,7 @@ static int create_table_index(struct osl_table *t)
        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
-               + (COMPAT_TABLE_VERSION << 4));
+       write_u8(buf + IDX_VERSION, CURRENT_TABLE_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;
@@ -1702,6 +1699,7 @@ __export int osl_get_nth_row(const struct osl_table *t, unsigned col_num,
        unsigned num_rows;
        int ret;
 
+       *result = NULL;
        if (n == 0)
                return -E_OSL_RB_KEY_NOT_FOUND;
        ret = osl_get_num_rows(t, &num_rows);