'-w' returns the waited errorlevel. Added a testbench.
--- a/client.c Tue Mar 27 13:12:01 2007 +0200
+++ b/client.c Tue Mar 27 21:08:48 2007 +0200
@@ -285,7 +285,8 @@
/* This will never be reached */
}
-void c_wait_job()
+/* Returns the errorlevel */
+int c_wait_job()
{
struct msg m;
int res;
@@ -302,7 +303,7 @@
switch(m.type)
{
case WAITJOB_OK:
- return;
+ return m.u.errorlevel;
/* WILL NOT GO FURTHER */
case LIST_LINE: /* Only ONE line accepted */
string = (char *) malloc(m.u.line_size);
@@ -317,4 +318,5 @@
exit(-1);
}
/* This will never be reached */
+ return -1;
}
--- a/jobs.c Tue Mar 27 13:12:01 2007 +0200
+++ b/jobs.c Tue Mar 27 21:08:48 2007 +0200
@@ -486,29 +486,30 @@
n->next = new;
}
-static void send_waitjob_ok(int s)
+static void send_waitjob_ok(int s, int errorlevel)
{
struct msg m;
m.type = WAITJOB_OK;
+ m.u.errorlevel = errorlevel;
send_msg(s, &m);
}
-static enum Jobstate
-get_job_state(int jobid)
+static struct Job *
+get_job(int jobid)
{
struct Job *j;
j = findjob(jobid);
if (j != NULL)
- return j->state;
+ return j;
j = find_finished_job(jobid);
if (j != NULL)
- return j->state;
+ return j;
- return -1;
+ return 0;
}
/* Don't complain, if the socket doesn't exist */
@@ -543,7 +544,7 @@
void check_notify_list(int jobid)
{
struct Notify *n;
- enum Jobstate s;
+ struct Job *j;
n = first_notify;
while (n != 0 && n->jobid != jobid)
@@ -556,11 +557,11 @@
return;
}
- s = get_job_state(jobid);
+ j = get_job(jobid);
/* If the job finishes, notify the waiter */
- if (s == FINISHED)
+ if (j->state == FINISHED)
{
- send_waitjob_ok(n->socket);
+ send_waitjob_ok(n->socket, j->errorlevel);
s_remove_notification(n->socket);
}
}
@@ -615,7 +616,7 @@
if (p->state == FINISHED)
{
- send_waitjob_ok(s);
+ send_waitjob_ok(s, p->errorlevel);
}
else
add_to_notify_list(s, p->jobid);
--- a/main.c Tue Mar 27 13:12:01 2007 +0200
+++ b/main.c Tue Mar 27 21:08:48 2007 +0200
@@ -292,7 +292,7 @@
break;
case c_WAITJOB:
assert(command_line.need_server);
- c_wait_job();
+ errorlevel = c_wait_job();
break;
}
--- a/main.h Tue Mar 27 13:12:01 2007 +0200
+++ b/main.h Tue Mar 27 21:08:48 2007 +0200
@@ -40,7 +40,7 @@
void c_show_output_file();
void c_remove_job();
void c_show_pid();
-void c_wait_job();
+int c_wait_job();
/* jobs.c */
void s_list(int s);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/testbench.sh Tue Mar 27 21:08:48 2007 +0200
@@ -0,0 +1,54 @@
+#!/bin/bash
+
+# Some simple tasks
+./ts -K
+./ts ls
+./ts -n ls > /dev/null
+./ts -f ls
+./ts -nf ls > /dev/null
+./ts ls
+./ts cat
+./ts -w
+
+LINES=`./ts -l | grep finished | wc -l`
+if [ $LINES -ne 6 ]; then
+ echo "Error in simple tasks."
+ exit 1
+fi
+
+./ts -K
+
+# Check errorlevel 1
+./ts -f ls
+if [ $? -ne 0 ]; then
+ echo "Error in errorlevel 1."
+ exit 1
+fi
+# Check errorlevel 2
+./ts -f patata
+if [ $? -eq 0 ]; then
+ echo "Error in errorlevel 2."
+ exit 1
+fi
+# Check errorlevel 3
+./ts patata
+if [ $? -ne 0 ]; then
+ echo "Error in errorlevel 3."
+ exit 1
+fi
+# Check errorlevel 4
+./ts ls
+./ts -w
+if [ $? -ne 0 ]; then
+ echo "Error in errorlevel 4."
+ exit 1
+fi
+# Check errorlevel 5
+./ts patata
+./ts -w
+if [ $? -eq 0 ]; then
+ echo "Error in errorlevel 5."
+ exit 1
+fi
+
+./ts -K