fuse_options.c
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
- /**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #include "fuse_dfs.h"
- #include "fuse_options.h"
- #include <getopt.h>
- #include "fuse_context_handle.h"
- void print_options() {
- fprintf(stderr,"options:n");
- fprintf(stderr, "tprotected=%sn",options.protected);
- fprintf(stderr, "tserver=%sn",options.server);
- fprintf(stderr, "tport=%dn",options.port);
- fprintf(stderr, "tdebug=%dn",options.debug);
- fprintf(stderr, "tread_only=%dn",options.read_only);
- fprintf(stderr, "tusetrash=%dn",options.usetrash);
- fprintf(stderr, "tentry_timeout=%dn",options.entry_timeout);
- fprintf(stderr, "tattribute_timeout=%dn",options.attribute_timeout);
- fprintf(stderr, "tprivate=%dn",options.private);
- fprintf(stderr, "trdbuffer_size=%d (KBs)n",(int)options.rdbuffer_size/1024);
- }
- const char *program;
- /** macro to define options */
- #define DFSFS_OPT_KEY(t, p, v) { t, offsetof(struct options, p), v }
- void print_usage(const char *pname)
- {
- fprintf(stdout,"USAGE: %s [debug] [--help] [--version] [-oprotected=<colon_seped_list_of_paths] [rw] [-onotrash] [-ousetrash] [-obig_writes] [-oprivate (single user)] [ro] [-oserver=<hadoop_servername>] [-oport=<hadoop_port>] [-oentry_timeout=<secs>] [-oattribute_timeout=<secs>] [-odirect_io] [-onopoermissions] [-o<other fuse option>] <mntpoint> [fuse options]n",pname);
- fprintf(stdout,"NOTE: debugging option for fuse is -debugn");
- }
- /** keys for FUSE_OPT_ options */
- enum
- {
- KEY_VERSION,
- KEY_HELP,
- KEY_USETRASH,
- KEY_NOTRASH,
- KEY_RO,
- KEY_RW,
- KEY_PRIVATE,
- KEY_BIGWRITES,
- KEY_DEBUG,
- KEY_INITCHECKS,
- KEY_NOPERMISSIONS,
- KEY_DIRECTIO,
- };
- struct fuse_opt dfs_opts[] =
- {
- DFSFS_OPT_KEY("server=%s", server, 0),
- DFSFS_OPT_KEY("entry_timeout=%d", entry_timeout, 0),
- DFSFS_OPT_KEY("attribute_timeout=%d", attribute_timeout, 0),
- DFSFS_OPT_KEY("protected=%s", protected, 0),
- DFSFS_OPT_KEY("port=%d", port, 0),
- DFSFS_OPT_KEY("rdbuffer=%d", rdbuffer_size,0),
- FUSE_OPT_KEY("private", KEY_PRIVATE),
- FUSE_OPT_KEY("ro", KEY_RO),
- FUSE_OPT_KEY("debug", KEY_DEBUG),
- FUSE_OPT_KEY("initchecks", KEY_INITCHECKS),
- FUSE_OPT_KEY("nopermissions", KEY_NOPERMISSIONS),
- FUSE_OPT_KEY("big_writes", KEY_BIGWRITES),
- FUSE_OPT_KEY("rw", KEY_RW),
- FUSE_OPT_KEY("usetrash", KEY_USETRASH),
- FUSE_OPT_KEY("notrash", KEY_NOTRASH),
- FUSE_OPT_KEY("direct_io", KEY_DIRECTIO),
- FUSE_OPT_KEY("-v", KEY_VERSION),
- FUSE_OPT_KEY("--version", KEY_VERSION),
- FUSE_OPT_KEY("-h", KEY_HELP),
- FUSE_OPT_KEY("--help", KEY_HELP),
- FUSE_OPT_END
- };
- int dfs_options(void *data, const char *arg, int key, struct fuse_args *outargs)
- {
- (void) data;
- switch (key) {
- case FUSE_OPT_KEY_OPT:
- fprintf(stderr,"fuse-dfs ignoring option %sn",arg);
- return 1;
- case KEY_VERSION:
- fprintf(stdout,"%s %sn",program,_FUSE_DFS_VERSION);
- exit(0);
- case KEY_HELP:
- print_usage(program);
- exit(0);
- case KEY_USETRASH:
- options.usetrash = 1;
- break;
- case KEY_NOTRASH:
- options.usetrash = 1;
- break;
- case KEY_RO:
- options.read_only = 1;
- break;
- case KEY_RW:
- options.read_only = 0;
- break;
- case KEY_PRIVATE:
- options.private = 1;
- break;
- case KEY_DEBUG:
- fuse_opt_add_arg(outargs, "-d");
- options.debug = 1;
- break;
- case KEY_INITCHECKS:
- options.initchecks = 1;
- break;
- case KEY_NOPERMISSIONS:
- options.no_permissions = 1;
- break;
- case KEY_DIRECTIO:
- options.direct_io = 1;
- break;
- case KEY_BIGWRITES:
- #ifdef FUSE_CAP_BIG_WRITES
- fuse_opt_add_arg(outargs, "-obig_writes");
- #endif
- break;
- default: {
- // try and see if the arg is a URI for DFS
- int tmp_port;
- char tmp_server[1024];
- if (!sscanf(arg,"dfs://%1024[a-zA-Z0-9_.-]:%d",tmp_server,&tmp_port)) {
- if (strcmp(arg,"ro") == 0) {
- options.read_only = 1;
- } else if (strcmp(arg,"rw") == 0) {
- options.read_only = 0;
- } else {
- fprintf(stderr,"fuse-dfs didn't recognize %s,%dn",arg,key);
- fuse_opt_add_arg(outargs,arg);
- return 0;
- }
- } else {
- options.port = tmp_port;
- options.server = strdup(tmp_server);
- fprintf(stderr, "port=%d,server=%sn", options.port, options.server);
- }
- }
- }
- return 0;
- }