From f7a916f7620c749d440cb6a76010641675217689 Mon Sep 17 00:00:00 2001 From: Nicholas Noll Date: Thu, 2 Dec 2021 09:18:24 -0800 Subject: many small updates --- src/base/bufio/init.c | 4 ++-- src/base/bufio/readline.c | 11 +++++++++++ src/base/bufio/readuntil.c | 15 ++++++++------- src/base/bufio/rules.mk | 1 + src/base/fmt/vfprint.c | 2 +- src/base/mem/rules.mk | 1 + src/base/string/atoi.c | 11 +++++++++++ src/base/string/rules.mk | 1 + src/rules.mk | 3 +++ 9 files changed, 39 insertions(+), 10 deletions(-) create mode 100644 src/base/bufio/readline.c create mode 100644 src/base/string/atoi.c (limited to 'src') diff --git a/src/base/bufio/init.c b/src/base/bufio/init.c index 7e6dcee..b6814e1 100644 --- a/src/base/bufio/init.c +++ b/src/base/bufio/init.c @@ -75,14 +75,14 @@ bio·initcap(io·Header *io, int fd, int mode, int cap, uchar *buf) io->g = io->e; io->fd = fd; io->cap = cap; - io->pos = io->runesz = io->flag = io->ilen = io->line = 0; + io->pos = io->runesz = io->flag = io->ilen = io->nread = 0; return 0; } int bio·init(io·Buffer *io, int fd, int mode) { - return bio·initcap(header(io), fd, mode, io·BufLen + io·BufUngets, io->b); + return bio·initcap(header(io), fd, mode, io·BufLen + io·BufUngets, io->bytes); } int diff --git a/src/base/bufio/readline.c b/src/base/bufio/readline.c new file mode 100644 index 0000000..0a50098 --- /dev/null +++ b/src/base/bufio/readline.c @@ -0,0 +1,11 @@ +#include "internal.h" + +void * +bio·readline(io·Header *io, int null) +{ + char *start = bio·readuntil(io, '\n'); + if(null && start) + start[io->nread-1] = 0; + + return start; +} diff --git a/src/base/bufio/readuntil.c b/src/base/bufio/readuntil.c index 8084cca..1a0faaf 100644 --- a/src/base/bufio/readuntil.c +++ b/src/base/bufio/readuntil.c @@ -11,7 +11,7 @@ bio·readuntil(io·Header *io, int delim) if(io->state != io·BufRdr){ if(io->state == io·BufEnd) io->state = io·BufRdr; - io->line = 0; + io->nread = 0; io->g = io->e; return nil; } @@ -21,7 +21,7 @@ bio·readuntil(io·Header *io, int delim) b = (char*)io->e - i; if((e = mem·findc(b, i, delim)) != nil){ j = (e - b)+1; - io->line = j; + io->nread = j; io->ilen += j; return b; } @@ -29,12 +29,13 @@ bio·readuntil(io·Header *io, int delim) if(i < io->cap) mem·move(io->b, b, i); io->g = io->b; + /* write to the buffer while we search for delim */ b = (char *)io->b + i; while(i < io->cap){ - if(sys·read(io->fd, io->cap-i, b, &j)){ + if(sys·read(io->fd, io->cap-i, b, &j) || j == 0){ mem·move(io->e-i, io->b, i); - io->line = +i; + io->nread = +i; io->ilen = -i; io->g = io->e - i; return 0; @@ -50,15 +51,15 @@ bio·readuntil(io·Header *io, int delim) io->g = (uchar *)b; } j = (e - (char*)io->b) + 1; - io->line = j; + io->nread = j; io->ilen = j - i; return b; } b += j; } - io->line = +io->cap; + io->nread = +io->cap; io->ilen = -io->cap; io->g = io->b; - return 0; + return nil; } diff --git a/src/base/bufio/rules.mk b/src/base/bufio/rules.mk index 4546aeb..f367b8e 100644 --- a/src/base/bufio/rules.mk +++ b/src/base/bufio/rules.mk @@ -9,6 +9,7 @@ SRCS_$(d)+=\ $(d)/bufio/print.c\ $(d)/bufio/putc.c\ $(d)/bufio/read.c\ + $(d)/bufio/readline.c\ $(d)/bufio/readuntil.c\ $(d)/bufio/seek.c\ $(d)/bufio/ungetc.c\ diff --git a/src/base/fmt/vfprint.c b/src/base/fmt/vfprint.c index 4306ea7..4cefcb7 100644 --- a/src/base/fmt/vfprint.c +++ b/src/base/fmt/vfprint.c @@ -3,7 +3,7 @@ int fmt·vfprint(int fd, char *fmt, va_list args) { - int n; + int n; fmt·State io; char buf[256]; diff --git a/src/base/mem/rules.mk b/src/base/mem/rules.mk index fda54e1..a4d9f10 100644 --- a/src/base/mem/rules.mk +++ b/src/base/mem/rules.mk @@ -4,5 +4,6 @@ SRCS_$(d)+=\ $(d)/mem/interface.c\ $(d)/mem/set.c\ $(d)/mem/set64.c\ + $(d)/mem/findc.c\ $(d)/mem/copy.c\ $(d)/mem/move.c diff --git a/src/base/string/atoi.c b/src/base/string/atoi.c new file mode 100644 index 0000000..dba057a --- /dev/null +++ b/src/base/string/atoi.c @@ -0,0 +1,11 @@ +#include "internal.h" + +int +str·atoi(char *s) +{ + int n = 0; + while(*s) + n = 10*n + (*s++ - '0'); + + return n; +} diff --git a/src/base/string/rules.mk b/src/base/string/rules.mk index e517ca5..0352f54 100644 --- a/src/base/string/rules.mk +++ b/src/base/string/rules.mk @@ -1,4 +1,5 @@ SRCS_$(d)+=\ + $(d)/string/atoi.c\ $(d)/string/append.c\ $(d)/string/appendf.c\ $(d)/string/clear.c\ diff --git a/src/rules.mk b/src/rules.mk index 368479c..5e848ae 100644 --- a/src/rules.mk +++ b/src/rules.mk @@ -8,6 +8,9 @@ include $(DIR)/rules.mk DIR := $(d)/base include $(DIR)/rules.mk +DIR := $(d)/etc +include $(DIR)/rules.mk + DIR := $(d)/libmath include $(DIR)/rules.mk -- cgit v1.2.1