From 25537c3d3b9b68af91573dec39d1f46c3d97f735 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Fri, 10 Dec 2021 09:16:08 -0800 Subject: Checkin: small sprawling updates Small touches to multiple locations in base. Nothing major --- src/base/math/round.c | 13 +++++++++++++ src/base/mem/arena.c | 4 ++-- src/base/mem/compare.c | 2 +- src/base/mem/interface.c | 9 ++------- src/base/sort/double.c | 2 +- src/base/sort/float.c | 2 +- src/base/sort/int.c | 2 +- src/base/sort/int16.c | 2 +- src/base/sort/int32.c | 2 +- src/base/sort/int64.c | 2 +- src/base/sort/int8.c | 2 +- src/base/sort/string.c | 2 +- src/base/sort/uint.c | 2 +- src/base/sort/uint16.c | 2 +- src/base/sort/uint32.c | 2 +- src/base/sort/uint64.c | 2 +- src/base/sort/uint8.c | 2 +- src/base/string/join.c | 2 +- src/base/string/make.c | 8 ++++---- src/base/string/makef.c | 2 +- src/base/string/raw/atoi.c | 11 +++++++++-- src/base/string/raw/ncopy.c | 4 +++- src/base/string/split.c | 4 ++-- src/base/test.c | 2 +- src/base/utf/printable.c | 8 ++++++++ src/base/utf/rules.mk | 1 + src/cmd/core/basename.c | 1 + src/cmd/core/cat.c | 5 +++-- src/cmd/core/date.c | 1 - 29 files changed, 65 insertions(+), 38 deletions(-) create mode 100644 src/base/math/round.c create mode 100644 src/base/utf/printable.c (limited to 'src') diff --git a/src/base/math/round.c b/src/base/math/round.c new file mode 100644 index 0000000..a815152 --- /dev/null +++ b/src/base/math/round.c @@ -0,0 +1,13 @@ +#include +#include + +double +math·round(double x) +{ + double f; + + f = math·floor(x); + if((x-f) > 0.5) + return f+1; + return f; +} diff --git a/src/base/mem/arena.c b/src/base/mem/arena.c index cb1af74..32c4ea8 100644 --- a/src/base/mem/arena.c +++ b/src/base/mem/arena.c @@ -26,13 +26,13 @@ struct mem·Arena }; static void* -·arenaalloc(void *heap, long n, uintptr size) +·arenaalloc(void *heap, uintptr n, uintptr size) { return mem·arenaalloc(heap, n, size); } static void* -·arenarealloc(void *heap, void *old, long n, uintptr size) +·arenarealloc(void *heap, void *old, uintptr n, uintptr size) { /* does not free */ return mem·arenaalloc(heap, n, size); diff --git a/src/base/mem/compare.c b/src/base/mem/compare.c index a2cdd1f..eadd1fa 100644 --- a/src/base/mem/compare.c +++ b/src/base/mem/compare.c @@ -1,7 +1,7 @@ #include int -mem·compare(void *qry, void *ref, uintptr size) +mem·compare(void *qry, uintptr size, void *ref) { intptr i; char *q=qry, *r=ref; diff --git a/src/base/mem/interface.c b/src/base/mem/interface.c index aa76c85..374fac0 100644 --- a/src/base/mem/interface.c +++ b/src/base/mem/interface.c @@ -6,17 +6,12 @@ static void } static void * -·alloc(void *_, uint n, ulong size) { - return malloc(n*size); -} - -static void * -·calloc(void *_, long n, ulong size) { +·calloc(void *_, uintptr n, uintptr size) { return calloc(n, size); } static void * -·realloc(void *_, void *ptr, long n, ulong size) { +·realloc(void *_, void *ptr, uintptr n, uintptr size) { return realloc(ptr, n*size); } diff --git a/src/base/sort/double.c b/src/base/sort/double.c index c3feac2..8dfc721 100644 --- a/src/base/sort/double.c +++ b/src/base/sort/double.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·double(uintptr sz, double arr[]) +sort·double(double arr[],uintptr sz) { double tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/sort/float.c b/src/base/sort/float.c index 57bd482..a62af54 100644 --- a/src/base/sort/float.c +++ b/src/base/sort/float.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·float(uintptr sz, float arr[]) +sort·float(float arr[], uintptr sz) { float tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/sort/int.c b/src/base/sort/int.c index 33e1def..8e7cae7 100644 --- a/src/base/sort/int.c +++ b/src/base/sort/int.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·int(uintptr sz, int arr[]) +sort·int(int arr[], uintptr sz) { int tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/sort/int16.c b/src/base/sort/int16.c index 072a3eb..ab690fb 100644 --- a/src/base/sort/int16.c +++ b/src/base/sort/int16.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·int16(uintptr sz, int16 arr[]) +sort·int16(int16 arr[], uintptr sz) { int16 tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/sort/int32.c b/src/base/sort/int32.c index 27b3b7b..bf209f0 100644 --- a/src/base/sort/int32.c +++ b/src/base/sort/int32.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·int32(uintptr sz, int32 arr[]) +sort·int32(int32 arr[], uintptr sz) { int32 tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/sort/int64.c b/src/base/sort/int64.c index b3fa5d4..21387f6 100644 --- a/src/base/sort/int64.c +++ b/src/base/sort/int64.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·int64(uintptr sz, int64 arr[]) +sort·int64(int64 arr[], uintptr sz) { int64 tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/sort/int8.c b/src/base/sort/int8.c index 5848e6e..fab5dc3 100644 --- a/src/base/sort/int8.c +++ b/src/base/sort/int8.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·int8(uintptr sz, int8 arr[]) +sort·int8(int8 arr[], uintptr sz) { int8 tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/sort/string.c b/src/base/sort/string.c index e8fae66..8f9d05a 100644 --- a/src/base/sort/string.c +++ b/src/base/sort/string.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·string(uintptr sz, byte* arr[]) +sort·string(byte* arr[], uintptr sz) { byte *tmp; #define LESS(i, j) (str·compare(arr[i], arr[j]) < 0) diff --git a/src/base/sort/uint.c b/src/base/sort/uint.c index 5b27330..68c9a70 100644 --- a/src/base/sort/uint.c +++ b/src/base/sort/uint.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·uint(uintptr sz, uint arr[]) +sort·uint(uint arr[], uintptr sz) { uint tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/sort/uint16.c b/src/base/sort/uint16.c index 2b635b4..d0e4c05 100644 --- a/src/base/sort/uint16.c +++ b/src/base/sort/uint16.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·uint16(uintptr sz, uint16 arr[]) +sort·uint16(uint16 arr[], uintptr sz) { uint16 tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/sort/uint32.c b/src/base/sort/uint32.c index 99a58cf..ccc8499 100644 --- a/src/base/sort/uint32.c +++ b/src/base/sort/uint32.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·uint32(uintptr sz, uint32 arr[]) +sort·uint32(uint32 arr[], uintptr sz) { uint32 tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/sort/uint64.c b/src/base/sort/uint64.c index 2769825..4134f33 100644 --- a/src/base/sort/uint64.c +++ b/src/base/sort/uint64.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·uint64(uintptr sz, uint64 arr[]) +sort·uint64(uint64 arr[], uintptr sz) { uint64 tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/sort/uint8.c b/src/base/sort/uint8.c index ff02b3c..ef3ab1c 100644 --- a/src/base/sort/uint8.c +++ b/src/base/sort/uint8.c @@ -1,7 +1,7 @@ #include "internal.h" void -sort·uint8(uintptr sz, uint8 arr[]) +sort·uint8(uint8 arr[], uintptr sz) { uint8 tmp; #define LESS(i, j) (arr[i] < arr[j]) diff --git a/src/base/string/join.c b/src/base/string/join.c index 04d4739..9286720 100644 --- a/src/base/string/join.c +++ b/src/base/string/join.c @@ -3,7 +3,7 @@ string string·join(vlong len, byte** fields, byte* sep) { - string s = string·makecap("", 0, 10); + string s = string·nnmake("", 0, 10); int j = 0; for (j = 0; j < len; j++) { diff --git a/src/base/string/make.c b/src/base/string/make.c index 50b8b98..ca38984 100644 --- a/src/base/string/make.c +++ b/src/base/string/make.c @@ -4,7 +4,7 @@ // len defines the length of the c substring that we will copy into our buffer. // the backing buffer will have capacity cap. string -string·makecap(byte *s, vlong len, vlong cap) +string·nnmake(byte *s, vlong len, vlong cap) { struct Hdr* h; @@ -34,13 +34,13 @@ cleanup: // new returns a new dynamic string object, initialized from the given c string. // the backing buffer capacity is equivalent to the string length. string -string·makelen(byte *s, vlong len) +string·nmake(byte *s, vlong len) { 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; - return string·makecap(s, len, cap); + return string·nnmake(s, len, cap); } // new returns a new dynamic string object, initialized from the given c string. @@ -49,5 +49,5 @@ string string·make(byte *s) { vlong len = (!s) ? 0 : str·len(s); - return string·makelen(s, len); + return string·nmake(s, len); } diff --git a/src/base/string/makef.c b/src/base/string/makef.c index 1e0d917..fb076af 100644 --- a/src/base/string/makef.c +++ b/src/base/string/makef.c @@ -9,7 +9,7 @@ string·makef(byte *fmt, ...) va_list args; char bytes[256]; - s = string·makecap(nil, 0, arrlen(bytes)); + s = string·nnmake(nil, 0, arrlen(bytes)); va_start(args, fmt); do{ diff --git a/src/base/string/raw/atoi.c b/src/base/string/raw/atoi.c index e62ec62..d407411 100644 --- a/src/base/string/raw/atoi.c +++ b/src/base/string/raw/atoi.c @@ -1,9 +1,16 @@ long str·atoi(char *s) { - long n = 0; + long neg=0, n = 0; + + /* check for sign */ + if(*s == '-') + neg=1,s++; + else if(*s == '+') + s++; + while(*s) n = 10*n + (*s++ - '0'); - return n; + return neg ? -n : +n; } diff --git a/src/base/string/raw/ncopy.c b/src/base/string/raw/ncopy.c index cf18a4b..df0e9da 100644 --- a/src/base/string/raw/ncopy.c +++ b/src/base/string/raw/ncopy.c @@ -1,5 +1,7 @@ +#include + char * -str·ncopy(char *dst, int n, char *src) +str·ncopy(char *dst, intptr n, char *src) { while(*src && n-- > 0) *dst++ = *src++; diff --git a/src/base/string/split.c b/src/base/string/split.c index 56029e1..ead4c5b 100644 --- a/src/base/string/split.c +++ b/src/base/string/split.c @@ -18,7 +18,7 @@ string·split(string s, byte* tok) for(vlong i = 0; i < sL - tokL; i++){ if((tokL == 1 && s[i] == tokL) || !mem·compare(s + i, tokL, tok)){ - mem·bufpush(fields, string·makelen(s + start, i - start)); + mem·bufpush(fields, string·nmake(s + start, i - start)); if(fields[mem·buflen(fields) - 1] == nil) goto cleanup; start = i + tokL; @@ -26,7 +26,7 @@ string·split(string s, byte* tok) } } - mem·bufpush(fields, string·makelen(s + start, sL - start)); + mem·bufpush(fields, string·nmake(s + start, sL - start)); return fields; diff --git a/src/base/test.c b/src/base/test.c index 6baaf78..ceb9532 100644 --- a/src/base/test.c +++ b/src/base/test.c @@ -23,7 +23,7 @@ test·sort() test[i] = rng·randi(1000000); t = clock(); - sort·int(arrlen(test), test); + sort·int(test, arrlen(test)); t = clock() - t; fmt·print("inlined code took %f ms to execute\n", 1000.*t/CLOCKS_PER_SEC); diff --git a/src/base/utf/printable.c b/src/base/utf/printable.c new file mode 100644 index 0000000..6a8219b --- /dev/null +++ b/src/base/utf/printable.c @@ -0,0 +1,8 @@ +#include "internal.h" + +/* TODO: this is just ascii... */ +int +utf8·printable(rune r) +{ + return (unsigned)r-0x20 < 0x5f; +} diff --git a/src/base/utf/rules.mk b/src/base/utf/rules.mk index 0ed2f8b..934e376 100644 --- a/src/base/utf/rules.mk +++ b/src/base/utf/rules.mk @@ -8,6 +8,7 @@ SRCS_$(d)+=\ $(d)/utf/findlast.c\ $(d)/utf/canfit.c\ $(d)/utf/runelen.c\ + $(d)/utf/printable.c\ $(d)/utf/len.c\ $(d)/utf/runetype-$(UNICODE).c\ $(d)/utf/runewidth-$(UNICODE).c diff --git a/src/cmd/core/basename.c b/src/cmd/core/basename.c index 6b84812..0015f5c 100644 --- a/src/cmd/core/basename.c +++ b/src/cmd/core/basename.c @@ -32,5 +32,6 @@ main(int argc, char *argv[]) p[n] = 0; } sys·write(1,p,str·len(p),&x); + sys·write(1,"\n",1, &x); return 0; } diff --git a/src/cmd/core/cat.c b/src/cmd/core/cat.c index aeed1be..92b082d 100644 --- a/src/cmd/core/cat.c +++ b/src/cmd/core/cat.c @@ -11,15 +11,16 @@ usage(void) static void cat(int fd, char *s) { + int err; intptr nr, nw; char buf[8192]; - while(!(sys·read(fd, buf, sizeof(buf), &nr))){ + while(!(err=sys·read(fd, buf, sizeof(buf), &nr)) && nr>0){ if(sys·write(1, buf, nr, &nw) || nr != nw) fmt·panic("write error copying %s: %r", s); } - if(nr<0) + if(err) fmt·panic("error reading %s: %r", s); } diff --git a/src/cmd/core/date.c b/src/cmd/core/date.c index 225333f..09ec39a 100644 --- a/src/cmd/core/date.c +++ b/src/cmd/core/date.c @@ -1,6 +1,5 @@ #include #include -#include static void usage(void) -- cgit v1.2.1