#include #include #include #include #include "parse.h" void *xmalloc(size_t size) { void *p; p = malloc(size); if (!p) { fprintf(stderr, "malloc: %s", strerror(errno)); exit(errno); } return p; } void *xcalloc(size_t nmemb, size_t size) { void *p; p = xmalloc(nmemb * size); memset(p, '\0', nmemb * size); return p; } char *resize(char *ptr, size_t size) { /* char *ret; if (!ptr) ret = (char *) xcalloc(size, 1); else { ret = (char *) xcalloc(size, 1); memcpy(ret, ptr, size); free(ptr); } return ret;*/ return (char *) realloc(ptr, size); } char *fget(char *s, int size, FILE * stream) { int i; char c; for (i = 0; i < size; i++) { s[i] = fgetc(stream); if (s[i] == '\n' || s[i] == '\r') { s[i] = '\n'; s[i + 1] = '\0'; do { c = fgetc(stream); } while (c == '\n' || c == '\r'); fseek(stream, -1, SEEK_CUR); break; } } return s; } char *strnstr(const char *haystack, char *needle, size_t size) { char *max; size_t len = strlen(needle); if (!haystack || !needle || !size) return NULL; for (max = (char *) (haystack + size - len); haystack < max; haystack++) if (*haystack == *needle) if (!strncmp(haystack, needle, len)) return (char *) haystack; return NULL; }