Improve a little getrawitem - sacc - sacc (saccomys): simple gopher client. | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit 6442aecfc08e934d65b38ec83c76bd8a040370a0 | |
parent e8214e1e8d0394f4569e5049f162794d69019a03 | |
Author: Quentin Rameau <[email protected]> | |
Date: Thu, 22 Jun 2017 17:13:24 +0200 | |
Improve a little getrawitem | |
Diffstat: | |
sacc.c | 23 +++++++++++------------ | |
1 file changed, 11 insertions(+), 12 deletions(-) | |
--- | |
diff --git a/sacc.c b/sacc.c | |
@@ -223,30 +223,29 @@ molddiritem(char *raw) | |
char * | |
getrawitem(int sock) | |
{ | |
- char *item, *buf; | |
- size_t is, bs, ns; | |
+ char *raw, *buf; | |
+ size_t bn, bs; | |
ssize_t n; | |
- is = bs = BUFSIZ; | |
- item = buf = xmalloc(BUFSIZ+1); | |
+ raw = buf = NULL; | |
+ bn = bs = n = 0; | |
- while ((n = read(sock, buf, bs)) > 0) { | |
+ do { | |
bs -= n; | |
buf += n; | |
- if (bs <= 0) { | |
- ns = is + BUFSIZ; | |
- item = xreallocarray(item, ns+1, 1); | |
- is = ns; | |
- buf = item + is-BUFSIZ; | |
+ if (bs <= 1) { | |
+ raw = xreallocarray(raw, ++bn, BUFSIZ); | |
+ buf = raw + (bn-1) * BUFSIZ; | |
bs = BUFSIZ; | |
} | |
- } | |
+ } while ((n = read(sock, buf, bs)) > 0); | |
+ | |
if (n < 0) | |
die("Can't read socket: %s", strerror(errno)); | |
*buf = '\0'; | |
- return item; | |
+ return raw; | |
} | |
int |