(dopipe): Check whether argument starts with '|'. Simplify convoluted

logic.  Improve error messages.
This commit is contained in:
Markus Armbruster 2007-11-17 09:10:29 +00:00
parent 17d6997d4e
commit 2456a71acf

View file

@ -236,25 +236,27 @@ dopipe(char *p)
{
char *tag;
if (*p == '|')
p++;
if (*p++ != '|') {
fprintf(stderr, "WARNING! Weird pipe %s", p);
return;
}
tag = gettag(p);
while (*p && isspace(*p))
p++;
if (tag == NULL) {
fprintf(stderr, "WARNING! Server attempted to run: %s\n", p);
return;
}
if (*p == 0) {
fprintf(stderr, "Null program name after redirect\n");
free(tag);
for (; *p && isspace(*p); p++) ;
if (*p == 0) {
fprintf(stderr, "Redirection lacks a command\n");
return;
}
if ((pipe_fp = popen(p, "w")) == NULL) {
fprintf(stderr, "Pipe open failed\n");
perror(p);
fprintf(stderr, "Can't redirect to pipe %s: %s\n",
p, strerror(errno));
}
free(tag);
}
static void