'-w' returns the waited errorlevel. Added a testbench.
authorviric@llimona
Tue, 27 Mar 2007 21:08:48 +0200
changeset 51 aa6e05d77537
parent 50 2840913d166f
child 52 7c6dc23a2a32
'-w' returns the waited errorlevel. Added a testbench.
client.c
jobs.c
main.c
main.h
testbench.sh
--- 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