diff options
author | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-11-24 17:26:33 +0100 |
---|---|---|
committer | David Oberhollenzer <david.oberhollenzer@sigma-star.at> | 2019-11-24 17:26:33 +0100 |
commit | 2d303a7f0a6076bbf5739bae4f0fa443d0da5203 (patch) | |
tree | c92b98e58628233fe5ea4b728d1d40042a1d260e /lib | |
parent | 67f703a794272d9a241fcaa96b09fdec7b8fc7e7 (diff) |
Cleanup: completely move str_table into libsquashfs internals
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sqfs/Makemodule.am | 1 | ||||
-rw-r--r-- | lib/sqfs/str_table.c (renamed from lib/util/str_table.c) | 2 | ||||
-rw-r--r-- | lib/sqfs/str_table.h | 51 | ||||
-rw-r--r-- | lib/sqfs/xattr_writer.c | 2 | ||||
-rw-r--r-- | lib/util/Makemodule.am | 3 |
5 files changed, 55 insertions, 4 deletions
diff --git a/lib/sqfs/Makemodule.am b/lib/sqfs/Makemodule.am index c687d1c..be405cf 100644 --- a/lib/sqfs/Makemodule.am +++ b/lib/sqfs/Makemodule.am @@ -23,6 +23,7 @@ libsquashfs_la_SOURCES += lib/sqfs/write_super.c lib/sqfs/data_writer/block.c libsquashfs_la_SOURCES += lib/sqfs/data_writer/internal.h lib/sqfs/data_reader.c libsquashfs_la_SOURCES += lib/sqfs/data_writer/common.c libsquashfs_la_SOURCES += lib/sqfs/data_writer/fileapi.c +libsquashfs_la_SOURCES += lib/sqfs/str_table.c lib/sqfs/str_table.h libsquashfs_la_CPPFLAGS = $(AM_CPPFLAGS) libsquashfs_la_LDFLAGS = $(AM_LDFLAGS) libsquashfs_la_CFLAGS = $(AM_CFLAGS) $(PTHREAD_CFLAGS) $(ZLIB_CFLAGS) diff --git a/lib/util/str_table.c b/lib/sqfs/str_table.c index 513b243..1ec0ef7 100644 --- a/lib/util/str_table.c +++ b/lib/sqfs/str_table.c @@ -11,8 +11,8 @@ #include <string.h> #include "sqfs/error.h" -#include "util/str_table.h" #include "util/util.h" +#include "str_table.h" /* R5 hash function (borrowed from reiserfs) */ static sqfs_u32 strhash(const char *s) diff --git a/lib/sqfs/str_table.h b/lib/sqfs/str_table.h new file mode 100644 index 0000000..61f8aa5 --- /dev/null +++ b/lib/sqfs/str_table.h @@ -0,0 +1,51 @@ +/* SPDX-License-Identifier: LGPL-3.0-or-later */ +/* + * str_table.h + * + * Copyright (C) 2019 David Oberhollenzer <goliath@infraroot.at> + */ +#ifndef STR_TABLE_H +#define STR_TABLE_H + +#include "sqfs/predef.h" + +typedef struct str_bucket_t { + struct str_bucket_t *next; + char *str; + size_t index; + size_t refcount; +} str_bucket_t; + +/* Stores strings in a hash table and assigns an incremental, unique ID to + each string. Subsequent additions return the existing ID. The ID can be + used for (hopefully) constant time lookup of the original string. */ +typedef struct { + str_bucket_t **buckets; + size_t num_buckets; + + char **strings; + size_t num_strings; + size_t max_strings; +} str_table_t; + +/* `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. */ +SQFS_INTERNAL +int str_table_get_index(str_table_t *table, const char *str, size_t *idx); + +/* Resolve a unique ID to the string it represents. + Returns NULL if the ID is unknown, i.e. out of bounds. */ +SQFS_INTERNAL +const char *str_table_get_string(str_table_t *table, size_t index); + +SQFS_INTERNAL void str_table_add_ref(str_table_t *table, size_t index); + +SQFS_INTERNAL void str_table_del_ref(str_table_t *table, size_t index); + +SQFS_INTERNAL size_t str_table_get_ref_count(str_table_t *table, size_t index); + +#endif /* STR_TABLE_H */ diff --git a/lib/sqfs/xattr_writer.c b/lib/sqfs/xattr_writer.c index 81ee26c..2e6a074 100644 --- a/lib/sqfs/xattr_writer.c +++ b/lib/sqfs/xattr_writer.c @@ -15,8 +15,8 @@ #include "sqfs/block.h" #include "sqfs/io.h" -#include "util/str_table.h" #include "util/util.h" +#include "str_table.h" #include <stdlib.h> #include <string.h> diff --git a/lib/util/Makemodule.am b/lib/util/Makemodule.am index 07e94e2..426e088 100644 --- a/lib/util/Makemodule.am +++ b/lib/util/Makemodule.am @@ -1,5 +1,4 @@ -libutil_la_SOURCES = include/util/util.h include/util/str_table.h -libutil_la_SOURCES += lib/util/str_table.c lib/util/alloc.c +libutil_la_SOURCES = include/util/util.h lib/util/alloc.c libutil_la_CFLAGS = $(AM_CFLAGS) libutil_la_CPPFLAGS = $(AM_CPPFLAGS) libutil_la_LDFLAGS = $(AM_LDFLAGS) |