From 9efbaf0bdbb6f1da7b89e2134783cfb68c139e3f Mon Sep 17 00:00:00 2001 From: David Oberhollenzer Date: Sun, 29 Sep 2019 02:56:31 +0200 Subject: Fix str_table_t error behaviour, comments - str_table_t is used by libsquashfs; Don't write to stderr, report an error code instead. - Fix the comments about that and fix the SPDX license identifier while we're at it. Signed-off-by: David Oberhollenzer --- include/str_table.h | 8 +++----- lib/util/str_table.c | 23 ++++++++++------------- 2 files changed, 13 insertions(+), 18 deletions(-) diff --git a/include/str_table.h b/include/str_table.h index b60ead6..60be1d1 100644 --- a/include/str_table.h +++ b/include/str_table.h @@ -1,4 +1,4 @@ -/* SPDX-License-Identifier: GPL-3.0-or-later */ +/* SPDX-License-Identifier: LGPL-3.0-or-later */ /* * str_table.h * @@ -28,14 +28,12 @@ typedef struct { size_t max_strings; } str_table_t; -/* `size` is the number of hash table buckets to use internally. - Returns 0 on success. Internally writes errors to stderr. */ +/* `size` is the number of hash table buckets to use internally. */ SQFS_INTERNAL int str_table_init(str_table_t *table, size_t size); SQFS_INTERNAL void str_table_cleanup(str_table_t *table); -/* Resolve a string to an incremental, unique ID - Returns 0 on success. Internally writes errors to stderr. */ +/* Resolve a string to an incremental, unique ID. */ SQFS_INTERNAL int str_table_get_index(str_table_t *table, const char *str, size_t *idx); diff --git a/lib/util/str_table.c b/lib/util/str_table.c index 34aa70e..3554544 100644 --- a/lib/util/str_table.c +++ b/lib/util/str_table.c @@ -9,8 +9,8 @@ #include #include #include -#include +#include "sqfs/error.h" #include "str_table.h" #include "util.h" @@ -41,10 +41,8 @@ static int strings_grow(str_table_t *table) newsz = table->max_strings ? (table->max_strings * 2) : 16; new = realloc(table->strings, sizeof(table->strings[0]) * newsz); - if (new == NULL) { - perror("growing string table"); - return -1; - } + if (new == NULL) + return SQFS_ERROR_ALLOC; table->strings = new; table->max_strings = newsz; @@ -58,10 +56,8 @@ int str_table_init(str_table_t *table, size_t size) table->buckets = alloc_array(size, sizeof(table->buckets[0])); table->num_buckets = size; - if (table->buckets == NULL) { - perror("initializing string table"); - return -1; - } + if (table->buckets == NULL) + return SQFS_ERROR_ALLOC; return 0; } @@ -91,6 +87,7 @@ int str_table_get_index(str_table_t *table, const char *str, size_t *idx) str_bucket_t *bucket; sqfs_u32 hash; size_t index; + int err; hash = strhash(str); index = hash % table->num_buckets; @@ -105,8 +102,9 @@ int str_table_get_index(str_table_t *table, const char *str, size_t *idx) bucket = bucket->next; } - if (strings_grow(table)) - return -1; + err = strings_grow(table); + if (err) + return err; bucket = calloc(1, sizeof(*bucket)); if (bucket == NULL) @@ -125,8 +123,7 @@ int str_table_get_index(str_table_t *table, const char *str, size_t *idx) return 0; fail_oom: free(bucket); - perror("allocating hash table bucket"); - return -1; + return SQFS_ERROR_ALLOC; } const char *str_table_get_string(str_table_t *table, size_t index) -- cgit v1.2.3