Added TextCollection to .gitignore
[SXSI/XMLTree.git] / basics.h
1 #ifndef BASICS_H\r
2 #define BASICS_H\r
3 \r
4 #include <string>\r
5 #include <stdio.h>\r
6 #include <stdlib.h>\r
7 #include <string.h> // for memset\r
8 #include <sys/types.h>\r
9 #include <unistd.h>\r
10 #include <errno.h>\r
11 \r
12 \r
13 inline void ufread(void *ptr, size_t size, size_t nmemb, FILE *stream)\r
14  {\r
15     size_t res;\r
16     res = fread(ptr,size,nmemb,stream);\r
17     if (res < nmemb)\r
18       throw ("ufread I/O error" );\r
19     return;\r
20  }\r
21 \r
22 inline void ufwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream)\r
23  {\r
24     size_t res;\r
25     res = fwrite(ptr,size,nmemb,stream);\r
26     if (res < nmemb)\r
27        throw "ufwrite I/O error";\r
28     return;\r
29  }\r
30 \r
31 inline void *urealloc(void *ptr, size_t size)\r
32  {\r
33     void *dest = realloc(ptr,size);\r
34     //don't fail if we requested size 0\r
35     if (dest == NULL && size > 0 )\r
36        throw std::bad_alloc();\r
37     return dest;\r
38  }\r
39 // realloc and set to 0\r
40 inline void *urecalloc(void *ptr, size_t o_size, size_t n_size)\r
41  {\r
42    if (o_size == n_size)\r
43      return ptr;\r
44    \r
45     void *dest = realloc(ptr,n_size);\r
46     //don't fail if we requested size 0\r
47     if (dest == NULL && n_size > 0 )\r
48       throw std::bad_alloc();\r
49     // Initialize the new area with 0\r
50     void * n_area_start = &(((char*) dest)[o_size]);\r
51     memset(n_area_start,0, n_size - o_size);\r
52     return dest;\r
53  }\r
54 \r
55 inline void *ucalloc(size_t nmemb, size_t size)\r
56  {\r
57     void * dest = calloc(nmemb,size);\r
58     //don't fail if we requested size 0\r
59     if (dest == NULL && nmemb > 0 && size > 0 )\r
60        throw std::bad_alloc();\r
61     return dest;\r
62  }\r
63 \r
64 inline void *umalloc(size_t size) \r
65  {\r
66     void * dest = malloc(size);\r
67     if (dest == NULL && size > 0)\r
68        throw std::bad_alloc();\r
69     return dest;\r
70  }\r
71 \r
72 #endif\r