loader: Remove unused arguments from LoadModule
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. Reviewed-by: Julien Cristau <jcristau@debian.org> Signed-off-by: Adam Jackson <ajax@redhat.com>
This commit is contained in:
parent
ba726ba6a7
commit
8920dca009
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue