Nobody was ever calling this with a non-null argument for subdir list or pattern list. Having done this, InitSubdirs is only ever called with a NULL argument, so it's really just a complicated way of duplicating the default list; we can remove that and just walk the list directly.
The minor error code was only ever used to distinguish among two cases of LDR_BADUSAGE. Whatever. Signed-off-by: Adam Jackson <a...@redhat.com> --- hw/xfree86/common/xf86Helper.c | 6 +- hw/xfree86/common/xf86Init.c | 6 +- hw/xfree86/doc/ddxDesign.xml | 49 +------------ hw/xfree86/loader/loader.c | 4 +- hw/xfree86/loader/loader.h | 2 +- hw/xfree86/loader/loaderProcs.h | 4 +- hw/xfree86/loader/loadmod.c | 149 +++------------------------------------- 7 files changed, 21 insertions(+), 199 deletions(-) diff --git a/hw/xfree86/common/xf86Helper.c b/hw/xfree86/common/xf86Helper.c index b464864..7d6a374 100644 --- a/hw/xfree86/common/xf86Helper.c +++ b/hw/xfree86/common/xf86Helper.c @@ -1590,7 +1590,7 @@ xf86LoadSubModule(ScrnInfoPtr pScrn, const char *name) void * xf86LoadOneModule(const char *name, void *opt) { - int errmaj, errmin; + int errmaj; char *Name; void *mod; @@ -1608,9 +1608,9 @@ xf86LoadOneModule(const char *name, void *opt) return NULL; } - mod = LoadModule(Name, NULL, NULL, opt, NULL, &errmaj, &errmin); + mod = LoadModule(Name, opt, NULL, &errmaj); if (!mod) - LoaderErrorMsg(NULL, Name, errmaj, errmin); + LoaderErrorMsg(NULL, Name, errmaj, 0); free(Name); return mod; } diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c index f6f77c0..e61fe66 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -1473,7 +1473,7 @@ ddxUseMsg(void) Bool xf86LoadModules(const char **list, void **optlist) { - int errmaj, errmin; + int errmaj; void *opt; int i; char *name; @@ -1503,8 +1503,8 @@ xf86LoadModules(const char **list, void **optlist) else opt = NULL; - if (!LoadModule(name, NULL, NULL, opt, NULL, &errmaj, &errmin)) { - LoaderErrorMsg(NULL, name, errmaj, errmin); + if (!LoadModule(name, opt, NULL, &errmaj)) { + LoaderErrorMsg(NULL, name, errmaj, 0); failed = TRUE; } free(name); diff --git a/hw/xfree86/doc/ddxDesign.xml b/hw/xfree86/doc/ddxDesign.xml index 05ee042..89a85a4 100644 --- a/hw/xfree86/doc/ddxDesign.xml +++ b/hw/xfree86/doc/ddxDesign.xml @@ -5210,10 +5210,8 @@ XFree86 common layer. <blockquote><para> <programlisting> - pointer LoadModule(const char *module, - const char **subdirlist, const char **patternlist, - pointer options, const XF86ModReqInfo * modreq, - int *errmaj, int *errmin); + pointer LoadModule(const char *module, pointer options, + const XF86ModReqInfo * modreq, int *errmaj); </programlisting> <blockquote><para> The <function>LoadModule()</function> function loads the module called @@ -5227,42 +5225,6 @@ XFree86 common layer. <variablelist> - - <varlistentry> - <term><parameter>subdirlist</parameter></term> - <listitem><para> - An optional <constant>NULL</constant> terminated list of - subdirectories to search. When <constant>NULL</constant>, - the default built-in list is used (refer to - <varname>stdSubdirs</varname> in <filename>loadmod.c</filename>). - The default list is also substituted for entries in - <parameter>subdirlist</parameter> with the value - <constant>DEFAULT_LIST</constant>. This makes is possible - to augment the default list instead of replacing it. - Subdir elements must be relative, and must not contain - <literal remap="tt">".."</literal>. If any violate this requirement, - the load fails. - </para></listitem></varlistentry> - - - <varlistentry> - <term><parameter>patternlist</parameter></term> - <listitem><para> - An optional <constant>NULL</constant> terminated list of - POSIX regular expressions used to connect module - filenames with canonical module names. Each regex - should contain exactly one subexpression that corresponds - to the canonical module name. When <constant>NULL</constant>, - the default built-in list is used (refer to - <varname>stdPatterns</varname> in - <filename>loadmod.c</filename>). The default list is also - substituted for entries in <parameter>patternlist</parameter> - with the value <constant>DEFAULT_LIST</constant>. This - makes it possible to augment the default list instead - of replacing it. - </para></listitem></varlistentry> - - <varlistentry> <term><parameter>options</parameter></term> <listitem><para> @@ -5371,13 +5333,6 @@ typedef struct { <function>LoadModule()</function> fails. </para></listitem></varlistentry> - <varlistentry> - <term><parameter>errmin</parameter></term> - <listitem><para> - Like <parameter>errmaj</parameter>, but for the minor part - of the error code. - </para></listitem></varlistentry> - </variablelist> </para></blockquote> diff --git a/hw/xfree86/loader/loader.c b/hw/xfree86/loader/loader.c index fded87b..86629b2 100644 --- a/hw/xfree86/loader/loader.c +++ b/hw/xfree86/loader/loader.c @@ -89,7 +89,7 @@ LoaderInit(void) /* Public Interface to the loader. */ void * -LoaderOpen(const char *module, int *errmaj, int *errmin) +LoaderOpen(const char *module, int *errmaj) { void *ret; @@ -103,8 +103,6 @@ LoaderOpen(const char *module, int *errmaj, int *errmin) LogMessage(X_ERROR, "Failed to load %s: %s\n", module, dlerror()); if (errmaj) *errmaj = LDR_NOLOAD; - if (errmin) - *errmin = LDR_NOLOAD; return NULL; } diff --git a/hw/xfree86/loader/loader.h b/hw/xfree86/loader/loader.h index c89c641..5a2fe6c 100644 --- a/hw/xfree86/loader/loader.h +++ b/hw/xfree86/loader/loader.h @@ -71,7 +71,7 @@ extern const ModuleVersions LoaderVersionInfo; extern unsigned long LoaderOptions; /* Internal Functions */ -void *LoaderOpen(const char *, int *, int *); +void *LoaderOpen(const char *, int *); void *LoaderSymbolFromModule(void *, const char *); #endif /* _LOADER_H */ diff --git a/hw/xfree86/loader/loaderProcs.h b/hw/xfree86/loader/loaderProcs.h index 65ca2ec..84ed103 100644 --- a/hw/xfree86/loader/loaderProcs.h +++ b/hw/xfree86/loader/loaderProcs.h @@ -72,9 +72,7 @@ typedef struct module_desc { void LoaderInit(void); -ModuleDescPtr LoadModule(const char *, const char **, - const char **, void *, const XF86ModReqInfo *, - int *, int *); +ModuleDescPtr LoadModule(const char *, void *, const XF86ModReqInfo *, int *); ModuleDescPtr DuplicateModule(ModuleDescPtr mod, ModuleDescPtr parent); void UnloadDriver(ModuleDescPtr); void LoaderSetPath(const char *path); diff --git a/hw/xfree86/loader/loadmod.c b/hw/xfree86/loader/loadmod.c index ce10974..fc982c7 100644 --- a/hw/xfree86/loader/loadmod.c +++ b/hw/xfree86/loader/loadmod.c @@ -67,7 +67,7 @@ typedef struct _pattern { } PatternRec, *PatternPtr; /* Prototypes for static functions */ -static char *FindModule(const char *, const char *, const char **, PatternPtr); +static char *FindModule(const char *, const char *, PatternPtr); static Bool CheckVersion(const char *, XF86ModuleVersionInfo *, const XF86ModReqInfo *); static char *LoaderGetCanonicalName(const char *, PatternPtr); @@ -261,99 +261,6 @@ FreePatterns(PatternPtr patterns) free(patterns); } -static const char ** -InitSubdirs(const char **subdirlist) -{ - int i; - const char **tmp_subdirlist = NULL; - char **subdirs = NULL; - const char **s, **stmp = NULL; - int len; - Bool indefault; - - if (subdirlist == NULL) { - subdirlist = tmp_subdirlist = malloc(2 * sizeof(char *)); - if (subdirlist == NULL) - return NULL; - subdirlist[0] = DEFAULT_LIST; - subdirlist[1] = NULL; - } - - { - /* Count number of entries and check for invalid paths */ - for (i = 0, s = subdirlist; *s; i++, s++) { - if (*s == DEFAULT_LIST) { - i += sizeof(stdSubdirs) / sizeof(stdSubdirs[0]) - 1 - 1; - } - else { - /* - * Path validity check. Don't allow absolute paths, or - * paths containing "..". To catch absolute paths on - * platforms that use driver letters, don't allow the ':' - * character to appear at all. - */ - if (**s == '/' || **s == '\\' || strchr(*s, ':') || - strstr(*s, "..")) { - LogMessage(X_ERROR, "InitSubdirs: Bad subdir \"%s\"\n", *s); - free(tmp_subdirlist); - return NULL; - } - } - } - subdirs = xallocarray(i * 2 + 1, sizeof(char *)); - if (!subdirs) { - free(tmp_subdirlist); - return NULL; - } - i = 0; - s = subdirlist; - indefault = FALSE; - while (*s) { - if (*s == DEFAULT_LIST) { - /* Divert to the default list */ - indefault = TRUE; - stmp = ++s; - s = stdSubdirs; - } - len = strlen(*s); - if (**s && (*s)[len - 1] != '/') { - len++; - } - if (!(subdirs[i] = malloc(len))) { - while (--i >= 0) - free(subdirs[i]); - free(subdirs); - free(tmp_subdirlist); - return NULL; - } - /* path as given */ - subdirs[i] = strdup(*s); - i++; - s++; - if (indefault && !s) { - /* revert back to the main list */ - indefault = FALSE; - s = stmp; - } - } - subdirs[i] = NULL; - } - free(tmp_subdirlist); - return (const char **) subdirs; -} - -static void -FreeSubdirs(const char **subdirs) -{ - const char **s; - - if (subdirs) { - for (s = subdirs; *s; s++) - free((char *) *s); - free(subdirs); - } -} - static char * FindModuleInSubdir(const char *dirpath, const char *module) { @@ -418,22 +325,16 @@ FindModuleInSubdir(const char *dirpath, const char *module) } static char * -FindModule(const char *module, const char *dirname, const char **subdirlist, - PatternPtr patterns) +FindModule(const char *module, const char *dirname, PatternPtr patterns) { char buf[PATH_MAX + 1]; char *name = NULL; - const char **subdirs = NULL; const char **s; if (strlen(dirname) > PATH_MAX) return NULL; - subdirs = InitSubdirs(subdirlist); - if (!subdirs) - return NULL; - - for (s = subdirs; *s; s++) { + for (s = stdSubdirs; *s; s++) { if ((strlen(dirname) + strlen(*s)) > PATH_MAX) continue; strcpy(buf, dirname); @@ -442,8 +343,6 @@ FindModule(const char *module, const char *dirname, const char **subdirlist, break; } - FreeSubdirs(subdirs); - return name; } @@ -693,8 +592,7 @@ LoadSubModule(void *_parent, const char *module, return NULL; } - submod = LoadModule(module, subdirlist, patternlist, options, - modreq, errmaj, errmin); + submod = LoadModule(module, options, modreq, errmaj); if (submod && submod != (ModuleDescPtr) 1) { parent->child = AddSibling(parent->child, submod); submod->parent = parent; @@ -763,15 +661,6 @@ static const char *compiled_in_modules[] = { * module The module name. Normally this is not a filename but the * module's "canonical name. A full pathname is, however, * also accepted. - * subdirlist A NULL terminated list of subdirectories to search. When - * NULL, the default "stdSubdirs" list is used. The default - * list is also substituted for entries with value DEFAULT_LIST. - * patternlist A NULL terminated list of regular expressions used to find - * module filenames. Each regex should contain exactly one - * subexpression that corresponds to the canonical module name. - * When NULL, the default "stdPatterns" list is used. The - * default list is also substituted for entries with value - * DEFAULT_LIST. * options A NULL terminated list of Options that are passed to the * module's SetupProc function. * modreq An optional XF86ModReqInfo* containing @@ -790,13 +679,11 @@ static const char *compiled_in_modules[] = { * string * "don't care" values are ~0 for numbers, and NULL for strings * errmaj Major error return. - * errmin Minor error return. * */ ModuleDescPtr -LoadModule(const char *module, const char **subdirlist, - const char **patternlist, void *options, - const XF86ModReqInfo * modreq, int *errmaj, int *errmin) +LoadModule(const char *module, void *options, const XF86ModReqInfo *modreq, + int *errmaj) { XF86ModuleData *initdata = NULL; char **pathlist = NULL; @@ -812,7 +699,7 @@ LoadModule(const char *module, const char **subdirlist, LogMessageVerb(X_INFO, 3, "LoadModule: \"%s\"", module); - patterns = InitPatterns(patternlist); + patterns = InitPatterns(NULL); name = LoaderGetCanonicalName(module, patterns); noncanonical = (name && strcmp(module, name) != 0); if (noncanonical) { @@ -837,16 +724,12 @@ LoadModule(const char *module, const char **subdirlist, if (!name) { if (errmaj) *errmaj = LDR_BADUSAGE; - if (errmin) - *errmin = 0; goto LoadModule_fail; } ret = NewModuleDesc(name); if (!ret) { if (errmaj) *errmaj = LDR_NOMEM; - if (errmin) - *errmin = 0; goto LoadModule_fail; } @@ -855,8 +738,6 @@ LoadModule(const char *module, const char **subdirlist, /* This could be a malloc failure too */ if (errmaj) *errmaj = LDR_BADUSAGE; - if (errmin) - *errmin = 1; goto LoadModule_fail; } @@ -868,7 +749,7 @@ LoadModule(const char *module, const char **subdirlist, found = xstrdup(module); path_elem = pathlist; while (!found && *path_elem != NULL) { - found = FindModule(m, *path_elem, subdirlist, patterns); + found = FindModule(m, *path_elem, patterns); path_elem++; /* * When the module name isn't the canonical name, search for the @@ -887,11 +768,9 @@ LoadModule(const char *module, const char **subdirlist, LogMessage(X_WARNING, "Warning, couldn't open module %s\n", module); if (errmaj) *errmaj = LDR_NOENT; - if (errmin) - *errmin = 0; goto LoadModule_fail; } - ret->handle = LoaderOpen(found, errmaj, errmin); + ret->handle = LoaderOpen(found, errmaj); if (ret->handle == NULL) goto LoadModule_fail; ret->path = strdup(found); @@ -909,8 +788,6 @@ LoadModule(const char *module, const char **subdirlist, p = NULL; if (errmaj) *errmaj = LDR_NOMEM; - if (errmin) - *errmin = 0; goto LoadModule_fail; } initdata = LoaderSymbolFromModule(ret->handle, p); @@ -927,8 +804,6 @@ LoadModule(const char *module, const char **subdirlist, if (!CheckVersion(module, vers, modreq)) { if (errmaj) *errmaj = LDR_MISMATCH; - if (errmin) - *errmin = 0; goto LoadModule_fail; } } @@ -937,8 +812,6 @@ LoadModule(const char *module, const char **subdirlist, " version information\n", module); if (errmaj) *errmaj = LDR_INVALID; - if (errmin) - *errmin = 0; goto LoadModule_fail; } if (setup) @@ -953,12 +826,10 @@ LoadModule(const char *module, const char **subdirlist, "data object.\n", module, p); if (errmaj) *errmaj = LDR_INVALID; - if (errmin) - *errmin = 0; goto LoadModule_fail; } if (ret->SetupProc) { - ret->TearDownData = ret->SetupProc(ret, options, errmaj, errmin); + ret->TearDownData = ret->SetupProc(ret, options, errmaj, NULL); if (!ret->TearDownData) { goto LoadModule_fail; } -- 2.9.3 _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: https://lists.x.org/mailman/listinfo/xorg-devel