summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xs.h47
-rw-r--r--xs_json.h2
-rw-r--r--xs_openssl.h4
-rw-r--r--xs_regex.h3
-rw-r--r--xs_set.h2
5 files changed, 31 insertions, 27 deletions
diff --git a/xs.h b/xs.h
index 079b1f2..0537c33 100644
--- a/xs.h
+++ b/xs.h
@@ -43,6 +43,7 @@ xstype xs_type(const char *data);
43int xs_size(const char *data); 43int xs_size(const char *data);
44int xs_is_null(char *data); 44int xs_is_null(char *data);
45d_char *xs_dup(const char *data); 45d_char *xs_dup(const char *data);
46void *xs_realloc(void *ptr, size_t size);
46d_char *xs_expand(d_char *data, int offset, int size); 47d_char *xs_expand(d_char *data, int offset, int size);
47d_char *xs_collapse(d_char *data, int offset, int size); 48d_char *xs_collapse(d_char *data, int offset, int size);
48d_char *xs_insert_m(d_char *data, int offset, const char *mem, int size); 49d_char *xs_insert_m(d_char *data, int offset, const char *mem, int size);
@@ -198,7 +199,7 @@ d_char *xs_dup(const char *data)
198/* creates a duplicate of data */ 199/* creates a duplicate of data */
199{ 200{
200 int sz = xs_size(data); 201 int sz = xs_size(data);
201 d_char *s = malloc(_xs_blk_size(sz)); 202 d_char *s = xs_realloc(NULL, _xs_blk_size(sz));
202 203
203 memcpy(s, data, sz); 204 memcpy(s, data, sz);
204 205
@@ -206,29 +207,31 @@ d_char *xs_dup(const char *data)
206} 207}
207 208
208 209
210void *xs_realloc(void *ptr, size_t size)
211{
212 d_char *ndata = realloc(ptr, size);
213
214 if (ndata == NULL) {
215 fprintf(stderr, "**OUT OF MEMORY**\n");
216 abort();
217 }
218
219 return ndata;
220}
221
222
209d_char *xs_expand(d_char *data, int offset, int size) 223d_char *xs_expand(d_char *data, int offset, int size)
210/* opens a hole in data */ 224/* opens a hole in data */
211{ 225{
212 int sz = xs_size(data); 226 int sz = xs_size(data);
213 int n;
214 227
215 /* open room */ 228 /* open room */
216 if (sz == 0 || _xs_blk_size(sz) != _xs_blk_size(sz + size)) { 229 if (sz == 0 || _xs_blk_size(sz) != _xs_blk_size(sz + size))
217 d_char *ndata; 230 data = xs_realloc(data, _xs_blk_size(sz + size));
218
219 ndata = realloc(data, _xs_blk_size(sz + size));
220
221 if (ndata == NULL) {
222 fprintf(stderr, "**OUT OF MEMORY**");
223 abort();
224 }
225 else
226 data = ndata;
227 }
228 231
229 /* move up the rest of the data */ 232 /* move up the rest of the data */
230 for (n = sz + size - 1; n >= offset + size; n--) 233 if (data != NULL)
231 data[n] = data[n - size]; 234 memmove(data + offset + size, data + offset, sz - offset);
232 235
233 return data; 236 return data;
234} 237}
@@ -250,7 +253,7 @@ d_char *xs_collapse(d_char *data, int offset, int size)
250 for (n = offset; n < sz; n++) 253 for (n = offset; n < sz; n++)
251 data[n] = data[n + size]; 254 data[n] = data[n + size];
252 255
253 return realloc(data, _xs_blk_size(sz)); 256 return xs_realloc(data, _xs_blk_size(sz));
254} 257}
255 258
256 259
@@ -311,7 +314,7 @@ d_char *xs_fmt(const char *fmt, ...)
311 s = calloc(n, 1); 314 s = calloc(n, 1);
312 315
313 va_start(ap, fmt); 316 va_start(ap, fmt);
314 n = vsnprintf(s, n, fmt, ap); 317 vsnprintf(s, n, fmt, ap);
315 va_end(ap); 318 va_end(ap);
316 } 319 }
317 320
@@ -398,7 +401,7 @@ d_char *xs_list_new(void)
398{ 401{
399 d_char *list; 402 d_char *list;
400 403
401 list = malloc(_xs_blk_size(2)); 404 list = xs_realloc(NULL, _xs_blk_size(2));
402 list[0] = XSTYPE_LIST; 405 list[0] = XSTYPE_LIST;
403 list[1] = XSTYPE_EOL; 406 list[1] = XSTYPE_EOL;
404 407
@@ -573,7 +576,7 @@ d_char *xs_dict_new(void)
573{ 576{
574 d_char *dict; 577 d_char *dict;
575 578
576 dict = malloc(_xs_blk_size(2)); 579 dict = xs_realloc(NULL, _xs_blk_size(2));
577 dict[0] = XSTYPE_DICT; 580 dict[0] = XSTYPE_DICT;
578 dict[1] = XSTYPE_EOD; 581 dict[1] = XSTYPE_EOD;
579 582
@@ -688,7 +691,7 @@ d_char *xs_dict_set(d_char *dict, const char *key, const char *data)
688d_char *xs_val_new(xstype t) 691d_char *xs_val_new(xstype t)
689/* adds a new special value */ 692/* adds a new special value */
690{ 693{
691 d_char *v = malloc(_xs_blk_size(1)); 694 d_char *v = xs_realloc(NULL, _xs_blk_size(1));
692 695
693 v[0] = t; 696 v[0] = t;
694 697
@@ -699,7 +702,7 @@ d_char *xs_val_new(xstype t)
699d_char *xs_number_new(float f) 702d_char *xs_number_new(float f)
700/* adds a new number value */ 703/* adds a new number value */
701{ 704{
702 d_char *v = malloc(_xs_blk_size(1 + sizeof(float))); 705 d_char *v = xs_realloc(NULL, _xs_blk_size(1 + sizeof(float)));
703 706
704 v[0] = XSTYPE_NUMBER; 707 v[0] = XSTYPE_NUMBER;
705 memcpy(&v[1], &f, sizeof(float)); 708 memcpy(&v[1], &f, sizeof(float));
diff --git a/xs_json.h b/xs_json.h
index 4915a62..871dfcf 100644
--- a/xs_json.h
+++ b/xs_json.h
@@ -508,7 +508,7 @@ d_char *xs_json_loads(const char *json)
508 d_char *v = NULL; 508 d_char *v = NULL;
509 js_type t; 509 js_type t;
510 510
511 _xs_json_loads_lexer(&json, &t); 511 free(_xs_json_loads_lexer(&json, &t));
512 512
513 if (t == JS_OBRACK) 513 if (t == JS_OBRACK)
514 v = _xs_json_loads_array(&json, &t); 514 v = _xs_json_loads_array(&json, &t);
diff --git a/xs_openssl.h b/xs_openssl.h
index 9dd538d..9b0f71e 100644
--- a/xs_openssl.h
+++ b/xs_openssl.h
@@ -133,7 +133,7 @@ d_char *xs_rsa_sign(char *secret, char *mem, int size)
133 rsa = PEM_read_bio_RSAPrivateKey(b, NULL, NULL, NULL); 133 rsa = PEM_read_bio_RSAPrivateKey(b, NULL, NULL, NULL);
134 134
135 /* alloc space */ 135 /* alloc space */
136 sig = malloc(RSA_size(rsa)); 136 sig = xs_realloc(NULL, RSA_size(rsa));
137 137
138 if (RSA_sign(NID_sha256, (unsigned char *)mem, size, sig, &sig_len, rsa) == 1) 138 if (RSA_sign(NID_sha256, (unsigned char *)mem, size, sig, &sig_len, rsa) == 1)
139 signature = xs_base64_enc((char *)sig, sig_len); 139 signature = xs_base64_enc((char *)sig, sig_len);
@@ -200,7 +200,7 @@ d_char *xs_evp_sign(char *secret, char *mem, int size)
200 mdctx = EVP_MD_CTX_new(); 200 mdctx = EVP_MD_CTX_new();
201 201
202 sig_len = EVP_PKEY_size(pkey); 202 sig_len = EVP_PKEY_size(pkey);
203 sig = malloc(sig_len); 203 sig = xs_realloc(NULL, sig_len);
204 204
205 EVP_SignInit(mdctx, md); 205 EVP_SignInit(mdctx, md);
206 EVP_SignUpdate(mdctx, mem, size); 206 EVP_SignUpdate(mdctx, mem, size);
diff --git a/xs_regex.h b/xs_regex.h
index 9221233..e0d1b7a 100644
--- a/xs_regex.h
+++ b/xs_regex.h
@@ -60,9 +60,10 @@ d_char *xs_regex_match_n(const char *str, const char *rx, int count)
60 int n = 0; 60 int n = 0;
61 61
62 /* split */ 62 /* split */
63 p = split = xs_regex_split_n(str, rx, count); 63 split = xs_regex_split_n(str, rx, count);
64 64
65 /* now iterate to get only the 'separators' (odd ones) */ 65 /* now iterate to get only the 'separators' (odd ones) */
66 p = split;
66 while (xs_list_iter(&p, &v)) { 67 while (xs_list_iter(&p, &v)) {
67 if (n & 0x1) 68 if (n & 0x1)
68 list = xs_list_append(list, v); 69 list = xs_list_append(list, v);
diff --git a/xs_set.h b/xs_set.h
index c983ce6..7d7a762 100644
--- a/xs_set.h
+++ b/xs_set.h
@@ -8,7 +8,7 @@ typedef struct _xs_set {
8 int elems; /* number of hash entries */ 8 int elems; /* number of hash entries */
9 int used; /* number of used hash entries */ 9 int used; /* number of used hash entries */
10 d_char *list; /* list of stored data */ 10 d_char *list; /* list of stored data */
11 int hash[0]; /* hashed offsets */ 11 int hash[]; /* hashed offsets */
12} xs_set; 12} xs_set;
13 13
14xs_set *xs_set_new(int elems); 14xs_set *xs_set_new(int elems);