aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ds/array.c10
-rw-r--r--src/safe.c2
-rw-r--r--src/tester.c23
3 files changed, 19 insertions, 16 deletions
diff --git a/src/ds/array.c b/src/ds/array.c
index 6a65d49..b36ddf5 100644
--- a/src/ds/array.c
+++ b/src/ds/array.c
@@ -61,7 +61,7 @@ void mos_arr_insert_fn(void *p_arr, size_t i, size_t el_size, size_t init_cap) {
void mos_arr_put_fn(void *p_arr, size_t i, size_t el_size, size_t init_cap) {
ini(i + 1);
- if (i > hdr->len) {
+ if (i >= hdr->len) {
memset((char *)arr + hdr->len * el_size, 0, (i - hdr->len) * el_size);
hdr->len = i + 1;
}
@@ -93,14 +93,14 @@ size_t mos_arr_insert_n_fn(
size_t mos_arr_put_n_fn(
void *p_arr, size_t i, const void *items, size_t n, size_t el_size, size_t init_cap
) {
- ini(i + n + 1);
+ ini(i + n);
if (i > hdr->len) {
memset((char *)arr + hdr->len * el_size, 0, (i - hdr->len) * el_size);
}
memmove((char *)arr + i * el_size, items, n * el_size);
- if (i + n + 1 > hdr->len)
- hdr->len = i + n + 1;
+ if (i + n > hdr->len)
+ hdr->len = i + n;
return i;
}
@@ -125,10 +125,10 @@ size_t mos_arr_del_n_fn(void *arr, size_t i, size_t n, size_t el_size) {
return 0;
size_t new_n = n > hdr->len - i ? hdr->len - i : n;
+ hdr->len -= new_n;
memmove(
(char *)arr + i * el_size, (char *)arr + (i + new_n) * el_size, (hdr->len - i) * el_size
);
- hdr->len -= new_n;
return new_n;
}
diff --git a/src/safe.c b/src/safe.c
index e72dbff..a6cb4b1 100644
--- a/src/safe.c
+++ b/src/safe.c
@@ -40,7 +40,7 @@ void *mos_safe_calloc_fn(size_t count, size_t size, MosSafeErrInfo info) {
void *mos_safe_realloc_fn(void *ptr, size_t size, MosSafeErrInfo info) {
void *p = realloc(ptr, size);
- if (p)
+ if (p || (!p && size == 0))
return p;
ERR_MESS("failed to realloc %p to %zu bytes", ptr, size);
exit(EXIT_FAILURE);
diff --git a/src/tester.c b/src/tester.c
index 7723e97..06a938f 100644
--- a/src/tester.c
+++ b/src/tester.c
@@ -53,16 +53,19 @@ static Outputs suppressed = {
#define nl printf("\n")
static void print_center(const char *text, int color, char padding_char) {
- size_t post_char_count = (RENDER_WIDTH - strlen(text)) / 2;
- size_t pre_char_count = RENDER_WIDTH - post_char_count - strlen(text);
-
- for (size_t i = 1; i < pre_char_count; i++)
- printf("%c", padding_char);
-
- print_color(color, " %s ", text);
-
- for (size_t i = 1; i < post_char_count; i++)
- printf("%c", padding_char);
+ size_t len = strlen(text);
+ if (len + 2 > RENDER_WIDTH) {
+ print_color(color, "%s", text);
+ }
+ else {
+ size_t post_char_count = (RENDER_WIDTH - len) / 2;
+ size_t pre_char_count = RENDER_WIDTH - post_char_count - len;
+ for (size_t i = 1; i < pre_char_count; i++)
+ printf("%c", padding_char);
+ print_color(color, " %s ", text);
+ for (size_t i = 1; i < post_char_count; i++)
+ printf("%c", padding_char);
+ }
nl;
}