iscanfile(): reuse line-buffer - geomyidae - A small C-based gopherd. Err bitreich.org 70 hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ bitreich.org 70 1Log /scm/geomyidae/log.gph bitreich.org 70 1Files /scm/geomyidae/files.gph bitreich.org 70 1Refs /scm/geomyidae/refs.gph bitreich.org 70 1Tags /scm/geomyidae/tag bitreich.org 70 1README /scm/geomyidae/file/README.gph bitreich.org 70 1LICENSE /scm/geomyidae/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit 925572f3afedf7a80e13edd1233cc04c1a4a60f0 /scm/geomyidae/commit/925572f3afedf7a80e13edd1233cc04c1a4a60f0.gph bitreich.org 70 1parent 2361134beb5458adbff043ea611884a090d56d42 /scm/geomyidae/commit/2361134beb5458adbff043ea611884a090d56d42.gph bitreich.org 70 hAuthor: Hiltjo Posthuma URL:mailto:hiltjo@codemadness.org bitreich.org 70 iDate: Sun, 11 Jun 2017 20:00:21 +0200 Err bitreich.org 70 i Err bitreich.org 70 iscanfile(): reuse line-buffer Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M ind.c | 20 ++++++++++++-------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 12 insertions(+), 8 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/ind.c b/ind.c /scm/geomyidae/file/ind.c.gph bitreich.org 70 i@@ -229,27 +229,31 @@ addindexs(Indexs *idx, Elems *el) Err bitreich.org 70 i Indexs * Err bitreich.org 70 i scanfile(char *fname) Err bitreich.org 70 i { Err bitreich.org 70 i- char *ln; Err bitreich.org 70 i- int fd; Err bitreich.org 70 i+ char *ln = NULL; Err bitreich.org 70 i+ size_t linesiz = 0; Err bitreich.org 70 i+ ssize_t n; Err bitreich.org 70 i+ FILE *fp; Err bitreich.org 70 i Indexs *ret; Err bitreich.org 70 i Elems *el; Err bitreich.org 70 i Err bitreich.org 70 i- fd = open(fname, O_RDONLY); Err bitreich.org 70 i- if(fd < 0) Err bitreich.org 70 i+ if (!(fp = fopen(fname, "r"))) Err bitreich.org 70 i return nil; Err bitreich.org 70 i Err bitreich.org 70 i ret = xcalloc(1, sizeof(Indexs)); Err bitreich.org 70 i Err bitreich.org 70 i- while((ln = readln(fd)) != nil) { Err bitreich.org 70 i+ while ((n = getline(&ln, &linesiz, fp)) > 0) { Err bitreich.org 70 i+ if (ln[n - 1] == '\n') Err bitreich.org 70 i+ ln[--n] = '\0'; Err bitreich.org 70 i el = getadv(ln); Err bitreich.org 70 i- free(ln); Err bitreich.org 70 i if(el == nil) Err bitreich.org 70 i continue; Err bitreich.org 70 i Err bitreich.org 70 i addindexs(ret, el); Err bitreich.org 70 i- el = nil; Err bitreich.org 70 i } Err bitreich.org 70 i- close(fd); Err bitreich.org 70 i+ if (ferror(fp)) Err bitreich.org 70 i+ perror("getline"); Err bitreich.org 70 i+ free(ln); Err bitreich.org 70 i+ fclose(fp); Err bitreich.org 70 i Err bitreich.org 70 i if(ret->n == nil) { Err bitreich.org 70 i free(ret); Err bitreich.org 70 .