static void do_help(User * u) { const char *cmd; cmd = strtok(NULL, " "); notice_help(s_OperServ, u, OPER_HELP_START); if (!cmd) { notice_help(s_OperServ, u, OPER_HELP); } else { help_cmd(s_OperServ, u, cmds, cmd); } notice_help(s_OperServ, u, OPER_HELP_END); }
static void help_command (char *command, int from_tty) { help_cmd (command, gdb_stdout); }
static int cmd_help(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) { FAR const char *cmd = NULL; #ifndef CONFIG_NSH_HELP_TERSE bool verbose = false; int i; #endif /* The command may be followed by a verbose option */ #ifndef CONFIG_NSH_HELP_TERSE i = 1; if (argc > i) { if (strcmp(argv[i], "-v") == 0) { verbose = true; i++; } } /* The command line may end with a command name */ if (argc > i) { cmd = argv[i]; } /* Show the generic usage if verbose is requested */ if (verbose) { help_usage(vtbl); } #else if (argc > 1) { cmd = argv[1]; } #endif /* Are we showing help on a single command? */ if (cmd) { /* Yes.. show the single command */ help_cmd(vtbl, cmd); } else { /* In verbose mode, show detailed help for all commands */ #ifndef CONFIG_NSH_HELP_TERSE if (verbose) { nsh_output(vtbl, "Where <cmd> is one of:\n"); help_allcmds(vtbl); } /* Otherwise, just show the list of command names */ else #endif { help_cmd(vtbl, "help"); nsh_output(vtbl, "\n"); help_cmdlist(vtbl); } /* And show the list of built-in applications */ help_builtins(vtbl); } return OK; }
int main(int argc, const char **argv) { svn_error_t *err = SVN_NO_ERROR; const svn_opt_subcommand_desc2_t *subcommand = NULL; opt_baton_t *opt_baton; svn_revnum_t latest_revision = SVN_INVALID_REVNUM; apr_pool_t *pool = NULL; const char *config_dir = NULL; const char *username = NULL; const char *password = NULL; svn_boolean_t no_auth_cache = FALSE; svn_boolean_t trust_server_cert = FALSE; svn_boolean_t non_interactive = FALSE; apr_array_header_t *config_options = NULL; apr_getopt_t *os; const char *first_arg; apr_array_header_t *received_opts; apr_allocator_t *allocator; int i; if (svn_cmdline_init ("svnrdump", stderr) != EXIT_SUCCESS) return EXIT_FAILURE; /* Create our top-level pool. Use a separate mutexless allocator, * given this application is single threaded. */ if (apr_allocator_create(&allocator)) return EXIT_FAILURE; apr_allocator_max_free_set(allocator, SVN_ALLOCATOR_RECOMMENDED_MAX_FREE); pool = svn_pool_create_ex(NULL, allocator); apr_allocator_owner_set(allocator, pool); opt_baton = apr_pcalloc(pool, sizeof(*opt_baton)); opt_baton->start_revision.kind = svn_opt_revision_unspecified; opt_baton->end_revision.kind = svn_opt_revision_unspecified; opt_baton->url = NULL; SVNRDUMP_ERR(svn_cmdline__getopt_init(&os, argc, argv, pool)); os->interleave = TRUE; /* Options and arguments can be interleaved */ /* Set up our cancellation support. */ apr_signal(SIGINT, signal_handler); #ifdef SIGBREAK /* SIGBREAK is a Win32 specific signal generated by ctrl-break. */ apr_signal(SIGBREAK, signal_handler); #endif #ifdef SIGHUP apr_signal(SIGHUP, signal_handler); #endif #ifdef SIGTERM apr_signal(SIGTERM, signal_handler); #endif #ifdef SIGPIPE /* Disable SIGPIPE generation for the platforms that have it. */ apr_signal(SIGPIPE, SIG_IGN); #endif #ifdef SIGXFSZ /* Disable SIGXFSZ generation for the platforms that have it, otherwise * working with large files when compiled against an APR that doesn't have * large file support will crash the program, which is uncool. */ apr_signal(SIGXFSZ, SIG_IGN); #endif received_opts = apr_array_make(pool, SVN_OPT_MAX_OPTIONS, sizeof(int)); while (1) { int opt; const char *opt_arg; apr_status_t status = apr_getopt_long(os, svnrdump__options, &opt, &opt_arg); if (APR_STATUS_IS_EOF(status)) break; if (status != APR_SUCCESS) { SVNRDUMP_ERR(usage(argv[0], pool)); exit(EXIT_FAILURE); } /* Stash the option code in an array before parsing it. */ APR_ARRAY_PUSH(received_opts, int) = opt; switch(opt) { case 'r': { /* Make sure we've not seen -r already. */ if (opt_baton->start_revision.kind != svn_opt_revision_unspecified) { err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL, _("Multiple revision arguments " "encountered; try '-r N:M' instead " "of '-r N -r M'")); return svn_cmdline_handle_exit_error(err, pool, "svnrdump: "); } /* Parse the -r argument. */ if (svn_opt_parse_revision(&(opt_baton->start_revision), &(opt_baton->end_revision), opt_arg, pool) != 0) { const char *utf8_opt_arg; err = svn_utf_cstring_to_utf8(&utf8_opt_arg, opt_arg, pool); if (! err) err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, NULL, _("Syntax error in revision " "argument '%s'"), utf8_opt_arg); return svn_cmdline_handle_exit_error(err, pool, "svnrdump: "); } } break; case 'q': opt_baton->quiet = TRUE; break; case opt_config_dir: config_dir = opt_arg; break; case opt_version: opt_baton->version = TRUE; break; case 'h': opt_baton->help = TRUE; break; case opt_auth_username: SVNRDUMP_ERR(svn_utf_cstring_to_utf8(&username, opt_arg, pool)); break; case opt_auth_password: SVNRDUMP_ERR(svn_utf_cstring_to_utf8(&password, opt_arg, pool)); break; case opt_auth_nocache: no_auth_cache = TRUE; break; case opt_non_interactive: non_interactive = TRUE; break; case opt_incremental: opt_baton->incremental = TRUE; break; case opt_trust_server_cert: trust_server_cert = TRUE; break; case opt_config_option: if (!config_options) config_options = apr_array_make(pool, 1, sizeof(svn_cmdline__config_argument_t*)); SVNRDUMP_ERR(svn_utf_cstring_to_utf8(&opt_arg, opt_arg, pool)); SVNRDUMP_ERR(svn_cmdline__parse_config_option(config_options, opt_arg, pool)); } } if (opt_baton->help) { subcommand = svn_opt_get_canonical_subcommand2(svnrdump__cmd_table, "help"); } if (subcommand == NULL) { if (os->ind >= os->argc) { if (opt_baton->version) { /* Use the "help" subcommand to handle the "--version" option. */ static const svn_opt_subcommand_desc2_t pseudo_cmd = { "--version", help_cmd, {0}, "", { opt_version, /* must accept its own option */ 'q', /* --quiet */ } }; subcommand = &pseudo_cmd; } else { SVNRDUMP_ERR(help_cmd(NULL, NULL, pool)); svn_pool_destroy(pool); exit(EXIT_FAILURE); } } else { first_arg = os->argv[os->ind++]; subcommand = svn_opt_get_canonical_subcommand2(svnrdump__cmd_table, first_arg); if (subcommand == NULL) { const char *first_arg_utf8; err = svn_utf_cstring_to_utf8(&first_arg_utf8, first_arg, pool); if (err) return svn_cmdline_handle_exit_error(err, pool, "svnrdump: "); svn_error_clear(svn_cmdline_fprintf(stderr, pool, _("Unknown command: '%s'\n"), first_arg_utf8)); SVNRDUMP_ERR(help_cmd(NULL, NULL, pool)); svn_pool_destroy(pool); exit(EXIT_FAILURE); } } } /* Check that the subcommand wasn't passed any inappropriate options. */ for (i = 0; i < received_opts->nelts; i++) { int opt_id = APR_ARRAY_IDX(received_opts, i, int); /* All commands implicitly accept --help, so just skip over this when we see it. Note that we don't want to include this option in their "accepted options" list because it would be awfully redundant to display it in every commands' help text. */ if (opt_id == 'h' || opt_id == '?') continue; if (! svn_opt_subcommand_takes_option3(subcommand, opt_id, NULL)) { const char *optstr; const apr_getopt_option_t *badopt = svn_opt_get_option_from_code2(opt_id, svnrdump__options, subcommand, pool); svn_opt_format_option(&optstr, badopt, FALSE, pool); if (subcommand->name[0] == '-') SVN_INT_ERR(help_cmd(NULL, NULL, pool)); else svn_error_clear(svn_cmdline_fprintf( stderr, pool, _("Subcommand '%s' doesn't accept option '%s'\n" "Type 'svnrdump help %s' for usage.\n"), subcommand->name, optstr, subcommand->name)); svn_pool_destroy(pool); return EXIT_FAILURE; } } if (subcommand && strcmp(subcommand->name, "--version") == 0) { SVNRDUMP_ERR(version(argv[0], opt_baton->quiet, pool)); svn_pool_destroy(pool); exit(EXIT_SUCCESS); } if (subcommand && strcmp(subcommand->name, "help") == 0) { SVNRDUMP_ERR(help_cmd(os, opt_baton, pool)); svn_pool_destroy(pool); exit(EXIT_SUCCESS); } /* --trust-server-cert can only be used with --non-interactive */ if (trust_server_cert && !non_interactive) { err = svn_error_create(SVN_ERR_CL_ARG_PARSING_ERROR, NULL, _("--trust-server-cert requires " "--non-interactive")); return svn_cmdline_handle_exit_error(err, pool, "svnrdump: "); } /* Expect one more non-option argument: the repository URL. */ if (os->ind != os->argc - 1) { SVNRDUMP_ERR(usage(argv[0], pool)); svn_pool_destroy(pool); exit(EXIT_FAILURE); } else { const char *repos_url; SVNRDUMP_ERR(svn_utf_cstring_to_utf8(&repos_url, os->argv[os->ind], pool)); if (! svn_path_is_url(repos_url)) { err = svn_error_createf(SVN_ERR_CL_ARG_PARSING_ERROR, 0, "Target '%s' is not a URL", repos_url); SVNRDUMP_ERR(err); svn_pool_destroy(pool); exit(EXIT_FAILURE); } opt_baton->url = svn_uri_canonicalize(repos_url, pool); } SVNRDUMP_ERR(init_client_context(&(opt_baton->ctx), non_interactive, username, password, config_dir, no_auth_cache, trust_server_cert, config_options, pool)); SVNRDUMP_ERR(svn_client_open_ra_session(&(opt_baton->session), opt_baton->url, opt_baton->ctx, pool)); /* Have sane opt_baton->start_revision and end_revision defaults if unspecified. */ SVNRDUMP_ERR(svn_ra_get_latest_revnum(opt_baton->session, &latest_revision, pool)); /* Make sure any provided revisions make sense. */ SVNRDUMP_ERR(validate_and_resolve_revisions(opt_baton, latest_revision, pool)); /* Dispatch the subcommand */ SVNRDUMP_ERR((*subcommand->cmd_func)(os, opt_baton, pool)); svn_pool_destroy(pool); return EXIT_SUCCESS; }
int execute_line(const char *buf) { char args[4096]; char *argv[16]; int argc; int len; int ret = 0; len = strlen(buf); if(len > 0) { char redir[PATH_MAX]; int type; int binlen = parse_cli(buf, args, &argc, argv, 16, g_context.sargc, g_context.sargv, &type, redir); if((binlen > 0) && (args[0] != '#')) { if(strchr(argv[0], '.') || strchr(argv[0], '/')) { int ldlen = strlen("ld")+1; /* If this looks to be a path then prefix ld and send */ memmove(args+ldlen, args, binlen); memcpy(args, "ld", ldlen); binlen += ldlen; } else { const struct sh_command *cmd = find_command(argv[0]); if((cmd) && (cmd->func)) { if(cmd->min_args > (argc-1)) { help_cmd(argc, argv); return 0; } else { if(!cmd->func(argc-1, argv+1)) { /* If it returns 0 then dont continue with the output */ return 0; } } } } if(!g_context.args.script) { /* Remove the handler and prompt */ rl_callback_handler_remove(); rl_callback_handler_install("", cli_handler); } if(type != REDIR_TYPE_NONE) { if(type == REDIR_TYPE_NEW) { g_context.fredir = fopen(redir, "w"); } else { g_context.fredir = fopen(redir, "a"); } if(g_context.fredir == NULL) { fprintf(stderr, "Warning: Could not open file %s\n", redir); } } len = fixed_write(g_context.sock, args, binlen); if(len < 0) { close(g_context.sock); g_context.sock = -1; return -1; } strcpy(g_context.currcmd, args); ret = 1; } } return ret; }
static void bosh_help_command (char *command, int from_tty) { help_cmd (command, NULL); }