aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Makefile2
-rw-r--r--src/kmodule.c170
2 files changed, 1 insertions, 171 deletions
diff --git a/src/Makefile b/src/Makefile
index 3ae4b3b6..9b984174 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -15,7 +15,7 @@ check: all
./ipcalc-tests
clean:
- rm -f $(PROGS) *.o
+ rm -f $(PROGS) *.o *~
install:
mkdir -p $(ROOT)/bin $(ROOT)/usr/sbin $(ROOT)$(mandir)/man{1,8} $(ROOT)/etc $(ROOT)/lib/udev
diff --git a/src/kmodule.c b/src/kmodule.c
deleted file mode 100644
index 51ca778d..00000000
--- a/src/kmodule.c
+++ /dev/null
@@ -1,170 +0,0 @@
-/* Copyright 2004 Red Hat, Inc.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License, version 2,
- * as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- */
-
-#include <ctype.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <errno.h>
-
-#include <popt.h>
-
-#include <sys/mman.h>
-#include <sys/socket.h>
-#include <sys/types.h>
-#include <sys/un.h>
-#include <sys/utsname.h>
-
-#include <kudzu/kudzu.h>
-
-char *setupFile()
-{
- struct stat sbuf;
- char path[512];
- int fd;
- struct utsname utsbuf;
- char *buf = NULL;
-
- uname(&utsbuf);
- snprintf(path,512,"/lib/modules/%s/modules.dep",utsbuf.release);
- if (!stat(path,&sbuf)) {
- fd = open(path,O_RDONLY);
- buf = mmap(0,sbuf.st_size,PROT_READ,MAP_SHARED,fd,0);
- close(fd);
- }
- return buf;
-}
-
-int isAvailable(char *modulename)
-{
- char mod_name[100];
- static char *buf = NULL;
-
- if (!buf) {
- buf = setupFile();
- if (!buf)
- return 0;
- }
- snprintf(mod_name,100,"/%s.ko:",modulename);
- if (strstr(buf,mod_name))
- return 1;
- snprintf(mod_name,100,"/%s.ko.gz:",modulename);
- if (strstr(buf,mod_name))
- return 1;
- return 0;
-}
-
-void waitForConnection(struct device **devlist)
-{
- int sock, fd, socklen, x;
- struct sockaddr_un addr;
- FILE *tmp;
-
- sock = socket(PF_UNIX, SOCK_STREAM, 0);
- if (sock == -1) return;
- memset(addr.sun_path,'\0',sizeof(addr.sun_path));
- sprintf(addr.sun_path, "akudzu_config_socket");
- addr.sun_family= AF_UNIX;
- addr.sun_path[0] = '\0';
- if (bind(sock, &addr, sizeof(struct sockaddr_un)) == -1)
- return;
- if (listen(sock, 1) == -1)
- return;
- fd = accept(sock, &addr, &socklen);
- if (fd == -1)
- return;
- tmp = fdopen(fd,"w");
- for (x = 0; devlist[x]; x++) {
- devlist[x]->writeDevice(tmp,devlist[x]);
- fflush(tmp);
- }
- fclose(tmp);
- close(sock);
-}
-
-int main(int argc, char **argv)
-{
- char *bus = NULL, *class = NULL;
- int x, rc, isdaemon = 0;
- enum deviceBus probeBus = BUS_UNSPEC & ~BUS_SERIAL;
- enum deviceClass probeClass = CLASS_UNSPEC & ~CLASS_FLOPPY & ~CLASS_HD & ~CLASS_CDROM;
- poptContext context;
- struct device **devs;
- struct poptOption options[] = {
- POPT_AUTOHELP
- { "bus", 'b', POPT_ARG_STRING, &bus, 0,
- "probe only the specified 'bus'",
- NULL
- },
- { "class", 'c', POPT_ARG_STRING, &class, 0,
- "probe only for the specified 'class'",
- NULL
- },
- { "daemon", 'd', POPT_ARG_NONE, &isdaemon, 0,
- NULL, NULL
- },
- { 0, 0, 0, 0, 0, 0 }
- };
-
- context = poptGetContext("kmodule", argc, (const char **)argv, options, 0);
- while ((rc = poptGetNextOpt(context)) > 0) {
- }
- if (( rc < -1)) {
- fprintf(stderr, "%s: %s\n",
- poptBadOption(context, POPT_BADOPTION_NOALIAS),
- poptStrerror(rc));
- exit(-1);
- }
-
- if (bus) {
- for (x=0; bus[x]; x++)
- bus[x] = toupper(bus[x]);
- for (x=0; buses[x].string && strcmp(buses[x].string,bus); x++);
- if (buses[x].string)
- probeBus = buses[x].busType;
- }
- if (class) {
- for (x=0; class[x]; x++)
- class[x] = toupper(class[x]);
- for (x=0; classes[x].string && strcmp(classes[x].string,class); x++);
- if (classes[x].string)
- probeClass = classes[x].classType;
- }
- initializeBusDeviceList(probeBus);
-
- devs = probeDevices(probeClass, probeBus, PROBE_ALL|PROBE_NOLOAD|PROBE_SAFE);
- if (!devs)
- return 0;
- for (x = 0; devs[x]; x++) {
- if (devs[x]->driver && isAvailable(devs[x]->driver)) {
- int i;
-
- for (i = 0; classes[i].classType; i++)
- if (devs[x]->type == classes[i].classType) {
- break;
- }
- printf("%s %s\n",classes[i].string,devs[x]->driver);
- }
- }
- fflush(stdout);
- if (isdaemon) {
- daemon(0,0);
- waitForConnection(devs);
- }
- return 0;
-}