the hito embeddable programming language
1#include "util.h"
2#include <stdio.h>
3#include <stdlib.h>
4#include <stdarg.h>
5#include <stdnoreturn.h>
6#include <string.h>
7bool starts_with_any_impl(const char *str, ...) {
8 va_list args;
9 va_start(args, str);
10
11 const char *prefix;
12 while ((prefix = va_arg(args, const char *)) != NULL) {
13 if (strncmp(str, prefix, strlen(prefix)) == 0) {
14 va_end(args);
15 return true;
16 }
17 }
18 va_end(args);
19 return false;
20}
21noreturn void die_impl(const char *file, int line, const char *fmt, ...) {
22 va_list args;
23 va_start(args, fmt);
24
25 fprintf(stderr, "[%s:%d] ", file, line);
26 vfprintf(stderr, fmt, args);
27 va_end(args);
28
29 fputc('\n', stderr);
30 exit(1);
31}
32size_t hash_buffer(const char *buf, size_t len) {
33 size_t hash = 2166136261u;
34 for (size_t i = 0; i < len; i++) {
35 hash ^= (unsigned char)buf[i];
36 hash *= 16777619u;
37 }
38 return hash;
39}
40
41size_t hash_string(const char *str) {
42 size_t hash = 2166136261u;
43 while (*str) {
44 hash ^= (unsigned char)(*str++);
45 hash *= 16777619u;
46 }
47 return hash;
48}