summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDan Nicholson <dbn.lists@gmail.com>2009-09-16 06:29:33 -0700
committerDan Nicholson <dbn.lists@gmail.com>2009-09-16 06:34:33 -0700
commit9f1b4c23f2de00b6921958a0b041aa0e8f2c44ef (patch)
tree2cad5cb919200228097fe5a3b4c57e87d452f671
parenta6bbc75162653e5a9a6a5504c62ee51be26e27a4 (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.c15
-rw-r--r--src/tet3/tcm/ictp.c32
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);