diff -urN WindowMaker-0.80.1-orig/WINGs/wapplication.c WindowMaker-0.80.1/WINGs/wapplication.c --- WindowMaker-0.80.1-orig/WINGs/wapplication.c 2001-10-04 04:59:50 +0400 +++ WindowMaker-0.80.1/WINGs/wapplication.c 2002-08-15 17:05:24 +0400 @@ -77,13 +77,14 @@ } +/* TODO(raorn): also check Rsources (and maybe Language.lproj) subfolders */ static char* checkFile(char *path, char *folder, char *ext, char *resource) { char *ret; int extralen; - - extralen = (ext ? strlen(ext) : 0) + (folder ? strlen(folder) : 0) + 4; + + extralen = (ext ? strlen(ext) : 0) + (folder ? strlen(folder) : 0) + 4; ret = wmalloc(strlen(path)+strlen(resource)+extralen+8); strcpy(ret, path); if (folder) { @@ -96,7 +97,7 @@ } strcat(ret, "/"); strcat(ret, resource); - + if (access(ret, F_OK)!=0) { wfree(ret); ret = NULL; @@ -110,21 +111,27 @@ WMPathForResourceOfType(char *resource, char *ext) { char *path = NULL; - char *tmp, *appdir; + char *tmp, *appdir, *applicationsdir; int i; - - /* + + /* * Paths are searched in this order: * - resourcePath/ext * - argv[0]/ext - * - GNUSTEP_USER_ROOT/Apps/ApplicationName.app/ext + * - GNUSTEP_USER_ROOT/Applications/ApplicationName.app/ext + * - GNUSTEP_USER_ROOT/Apps/ApplicationName.app/ext + * - ~/GNUstep/Applications/ApplicationName.app/ext * - ~/GNUstep/Apps/ApplicationName.app/ext + * - GNUSTEP_LOCAL_ROOT/Applications/ApplicationName.app/ext * - GNUSTEP_LOCAL_ROOT/Apps/ApplicationName.app/ext - * - /usr/local/GNUstep/Apps/ApplicationName.app/ext + * - GNUSTEP_SYSTEM_ROOT/Applications/ApplicationName.app/ext * - GNUSTEP_SYSTEM_ROOT/Apps/ApplicationName.app/ext + * - /usr/local/GNUstep/Applications/ApplicationName.app/ext + * - /usr/local/GNUstep/Apps/ApplicationName.app/ext + * - /usr/GNUstep/Applications/ApplicationName.app/ext * - /usr/GNUstep/Apps/ApplicationName.app/ext */ - + if (WMApplication.resourcePath) { path = checkFile(WMApplication.resourcePath, NULL, ext, resource); if (path) @@ -146,57 +153,68 @@ if (path) return path; } - + + applicationsdir = wmalloc(strlen(WMApplication.applicationName)+18); + sprintf(applicationsdir, "Applications/%s.app", WMApplication.applicationName); + appdir = wmalloc(strlen(WMApplication.applicationName)+10); sprintf(appdir, "Apps/%s.app", WMApplication.applicationName); - if (getenv("GNUSTEP_USER_ROOT")) { - path = checkFile(getenv("GNUSTEP_USER_ROOT"), appdir, ext, resource); - if (path) { - wfree(appdir); - return path; + do /* only to provide break operator. */ + { + tmp = getenv("GNUSTEP_USER_ROOT"); + if (tmp) { + path = checkFile(tmp, applicationsdir, ext, resource); + if (path) break; + + path = checkFile(tmp, appdir, ext, resource); + if (path) break; } - } - - tmp = wusergnusteppath(); - if (tmp) { - path = checkFile(tmp, appdir, ext, resource); - if (path) { - wfree(appdir); - return path; + + tmp = wusergnusteppath(); + if (tmp) { + path = checkFile(tmp, applicationsdir, ext, resource); + if (path) break; + + path = checkFile(tmp, appdir, ext, resource); + if (path) break; } - } - - if (getenv("GNUSTEP_LOCAL_ROOT")) { - path = checkFile(getenv("GNUSTEP_LOCAL_ROOT"), appdir, ext, resource); - if (path) { - wfree(appdir); - return path; + + tmp = getenv("GNUSTEP_LOCAL_ROOT"); + if (tmp) { + path = checkFile(tmp, applicationsdir, ext, resource); + if (path) break; + + path = checkFile(tmp, appdir, ext, resource); + if (path) break; } - } - - path = checkFile("/usr/local/GNUstep", appdir, ext, resource); - if (path) { - wfree(appdir); - return path; - } - - if (getenv("GNUSTEP_SYSTEM_ROOT")) { - path = checkFile(getenv("GNUSTEP_SYSTEM_ROOT"), appdir, ext, resource); - if (path) { - wfree(appdir); - return path; + tmp = getenv("GNUSTEP_SYSTEM_ROOT"); + if (tmp) { + path = checkFile(tmp, applicationsdir, ext, resource); + if (path) break; + + path = checkFile(tmp, appdir, ext, resource); + if (path) break; } - } - path = checkFile("/usr/GNUstep", appdir, ext, resource); - if (path) { - wfree(appdir); - return path; - } - - return NULL; + path = checkFile("/usr/local/GNUstep", applicationsdir, ext, resource); + if (path) break; + + path = checkFile("/usr/local/GNUstep", appdir, ext, resource); + if (path) break; + + path = checkFile("/usr/GNUstep", applicationsdir, ext, resource); + if (path) break; + + path = checkFile("/usr/GNUstep", appdir, ext, resource); + if (path) break; + + } while (0); + + wfree(applicationsdir); + wfree(appdir); + return path; }