Remove duplication from code paths in XkbDDXCompileKeymapByNames

This commit is contained in:
Alan Coopersmith 2008-11-25 14:12:26 -08:00
parent 2538fc0d89
commit d5ad296869

View File

@ -186,53 +186,61 @@ XkbDDXCompileKeymapByNames( XkbDescPtr xkb,
char * nameRtrn, char * nameRtrn,
int nameRtrnLen) int nameRtrnLen)
{ {
FILE * out; FILE * out;
char *buf = NULL, keymap[PATH_MAX],xkm_output_dir[PATH_MAX]; char *buf = NULL, keymap[PATH_MAX], xkm_output_dir[PATH_MAX];
const char *emptystring = "";
const char *xkbbasedirflag = emptystring;
const char *xkbbindir = emptystring;
const char *xkbbindirsep = emptystring;
#ifdef WIN32 #ifdef WIN32
char tmpname[PATH_MAX]; /* WIN32 has no popen. The input must be stored in a file which is
used as input for xkbcomp. xkbcomp does not read from stdin. */
char tmpname[PATH_MAX];
const char *xkmfile = tmpname;
#else
const char *xkmfile = "-";
#endif #endif
snprintf(keymap, sizeof(keymap), "server-%s", display); snprintf(keymap, sizeof(keymap), "server-%s", display);
XkbEnsureSafeMapName(keymap); XkbEnsureSafeMapName(keymap);
OutputDirectory(xkm_output_dir, sizeof(xkm_output_dir)); OutputDirectory(xkm_output_dir, sizeof(xkm_output_dir));
#ifdef WIN32 #ifdef WIN32
strcpy(tmpname, Win32TempDir()); strcpy(tmpname, Win32TempDir());
strcat(tmpname, "\\xkb_XXXXXX"); strcat(tmpname, "\\xkb_XXXXXX");
(void) mktemp(tmpname); (void) mktemp(tmpname);
#endif #endif
if (XkbBaseDirectory!=NULL) {
#ifndef WIN32
char *xkmfile = "-";
#else
/* WIN32 has no popen. The input must be stored in a file which is used as input
for xkbcomp. xkbcomp does not read from stdin. */
char *xkmfile = tmpname;
#endif
char *xkbbasedir = XkbBaseDirectory;
char *xkbbindir = XkbBinDirectory;
buf = Xprintf( if (XkbBaseDirectory != NULL) {
"\"%s" PATHSEPARATOR "xkbcomp\" -w %d \"-R%s\" -xkm \"%s\" -em1 %s -emp %s -eml %s \"%s%s.xkm\"", xkbbasedirflag = Xprintf("\"-R%s\"", XkbBaseDirectory);
xkbbindir,
((xkbDebugFlags<2)?1:((xkbDebugFlags>10)?10:(int)xkbDebugFlags)),
xkbbasedir, xkmfile,
PRE_ERROR_MSG,ERROR_PREFIX,POST_ERROR_MSG1,
xkm_output_dir,keymap);
} }
else {
#ifndef WIN32 if (XkbBinDirectory != NULL) {
char *xkmfile = "-"; int ld = strlen(XkbBinDirectory);
#else int lps = strlen(PATHSEPARATOR);
char *xkmfile = tmpname;
#endif xkbbindir = XkbBinDirectory;
buf = Xprintf(
"xkbcomp -w %d -xkm \"%s\" -em1 %s -emp %s -eml %s \"%s%s.xkm\"", if ((ld >= lps) &&
((xkbDebugFlags<2)?1:((xkbDebugFlags>10)?10:(int)xkbDebugFlags)), (strcmp(xkbbindir + ld - lps, PATHSEPARATOR) != 0)) {
xkmfile, xkbbindirsep = PATHSEPARATOR;
PRE_ERROR_MSG,ERROR_PREFIX,POST_ERROR_MSG1, }
xkm_output_dir,keymap); }
buf = Xprintf("\"%s%sxkbcomp\" -w %d %s -xkm \"%s\" "
"-em1 %s -emp %s -eml %s \"%s%s.xkm\"",
xkbbindir, xkbbindirsep,
( (xkbDebugFlags < 2) ? 1 :
((xkbDebugFlags > 10) ? 10 : (int)xkbDebugFlags) ),
xkbbasedirflag, xkmfile,
PRE_ERROR_MSG, ERROR_PREFIX, POST_ERROR_MSG1,
xkm_output_dir, keymap);
if (xkbbasedirflag != emptystring) {
xfree(xkbbasedirflag);
} }
#ifndef WIN32 #ifndef WIN32