From: Pasi Kallinen Date: Fri, 29 Nov 2019 19:48:59 +0000 (+0200) Subject: Read lua files more efficiently X-Git-Tag: NetHack-3.7.0_WIP~208 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f8a1059a87e24357eb6960dfddb9382561dd06c3;p=nethack Read lua files more efficiently ... replacing horribly hacky loop. --- diff --git a/src/nhlua.c b/src/nhlua.c index a8f33ca8e..39c71496e 100644 --- a/src/nhlua.c +++ b/src/nhlua.c @@ -804,7 +804,7 @@ const char *fname; dlb *fh; char *buf = (char *) 0; long buflen; - int c, llret; + int cnt, llret; long bufidx = 0; fh = dlb_fopen(fname, "r"); @@ -819,13 +819,12 @@ const char *fname; buf = (char *) alloc(sizeof(char) * (buflen + 1)); dlb_fseek(fh, 0L, SEEK_SET); - do { - c = dlb_fgetc(fh); - if (c == EOF) - break; - buf[bufidx++] = (char) c; - } while (bufidx < buflen); - buf[bufidx] = '\0'; + if ((cnt = dlb_fread(buf, 1, buflen, fh)) != buflen) { + impossible("nhl_loadlua: Error loading %s, got %i/%li bytes", fname, cnt, buflen); + ret = FALSE; + goto give_up; + } + buf[buflen] = '\0'; (void) dlb_fclose(fh); llret = luaL_loadstring(L, buf);