#ifdef HAVE_CONFIG_H # include "config.h" #endif #include "xwrap.h" #include #include #include #include #include #define RETRY_SEC 0 #define RETRY_NSEC 250000000 static const char fail_msg[] = "Fail to allocate memory. Retry ...\n"; static const size_t fail_len = STATIC_STRLEN (fail_msg); int xatol (const char* str, long* result) { int errno_save, rval; long lres; char* endptr; errno_save = errno; errno = 0, rval = 0; lres = strtol (str, &endptr, 10); if (str == endptr || errno != 0) { rval = -1; } else { *result = lres; } errno = errno_save; return rval; } void* xmalloc (size_t size) { void* memptr; while ((memptr = malloc (size)) == NULL) { nanosleep (&(struct timespec) { RETRY_SEC, RETRY_NSEC }, NULL); write (STDERR_FILENO, fail_msg, fail_len); } return memptr; }