* emultempl/elf32.em (gld${EMULATION_NAME}_parse_ld_so_conf): Avoid

getline for portability.
This commit is contained in:
Jakub Jelinek 2004-10-11 14:42:30 +00:00
parent d3989512d9
commit 563f4125b7
2 changed files with 23 additions and 4 deletions

View File

@ -1,5 +1,8 @@
2004-10-11 Jakub Jelinek <jakub@redhat.com> 2004-10-11 Jakub Jelinek <jakub@redhat.com>
* emultempl/elf32.em (gld${EMULATION_NAME}_parse_ld_so_conf): Avoid
getline for portability.
* emultempl/elf32.em (gld${EMULATION_NAME}_ld_so_conf): New structure. * emultempl/elf32.em (gld${EMULATION_NAME}_ld_so_conf): New structure.
(gld${EMULATION_NAME}_parse_ld_so_conf, (gld${EMULATION_NAME}_parse_ld_so_conf,
gld${EMULATION_NAME}_parse_ld_so_conf_include): New functions. gld${EMULATION_NAME}_parse_ld_so_conf_include): New functions.

View File

@ -563,15 +563,30 @@ gld${EMULATION_NAME}_parse_ld_so_conf
(struct gld${EMULATION_NAME}_ld_so_conf *info, const char *filename) (struct gld${EMULATION_NAME}_ld_so_conf *info, const char *filename)
{ {
FILE *f = fopen (filename, FOPEN_RT); FILE *f = fopen (filename, FOPEN_RT);
char *line = NULL; char *line;
size_t linelen = 0; size_t linelen;
if (f == NULL) if (f == NULL)
return; return;
while (getline (&line, &linelen, f) != -1) linelen = 256;
line = xmalloc (linelen);
do
{ {
char *p; char *p = line, *q;
/* Normally this would use getline(3), but we need to be portable. */
while ((q = fgets (p, linelen - (p - line), f)) != NULL
&& strlen (q) == linelen - (p - line) - 1
&& line[linelen - 2] != '\n')
{
line = xrealloc (line, 2 * linelen);
p = line + linelen - 1;
linelen += linelen;
}
if (q == NULL && p == line)
break;
p = strchr (line, '\n'); p = strchr (line, '\n');
if (p) if (p)
@ -647,6 +662,7 @@ gld${EMULATION_NAME}_parse_ld_so_conf
info->path[info->len] = '\0'; info->path[info->len] = '\0';
} }
} }
while (! feof (f));
free (line); free (line);
fclose (f); fclose (f);
} }