1
0
mirror of https://github.com/moparisthebest/pacman synced 2024-12-22 15:58:50 -05:00

pacman.c: simplify stdin parsing

Incorporate memory exhaustion and end-of-stream
checks into the main loop.

Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Andrew Gregory 2014-08-01 14:19:52 -07:00 committed by Allan McRae
parent 0bf4ae726d
commit 4ccf49d3e7

View File

@ -1087,9 +1087,9 @@ int main(int argc, char *argv[])
free(vdata);
i = 0;
while((c = fgetc(stdin)) != EOF) {
line[i] = (char)c;
if(isspace((unsigned char)line[i])) {
do {
c = fgetc(stdin);
if(c == EOF || isspace(c)) {
/* avoid adding zero length arg when multiple spaces separate args */
if(i > 0) {
line[i] = '\0';
@ -1098,7 +1098,7 @@ int main(int argc, char *argv[])
i = 0;
}
} else {
i++;
line[i++] = (char)c;
/* we may be at the end of our allocated buffer now */
if(i >= current_size) {
char *new = realloc(line, current_size * 2);
@ -1107,25 +1107,14 @@ int main(int argc, char *argv[])
current_size *= 2;
} else {
free(line);
line = NULL;
break;
pm_printf(ALPM_LOG_ERROR,
_("memory exhausted in argument parsing\n"));
cleanup(EXIT_FAILURE);
}
}
}
}
} while(c != EOF);
/* check for memory exhaustion */
if(!line) {
pm_printf(ALPM_LOG_ERROR, _("memory exhausted in argument parsing\n"));
cleanup(EXIT_FAILURE);
}
/* end of stream -- check for data still in line buffer */
if(i > 0) {
line[i] = '\0';
pm_targets = alpm_list_add(pm_targets, strdup(line));
target_found = 1;
}
free(line);
if(!freopen(ctermid(NULL), "r", stdin)) {
pm_printf(ALPM_LOG_ERROR, _("failed to reopen stdin for reading: (%s)\n"),