diff options
| author | grischka <grischka> | 2014-04-13 20:30:46 +0200 |
|---|---|---|
| committer | grischka <grischka> | 2014-04-13 20:30:46 +0200 |
| commit | 112148172b50c20acde6adf4f86fa0a32d3d5a6c (patch) | |
| tree | 4dc4708124ebfe311fd5b3caca58844f543db706 /tccpe.c | |
| parent | aa255f37f24abc320b1101fb85f7e9f4d9e21cff (diff) | |
| download | tinycc-112148172b50c20acde6adf4f86fa0a32d3d5a6c.tar.gz tinycc-112148172b50c20acde6adf4f86fa0a32d3d5a6c.tar.bz2 | |
tccpe: speed up .def file loading
The fgets replacement meant to work with "int fd"
was just too slow.
Diffstat (limited to 'tccpe.c')
| -rw-r--r-- | tccpe.c | 24 |
1 files changed, 7 insertions, 17 deletions
@@ -1583,31 +1583,20 @@ static char *trimback(char *a, char *e) return a; } -static char *get_line(char *line, int size, int fd) -{ - int n; - for (n = 0; n < size - 1; ) - if (read(fd, line + n, 1) < 1 || line[n++] == '\n') - break; - if (0 == n) - return NULL; - trimback(line, line + n); - return trimfront(line); -} - /* ------------------------------------------------------------- */ static int pe_load_def(TCCState *s1, int fd) { int state = 0, ret = -1, dllindex = 0, ord; char line[400], dllname[80], *p, *x; + FILE *fp; - for (;;) { - - p = get_line(line, sizeof line, fd); - if (NULL == p) - break; + fp = fdopen(dup(fd), "rb"); + while (fgets(line, sizeof line, fp)) + { + p = trimfront(trimback(line, strchr(line, 0))); if (0 == *p || ';' == *p) continue; + switch (state) { case 0: if (0 != strnicmp(p, "LIBRARY", 7)) @@ -1645,6 +1634,7 @@ static int pe_load_def(TCCState *s1, int fd) } ret = 0; quit: + fclose(fp); return ret; } |
