xkb: don't require a trailing slash for the XKM output dir
Rework the function to use a single snprintf call instead of a mix of
strcpy/strcats. This now also appends a trailing slash where needed so we
don't rely on the build system to set this for us.
Also, since /tmp/ is the fallback and we never check if everything succeeded,
assert if we can't use /tmp/. This will never be triggered anyway, the only
caller to OutputDirectory() uses sizeof(PATH_MAX-sized array).
Follow-up from 6c51818a0f
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
This commit is contained in:
parent
eceafd4a2d
commit
f6b8f8c071
|
@ -62,22 +62,27 @@ LoadXKM(unsigned want, unsigned need, const char *keymap, XkbDescPtr *xkbRtrn);
|
||||||
static void
|
static void
|
||||||
OutputDirectory(char *outdir, size_t size)
|
OutputDirectory(char *outdir, size_t size)
|
||||||
{
|
{
|
||||||
|
const char *directory = NULL;
|
||||||
|
const char *pathsep = "";
|
||||||
|
int r = -1;
|
||||||
|
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
/* Can we write an xkm and then open it too? */
|
/* Can we write an xkm and then open it too? */
|
||||||
if (access(XKM_OUTPUT_DIR, W_OK | X_OK) == 0 &&
|
if (access(XKM_OUTPUT_DIR, W_OK | X_OK) == 0) {
|
||||||
(strlen(XKM_OUTPUT_DIR) < size)) {
|
directory = XKM_OUTPUT_DIR;
|
||||||
(void) strcpy(outdir, XKM_OUTPUT_DIR);
|
if (XKM_OUTPUT_DIR[strlen(XKM_OUTPUT_DIR) - 1] != '/')
|
||||||
|
pathsep = "/";
|
||||||
}
|
}
|
||||||
else
|
|
||||||
#else
|
#else
|
||||||
if (strlen(Win32TempDir()) + 1 < size) {
|
directory = Win32TempDir();
|
||||||
(void) strcpy(outdir, Win32TempDir());
|
pathsep = "\\";
|
||||||
(void) strcat(outdir, "\\");
|
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
#endif
|
||||||
if (strlen("/tmp/") < size) {
|
|
||||||
(void) strcpy(outdir, "/tmp/");
|
if (directory)
|
||||||
|
r = snprintf(outdir, size, "%s%s", directory, pathsep);
|
||||||
|
if (r < 0 || r >= size) {
|
||||||
|
assert(strlen("/tmp/") < size);
|
||||||
|
strcpy(outdir, "/tmp/");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue