diff options
author | H. Peter Anvin (Intel) <hpa@zytor.com> | 2018-12-11 13:06:14 -0800 |
---|---|---|
committer | H. Peter Anvin (Intel) <hpa@zytor.com> | 2018-12-11 13:37:32 -0800 |
commit | 64471097ca7598e8238f9e5ed25b3afaa9b10f2c (patch) | |
tree | d31d4d84403d36500b30a372d03596ae9459c2d4 /output | |
parent | ebb05a0e5fa8dfae58e6a00e550005df4b0f58f8 (diff) | |
download | nasm-64471097ca7598e8238f9e5ed25b3afaa9b10f2c.tar.gz |
strlist: merge the strtbl and strlist interfaces
The currently-unused strtbl was basically a slightly different version
of strlist, with the find and linearize capabilities. Merge these two
together by augmenting strlist to have the same capabilities.
Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com>
Diffstat (limited to 'output')
-rw-r--r-- | output/outobj.c | 2 | ||||
-rw-r--r-- | output/strtbl.c | 117 | ||||
-rw-r--r-- | output/strtbl.h | 57 |
3 files changed, 1 insertions, 175 deletions
diff --git a/output/outobj.c b/output/outobj.c index 252ce881..252ba3c8 100644 --- a/output/outobj.c +++ b/output/outobj.c @@ -1974,7 +1974,7 @@ static void obj_write_file(void) * Output file dependency information */ if (!obj_nodepend && depend_list) { - list_for_each(depfile, depend_list->head) { + strlist_for_each(depfile, depend_list) { uint32_t ts; ts = obj_file_timestamp(depfile->str); diff --git a/output/strtbl.c b/output/strtbl.c deleted file mode 100644 index 23278f5f..00000000 --- a/output/strtbl.c +++ /dev/null @@ -1,117 +0,0 @@ -/* ----------------------------------------------------------------------- * - * - * Copyright 2017 The NASM Authors - All Rights Reserved - * See the file AUTHORS included with the NASM distribution for - * the specific copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following - * conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * ----------------------------------------------------------------------- */ - -/* - * Common string table handling - * - * A number of output formats use a "string table"; a container for - * a number of strings which may be reused at will. This implements - * a string table which eliminates duplicates and returns the index - * into the string table when queried. - */ - -#include "compiler.h" - -#include "nasm.h" -#include "nasmlib.h" -#include "error.h" -#include "strtbl.h" - -struct strtbl_entry { - size_t index; - size_t bytes; - char str[1]; -}; - -void strtbl_init(struct nasm_strtbl *tbl) -{ - tbl->size = 0; - strtbl_add(tbl, ""); /* Index 0 is always an empty string */ -} - -void strtbl_free(struct nasm_strtbl *tbl) -{ - hash_free_all(&tbl->hash, false); -} - -size_t strtbl_add(struct nasm_strtbl *tbl, const char *str) -{ - void **sep; - struct strtbl_entry *se; - struct hash_insert hi; - size_t bytes = strlen(str) + 1; - - sep = hash_findb(&tbl->hash, str, bytes, &hi); - if (sep) { - se = *sep; - } else { - nasm_new(se); - se->index = tbl->size; - tbl->size += bytes; - se->bytes = bytes; - memcpy(se->str, str, bytes); - - hash_add(&hi, se->str, se); - } - - return se->index; -} - -size_t strtbl_find(struct nasm_strtbl *tbl, const char *str) -{ - void **sep; - struct strtbl_entry *se; - - sep = hash_find(&tbl->hash, str, NULL); - if (sep) { - se = *sep; - return se->index; - } else { - return STRTBL_NONE; - } -} - -/* This create a linearized buffer containing the actual string table */ -void *strtbl_generate(const struct nasm_strtbl *tbl) -{ - char *buf = nasm_malloc(strtbl_size(tbl)); - struct hash_iterator it; - const struct hash_node *np; - - hash_for_each(&tbl->hash, it, np) { - struct strtbl_entry *se = np->data; - memcpy(buf + se->index, se->str, se->bytes); - } - - return buf; -} diff --git a/output/strtbl.h b/output/strtbl.h deleted file mode 100644 index 12771e4e..00000000 --- a/output/strtbl.h +++ /dev/null @@ -1,57 +0,0 @@ -/* ----------------------------------------------------------------------- * - * - * Copyright 2017 The NASM Authors - All Rights Reserved - * See the file AUTHORS included with the NASM distribution for - * the specific copyright holders. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following - * conditions are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials provided - * with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND - * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT - * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - * ----------------------------------------------------------------------- */ - -#ifndef NASM_STRTBL_H -#define NASM_STRTBL_H - -#include "compiler.h" -#include "hashtbl.h" - -struct nasm_strtbl { - size_t size; - struct hash_table hash; -}; - -#define STRTBL_NONE ((size_t)-1) - -void strtbl_init(struct nasm_strtbl *tbl); -void strtbl_free(struct nasm_strtbl *tbl); -size_t strtbl_find(struct nasm_strtbl *tbl, const char *str); -size_t strtbl_add(struct nasm_strtbl *tbl, const char *str); -static inline size_t strtbl_size(const struct nasm_strtbl *tbl) -{ - return tbl->size; -} -void * safe_alloc strtbl_generate(const struct nasm_strtbl *tbl); - -#endif /* NASM_STRTBL_H */ |