Rewrite printing function to make it faster. Now also handles
[SXSI/XMLTree.git] / basics.h
index 273aa1d..97cbec1 100644 (file)
--- a/basics.h
+++ b/basics.h
@@ -1,15 +1,21 @@
-#ifndef BASICS_H\r
-#define BASICS_H\r
+#ifndef BASICS_H_\r
+#define BASICS_H_\r
+\r
 \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
+#define B_ERROR(msg) do { fprintf(stderr,"%s\n", msg); exit(1); } while (0)\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
+      B_ERROR ("ufread I/O error" );\r
     return;\r
  }\r
 \r
@@ -18,7 +24,7 @@ inline void ufwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)
     size_t res;\r
     res = fwrite(ptr,size,nmemb,stream);\r
     if (res < nmemb)\r
-       throw "ufwrite I/O error";\r
+      B_ERROR("ufwrite I/O error");\r
     return;\r
  }\r
 \r
@@ -27,7 +33,24 @@ inline void *urealloc(void *ptr, size_t size)
     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
+      B_ERROR("urealoc error");\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
+      B_ERROR("urecalloc error");\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
+    for(size_t i = 0; i < n_size - o_size;i++)\r
+      ((char *) n_area_start)[i] = 0;\r
     return dest;\r
  }\r
 \r
@@ -36,7 +59,7 @@ inline void *ucalloc(size_t nmemb, size_t size)
     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
+      B_ERROR("ucalloc error");\r
     return dest;\r
  }\r
 \r
@@ -44,7 +67,7 @@ inline void *umalloc(size_t size)
  {\r
     void * dest = malloc(size);\r
     if (dest == NULL && size > 0)\r
-       throw std::bad_alloc();\r
+      B_ERROR("umaloc error");\r
     return dest;\r
  }\r
 \r