mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-18 20:10:29 +01:00
WINGs: Improve search path logic in WMPathForResourceOfType
The man page says environment variables are used, and if they don't exist
it falls back to defaults, yet this was not true in WINGS.
This changes implements the checks for the default paths used when the env
variables are not defined; these default paths have been fixed (+lib) to
match the GNUstep layout ('fhs'), expect for the very last path which keeps
the legacy layout.
For the user Apps folder, rely on wusergnusteppath() (~/GNUstep) to build
the path.
The previous code was only partially functional as the hard-coded paths
did not exist in any of GNUstep standard file system layout and the
GNUSTEP_*_ROOT environment variables were not provided by GNUstep for a
while. This means it would never work no matter how environment variables
were set when using layouts: 'debian', 'fhs', 'next', 'Apple', 'mac',
'fhs-system', or 'standalone'.
This commit is contained in:
committed by
Carlos R. Mafra
parent
c060477d57
commit
bfab769065
@@ -131,7 +131,9 @@ error:
|
||||
|
||||
char *WMPathForResourceOfType(const char *resource, const char *ext)
|
||||
{
|
||||
const char *gslocapps, *gssysapps, *gsuserapps;
|
||||
char *path, *appdir;
|
||||
char buffer[PATH_MAX];
|
||||
size_t slen;
|
||||
|
||||
path = appdir = NULL;
|
||||
@@ -141,11 +143,11 @@ char *WMPathForResourceOfType(const char *resource, const char *ext)
|
||||
* - resourcePath/ext
|
||||
* - dirname(argv[0])/ext
|
||||
* - WMAKER_USER_ROOT/Applications/ApplicationName.app/ext
|
||||
* - ~/GNUstep/Applications/ApplicationName.app/ext
|
||||
* - GNUSTEP_LOCAL_ROOT/Applications/ApplicationName.app/ext
|
||||
* - /usr/local/GNUstep/Applications/ApplicationName.app/ext
|
||||
* - GNUSTEP_SYSTEM_ROOT/Applications/ApplicationName.app/ext
|
||||
* - /usr/GNUstep/Applications/ApplicationName.app/ext
|
||||
* - GNUSTEP_USER_APPS/ApplicationName.app/ext
|
||||
* - GNUSTEP_LOCAL_APPS/ApplicationName.app/ext
|
||||
* - /usr/local/lib/GNUstep/Applications/ApplicationName.app/ext
|
||||
* - GNUSTEP_SYSTEM_APPS/ApplicationName.app/ext
|
||||
* - /usr/lib/GNUstep/Applications/ApplicationName.app/ext
|
||||
*/
|
||||
|
||||
if (WMApplication.resourcePath) {
|
||||
@@ -170,32 +172,40 @@ char *WMPathForResourceOfType(const char *resource, const char *ext)
|
||||
}
|
||||
}
|
||||
|
||||
slen = strlen(WMApplication.applicationName) + sizeof("Applications/.app");
|
||||
snprintf(buffer, sizeof(buffer), "Applications/%s.app", WMApplication.applicationName);
|
||||
path = checkFile(GETENV("WMAKER_USER_ROOT"), buffer, ext, resource);
|
||||
if (path)
|
||||
goto out;
|
||||
|
||||
slen = strlen(WMApplication.applicationName) + sizeof("/.app");
|
||||
appdir = wmalloc(slen);
|
||||
if (snprintf(appdir, slen, "Applications/%s.app", WMApplication.applicationName) >= slen)
|
||||
if (snprintf(appdir, slen, "/%s.app", WMApplication.applicationName) >= slen)
|
||||
goto out;
|
||||
|
||||
path = checkFile(getenv("WMAKER_USER_ROOT"), appdir, ext, resource);
|
||||
gsuserapps = GETENV("GNUSTEP_USER_APPS");
|
||||
if (!gsuserapps) {
|
||||
snprintf(buffer, sizeof(buffer), "%s/Applications", wusergnusteppath());
|
||||
gsuserapps = buffer;
|
||||
}
|
||||
path = checkFile(gsuserapps, appdir, ext, resource);
|
||||
if (path)
|
||||
goto out;
|
||||
|
||||
path = checkFile(wusergnusteppath(), appdir, ext, resource);
|
||||
gslocapps = GETENV("GNUSTEP_LOCAL_APPS");
|
||||
if (!gslocapps)
|
||||
gslocapps = "/usr/local/lib/GNUstep/Applications";
|
||||
path = checkFile(gslocapps, appdir, ext, resource);
|
||||
if (path)
|
||||
goto out;
|
||||
|
||||
path = checkFile(getenv("GNUSTEP_LOCAL_ROOT"), appdir, ext, resource);
|
||||
gssysapps = GETENV("GNUSTEP_SYSTEM_APPS");
|
||||
if (!gssysapps)
|
||||
gssysapps = "/usr/lib/GNUstep/Applications";
|
||||
path = checkFile(gssysapps, appdir, ext, resource);
|
||||
if (path)
|
||||
goto out;
|
||||
|
||||
path = checkFile("/usr/local/GNUstep", appdir, ext, resource);
|
||||
if (path)
|
||||
goto out;
|
||||
|
||||
path = checkFile(getenv("GNUSTEP_SYSTEM_ROOT"), appdir, ext, resource);
|
||||
if (path)
|
||||
goto out;
|
||||
|
||||
path = checkFile("/usr/GNUstep", appdir, ext, resource); /* falls through */
|
||||
path = checkFile("/usr/GNUstep/System/Applications", appdir, ext, resource); /* falls through */
|
||||
|
||||
out:
|
||||
if (appdir)
|
||||
|
||||
@@ -140,14 +140,17 @@ Guess... ;-)
|
||||
specifies the initial path for the Defaults directory. "Defaults/" is
|
||||
appended to this variable to determine the actual location of the
|
||||
databases. If the variable is not set, it defaults to "~/GNUstep"
|
||||
.IP GNUSTEP_LOCAL_ROOT
|
||||
specifies the location of the system-wide \fBlocal\fP GNUstep
|
||||
.IP GNUSTEP_USER_APPS
|
||||
specifies the location of the user's GNUstep Apps directory. If this
|
||||
variable is empty, it defaults to ~/GNUstep/Applications.
|
||||
.IP GNUSTEP_LOCAL_APPS
|
||||
specifies the location of the system-wide \fBlocal\fP GNUstep Apps
|
||||
directory (this is useful, for example, in those cases where the
|
||||
system-wide location is really a network wide location). If this
|
||||
variable is empty, GNUSTEP_SYSTEM_ROOT is looked for.
|
||||
.IP GNUSTEP_SYSTEM_ROOT
|
||||
specifies the location of the system-wide GNUstep directory. If this
|
||||
variable is empty, it defaults to /etc/GNUstep
|
||||
variable is empty, it defaults to /usr/local/GNUstep/Local/Applications.
|
||||
.IP GNUSTEP_SYSTEM_APPS
|
||||
specifies the location of the system-wide GNUstep Apps directory. If this
|
||||
variable is empty, it defaults to /usr/GNUstep/System/Applications.
|
||||
.SH SEE ALSO
|
||||
The Window Maker User Guide
|
||||
.PP
|
||||
|
||||
Reference in New Issue
Block a user