Thanks!

-----Original Message-----
From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of ?????
Sent: Thursday, December 13, 2007 8:50 AM
To: [email protected]
Subject: [Openexr-devel] Microsoft Windows non-administrator user ilmbase-1.0.0 
build problem

Hello!

I found some bugs while building ilmbase-1.0.0 on my 
Microsoft Windows Vista PC with MSVC 2005 Express Edition.

The thing is createDLL attempts to create some files in 
the root directory of disk C: ("C:\\response.txt" in 
static void createResponseFile and "C:\\createDLL_out.txt" 
in int main). But creating files in root directory under 
non-administrator acount is not allowed. So build breaks.

Here is a quick'n'dirty patch to avoid this problem using 
WinAPI GetTempPath function (buggy under some older 
versions of Windows):

--- createDLL_orig.cpp  2006-12-11 11:36:52.000000000 
+0300
+++ createDLL.cpp       2007-12-13 19:48:17.000000000 
+0300
@@ -652,10 +652,18 @@ static void getSymbolsFromMap(char* 
buf,
      }
  }

+static std::string getTempPath()
+{
+       DWORD   dwBufferLength = GetTempPathA( 0, NULL );
+       std::auto_ptr<char>     lpBuffer ( new char 
[dwBufferLength + 1] );
+       GetTempPathA( dwBufferLength, lpBuffer.get() );
+       return  string( lpBuffer.get() );
+}

  static void createResponseFile(string& path, string& 
moduleName, vector<string>& libpath, string& implib, 
set<string>& libs, set<string>& objs, bool noDefaultLibs)
  {
-    FILE* r = fopen("C:\\response.txt", "wb");
+       string  rName = getTempPath() + "response.txt";
+    FILE* r = fopen(rName.c_str(), "wb");
      if (r != 0)
      {
          fprintf(r, "/OUT:\"%s\\%s.dll\" /NOLOGO ", 
path.c_str(), moduleName.c_str());
@@ -701,7 +709,7 @@ static void createResponseFile(string& 
p
      }
      else
      {
-        std::cerr << "Unable to open response file 
C:\\response.txt" << endl;
+        std::cerr << "Unable to open response file " << 
rName << endl;
      }
  }

@@ -729,7 +737,8 @@ int main(int argC, char* argV[])
      std::cout << "CreateDLL v1.1" << std::endl;

      // banner
-    std::ofstream logfile("c:\\createDLL_out.txt", 
std::ios::out);
+       std::string logName = getTempPath() + 
"createDLL_out.txt";
+    std::ofstream logfile(logName.c_str(), 
std::ios::out);
      logfile << "createDLL was built " << __DATE__ << " " 
<< __TIME__ << endl;

      if (mapFileName == "" || importlib == "")
@@ -865,7 +874,8 @@ int main(int argC, char* argV[])
              char**  new_argv = new char *[3];
              size_t  new_argc = 0;
              new_argv[0] = "createDLL";
-            new_argv[1] = "@C:\\response.txt";
+                       std::string     new_argv1 = "@" + 
getTempPath() + "response.txt";
+            new_argv[1] = const_cast<char*>( 
new_argv1.c_str() );
              new_argv[2] = 0;

              int status = -1;


--
Best regards,
Pavel Burov <[EMAIL PROTECTED]>


_______________________________________________
Openexr-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/openexr-devel



_______________________________________________
Openexr-devel mailing list
[email protected]
http://lists.nongnu.org/mailman/listinfo/openexr-devel

Reply via email to