summaryrefslogtreecommitdiff
path: root/xkb/ddxList.c
diff options
context:
space:
mode:
Diffstat (limited to 'xkb/ddxList.c')
-rw-r--r--xkb/ddxList.c350
1 files changed, 177 insertions, 173 deletions
diff --git a/xkb/ddxList.c b/xkb/ddxList.c
index db34c8df5..9b69b2b82 100644
--- a/xkb/ddxList.c
+++ b/xkb/ddxList.c
@@ -44,8 +44,9 @@ THE USE OR PERFORMANCE OF THIS SOFTWARE.
#ifdef WIN32
/* from ddxLoad.c */
-extern const char* Win32TempDir(void);
+extern const char *Win32TempDir(void);
extern int Win32System(const char *cmdline);
+
#undef System
#define System Win32System
@@ -54,63 +55,62 @@ extern int Win32System(const char *cmdline);
#define W32_tmplen strlen(tmpname)+3
#else
#define W32_tmparg
-#define W32_tmpfile
+#define W32_tmpfile
#define W32_tmplen 0
-#endif
+#endif
/***====================================================================***/
static const char *componentDirs[_XkbListNumComponents] = {
- "keycodes", "types", "compat", "symbols", "geometry"
+ "keycodes", "types", "compat", "symbols", "geometry"
};
/***====================================================================***/
static Status
-_AddListComponent( XkbSrvListInfoPtr list,
- int what,
- unsigned flags,
- char * str,
- ClientPtr client)
+_AddListComponent(XkbSrvListInfoPtr list,
+ int what, unsigned flags, char *str, ClientPtr client)
{
-int slen,wlen;
-unsigned char * wire8;
-unsigned short *wire16;
-char * tmp;
+ int slen, wlen;
+ unsigned char *wire8;
+ unsigned short *wire16;
+ char *tmp;
- if (list->nTotal>=list->maxRtrn) {
- list->nTotal++;
- return Success;
+ if (list->nTotal >= list->maxRtrn) {
+ list->nTotal++;
+ return Success;
}
- tmp= strchr(str,')');
- if ((tmp==NULL)&&((tmp=strchr(str,'('))==NULL)) {
- slen= strlen(str);
- while ((slen>0) && isspace(str[slen-1])) {
- slen--;
- }
+ tmp = strchr(str, ')');
+ if ((tmp == NULL) && ((tmp = strchr(str, '(')) == NULL)) {
+ slen = strlen(str);
+ while ((slen > 0) && isspace(str[slen - 1])) {
+ slen--;
+ }
}
else {
- slen= (tmp-str+1);
+ slen = (tmp - str + 1);
}
- wlen= (((slen+1)/2)*2)+4; /* four bytes for flags and length, pad to */
- /* 2-byte boundary */
- if ((list->szPool-list->nPool)<wlen) {
- if (wlen>1024) list->szPool+= XkbPaddedSize(wlen*2);
- else list->szPool+= 1024;
- list->pool= realloc(list->pool, list->szPool * sizeof(char));
- if (!list->pool)
- return BadAlloc;
+ wlen = (((slen + 1) / 2) * 2) + 4; /* four bytes for flags and length, pad to */
+ /* 2-byte boundary */
+ if ((list->szPool - list->nPool) < wlen) {
+ if (wlen > 1024)
+ list->szPool += XkbPaddedSize(wlen * 2);
+ else
+ list->szPool += 1024;
+ list->pool = realloc(list->pool, list->szPool * sizeof(char));
+ if (!list->pool)
+ return BadAlloc;
}
- wire16= (unsigned short *)&list->pool[list->nPool];
- wire8= (unsigned char *)&wire16[2];
- wire16[0]= flags;
- wire16[1]= slen;
- memcpy(wire8,str,slen);
+ wire16 = (unsigned short *) &list->pool[list->nPool];
+ wire8 = (unsigned char *) &wire16[2];
+ wire16[0] = flags;
+ wire16[1] = slen;
+ memcpy(wire8, str, slen);
if (client->swapped) {
- swaps(&wire16[0]);
- swaps(&wire16[1]);
+ swaps(&wire16[0]);
+ swaps(&wire16[1]);
}
- list->nPool+= wlen;
+ list->nPool += wlen;
list->nFound[what]++;
list->nTotal++;
return Success;
@@ -118,108 +118,104 @@ char * tmp;
/***====================================================================***/
static Status
-XkbDDXListComponent( DeviceIntPtr dev,
- int what,
- XkbSrvListInfoPtr list,
- ClientPtr client)
+XkbDDXListComponent(DeviceIntPtr dev,
+ int what, XkbSrvListInfoPtr list, ClientPtr client)
{
-char *file,*map,*tmp,*buf=NULL;
-FILE *in;
-Status status;
-Bool haveDir;
+ char *file, *map, *tmp, *buf = NULL;
+ FILE *in;
+ Status status;
+ Bool haveDir;
+
#ifdef WIN32
-char tmpname[PATH_MAX];
+ char tmpname[PATH_MAX];
#else
-int rval;
+ int rval;
#endif
- if ((list->pattern[what]==NULL)||(list->pattern[what][0]=='\0'))
- return Success;
- file= list->pattern[what];
- map= strrchr(file,'(');
- if (map!=NULL) {
- char *tmp;
- map++;
- tmp= strrchr(map,')');
- if ((tmp==NULL)||(tmp[1]!='\0')) {
- /* illegal pattern. No error, but no match */
- return Success;
- }
+ if ((list->pattern[what] == NULL) || (list->pattern[what][0] == '\0'))
+ return Success;
+ file = list->pattern[what];
+ map = strrchr(file, '(');
+ if (map != NULL) {
+ char *tmp;
+
+ map++;
+ tmp = strrchr(map, ')');
+ if ((tmp == NULL) || (tmp[1] != '\0')) {
+ /* illegal pattern. No error, but no match */
+ return Success;
+ }
}
- in= NULL;
- haveDir= TRUE;
+ in = NULL;
+ haveDir = TRUE;
#ifdef WIN32
strcpy(tmpname, Win32TempDir());
strcat(tmpname, "\\xkb_XXXXXX");
(void) mktemp(tmpname);
#endif
- if (XkbBaseDirectory!=NULL) {
- if ((list->pattern[what][0]=='*')&&(list->pattern[what][1]=='\0')) {
- if (asprintf(&buf, "%s/%s.dir", XkbBaseDirectory,
- componentDirs[what]) == -1)
- buf = NULL;
- else
- in = fopen(buf,"r");
- }
- if (!in) {
- haveDir= FALSE;
- free(buf);
- if (asprintf
- (&buf,
- "'%s/xkbcomp' '-R%s/%s' -w %ld -l -vlfhpR '%s'" W32_tmparg,
- XkbBinDirectory, XkbBaseDirectory, componentDirs[what],
- (long) ((xkbDebugFlags < 2) ? 1 :
- ((xkbDebugFlags > 10) ? 10 : xkbDebugFlags)),
- file W32_tmpfile
- ) == -1)
- buf = NULL;
- }
+ if (XkbBaseDirectory != NULL) {
+ if ((list->pattern[what][0] == '*') && (list->pattern[what][1] == '\0')) {
+ if (asprintf(&buf, "%s/%s.dir", XkbBaseDirectory,
+ componentDirs[what]) == -1)
+ buf = NULL;
+ else
+ in = fopen(buf, "r");
+ }
+ if (!in) {
+ haveDir = FALSE;
+ free(buf);
+ if (asprintf
+ (&buf,
+ "'%s/xkbcomp' '-R%s/%s' -w %ld -l -vlfhpR '%s'" W32_tmparg,
+ XkbBinDirectory, XkbBaseDirectory, componentDirs[what],
+ (long) ((xkbDebugFlags < 2) ? 1 :
+ ((xkbDebugFlags > 10) ? 10 : xkbDebugFlags)),
+ file W32_tmpfile) == -1)
+ buf = NULL;
+ }
}
else {
- if ((list->pattern[what][0]=='*')&&(list->pattern[what][1]=='\0')) {
- if (asprintf(&buf, "%s.dir", componentDirs[what]) == -1)
- buf = NULL;
- else
- in = fopen(buf,"r");
- }
- if (!in) {
- haveDir= FALSE;
- free(buf);
- if (asprintf
- (&buf,
- "xkbcomp -R%s -w %ld -l -vlfhpR '%s'" W32_tmparg,
- componentDirs[what],
- (long) ((xkbDebugFlags < 2) ? 1 :
- ((xkbDebugFlags > 10) ? 10 : xkbDebugFlags)),
- file W32_tmpfile
- ) == -1)
- buf = NULL;
- }
+ if ((list->pattern[what][0] == '*') && (list->pattern[what][1] == '\0')) {
+ if (asprintf(&buf, "%s.dir", componentDirs[what]) == -1)
+ buf = NULL;
+ else
+ in = fopen(buf, "r");
+ }
+ if (!in) {
+ haveDir = FALSE;
+ free(buf);
+ if (asprintf
+ (&buf,
+ "xkbcomp -R%s -w %ld -l -vlfhpR '%s'" W32_tmparg,
+ componentDirs[what],
+ (long) ((xkbDebugFlags < 2) ? 1 :
+ ((xkbDebugFlags > 10) ? 10 : xkbDebugFlags)),
+ file W32_tmpfile) == -1)
+ buf = NULL;
+ }
}
- status= Success;
- if (!haveDir)
- {
+ status = Success;
+ if (!haveDir) {
#ifndef WIN32
- in= Popen(buf,"r");
+ in = Popen(buf, "r");
#else
if (xkbDebugFlags)
- DebugF("[xkb] xkbList executes: %s\n",buf);
- if (System(buf) < 0)
- ErrorF("[xkb] Could not invoke keymap compiler\n");
- else
- in= fopen(tmpname, "r");
+ DebugF("[xkb] xkbList executes: %s\n", buf);
+ if (System(buf) < 0)
+ ErrorF("[xkb] Could not invoke keymap compiler\n");
+ else
+ in = fopen(tmpname, "r");
#endif
}
- if (!in)
- {
- free(buf);
+ if (!in) {
+ free(buf);
#ifdef WIN32
- unlink(tmpname);
+ unlink(tmpname);
#endif
- return BadImplementation;
+ return BadImplementation;
}
- list->nFound[what]= 0;
+ list->nFound[what] = 0;
free(buf);
buf = malloc(PATH_MAX * sizeof(char));
if (!buf) {
@@ -229,53 +225,61 @@ int rval;
#endif
return BadAlloc;
}
- while ((status==Success)&&((tmp=fgets(buf,PATH_MAX,in))!=NULL)) {
- unsigned flags;
- register unsigned int i;
- if (*tmp=='#') /* comment, skip it */
- continue;
- if (!strncmp(tmp, "Warning:", 8) || !strncmp(tmp, " ", 8))
- /* skip warnings too */
- continue;
- flags= 0;
- /* each line in the listing is supposed to start with two */
- /* groups of eight characters, which specify the general */
- /* flags and the flags that are specific to the component */
- /* if they're missing, fail with BadImplementation */
- for (i=0;(i<8)&&(status==Success);i++) { /* read the general flags */
- if (isalpha(*tmp)) flags|= (1L<<i);
- else if (*tmp!='-') status= BadImplementation;
- tmp++;
- }
- if (status != Success) break;
- if (!isspace(*tmp)) {
- status= BadImplementation;
- break;
- }
- else tmp++;
- for (i=0;(i<8)&&(status==Success);i++) { /* read the component flags */
- if (isalpha(*tmp)) flags|= (1L<<(i+8));
- else if (*tmp!='-') status= BadImplementation;
- tmp++;
- }
- if (status != Success) break;
- if (isspace(*tmp)) {
- while (isspace(*tmp)) {
- tmp++;
- }
- }
- else {
- status= BadImplementation;
- break;
- }
- status= _AddListComponent(list,what,flags,tmp,client);
+ while ((status == Success) && ((tmp = fgets(buf, PATH_MAX, in)) != NULL)) {
+ unsigned flags;
+ register unsigned int i;
+
+ if (*tmp == '#') /* comment, skip it */
+ continue;
+ if (!strncmp(tmp, "Warning:", 8) || !strncmp(tmp, " ", 8))
+ /* skip warnings too */
+ continue;
+ flags = 0;
+ /* each line in the listing is supposed to start with two */
+ /* groups of eight characters, which specify the general */
+ /* flags and the flags that are specific to the component */
+ /* if they're missing, fail with BadImplementation */
+ for (i = 0; (i < 8) && (status == Success); i++) { /* read the general flags */
+ if (isalpha(*tmp))
+ flags |= (1L << i);
+ else if (*tmp != '-')
+ status = BadImplementation;
+ tmp++;
+ }
+ if (status != Success)
+ break;
+ if (!isspace(*tmp)) {
+ status = BadImplementation;
+ break;
+ }
+ else
+ tmp++;
+ for (i = 0; (i < 8) && (status == Success); i++) { /* read the component flags */
+ if (isalpha(*tmp))
+ flags |= (1L << (i + 8));
+ else if (*tmp != '-')
+ status = BadImplementation;
+ tmp++;
+ }
+ if (status != Success)
+ break;
+ if (isspace(*tmp)) {
+ while (isspace(*tmp)) {
+ tmp++;
+ }
+ }
+ else {
+ status = BadImplementation;
+ break;
+ }
+ status = _AddListComponent(list, what, flags, tmp, client);
}
#ifndef WIN32
if (haveDir)
- fclose(in);
- else if ((rval=Pclose(in))!=0) {
- if (xkbDebugFlags)
- ErrorF("[xkb] xkbcomp returned exit code %d\n",rval);
+ fclose(in);
+ else if ((rval = Pclose(in)) != 0) {
+ if (xkbDebugFlags)
+ ErrorF("[xkb] xkbcomp returned exit code %d\n", rval);
}
#else
fclose(in);
@@ -289,18 +293,18 @@ int rval;
/* ARGSUSED */
Status
-XkbDDXList(DeviceIntPtr dev,XkbSrvListInfoPtr list,ClientPtr client)
+XkbDDXList(DeviceIntPtr dev, XkbSrvListInfoPtr list, ClientPtr client)
{
-Status status;
+ Status status;
- status= XkbDDXListComponent(dev,_XkbListKeycodes,list,client);
- if (status==Success)
- status= XkbDDXListComponent(dev,_XkbListTypes,list,client);
- if (status==Success)
- status= XkbDDXListComponent(dev,_XkbListCompat,list,client);
- if (status==Success)
- status= XkbDDXListComponent(dev,_XkbListSymbols,list,client);
- if (status==Success)
- status= XkbDDXListComponent(dev,_XkbListGeometry,list,client);
+ status = XkbDDXListComponent(dev, _XkbListKeycodes, list, client);
+ if (status == Success)
+ status = XkbDDXListComponent(dev, _XkbListTypes, list, client);
+ if (status == Success)
+ status = XkbDDXListComponent(dev, _XkbListCompat, list, client);
+ if (status == Success)
+ status = XkbDDXListComponent(dev, _XkbListSymbols, list, client);
+ if (status == Success)
+ status = XkbDDXListComponent(dev, _XkbListGeometry, list, client);
return status;
}