diff options
Diffstat (limited to 'src/lib')
| -rw-r--r-- | src/lib/main.c | 13 | ||||
| -rw-r--r-- | src/lib/memory.c | 6 | ||||
| -rw-r--r-- | src/lib/syntax.c | 4 |
3 files changed, 17 insertions, 6 deletions
diff --git a/src/lib/main.c b/src/lib/main.c index 161fdde..bba93d3 100644 --- a/src/lib/main.c +++ b/src/lib/main.c @@ -228,3 +228,16 @@ aplwc_valid_line(AplwcLine *l) { return valid_ref(&l->ref); } + +uint64_t aplwc_simulate_failure_at; +uint64_t aplwc_simulate_failure_count; + +int +aplwc_simulate_failure(void) +{ + aplwc_simulate_failure_count++; + if(aplwc_simulate_failure_at && (aplwc_simulate_failure_count >= aplwc_simulate_failure_at)) + return 1; + else + return 0; +} diff --git a/src/lib/memory.c b/src/lib/memory.c index 8dbb5f2..03f2056 100644 --- a/src/lib/memory.c +++ b/src/lib/memory.c @@ -379,13 +379,10 @@ alloc(struct aplwc *aplwc, size_t size, enum chunk_tag tag) if(pad) size += ALIGNMENT - pad; - if(aplwc->fns.hook_alloc && !aplwc->fns.hook_alloc()) - goto fail; - attempt = 0; retry: DEBUG(check_mem(aplwc)); - free = find_free(aplwc, size); + free = FAILCASE(find_free(aplwc, size), NULL); if(!free){ switch(attempt++){ case 0: @@ -399,7 +396,6 @@ retry: goto retry; /* fall-through */ default: -fail: aplwc->last_error = APLWC_OUT_OF_MEMORY; return NULL; } diff --git a/src/lib/syntax.c b/src/lib/syntax.c index 6e08d1b..23138ed 100644 --- a/src/lib/syntax.c +++ b/src/lib/syntax.c @@ -286,8 +286,10 @@ scan_string(struct aplwc *aplwc, struct string *text, int oneline) goto end; tokens = memory_alloc_token_list(aplwc, n); - if(tokens == NULL) + if(tokens == NULL){ + rc = aplwc->last_error; goto end; + } tokens->text = text; tokens->length = n; scan(text, tokens); |