Update of /cvsroot/monetdb/clients/src/odbc/winsetup
In directory sc8-pr-cvs16.sourceforge.net:/tmp/cvs-serv14633/src/odbc/winsetup

Modified Files:
        install.c 
Log Message:
propagated changes of Saturday Mar 01 2008 - Thursday Mar 06 2008
from the Clients_1-22 branch to the development trunk


Index: install.c
===================================================================
RCS file: /cvsroot/monetdb/clients/src/odbc/winsetup/install.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -d -r1.6 -r1.7
--- install.c   11 Jan 2008 10:34:39 -0000      1.6
+++ install.c   6 Mar 2008 14:05:14 -0000       1.7
@@ -31,17 +31,8 @@
 
 static char *DriverName = "MonetDB ODBC Driver";
 static char *DataSourceName = "MonetDB";
-static char *InstallDLLs[] = {
-       "libMonetODBC" DLL,
-       "libMonetODBCs" DLL,
-       "libMapi" DLL,
-       "libstream" DLL,
-       "libmutils" DLL,
-       NULL
-};
-
-#define DriverDLL      (InstallDLLs[0])
-#define DriverDLLs     (InstallDLLs[1])
+static char *DriverDLL = "libMonetODBC" DLL;
+static char *DriverDLLs = "libMonetODBCs" DLL;
 
 /* General error handler for installer functions */
 
@@ -57,9 +48,11 @@
 
        do {
                errmsg[0] = '\0';
-               rc = SQLInstallerError(errnr, &errcode, errmsg, sizeof(errmsg), 
&errmsglen);
+               rc = SQLInstallerError(errnr, &errcode,
+                                      errmsg, sizeof(errmsg), &errmsglen);
                if (rc == SQL_SUCCESS || rc == SQL_SUCCESS_WITH_INFO) {
-                       MessageBox(NULL, errmsg, func, MB_ICONSTOP | MB_OK | 
MB_TASKMODAL | MB_SETFOREGROUND);
+                       MessageBox(NULL, errmsg, func,
+                                  MB_ICONSTOP | MB_OK | MB_TASKMODAL | 
MB_SETFOREGROUND);
                        func_rc = TRUE;
                }
                errnr++;
@@ -72,7 +65,9 @@
 {
        char *lpMsgBuf;
 
-       FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, err, 
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) & lpMsgBuf, 0, NULL);
+       FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | 
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
+                     NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
+                     (LPTSTR) & lpMsgBuf, 0, NULL);
        MessageBox(NULL, (LPCTSTR) lpMsgBuf, func, MB_OK | MB_ICONINFORMATION);
        LocalFree(lpMsgBuf);
 }
@@ -87,167 +82,33 @@
 }
 
 static BOOL
-GetFileVersion(char *filepath, char *version, int maxversionlen)
-{
-       DWORD handle = 0;
-       DWORD versioninfosize;
-       DWORD error;
-       PVOID fileinfo;
-       PBYTE versioninfo;
-       PDWORD translation = NULL;
-       UINT length = 0;
-       char string[512] = "";
-       LPSTR versionstr;
-       PVOID ptr;
-
-       versioninfosize = GetFileVersionInfoSize(filepath, &handle);
-       if (!versioninfosize) {
-               error = GetLastError();
-               return FALSE;
-       }
-
-       fileinfo = (PVOID) malloc(versioninfosize);
-       versioninfo = (PBYTE) malloc(versioninfosize);
-
-       if (!GetFileVersionInfo(filepath, handle, versioninfosize, fileinfo)) {
-               error = GetLastError();
-               free(fileinfo);
-               free(versioninfo);
-               return FALSE;
-       }
-
-       ptr = (PVOID) &translation;
-       if (!VerQueryValue(fileinfo, TEXT("\\VarFileInfo\\Translation"), 
(LPVOID *) ptr, &length)) {
-               error = GetLastError();
-               free(fileinfo);
-               free(versioninfo);
-               return FALSE;
-       }
-
-       snprintf(string, sizeof(string), 
"\\StringFileInfo\\%04x%04x\\FileVersion", LOWORD(*translation), 
HIWORD(*translation));
-
-       ptr = (PVOID) &versionstr;
-       if (!VerQueryValue(fileinfo, string, (PVOID *) ptr, &length)) {
-               error = GetLastError();
-               free(fileinfo);
-               free(versioninfo);
-               return FALSE;
-       }
-
-       if (lstrlen(versionstr) >= maxversionlen)
-               lstrcpyn(version, versionstr, maxversionlen - 1);
-       else
-               lstrcpy(version, versionstr);
-
-       free(fileinfo);
-       free(versioninfo);
-
-       return TRUE;
-}
-
-static BOOL
-VersionCheckCopyFile(const char *srcpath, const char *dstpath, const char 
*filename)
-{
-       BOOL fileexists = FALSE;
-       char srcfile[512];
-       char dstfile[512];
-       char srcfileVersion[512];
-       char dstfileVersion[512];
-
-       snprintf(srcfile, sizeof(srcfile), "%s\\%s", srcpath, filename);
-       snprintf(dstfile, sizeof(dstfile), "%s\\%s", dstpath, filename);
-
-       if (CheckIfFileExists(dstpath, filename)) {
-               if (!GetFileVersion(srcfile, srcfileVersion, 
sizeof(srcfileVersion)) || !GetFileVersion(dstfile, dstfileVersion, (int) 
sizeof(dstfileVersion)))
-                       return FALSE;
-
-               if (strcmp(dstfileVersion, srcfileVersion) >= 0) {
-                       /* file is up-to-date, so don't copy */
-                       return TRUE;
-               }
-               /* file exists but is not up-to-date, so copy */
-               fileexists = TRUE;
-
-               /* move the existing file out of the way */
-               /* reuse dstfileVersion as temporary file name */
-               strcpy(dstfileVersion, dstfile);
-               /* change extension */
-               dstfileVersion[strlen(dstfileVersion) - 1] = '~';
-               if (!MoveFileEx(dstfile, dstfileVersion, 
MOVEFILE_REPLACE_EXISTING)) {
-                       snprintf(srcfileVersion, sizeof(srcfileVersion), 
"Unable to move %s to %s\n", dstfile, dstfileVersion);
-                       MessageBox(NULL, srcfileVersion, 
"VersionCheckCopyFile", MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND);
-                       return FALSE;
-               }
-       }
-       /* else file does not exist, so copy */
-
-       if (!CopyFile(srcfile, dstfile, FALSE)) {
-               snprintf(srcfileVersion, sizeof(srcfileVersion), "Unable to 
copy %s to %s\n", srcfile, dstfile);
-               if (fileexists) {
-                       /* move original file back */
-                       MoveFileEx(dstfileVersion, dstfile, 
MOVEFILE_REPLACE_EXISTING);
-               }
-               MessageBox(NULL, srcfileVersion, "VersionCheckCopyFile", 
MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND);
-               return FALSE;
-       }
-
-       if (fileexists) {
-               /* tell system to remove original file on reboot */
-               if (!MoveFileEx(dstfileVersion, NULL, 
MOVEFILE_DELAY_UNTIL_REBOOT)) {
-                       snprintf(srcfileVersion, sizeof(srcfileVersion), 
"Unable to delete %s\n", dstfileVersion);
-                       MessageBox(NULL, srcfileVersion, 
"VersionCheckCopyFile", MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND);
-                       return FALSE;
-               }
-       }
-
-       return TRUE;
-}
-
-static BOOL
 InstallMyDriver(const char *driverpath)
 {
        char driver[300];
-       char inpath[301];
        char outpath[301];
        WORD outpathlen;
        DWORD usagecount;
        char *p;
-       char **dll;
 
        /* the correct format of driver keywords are
-        * "DriverName\0Driver=xxxxxx.DLL\0Setup=xxxxxx.DLL\0\0" */
-
-       snprintf(driver, sizeof(driver), "%s;Driver=%s;Setup=%s;", DriverName, 
DriverDLL, DriverDLLs);
-
-       for (p = driver; *p; p++)
-               if (*p == ';')
-                       *p = '\0';
-
-       /* the driver array is filled in before calling
-        * SQLInstallDriverEx so that SQLInstallDriverEx will return
-        * where to install the driver in the inpath */
-
-       SQLInstallDriverEx(driver, NULL, inpath, sizeof(inpath), &outpathlen, 
ODBC_INSTALL_INQUIRY, &usagecount);
-
-       /* the correct format of driver keywords are
-        * 
"DriverName\0Driver=c:\winnt\system32\xxxxxx.DLL\0Setup=c:\winnt\system32\xxxxxx.DLL\0\0"
 */
+        * "DriverName\0Driver=...\xxxxxx.DLL\0Setup=...\xxxxxx.DLL\0\0" */
 
        snprintf(driver, sizeof(driver),
                 "%s;Driver=%s\\%s;Setup=%s\\%s;APILevel=1;"
                 "ConnectFunctions=YYY;DriverODBCVer=%s;SQLLevel=3;",
-                DriverName, inpath, DriverDLL, inpath, DriverDLLs, 
MONETDB_ODBC_VER);
+                DriverName, driverpath, DriverDLL, driverpath, DriverDLLs,
+                MONETDB_ODBC_VER);
 
        for (p = driver; *p; p++)
                if (*p == ';')
                        *p = '\0';
 
-       for (dll = InstallDLLs; *dll; dll++)
-               if (!VersionCheckCopyFile(driverpath, inpath, *dll) && 
ProcessSQLErrorMessages("SQLInstallDriverEx"))
-                       return FALSE;
-
        /* call SQLInstallDriverEx to install the driver in the
         * registry */
-       if (!SQLInstallDriverEx(driver, inpath, outpath, sizeof(outpath), 
&outpathlen, ODBC_INSTALL_COMPLETE, &usagecount) && 
ProcessSQLErrorMessages("SQLInstallDriverEx"))
+       if (!SQLInstallDriverEx(driver, driverpath,
+                               outpath, sizeof(outpath), &outpathlen,
+                               ODBC_INSTALL_COMPLETE, &usagecount) &&
+           ProcessSQLErrorMessages("SQLInstallDriverEx"))
                return FALSE;
 
        return TRUE;
@@ -257,21 +118,19 @@
 RemoveMyDriver()
 {
        char buf[300];
-       char dirname[300];
-       WORD len;
        DWORD usagecount;
        DWORD valtype, valsize, rc;
-       char *p;
-       char **dll;
 
        /* most of this is equivalent to what SQLRemoveDriver is
           suppposed to do, except that it consistently causes a
           crash, so we do it ourselves */
-       snprintf(buf, sizeof(buf), "SOFTWARE\\ODBC\\ODBCINST.INI\\%s", 
DriverName);
+       snprintf(buf, sizeof(buf), "SOFTWARE\\ODBC\\ODBCINST.INI\\%s",
+                DriverName);
        valsize = sizeof(usagecount);
        usagecount = 0;
        valtype = REG_DWORD;
-       rc = SHGetValue(HKEY_LOCAL_MACHINE, buf, "UsageCount", &valtype, 
&usagecount, &valsize);
+       rc = SHGetValue(HKEY_LOCAL_MACHINE, buf, "UsageCount",
+                       &valtype, &usagecount, &valsize);
        if (rc == ERROR_FILE_NOT_FOUND) {
                /* not installed, do nothing */
                exit(0);
@@ -282,7 +141,8 @@
        }
        if (usagecount > 1) {
                usagecount--;
-               rc = SHSetValue(HKEY_LOCAL_MACHINE, buf, "UsageCount", 
REG_DWORD, &usagecount, sizeof(usagecount));
+               rc = SHSetValue(HKEY_LOCAL_MACHINE, buf, "UsageCount",
+                               REG_DWORD, &usagecount, sizeof(usagecount));
                if (rc != ERROR_SUCCESS) {
                        ProcessSysErrorMessage(rc, "two");
                        return FALSE;
@@ -294,22 +154,13 @@
                ProcessSysErrorMessage(rc, "three");
                return FALSE;
        }
-       rc = SHDeleteValue(HKEY_LOCAL_MACHINE, 
"SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Drivers", DriverName);
+       rc = SHDeleteValue(HKEY_LOCAL_MACHINE,
+                          "SOFTWARE\\ODBC\\ODBCINST.INI\\ODBC Drivers",
+                          DriverName);
        if (rc != ERROR_SUCCESS) {
                ProcessSysErrorMessage(rc, "four");
                return FALSE;
        }
-       /* figure out where the files were installed */
-       snprintf(buf, sizeof(buf), "%s;Driver=%s;Setup=%s;", DriverName, 
DriverDLL, DriverDLLs);
-       for (p = buf; *p; p++)
-               if (*p == ';')
-                       *p = '\0';
-       SQLInstallDriverEx(buf, NULL, dirname, sizeof(dirname), &len, 
ODBC_INSTALL_INQUIRY, &usagecount);
-       /* and the delete them */
-       for (dll = InstallDLLs; *dll; dll++) {
-               snprintf(buf, sizeof(buf), "%s\\%s", dirname, *dll);
-               DeleteFile(buf);
-       }
 
        return TRUE;
 }
@@ -317,7 +168,9 @@
 static void
 CreateAttributeString(char *attrs, size_t len)
 {
-       snprintf(attrs, len, 
"DSN=%s;Server=localhost;Database=;UID=monetdb;PWD=monetdb;", DataSourceName);
+       snprintf(attrs, len,
+                "DSN=%s;Server=localhost;Database=;UID=monetdb;PWD=monetdb;",
+                DataSourceName);
 
        for (; *attrs; attrs++)
                if (*attrs == ';')
@@ -335,7 +188,8 @@
        SQLConfigDataSource(NULL, ODBC_REMOVE_SYS_DSN, DriverName, attrs);
 
        /* then create a new DSN */
-       if (!SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, DriverName, attrs) && 
ProcessSQLErrorMessages("SQLConfigDataSource"))
+       if (!SQLConfigDataSource(NULL, ODBC_ADD_SYS_DSN, DriverName, attrs) &&
+           ProcessSQLErrorMessages("SQLConfigDataSource"))
                return FALSE;
 
        return TRUE;
@@ -365,11 +219,15 @@
 
        /* first, retrieve the path the driver should be installed to
         * in path */
-       if (!SQLInstallDriverManager(path, sizeof(path), &pathlen) && 
ProcessSQLErrorMessages("SQLInstallDriverManager"))
+       if (!SQLInstallDriverManager(path, sizeof(path), &pathlen) &&
+           ProcessSQLErrorMessages("SQLInstallDriverManager"))
                return FALSE;
 
        if (!CheckIfFileExists(path, "odbc32.dll")) {
-               MessageBox(NULL, "You must install MDAC before you can use the 
ODBC driver", "Install", MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND);
+               MessageBox(NULL,
+                          "You must install MDAC before you can use the ODBC 
driver",
+                          "Install",
+                          MB_ICONSTOP | MB_OK | MB_TASKMODAL | 
MB_SETFOREGROUND);
                SQLRemoveDriverManager(&usagecount);
                return FALSE;
        }
@@ -415,19 +273,24 @@
        strcat(buf, "\\lib");
 
        if (argc != 2) {
-               MessageBox(NULL, "/Install or /Uninstall argument expected", 
argv[0], MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND);
+               MessageBox(NULL, "/Install or /Uninstall argument expected",
+                          argv[0],
+                          MB_ICONSTOP | MB_OK | MB_TASKMODAL | 
MB_SETFOREGROUND);
                exit(1);
        }
        buf2 = malloc(strlen(buf) + 25);
        strcpy(buf2, buf);
        if (strcmp("/Install", argv[1]) == 0) {
                if (!Install(buf)) {
-                       MessageBox(NULL, "ODBC Install Failed", argv[0], 
MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND);
+                       MessageBox(NULL, "ODBC Install Failed", argv[0],
+                                  MB_ICONSTOP | MB_OK | MB_TASKMODAL | 
MB_SETFOREGROUND);
                        exit(1);
                }
                /* create a file to indicate that we've installed the driver */
                strcat(buf2, "\\ODBCDriverInstalled.txt");
-               CloseHandle(CreateFile(buf2, READ_CONTROL, 0, NULL, 
CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN, NULL));
+               CloseHandle(CreateFile(buf2, READ_CONTROL, 0, NULL,
+                                      CREATE_ALWAYS, FILE_ATTRIBUTE_HIDDEN,
+                                      NULL));
        } else if (strcmp("/Uninstall", argv[1]) == 0) {
                /* only uninstall the driver if the file exists */
                strcat(buf2, "\\ODBCDriverInstalled.txt");
@@ -436,15 +299,20 @@
                                /* not installed, so don't uninstall */
                                return 0;
                        }
-                       MessageBox(NULL, "Cannot delete file for wrong reason", 
argv[0], MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND);
+                       MessageBox(NULL, "Cannot delete file for wrong reason",
+                                  argv[0],
+                                  MB_ICONSTOP | MB_OK | MB_TASKMODAL | 
MB_SETFOREGROUND);
                }
 
                if (!Uninstall()) {
-                       MessageBox(NULL, "ODBC Uninstall Failed", argv[0], 
MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND);
+                       MessageBox(NULL, "ODBC Uninstall Failed", argv[0],
+                                  MB_ICONSTOP | MB_OK | MB_TASKMODAL | 
MB_SETFOREGROUND);
                        exit(1);
                }
        } else {
-               MessageBox(NULL, "/Install or /Uninstall argument expected", 
argv[0], MB_ICONSTOP | MB_OK | MB_TASKMODAL | MB_SETFOREGROUND);
+               MessageBox(NULL, "/Install or /Uninstall argument expected",
+                          argv[0],
+                          MB_ICONSTOP | MB_OK | MB_TASKMODAL | 
MB_SETFOREGROUND);
                exit(1);
        }
        free(buf);


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Monetdb-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/monetdb-checkins

Reply via email to