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

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

?? cmdline.c

?? 一個Windows下的Linux專用虛擬機
?? C
字號:
/* * This source code is a part of coLinux source package. * * Dan Aloni <da-x@colinux.org>, 2004 (c) * * The code is licensed under the GPL. See the COPYING file at * the root directory. */#include <malloc.h>#include <string.h>#include "cmdline.h"#include <colinux/os/alloc.h>#include <colinux/os/user/misc.h>#include <colinux/common/libc.h>#include <colinux/os/user/file.h>struct co_command_line_params {	int argc;	char **argv;};typedef enum {	PARAM_PARSE_STATE_INIT=0,	PARAM_PARSE_STATE_WHITESPACE,	PARAM_PARSE_STATE_COMMENT,	PARAM_PARSE_STATE_PARAM,	PARAM_PARSE_STATE_PARAM_EQUAL,	PARAM_PARSE_STATE_PARAM_EQUAL_STR,	PARAM_PARSE_STATE_NUM_STATES,} param_parse_state_t;typedef enum {	PARAM_PARSE_MARK_NONE=0,	PARAM_PARSE_MARK_START_OF_PARAM,	PARAM_PARSE_MARK_END_OF_PARAM,} param_parse_mark_t;typedef struct {	param_parse_state_t new_state;	param_parse_mark_t mark;} param_parse_state_action_t;static param_parse_state_action_t parser_states[PARAM_PARSE_STATE_NUM_STATES][0x100] = {	[PARAM_PARSE_STATE_INIT] = {		[0x00 ... 0xff] = {PARAM_PARSE_STATE_INIT, },		[' '] = {PARAM_PARSE_STATE_WHITESPACE, },		['\t'] = {PARAM_PARSE_STATE_WHITESPACE, },		['\n'] = {PARAM_PARSE_STATE_WHITESPACE, },		['\r'] = {PARAM_PARSE_STATE_WHITESPACE, },		['a' ... 'z'] = {PARAM_PARSE_STATE_PARAM, PARAM_PARSE_MARK_START_OF_PARAM},		['A' ... 'Z'] = {PARAM_PARSE_STATE_PARAM, PARAM_PARSE_MARK_START_OF_PARAM},		['0' ... '9'] = {PARAM_PARSE_STATE_PARAM, PARAM_PARSE_MARK_START_OF_PARAM},		['.'] = {PARAM_PARSE_STATE_PARAM, PARAM_PARSE_MARK_START_OF_PARAM},		['#'] = {PARAM_PARSE_STATE_COMMENT, },	},	[PARAM_PARSE_STATE_COMMENT] = {		[0x00 ... 0xff] = {PARAM_PARSE_STATE_COMMENT, },		['\n'] = {PARAM_PARSE_STATE_INIT, },	},	[PARAM_PARSE_STATE_WHITESPACE] = {		[0x00 ... 0xff] = {PARAM_PARSE_STATE_INIT, },		[' '] = {PARAM_PARSE_STATE_WHITESPACE, },		['\t'] = {PARAM_PARSE_STATE_WHITESPACE, },		['\n'] = {PARAM_PARSE_STATE_WHITESPACE, },		['\r'] = {PARAM_PARSE_STATE_WHITESPACE, },		['a' ... 'z'] = {PARAM_PARSE_STATE_PARAM, PARAM_PARSE_MARK_START_OF_PARAM},		['A' ... 'Z'] = {PARAM_PARSE_STATE_PARAM, PARAM_PARSE_MARK_START_OF_PARAM},		['0' ... '9'] = {PARAM_PARSE_STATE_PARAM, PARAM_PARSE_MARK_START_OF_PARAM},		['.'] = {PARAM_PARSE_STATE_PARAM, PARAM_PARSE_MARK_START_OF_PARAM},		['#'] = {PARAM_PARSE_STATE_COMMENT, },	},	[PARAM_PARSE_STATE_PARAM] = {		[0x00 ... 0x20] = {PARAM_PARSE_STATE_INIT, PARAM_PARSE_MARK_END_OF_PARAM},		[0x21 ... 0xff] = {PARAM_PARSE_STATE_PARAM, },		['='] = {PARAM_PARSE_STATE_PARAM_EQUAL, },		['"'] = {PARAM_PARSE_STATE_PARAM_EQUAL_STR, },		['#'] = {PARAM_PARSE_STATE_COMMENT, PARAM_PARSE_MARK_END_OF_PARAM},	},	[PARAM_PARSE_STATE_PARAM_EQUAL] = {		[0x00 ... 0x20] = {PARAM_PARSE_STATE_INIT, PARAM_PARSE_MARK_END_OF_PARAM},		[0x21 ... 0xff] = {PARAM_PARSE_STATE_PARAM_EQUAL, },		['"'] = {PARAM_PARSE_STATE_PARAM_EQUAL_STR, },		['#'] = {PARAM_PARSE_STATE_COMMENT, PARAM_PARSE_MARK_END_OF_PARAM},	},	[PARAM_PARSE_STATE_PARAM_EQUAL_STR] = {		[0x00 ... 0x1f] = {PARAM_PARSE_STATE_INIT, PARAM_PARSE_MARK_END_OF_PARAM},		[0x20 ... 0xff] = {PARAM_PARSE_STATE_PARAM_EQUAL_STR, },		['"'] = {PARAM_PARSE_STATE_PARAM, },		['#'] = {PARAM_PARSE_STATE_COMMENT, PARAM_PARSE_MARK_END_OF_PARAM},	},};static co_rc_t dup_param(const char *source, int len, char **out_dest){	*out_dest = co_os_malloc(len + 1);	if (!*out_dest)		return CO_RC(OUT_OF_MEMORY);	co_memcpy(*out_dest, source, len);	(*out_dest)[len] = '\0';	return CO_RC(OK);}static co_rc_t get_params_list(char *filename, int *count, char ***list_output){	co_rc_t rc;	char *buf;	unsigned long size;	rc = co_os_file_load(filename, &buf, &size, 0);	if (!CO_OK(rc)) {		co_terminal_print("error loading config file '%s'\n", filename);		return rc;	}		if (size > 0) {		char *filescan = buf, *param_start = NULL, *param_end, cur_char;		param_parse_state_t state = PARAM_PARSE_STATE_INIT;		param_parse_state_action_t *action;		buf[size - 1] = '\0';		do {			cur_char = *filescan;			action = &parser_states[state][(unsigned char)cur_char];			state = action->new_state;			switch (action->mark) {			case PARAM_PARSE_MARK_START_OF_PARAM:				param_start = filescan;				break;			case PARAM_PARSE_MARK_END_OF_PARAM:				param_end = filescan;				if (list_output) {					if (!param_start)						return CO_RC(ERROR);					rc = dup_param(param_start, param_end - param_start, *list_output);					if (!CO_OK(rc))						break;					(*list_output)++;					param_start = NULL;				}				if (count)					(*count)++;				break;			default:				break;			}			filescan++;				} while (cur_char);	}		co_os_file_free(buf);	return CO_RC(OK);}static co_rc_t eval_params_file(co_command_line_params_t cmdline){	int count = 0, i = 0;	char **argv = NULL;	char **argv_scan = NULL;	co_rc_t rc = CO_RC(OK);	for (i=0; i < cmdline->argc; i++) {		if (co_strlen(cmdline->argv[i]) >= 1  &&  cmdline->argv[i][0] == '@') {			rc = get_params_list(&cmdline->argv[i][1], &count, NULL);			if (!CO_OK(rc))				return rc;			continue;		}		count++;	}	argv = co_os_malloc(count*sizeof(char *));	if (!argv)		return CO_RC(OUT_OF_MEMORY);	co_memset(argv, 0, count*sizeof(char *));	argv_scan = argv;	count = 0;	for (i=0; i < cmdline->argc; i++) {		if (co_strlen(cmdline->argv[i]) >= 1  &&  cmdline->argv[i][0] == '@') {			rc = get_params_list(&cmdline->argv[i][1], &count, &argv_scan);			if (!CO_OK(rc))				break;			continue;		} 		rc = dup_param(cmdline->argv[i], co_strlen(cmdline->argv[i]), argv_scan);		if (!CO_OK(rc))			break;		argv_scan++;		count++;	}	if (!CO_OK(rc)) {		for (i=0; i < count; i++)			co_os_free(argv[i]);		co_os_free(argv);		return rc;	}	co_os_free(cmdline->argv);	cmdline->argv = argv;	cmdline->argc = count;	return CO_RC(OK);}co_rc_t co_cmdline_params_alloc(char **argv, int argc, co_command_line_params_t *cmdline_out){	co_command_line_params_t cmdline;	unsigned long argv_size;	co_rc_t rc;	cmdline = (typeof(cmdline))(malloc(sizeof(struct co_command_line_params)));	if (cmdline == NULL)		return CO_RC(OUT_OF_MEMORY);	argv_size = (sizeof(char *))*(argc+1);	cmdline->argv = co_os_malloc(argv_size);	if (!cmdline->argv) {		co_os_free(cmdline);		return CO_RC(OUT_OF_MEMORY);	}	cmdline->argc = argc;	co_memcpy(cmdline->argv, argv, (sizeof(char*))*argc);		rc = eval_params_file(cmdline);	if (!CO_OK(rc)) {		co_os_free(cmdline->argv);		co_os_free(cmdline);		return rc;	}	*cmdline_out = cmdline;	return CO_RC(OK);}co_rc_t co_cmdline_params_argumentless_parameter(co_command_line_params_t cmdline, 						 const char *name,						 bool_t *out_exists){	int i;	*out_exists = PFALSE;	for (i=0; i < cmdline->argc; i++) {		if (!cmdline->argv[i])			continue;		if (co_strcmp(cmdline->argv[i], name) == 0) {			co_os_free(cmdline->argv[i]);			cmdline->argv[i] = NULL;			*out_exists = PTRUE;			return CO_RC(OK);		}	}	return CO_RC(OK);}static co_rc_t co_cmdline_get_next_equality_wrapper(co_command_line_params_t cmdline, const char *expected_prefix, int max_suffix_len,				     char *key, int key_size, char **pp_value, int value_size, bool_t *out_exists){	static char *value;	int i;	int length;	int prefix_len = co_strlen(expected_prefix);	*out_exists = PFALSE;	for (i=0; i < cmdline->argc; i++) {		const char *key_found;		char *arg = cmdline->argv[i];		int key_len;		if (!cmdline->argv[i])			continue;				key_found = co_strstr(cmdline->argv[i], "=");		if (!key_found)			continue;				if (co_strncmp(expected_prefix, cmdline->argv[i], prefix_len))			continue;				cmdline->argv[i] = NULL;				key_len = (key_found - arg) - prefix_len;		if (key_len > 0) {			if (key_size < key_len + 1) {				co_os_free(arg);				return CO_RC(ERROR);			}						co_memcpy(key, prefix_len + arg, key_len);			key[key_len] = '\0';		}		/* string start and size */		key_found++;		length = co_strlen(key_found);		if (!value_size) {			/* free old value */			if (value)				co_os_free(value);			/* dynamic alloc value buffer */			value = co_os_malloc(length+1);			if (!value) {				co_os_free(arg);				return CO_RC(OUT_OF_MEMORY);			}			*pp_value = value;		} else if (length >= value_size-1) {			co_os_free(arg);			return CO_RC(ERROR);		}		co_memcpy(*pp_value, key_found, length);		(*pp_value)[length] = '\0';		co_os_free(arg);				*out_exists = PTRUE;		break;	}	return CO_RC(OK);}co_rc_t co_cmdline_get_next_equality(co_command_line_params_t cmdline, const char *expected_prefix, int max_suffix_len,				     char *key, int key_size, char *value, int value_size, bool_t *out_exists){	return co_cmdline_get_next_equality_wrapper(cmdline, expected_prefix, max_suffix_len,				     key, key_size, &value, value_size, out_exists);}co_rc_t co_cmdline_get_next_equality_alloc(co_command_line_params_t cmdline, const char *expected_prefix, int max_suffix_len,				     char *key, int key_size, char **pp_value, bool_t *out_exists){	return co_cmdline_get_next_equality_wrapper(cmdline, expected_prefix, max_suffix_len,				     key, key_size, pp_value, 0, out_exists);}co_rc_t co_cmdline_get_next_equality_int_prefix(co_command_line_params_t cmdline, const char *expected_prefix, 						int *key_int, int max_index, char **pp_value, bool_t *out_exists){	char number[11];	co_rc_t rc;		rc = co_cmdline_get_next_equality_alloc(cmdline, expected_prefix, sizeof(number) - 1,					  number, sizeof(number), pp_value, out_exists);	if (!CO_OK(rc)) 		return rc;		if (*out_exists) {		char *number_parse = NULL;		int value_int;				value_int = co_strtol(number, &number_parse, 10);		if (number_parse == number) {			/* not a number */			co_terminal_print("cmdline: suffix not a number\n");			return CO_RC(ERROR);		}		if (value_int < 0 || value_int >= max_index) {			co_terminal_print("cmdline: invalid %s index: %d\n", 					  expected_prefix, value_int);			return CO_RC(ERROR);		}		*key_int = value_int;	}	return CO_RC(OK);}co_rc_t co_cmdline_get_next_equality_int_value(co_command_line_params_t cmdline, const char *expected_prefix, 					       int *value_int, bool_t *out_exists){	char value[20];	co_rc_t rc;		rc = co_cmdline_get_next_equality(cmdline, expected_prefix, 0, NULL, 0, value, sizeof(value), out_exists);	if (!CO_OK(rc)) 		return rc;		if (*out_exists) {		char *value_parse = NULL;				*value_int = co_strtol(value, &value_parse, 10);		if (value_parse == value) {			/* not a number */			return CO_RC(ERROR);		}	}	return CO_RC(OK);}static co_rc_t one_arugment_parameter(co_command_line_params_t cmdline, 				      const char *name, 				      bool_t *argument, 				      bool_t *out_exists, 				      char *out_arg_buf, int arg_size){	int i;	if (out_exists)		*out_exists = PFALSE;	for (i=0; i < cmdline->argc; i++) {		bool_t argument_specified = PTRUE;		if (!cmdline->argv[i])			continue;		if (co_strcmp(cmdline->argv[i], name) != 0)			continue;		if (i >= cmdline->argc -1)			argument_specified = PFALSE;		else if (cmdline->argv[i+1] == NULL)			argument_specified = PFALSE;		else if (cmdline->argv[i+1][0] == '-')			argument_specified = PFALSE;				if (*argument) {			if (!argument_specified) {				co_terminal_print("error, no argument passed to command line switch '%s'\n", name);				return CO_RC(ERROR);			}		}				*argument = argument_specified;		if (argument_specified) {			co_snprintf(out_arg_buf, arg_size, "%s", cmdline->argv[i+1]);			co_os_free(cmdline->argv[i+1]);			cmdline->argv[i+1] = NULL;		}				co_os_free(cmdline->argv[i]);		cmdline->argv[i] = NULL;		if (out_exists)			*out_exists = PTRUE;				return CO_RC(OK);	}	return CO_RC(OK);}co_rc_t co_cmdline_params_one_arugment_parameter(co_command_line_params_t cmdline, 						 const char *name, 						 bool_t *out_exists, 						 char *out_arg_buf, int arg_size){	bool_t argument = PTRUE;	return one_arugment_parameter(cmdline, name, &argument, out_exists, out_arg_buf, arg_size);}co_rc_t co_cmdline_params_one_arugment_int_parameter(co_command_line_params_t cmdline, 						     const char *name, 						     bool_t *out_exists, int *out_int){	char arg_buf[0x20];	co_rc_t rc;	char *end_ptr;	rc = co_cmdline_params_one_arugment_parameter(cmdline, name, out_exists, arg_buf, sizeof(arg_buf));	if (!CO_OK(rc))		return rc;	if (out_exists && *out_exists) { 		*out_int = co_strtol(arg_buf, &end_ptr, 10);		if (end_ptr == arg_buf)			return CO_RC(ERROR);	}	return CO_RC(OK);}co_rc_t co_cmdline_params_one_optional_arugment_parameter(co_command_line_params_t cmdline, 							  const char *name, 							  bool_t *out_exists, 							  char *out_arg_buf, int arg_size){	bool_t argument = PFALSE;	return one_arugment_parameter(cmdline, name, &argument, out_exists, out_arg_buf, arg_size);}co_rc_t co_cmdline_params_check_for_no_unparsed_parameters(co_command_line_params_t cmdline,							   bool_t print){	int i, count = 0;	for (i=0; i < cmdline->argc; i++) {		if (!cmdline->argv[i])			continue;		if (print)			co_terminal_print("unknown command line parameter %d: '%s'\n", i+1, cmdline->argv[i]);		count++;	}	if (count != 0)		return CO_RC(ERROR);	return CO_RC(OK);}co_rc_t co_cmdline_params_format_remaining_parameters(co_command_line_params_t cmdline,						      char *str_out, int size){	int i;	char *str_out_orig = str_out;	str_out_orig[0] = '\0';	for (i=0; i < cmdline->argc; i++) {		int param_size;		if (!cmdline->argv[i])			continue;		co_snprintf(str_out, size, (str_out_orig[0] == '\0') ? "%s" : " %s", cmdline->argv[i]);		param_size = co_strlen(str_out);		str_out += param_size;		size -= param_size;		if (size == 0)			break;		co_os_free(cmdline->argv[i]);		cmdline->argv[i] = NULL;	}	return CO_RC(OK);}void co_cmdline_params_free(co_command_line_params_t cmdline){	int i;	for (i=0; i < cmdline->argc; i++) {		if (cmdline->argv[i])			co_os_free(cmdline->argv[i]);	}	co_os_free(cmdline->argv);	co_os_free(cmdline);}void co_remove_quotation_marks(char *value){	int length;	if (*value == '\"') {		length = co_strlen(value)-1;		if (value[length] == '\"') {			length--;			co_memcpy(value, value+1, length);			value[length] = '\0';		}	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品理伦片| 国内偷窥港台综合视频在线播放| 日韩国产在线观看| 国产iv一区二区三区| 欧美亚洲动漫制服丝袜| 国产日韩欧美综合一区| 免费不卡在线视频| 91豆麻精品91久久久久久| 国产午夜精品在线观看| 视频精品一区二区| 色乱码一区二区三区88| 国产精品久久久久永久免费观看| 久久99久久精品欧美| 欧美性大战久久久久久久蜜臀| 中文字幕二三区不卡| 久国产精品韩国三级视频| 欧洲精品一区二区| 亚洲啪啪综合av一区二区三区| 国产福利精品导航| 26uuu精品一区二区三区四区在线| 午夜精品在线视频一区| 在线影视一区二区三区| 亚洲欧美综合色| 国产成人综合视频| 久久久电影一区二区三区| 久久99精品国产麻豆不卡| 欧美日本国产视频| 亚洲国产精品久久久男人的天堂| 色综合久久88色综合天天6| 中文在线一区二区| 成人国产免费视频| 欧美国产精品一区二区三区| 国产在线精品免费av| 精品日产卡一卡二卡麻豆| 免费观看一级特黄欧美大片| 欧美日韩成人高清| 日韩黄色片在线观看| 日韩精品一区二区在线| 精品一区二区影视| 久久精品夜夜夜夜久久| 丁香五精品蜜臀久久久久99网站| wwww国产精品欧美| 国产精品69久久久久水密桃| 国产色综合一区| thepron国产精品| 日韩码欧中文字| 欧美日韩一卡二卡| 秋霞电影网一区二区| www国产精品av| 成人高清免费观看| 亚洲女同ⅹxx女同tv| 欧美唯美清纯偷拍| 久久er精品视频| 国产欧美一区二区在线观看| 91偷拍与自偷拍精品| 亚洲伊人色欲综合网| 欧美一区二区日韩一区二区| 国产一区二区三区在线观看免费视频| 国产亚洲精久久久久久| 91国在线观看| 激情小说亚洲一区| 亚洲欧美国产77777| 91精品婷婷国产综合久久竹菊| 免费人成精品欧美精品| 久久视频一区二区| 91黄色免费看| 久久国产精品第一页| 中文字幕亚洲一区二区va在线| 欧美亚一区二区| 国产一区二区精品在线观看| 一区二区三区成人在线视频| 欧美本精品男人aⅴ天堂| 99久久伊人精品| 美女一区二区三区在线观看| **性色生活片久久毛片| 91精品国产综合久久久蜜臀粉嫩 | 精品久久久三级丝袜| 成+人+亚洲+综合天堂| 丝袜美腿高跟呻吟高潮一区| 国产欧美一区二区精品忘忧草| 91久久奴性调教| 国产精品自在欧美一区| 午夜欧美在线一二页| 中文字幕亚洲区| 日韩美女视频一区二区在线观看| 99久久精品免费精品国产| 精品一区二区三区不卡| 亚洲国产综合视频在线观看| 欧美激情一区二区三区蜜桃视频| 日韩一区二区在线免费观看| 色噜噜狠狠色综合欧洲selulu | 视频一区欧美精品| 亚洲丝袜精品丝袜在线| 久久久99免费| 日韩欧美第一区| 欧美日本国产视频| 欧洲精品一区二区三区在线观看| 国产成人一区二区精品非洲| 日产欧产美韩系列久久99| 一区二区三区四区精品在线视频| 中文字幕久久午夜不卡| 2020国产精品| 精品国产一区二区三区久久久蜜月| 欧洲一区二区三区在线| 色狠狠色噜噜噜综合网| 91影视在线播放| caoporn国产一区二区| 风间由美一区二区三区在线观看 | 国产精品成人免费在线| 国产亚洲综合在线| 国产日韩欧美a| 国产亚洲自拍一区| 国产亚洲精品久| 久久久精品日韩欧美| 久久久久久一二三区| 日韩午夜在线观看视频| 欧美一级精品大片| 欧美一级二级三级乱码| 日韩欧美一级精品久久| 日韩精品一区二区三区老鸭窝| 日韩一区二区精品在线观看| 91精品国产综合久久国产大片| 这里只有精品99re| 日韩免费看网站| 国产亚洲欧美在线| 国产精品久久精品日日| 亚洲婷婷在线视频| 一区二区欧美精品| 日韩和欧美一区二区| 美女一区二区三区| 国产xxx精品视频大全| voyeur盗摄精品| 欧美四级电影网| 欧美电影免费观看完整版| 国产色91在线| 伊人一区二区三区| 日本三级亚洲精品| 国产成人精品亚洲777人妖| 成人精品国产一区二区4080| 91丨九色丨黑人外教| 欧美性大战久久| 精品免费国产二区三区| 国产精品白丝在线| 五月激情综合网| 激情亚洲综合在线| 色综合久久综合网| 日韩午夜在线影院| 综合中文字幕亚洲| 亚洲妇女屁股眼交7| 精品一区二区三区免费播放| 99久久精品国产一区二区三区| 欧美日韩国产a| 国产免费观看久久| 亚洲高清免费观看| 国产成人午夜高潮毛片| 欧美日韩情趣电影| 久久久国产精华| 亚洲午夜精品在线| 国产不卡免费视频| 在线电影国产精品| 一区二区中文视频| 麻豆国产一区二区| 一本色道久久综合亚洲精品按摩| 欧美精品1区2区3区| 国产精品久久精品日日| 另类欧美日韩国产在线| 色综合中文字幕国产 | 成人自拍视频在线| 7777精品伊人久久久大香线蕉最新版| 久久一区二区三区四区| 亚洲国产成人av好男人在线观看| 国产乱理伦片在线观看夜一区| 欧美日韩夫妻久久| 亚洲日本在线看| 国产成人亚洲综合色影视| 欧美一区二区三区视频在线| 国产精品成人在线观看| 狠狠色综合播放一区二区| 欧美日韩午夜在线视频| 亚洲天堂网中文字| 成人高清视频在线观看| 久久久久国色av免费看影院| 日韩高清在线电影| 欧美日韩亚洲综合| 亚洲激情校园春色| 成人三级伦理片| 欧美国产一区在线| 国产经典欧美精品| 久久久青草青青国产亚洲免观| 青青草国产成人99久久| 9191久久久久久久久久久| 一区二区视频在线看| 99r精品视频| 国产精品久久综合| 成人网在线免费视频| 欧美国产激情二区三区 | 国产精品婷婷午夜在线观看| 国产很黄免费观看久久| 久久久久久久久免费| 国产美女娇喘av呻吟久久|