From 245d006815241af4a2896b03985ecdab7869acbb Mon Sep 17 00:00:00 2001 From: Kiyoshi Aman Date: Sun, 2 Jun 2019 10:45:24 -0500 Subject: usr.bin/{m4,man,mesg}: remove, they are handled separately --- usr.bin/m4/lib/ohash.h | 73 ----------- usr.bin/m4/lib/ohash_create_entry.c | 38 ------ usr.bin/m4/lib/ohash_delete.c | 31 ----- usr.bin/m4/lib/ohash_do.c | 111 ---------------- usr.bin/m4/lib/ohash_entries.c | 26 ---- usr.bin/m4/lib/ohash_enum.c | 36 ------ usr.bin/m4/lib/ohash_init.3 | 229 --------------------------------- usr.bin/m4/lib/ohash_init.c | 41 ------ usr.bin/m4/lib/ohash_int.h | 23 ---- usr.bin/m4/lib/ohash_interval.3 | 90 ------------- usr.bin/m4/lib/ohash_interval.c | 36 ------ usr.bin/m4/lib/ohash_lookup_interval.c | 68 ---------- usr.bin/m4/lib/ohash_lookup_memory.c | 64 --------- usr.bin/m4/lib/ohash_qlookup.c | 27 ---- usr.bin/m4/lib/ohash_qlookupi.c | 29 ----- usr.bin/m4/lib/strtonum.c | 73 ----------- 16 files changed, 995 deletions(-) delete mode 100644 usr.bin/m4/lib/ohash.h delete mode 100644 usr.bin/m4/lib/ohash_create_entry.c delete mode 100644 usr.bin/m4/lib/ohash_delete.c delete mode 100644 usr.bin/m4/lib/ohash_do.c delete mode 100644 usr.bin/m4/lib/ohash_entries.c delete mode 100644 usr.bin/m4/lib/ohash_enum.c delete mode 100644 usr.bin/m4/lib/ohash_init.3 delete mode 100644 usr.bin/m4/lib/ohash_init.c delete mode 100644 usr.bin/m4/lib/ohash_int.h delete mode 100644 usr.bin/m4/lib/ohash_interval.3 delete mode 100644 usr.bin/m4/lib/ohash_interval.c delete mode 100644 usr.bin/m4/lib/ohash_lookup_interval.c delete mode 100644 usr.bin/m4/lib/ohash_lookup_memory.c delete mode 100644 usr.bin/m4/lib/ohash_qlookup.c delete mode 100644 usr.bin/m4/lib/ohash_qlookupi.c delete mode 100644 usr.bin/m4/lib/strtonum.c (limited to 'usr.bin/m4/lib') diff --git a/usr.bin/m4/lib/ohash.h b/usr.bin/m4/lib/ohash.h deleted file mode 100644 index 8ccdaf9..0000000 --- a/usr.bin/m4/lib/ohash.h +++ /dev/null @@ -1,73 +0,0 @@ -#ifndef OHASH_H -#define OHASH_H -/* $OpenBSD: ohash.h,v 1.8 2005/12/29 18:54:47 jaredy Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/* Open hashing support. - * Open hashing was chosen because it is much lighter than other hash - * techniques, and more efficient in most cases. - */ - -struct ohash_info { - ptrdiff_t key_offset; - void *data; /* user data */ - void *(*halloc)(size_t, void *); - void (*hfree)(void *, size_t, void *); - void *(*alloc)(size_t, void *); -}; - -struct _ohash_record; - -struct ohash { - struct _ohash_record *t; - struct ohash_info info; - unsigned int size; - unsigned int total; - unsigned int deleted; -}; - -/* For this to be tweakable, we use small primitives, and leave part of the - * logic to the client application. e.g., hashing is left to the client - * application. We also provide a simple table entry lookup that yields - * a hashing table index (opaque) to be used in find/insert/remove. - * The keys are stored at a known position in the client data. - */ -__BEGIN_DECLS -void ohash_init(struct ohash *, unsigned, struct ohash_info *); -void ohash_delete(struct ohash *); - -unsigned int ohash_lookup_interval(struct ohash *, const char *, - const char *, u_int32_t); -unsigned int ohash_lookup_memory(struct ohash *, const char *, - size_t, u_int32_t); -void *ohash_find(struct ohash *, unsigned int); -void *ohash_remove(struct ohash *, unsigned int); -void *ohash_insert(struct ohash *, unsigned int, void *); -void *ohash_first(struct ohash *, unsigned int *); -void *ohash_next(struct ohash *, unsigned int *); -unsigned int ohash_entries(struct ohash *); - -void *ohash_create_entry(struct ohash_info *, const char *, const char **); -u_int32_t ohash_interval(const char *, const char **); - -unsigned int ohash_qlookupi(struct ohash *, const char *, const char **); -unsigned int ohash_qlookup(struct ohash *, const char *); -__END_DECLS -#endif - diff --git a/usr.bin/m4/lib/ohash_create_entry.c b/usr.bin/m4/lib/ohash_create_entry.c deleted file mode 100644 index 3bdc9ab..0000000 --- a/usr.bin/m4/lib/ohash_create_entry.c +++ /dev/null @@ -1,38 +0,0 @@ -/* $OpenBSD: ohash_create_entry.c,v 1.2 2004/06/22 20:00:16 espie Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ohash_int.h" - -/* This handles the common case of variable length keys, where the - * key is stored at the end of the record. - */ -void * -ohash_create_entry(struct ohash_info *i, const char *start, const char **end) -{ - char *p; - - if (!*end) - *end = start + strlen(start); - p = (i->alloc)(i->key_offset + (*end - start) + 1, i->data); - if (p) { - memcpy(p+i->key_offset, start, *end-start); - p[i->key_offset + (*end - start)] = '\0'; - } - return (void *)p; -} diff --git a/usr.bin/m4/lib/ohash_delete.c b/usr.bin/m4/lib/ohash_delete.c deleted file mode 100644 index 12a9c0c..0000000 --- a/usr.bin/m4/lib/ohash_delete.c +++ /dev/null @@ -1,31 +0,0 @@ -/* $OpenBSD: ohash_delete.c,v 1.2 2004/06/22 20:00:16 espie Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ohash_int.h" -/* hash_delete only frees the hash structure. Use hash_first/hash_next - * to free entries as well. */ -void -ohash_delete(struct ohash *h) -{ - (h->info.hfree)(h->t, sizeof(struct _ohash_record) * h->size, - h->info.data); -#ifndef NDEBUG - h->t = NULL; -#endif -} diff --git a/usr.bin/m4/lib/ohash_do.c b/usr.bin/m4/lib/ohash_do.c deleted file mode 100644 index 2b8467d..0000000 --- a/usr.bin/m4/lib/ohash_do.c +++ /dev/null @@ -1,111 +0,0 @@ -/* $OpenBSD: ohash_do.c,v 1.4 2004/06/22 20:00:16 espie Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ohash_int.h" - -static void ohash_resize(struct ohash *); - -static void -ohash_resize(struct ohash *h) -{ - struct _ohash_record *n; - unsigned int ns, j; - unsigned int i, incr; - - if (4 * h->deleted < h->total) - ns = h->size << 1; - else if (3 * h->deleted > 2 * h->total) - ns = h->size >> 1; - else - ns = h->size; - if (ns < MINSIZE) - ns = MINSIZE; -#ifdef STATS_HASH - STAT_HASH_EXPAND++; - STAT_HASH_SIZE += ns - h->size; -#endif - n = (h->info.halloc)(sizeof(struct _ohash_record) * ns, h->info.data); - if (!n) - return; - - for (j = 0; j < h->size; j++) { - if (h->t[j].p != NULL && h->t[j].p != DELETED) { - i = h->t[j].hv % ns; - incr = ((h->t[j].hv % (ns - 2)) & ~1) + 1; - while (n[i].p != NULL) { - i += incr; - if (i >= ns) - i -= ns; - } - n[i].hv = h->t[j].hv; - n[i].p = h->t[j].p; - } - } - (h->info.hfree)(h->t, sizeof(struct _ohash_record) * h->size, - h->info.data); - h->t = n; - h->size = ns; - h->total -= h->deleted; - h->deleted = 0; -} - -void * -ohash_remove(struct ohash *h, unsigned int i) -{ - void *result = __UNCONST(h->t[i].p); - - if (result == NULL || result == DELETED) - return NULL; - -#ifdef STATS_HASH - STAT_HASH_ENTRIES--; -#endif - h->t[i].p = DELETED; - h->deleted++; - if (h->deleted >= MINDELETED && 4 * h->deleted > h->total) - ohash_resize(h); - return result; -} - -void * -ohash_find(struct ohash *h, unsigned int i) -{ - if (h->t[i].p == DELETED) - return NULL; - else - return __UNCONST(h->t[i].p); -} - -void * -ohash_insert(struct ohash *h, unsigned int i, void *p) -{ -#ifdef STATS_HASH - STAT_HASH_ENTRIES++; -#endif - if (h->t[i].p == DELETED) { - h->deleted--; - h->t[i].p = p; - } else { - h->t[i].p = p; - /* Arbitrary resize boundary. Tweak if not efficient enough. */ - if (++h->total * 4 > h->size * 3) - ohash_resize(h); - } - return p; -} diff --git a/usr.bin/m4/lib/ohash_entries.c b/usr.bin/m4/lib/ohash_entries.c deleted file mode 100644 index 683e204..0000000 --- a/usr.bin/m4/lib/ohash_entries.c +++ /dev/null @@ -1,26 +0,0 @@ -/* $OpenBSD: ohash_entries.c,v 1.2 2004/06/22 20:00:16 espie Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ohash_int.h" - -unsigned int -ohash_entries(struct ohash *h) -{ - return h->total - h->deleted; -} diff --git a/usr.bin/m4/lib/ohash_enum.c b/usr.bin/m4/lib/ohash_enum.c deleted file mode 100644 index 966daa1..0000000 --- a/usr.bin/m4/lib/ohash_enum.c +++ /dev/null @@ -1,36 +0,0 @@ -/* $OpenBSD: ohash_enum.c,v 1.3 2004/06/22 20:00:16 espie Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ohash_int.h" - -void * -ohash_first(struct ohash *h, unsigned int *pos) -{ - *pos = 0; - return ohash_next(h, pos); -} - -void * -ohash_next(struct ohash *h, unsigned int *pos) -{ - for (; *pos < h->size; (*pos)++) - if (h->t[*pos].p != DELETED && h->t[*pos].p != NULL) - return __UNCONST(h->t[(*pos)++].p); - return NULL; -} diff --git a/usr.bin/m4/lib/ohash_init.3 b/usr.bin/m4/lib/ohash_init.3 deleted file mode 100644 index a0939a8..0000000 --- a/usr.bin/m4/lib/ohash_init.3 +++ /dev/null @@ -1,229 +0,0 @@ -.\" $OpenBSD: ohash_init.3,v 1.14 2007/05/31 19:19:30 jmc Exp $ -.\" Copyright (c) 1999 Marc Espie -.\" -.\" Permission to use, copy, modify, and distribute this software for any -.\" purpose with or without fee is hereby granted, provided that the above -.\" copyright notice and this permission notice appear in all copies. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -.\" -.Dd $Mdocdate: May 31 2007 $ -.Dt OPEN_HASH 3 -.Os -.Sh NAME -.Nm ohash_init , -.Nm ohash_delete , -.Nm ohash_lookup_interval , -.Nm ohash_lookup_memory , -.Nm ohash_find , -.Nm ohash_remove , -.Nm ohash_insert , -.Nm ohash_first , -.Nm ohash_next , -.Nm ohash_entries -.Nd light-weight open hashing -.Sh SYNOPSIS -.Fd #include -.Fd #include -.Fd #include -.Ft void -.Fn ohash_init "struct ohash *h" "unsigned int size" "struct ohash_info *info" -.Ft void -.Fn ohash_delete "struct ohash *h" -.Ft "unsigned int" -.Fn ohash_lookup_interval "struct ohash *h" "const char *start" "const char *end" "uint32_t hv" -.Ft "unsigned int" -.Fn ohash_lookup_memory "struct ohash *h" "const char *k" "size_t s" "uint32_t hv" -.Ft void * -.Fn ohash_find "struct ohash *h" "unsigned int i" -.Ft void * -.Fn ohash_remove "struct ohash *h" "unsigned int i" -.Ft void * -.Fn ohash_insert "struct ohash *h" "unsigned int i" "void *p" -.Ft void * -.Fn ohash_first "struct ohash *h" "unsigned int *i" -.Ft void * -.Fn ohash_next "struct ohash *h" "unsigned int *i" -.Ft "unsigned int" -.Fn ohash_entries "struct ohash *h" -.Sh DESCRIPTION -These functions have been designed as a fast, extensible alternative to -the usual hash table functions. -They provide storage and retrieval of records indexed by keys, -where a key is a contiguous sequence of bytes at a fixed position in -each record. -Keys can either be NUL-terminated strings or fixed-size memory areas. -All functions take a pointer to an ohash structure as the -.Fa h -function argument. -Storage for this structure should be provided by user code. -.Pp -.Fn ohash_init -initializes the table to store roughly 2 to the power -.Fa size -elements. -.Fa info -holds the position of the key in each record, and two pointers to -.Xr calloc 3 -and -.Xr free 3 Ns -like -functions, to use for managing the table internal storage. -.Pp -.Fn ohash_delete -frees storage internal to -.Fa h . -Elements themselves should be freed by the user first, using for instance -.Fn ohash_first -and -.Fn ohash_next . -.Pp -.Fn ohash_lookup_interval -and -.Fn ohash_lookup_memory -are the basic look-up element functions. -The hashing function result is provided by the user as -.Fa hv . -These return a -.Qq slot -in the ohash table -.Fa h , -to be used with -.Fn ohash_find , -.Fn ohash_insert , -or -.Fn ohash_remove . -This slot is only valid up to the next call to -.Fn ohash_insert -or -.Fn ohash_remove . -.Pp -.Fn ohash_lookup_interval -handles string-like keys. -.Fn ohash_lookup_interval -assumes the key is the interval between -.Fa start -and -.Fa end , -exclusive, -though the actual elements stored in the table should only contain -NUL-terminated keys. -.Pp -.Fn ohash_lookup_memory -assumes the key is the memory area starting at -.Fa k -of size -.Fa s . -All bytes are significant in key comparison. -.Pp -.Fn ohash_find -retrieves an element from a slot -.Fa i -returned by the -.Fn ohash_lookup* -functions. -It returns -.Dv NULL -if the slot is empty. -.Pp -.Fn ohash_insert -inserts a new element -.Fa p -at slot -.Fa i . -Slot -.Fa i -must be empty and element -.Fa p -must have a key corresponding to the -.Fn ohash_lookup* -call. -.Pp -.Fn ohash_remove -removes the element at slot -.Fa i . -It returns the removed element, for user code to dispose of, or -.Dv NULL -if the slot was empty. -.Pp -.Fn ohash_first -and -.Fn ohash_next -can be used to access all elements in an ohash table, like this: -.Bd -literal -offset indent -for (n = ohash_first(h, &i); n != NULL; n = ohash_next(h, &i)) - do_something_with(n); -.Ed -.Pp -.Fa i -points to an auxiliary unsigned integer used to record the current position -in the ohash table. -Those functions are safe to use even while entries are added to/removed -from the table, but in such a case they don't guarantee that new entries -will be returned. -As a special case, they can safely be used to free elements in the table. -.Pp -.Fn ohash_entries -returns the number of elements in the hash table. -.Sh STORAGE HANDLING -Only -.Fn ohash_init , -.Fn ohash_insert , -.Fn ohash_remove -and -.Fn ohash_delete -may call the user-supplied memory functions. -It is the responsibility of the user memory allocation code to verify -that those calls did not fail. -.Pp -If memory allocation fails, -.Fn ohash_init -returns a useless hash table. -.Fn ohash_insert -and -.Fn ohash_remove -still perform the requested operation, but the returned table should be -considered read-only. -It can still be accessed by -.Fn ohash_lookup* , -.Fn ohash_find , -.Fn ohash_first -and -.Fn ohash_next -to dump relevant information to disk before aborting. -.Sh THREAD SAFETY -The open hashing functions are not thread-safe by design. -In particular, in a threaded environment, there is no guarantee that a -.Qq slot -will not move between a -.Fn ohash_lookup* -and a -.Fn ohash_find , -.Fn ohash_insert -or -.Fn ohash_remove -call. -.Pp -Multi-threaded applications should explicitly protect ohash table access. -.Sh SEE ALSO -.Xr ohash_interval 3 -.Rs -.%A Donald E. Knuth -.%B The Art of Computer Programming -.%V Vol. 3 -.%P pp 506-550 -.%D 1973 -.Re -.Sh STANDARDS -Those functions are completely non-standard and should be avoided in -portable programs. -.Sh HISTORY -Those functions were designed and written for -.Ox -.Xr make 1 -by Marc Espie in 1999. diff --git a/usr.bin/m4/lib/ohash_init.c b/usr.bin/m4/lib/ohash_init.c deleted file mode 100644 index 4d24fa4..0000000 --- a/usr.bin/m4/lib/ohash_init.c +++ /dev/null @@ -1,41 +0,0 @@ -/* $OpenBSD: ohash_init.c,v 1.2 2004/06/22 20:00:16 espie Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ohash_int.h" - -void -ohash_init(struct ohash *h, unsigned int size, struct ohash_info *info) -{ - h->size = 1UL << size; - if (h->size < MINSIZE) - h->size = MINSIZE; -#ifdef STATS_HASH - STAT_HASH_CREATION++; - STAT_HASH_SIZE += h->size; -#endif - /* Copy info so that caller may free it. */ - h->info.key_offset = info->key_offset; - h->info.halloc = info->halloc; - h->info.hfree = info->hfree; - h->info.alloc = info->alloc; - h->info.data = info->data; - h->t = (h->info.halloc)(sizeof(struct _ohash_record) * h->size, - h->info.data); - h->total = h->deleted = 0; -} diff --git a/usr.bin/m4/lib/ohash_int.h b/usr.bin/m4/lib/ohash_int.h deleted file mode 100644 index 88c818b..0000000 --- a/usr.bin/m4/lib/ohash_int.h +++ /dev/null @@ -1,23 +0,0 @@ -/* $OpenBSD: ohash_int.h,v 1.3 2006/01/16 15:52:25 espie Exp $ */ - -#if HAVE_NBTOOL_CONFIG_H -#include "nbtool_config.h" -#endif - -#include -#include -#include -#include -#include "ohash.h" - -struct _ohash_record { - u_int32_t hv; - const char *p; -}; - -#define DELETED ((const char *)h) -#define NONE (h->size) - -/* Don't bother changing the hash table if the change is small enough. */ -#define MINSIZE (1UL << 4) -#define MINDELETED 4 diff --git a/usr.bin/m4/lib/ohash_interval.3 b/usr.bin/m4/lib/ohash_interval.3 deleted file mode 100644 index 2e56ca5..0000000 --- a/usr.bin/m4/lib/ohash_interval.3 +++ /dev/null @@ -1,90 +0,0 @@ -.\" $OpenBSD: ohash_interval.3,v 1.11 2007/05/31 19:19:30 jmc Exp $ -.\" Copyright (c) 2001 Marc Espie -.\" -.\" Permission to use, copy, modify, and distribute this software for any -.\" purpose with or without fee is hereby granted, provided that the above -.\" copyright notice and this permission notice appear in all copies. -.\" -.\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -.\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -.\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -.\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -.\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -.\" -.Dd $Mdocdate: May 31 2007 $ -.Dt OPEN_HASH_HELPER 3 -.Os -.Sh NAME -.Nm ohash_interval , -.Nm ohash_create_entry , -.Nm ohash_qlookup , -.Nm ohash_qlookupi -.Nd helper functions for open hashing -.Sh SYNOPSIS -.Fd #include -.Fd #include -.Fd #include -.Ft u_int32_t -.Fn ohash_interval "const char *start" "const char **pend" -.Ft "void *" -.Fn ohash_create_entry "struct ohash_info *info" "const char *start" "const char **pend" -.Ft "unsigned int" -.Fn ohash_qlookupi "struct ohash *h" "const char *start" "const char **pend" -.Ft "unsigned int" -.Fn ohash_qlookup "struct ohash *h" "const char *start" -.Sh DESCRIPTION -These functions are commonly used to simplify open hashing usage, and use -similar conventions. -They operate indifferently on NUL-terminated strings -.Po -by setting -.Fa *pend -= -.Dv NULL -.Pc -or memory ranges -.Po -delimited by -.Fa start -and -.Fa *pend -.Pc . -For NUL-terminated strings, as a side effect, those functions -set -.Fa *pend -to the terminating NUL byte. -.Pp -.Fn ohash_interval -is a simple hashing function that yields good results on common data sets. -.Pp -.Fn ohash_create_entry -can be used to create a new record with a given key. -In that case, -the alloc field of -.Fa info -should point to a -.Xr malloc 3 Ns -like -function to allocate the storage. -.Pp -.Fn ohash_qlookupi -is a wrapper function that simply calls -.Fn ohash_interval -and -.Fn ohash_lookup_interval . -.Pp -.Fn ohash_qlookup -is a variation on -.Fn ohash_qlookupi -designed for NUL-terminated strings. -.Sh SEE ALSO -.Xr ohash_init 3 -.Sh STANDARDS -Those functions are completely non-standard and should be avoided in -portable programs. -.Sh HISTORY -Those functions were designed and written for -.Ox -.Xr make 1 -by Marc Espie in 1999. diff --git a/usr.bin/m4/lib/ohash_interval.c b/usr.bin/m4/lib/ohash_interval.c deleted file mode 100644 index 2434d3b..0000000 --- a/usr.bin/m4/lib/ohash_interval.c +++ /dev/null @@ -1,36 +0,0 @@ -/* $OpenBSD: ohash_interval.c,v 1.3 2006/01/16 15:52:25 espie Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ohash_int.h" - -uint32_t -ohash_interval(const char *s, const char **e) -{ - uint32_t k; - - if (!*e) - *e = s + strlen(s); - if (s == *e) - k = 0; - else - k = *s++; - while (s != *e) - k = ((k << 2) | (k >> 30)) ^ *s++; - return k; -} diff --git a/usr.bin/m4/lib/ohash_lookup_interval.c b/usr.bin/m4/lib/ohash_lookup_interval.c deleted file mode 100644 index e497801..0000000 --- a/usr.bin/m4/lib/ohash_lookup_interval.c +++ /dev/null @@ -1,68 +0,0 @@ -/* $OpenBSD: ohash_lookup_interval.c,v 1.3 2006/01/16 15:52:25 espie Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ohash_int.h" - -unsigned int -ohash_lookup_interval(struct ohash *h, const char *start, const char *end, - uint32_t hv) -{ - unsigned int i, incr; - unsigned int empty; - -#ifdef STATS_HASH - STAT_HASH_LOOKUP++; -#endif - empty = NONE; - i = hv % h->size; - incr = ((hv % (h->size-2)) & ~1) + 1; - while (h->t[i].p != NULL) { -#ifdef STATS_HASH - STAT_HASH_LENGTH++; -#endif - if (h->t[i].p == DELETED) { - if (empty == NONE) - empty = i; - } else if (h->t[i].hv == hv && - strncmp(h->t[i].p+h->info.key_offset, start, - end - start) == 0 && - (h->t[i].p+h->info.key_offset)[end-start] == '\0') { - if (empty != NONE) { - h->t[empty].hv = hv; - h->t[empty].p = h->t[i].p; - h->t[i].p = DELETED; - return empty; - } else { -#ifdef STATS_HASH - STAT_HASH_POSITIVE++; -#endif - return i; - } - } - i += incr; - if (i >= h->size) - i -= h->size; - } - - /* Found an empty position. */ - if (empty != NONE) - i = empty; - h->t[i].hv = hv; - return i; -} diff --git a/usr.bin/m4/lib/ohash_lookup_memory.c b/usr.bin/m4/lib/ohash_lookup_memory.c deleted file mode 100644 index 93ded5a..0000000 --- a/usr.bin/m4/lib/ohash_lookup_memory.c +++ /dev/null @@ -1,64 +0,0 @@ -/* $OpenBSD: ohash_lookup_memory.c,v 1.3 2006/01/16 15:52:25 espie Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ohash_int.h" - -unsigned int -ohash_lookup_memory(struct ohash *h, const char *k, size_t size, uint32_t hv) -{ - unsigned int i, incr; - unsigned int empty; - -#ifdef STATS_HASH - STAT_HASH_LOOKUP++; -#endif - empty = NONE; - i = hv % h->size; - incr = ((hv % (h->size-2)) & ~1) + 1; - while (h->t[i].p != NULL) { -#ifdef STATS_HASH - STAT_HASH_LENGTH++; -#endif - if (h->t[i].p == DELETED) { - if (empty == NONE) - empty = i; - } else if (h->t[i].hv == hv && - memcmp(h->t[i].p+h->info.key_offset, k, size) == 0) { - if (empty != NONE) { - h->t[empty].hv = hv; - h->t[empty].p = h->t[i].p; - h->t[i].p = DELETED; - return empty; - } else { -#ifdef STATS_HASH - STAT_HASH_POSITIVE++; -#endif - } return i; - } - i += incr; - if (i >= h->size) - i -= h->size; - } - - /* Found an empty position. */ - if (empty != NONE) - i = empty; - h->t[i].hv = hv; - return i; -} diff --git a/usr.bin/m4/lib/ohash_qlookup.c b/usr.bin/m4/lib/ohash_qlookup.c deleted file mode 100644 index 58b3454..0000000 --- a/usr.bin/m4/lib/ohash_qlookup.c +++ /dev/null @@ -1,27 +0,0 @@ -/* $OpenBSD: ohash_qlookup.c,v 1.2 2004/06/22 20:00:17 espie Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ohash_int.h" - -unsigned int -ohash_qlookup(struct ohash *h, const char *s) -{ - const char *e = NULL; - return ohash_qlookupi(h, s, &e); -} diff --git a/usr.bin/m4/lib/ohash_qlookupi.c b/usr.bin/m4/lib/ohash_qlookupi.c deleted file mode 100644 index 2acec4e..0000000 --- a/usr.bin/m4/lib/ohash_qlookupi.c +++ /dev/null @@ -1,29 +0,0 @@ -/* $OpenBSD: ohash_qlookupi.c,v 1.2 2004/06/22 20:00:17 espie Exp $ */ -/* ex:ts=8 sw=4: - */ - -/* Copyright (c) 1999, 2004 Marc Espie - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -#include "ohash_int.h" - -unsigned int -ohash_qlookupi(struct ohash *h, const char *s, const char **e) -{ - u_int32_t hv; - - hv = ohash_interval(s, e); - return ohash_lookup_interval(h, s, *e, hv); -} diff --git a/usr.bin/m4/lib/strtonum.c b/usr.bin/m4/lib/strtonum.c deleted file mode 100644 index 8d11712..0000000 --- a/usr.bin/m4/lib/strtonum.c +++ /dev/null @@ -1,73 +0,0 @@ -/* $OpenBSD: strtonum.c,v 1.6 2004/08/03 19:38:01 millert Exp $ */ - -/* - * Copyright (c) 2004 Ted Unangst and Todd Miller - * All rights reserved. - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN - * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF - * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ -#if HAVE_NBTOOL_CONFIG_H -#include "nbtool_config.h" -#endif -#include -__RCSID("$NetBSD: strtonum.c,v 1.2 2009/10/26 21:14:18 christos Exp $"); -#include -#include -#include - -#define INVALID 1 -#define TOOSMALL 2 -#define TOOLARGE 3 - -long long -strtonum(const char *numstr, long long minval, long long maxval, - const char **errstrp); -long long -strtonum(const char *numstr, long long minval, long long maxval, - const char **errstrp) -{ - long long ll = 0; - char *ep; - int error = 0; - struct errval { - const char *errstr; - int err; - } ev[4] = { - { NULL, 0 }, - { "invalid", EINVAL }, - { "too small", ERANGE }, - { "too large", ERANGE }, - }; - - ev[0].err = errno; - errno = 0; - if (minval > maxval) - error = INVALID; - else { - ll = strtoll(numstr, &ep, 10); - if (numstr == ep || *ep != '\0') - error = INVALID; - else if ((ll == LLONG_MIN && errno == ERANGE) || ll < minval) - error = TOOSMALL; - else if ((ll == LLONG_MAX && errno == ERANGE) || ll > maxval) - error = TOOLARGE; - } - if (errstrp != NULL) - *errstrp = ev[error].errstr; - errno = ev[error].err; - if (error) - ll = 0; - - return (ll); -} - -- cgit v1.2.3-70-g09d2