#include "util.h" #include #include #include #include #include bool starts_with_any_impl(const char *str, ...) { va_list args; va_start(args, str); const char *prefix; while ((prefix = va_arg(args, const char *)) != NULL) { if (strncmp(str, prefix, strlen(prefix)) == 0) { va_end(args); return true; } } va_end(args); return false; } noreturn void die_impl(const char *file, int line, const char *fmt, ...) { va_list args; va_start(args, fmt); fprintf(stderr, "[%s:%d] ", file, line); vfprintf(stderr, fmt, args); va_end(args); fputc('\n', stderr); exit(1); } size_t hash_buffer(const char *buf, size_t len) { size_t hash = 2166136261u; for (size_t i = 0; i < len; i++) { hash ^= (unsigned char)buf[i]; hash *= 16777619u; } return hash; } size_t hash_string(const char *str) { size_t hash = 2166136261u; while (*str) { hash ^= (unsigned char)(*str++); hash *= 16777619u; } return hash; }