Пример #1
0
void setoption(const char *sect_name, const char *key, union val val, int tp)
{
	struct sect *s = addsect(sect_name);
	struct option *o;
	if (tp==0 || tp==1 && !val.str[3]) {
		o = s->opts;
		while (o) {
			if (!strcmp(key, opt_key(o))) {
				o->val = val;
				o->tp_key[0] = tp;
				rmopt(key, o);
				return;
			}
			o = o->next;
		}
	}
	addopt(key, val, tp, s);
	rmopt(key, s->opts);
}
Пример #2
0
cmdopts_t *cmdopts_parse(int argc, char **argv)
{

	typedef enum {
		CMDOPT_HELP = 0,
		CMDOPT_VERBOSE,
		CMDOPT_INFILE,
		CMDOPT_INFMT,
		CMDOPT_INOPT,
		CMDOPT_OUTFILE,
		CMDOPT_OUTFMT,
		CMDOPT_OUTOPT,
		CMDOPT_VERSION,
		CMDOPT_DEBUG,
		CMDOPT_CMPTNO,
		CMDOPT_SRGB
	} cmdoptid_t;

	static jas_opt_t cmdoptions[] = {
		{CMDOPT_HELP, "help", 0},
		{CMDOPT_VERBOSE, "verbose", 0},
		{CMDOPT_INFILE, "input", JAS_OPT_HASARG},
		{CMDOPT_INFILE, "f", JAS_OPT_HASARG},
		{CMDOPT_INFMT, "input-format", JAS_OPT_HASARG},
		{CMDOPT_INFMT, "t", JAS_OPT_HASARG},
		{CMDOPT_INOPT, "input-option", JAS_OPT_HASARG},
		{CMDOPT_INOPT, "o", JAS_OPT_HASARG},
		{CMDOPT_OUTFILE, "output", JAS_OPT_HASARG},
		{CMDOPT_OUTFILE, "F", JAS_OPT_HASARG},
		{CMDOPT_OUTFMT, "output-format", JAS_OPT_HASARG},
		{CMDOPT_OUTFMT, "T", JAS_OPT_HASARG},
		{CMDOPT_OUTOPT, "output-option", JAS_OPT_HASARG},
		{CMDOPT_OUTOPT, "O", JAS_OPT_HASARG},
		{CMDOPT_VERSION, "version", 0},
		{CMDOPT_DEBUG, "debug-level", JAS_OPT_HASARG},
		{CMDOPT_CMPTNO, "cmptno", JAS_OPT_HASARG},
		{CMDOPT_SRGB, "force-srgb", 0},
		{CMDOPT_SRGB, "S", 0},
		{-1, 0, 0}
	};

	cmdopts_t *cmdopts;
	int c;

	if (!(cmdopts = malloc(sizeof(cmdopts_t)))) {
		jas_eprintf("error: insufficient memory\n");
		exit(EXIT_FAILURE);
	}

	cmdopts->infile = 0;
	cmdopts->infmt = -1;
	cmdopts->inopts = 0;
	cmdopts->inoptsbuf[0] = '\0';
	cmdopts->outfile = 0;
	cmdopts->outfmt = -1;
	cmdopts->outopts = 0;
	cmdopts->outoptsbuf[0] = '\0';
	cmdopts->verbose = 0;
	cmdopts->version = 0;
	cmdopts->cmptno = -1;
	cmdopts->debug = 0;
	cmdopts->srgb = 0;

	while ((c = jas_getopt(argc, argv, cmdoptions)) != EOF) {
		switch (c) {
		case CMDOPT_HELP:
			cmdusage();
			break;
		case CMDOPT_VERBOSE:
			cmdopts->verbose = 1;
			break;
		case CMDOPT_VERSION:
			cmdopts->version = 1;
			break;
		case CMDOPT_DEBUG:
			cmdopts->debug = atoi(jas_optarg);
			break;
		case CMDOPT_INFILE:
			cmdopts->infile = jas_optarg;
			break;
		case CMDOPT_INFMT:
			if ((cmdopts->infmt = jas_image_strtofmt(jas_optarg)) < 0) {
				jas_eprintf("warning: ignoring invalid input format %s\n",
				  jas_optarg);
				cmdopts->infmt = -1;
			}
			break;
		case CMDOPT_INOPT:
			addopt(cmdopts->inoptsbuf, OPTSMAX, jas_optarg);
			cmdopts->inopts = cmdopts->inoptsbuf;
			break;
		case CMDOPT_OUTFILE:
			cmdopts->outfile = jas_optarg;
			break;
		case CMDOPT_OUTFMT:
			if ((cmdopts->outfmt = jas_image_strtofmt(jas_optarg)) < 0) {
				jas_eprintf("error: invalid output format %s\n", jas_optarg);
				badusage();
			}
			break;
		case CMDOPT_OUTOPT:
			addopt(cmdopts->outoptsbuf, OPTSMAX, jas_optarg);
			cmdopts->outopts = cmdopts->outoptsbuf;
			break;
		case CMDOPT_CMPTNO:
			cmdopts->cmptno = atoi(jas_optarg);
			break;
		case CMDOPT_SRGB:
			cmdopts->srgb = 1;
			break;
		default:
			badusage();
			break;
		}
	}

	while (jas_optind < argc) {
		jas_eprintf(
		  "warning: ignoring bogus command line argument %s\n",
		  argv[jas_optind]);
		++jas_optind;
	}

	if (cmdopts->version) {
		goto done;
	}

	if (cmdopts->outfmt < 0 && cmdopts->outfile) {
		if ((cmdopts->outfmt = jas_image_fmtfromname(cmdopts->outfile)) < 0) {
			jas_eprintf(
			  "error: cannot guess image format from output file name\n");
		}
	}

	if (cmdopts->outfmt < 0) {
		jas_eprintf("error: no output format specified\n");
		badusage();
	}

done:
	return cmdopts;
}
Пример #3
0
/**
 * Starts the program
 *
 * \param argc The number of args
 * \param argv The arg array
 * \returns 0 for success, -1 on error
 */
int main(int argc, char *argv[])
{
  FILE_UID = getuid();
  FILE_GID = getgid();

  int newargc = 0;
  char **newargv = NULL;

  addopt(&newargc, &newargv, argv[0]);
  // Always add -s (single threaded)
  addopt(&newargc, &newargv, "-s");
  addopt(&newargc, &newargv, "-oallow_other");

  int opt;
  char *ptr = NULL;

  while ((opt = getopt(argc, argv, "o:df")) != -1)
  {
    switch (opt)
    {
    case 'o':
      ptr = strtok(optarg, ",");
      while (ptr != NULL)
      {
        if (strncasecmp(ptr, INPUT_FILE_OPTION_NAME "=", strlen(INPUT_FILE_OPTION_NAME "=")) == 0)
        {
          if (mappedFile != NULL)
          {
            printf("Can't specify more than one '%s=' option\n", INPUT_FILE_OPTION_NAME);
            printUsage(argv[0]);
            return -1;
          }
          ptr += strlen(INPUT_FILE_OPTION_NAME "=");

          mappedFile = fopen(ptr, "rb");
          if (mappedFile == NULL)
          {
            perror(ptr);
            return -1;
          }
          fseeko(mappedFile, 0, SEEK_END);
          mappedFile_size = ftello(mappedFile);
        } else if (strncasecmp(ptr, LOG_FILE_OPTION_NAME "=", strlen(LOG_FILE_OPTION_NAME "=")) == 0)
        {
          if (flog != NULL)
          {
            printf("Can't specify more than one '%s=' option\n", LOG_FILE_OPTION_NAME);
            printUsage(argv[0]);
            return -1;
          }
          ptr += strlen(LOG_FILE_OPTION_NAME "=");
          flog = fopen(ptr, "ab");
          if (flog == NULL)
          {
            perror(ptr);
            return -1;
          }
          struct timeval tv;

          gettimeofday(&tv, NULL);
          fprintf(flog, "===== Log started at %ld.%06ld =====\n", tv.tv_sec, tv.tv_usec);
        } else
        {
          addopt(&newargc, &newargv, "-o");
          addopt(&newargc, &newargv, ptr);
        }

        ptr = strtok(NULL, ",");
      }

      break;
    case 'd':
      addopt(&newargc, &newargv, "-d");
      addopt(&newargc, &newargv, "-o");
      addopt(&newargc, &newargv, "debug");
      break;
    case 'f':
      addopt(&newargc, &newargv, "-f");
      break;
    default:
      printUsage(argv[0]);
      return -1;
    }
  }
  if (optind >= argc)
  {
    printf("Missing mountpoint\n");
    printUsage(argv[0]);
    return -1;
  }

  if (mappedFile == NULL)
  {
    printf("Input file not provided\n");
    printUsage(argv[0]);
    return -1;
  }

  addopt(&newargc, &newargv, argv[optind]);

  // -s single threaded
  // -d -o debug (enable debug mode)
  // -f foreground
  int ret = fuse_main(newargc, newargv, &fop, NULL);

  int i;

  for (i = 0; i < newargc; i++)
  {
    g_free(newargv[i]);
  }
  g_free(newargv);

  return ret;
}