Author: gallatin
Date: Fri May 18 14:14:04 2018
New Revision: 333793
URL: https://svnweb.freebsd.org/changeset/base/333793

Log:
  Teach pmcannotate about $TMPDIR and _PATH_TMP
  
  Convert pmcannotate to using $TMPDIR and _PATH_TMP rather than hard
  coding /tmp for temporary files.  Pmcannotate sometimes needs quite a
  lot of space to store the output from objdump, and will fail in odd
  ways if that output is truncated due to lack of space in /tmp.
  
  Reviewed by:  jtl
  Sponsored by: Netflix

Modified:
  head/usr.sbin/pmcannotate/pmcannotate.c

Modified: head/usr.sbin/pmcannotate/pmcannotate.c
==============================================================================
--- head/usr.sbin/pmcannotate/pmcannotate.c     Fri May 18 13:49:12 2018        
(r333792)
+++ head/usr.sbin/pmcannotate/pmcannotate.c     Fri May 18 14:14:04 2018        
(r333793)
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
 #include <sys/queue.h>
 
 #include <ctype.h>
+#include <paths.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -47,7 +48,7 @@ __FBSDID("$FreeBSD$");
 #define        FNBUFF  512
 #define        LNBUFF  512
 
-#define        TMPPATH "/tmp/pmcannotate.XXXXXX"
+#define        TMPNAME "pmcannotate.XXXXXX"
 
 #define        FATAL(ptr, x ...) do {                                          
\
        fqueue_deleteall();                                             \
@@ -671,7 +672,8 @@ usage(const char *progname)
 int
 main(int argc, char *argv[])
 {
-       char buffer[LNBUFF], fname[FNBUFF], tbfl[] = TMPPATH, tofl[] = TMPPATH;
+       char buffer[LNBUFF], fname[FNBUFF];
+       char *tbfl, *tofl, *tmpdir;
        char tmpf[MAXPATHLEN * 2 + 50];
        float limit;
        char *bin, *exec, *kfile, *ofile;
@@ -721,6 +723,17 @@ main(int argc, char *argv[])
                    exec);
 
        bzero(tmpf, sizeof(tmpf));
+       tmpdir = getenv("TMPDIR");
+       if (tmpdir == NULL) {
+               asprintf(&tbfl, "%s/%s", _PATH_TMP, TMPNAME);
+               asprintf(&tofl, "%s/%s", _PATH_TMP, TMPNAME);
+       } else {
+               asprintf(&tbfl, "%s/%s", tmpdir, TMPNAME);
+               asprintf(&tofl, "%s/%s", tmpdir, TMPNAME);
+       }
+       if (tofl == NULL || tbfl == NULL)
+               FATAL(exec, "%s: Cannot create tempfile templates\n",
+                   exec);
        if (mkstemp(tofl) == -1)
                FATAL(exec, "%s: Impossible to create the tmp file\n",
                    exec);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to