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

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

?? parser.c

?? create raid tool at linux
?? C
字號:
/* * parser.c : Utility for the Linux Multiple Devices driver *            Copyright (C) 1997 Ingo Molnar, Miguel de Icaza, Gadi Oxman *            Copyright (C) 1998 Erik Troan * * This is the config file parser. Lets rewrite it in Yacc+Lex if it gets * too complex. * * This source is covered by the GNU GPL, the same as all Linux kernel * sources. */#include "common.h"#include "parser.h"char *parity_algorithm_table[] = {	"left-asymmetric",	"right-asymmetric",	"left-symmetric",	"right-symmetric",	NULL};static int parity_algorithm_to_num(char *val){	int i = 0;	char **s = parity_algorithm_table;	while (*s) {		if (strcmp(*s, val) == 0)			return i;		s++; i++;	}	return -1;}static int process_entry (char *par, char *val_s){	int val, i;	md_raid_info_t *array;	md_cfg_entry_t *last;	if (!par[0] && !val_s[0]) {#if DEBUG		printf("Ignoring line\n");#endif /* DEBUG */		return 0;	}	if (par[0] == '#') {#if DEBUG		printf("Ignoring comment\n");#endif /* DEBUG */		return 0;	}	val = isdigit(val_s[0]) ? atoi(val_s) : -1;	if (strcmp(par, "raiddev") == 0) {		if ((cfg = malloc(sizeof(md_cfg_entry_t))) == NULL) {			fprintf(stderr, "couldn't allocate configuration entry\n");			return 1;		}#if DEBUG		printf("Processing MD device %s\n", val_s);#endif		memset(cfg, 0, sizeof(*cfg));		if ((cfg->md_name = malloc(strlen(val_s) + 1)) == NULL) {			fprintf(stderr, "out of memory\n");			return 1;		}		strcpy(cfg->md_name, val_s);		cfg->array.param.nr_disks = 0;		last = cfg_head;		while (last && last->next) last = last->next;		if (last) {		    last->next = cfg;		} else {		    cfg_head = cfg;		    cfg->next = NULL;		}		last = cfg;		return 0;	}	if (!cfg)		return 1;	array = &cfg->array;	if (strcmp(par, "raid-level") == 0) {		if (val == -1) {			if (!strcmp(val_s, "linear"))		    		val = -1;			if (!strcmp(val_s, "translucent"))		    		val = -2;			if (!strcmp(val_s, "hsm"))		    		val = -3;			if (!strcmp(val_s, "multipath"))		    		val = -4;		}		if (val != 4 && val != 5 && val != 1 && val != -1 &&			val != -2 && val != -3 && val != -4 && val != 0) {			fprintf(stderr, "raid level %d not supported\n", val);			return 1;		}		array->param.level = val;		if ((val == 0) || (val == -1))			array->param.not_persistent = 1;		else			array->param.not_persistent = 0;		return 0;	} else if (strcmp(par, "nr-raid-disks") == 0) {		if (val < 0)			return 1;		array->param.raid_disks = val;		return 0;	} else if (strcmp(par, "persistent-superblock") == 0) {		if ((val < 0) || (val > 1))			return 1;		array->param.not_persistent = 1-val;		return 0;	} else if (strcmp(par, "nr-spare-disks") == 0) {		if ((array->param.level < 1) && (array->param.level != -4) && val) {			fprintf(stderr, "nr-spare-disks must be zero for raid level %d\n", array->param.level);			return 1;		}		if (val < 0)			return 1;		array->param.spare_disks = val;		return 0;	} else if (strcmp(par, "parity-algorithm") == 0) {		if (array->param.level != 5) {			fprintf(stderr, "parity-algorithm undefined for raid level %d\n", array->param.level);			return 1;		}		if (val < 0)			val = parity_algorithm_to_num(val_s);		if (val < 0)			return 1;		array->param.layout = val;		return 0;	} else if (strcmp(par, "chunk-size") == 0) {		if (!val || val % 4 || ((1 << (ffs(val)-1)) != val)) {			fprintf(stderr, "invalid chunk-size (%dkB)\n", val);			return 1;		}		array->param.chunk_size = val * MD_BLK_SIZ;		return 0;	} else if (strcmp(par, "device") == 0) {		if (array->param.nr_disks == MD_SB_DISKS) {			fprintf(stderr, "a maximum of %d devices in a set is supported\n", MD_SB_DISKS);			return 1;		}		i = array->param.nr_disks++;		if ((cfg->device_name[i] = malloc(strlen(val_s) + 1)) == NULL) {			fprintf(stderr, "out of memory\n");			return 1;		}		strcpy(cfg->device_name[i], val_s);		array->disks[i].raid_disk = i;		return 0;	} else if (strcmp(par, "raid-disk") == 0) {		if (!array->param.nr_disks) {			fprintf(stderr, "\"device\" line expected\n");			return 1;		}		if (val >= array->param.raid_disks) {			fprintf(stderr, "raid-disk should be smaller than raid_disks\n");			return 1;		}		i = array->param.nr_disks - 1;		array->disks[i].raid_disk = val;		return 0;	} else if (strcmp(par, "spare-disk") == 0) {		if ((array->param.level != 5) && (array->param.level != 4) && (array->param.level != 1) && (array->param.level != -4)) {			fprintf(stderr, "spare-disk not supported for raid level %d\n", array->param.level);			return 1;		}		if (!array->param.nr_disks) {			fprintf(stderr, "\"device\" line expected\n");			return 1;		}		i = array->param.nr_disks - 1;		array->disks[i].raid_disk = i;		return 0;	} else if (strcmp(par, "parity-disk") == 0) {		if (!array->param.nr_disks) {			fprintf(stderr, "\"device\" line expected\n");			return 1;		}		if (array->param.level != 4) {			fprintf(stderr, "parity_disk only supported for raid level 4\n");			return 1;		}		i = array->param.nr_disks - 1;		array->disks[i].raid_disk = array->param.raid_disks - 1;		return 0;	} else if (strcmp(par, "failed-disk") == 0) {		if ((array->param.level != 5) && (array->param.level != 4) && (array->param.level != 1)) {			fprintf(stderr, "failed-disk not supported for raid level %d\n", array->param.level);			return 1;		}		if (val >= array->param.raid_disks) {			fprintf(stderr, "failed-disk should be smaller than raid_disks\n");			return 1;		}		i = array->param.nr_disks - 1;		array->disks[i].raid_disk = val;		array->disks[i].state |= (1 << MD_DISK_FAULTY);		array->param.failed_disks++;		return 0;		}	fprintf(stderr, "unrecognized option %s\n", par);	return 1;}int parse_config (FILE *fp){	int nr = 0;	char line[MAX_LINE_LENGTH], par[MAX_LINE_LENGTH], val[MAX_LINE_LENGTH];#if DEBUG	printf("parsing configuration file\n");#endif	while (1) {		if ((fgets(line, MAX_LINE_LENGTH, fp)) == NULL)			break;		nr++;#if DEBUG		printf("\n");		printf("parsing %s", line);#endif /* DEBUG */		par[0] = 0; val[0] = 0;		sscanf(line, "\t%s\t%s\n", par, val);#if DEBUG		printf("par == %s, val == %s\n", par, val);#endif /* DEBUG */		if (process_entry(par, val)) {			printf("detected error on line %d:\n\t%s", nr, line);			return 1;		}	}#if DEBUG	printf("finished to parse configuration file\n");#endif /* DEBUG */	return 0;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品国产综合久久久久久久久久| 国产精品夜夜爽| 欧美视频一区二区在线观看| 亚洲免费观看高清完整版在线观看熊 | 日韩一区欧美一区| 色偷偷久久人人79超碰人人澡| 日韩久久一区二区| 欧美午夜精品久久久久久超碰| 午夜精品久久久久久| 日韩精品一区二区三区蜜臀 | 国产人伦精品一区二区| 懂色av中文字幕一区二区三区 | 色老头久久综合| 男人操女人的视频在线观看欧美| 26uuu亚洲婷婷狠狠天堂| 成人黄色电影在线 | 日韩av中文字幕一区二区| 精品国精品国产尤物美女| 东方欧美亚洲色图在线| 亚洲综合在线观看视频| 7777精品伊人久久久大香线蕉最新版| 久久超碰97人人做人人爱| 国产精品久久久久三级| 欧美日韩精品一区二区天天拍小说| 久久99精品一区二区三区三区| 国产亚洲欧美激情| 欧美日韩在线亚洲一区蜜芽| 国产一区视频网站| 亚洲国产精品一区二区www| 精品国内二区三区| 91国产精品成人| 国内偷窥港台综合视频在线播放| 亚洲人成精品久久久久久 | 国产拍揄自揄精品视频麻豆| 日本韩国欧美一区| 国产精品一区二区免费不卡 | 美女视频一区二区三区| 日韩一区在线播放| 久久综合狠狠综合久久激情 | 日韩亚洲欧美一区| 91美女福利视频| 国产一区二区三区精品视频| 亚洲电影视频在线| 亚洲国产精品国自产拍av| 欧美精品一卡两卡| av一区二区三区| 国产精品一二三四五| 青青国产91久久久久久| 一区二区视频在线| 中文字幕 久热精品 视频在线 | 国产精品丝袜黑色高跟| 日韩一级片网站| 欧美午夜不卡视频| 91麻豆产精品久久久久久| 狠狠色狠狠色综合系列| 日韩精品五月天| 亚洲综合一二区| 亚洲丝袜制服诱惑| 日本一区二区三区免费乱视频| 日韩欧美激情一区| 欧美日韩中文精品| 在线观看欧美黄色| 色狠狠一区二区三区香蕉| 懂色av中文字幕一区二区三区| 黄色资源网久久资源365| 奇米色一区二区| 视频一区二区中文字幕| 一区2区3区在线看| 一区二区三区四区在线播放| 亚洲欧洲另类国产综合| 中文字幕欧美日韩一区| 久久久精品中文字幕麻豆发布| 精品国产精品一区二区夜夜嗨| 在线播放中文字幕一区| 欧美电影影音先锋| 91精品在线麻豆| 欧美日韩成人在线| 欧美日韩三级视频| 欧美日韩国产在线观看| 欧美日韩你懂得| 欧美精三区欧美精三区| 欧美伦理影视网| 91精品国产91久久久久久最新毛片| 欧美日韩国产综合一区二区三区| 91福利在线免费观看| 色香蕉久久蜜桃| 欧美日韩国产精品自在自线| 欧美日韩精品一区二区三区四区 | 国产精品美女久久久久久久久| 欧美激情在线免费观看| 国产精品久久久久久户外露出 | 国产原创一区二区三区| 国产精品一品视频| 色综合一个色综合亚洲| 在线亚洲高清视频| 欧美日本在线一区| 欧美大胆人体bbbb| 欧美激情一区二区三区| 中文字幕一区二区三区在线不卡| 亚洲黄网站在线观看| 午夜欧美视频在线观看| 黄一区二区三区| 不卡在线观看av| 欧美性做爰猛烈叫床潮| 日韩欧美美女一区二区三区| 中文字幕av一区二区三区高| 亚洲激情中文1区| 日本网站在线观看一区二区三区| 国产精品资源在线| 欧美性淫爽ww久久久久无| 欧美成人艳星乳罩| 亚洲欧美色图小说| 老汉av免费一区二区三区| 国产白丝精品91爽爽久久| 色就色 综合激情| 精品欧美一区二区在线观看 | 亚洲va欧美va国产va天堂影院| 久久精品国产亚洲一区二区三区| 成人av免费网站| 51精品秘密在线观看| 国产精品女上位| 日本在线不卡视频| 91在线精品一区二区| 欧美电影精品一区二区| 亚洲品质自拍视频网站| 国产在线精品一区在线观看麻豆| av成人免费在线| 日韩视频一区二区| 亚洲美腿欧美偷拍| 国产精品一区二区久久不卡 | 99国产一区二区三精品乱码| 欧美一级片在线看| 亚洲另类春色国产| 国产成人日日夜夜| 欧美成人欧美edvon| 亚洲午夜日本在线观看| 成人网在线播放| 欧美成人猛片aaaaaaa| 亚洲伊人伊色伊影伊综合网| 国产不卡视频在线播放| 日韩一区二区三区在线观看| 亚洲激情av在线| aaa亚洲精品| 中文字幕av一区二区三区| 麻豆精品久久久| 欧美日本国产视频| 一级做a爱片久久| 色综合中文字幕国产 | 日韩在线播放一区二区| 99精品国产热久久91蜜凸| 国产日韩成人精品| 麻豆国产精品777777在线| 欧美老女人第四色| 五月婷婷综合网| 日本电影亚洲天堂一区| 亚洲欧美日韩中文播放| 99re66热这里只有精品3直播 | 韩国午夜理伦三级不卡影院| 91精品国产aⅴ一区二区| 亚洲电影视频在线| 欧美亚一区二区| 亚洲国产婷婷综合在线精品| 在线视频欧美区| 一区二区欧美在线观看| 色屁屁一区二区| 一区二区三区四区激情| 色婷婷av一区二区三区gif| 亚洲乱码国产乱码精品精98午夜 | 成人性生交大合| 国产清纯美女被跳蛋高潮一区二区久久w | 国产亚洲欧美一区在线观看| 国产在线看一区| 国产亚洲成aⅴ人片在线观看| 国产大片一区二区| 中文av一区特黄| 99久久精品免费| 亚洲色图制服诱惑| 欧美中文字幕一区| 日韩国产精品久久| 精品剧情v国产在线观看在线| 极品美女销魂一区二区三区免费| 精品国产乱码久久久久久牛牛 | 欧美在线观看一二区| 亚洲高清免费视频| 日韩一级完整毛片| 国产盗摄视频一区二区三区| 国产精品无圣光一区二区| 91在线观看污| 日韩精品五月天| 久久在线观看免费| 波多野结衣一区二区三区 | 五月天丁香久久| www成人在线观看| 91日韩一区二区三区| 五月激情丁香一区二区三区| 精品裸体舞一区二区三区| 成人免费视频视频| 亚洲福利一区二区| 久久亚洲私人国产精品va媚药| 懂色av一区二区三区免费看|