diff options
author | Dan Nicholson <dbn.lists@gmail.com> | 2009-09-16 06:29:33 -0700 |
---|---|---|
committer | Dan Nicholson <dbn.lists@gmail.com> | 2009-09-16 06:34:33 -0700 |
commit | 9f1b4c23f2de00b6921958a0b041aa0e8f2c44ef (patch) | |
tree | 2cad5cb919200228097fe5a3b4c57e87d452f671 | |
parent | a6bbc75162653e5a9a6a5504c62ee51be26e27a4 (diff) |
tet: Actually generate the results files in the results directory
The results files (test logs) were being created in the build tree at
the location of the test program. That's wrong. Now, tcc sets the
environment variable TET_RESDIR, which the test program will use for
initializing it's log.
-rw-r--r-- | src/tet3/tcc/exec.c | 15 | ||||
-rw-r--r-- | src/tet3/tcm/ictp.c | 32 |
2 files changed, 39 insertions, 8 deletions
diff --git a/src/tet3/tcc/exec.c b/src/tet3/tcc/exec.c index 80cf630b..3389270e 100644 --- a/src/tet3/tcc/exec.c +++ b/src/tet3/tcc/exec.c @@ -75,6 +75,8 @@ char *path, **argv, *tcdir, *outfile; static #endif /* TET_LITE */ /* -LITE-CUT-LINE- */ char buf[sizeof fmt + LNUMSZ]; + char *resdir; + char resbuf[MAXPATH + sizeof("TET_RESDIR=")]; struct systab *sp; long remid; #ifdef TET_LITE /* -LITE-CUT-LINE- */ @@ -104,6 +106,19 @@ char *path, **argv, *tcdir, *outfile; sp->sy_activity = prp->pr_activity; } + /* put the results directory into the environment */ + resdir = resdirname(); + if (resdir) { + sprintf(resbuf, "TET_RESDIR=%s", resdir); + TRACE3(tet_Ttcc, 6, "putenv \"%s\" on system %s", + resbuf, tet_i2a(*prp->pr_sys)); + if (tcc_putenv(*prp->pr_sys, resbuf) < 0) { + prperror(prp, *prp->pr_sys, tet_tcerrno, + "tcc_putenv(TET_RESDIR) failed", NULL); + return(-1L); + } + } + /* change to the test case directory */ if (sychdir(sp, tcdir) < 0) { prperror(prp, *prp->pr_sys, errno ? errno : tet_tcerrno, diff --git a/src/tet3/tcm/ictp.c b/src/tet3/tcm/ictp.c index 7933f510..61df0130 100644 --- a/src/tet3/tcm/ictp.c +++ b/src/tet3/tcm/ictp.c @@ -799,7 +799,8 @@ static int ismaster() TET_IMPORT void tet_openres(progname) char *progname; { - char cwdbuf[MAXPATH]; + char *resdir, *p; + char buf[MAXPATH]; static char resvar[] = "TET_RESFILE"; char *resname; static char tmpvar[] = "TET_TMPRESFILE"; @@ -834,29 +835,44 @@ char *progname; /* set full path name of execution results file and temp results file, in a form convenient for placing in the environment */ + if (!(resdir = getenv("TET_RESDIR"))) { + if (GETCWD(buf, sizeof(buf)) == NULL) + fatal(errno, "getcwd() failed", NULL); + resdir = buf; + } - if (GETCWD(cwdbuf, (size_t)MAXPATH) == NULL) - fatal(errno, "getcwd() failed", (char *) 0); - - resenv = malloc(strlen(cwdbuf)+sizeof(resvar)+strlen(resname)+5); + resenv = malloc(strlen(resdir)+sizeof(resvar)+strlen(resname)+5); if (resenv == NULL) fatal(errno, "can't allocate resenv in tet_openres()", (char *) 0); TRACE2(tet_Tbuf, 6, "allocate resenv = %s", tet_i2x(resenv)); - tmpresenv = malloc(strlen(cwdbuf)+sizeof(tmpvar)+strlen(tmpname)+5); + tmpresenv = malloc(strlen(resdir)+sizeof(tmpvar)+strlen(tmpname)+5); if (tmpresenv == NULL) fatal(errno, "can't allocate tmpresenv in tet_openres()", (char *) 0); TRACE2(tet_Tbuf, 6, "allocate tmpresenv = %s", tet_i2x(tmpresenv)); - (void) sprintf(resenv, "%s=%s/%s", resvar, cwdbuf, resname); + (void) sprintf(resenv, "%s=%s/%s", resvar, resdir, resname); resfile = resenv + sizeof(resvar); - (void) sprintf(tmpresenv, "%s=%s/%s", tmpvar, cwdbuf, tmpname); + (void) sprintf(tmpresenv, "%s=%s/%s", tmpvar, resdir, tmpname); tet_tmpresfile = tmpresenv + sizeof(tmpvar); + /* create the leading directories for the results file */ + strncpy(buf, resfile, sizeof(buf) - 1); + for (p = buf + strlen(buf) - 1; p > buf; p--) + if (isdirsep(*p)) + break; + if (p > buf) { + *p = '\0'; + if (tet_mkalldirs(buf) != 0 && errno != EEXIST) + fatal(errno, + "cannot create results file directory:", + buf); + } + /* create the execution results file and open in append mode */ (void) remove(resfile); |