#ifndef _UTIL_H #define _UTIL_H #include struct string_table { unsigned int cnt; unsigned int max; const char *str[0]; }; char *getline_wrapped(FILE *file, unsigned int *linenum); void filename2modname(char *modname, const char *filename); char *underscores(char *string); char *my_basename(const char *path); struct string_table *strtbl_add(const char *str, struct string_table *tbl); void strtbl_free(struct string_table *tbl); const char *next_string(const char *string, unsigned long *secsize); /* * Change endianness of x if conv is true. */ #define END(x, conv) \ ({ \ typeof(x) __x; \ if (conv) __swap_bytes(&(x), &(__x), sizeof(__x)); \ else __x = (x); \ __x; \ }) static inline void __swap_bytes(const void *src, void *dest, unsigned int size) { unsigned int i; for (i = 0; i < size; i++) ((unsigned char*)dest)[i] = ((unsigned char*)src)[size - i-1]; } int native_endianness(void); #define streq(a,b) (strcmp((a),(b)) == 0) #define strstarts(a,start) (strncmp((a),(start), strlen(start)) == 0) int regex_match(const char *string, const char *pattern); #endif