options.c

来自「Linux Kernel 2.6.9 for OMAP1710」· C语言 代码 · 共 128 行

C
128
字号
/* *  linux/fs/hfsplus/options.c * * Copyright (C) 2001 * Brad Boyer (flar@allandria.com) * (C) 2003 Ardis Technologies <roman@ardistech.com> * * Option parsing */#include <linux/string.h>#include <linux/kernel.h>#include <linux/sched.h>#include "hfsplus_fs.h"/* Initialize an options object to reasonable defaults */void fill_defaults(struct hfsplus_sb_info *opts){	if (!opts)		return;	opts->creator = HFSPLUS_DEF_CR_TYPE;	opts->type = HFSPLUS_DEF_CR_TYPE;	opts->umask = current->fs->umask;	opts->uid = current->uid;	opts->gid = current->gid;	opts->part = -1;	opts->session = -1;}/* convert a "four byte character" to a 32 bit int with error checks */static int fill_fourchar(u32 *result, char *input){	u32 out;	int i;	if (!result || !input || !*input || (strlen(input) != 4))		return 0;	for (out = 0, i = 0; i < 4; i++) {		out <<= 8;		out |= ((int)(input[i])) & 0xFF;	}	*result = out;	return 1;}/* convert a string to int with error checks */static int fill_int(int *result, char *input, int base){	char *tmp = input;	int intval;	if (!result || !input || !*input)		return 0;	intval = simple_strtoul(tmp, &tmp, base);	if (*tmp)		return 0;	*result = intval;	return 1;}/* Parse options from mount. Returns 0 on failure *//* input is the options passed to mount() as a string */int parse_options(char *input, struct hfsplus_sb_info *results){	char *curropt, *value;	int tmp;	if (!input)		return 1;	while ((curropt = strsep(&input,",")) != NULL) {		if (!*curropt)			continue;		if ((value = strchr(curropt, '=')) != NULL)			*value++ = '\0';		if (!strcmp(curropt, "creator")) {			if (!fill_fourchar(&(results->creator), value)) {				printk("HFS+-fs: creator requires a 4 character value\n");				return 0;			}		} else if (!strcmp(curropt, "type")) {			if (!fill_fourchar(&(results->type), value)) {				printk("HFS+-fs: type requires a 4 character value\n");				return 0;			}		} else if (!strcmp(curropt, "umask")) {			if (!fill_int(&tmp, value, 8)) {				printk("HFS+-fs: umask requires a value\n");				return 0;			}			results->umask = (umode_t)tmp;		} else if (!strcmp(curropt, "uid")) {			if (!fill_int(&tmp, value, 0)) {				printk("HFS+-fs: uid requires an argument\n");				return 0;			}			results->uid = (uid_t)tmp;		} else if (!strcmp(curropt, "gid")) {			if (!fill_int(&tmp, value, 0)) {				printk("HFS+-fs: gid requires an argument\n");				return 0;			}			results->gid = (gid_t)tmp;		} else if (!strcmp(curropt, "part")) {			if (!fill_int(&results->part, value, 0)) {				printk("HFS+-fs: part requires an argument\n");				return 0;			}		} else if (!strcmp(curropt, "session")) {			if (!fill_int(&results->session, value, 0)) {				printk("HFS+-fs: session requires an argument\n");				return 0;			}		} else {			printk("HFS+-fs: unknown option %s\n", curropt);			return 0;		}	}	return 1;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?