Merge branch 'develop' into #3-issue
This commit is contained in:
commit
41c46ed1f9
72
src/extra-memory.c
Normal file
72
src/extra-memory.c
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
/* This software is licensed by the MIT License, see LICENSE file */
|
||||||
|
/* Copyright © 2022 Gregory Lirent */
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "../include/extra/cstring.h"
|
||||||
|
#include "__internal/include.h"
|
||||||
|
#undef aligned_alloc
|
||||||
|
#undef malloc
|
||||||
|
#undef realloc
|
||||||
|
#undef calloc
|
||||||
|
|
||||||
|
void* libcdsb_aalloc(size_t a, size_t n) {
|
||||||
|
void* x;
|
||||||
|
|
||||||
|
if ((x = aligned_alloc(a, n)))
|
||||||
|
return x;
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void* libcdsb_calloc(size_t n, size_t c) {
|
||||||
|
void* x;
|
||||||
|
|
||||||
|
if ((x = calloc(n, c)))
|
||||||
|
return x;
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void* libcdsb_malloc(size_t n) {
|
||||||
|
void* x;
|
||||||
|
|
||||||
|
if ((x = malloc(n)))
|
||||||
|
return x;
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void* libcdsb_realloc(void* x, size_t n) {
|
||||||
|
if ((x = realloc(x, n)))
|
||||||
|
return x;
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
void* libcdsb_memndup(const void* m, size_t n) {
|
||||||
|
void* x;
|
||||||
|
|
||||||
|
if ((x = malloc(n)))
|
||||||
|
return memcpy(x, m, n);
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char* libcdsb_strdup(const char* s) {
|
||||||
|
void* x;
|
||||||
|
size_t n;
|
||||||
|
|
||||||
|
if ((x = malloc(n = strlen(s) + 1)))
|
||||||
|
return memcpy(x, s, n);
|
||||||
|
abort();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char* libcdsb_strndup(const char* s, size_t n) {
|
||||||
|
void* x;
|
||||||
|
|
||||||
|
if ((x = malloc(n + 1))) {
|
||||||
|
((char*)memcpy(x, s, n))[n] = 0;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
abort();
|
||||||
|
}
|
56
src/extra-stack.c
Normal file
56
src/extra-stack.c
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
/* This software is licensed by the MIT License, see LICENSE file */
|
||||||
|
/* Copyright © 2022 Gregory Lirent */
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include "__internal/include.h"
|
||||||
|
#undef malloc
|
||||||
|
|
||||||
|
void libcdsb_stack_init(stack_t* x) {
|
||||||
|
memset(x, 0, sizeof(*x));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void libcdsb_stack_push(stack_t* x, void* value) {
|
||||||
|
stack_t* n;
|
||||||
|
|
||||||
|
if (x->value) {
|
||||||
|
if (!(n = malloc(sizeof(*n))))
|
||||||
|
abort();
|
||||||
|
|
||||||
|
n->prev = x->prev;
|
||||||
|
n->value = x->value;
|
||||||
|
x->prev = n;
|
||||||
|
}
|
||||||
|
|
||||||
|
x->value = value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* libcdsb_stack_pop(stack_t* x) {
|
||||||
|
|
||||||
|
stack_t* n;
|
||||||
|
void* v;
|
||||||
|
|
||||||
|
v = x->value;
|
||||||
|
|
||||||
|
if (x->prev) {
|
||||||
|
n = x->prev;
|
||||||
|
x->prev = n->prev;
|
||||||
|
x->value = n->value;
|
||||||
|
free(n);
|
||||||
|
} else x->value = 0;
|
||||||
|
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void libcdsb_stack_flush(stack_t* stack) {
|
||||||
|
stack_t* c;
|
||||||
|
|
||||||
|
while (stack->prev) {
|
||||||
|
c = stack->prev;
|
||||||
|
stack->prev = c->prev;
|
||||||
|
free(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
stack->value = 0;
|
||||||
|
}
|
130
src/extra.c
130
src/extra.c
@ -1,138 +1,8 @@
|
|||||||
/* This software is licensed by the MIT License, see LICENSE file */
|
/* This software is licensed by the MIT License, see LICENSE file */
|
||||||
/* Copyright © 2022 Gregory Lirent */
|
/* Copyright © 2022 Gregory Lirent */
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "../include/extra/cstring.h"
|
#include "../include/extra/cstring.h"
|
||||||
#include "__internal/include.h"
|
#include "__internal/include.h"
|
||||||
#undef aligned_alloc
|
|
||||||
#undef malloc
|
|
||||||
#undef realloc
|
|
||||||
#undef calloc
|
|
||||||
|
|
||||||
/*#####################################################################################################################*/
|
|
||||||
|
|
||||||
void* libcdsb_aalloc(size_t a, size_t n) {
|
|
||||||
void* x;
|
|
||||||
|
|
||||||
if ((x = aligned_alloc(a, n)))
|
|
||||||
return x;
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void* libcdsb_calloc(size_t n, size_t c) {
|
|
||||||
void* x;
|
|
||||||
|
|
||||||
if ((x = calloc(n, c)))
|
|
||||||
return x;
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void* libcdsb_malloc(size_t n) {
|
|
||||||
void* x;
|
|
||||||
|
|
||||||
if ((x = malloc(n)))
|
|
||||||
return x;
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void* libcdsb_realloc(void* x, size_t n) {
|
|
||||||
if ((x = realloc(x, n)))
|
|
||||||
return x;
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*#####################################################################################################################*/
|
|
||||||
|
|
||||||
|
|
||||||
void* libcdsb_memndup(const void* m, size_t n) {
|
|
||||||
void* x;
|
|
||||||
|
|
||||||
if ((x = malloc(n)))
|
|
||||||
return memcpy(x, m, n);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char* libcdsb_strdup(const char* s) {
|
|
||||||
void* x;
|
|
||||||
size_t n;
|
|
||||||
|
|
||||||
if ((x = malloc(n = strlen(s) + 1)))
|
|
||||||
return memcpy(x, s, n);
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char* libcdsb_strndup(const char* s, size_t n) {
|
|
||||||
void* x;
|
|
||||||
|
|
||||||
if ((x = malloc(n + 1))) {
|
|
||||||
((char*)memcpy(x, s, n))[n] = 0;
|
|
||||||
return x;
|
|
||||||
}
|
|
||||||
abort();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*#####################################################################################################################*/
|
|
||||||
|
|
||||||
|
|
||||||
void libcdsb_stack_init(stack_t* x) {
|
|
||||||
memset(x, 0, sizeof(*x));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void libcdsb_stack_push(stack_t* x, void* value) {
|
|
||||||
stack_t* n;
|
|
||||||
|
|
||||||
if (x->value) {
|
|
||||||
if (!(n = malloc(sizeof(*n))))
|
|
||||||
abort();
|
|
||||||
|
|
||||||
n->prev = x->prev;
|
|
||||||
n->value = x->value;
|
|
||||||
x->prev = n;
|
|
||||||
}
|
|
||||||
|
|
||||||
x->value = value;
|
|
||||||
}
|
|
||||||
|
|
||||||
void* libcdsb_stack_pop(stack_t* x) {
|
|
||||||
|
|
||||||
stack_t* n;
|
|
||||||
void* v;
|
|
||||||
|
|
||||||
v = x->value;
|
|
||||||
|
|
||||||
if (x->prev) {
|
|
||||||
n = x->prev;
|
|
||||||
x->prev = n->prev;
|
|
||||||
x->value = n->value;
|
|
||||||
free(n);
|
|
||||||
} else x->value = 0;
|
|
||||||
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void libcdsb_stack_flush(stack_t* stack) {
|
|
||||||
stack_t* c;
|
|
||||||
|
|
||||||
while (stack->prev) {
|
|
||||||
c = stack->prev;
|
|
||||||
stack->prev = c->prev;
|
|
||||||
free(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
stack->value = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*#####################################################################################################################*/
|
|
||||||
|
|
||||||
|
|
||||||
size_t libcdsb_strlen(const char* s) {
|
size_t libcdsb_strlen(const char* s) {
|
||||||
static const size_t m = (sizeof(size_t) == 8) ? 0x8080808080808080UL : 0x80808080UL;
|
static const size_t m = (sizeof(size_t) == 8) ? 0x8080808080808080UL : 0x80808080UL;
|
||||||
|
Loading…
Reference in New Issue
Block a user