static int parse_options (int argc, char *argv[], bool has_connection) { uint16_t port = GLUSTER_DEFAULT_PORT; int ret = -1; int opt = 0; int option_index = 0; struct xlator_option *option; // Reset getopt since other utilities may have called it already. optind = 0; while (true) { opt = getopt_long (argc, argv, "fro:p:", long_options, &option_index); if (opt == -1) { break; } switch (opt) { case 'd': state->debug = true; break; case 'f': state->force = true; break; case 'o': option = parse_xlator_option (optarg); if (option == NULL) { error (0, errno, "%s", optarg); goto err; } if (append_xlator_option (&state->xlator_options, option) == -1) { error (0, errno, "append_xlator_option: %s", optarg); goto err; } break; case 'p': port = strtoport (optarg); if (port == 0) { goto out; } break; case 'r': state->directory = true; break; case 'v': printf ("%s (%s) %s\n%s\n%s\n%s\n", program_invocation_name, PACKAGE_NAME, PACKAGE_VERSION, COPYRIGHT, LICENSE, AUTHORS); ret = -2; goto out; case 'x': usage (); ret = -2; goto out; default: goto err; } } if ((argc - option_index) < 2) { error (0, 0, "missing operand"); goto err; } else { // state->url is free'd in do_rm() state->url = strdup (argv[argc - 1]); if (state->url == NULL) { error (0, errno, "strdup"); goto out; } // state->gluster_url is free'd in do_rm() if (has_connection) { state->gluster_url = gluster_url_init (); if (state->gluster_url == NULL) { error (0, errno, "gluster_url_init"); goto out; } state->gluster_url->path = strdup (argv[argc - 1]); if (state->gluster_url->path == NULL) { error (0, errno, "strdup"); goto out; } ret = 0; goto out; } ret = gluster_parse_url (argv[argc - 1], &(state->gluster_url)); if (ret == -1) { error (0, EINVAL, "%s", state->url); goto err; } state->gluster_url->port = port; } goto out; err: error (0, 0, "Try --help for more information."); out: return ret; }
static int parse_options (int argc, char *argv[], bool has_connection) { uint16_t port = GLUSTER_DEFAULT_PORT; int ret = -1; int opt = 0; int option_index = 0; struct xlator_option *option; // Reset getopt since other utilities may have called it already. optind = 0; while (true) { opt = getopt_long (argc, argv, "do:p:rvx", long_options, &option_index); if (opt == -1) { break; } switch (opt) { case 'd': state->debug = true; break; case 'o': option = parse_xlator_option (optarg); if (option == NULL) { error (0, errno, "%s", optarg); goto err; } if (append_xlator_option (&state->xlator_options, option) == -1) { error (0, errno, "append_xlator_option: %s", optarg); goto err; } break; case 'p': port = strtoport (optarg); if (port == 0) { goto err; } break; case 'r': state->parents = true; break; case 'v': printf ("%s (%s) %s\n%s\n%s\n%s\n", program_invocation_name, PACKAGE_NAME, PACKAGE_VERSION, COPYRIGHT, LICENSE, AUTHORS); ret = -2; goto out; case 'x': usage (); ret = -2; goto out; default: goto err; } } if ((argc - option_index) < 2) { error (0, 0, "missing operand"); goto err; } else { state->url = strdup (argv[argc - 1]); if (state->url == NULL) { error (0, errno, "strdup"); goto out; } if (has_connection) { state->gluster_url = gluster_url_init (); if (state->gluster_url == NULL) { error (0, errno, "gluster_url_init"); goto out; } state->gluster_url->path = strdup (argv[argc - 1]); if (state->gluster_url->path == NULL) { error (0, errno, "strdup"); goto out; } ret = 0; goto out; } ret = gluster_parse_url (argv[argc - 1], &(state->gluster_url)); if (ret == -1) { error (0, EINVAL, "%s", state->url); goto err; } state->gluster_url->port = port; // gluster_create_path will not create // the last directory in a path if that path does not // include a trailing slash ('/'), so add one if it does not // exist. char *path = state->gluster_url->path; if (path[strlen (path) - 1] != '/') { strncat (path, "/", strlen (path) + 2); } } goto out; err: error (0, 0, "Try --help for more information."); out: return ret; }