# HG changeset patch # User viric # Date 1458919163 -3600 # Node ID 79b87e385bc5d9070c7e372cd7108fffb49fa626 # Parent 90545736507ef5378977e51489e92ded5502ce80 Make ts respect TMPDIR for output files. It was using hardcoded /tmp. diff -r 90545736507e -r 79b87e385bc5 execute.c --- a/execute.c Sun Mar 20 11:25:53 2016 +0100 +++ b/execute.c Fri Mar 25 16:19:23 2016 +0100 @@ -147,7 +147,7 @@ static void run_child(int fd_send_filename) { - char outfname[] = "/tmp/ts-out.XXXXXX"; + char outfname[] = "/ts-out.XXXXXX"; char errfname[sizeof outfname + 2]; /* .e */ int namesize; int outfd; @@ -155,15 +155,30 @@ if (command_line.store_output) { + /* Prepare path */ + const char *tmpdir = getenv("TMPDIR"); + int lname; + char *outfname_full; + + if (tmpdir == NULL) + tmpdir = "/tmp"; + lname = strlen(tmpdir) + strlen(outfname) + 3 /* .gz*/ + 1 /* \0 */; + + outfname_full = (char *)malloc(lname); + strncpy(outfname_full, tmpdir, lname); + strncat(outfname_full, outfname, lname); + if (command_line.gzip) { int p[2]; /* We assume that all handles are closed*/ pipe(p); + strncat(outfname_full, ".gz", lname); + /* gzip output goes to the filename */ /* This will be the handle other than 0,1,2 */ - outfd = mkstemp(outfname); /* stdout */ + outfd = mkstemp(outfname_full); /* stdout */ /* Program stdout and stderr */ /* which go to pipe write handle */ @@ -171,7 +186,7 @@ if (command_line.stderr_apart) { int errfd; - strncpy(errfname, outfname, sizeof errfname); + strncpy(errfname, outfname_full, sizeof errfname); strncat(errfname, ".e", 2); errfd = open(errfname, O_CREAT | O_WRONLY | O_TRUNC, 0600); dup2(errfd, 2); @@ -189,12 +204,12 @@ else { /* Prepare the filename */ - outfd = mkstemp(outfname); /* stdout */ + outfd = mkstemp(outfname_full); /* stdout */ dup2(outfd, 1); /* stdout */ if (command_line.stderr_apart) { int errfd; - strncpy(errfname, outfname, sizeof errfname); + strncpy(errfname, outfname_full, sizeof errfname); strncat(errfname, ".e", 2); errfd = open(errfname, O_CREAT | O_WRONLY | O_TRUNC, 0600); dup2(errfd, 2); @@ -206,9 +221,9 @@ } /* Send the filename */ - namesize = sizeof(outfname); + namesize = strlen(outfname_full); write(fd_send_filename, (char *)&namesize, sizeof(namesize)); - write(fd_send_filename, outfname, sizeof(outfname)); + write(fd_send_filename, outfname_full, sizeof(outfname)); } /* Times */ gettimeofday(&starttv, NULL);