X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=bacula%2Fsrc%2Fdird%2Fua_input.c;h=39c4e33ebff8582d8e82da27b91d9ab737cb3900;hb=b8b2ed2a6db4fb8436647d438185a364951375fc;hp=13d7d3f6fd34e0c12c54f48c4f2ab540211fe6f1;hpb=253f7da0668e69f8a37b49245f99195881120f41;p=bacula%2Fbacula diff --git a/bacula/src/dird/ua_input.c b/bacula/src/dird/ua_input.c index 13d7d3f6fd..39c4e33ebf 100644 --- a/bacula/src/dird/ua_input.c +++ b/bacula/src/dird/ua_input.c @@ -55,23 +55,80 @@ int get_cmd(UAContext *ua, char *prompt) if (is_bnet_stop(sock)) { return 0; /* error or terminate */ } - ua->cmd = check_pool_memory_size(ua->cmd, sock->msglen+1); - bstrncpy(ua->cmd, sock->msg, sock->msglen+1); + pm_strcpy(&ua->cmd, sock->msg); strip_trailing_junk(ua->cmd); if (strcmp(ua->cmd, ".messages") == 0) { qmessagescmd(ua, ua->cmd); } - /* ****FIXME**** if .command, go off and do it. For now ignore it. */ - if (ua->cmd[0] == '.' && ua->cmd[1] != 0) { - continue; /* dot command */ + /* Lone dot => break */ + if (ua->cmd[0] == '.' && ua->cmd[1] == 0) { + return 0; } - /* Lone dot => break or actual response */ break; } return 1; } +/* + * Get a positive integer + * Returns: 0 if failure + * 1 if success => value in ua->pint32_val + */ +int get_pint(UAContext *ua, char *prompt) +{ + double dval; + ua->pint32_val = 0; + for (;;) { + if (!get_cmd(ua, prompt)) { + return 0; + } + if (!is_a_number(ua->cmd)) { + bsendmsg(ua, "Expected a positive integer, got: %s\n", ua->cmd); + continue; + } + errno = 0; + dval = strtod(ua->cmd, NULL); + if (errno != 0 || dval < 0) { + bsendmsg(ua, "Expected a positive integer, got: %s\n", ua->cmd); + continue; + } + ua->pint32_val = (uint32_t)dval; + return 1; + } +} + +/* + * Gets a yes or no response + * Returns: 0 if failure + * 1 if success => ua->pint32_val == 1 for yes + * ua->pint32_val == 0 for no + */ +int get_yesno(UAContext *ua, char *prompt) +{ + int len; + + ua->pint32_val = 0; + for (;;) { + if (!get_cmd(ua, prompt)) { + return 0; + } + len = strlen(ua->cmd); + if (len < 1 || len > 3) { + continue; + } + if (strncasecmp(ua->cmd, _("yes"), len) == 0) { + ua->pint32_val = 1; + return 1; + } + if (strncasecmp(ua->cmd, _("no"), len) == 0) { + return 1; + } + bsendmsg(ua, _("Invalid response. You must answer yes or no.\n")); + } +} + + void parse_ua_args(UAContext *ua) { - return parse_command_args(ua->cmd, ua->args, &ua->argc, ua->argk, ua->argv); + parse_args(ua->cmd, &ua->args, &ua->argc, ua->argk, ua->argv, MAX_CMD_ARGS); }