#ifndef BASICS_H\r
#define BASICS_H\r
\r
+#include <string>\r
#include <stdio.h>\r
#include <stdlib.h>\r
+#include <string.h> // for memset\r
+#include <sys/types.h>\r
+#include <unistd.h>\r
+#include <errno.h>\r
+\r
\r
inline void ufread(void *ptr, size_t size, size_t nmemb, FILE *stream)\r
{\r
size_t res;\r
res = fread(ptr,size,nmemb,stream);\r
if (res < nmemb)\r
- throw "ufread I/O error";\r
+ throw ("ufread I/O error" );\r
return;\r
}\r
\r
throw std::bad_alloc();\r
return dest;\r
}\r
+// realloc and set to 0\r
+inline void *urecalloc(void *ptr, size_t o_size, size_t n_size)\r
+ {\r
+ if (o_size == n_size)\r
+ return ptr;\r
+ \r
+ void *dest = realloc(ptr,n_size);\r
+ //don't fail if we requested size 0\r
+ if (dest == NULL && n_size > 0 )\r
+ throw std::bad_alloc();\r
+ // Initialize the new area with 0\r
+ void * n_area_start = &(((char*) dest)[o_size]);\r
+ memset(n_area_start,0, n_size - o_size);\r
+ return dest;\r
+ }\r
\r
inline void *ucalloc(size_t nmemb, size_t size)\r
{\r