亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? modprobe.c

?? GCC資料大全
?? C
?? 第 1 頁 / 共 3 頁
字號:
/* modprobe.c: insert a module into the kernel, intelligently.    Copyright (C) 2001  Rusty Russell.    Copyright (C) 2002, 2003  Rusty Russell, IBM Corporation.    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    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*/#define _GNU_SOURCE /* asprintf */#include <sys/utsname.h>#include <sys/types.h>#include <sys/stat.h>#include <sys/mman.h>#include <fcntl.h>#include <stdarg.h>#include <stdio.h>#include <stdlib.h>#include <ctype.h>#include <string.h>#include <errno.h>#include <unistd.h>#include <dirent.h>#include <limits.h>#include <elf.h>#include <getopt.h>#include <fnmatch.h>#include <asm/unistd.h>#include <sys/wait.h>#include <syslog.h>#define streq(a,b) (strcmp((a),(b)) == 0)#include "zlibsupport.h"#include "list.h"#include "backwards_compat.c"extern long init_module(void *, unsigned long, const char *);extern long delete_module(const char *, unsigned int);struct module {	struct list_head list;	char *modname;	char filename[0];};#ifndef MODULE_DIR#define MODULE_DIR "/lib/modules"#endiftypedef void (*errfn_t)(const char *fmt, ...);/* Do we use syslog or stderr for messages? */static int log;static void message(const char *prefix, const char *fmt, va_list *arglist){	char *buf, *buf2;	vasprintf(&buf, fmt, *arglist);	asprintf(&buf2, "%s%s", prefix, buf);	if (log)		syslog(LOG_NOTICE, buf2);	else		fprintf(stderr, "%s", buf2);	free(buf2);	free(buf);}static void warn(const char *fmt, ...){	va_list arglist;	va_start(arglist, fmt);	message("WARNING: ", fmt, &arglist);	va_end(arglist);}static void fatal(const char *fmt, ...){	va_list arglist;	va_start(arglist, fmt);	message("FATAL: ", fmt, &arglist);	va_end(arglist);	exit(1);}static void grammar(const char *cmd, const char *filename, unsigned int line){	warn("%s line %u: ignoring bad line starting with '%s'\n",	     filename, line, cmd);}static void *do_nofail(void *ptr, const char *file, int line, const char *expr){	if (!ptr) {		fatal("Memory allocation failure %s line %d: %s.\n",		      file, line, expr);	}	return ptr;}#define NOFAIL(ptr)	do_nofail((ptr), __FILE__, __LINE__, #ptr)static void print_usage(const char *progname){	fprintf(stderr,		"Usage: %s [-v] [-V] [-C config-file] [-n] [-i] [-q] [-o <modname>] <modname> [parameters...]\n"		"%s -r [-n] [-i] [-v] <modulename> ...\n"		"%s -l -t <dirname> [ -a <modulename> ...]\n",		progname, progname, progname);	exit(1);}static int fgetc_wrapped(FILE *file, unsigned int *linenum){	for (;;) {	  	int ch = fgetc(file);		if (ch != '\\')			return ch;		ch = fgetc(file);		if (ch != '\n')			return ch;		if (linenum)			(*linenum)++;	}}static char *getline_wrapped(FILE *file, unsigned int *linenum){	int size = 1024;	int i = 0;	char *buf = NOFAIL(malloc(size));	for(;;) {		int ch = fgetc_wrapped(file, linenum);		if (i == size) {			size *= 2;			buf = NOFAIL(realloc(buf, size));		}		if (ch < 0 && i == 0) {			free(buf);			return NULL;		}		if (ch < 0 || ch == '\n') {			if (linenum)				(*linenum)++;			buf[i] = '\0';			return NOFAIL(realloc(buf, i+1));		}		buf[i++] = ch;	}}static struct module *find_module(const char *filename, struct list_head *list){	struct module *i;	list_for_each_entry(i, list, list) {		if (strcmp(i->filename, filename) == 0)			return i;	}	return NULL;}/* Convert filename to the module name.  Works if filename == modname, too. */static void filename2modname(char *modname, const char *filename){	const char *afterslash;	unsigned int i;	afterslash = strrchr(filename, '/');	if (!afterslash)		afterslash = filename;	else		afterslash++;	/* Convert to underscores, stop at first . */	for (i = 0; afterslash[i] && afterslash[i] != '.'; i++) {		if (afterslash[i] == '-')			modname[i] = '_';		else			modname[i] = afterslash[i];	}	modname[i] = '\0';}static void add_module(char *filename, int namelen, struct list_head *list){	struct module *mod;	/* If it's a duplicate: move it to the end, so it gets	   inserted where it is *first* required. */	mod = find_module(filename, list);	if (mod)		list_del(&mod->list);	else {		/* No match.  Create a new module. */		mod = NOFAIL(malloc(sizeof(struct module) + namelen + 1));		memcpy(mod->filename, filename, namelen);		mod->filename[namelen] = '\0';		mod->modname = NOFAIL(malloc(namelen + 1));		filename2modname(mod->modname, mod->filename);	}	list_add_tail(&mod->list, list);}/* Compare len chars of a to b, with _ and - equivalent. */static int modname_equal(const char *a, const char *b, unsigned int len){	unsigned int i;	if (strlen(b) != len)		return 0;	for (i = 0; i < len; i++) {		if ((a[i] == '_' || a[i] == '-')		    && (b[i] == '_' || b[i] == '-'))			continue;		if (a[i] != b[i])			return 0;	}	return 1;}/* Fills in list of modules if this is the line we want. */static int add_modules_dep_line(char *line,				const char *name,				struct list_head *list){	char *ptr;	int len;	char *modname;	/* Ignore lines without : or which start with a # */	ptr = index(line, ':');	if (ptr == NULL || line[strspn(line, "\t ")] == '#')		return 0;	/* Is this the module we are looking for? */	*ptr = '\0';	if (strrchr(line, '/'))		modname = strrchr(line, '/') + 1;	else		modname = line;	len = strlen(modname);	if (strchr(modname, '.'))		len = strchr(modname, '.') - modname;	if (!modname_equal(modname, name, len))		return 0;	/* Create the list. */	add_module(line, ptr - line, list);	ptr++;	for(;;) {		char *dep_start;		ptr += strspn(ptr, " \t");		if (*ptr == '\0')			break;		dep_start = ptr;		ptr += strcspn(ptr, " \t");		add_module(dep_start, ptr - dep_start, list);	}	return 1;}static void read_depends(const char *dirname,			 const char *start_name,			 struct list_head *list){	char *modules_dep_name;	char *line;	FILE *modules_dep;	int done = 0;	asprintf(&modules_dep_name, "%s/%s", dirname, "modules.dep");	modules_dep = fopen(modules_dep_name, "r");	if (!modules_dep)		fatal("Could not load %s: %s\n",		      modules_dep_name, strerror(errno));	/* Stop at first line, as we can have duplicates (eg. symlinks           from boot/ */	while (!done && (line = getline_wrapped(modules_dep, NULL)) != NULL) {		done = add_modules_dep_line(line, start_name, list);		free(line);	}	fclose(modules_dep);	free(modules_dep_name);}/* We use error numbers in a loose translation... */static const char *insert_moderror(int err){	switch (err) {	case ENOEXEC:		return "Invalid module format";	case ENOENT:		return "Unknown symbol in module, or unknown parameter (see dmesg)";	case ENOSYS:		return "Kernel does not have module support";	default:		return strerror(err);	}}static const char *remove_moderror(int err){	switch (err) {	case ENOENT:		return "No such module";	case ENOSYS:		return "Kernel does not have module unloading support";	default:		return strerror(err);	}}/* Is module in /proc/modules?  If so, fill in usecount if not NULL.    0 means no, 1 means yes, -1 means unknown. */static int module_in_kernel(const char *modname, int *usecount){	FILE *proc_modules;	char *line;	/* Might not be mounted yet.  Don't fail. */	proc_modules = fopen("/proc/modules", "r");	if (!proc_modules)		return -1;	while ((line = getline_wrapped(proc_modules, NULL)) != NULL) {		char *entry = strtok(line, " \n");		if (entry && strcmp(entry, modname) == 0) {			/* If it exists, usecount is the third entry. */			if (usecount) {				entry = strtok(NULL, " \n");				if (entry				    && (entry = strtok(NULL, " \n")) != NULL)					*usecount = atoi(entry);			}			free(line);			fclose(proc_modules);			return 1;		}		free(line);	}	fclose(proc_modules);	return 0;}static void replace_modname(struct module *module,			    void *mem, unsigned long len,			    const char *oldname, const char *newname){	char *p;	/* 64 - sizeof(unsigned long) - 1 */	if (strlen(newname) > 55)		fatal("New name %s is too long\n", newname);	/* Find where it is in the module structure.  Don't assume layout! */	for (p = mem; p < (char *)mem + len - strlen(oldname); p++) {		if (memcmp(p, oldname, strlen(oldname)) == 0) {			strcpy(p, newname);			return;		}	}	warn("Could not find old name in %s to replace!\n", module->filename);}static void *get_section32(void *file,			   unsigned long size,			   const char *name,			   unsigned long *secsize){	Elf32_Ehdr *hdr = file;	Elf32_Shdr *sechdrs = file + hdr->e_shoff;	const char *secnames;	unsigned int i;	/* Too short? */	if (size < sizeof(*hdr))		return NULL;	if (size < hdr->e_shoff + hdr->e_shnum * sizeof(sechdrs[0]))		return NULL;	if (size < sechdrs[hdr->e_shstrndx].sh_offset)		return NULL;			secnames = file + sechdrs[hdr->e_shstrndx].sh_offset;	for (i = 1; i < hdr->e_shnum; i++)		if (strcmp(secnames + sechdrs[i].sh_name, name) == 0) {			*secsize = sechdrs[i].sh_size;			return file + sechdrs[i].sh_offset;		}	return NULL;}static void *get_section64(void *file,			   unsigned long size,			   const char *name,			   unsigned long *secsize){	Elf64_Ehdr *hdr = file;	Elf64_Shdr *sechdrs = file + hdr->e_shoff;	const char *secnames;	unsigned int i;	/* Too short? */	if (size < sizeof(*hdr))		return NULL;	if (size < hdr->e_shoff + hdr->e_shnum * sizeof(sechdrs[0]))		return NULL;	if (size < sechdrs[hdr->e_shstrndx].sh_offset)		return NULL;			secnames = file + sechdrs[hdr->e_shstrndx].sh_offset;	for (i = 1; i < hdr->e_shnum; i++)		if (strcmp(secnames + sechdrs[i].sh_name, name) == 0) {			*secsize = sechdrs[i].sh_size;			return file + sechdrs[i].sh_offset;		}	return NULL;}static int elf_ident(void *mod, unsigned long size){	/* "\177ELF" <byte> where byte = 001 for 32-bit, 002 for 64 */	char *ident = mod;	if (size < EI_CLASS || memcmp(mod, ELFMAG, SELFMAG) != 0)		return ELFCLASSNONE;	return ident[EI_CLASS];}static void *get_section(void *file,			 unsigned long size,			 const char *name,			 unsigned long *secsize){	switch (elf_ident(file, size)) {

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
色狠狠色狠狠综合| 色久优优欧美色久优优| 成人污视频在线观看| 99国产精品国产精品久久| 欧美专区亚洲专区| 欧美影视一区在线| 日韩视频在线你懂得| 国产精品久久久久影视| 亚洲综合色丁香婷婷六月图片| 欧美一区二区三区婷婷月色| 欧美成人女星排行榜| 在线观看91精品国产麻豆| 精品国产乱码久久久久久老虎| 欧美日韩国产另类一区| 欧美大片在线观看| 亚洲美女屁股眼交| 日本伊人色综合网| 成人97人人超碰人人99| 91国在线观看| 亚洲精品一区二区三区蜜桃下载 | 欧美日韩国产免费一区二区| 精品美女一区二区| 一级中文字幕一区二区| 国产一区二区三区免费| 一本久道久久综合中文字幕| 精品欧美一区二区在线观看| 亚洲精品免费在线播放| 蜜臀av国产精品久久久久| 色婷婷狠狠综合| 亚洲国产精品国自产拍av| 国产精品综合视频| 日韩丝袜美女视频| 久久精品国产精品亚洲红杏| 一本久久精品一区二区| 久久久精品国产免大香伊| 亚洲成人av电影| 在线观看日韩精品| 天天色图综合网| 天堂成人国产精品一区| 91福利精品视频| 亚洲欧美日韩国产综合在线| 成人激情免费电影网址| 国产日韩欧美高清在线| 激情丁香综合五月| 欧美一二三区在线| 国产一区二区三区观看| 久久久www成人免费无遮挡大片| 免费成人在线影院| 欧美va天堂va视频va在线| 奇米一区二区三区av| 欧美精品一区二| 国产suv精品一区二区三区| 亚洲欧洲另类国产综合| 欧美日韩精品一区二区三区四区| 亚洲国产成人av网| 久久精品亚洲精品国产欧美| 丁香啪啪综合成人亚洲小说| 中文字幕在线免费不卡| 欧美无人高清视频在线观看| 午夜精品久久久久久久99水蜜桃| 日韩免费看的电影| 91在线精品一区二区| 秋霞电影一区二区| 国产精品第五页| 欧美videos中文字幕| 99精品视频在线免费观看| 午夜欧美在线一二页| 国产日本欧美一区二区| 这里只有精品免费| 91在线云播放| 福利电影一区二区| 久久精品国产澳门| 一区二区免费看| 亚洲黄色av一区| 亚洲欧美二区三区| 18成人在线观看| 国产清纯在线一区二区www| 中文字幕成人在线观看| 一区二区三区国产精品| 卡一卡二国产精品| 丁香亚洲综合激情啪啪综合| 五月天欧美精品| 粉嫩绯色av一区二区在线观看| 播五月开心婷婷综合| 91精品在线一区二区| 国产精品―色哟哟| 麻豆精品在线播放| 日本乱人伦aⅴ精品| 久久色.com| 日韩综合一区二区| 91小宝寻花一区二区三区| 欧美一区二区成人6969| aaa亚洲精品一二三区| 蜜桃一区二区三区四区| 精品一区二区综合| a亚洲天堂av| 欧美人与性动xxxx| www亚洲一区| 中文字幕亚洲一区二区va在线| 一区二区三区视频在线观看| 日韩在线一二三区| 成人国产精品免费观看视频| 菠萝蜜视频在线观看一区| 波多野洁衣一区| 91精品国产综合久久香蕉麻豆| 日韩美女视频在线| 国产精品成人一区二区艾草| 亚洲一区二区欧美日韩| 国产主播一区二区三区| 欧美无砖砖区免费| 中文字幕国产一区二区| 蜜桃一区二区三区在线| 日本韩国一区二区三区| 国产喷白浆一区二区三区| 日韩1区2区3区| 欧洲色大大久久| 亚洲国产精品黑人久久久| 久久机这里只有精品| 欧美精品久久99久久在免费线 | 日韩在线一区二区| 一本一道综合狠狠老| 国产网站一区二区| 久久精品国产精品亚洲红杏| 欧美日韩不卡在线| 亚洲综合一二三区| 91免费在线看| 亚洲综合在线视频| 欧美日韩在线播放| 午夜精品久久久| 在线电影欧美成精品| 免费日韩伦理电影| 久久久久综合网| eeuss鲁片一区二区三区在线观看| 国产视频亚洲色图| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 成人一级视频在线观看| 国产清纯美女被跳蛋高潮一区二区久久w| 精品一二三四在线| 国产精品高潮呻吟久久| 在线观看91精品国产入口| 亚洲欧洲日韩一区二区三区| 久久精品二区亚洲w码| 精品理论电影在线观看| 亚洲国产日产av| 91福利区一区二区三区| 亚洲一二三四在线观看| 日韩三级视频在线看| 久99久精品视频免费观看| 久久一区二区三区四区| 岛国一区二区三区| 一区二区三区四区激情| 欧美亚日韩国产aⅴ精品中极品| 一区二区三区欧美在线观看| 欧美日韩国产色站一区二区三区| 天堂一区二区在线| 午夜免费久久看| 欧美性猛交一区二区三区精品| 一区二区三区在线视频播放| 在线观看免费成人| 久久久久久电影| 天天综合网天天综合色| 国产精品18久久久久久久网站| 欧美成人猛片aaaaaaa| 老汉av免费一区二区三区| 色婷婷久久久久swag精品 | 国产精品久久久久久妇女6080| 成人开心网精品视频| 亚洲国产欧美日韩另类综合| 精品国产区一区| 欧美在线观看视频一区二区| 粉嫩av一区二区三区在线播放 | 国产一区二区三区在线观看精品| 亚洲人快播电影网| 欧美久久高跟鞋激| 波多野洁衣一区| 久久精品国产亚洲高清剧情介绍| 亚洲精品欧美激情| 国产精品久久久久影院| 欧美电视剧在线观看完整版| 欧美日韩一区二区三区免费看| 国产·精品毛片| 麻豆成人在线观看| 毛片基地黄久久久久久天堂| 怡红院av一区二区三区| 中文字幕在线观看一区二区| 久久中文娱乐网| 日韩一二三四区| 久久蜜臀精品av| 久久影视一区二区| 日韩欧美一级片| 久久久蜜臀国产一区二区| 久久久精品免费网站| 国产午夜精品一区二区三区视频| 久久九九久精品国产免费直播| 精品国产亚洲在线| 国产欧美日本一区二区三区| 久久午夜老司机| 91超碰这里只有精品国产| 精品欧美一区二区在线观看 | 中文字幕欧美日本乱码一线二线|