summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Gregory <andrew.gregory.8@gmail.com>2013-06-02 23:45:05 -0400
committerAllan McRae <allan@archlinux.org>2013-06-06 13:47:32 +1000
commitab3d8478c23dd3f256da89c2a2a27f8a7f3d3893 (patch)
tree1a857dee80c7d50029eec41acf2a8d8fe92bfe74
parent9574bfd6c873d70e29a5003461b2d691f134c8ab (diff)
downloadpacman-ab3d8478c23dd3f256da89c2a2a27f8a7f3d3893.tar.xz
die if '-' is given with empty stdin
Several operations default to all packages/repos/etc if no targets are provided. If a user provides '-' they almost certainly expect there to be targets on stdin and will be surprised if pacman falls back to the default because there are none. Signed-off-by: Andrew Gregory <andrew.gregory.8@gmail.com> Signed-off-by: Allan McRae <allan@archlinux.org>
-rw-r--r--src/pacman/pacman.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index 921331c6..7aa0271c 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -826,6 +826,7 @@ int main(int argc, char *argv[])
/* we support reading targets from stdin if a cmdline parameter is '-' */
if(alpm_list_find_str(pm_targets, "-")) {
if(!isatty(fileno(stdin))) {
+ int target_found = 0;
size_t current_size = PATH_MAX;
char *vdata, *line = malloc(current_size);
@@ -840,6 +841,7 @@ int main(int argc, char *argv[])
if(i > 0) {
line[i] = '\0';
pm_targets = alpm_list_add(pm_targets, strdup(line));
+ target_found = 1;
i = 0;
}
} else {
@@ -869,12 +871,18 @@ int main(int argc, char *argv[])
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"),
strerror(errno));
}
+
+ if(!target_found) {
+ pm_printf(ALPM_LOG_ERROR, _("argument '-' specified with empty stdin\n"));
+ cleanup(1);
+ }
} else {
/* do not read stdin from terminal */
pm_printf(ALPM_LOG_ERROR, _("argument '-' specified without input on stdin\n"));