Jacek Caban : appwiz.cpl: Moved package subdir to addon_info_t.

Alexandre Julliard julliard at winehq.org
Tue May 15 12:55:59 CDT 2012


Module: wine
Branch: master
Commit: 87538c6233904ecd1e104efbff3eb3fdaeb07a6f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=87538c6233904ecd1e104efbff3eb3fdaeb07a6f

Author: Jacek Caban <jacek at codeweavers.com>
Date:   Tue May 15 11:47:58 2012 +0200

appwiz.cpl: Moved package subdir to addon_info_t.

---

 dlls/appwiz.cpl/addons.c |   50 ++++++++++++++++++++++++---------------------
 1 files changed, 27 insertions(+), 23 deletions(-)

diff --git a/dlls/appwiz.cpl/addons.c b/dlls/appwiz.cpl/addons.c
index 9766f45..2694fb7 100644
--- a/dlls/appwiz.cpl/addons.c
+++ b/dlls/appwiz.cpl/addons.c
@@ -67,6 +67,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(appwizcpl);
 typedef struct {
     const char *version;
     const char *file_name;
+    const char *subdir_name;
     const char *sha;
 } addon_info_t;
 
@@ -74,6 +75,7 @@ static const addon_info_t addons_info[] = {
     {
         GECKO_VERSION,
         "wine_gecko-" GECKO_VERSION "-" ARCH_STRING ".msi",
+        "gecko",
         GECKO_SHA
     }
 };
@@ -171,7 +173,7 @@ static BOOL install_file(const WCHAR *file_name)
     return TRUE;
 }
 
-static BOOL install_from_unix_file(const char *dir, const char *file_name)
+static BOOL install_from_unix_file(const char *dir, const char *subdir, const char *file_name)
 {
     LPWSTR dos_file_name;
     char *file_path;
@@ -182,13 +184,18 @@ static BOOL install_from_unix_file(const char *dir, const char *file_name)
     static const WCHAR kernel32W[] = {'k','e','r','n','e','l','3','2','.','d','l','l',0};
 
     len = strlen(dir);
-    file_path = heap_alloc(len+strlen(file_name)+2);
+    file_path = heap_alloc(len+strlen(subdir)+strlen(file_name)+3);
     if(!file_path)
         return FALSE;
 
     memcpy(file_path, dir, len);
     if(len && file_path[len-1] != '/' && file_path[len-1] != '\\')
         file_path[len++] = '/';
+    if(*subdir) {
+        strcpy(file_path+len, subdir);
+        len += strlen(subdir);
+        file_path[len++] = '/';
+    }
     strcpy(file_path+len, file_name);
 
     fd = open(file_path, O_RDONLY);
@@ -252,7 +259,7 @@ static BOOL install_from_registered_dir(void)
 
     TRACE("Trying %s/%s\n", debugstr_a(package_dir), debugstr_a(addon->file_name));
 
-    ret = install_from_unix_file(package_dir, addon->file_name);
+    ret = install_from_unix_file(package_dir, "", addon->file_name);
 
     heap_free(package_dir);
     return ret;
@@ -260,33 +267,30 @@ static BOOL install_from_registered_dir(void)
 
 static BOOL install_from_default_dir(void)
 {
-    const char *data_dir, *subdir;
-    char *package_dir;
-    int len, len2;
+    const char *data_dir, *package_dir;
+    char *dir_buf = NULL;
+    int len;
     BOOL ret;
 
-    if((data_dir = wine_get_data_dir()))
-        subdir = "/gecko/";
-    else if((data_dir = wine_get_build_dir()))
-        subdir = "/../gecko/";
-    else
+    if((data_dir = wine_get_data_dir())) {
+        package_dir = data_dir;
+    }else if((data_dir = wine_get_build_dir())) {
+        len = strlen(data_dir);
+        dir_buf = heap_alloc(len + sizeof("/../"));
+        memcpy(dir_buf, data_dir, len);
+        strcpy(dir_buf+len, "/../");
+        package_dir = dir_buf;
+    }else {
         return FALSE;
+    }
 
-    len = strlen(data_dir);
-    len2 = strlen(subdir);
-
-    package_dir = heap_alloc(len+len2+1);
-    memcpy(package_dir, data_dir, len);
-    memcpy(package_dir+len, subdir, len2+1);
-
-    ret = install_from_unix_file(package_dir, addon->file_name);
-
-    heap_free(package_dir);
+    ret = install_from_unix_file(package_dir, addon->subdir_name, addon->file_name);
+    heap_free(dir_buf);
 
     if (!ret)
-        ret = install_from_unix_file(INSTALL_DATADIR "/wine/gecko/", addon->file_name);
+        ret = install_from_unix_file(INSTALL_DATADIR "/wine/", addon->subdir_name, addon->file_name);
     if (!ret && strcmp(INSTALL_DATADIR, "/usr/share"))
-        ret = install_from_unix_file("/usr/share/wine/gecko/", addon->file_name);
+        ret = install_from_unix_file("/usr/share/wine/", addon->subdir_name, addon->file_name);
     return ret;
 }
 




More information about the wine-cvs mailing list