1/*- 2 * Copyright (c) 2006 Dag-Erling Co�dan Sm�rgrav 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 10 unchanged lines hidden (view full) --- 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * |
27 * $FreeBSD: head/lib/libutil/kld.c 158907 2006-05-25 04:01:04Z delphij $ |
28 */ 29 30#include <sys/param.h> 31#include <sys/linker.h> 32#include <sys/module.h> 33 34#include <errno.h> |
35#include <libutil.h> 36#include <string.h> |
37 38int 39kld_isloaded(const char *name) 40{ 41 struct kld_file_stat fstat; 42 struct module_stat mstat; 43 const char *ko; 44 int fid, mid; 45 46 for (fid = kldnext(0); fid > 0; fid = kldnext(fid)) { 47 fstat.version = sizeof(fstat); 48 if (kldstat(fid, &fstat) != 0) 49 continue; 50 /* check if the file name matches the supplied name */ 51 if (strcmp(fstat.name, name) == 0) 52 return (1); 53 /* strip .ko and try again */ 54 if ((ko = strstr(fstat.name, ".ko")) != NULL && |
55 strlen(name) == (size_t)(ko - fstat.name) && |
56 strncmp(fstat.name, name, ko - fstat.name) == 0) 57 return (1); 58 /* look for a matching module within the file */ 59 for (mid = kldfirstmod(fid); mid > 0; mid = modfnext(mid)) { 60 mstat.version = sizeof(mstat); 61 if (modstat(mid, &mstat) != 0) 62 continue; 63 if (strcmp(mstat.name, name) == 0) --- 13 unchanged lines hidden --- |