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 #include #include +#ifndef NO_DLOPEN #include +#endif +#ifndef NO_RPCSVC #include #include +#endif #include #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,