You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
226 lines
5.9 KiB
226 lines
5.9 KiB
diff -ruN devfsd.old/DIETLIBC devfsd/DIETLIBC
|
|
--- devfsd.old/DIETLIBC 1969-12-31 19:00:00.000000000 -0500
|
|
+++ devfsd/DIETLIBC 2003-12-09 14:07:52.668863472 -0500
|
|
@@ -0,0 +1,8 @@
|
|
+To build using dietlibc, run like this:
|
|
+
|
|
+CC="diet gcc" make has_dlopen=0 has_rpcsvc=0
|
|
+
|
|
+It will strip out the stuff that dietlibc doesn't
|
|
+support.
|
|
+
|
|
+
|
|
diff -ruN devfsd.old/GNUmakefile devfsd/GNUmakefile
|
|
--- devfsd.old/GNUmakefile 2003-12-09 12:34:13.000000000 -0500
|
|
+++ devfsd/GNUmakefile 2003-12-09 14:04:14.728995368 -0500
|
|
@@ -8,22 +8,34 @@
|
|
KERNEL_DIR = /usr/src/linux
|
|
endif
|
|
|
|
+has_dlopen := 0
|
|
+has_rpcsvc := 0
|
|
+
|
|
nsl_libs := $(wildcard /lib/libnsl.so.*)
|
|
+
|
|
ifneq ($(nsl_libs),)
|
|
-LIBNSL = $(shell for file in /lib/libnsl.so.[0-9]* ; do echo $$file ; done | sort -t . -n -k 2 | head -1)
|
|
+LIBNSL = $(shell for file in /lib/libnsl.so.[0-9]* ; do echo $$file ; done | sort -t . -n -k 2 | head -n1)
|
|
DEFINES += -DLIBNSL="\"$(LIBNSL)\""
|
|
endif
|
|
|
|
+ifneq ($(has_dlopen),1)
|
|
+DEFINES += -DNO_DLOPEN
|
|
+else
|
|
+LIBS += -ldl
|
|
+endif
|
|
+
|
|
+ifneq ($(has_rpcsvc),1)
|
|
+DEFINES += -DNO_RPCSVC
|
|
+endif
|
|
|
|
all: devfsd rpm.spec
|
|
|
|
-
|
|
OBJECTS = devfsd.o expression.o compat_name.o check_kernel.o
|
|
|
|
CFLAGS = -O2 -I. -I$(KERNEL_DIR)/include -Wall $(CEXTRAS) $(DEFINES)
|
|
|
|
devfsd: $(OBJECTS)
|
|
- $(CC) -O2 -o devfsd $(OBJECTS) $(LDFLAGS) -export-dynamic -ldl
|
|
+ $(CC) -O2 -o devfsd $(OBJECTS) $(LDFLAGS) -export-dynamic $(LIBS)
|
|
|
|
check_kernel.o: check_kernel.c
|
|
$(CC) -fomit-frame-pointer -O2 -c $<
|
|
diff -ruN devfsd.old/devfsd.c devfsd/devfsd.c
|
|
--- devfsd.old/devfsd.c 2003-12-09 12:34:13.000000000 -0500
|
|
+++ devfsd/devfsd.c 2003-12-09 14:05:45.967125064 -0500
|
|
@@ -282,9 +282,13 @@
|
|
#include <signal.h>
|
|
#include <regex.h>
|
|
#include <errno.h>
|
|
+#ifndef NO_DLOPEN
|
|
#include <dlfcn.h>
|
|
+#endif
|
|
+#ifndef NO_RPCSVC
|
|
#include <rpcsvc/ypclnt.h>
|
|
#include <rpcsvc/yp_prot.h>
|
|
+#endif
|
|
#include <karma.h>
|
|
#include "devfsd.h"
|
|
#include "version.h"
|
|
@@ -419,9 +423,15 @@
|
|
static void read_config_file (CONST char *path, flag optional,
|
|
unsigned long *event_mask);
|
|
static void process_config_line (CONST char *line, unsigned long *event_mask);
|
|
+
|
|
+#ifndef NO_DLOPEN
|
|
static void *dlsym_nofail (const char *file, void *handle, char *symbol);
|
|
+#endif
|
|
+
|
|
+#ifndef NO_RPCSVC
|
|
static int process_yp_line (int instatus, char *inkey, int inkeylen,
|
|
char *inval, int invallen, char *indata);
|
|
+#endif
|
|
static void load_libnsl (void);
|
|
static flag do_servicing (int fd, unsigned long event_mask);
|
|
static void service_name (const struct devfsd_notify_struct *info);
|
|
@@ -492,9 +502,11 @@
|
|
{"fd/2", "stderr"},
|
|
{NULL, NULL},
|
|
};
|
|
+#ifndef NO_RPCSVC
|
|
static int (*my_yp_all) (char *domain, char *map,
|
|
struct ypall_callback *callback); /* = NULL */
|
|
static int (*my_yp_get_default_domain) (char **domainptr); /* = NULL */
|
|
+#endif
|
|
static struct event_type
|
|
{
|
|
unsigned int type; /* The DEVFSD_NOTIFY_* value */
|
|
@@ -720,6 +732,7 @@
|
|
[RETURNS] Nothing.
|
|
*/
|
|
{
|
|
+#ifndef NO_RPCSVC
|
|
if (location[0] == '+')
|
|
{
|
|
/* It's a YP map */
|
|
@@ -742,7 +755,8 @@
|
|
SYSLOG (LOG_ERR, "error reading map: \"%s\"\n", location + 1);
|
|
exit (1);
|
|
}
|
|
- read_config_file (location, optional, event_mask);
|
|
+#endif
|
|
+ read_config_file (location, optional, event_mask);
|
|
} /* End Function read_config */
|
|
|
|
static void read_config_file (CONST char *path, flag optional,
|
|
@@ -919,6 +933,7 @@
|
|
}
|
|
new->u.execute.argv[num_args] = NULL;
|
|
}
|
|
+#ifndef NO_DLOPEN
|
|
else if ( (strcasecmp (what, "MFUNCTION") == 0) ||
|
|
(strcasecmp (what, "CFUNCTION") == 0) )
|
|
{
|
|
@@ -950,6 +965,7 @@
|
|
}
|
|
new->u.function.argv[num_args] = NULL;
|
|
}
|
|
+#endif
|
|
else if (strcasecmp (what, "COPY") == 0)
|
|
{
|
|
new->action.what = AC_COPY;
|
|
@@ -1001,6 +1017,7 @@
|
|
last_config = new;
|
|
} /* End Function process_config_line */
|
|
|
|
+#ifndef NO_DLOPEN
|
|
static void *dlsym_nofail (const char *file, void *handle, char *symbol)
|
|
{
|
|
void *result = dlsym (handle, symbol);
|
|
@@ -1011,9 +1028,11 @@
|
|
}
|
|
return (result);
|
|
} /* End Function dlsym_nofail */
|
|
+#endif
|
|
|
|
static void load_libnsl (void)
|
|
{
|
|
+#ifndef NO_RPCSVC
|
|
#ifdef LIBNSL /* It comes from a shared object */
|
|
void *libnsl_handle;
|
|
|
|
@@ -1031,8 +1050,10 @@
|
|
my_yp_all = yp_all;
|
|
my_yp_get_default_domain = yp_get_default_domain;
|
|
#endif
|
|
+#endif
|
|
} /* End Function load_libnsl */
|
|
|
|
+#ifndef NO_RPCSVC
|
|
static int process_yp_line (int instatus, char *inkey, int inkeylen,
|
|
char *inval, int invallen, char *indata)
|
|
{
|
|
@@ -1040,6 +1061,7 @@
|
|
if (invallen > 0) process_config_line (inval, (unsigned long *) indata);
|
|
return (0);
|
|
} /* End Function process_yp_line */
|
|
+#endif
|
|
|
|
static flag do_servicing (int fd, unsigned long event_mask)
|
|
/* [SUMMARY] Service devfs changes until a signal is received.
|
|
@@ -1232,6 +1254,7 @@
|
|
|
|
if (first_time)
|
|
{
|
|
+#ifndef NO_DLOPEN
|
|
void *lib;
|
|
|
|
first_time = FALSE;
|
|
@@ -1242,7 +1265,10 @@
|
|
}
|
|
else if (trace_level > 1)
|
|
fprintf (stderr, "/lib/modutils.so load failure: %s\n",dlerror() );
|
|
- }
|
|
+#else
|
|
+ fprintf(stderr, "dlopen() not supported in this build");
|
|
+#endif
|
|
+ }
|
|
argv[0] = "/sbin/modprobe";
|
|
argv[1] = "-k";
|
|
argv[2] = "-C";
|
|
@@ -1746,6 +1772,7 @@
|
|
}
|
|
first_config = NULL;
|
|
last_config = NULL;
|
|
+#ifndef NO_DLOPEN
|
|
for (so_entry = first_so; so_entry != NULL; so_entry = next)
|
|
{
|
|
next = so_entry->next;
|
|
@@ -1753,6 +1780,7 @@
|
|
if (so_entry->handle != RTLD_DEFAULT) dlclose (so_entry->handle);
|
|
free (so_entry);
|
|
}
|
|
+#endif
|
|
first_so = NULL;
|
|
} /* End Function free_config */
|
|
|
|
@@ -2055,6 +2083,7 @@
|
|
[RETURNS] A pointer to the object on success, else NULL.
|
|
*/
|
|
{
|
|
+#ifndef NO_DLOPEN
|
|
struct shared_object *so;
|
|
|
|
for (so = first_so; so != NULL; so = so->next)
|
|
@@ -2085,6 +2114,9 @@
|
|
so->next = first_so;
|
|
first_so = so;
|
|
return (so);
|
|
+#else
|
|
+ return(NULL);
|
|
+#endif
|
|
} /* End Function get_shared_object */
|
|
|
|
static flag expand_expression(char *output, unsigned int outsize,
|