Page MenuHomeFreeBSD

D8167.diff
No OneTemporary

D8167.diff

Index: sys/kern/kern_linker.c
===================================================================
--- sys/kern/kern_linker.c
+++ sys/kern/kern_linker.c
@@ -89,7 +89,8 @@
/*
* Find a currently loaded file given its filename.
*/
-static linker_file_t linker_find_file_by_name(const char* _filename);
+#define LFFBN_IGNORE_INCOMPLETE 0x1
+static linker_file_t linker_find_file_by_name(const char* _filename, int flag);
/*
* Find a currently loaded file given its file id.
@@ -397,7 +398,7 @@
return (EPERM);
sx_assert(&kld_sx, SA_XLOCKED);
- lf = linker_find_file_by_name(filename);
+ lf = linker_find_file_by_name(filename, 0);
if (lf) {
KLD_DPF(FILE, ("linker_load_file: file %s is already loaded,"
" incrementing refs\n", filename));
@@ -522,7 +523,7 @@
}
static linker_file_t
-linker_find_file_by_name(const char *filename)
+linker_find_file_by_name(const char *filename, int flag)
{
linker_file_t lf;
char *koname;
@@ -532,9 +533,11 @@
sx_assert(&kld_sx, SA_XLOCKED);
TAILQ_FOREACH(lf, &linker_files, link) {
- if (strcmp(lf->filename, koname) == 0)
- break;
- if (strcmp(lf->filename, filename) == 0)
+ if (strcmp(lf->filename, koname) != 0 &&
+ strcmp(lf->filename, filename) != 0)
+ continue;
+ if ((lf->flags & LINKER_FILE_LINKED) != 0 ||
+ (flag & LFFBN_IGNORE_INCOMPLETE) == 0)
break;
}
free(koname, M_LINKER);
@@ -1150,7 +1153,7 @@
filename = linker_basename(pathname);
sx_xlock(&kld_sx);
- lf = linker_find_file_by_name(filename);
+ lf = linker_find_file_by_name(filename, LFFBN_IGNORE_INCOMPLETE);
if (lf)
td->td_retval[0] = lf->id;
else
@@ -2018,7 +2021,7 @@
* provide different versions of the same modules.
*/
filename = linker_basename(pathname);
- if (linker_find_file_by_name(filename))
+ if (linker_find_file_by_name(filename, 0))
error = EEXIST;
else do {
error = linker_load_file(pathname, &lfdep);

File Metadata

Mime Type
text/plain
Expires
Sat, Dec 27, 9:55 AM (6 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
27302501
Default Alt Text
D8167.diff (1 KB)

Event Timeline