Lines Matching +full:- +full:p
4 * Copyright (c) 2003-2004 Fabrice Bellard
27 #include "hw/qdev-core.h"
28 #include "monitor-internal.h"
32 #include "qemu/config-file.h"
38 #include "system/block-backend.h"
46 monitor_suspend(&mon->common); in monitor_command_cb()
48 monitor_resume(&mon->common); in monitor_command_cb()
53 if (!mon->rs) { in monitor_read_command()
57 readline_start(mon->rs, "(qemu) ", 0, monitor_command_cb, NULL); in monitor_read_command()
59 readline_show_prompt(mon->rs); in monitor_read_command()
66 if (mon->rs) { in monitor_read_password()
67 readline_start(mon->rs, "Password: ", 1, readline_func, opaque); in monitor_read_password()
71 monitor_printf(&mon->common, in monitor_read_password()
73 return -ENOTTY; in monitor_read_password()
79 const char *p; in get_str() local
84 p = *pp; in get_str()
85 while (qemu_isspace(*p)) { in get_str()
86 p++; in get_str()
88 if (*p == '\0') { in get_str()
91 *pp = p; in get_str()
92 return -1; in get_str()
94 if (*p == '\"') { in get_str()
95 p++; in get_str()
96 while (*p != '\0' && *p != '\"') { in get_str()
97 if (*p == '\\') { in get_str()
98 p++; in get_str()
99 c = *p++; in get_str()
115 if ((q - buf) < buf_size - 1) { in get_str()
119 if ((q - buf) < buf_size - 1) { in get_str()
120 *q++ = *p; in get_str()
122 p++; in get_str()
125 if (*p != '\"') { in get_str()
129 p++; in get_str()
131 while (*p != '\0' && !qemu_isspace(*p)) { in get_str()
132 if ((q - buf) < buf_size - 1) { in get_str()
133 *q++ = *p; in get_str()
135 p++; in get_str()
139 *pp = p; in get_str()
173 const char *p; in parse_cmdline() local
177 p = cmdline; in parse_cmdline()
180 while (qemu_isspace(*p)) { in parse_cmdline()
181 p++; in parse_cmdline()
183 if (*p == '\0') { in parse_cmdline()
189 ret = get_str(buf, sizeof(buf), &p); in parse_cmdline()
201 return -1; in parse_cmdline()
209 if (!cmd->flags) { in cmd_can_preconfig()
213 return strchr(cmd->flags, 'p'); in cmd_can_preconfig()
235 monitor_printf(mon, "%s %s -- %s\n", cmd->name, cmd->params, cmd->help); in help_cmd_dump_one()
247 for (cmd = cmds; cmd->name != NULL; cmd++) { in help_cmd_dump()
254 for (cmd = cmds; cmd->name != NULL; cmd++) { in help_cmd_dump()
255 if (hmp_compare_cmd(args[arg_index], cmd->name) && in help_cmd_dump()
257 if (cmd->sub_table) { in help_cmd_dump()
259 help_cmd_dump(mon, cmd->sub_table, in help_cmd_dump()
286 monitor_printf(mon, "%-15s %s\n", "none", "remove all logs"); in hmp_help_cmd()
287 for (item = qemu_log_items; item->mask != 0; item++) { in hmp_help_cmd()
288 monitor_printf(mon, "%-15s %s\n", item->name, item->help); in hmp_help_cmd()
340 char *p; in expr_unary() local
348 case '-': in expr_unary()
350 n = -expr_unary(mon); in expr_unary()
387 if ((q - buf) < sizeof(buf) - 1) { in expr_unary()
409 n = strtoull(pch, &p, 0); in expr_unary()
413 if (pch == p) { in expr_unary()
414 expr_error(mon, "invalid char '%c' in expression", *p); in expr_unary()
416 pch = p; in expr_unary()
496 if (op != '+' && op != '-') { in expr_sum()
504 val -= val2; in expr_sum()
515 return -1; in get_expr()
527 const char *p = *pp; in get_double() local
531 d = strtod(p, &tailp); in get_double()
532 if (tailp == p) { in get_double()
534 return -1; in get_double()
536 if (d != d || d - d != 0) { in get_double()
539 return -1; in get_double()
547 * Store the command-name in cmdname, and return a pointer to
554 const char *p, *pstart; in get_command_name() local
556 p = cmdline; in get_command_name()
557 while (qemu_isspace(*p)) { in get_command_name()
558 p++; in get_command_name()
560 if (*p == '\0') { in get_command_name()
563 pstart = p; in get_command_name()
564 while (*p != '\0' && *p != '/' && !qemu_isspace(*p)) { in get_command_name()
565 p++; in get_command_name()
567 len = p - pstart; in get_command_name()
568 if (len > nlen - 1) { in get_command_name()
569 len = nlen - 1; in get_command_name()
573 return p; in get_command_name()
583 char *p, *str; in key_get_info() local
589 p = strchr(type, ':'); in key_get_info()
590 if (!p) { in key_get_info()
594 len = p - type; in key_get_info()
601 return ++p; in key_get_info()
611 option[0] = '-'; in is_valid_option()
624 for (cmd = disp_table; cmd->name != NULL; cmd++) { in search_dispatch_table()
625 if (hmp_compare_cmd(cmdname, cmd->name)) { in search_dispatch_table()
641 * the command is found in a sub-command table.
648 Monitor *mon = &hmp_mon->common; in monitor_parse_command()
649 const char *p; in monitor_parse_command() local
654 p = get_command_name(*cmdp, cmdname, sizeof(cmdname)); in monitor_parse_command()
655 if (!p) { in monitor_parse_command()
662 (int)(p - cmdp_start), cmdp_start); in monitor_parse_command()
668 (int)(p - cmdp_start), cmdp_start); in monitor_parse_command()
673 while (qemu_isspace(*p)) { in monitor_parse_command()
674 p++; in monitor_parse_command()
677 *cmdp = p; in monitor_parse_command()
679 if (cmd->sub_table != NULL && *p != '\0') { in monitor_parse_command()
680 return monitor_parse_command(hmp_mon, cmdp_start, cmdp, cmd->sub_table); in monitor_parse_command()
699 const char *p = *endp; in monitor_parse_arguments() local
704 typestr = cmd->args_type; in monitor_parse_arguments()
719 while (qemu_isspace(*p)) { in monitor_parse_arguments()
720 p++; in monitor_parse_arguments()
724 if (*p == '\0') { in monitor_parse_arguments()
729 ret = get_str(buf, sizeof(buf), &p); in monitor_parse_arguments()
734 cmd->name); in monitor_parse_arguments()
738 cmd->name); in monitor_parse_arguments()
741 monitor_printf(mon, "%s: string expected\n", cmd->name); in monitor_parse_arguments()
755 if (!opts_list || opts_list->desc->name) { in monitor_parse_arguments()
758 while (qemu_isspace(*p)) { in monitor_parse_arguments()
759 p++; in monitor_parse_arguments()
761 if (!*p) { in monitor_parse_arguments()
764 if (get_str(buf, sizeof(buf), &p) < 0) { in monitor_parse_arguments()
779 while (qemu_isspace(*p)) { in monitor_parse_arguments()
780 p++; in monitor_parse_arguments()
782 if (*p == '/') { in monitor_parse_arguments()
784 p++; in monitor_parse_arguments()
786 if (qemu_isdigit(*p)) { in monitor_parse_arguments()
788 while (qemu_isdigit(*p)) { in monitor_parse_arguments()
789 count = count * 10 + (*p - '0'); in monitor_parse_arguments()
790 p++; in monitor_parse_arguments()
793 size = -1; in monitor_parse_arguments()
794 format = -1; in monitor_parse_arguments()
796 switch (*p) { in monitor_parse_arguments()
803 format = *p++; in monitor_parse_arguments()
807 p++; in monitor_parse_arguments()
811 p++; in monitor_parse_arguments()
815 p++; in monitor_parse_arguments()
820 p++; in monitor_parse_arguments()
827 if (*p != '\0' && !qemu_isspace(*p)) { in monitor_parse_arguments()
829 *p); in monitor_parse_arguments()
836 /* for 'i', not specifying a size gives -1 as size */ in monitor_parse_arguments()
849 size = -1; in monitor_parse_arguments()
863 while (qemu_isspace(*p)) { in monitor_parse_arguments()
864 p++; in monitor_parse_arguments()
868 if (*p == '\0') { in monitor_parse_arguments()
873 if (*p == '.') { in monitor_parse_arguments()
874 p++; in monitor_parse_arguments()
875 while (qemu_isspace(*p)) { in monitor_parse_arguments()
876 p++; in monitor_parse_arguments()
885 if (get_expr(mon, &val, &p)) { in monitor_parse_arguments()
888 /* Check if 'i' is greater than 32-bit */ in monitor_parse_arguments()
890 monitor_printf(mon, "\'%s\' has failed: ", cmd->name); in monitor_parse_arguments()
891 monitor_printf(mon, "integer is for 32-bit values\n"); in monitor_parse_arguments()
909 while (qemu_isspace(*p)) { in monitor_parse_arguments()
910 p++; in monitor_parse_arguments()
914 if (*p == '\0') { in monitor_parse_arguments()
918 ret = qemu_strtosz_MiB(p, &end, &val); in monitor_parse_arguments()
924 p = end; in monitor_parse_arguments()
931 while (qemu_isspace(*p)) { in monitor_parse_arguments()
932 p++; in monitor_parse_arguments()
936 if (*p == '\0') { in monitor_parse_arguments()
940 if (get_double(mon, &val, &p) < 0) { in monitor_parse_arguments()
943 if (p[0] && p[1] == 's') { in monitor_parse_arguments()
944 switch (*p) { in monitor_parse_arguments()
946 val /= 1e3; p += 2; break; in monitor_parse_arguments()
948 val /= 1e6; p += 2; break; in monitor_parse_arguments()
950 val /= 1e9; p += 2; break; in monitor_parse_arguments()
953 if (*p && !qemu_isspace(*p)) { in monitor_parse_arguments()
965 while (qemu_isspace(*p)) { in monitor_parse_arguments()
966 p++; in monitor_parse_arguments()
968 beg = p; in monitor_parse_arguments()
969 while (qemu_isgraph(*p)) { in monitor_parse_arguments()
970 p++; in monitor_parse_arguments()
972 if (p - beg == 2 && !memcmp(beg, "on", p - beg)) { in monitor_parse_arguments()
974 } else if (p - beg == 3 && !memcmp(beg, "off", p - beg)) { in monitor_parse_arguments()
983 case '-': in monitor_parse_arguments()
985 const char *tmp = p; in monitor_parse_arguments()
994 while (qemu_isspace(*p)) { in monitor_parse_arguments()
995 p++; in monitor_parse_arguments()
997 if (*p == '-') { in monitor_parse_arguments()
998 p++; in monitor_parse_arguments()
999 if (c != *p) { in monitor_parse_arguments()
1000 if (!is_valid_option(p, typestr)) { in monitor_parse_arguments()
1001 monitor_printf(mon, "%s: unsupported option -%c\n", in monitor_parse_arguments()
1002 cmd->name, *p); in monitor_parse_arguments()
1009 p = tmp; in monitor_parse_arguments()
1013 tmp = p++; in monitor_parse_arguments()
1014 while (qemu_isspace(*p)) { in monitor_parse_arguments()
1015 p++; in monitor_parse_arguments()
1017 ret = get_str(buf, sizeof(buf), &p); in monitor_parse_arguments()
1019 monitor_printf(mon, "%s: value expected for -%c\n", in monitor_parse_arguments()
1020 cmd->name, *tmp); in monitor_parse_arguments()
1026 p++; in monitor_parse_arguments()
1039 while (qemu_isspace(*p)) { in monitor_parse_arguments()
1040 p++; in monitor_parse_arguments()
1044 if (*p == '\0') { in monitor_parse_arguments()
1049 len = strlen(p); in monitor_parse_arguments()
1052 cmd->name); in monitor_parse_arguments()
1055 qdict_put_str(qdict, key, p); in monitor_parse_arguments()
1056 p += len; in monitor_parse_arguments()
1061 monitor_printf(mon, "%s: unknown type '%c'\n", cmd->name, c); in monitor_parse_arguments()
1068 while (qemu_isspace(*p)) { in monitor_parse_arguments()
1069 p++; in monitor_parse_arguments()
1071 if (*p != '\0') { in monitor_parse_arguments()
1073 cmd->name); in monitor_parse_arguments()
1095 monitor_puts(mon, info->human_readable_text); in hmp_info_human_readable_text()
1102 if (cmd->cmd_info_hrt) { in handle_hmp_command_exec()
1104 cmd->cmd_info_hrt); in handle_hmp_command_exec()
1106 cmd->cmd(mon, qdict); in handle_hmp_command_exec()
1120 handle_hmp_command_exec(data->mon, data->cmd, data->qdict); in handle_hmp_command_co()
1122 data->done = true; in handle_hmp_command_co()
1138 if (!cmd->cmd && !cmd->cmd_info_hrt) { in handle_hmp_command()
1140 monitor_printf(&mon->common, "Command \"%.*s\" is not available.\n", in handle_hmp_command()
1141 (int)(cmdline - cmd_start), cmd_start); in handle_hmp_command()
1145 qdict = monitor_parse_arguments(&mon->common, &cmdline, cmd); in handle_hmp_command()
1147 while (cmdline > cmd_start && qemu_isspace(cmdline[-1])) { in handle_hmp_command()
1148 cmdline--; in handle_hmp_command()
1150 monitor_printf(&mon->common, "Try \"help %.*s\" for more information\n", in handle_hmp_command()
1151 (int)(cmdline - cmd_start), cmd_start); in handle_hmp_command()
1155 if (!cmd->coroutine) { in handle_hmp_command()
1156 /* old_mon is non-NULL when called from qmp_human_monitor_command() */ in handle_hmp_command()
1157 Monitor *old_mon = monitor_set_cur(qemu_coroutine_self(), &mon->common); in handle_hmp_command()
1158 handle_hmp_command_exec(&mon->common, cmd, qdict); in handle_hmp_command()
1162 .mon = &mon->common, in handle_hmp_command()
1168 monitor_set_cur(co, &mon->common); in handle_hmp_command()
1178 const char *p, *pstart; in cmd_completion() local
1182 p = list; in cmd_completion()
1184 pstart = p; in cmd_completion()
1185 p = qemu_strchrnul(p, '|'); in cmd_completion()
1186 len = p - pstart; in cmd_completion()
1187 if (len > sizeof(cmd) - 2) { in cmd_completion()
1188 len = sizeof(cmd) - 2; in cmd_completion()
1192 readline_add_completion_of(mon->rs, name, cmd); in cmd_completion()
1193 if (*p == '\0') { in cmd_completion()
1196 p++; in cmd_completion()
1207 const char *p; in file_completion() local
1209 p = strrchr(input, '/'); in file_completion()
1210 if (!p) { in file_completion()
1215 input_path_len = p - input + 1; in file_completion()
1217 if (input_path_len > sizeof(path) - 1) { in file_completion()
1218 input_path_len = sizeof(path) - 1; in file_completion()
1221 pstrcpy(file_prefix, sizeof(file_prefix), p + 1); in file_completion()
1235 if (strcmp(d->d_name, ".") == 0 || strcmp(d->d_name, "..") == 0) { in file_completion()
1239 if (strstart(d->d_name, file_prefix, NULL)) { in file_completion()
1242 pstrcpy(file + input_path_len, sizeof(file) - input_path_len, in file_completion()
1243 d->d_name); in file_completion()
1252 readline_add_completion(mon->rs, file); in file_completion()
1260 const char *p = strchr(typestr, ':'); in next_arg_type() local
1261 return (p != NULL ? ++p : typestr); in next_arg_type()
1282 readline_set_completion_index(mon->rs, strlen(cmdname)); in monitor_find_completion_by_table()
1283 for (cmd = cmd_table; cmd->name != NULL; cmd++) { in monitor_find_completion_by_table()
1285 cmd_completion(mon, cmdname, cmd->name); in monitor_find_completion_by_table()
1290 for (cmd = cmd_table; cmd->name != NULL; cmd++) { in monitor_find_completion_by_table()
1291 if (hmp_compare_cmd(args[0], cmd->name) && in monitor_find_completion_by_table()
1296 if (!cmd->name) { in monitor_find_completion_by_table()
1300 if (cmd->sub_table) { in monitor_find_completion_by_table()
1302 monitor_find_completion_by_table(mon, cmd->sub_table, in monitor_find_completion_by_table()
1303 &args[1], nb_args - 1); in monitor_find_completion_by_table()
1306 if (cmd->command_completion) { in monitor_find_completion_by_table()
1307 cmd->command_completion(mon->rs, nb_args, args[nb_args - 1]); in monitor_find_completion_by_table()
1311 ptype = next_arg_type(cmd->args_type); in monitor_find_completion_by_table()
1312 for (i = 0; i < nb_args - 2; i++) { in monitor_find_completion_by_table()
1320 str = args[nb_args - 1]; in monitor_find_completion_by_table()
1322 while (*ptype == '-' && old_ptype != ptype) { in monitor_find_completion_by_table()
1329 readline_set_completion_index(mon->rs, strlen(str)); in monitor_find_completion_by_table()
1334 readline_set_completion_index(mon->rs, strlen(str)); in monitor_find_completion_by_table()
1336 readline_add_completion_of(mon->rs, str, blk_name(blk)); in monitor_find_completion_by_table()
1341 if (!strcmp(cmd->name, "help|?")) { in monitor_find_completion_by_table()
1343 &args[1], nb_args - 1); in monitor_find_completion_by_table()
1369 if (len > 0 && qemu_isspace(cmdline[len - 1])) { in monitor_find_completion()
1388 if (mon->rs) { in monitor_read()
1390 readline_handle_byte(mon->rs, buf[i]); in monitor_read()
1393 if (size == 0 || buf[size - 1] != 0) { in monitor_read()
1394 monitor_printf(&mon->common, "corrupted command\n"); in monitor_read()
1407 qemu_mutex_lock(&mon->mon_lock); in monitor_event()
1408 if (mon->mux_out) { in monitor_event()
1409 mon->mux_out = 0; in monitor_event()
1412 qemu_mutex_unlock(&mon->mon_lock); in monitor_event()
1416 qemu_mutex_lock(&mon->mon_lock); in monitor_event()
1417 if (!mon->mux_out) { in monitor_event()
1418 if (mon->reset_seen && !mon->suspend_cnt) { in monitor_event()
1424 mon->mux_out = 1; in monitor_event()
1426 qemu_mutex_unlock(&mon->mon_lock); in monitor_event()
1430 monitor_printf(mon, "QEMU %s monitor - type 'help' for more " in monitor_event()
1432 qemu_mutex_lock(&mon->mon_lock); in monitor_event()
1433 mon->reset_seen = 1; in monitor_event()
1434 if (!mon->mux_out) { in monitor_event()
1435 /* Suspend-resume forces the prompt to be printed. */ in monitor_event()
1439 qemu_mutex_unlock(&mon->mon_lock); in monitor_event()
1463 monitor_vprintf(&mon->common, fmt, ap); in monitor_readline_printf()
1470 monitor_flush(&mon->common); in monitor_readline_flush()
1477 if (!qemu_chr_fe_init(&mon->common.chr, chr, errp)) { in monitor_init_hmp()
1482 monitor_data_init(&mon->common, false, false, false); in monitor_init_hmp()
1484 mon->use_readline = use_readline; in monitor_init_hmp()
1485 if (mon->use_readline) { in monitor_init_hmp()
1486 mon->rs = readline_init(monitor_readline_printf, in monitor_init_hmp()
1493 qemu_chr_fe_set_handlers(&mon->common.chr, monitor_can_read, monitor_read, in monitor_init_hmp()
1494 monitor_event, NULL, &mon->common, NULL, true); in monitor_init_hmp()
1495 monitor_list_append(&mon->common); in monitor_init_hmp()