the hito embeddable programming language
at main 48 lines 1.1 kB view raw
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}