66 lines
1.1 KiB
C
66 lines
1.1 KiB
C
#ifndef NCTREF_UTILS_H
|
|
#define NCTREF_UTILS_H
|
|
|
|
#include<stddef.h>
|
|
#include<stdbool.h>
|
|
#include<errno.h>
|
|
#include<stdlib.h>
|
|
#include<stdarg.h>
|
|
#include<stdio.h>
|
|
#include <string.h>
|
|
|
|
inline static size_t djb2(const char *str) {
|
|
size_t hash = 5381;
|
|
|
|
int c;
|
|
while((c = *str++)) {
|
|
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
|
|
}
|
|
|
|
return hash;
|
|
}
|
|
|
|
inline static bool unstupid_strtol(const char *str, char **endptr, int base, long *result) {
|
|
errno = 0;
|
|
|
|
char *endptr2 = NULL;
|
|
*result = strtol(str, &endptr2, base);
|
|
|
|
if(endptr2 == str) {
|
|
return false;
|
|
}
|
|
|
|
if(errno == ERANGE) {
|
|
return false;
|
|
}
|
|
|
|
if(endptr) {
|
|
*endptr = endptr2;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
__attribute__((format(printf, 1, 2))) static inline char *malp(const char *fmt, ...) {
|
|
va_list v1, v2;
|
|
va_start(v1, fmt);
|
|
va_copy(v2, v1);
|
|
size_t len = vsnprintf(NULL, 0, fmt, v1);
|
|
va_end(v1);
|
|
va_start(v2, fmt);
|
|
char *str = malloc(len + 1);
|
|
vsnprintf(str, len + 1, fmt, v2);
|
|
str[len] = 0;
|
|
va_end(v2);
|
|
return str;
|
|
}
|
|
|
|
inline static int is_str_equal_check_null(const char *s1, const char *s2) {
|
|
if (!s1 || !s2) {
|
|
return 0;
|
|
}
|
|
return !strcmp(s1, s2);
|
|
}
|
|
|
|
#endif
|