From b48327d357e0818d1a6ae2a064cfa7d1567e1242 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Sun, 5 Dec 2021 15:17:44 -0800 Subject: feat(huge): huge refactor (in progress). Commented out libc includes to uncover all explicit dependencies. A large fraction has now been ported over (no testing). I did not port over the command line tools, such as the rc shell. These will be done independently - as of now I just want the library to stand independent. Compilation currently fails due to the lack of math functions. --- src/base/string/append.c | 4 ++-- src/base/string/equals.c | 2 +- src/base/string/grow.c | 2 +- src/base/string/lower.c | 2 +- src/base/string/make.c | 10 +++++----- src/base/string/raw/erfindc.c | 17 +++++++++++++++++ src/base/string/raw/nrfindc.c | 15 +++++++++++++++ src/base/string/raw/rfindc.c | 15 +++++++++++++++ src/base/string/read.c | 2 +- src/base/string/replace.c | 4 ++-- src/base/string/split.c | 2 +- src/base/string/upper.c | 4 ++-- 12 files changed, 63 insertions(+), 16 deletions(-) create mode 100644 src/base/string/raw/erfindc.c create mode 100644 src/base/string/raw/nrfindc.c create mode 100644 src/base/string/raw/rfindc.c (limited to 'src/base/string') diff --git a/src/base/string/append.c b/src/base/string/append.c index 60e1b48..7522f81 100644 --- a/src/base/string/append.c +++ b/src/base/string/append.c @@ -18,7 +18,7 @@ string·appendlen(string *s, vlong n, byte* b) Hdr* h = (Hdr*)(*s - sizeof(Hdr)); - memcpy(*s + string·len(*s), b, n); + mem·copy(*s + string·len(*s), n, b); h->len += n; (*s)[h->len] = '\0'; @@ -30,7 +30,7 @@ string·appendlen(string *s, vlong n, byte* b) int string·append(string *s, byte* b) { - return string·appendlen(s, strlen(b), b); + return string·appendlen(s, str·len(b), b); } // appendbyte will append the given byte to our string. diff --git a/src/base/string/equals.c b/src/base/string/equals.c index 3637d67..ba7fd3b 100644 --- a/src/base/string/equals.c +++ b/src/base/string/equals.c @@ -10,5 +10,5 @@ string·equals(string s, string t) if(sL != tL) return false; - return memcmp(s, t, sL) == 0; + return mem·compare(s, sL, t) == 0; } diff --git a/src/base/string/grow.c b/src/base/string/grow.c index 6abe4cc..dd6b008 100644 --- a/src/base/string/grow.c +++ b/src/base/string/grow.c @@ -25,7 +25,7 @@ string·grow(string *s, vlong delta) newh = (Hdr*)realloc(h, sizeof(*h) + newCap + 1); if (newh == nil) return; - memset(newh->buf + len, '\0', newCap - len); + mem·set(newh->buf + len, newCap - len, '\0'); newh->cap = newCap; newh->len = len; diff --git a/src/base/string/lower.c b/src/base/string/lower.c index 00556d6..c094a5a 100644 --- a/src/base/string/lower.c +++ b/src/base/string/lower.c @@ -8,5 +8,5 @@ string·lower(string s) b = s; e = b + string·len(s); while (b++ != e) - *b = tolower(*b); + *b = utf8·tolower(*b); } diff --git a/src/base/string/make.c b/src/base/string/make.c index d1e594a..50b8b98 100644 --- a/src/base/string/make.c +++ b/src/base/string/make.c @@ -9,7 +9,7 @@ string·makecap(byte *s, vlong len, vlong cap) struct Hdr* h; h = malloc(sizeof(*h) + cap + 1); - if(s == nil) memset(h, 0, sizeof(*h)); + if(s == nil) mem·set(h, sizeof(*h), 0); if(h == nil) return nil; // Allocation failed. @@ -19,8 +19,8 @@ string·makecap(byte *s, vlong len, vlong cap) if(cap < h->len) goto cleanup; if(s != nil && cap > 0){ - memcpy(h->buf, s, h->len); - memset(h->buf + h->len, '\0', h->cap - h->len + 1); + mem·copy(h->buf, h->len, s); + mem·set(h->buf + h->len, h->cap - h->len + 1, '\0'); } return h->buf; @@ -36,7 +36,7 @@ cleanup: string string·makelen(byte *s, vlong len) { - vlong sl = (!s) ? 0 : strlen(s); + vlong sl = (!s) ? 0 : str·len(s); if(sl < len) panicf("attempted to take a bigger substring than string length"); vlong cap = (len == 0) ? 1 : len; @@ -48,6 +48,6 @@ string·makelen(byte *s, vlong len) string string·make(byte *s) { - vlong len = (!s) ? 0 : strlen(s); + vlong len = (!s) ? 0 : str·len(s); return string·makelen(s, len); } diff --git a/src/base/string/raw/erfindc.c b/src/base/string/raw/erfindc.c new file mode 100644 index 0000000..be04cde --- /dev/null +++ b/src/base/string/raw/erfindc.c @@ -0,0 +1,17 @@ +#include +#include + +char* +str·erfindc(char *s, char *e, int c) +{ + int n; + if(e < s) + return nil; + + n = e-s; + c = (uchar)c; + while(n--) + if(s[n]==c) + return s+n; + return nil; +} diff --git a/src/base/string/raw/nrfindc.c b/src/base/string/raw/nrfindc.c new file mode 100644 index 0000000..66c0bee --- /dev/null +++ b/src/base/string/raw/nrfindc.c @@ -0,0 +1,15 @@ +#include +#include + +char* +str·nrfindc(char *s, intptr n, int c) +{ + if(n < 0) + return nil; + + c = (uchar)c; + while(n--) + if(s[n]==c) + return s+n; + return nil; +} diff --git a/src/base/string/raw/rfindc.c b/src/base/string/raw/rfindc.c new file mode 100644 index 0000000..252be67 --- /dev/null +++ b/src/base/string/raw/rfindc.c @@ -0,0 +1,15 @@ +#include +#include + +char* +str·rfindc(char *s, int c) +{ + int n; + + n = str·len(s); + c = (uchar)c; + while(n--) + if(s[n]==c) + return s+n; + return nil; +} diff --git a/src/base/string/read.c b/src/base/string/read.c index f753e24..3bc4f74 100644 --- a/src/base/string/read.c +++ b/src/base/string/read.c @@ -6,7 +6,7 @@ string·read(string s, int size, int n, void *buf) int len; len = MIN(n * size, string·len(s)); - memcpy(buf, s, len); + mem·copy(buf, len, s); return len; } diff --git a/src/base/string/replace.c b/src/base/string/replace.c index 979c385..de3d397 100644 --- a/src/base/string/replace.c +++ b/src/base/string/replace.c @@ -6,8 +6,8 @@ void string·replace(string s, byte* from, byte* to) { - vlong fromL = strlen(from); - vlong toL = strlen(to); + vlong fromL = str·len(from); + vlong toL = str·len(to); if (toL != fromL) { panicf("different sized replacement string not supported"); } vlong l = string·len(s); diff --git a/src/base/string/split.c b/src/base/string/split.c index 6b0a9fd..56029e1 100644 --- a/src/base/string/split.c +++ b/src/base/string/split.c @@ -17,7 +17,7 @@ string·split(string s, byte* tok) mem·buffit(fields, 5); for(vlong i = 0; i < sL - tokL; i++){ - if((tokL == 1 && s[i] == tokL) || !memcmp(s + i, tok, tokL)){ + if((tokL == 1 && s[i] == tokL) || !mem·compare(s + i, tokL, tok)){ mem·bufpush(fields, string·makelen(s + start, i - start)); if(fields[mem·buflen(fields) - 1] == nil) goto cleanup; diff --git a/src/base/string/upper.c b/src/base/string/upper.c index 2110974..1158a55 100644 --- a/src/base/string/upper.c +++ b/src/base/string/upper.c @@ -7,6 +7,6 @@ string·upper(string s) byte *b, *e; b = s; e = b + string·len(s); - while (b++ != e) - *b = toupper(*b); + while (b++ != e) + *b = utf8·toupper(*b); } -- cgit v1.2.1