summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--tools/hi-q.c44
1 files changed, 26 insertions, 18 deletions
diff --git a/tools/hi-q.c b/tools/hi-q.c
index 502de69..59cad5d 100644
--- a/tools/hi-q.c
+++ b/tools/hi-q.c
@@ -144,7 +144,7 @@ int Execve(char const * fn,
int fork_and_wait(const jobber job){
pid_t kidpid = fork();
if (kidpid == -1) {
- cerr << "hi-q: fork failed : ";
+ cerr << progid << " fork failed : ";
perror(0);
exit(ex_syserr);
}
@@ -157,9 +157,9 @@ int fork_and_wait(const jobber job){
if (!kidpid){
/*** child code ***/
- int rslt;
- rslt = Execve(prog[0], prog, environ);
- fprintf(stderr, "hi-q: failed to exec '%s': ", prog[0]);
+ Execve(prog[0], prog, environ);
+ cerr << progid << " failed to exec '"
+ << prog[0] << "' : " << endl;
perror(0);
exit(ex_syserr);
} else {
@@ -167,6 +167,11 @@ int fork_and_wait(const jobber job){
int kidstatus;
pid_t somekid;
somekid = waitpid(kidpid, &kidstatus, WUNTRACED);
+ if (somekid < 0) {
+ cerr << progid << " ??? waitpid failed : ";
+ perror(0);
+ return(ex_syserr);
+ }
if (WIFEXITED(kidstatus)) {
int sts = WEXITSTATUS(kidstatus);
if (sts != ex_good && sts != ex_spam) {
@@ -179,7 +184,7 @@ int fork_and_wait(const jobber job){
} else if (WIFSIGNALED(kidstatus)) {
int sig = WTERMSIG(kidstatus);
if (sig == SIGUSR1) {/* normal, no logging required */}
- else cerr << "hi-q: job " << prog[0]
+ else cerr << progid << " job " << prog[0]
<< " killed by signal " << sig << endl;
return(ex_syserr);
} else {
@@ -199,8 +204,8 @@ int fork_and_wait(vector<jobber> post){
}
void exeunt(const int sts) {
- // FIXME: stop other children
- //xxxx cerr << "hi-q: exeunt called with " << sts << endl;
+ // FIXME: stop other children, maybe?
+ //xxxx cerr << progid << " exeunt called with " << sts << endl;
if (sts == ex_spam) fork_and_wait(post);
if (sts == ex_penaltybox) exit(ex_spam);
exit(sts);
@@ -336,7 +341,9 @@ void attach(const int pipe_end, const int fd, const int kidno){
if (pipe_end != fd) {
int rslt = dup2(pipe_end, fd);
if (rslt < 0) {
- fprintf(stderr, "hi-q: dup2(%d,%d) failed for kid %d : ", pipe_end, fd, kidno);
+ cerr << progid << " dup2(" << pipe_end
+ << "," << fd << ")"
+ " failed for kid " << kidno << " : ";
perror(0);
exit(ex_syserr);
}
@@ -394,7 +401,7 @@ bar
ifstream conf;
conf.open(conf_name);
if (! conf.good()) {
- cerr << "hi-q: could not open filter.conf file '"
+ cerr << progid << " could not open filter.conf file '"
<< conf_name << "'" << endl;
exit(1);
}
@@ -431,7 +438,7 @@ bar
if (nkids == 0) exit(0); // nothing to do
if (verbose) for (unsigned int ii = 0; ii < nkids; ii++) {
- cerr << "hi-q filter[" << ii << "] :; ";
+ cerr << progid << " filter[" << ii << "] :; ";
for (VS::const_iterator token = filter[ii].cmd.begin();
token != filter[ii].cmd.end(); token++){
cerr << *token << " ";
@@ -508,7 +515,7 @@ bar
block_fd(blockme);
rslt = pipe(datapipe);
if (rslt < 0) {
- fprintf(stderr, "hi-q: could not create datapipe: ");
+ cerr << progid << " could not create datapipe : ";
perror(0);
exeunt(ex_syserr);
}
@@ -559,7 +566,7 @@ bar
kidpid[ii] = fork();
if (kidpid[ii] == -1) {
- cerr << "hi-q: fork failed : ";
+ cerr << progid << " fork failed : ";
perror(0);
exit(ex_syserr);
}
@@ -657,14 +664,15 @@ bar
exit(1);
}
rslt = Execve(prog[0], prog, environ);
- fprintf(stderr, "hi-q: failed to exec '%s': ", prog[0]);
+ cerr << progid << " failed to exec '"
+ << prog[0] << "' : ";
perror(0);
exit(ex_syserr);
}
/*** parent code ***/
if (kidpid[ii] < 0) {
- fprintf(stderr, "hi-q: failure to fork kid#%d: ", ii);
+ cerr << " failure to fork kid#" << ii << " : ";
perror(0);
exeunt(ex_syserr);
}
@@ -714,7 +722,7 @@ bar
// so we don't need it.
if (verbose) for (unsigned int ii = 0; ii < nkids; ii++) {
- cerr << "hi-q filter[" << ii << "] "
+ cerr << progid << " filter[" << ii << "] "
<< kidpid[ii]
<< " :; ";
for (VS::const_iterator token = filter[ii].cmd.begin();
@@ -736,7 +744,7 @@ bar
// do not decrement the "alive" counter
// since that only applies to non-special kids
if (WIFEXITED(kidstatus)) {
- cerr << "hi-q: special kid exited early, status "
+ cerr << progid << " special kid exited early, status "
<< WEXITSTATUS(kidstatus)
<< " with " << alive << " kids still alive"
<< endl;
@@ -745,7 +753,7 @@ bar
int sig = WTERMSIG(kidstatus);
if (sig == SIGUSR1) {/* normal, no logging required */}
else {
- cerr << "hi-q: special kid killed by signal "
+ cerr << progid << " special kid killed by signal "
<< sig << endl;
// this is not normal
return(ex_syserr);
@@ -795,7 +803,7 @@ bar
if (sts == 0){
// should never get here
// should be no accounting for blame if there was no blame
- cerr << "hi-q: should never happen: no child to blame" << endl;
+ cerr << progid << " should never happen: no child to blame" << endl;
exeunt(ex_syserr);
}