GBE: fixed the unsafe tmpnam_r.
authorZhigang Gong <zhigang.gong@intel.com>
Sat, 8 Feb 2014 06:12:03 +0000 (14:12 +0800)
committerZhigang Gong <zhigang.gong@intel.com>
Tue, 11 Feb 2014 09:24:12 +0000 (17:24 +0800)
Use mkstemps instead.

Signed-off-by: Zhigang Gong <zhigang.gong@intel.com>
Reviewed-by: "Yang, Rong R" <rong.r.yang@intel.com>
backend/src/backend/program.cpp

index 893cda3..2492a8b 100644 (file)
@@ -652,13 +652,17 @@ namespace gbe {
                                           char *err,
                                           size_t *errSize)
   {
-    char clStr[L_tmpnam+1], llStr[L_tmpnam+1];
-    const std::string clName = std::string(tmpnam_r(clStr)) + ".cl"; /* unsafe! */
-    const std::string llName = std::string(tmpnam_r(llStr)) + ".ll"; /* unsafe! */
+    char clStr[] = "/tmp/XXXXXX.cl";
+    char llStr[] = "/tmp/XXXXXX.ll";
+    int clFd = mkstemps(clStr, 3);
+    int llFd = mkstemps(llStr, 3);
+    close(llFd);
+    const std::string clName = std::string(clStr);
+    const std::string llName = std::string(llStr);
     std::string clOpt;
     int optLevel = 1;
 
-    FILE *clFile = fopen(clName.c_str(), "w");
+    FILE *clFile = fdopen(clFd, "w");
     FATAL_IF(clFile == NULL, "Failed to open temporary file");
 
     bool usePCH = OCL_USE_PCH;