diff options
| author | 2022-10-07 13:48:53 +0200 | |
|---|---|---|
| committer | 2022-10-07 13:48:53 +0200 | |
| commit | a4cf695e60e0d4f79638cb1f37f78b524411efcf (patch) | |
| tree | 3db5747f1f75e67bf5785c18b6753bfa80d6a9fa | |
| parent | Don't indent entry children beyond 4. (diff) | |
| download | penes-snac2-a4cf695e60e0d4f79638cb1f37f78b524411efcf.tar.gz penes-snac2-a4cf695e60e0d4f79638cb1f37f78b524411efcf.tar.xz penes-snac2-a4cf695e60e0d4f79638cb1f37f78b524411efcf.zip | |
Backport from xs.
| -rw-r--r-- | xs.h | 47 | ||||
| -rw-r--r-- | xs_json.h | 2 | ||||
| -rw-r--r-- | xs_openssl.h | 4 | ||||
| -rw-r--r-- | xs_regex.h | 3 | ||||
| -rw-r--r-- | xs_set.h | 2 |
5 files changed, 31 insertions, 27 deletions
| @@ -43,6 +43,7 @@ xstype xs_type(const char *data); | |||
| 43 | int xs_size(const char *data); | 43 | int xs_size(const char *data); |
| 44 | int xs_is_null(char *data); | 44 | int xs_is_null(char *data); |
| 45 | d_char *xs_dup(const char *data); | 45 | d_char *xs_dup(const char *data); |
| 46 | void *xs_realloc(void *ptr, size_t size); | ||
| 46 | d_char *xs_expand(d_char *data, int offset, int size); | 47 | d_char *xs_expand(d_char *data, int offset, int size); |
| 47 | d_char *xs_collapse(d_char *data, int offset, int size); | 48 | d_char *xs_collapse(d_char *data, int offset, int size); |
| 48 | d_char *xs_insert_m(d_char *data, int offset, const char *mem, int size); | 49 | d_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 | ||
| 210 | void *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 | |||
| 209 | d_char *xs_expand(d_char *data, int offset, int size) | 223 | d_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) | |||
| 688 | d_char *xs_val_new(xstype t) | 691 | d_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) | |||
| 699 | d_char *xs_number_new(float f) | 702 | d_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)); |
| @@ -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); |
| @@ -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); |
| @@ -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 | ||
| 14 | xs_set *xs_set_new(int elems); | 14 | xs_set *xs_set_new(int elems); |