"Help keep our secrets secret."
authorJohn Criswell <criswell@uiuc.edu>
Fri, 29 Aug 2003 14:46:12 +0000 (14:46 +0000)
committerJohn Criswell <criswell@uiuc.edu>
Fri, 29 Aug 2003 14:46:12 +0000 (14:46 +0000)
Added code to respect the umask value.  Before, files were generated world
readable, which may not be desirable for all installations.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@8215 91177308-0d34-0410-b5e6-96231b3b80d8

tools/gccld/gccld.cpp

index ba398b2919dc53fd766b396baa860a4f983130e0..4133de547d646bacf124db704fefa6ca1193b0b2 100644 (file)
@@ -433,6 +433,9 @@ int main(int argc, char **argv) {
   Out.close();
 
   if (!LinkAsLibrary) {
+    // Permissions masking value of the user
+    mode_t mask;
+
     // Output the script to start the program...
     std::ofstream Out2(OutputFilename.c_str());
     if (!Out2.good())
@@ -441,11 +444,22 @@ int main(int argc, char **argv) {
     Out2 << "#!/bin/sh\nlli -q -abort-on-exception $0.bc $*\n";
     Out2.close();
   
+    //
+    // Grab the umask value from the operating system.  We want to use it when
+    // changing the file's permissions.
+    //
+    // Note:
+    //  Umask() is one of those annoying system calls.  You have to call it
+    //  to get the current value and then set it back.
+    //
+    mask = umask (0);
+    umask (mask);
+
     // Make the script executable...
-    chmod(OutputFilename.c_str(), 0755);
+    chmod(OutputFilename.c_str(), (0755 & ~mask));
 
     // Make the bytecode file directly executable in LLEE as well
-    chmod(RealBytecodeOutput.c_str(), 0755);
+    chmod(RealBytecodeOutput.c_str(), (0755 & ~mask));
   }
 
   return 0;