diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/tet3/dtet2lib/rescode.c | 66 | ||||
-rw-r--r-- | src/tet3/inc/dtetlib.h | 2 | ||||
-rw-r--r-- | src/tet3/tcc/scenario.c | 5 | ||||
-rw-r--r-- | src/tet3/tcc/service.c | 5 | ||||
-rw-r--r-- | src/tet3/tcm/dtcm.c | 11 |
5 files changed, 81 insertions, 8 deletions
diff --git a/src/tet3/dtet2lib/rescode.c b/src/tet3/dtet2lib/rescode.c index 8f62abae..f1ecb4a1 100644 --- a/src/tet3/dtet2lib/rescode.c +++ b/src/tet3/dtet2lib/rescode.c @@ -497,3 +497,69 @@ register int lastresult, thisresult; } } +/* +** tet_resulttostatus() - convert result code to exit status +** +** return exit status corresponding to result code +*/ + +int tet_resulttostatus(result) +int result; +{ + switch (result) { + case TET_PASS: + return TET_EXIT_SUCCESS; + case TET_FAIL: + case TET_UNRESOLVED: + case TET_UNINITIATED: + return TET_EXIT_FAILURE; + case TET_NOTINUSE: + case TET_UNSUPPORTED: + case TET_UNTESTED: + return TET_EXIT_SKIP; + default: + /* Pass everything else (include TET_NORESULT) */ + return result; + } +} + +/* +** tet_addstatus() - arbitrate between exit status codes +** +** return status with highest priority +*/ + +int tet_addstatus(laststatus, thisstatus) +register int laststatus, thisstatus; +{ + if (laststatus < 0) + return(thisstatus); + + switch (thisstatus) { + case TET_EXIT_SUCCESS: + /* lowest priority */ + return(laststatus); + + case TET_EXIT_FAILURE: + /* highest priority */ + return(thisstatus); + + case TET_EXIT_SKIP: + /* low priority */ + switch (laststatus) { + case TET_EXIT_SUCCESS: + return(thisstatus); + default: + return(laststatus); + } + + default: + /* user-supplied codes: high priority */ + switch (laststatus) { + case TET_EXIT_FAILURE: + return(laststatus); + default: + return(thisstatus); + } + } +} diff --git a/src/tet3/inc/dtetlib.h b/src/tet3/inc/dtetlib.h index 7f299069..9ab3b817 100644 --- a/src/tet3/inc/dtetlib.h +++ b/src/tet3/inc/dtetlib.h @@ -57,6 +57,8 @@ MODIFICATIONS: /* extern function declarations */ extern char **tet_addargv PROTOLIST((char **, char **)); extern int tet_addresult PROTOLIST((int, int)); +extern int tet_resulttostatus PROTOLIST((int)); +extern int tet_addstatus PROTOLIST((int, int)); TET_IMPORT_FUNC(char *, tet_basename, PROTOLIST((char *))); TET_IMPORT_FUNC(int, tet_bufchk, PROTOLIST((char **, int *, int))); TET_IMPORT_FUNC(int, tet_buftrace, diff --git a/src/tet3/tcc/scenario.c b/src/tet3/tcc/scenario.c index ecea0ad1..2d50386a 100644 --- a/src/tet3/tcc/scenario.c +++ b/src/tet3/tcc/scenario.c @@ -58,6 +58,7 @@ MODIFICATIONS: #include "dirtab.h" #include "proctab.h" #include "tcc.h" +#include "tet_api.h" #ifndef NOTRACE #include "ltoa.h" @@ -179,7 +180,7 @@ int execscen() { register struct proctab *prp, *q; static int sys0 = 0; - int delay, ndelay, status = EXIT_SUCCESS; + int delay, ndelay, status = TET_EXIT_SUCCESS; time_t now, next; /* return now if the scenario is empty */ @@ -228,7 +229,7 @@ int execscen() #endif /* NOTRACE */ SLEEP((unsigned) ndelay); } - status = tet_addresult(status, tcc_sloop()); + status = tet_addstatus(status, tcc_sloop()); if (prp->pr_state == PRS_IDLE) break; now = time((time_t *) 0); diff --git a/src/tet3/tcc/service.c b/src/tet3/tcc/service.c index 9657370e..973b71d5 100644 --- a/src/tet3/tcc/service.c +++ b/src/tet3/tcc/service.c @@ -46,6 +46,7 @@ MODIFICATIONS: #include "scentab.h" #include "dirtab.h" #include "tcc.h" +#include "tet_api.h" #ifndef NOTRACE #include "ltoa.h" @@ -77,7 +78,7 @@ int tcc_sloop() { register struct proctab *prp, *rqforw; register int done; - int status = EXIT_SUCCESS; + int status = TET_EXIT_SUCCESS; TRACE1(tet_Texec, 2, "tcc_sloop() START"); @@ -90,7 +91,7 @@ int tcc_sloop() if (prp->pr_flags & PRF_ATTENTION) { prp->pr_flags &= ~PRF_ATTENTION; tcc_service(prp); - status = tet_addresult(status, + status = tet_addstatus(status, prp->pr_jnlstatus); done = 0; } diff --git a/src/tet3/tcm/dtcm.c b/src/tet3/tcm/dtcm.c index 43eebdf7..0ce9380d 100644 --- a/src/tet3/tcm/dtcm.c +++ b/src/tet3/tcm/dtcm.c @@ -243,7 +243,7 @@ char **argv; { char *cp; struct iclist *icp; - int iccount, tpcount, icnum, rc, ret = TET_PASS; + int iccount, tpcount, icnum, rc, status = TET_EXIT_SUCCESS; #ifndef TET_LITE /* -START-LITE-CUT */ int nsys; #endif /* -END-LITE-CUT- */ @@ -361,13 +361,16 @@ char **argv; for (icp = iclist; icp < iclist + niclist; icp++) for (icnum = icp->ic_start; icnum <= icp->ic_end; icnum++) if (tet_isdefic(icnum)) { + int ret; + tpcount = tet_gettpcount(icnum); rc = tet_icstart(icnum, tpcount); ASSERT_LITE(rc == 0); if (rc < 0) tet_docleanup(EXIT_FAILURE); - ret = tet_addresult(ret, - call_tps(icnum, &tpcount)); + ret = call_tps(icnum, &tpcount); + status = tet_addstatus(status, + tet_resulttostatus(ret)); tet_icend(icnum, tpcount); } @@ -375,7 +378,7 @@ char **argv; setsigs(sigabandon); /* call the user-supplied cleanup routine (if any) and exit */ - tet_docleanup(ret); + tet_docleanup(status); /* NOTREACHED */ return(EXIT_SUCCESS); |