mirror of
https://github.com/frida/tinycc
synced 2024-12-24 22:16:49 +03:00
tccpe: speed up .def file loading
The fgets replacement meant to work with "int fd" was just too slow.
This commit is contained in:
parent
aa255f37f2
commit
112148172b
24
tccpe.c
24
tccpe.c
@ -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;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user