+\r
+//KIM OJO to prevent suprious "unused result" warnings\r
+\r
+inline void ufread(void *ptr, size_t size, size_t nmemb, FILE *stream){\r
+ size_t res;\r
+ res = fread(ptr,size,nmemb,stream);\r
+ if (res < nmemb)\r
+ throw "ufread I/O error";\r
+\r
+ return;\r
+}\r
+\r
+inline void ufwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream){\r
+ size_t res;\r
+ res = fwrite(ptr,size,nmemb,stream);\r
+ if (res < nmemb)\r
+ throw "ufwrite I/O error";\r
+ return;\r
+}\r
+\r
+// OJO to fail cleanly while doing a realloc\r
+// if we can't realloc we are pretty much screwed anyway but\r
+// it makes the code clearer to not have a bunch of if (!ptr) { printf("..."); exit(1); };\r
+inline void * urealloc(void *ptr, size_t size){\r
+\r
+ void * dest = realloc(ptr,size);\r
+ //don't fail if we requested size 0\r
+ if (dest == NULL && size > 0 )\r
+ throw std::bad_alloc();\r
+ return dest;\r
+\r
+}\r
+\r
+inline void * ucalloc(size_t nmemb, size_t size){\r
+\r
+ void * dest = calloc(nmemb,size);\r
+ //don't fail if we requested size 0\r
+ if (dest == NULL && nmemb > 0 && size > 0 )\r
+ throw std::bad_alloc();\r
+ return dest;\r
+\r
+}\r
+\r
+inline void * umalloc(size_t size){\r
+ void * dest = malloc(size);\r
+ if (dest == NULL && size > 0)\r
+ throw std::bad_alloc();\r
+ return dest;\r
+}\r
+\r