OHASH_INTERVAL(3) | Library Functions Manual | OHASH_INTERVAL(3)

# NAME

`ohash_interval`, `ohash_create_entry`, `ohash_qlookup`, `ohash_qlookupi` — helper functions for open hashing

# SYNOPSIS

System Utilities Library (libutil, -lutil)
`#include <stdint.h>`
`#include <stddef.h>`
`#include <ohash.h>`

uint32_t
`ohash_interval`(const char *start, const char **pend);

void *
`ohash_create_entry`(struct ohash_info *info, const char *start, const char **pend);

unsigned int
`ohash_qlookupi`(struct ohash *h, const char *start, const char **pend);

unsigned int
`ohash_qlookup`(struct ohash *h, const char *start);

# DESCRIPTION

These functions are commonly used to simplify open hashing usage, and use similar conventions. They operate indifferently on NUL-terminated strings (by setting *pend = `NULL`) or memory ranges (delimited by start and *pend). For NUL-terminated strings, as a side effect, those functions set *pend to the terminating NUL byte.

`ohash_interval`() is a simple hashing function that yields good results on common data sets.

`ohash_create_entry`() can be used to create a new record with a given key. In that case, the alloc field of info should point to a malloc(3)-like function to allocate the storage:

    p = (*info->alloc)(sz, info->data);

`ohash_qlookupi`() is a wrapper function that simply calls `ohash_interval`() and `ohash_lookup_interval`().

`ohash_qlookup`() is a variation on `ohash_qlookupi`() designed for NUL-terminated strings.

# SEE ALSO

ohash_init(3)

# STANDARDS

Those functions are completely non-standard and should be avoided in portable programs.

# HISTORY

Those functions were designed and written for OpenBSD make(1) by Marc Espie in 1999.

June 13, 2025 | Debian