Merge the last bit of Diego's code with the modifications:
[SXSI/XMLTree.git] / basics.h
index 273aa1d..7449c11 100644 (file)
--- a/basics.h
+++ b/basics.h
@@ -1,15 +1,21 @@
 #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
@@ -30,6 +36,21 @@ inline void *urealloc(void *ptr, size_t size)
        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