diff options
Diffstat (limited to 'dix/registry.c')
-rw-r--r-- | dix/registry.c | 247 |
1 files changed, 127 insertions, 120 deletions
diff --git a/dix/registry.c b/dix/registry.c index 5ab25ad70..e9c19b092 100644 --- a/dix/registry.c +++ b/dix/registry.c @@ -48,43 +48,45 @@ static unsigned nmajor, *nminor, nevent, nerror, nresource; /* * File parsing routines */ -static int double_size(void *p, unsigned n, unsigned size) +static int +double_size(void *p, unsigned n, unsigned size) { - char **ptr = (char **)p; + char **ptr = (char **) p; unsigned s, f; if (n) { - s = n * size; - n *= 2 * size; - f = n; - } else { - s = 0; - n = f = BASE_SIZE * size; + s = n * size; + n *= 2 * size; + f = n; + } + else { + s = 0; + n = f = BASE_SIZE * size; } *ptr = realloc(*ptr, n); if (!*ptr) { - dixResetRegistry(); - return FALSE; + dixResetRegistry(); + return FALSE; } memset(*ptr + s, 0, f - s); return TRUE; -} +} static void RegisterRequestName(unsigned major, unsigned minor, char *name) { while (major >= nmajor) { - if (!double_size(&requests, nmajor, sizeof(char **))) - return; - if (!double_size(&nminor, nmajor, sizeof(unsigned))) - return; - nmajor = nmajor ? nmajor * 2 : BASE_SIZE; + if (!double_size(&requests, nmajor, sizeof(char **))) + return; + if (!double_size(&nminor, nmajor, sizeof(unsigned))) + return; + nmajor = nmajor ? nmajor * 2 : BASE_SIZE; } while (minor >= nminor[major]) { - if (!double_size(requests+major, nminor[major], sizeof(char *))) - return; - nminor[major] = nminor[major] ? nminor[major] * 2 : BASE_SIZE; + if (!double_size(requests + major, nminor[major], sizeof(char *))) + return; + nminor[major] = nminor[major] ? nminor[major] * 2 : BASE_SIZE; } free(requests[major][minor]); @@ -92,11 +94,12 @@ RegisterRequestName(unsigned major, unsigned minor, char *name) } static void -RegisterEventName(unsigned event, char *name) { +RegisterEventName(unsigned event, char *name) +{ while (event >= nevent) { - if (!double_size(&events, nevent, sizeof(char *))) - return; - nevent = nevent ? nevent * 2 : BASE_SIZE; + if (!double_size(&events, nevent, sizeof(char *))) + return; + nevent = nevent ? nevent * 2 : BASE_SIZE; } free(events[event]); @@ -104,11 +107,12 @@ RegisterEventName(unsigned event, char *name) { } static void -RegisterErrorName(unsigned error, char *name) { +RegisterErrorName(unsigned error, char *name) +{ while (error >= nerror) { - if (!double_size(&errors, nerror, sizeof(char *))) - return; - nerror = nerror ? nerror * 2 : BASE_SIZE; + if (!double_size(&errors, nerror, sizeof(char *))) + return; + nerror = nerror ? nerror * 2 : BASE_SIZE; } free(errors[error]); @@ -116,80 +120,80 @@ RegisterErrorName(unsigned error, char *name) { } void -RegisterExtensionNames(ExtensionEntry *extEntry) +RegisterExtensionNames(ExtensionEntry * extEntry) { char buf[256], *lineobj, *ptr; unsigned offset; if (fh == NULL) - return; + return; rewind(fh); while (fgets(buf, sizeof(buf), fh)) { - lineobj = NULL; - ptr = strchr(buf, '\n'); - if (ptr) - *ptr = 0; - - /* Check for comments or empty lines */ - switch (buf[0]) { - case PROT_REQUEST: - case PROT_EVENT: - case PROT_ERROR: - break; - case PROT_COMMENT: - case '\0': - continue; - default: - goto invalid; - } - - /* Check for space character in the fifth position */ - ptr = strchr(buf, ' '); - if (!ptr || ptr != buf + 4) - goto invalid; - - /* Duplicate the string after the space */ - lineobj = strdup(ptr + 1); - if (!lineobj) - continue; - - /* Check for a colon somewhere on the line */ - ptr = strchr(buf, ':'); - if (!ptr) - goto invalid; - - /* Compare the part before colon with the target extension name */ - *ptr = 0; - if (strcmp(buf + 5, extEntry->name)) - goto skip; - - /* Get the opcode for the request, event, or error */ - offset = strtol(buf + 1, &ptr, 10); - if (offset == 0 && ptr == buf + 1) - goto invalid; - - /* Save the strdup result in the registry */ - switch(buf[0]) { - case PROT_REQUEST: - if (extEntry->base) - RegisterRequestName(extEntry->base, offset, lineobj); - else - RegisterRequestName(offset, 0, lineobj); - continue; - case PROT_EVENT: - RegisterEventName(extEntry->eventBase + offset, lineobj); - continue; - case PROT_ERROR: - RegisterErrorName(extEntry->errorBase + offset, lineobj); - continue; - } - - invalid: - LogMessage(X_WARNING, "Invalid line in " FILENAME ", skipping\n"); - skip: - free(lineobj); + lineobj = NULL; + ptr = strchr(buf, '\n'); + if (ptr) + *ptr = 0; + + /* Check for comments or empty lines */ + switch (buf[0]) { + case PROT_REQUEST: + case PROT_EVENT: + case PROT_ERROR: + break; + case PROT_COMMENT: + case '\0': + continue; + default: + goto invalid; + } + + /* Check for space character in the fifth position */ + ptr = strchr(buf, ' '); + if (!ptr || ptr != buf + 4) + goto invalid; + + /* Duplicate the string after the space */ + lineobj = strdup(ptr + 1); + if (!lineobj) + continue; + + /* Check for a colon somewhere on the line */ + ptr = strchr(buf, ':'); + if (!ptr) + goto invalid; + + /* Compare the part before colon with the target extension name */ + *ptr = 0; + if (strcmp(buf + 5, extEntry->name)) + goto skip; + + /* Get the opcode for the request, event, or error */ + offset = strtol(buf + 1, &ptr, 10); + if (offset == 0 && ptr == buf + 1) + goto invalid; + + /* Save the strdup result in the registry */ + switch (buf[0]) { + case PROT_REQUEST: + if (extEntry->base) + RegisterRequestName(extEntry->base, offset, lineobj); + else + RegisterRequestName(offset, 0, lineobj); + continue; + case PROT_EVENT: + RegisterEventName(extEntry->eventBase + offset, lineobj); + continue; + case PROT_ERROR: + RegisterErrorName(extEntry->errorBase + offset, lineobj); + continue; + } + + invalid: + LogMessage(X_WARNING, "Invalid line in " FILENAME ", skipping\n"); + skip: + free(lineobj); } } @@ -203,9 +207,9 @@ RegisterResourceName(RESTYPE resource, const char *name) resource &= TypeMask; while (resource >= nresource) { - if (!double_size(&resources, nresource, sizeof(char *))) - return; - nresource = nresource ? nresource * 2 : BASE_SIZE; + if (!double_size(&resources, nresource, sizeof(char *))) + return; + nresource = nresource ? nresource * 2 : BASE_SIZE; } resources[resource] = name; @@ -219,9 +223,9 @@ const char * LookupRequestName(int major, int minor) { if (major >= nmajor) - return XREGISTRY_UNKNOWN; + return XREGISTRY_UNKNOWN; if (minor >= nminor[major]) - return XREGISTRY_UNKNOWN; + return XREGISTRY_UNKNOWN; return requests[major][minor] ? requests[major][minor] : XREGISTRY_UNKNOWN; } @@ -230,18 +234,20 @@ const char * LookupMajorName(int major) { if (major < 128) { - const char *retval; - - if (major >= nmajor) - return XREGISTRY_UNKNOWN; - if (0 >= nminor[major]) - return XREGISTRY_UNKNOWN; - - retval = requests[major][0]; - return retval ? retval + sizeof(CORE) : XREGISTRY_UNKNOWN; - } else { - ExtensionEntry *extEntry = GetExtensionEntry(major); - return extEntry ? extEntry->name : XREGISTRY_UNKNOWN; + const char *retval; + + if (major >= nmajor) + return XREGISTRY_UNKNOWN; + if (0 >= nminor[major]) + return XREGISTRY_UNKNOWN; + + retval = requests[major][0]; + return retval ? retval + sizeof(CORE) : XREGISTRY_UNKNOWN; + } + else { + ExtensionEntry *extEntry = GetExtensionEntry(major); + + return extEntry ? extEntry->name : XREGISTRY_UNKNOWN; } } @@ -250,7 +256,7 @@ LookupEventName(int event) { event &= 127; if (event >= nevent) - return XREGISTRY_UNKNOWN; + return XREGISTRY_UNKNOWN; return events[event] ? events[event] : XREGISTRY_UNKNOWN; } @@ -259,7 +265,7 @@ const char * LookupErrorName(int error) { if (error >= nerror) - return XREGISTRY_UNKNOWN; + return XREGISTRY_UNKNOWN; return errors[error] ? errors[error] : XREGISTRY_UNKNOWN; } @@ -269,7 +275,7 @@ LookupResourceName(RESTYPE resource) { resource &= TypeMask; if (resource >= nresource) - return XREGISTRY_UNKNOWN; + return XREGISTRY_UNKNOWN; return resources[resource] ? resources[resource] : XREGISTRY_UNKNOWN; } @@ -284,19 +290,19 @@ dixResetRegistry(void) /* Free all memory */ while (nmajor--) { - while (nminor[nmajor]) - free(requests[nmajor][--nminor[nmajor]]); - free(requests[nmajor]); + while (nminor[nmajor]) + free(requests[nmajor][--nminor[nmajor]]); + free(requests[nmajor]); } free(requests); free(nminor); while (nevent--) - free(events[nevent]); + free(events[nevent]); free(events); while (nerror--) - free(errors[nerror]); + free(errors[nerror]); free(errors); free(resources); @@ -311,10 +317,11 @@ dixResetRegistry(void) /* Open the protocol file */ if (fh) - fclose(fh); + fclose(fh); fh = fopen(FILENAME, "r"); if (!fh) - LogMessage(X_WARNING, "Failed to open protocol names file " FILENAME "\n"); + LogMessage(X_WARNING, + "Failed to open protocol names file " FILENAME "\n"); /* Add built-in resources */ RegisterResourceName(RT_NONE, "NONE"); @@ -334,4 +341,4 @@ dixResetRegistry(void) RegisterExtensionNames(&extEntry); } -#endif /* XREGISTRY */ +#endif /* XREGISTRY */ |