If MAKE_XKM_OUTPUT_DIR is defined, call trans_mkdir to create directory if
it doesn't already exist. (ported from Solaris Xsun bug #5039004) When BuildLikeSun is set, define MAKE_XKM_OUTPUT_DIR and set the xkb output directory to /var/run/xkb.
This commit is contained in:
parent
4a19a33db6
commit
b076020140
|
@ -159,20 +159,37 @@ Win32System(const char *cmdline)
|
||||||
#define System(x) Win32System(x)
|
#define System(x) Win32System(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MAKE_XKM_OUTPUT_DIR
|
||||||
|
/* Borrow trans_mkdir from Xtransutil.c to more safely make directories */
|
||||||
|
# undef X11_t
|
||||||
|
# define TRANS_SERVER
|
||||||
|
# define PRMSG(lvl,x,a,b,c) \
|
||||||
|
if (lvl <= 1) { LogMessage(X_ERROR,x,a,b,c); } else ((void)0)
|
||||||
|
# include <X11/Xtrans/Xtransutil.c>
|
||||||
|
# ifndef XKM_OUTPUT_DIR_MODE
|
||||||
|
# define XKM_OUTPUT_DIR_MODE 0755
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
OutputDirectory(
|
OutputDirectory(
|
||||||
char* outdir,
|
char* outdir,
|
||||||
size_t size)
|
size_t size)
|
||||||
{
|
{
|
||||||
#ifndef WIN32
|
#ifndef WIN32
|
||||||
if (getuid() == 0 && strlen(XKM_OUTPUT_DIR) < size) {
|
if (getuid() == 0 && (strlen(XKM_OUTPUT_DIR) < size)
|
||||||
|
#ifdef MAKE_XKM_OUTPUT_DIR
|
||||||
|
&& (trans_mkdir(XKM_OUTPUT_DIR, XKM_OUTPUT_DIR_MODE) == 0)
|
||||||
|
#endif
|
||||||
|
)
|
||||||
|
{
|
||||||
/* if server running as root it *may* be able to write */
|
/* if server running as root it *may* be able to write */
|
||||||
/* FIXME: check whether directory is writable at all */
|
/* FIXME: check whether directory is writable at all */
|
||||||
(void) strcpy (outdir, XKM_OUTPUT_DIR);
|
(void) strcpy (outdir, XKM_OUTPUT_DIR);
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
#ifdef _PATH_VARTMP
|
#ifdef _PATH_VARTMP
|
||||||
if (strlen(_PATH_VARTMP) < size)
|
if ((strlen(_PATH_VARTMP) + 1) < size)
|
||||||
{
|
{
|
||||||
(void) strcpy (outdir, _PATH_VARTMP);
|
(void) strcpy (outdir, _PATH_VARTMP);
|
||||||
if (outdir[strlen(outdir) - 1] != '/') /* Hi IBM, Digital */
|
if (outdir[strlen(outdir) - 1] != '/') /* Hi IBM, Digital */
|
||||||
|
@ -186,6 +203,7 @@ OutputDirectory(
|
||||||
(void) strcat(outdir, "\\");
|
(void) strcat(outdir, "\\");
|
||||||
} else
|
} else
|
||||||
#endif
|
#endif
|
||||||
|
if (strlen("/tmp/") < size)
|
||||||
{
|
{
|
||||||
(void) strcpy (outdir, "/tmp/");
|
(void) strcpy (outdir, "/tmp/");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue