fuse_options.c
上传用户:quxuerui
上传日期:2018-01-08
资源大小:41811k
文件大小:5k
源码类别:

网格计算

开发平台:

Java

  1. /**
  2.  * Licensed to the Apache Software Foundation (ASF) under one
  3.  * or more contributor license agreements.  See the NOTICE file
  4.  * distributed with this work for additional information
  5.  * regarding copyright ownership.  The ASF licenses this file
  6.  * to you under the Apache License, Version 2.0 (the
  7.  * "License"); you may not use this file except in compliance
  8.  * with the License.  You may obtain a copy of the License at
  9.  *
  10.  *     http://www.apache.org/licenses/LICENSE-2.0
  11.  *
  12.  * Unless required by applicable law or agreed to in writing, software
  13.  * distributed under the License is distributed on an "AS IS" BASIS,
  14.  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  15.  * See the License for the specific language governing permissions and
  16.  * limitations under the License.
  17.  */
  18. #include "fuse_dfs.h"
  19. #include "fuse_options.h"
  20. #include <getopt.h>
  21. #include "fuse_context_handle.h"
  22. void print_options() {
  23.   fprintf(stderr,"options:n");
  24.   fprintf(stderr, "tprotected=%sn",options.protected);
  25.   fprintf(stderr, "tserver=%sn",options.server);
  26.   fprintf(stderr, "tport=%dn",options.port);
  27.   fprintf(stderr, "tdebug=%dn",options.debug);
  28.   fprintf(stderr, "tread_only=%dn",options.read_only);
  29.   fprintf(stderr, "tusetrash=%dn",options.usetrash);
  30.   fprintf(stderr, "tentry_timeout=%dn",options.entry_timeout);
  31.   fprintf(stderr, "tattribute_timeout=%dn",options.attribute_timeout);
  32.   fprintf(stderr, "tprivate=%dn",options.private);
  33.   fprintf(stderr, "trdbuffer_size=%d (KBs)n",(int)options.rdbuffer_size/1024);
  34. }
  35. const char *program;  
  36. /** macro to define options */
  37. #define DFSFS_OPT_KEY(t, p, v) { t, offsetof(struct options, p), v }
  38. void print_usage(const char *pname)
  39. {
  40.   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);
  41.   fprintf(stdout,"NOTE: debugging option for fuse is -debugn");
  42. }
  43. /** keys for FUSE_OPT_ options */
  44. enum
  45.   {
  46.     KEY_VERSION,
  47.     KEY_HELP,
  48.     KEY_USETRASH,
  49.     KEY_NOTRASH,
  50.     KEY_RO,
  51.     KEY_RW,
  52.     KEY_PRIVATE,
  53.     KEY_BIGWRITES,
  54.     KEY_DEBUG,
  55.     KEY_INITCHECKS,
  56.     KEY_NOPERMISSIONS,
  57.     KEY_DIRECTIO,
  58.   };
  59. struct fuse_opt dfs_opts[] =
  60.   {
  61.     DFSFS_OPT_KEY("server=%s", server, 0),
  62.     DFSFS_OPT_KEY("entry_timeout=%d", entry_timeout, 0),
  63.     DFSFS_OPT_KEY("attribute_timeout=%d", attribute_timeout, 0),
  64.     DFSFS_OPT_KEY("protected=%s", protected, 0),
  65.     DFSFS_OPT_KEY("port=%d", port, 0),
  66.     DFSFS_OPT_KEY("rdbuffer=%d", rdbuffer_size,0),
  67.     FUSE_OPT_KEY("private", KEY_PRIVATE),
  68.     FUSE_OPT_KEY("ro", KEY_RO),
  69.     FUSE_OPT_KEY("debug", KEY_DEBUG),
  70.     FUSE_OPT_KEY("initchecks", KEY_INITCHECKS),
  71.     FUSE_OPT_KEY("nopermissions", KEY_NOPERMISSIONS),
  72.     FUSE_OPT_KEY("big_writes", KEY_BIGWRITES),
  73.     FUSE_OPT_KEY("rw", KEY_RW),
  74.     FUSE_OPT_KEY("usetrash", KEY_USETRASH),
  75.     FUSE_OPT_KEY("notrash", KEY_NOTRASH),
  76.     FUSE_OPT_KEY("direct_io", KEY_DIRECTIO),
  77.     FUSE_OPT_KEY("-v",             KEY_VERSION),
  78.     FUSE_OPT_KEY("--version",      KEY_VERSION),
  79.     FUSE_OPT_KEY("-h",             KEY_HELP),
  80.     FUSE_OPT_KEY("--help",         KEY_HELP),
  81.     FUSE_OPT_END
  82.   };
  83. int dfs_options(void *data, const char *arg, int key,  struct fuse_args *outargs)
  84. {
  85.   (void) data;
  86.   switch (key) {
  87.   case FUSE_OPT_KEY_OPT:
  88.     fprintf(stderr,"fuse-dfs ignoring option %sn",arg);
  89.     return 1;
  90.   case  KEY_VERSION:
  91.     fprintf(stdout,"%s %sn",program,_FUSE_DFS_VERSION);
  92.     exit(0);
  93.   case KEY_HELP:
  94.     print_usage(program);
  95.     exit(0);
  96.   case KEY_USETRASH:
  97.     options.usetrash = 1;
  98.     break;
  99.   case KEY_NOTRASH:
  100.     options.usetrash = 1;
  101.     break;
  102.   case KEY_RO:
  103.     options.read_only = 1;
  104.     break;
  105.   case KEY_RW:
  106.     options.read_only = 0;
  107.     break;
  108.   case KEY_PRIVATE:
  109.     options.private = 1;
  110.     break;
  111.   case KEY_DEBUG:
  112.     fuse_opt_add_arg(outargs, "-d");
  113.     options.debug = 1;
  114.     break;
  115.   case KEY_INITCHECKS:
  116.     options.initchecks = 1;
  117.     break;
  118.   case KEY_NOPERMISSIONS:
  119.     options.no_permissions = 1;
  120.     break;
  121.   case KEY_DIRECTIO:
  122.     options.direct_io = 1;
  123.     break;
  124.   case KEY_BIGWRITES:
  125. #ifdef FUSE_CAP_BIG_WRITES
  126.     fuse_opt_add_arg(outargs, "-obig_writes");
  127. #endif
  128.     break;
  129.   default: {
  130.     // try and see if the arg is a URI for DFS
  131.     int tmp_port;
  132.     char tmp_server[1024];
  133.     if (!sscanf(arg,"dfs://%1024[a-zA-Z0-9_.-]:%d",tmp_server,&tmp_port)) {
  134.       if (strcmp(arg,"ro") == 0) {
  135.         options.read_only = 1;
  136.       } else if (strcmp(arg,"rw") == 0) {
  137.         options.read_only = 0;
  138.       } else {
  139.         fprintf(stderr,"fuse-dfs didn't recognize %s,%dn",arg,key);
  140.         fuse_opt_add_arg(outargs,arg);
  141.         return 0;
  142.       }
  143.     } else {
  144.       options.port = tmp_port;
  145.       options.server = strdup(tmp_server);
  146.       fprintf(stderr, "port=%d,server=%sn", options.port, options.server);
  147.     }
  148.   }
  149.   }
  150.   return 0;
  151. }