Loading cmd.c +0 −139 Original line number Diff line number Diff line Loading @@ -31,145 +31,6 @@ /* from libxcmd/command.c */ static int ncmdline; static char **cmdline; void add_user_command(char *optarg) { cmdline = g_realloc(cmdline, ++ncmdline * sizeof(char *)); cmdline[ncmdline-1] = optarg; } static void prep_fetchline(void *opaque) { int *fetchable = opaque; qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); *fetchable= 1; } static char *get_prompt(void); void command_loop(void) { int i, done = 0, fetchable = 0, prompted = 0; char *input; for (i = 0; !done && i < ncmdline; i++) { done = qemuio_command(cmdline[i]); } if (cmdline) { g_free(cmdline); return; } while (!done) { if (!prompted) { printf("%s", get_prompt()); fflush(stdout); qemu_set_fd_handler(STDIN_FILENO, prep_fetchline, NULL, &fetchable); prompted = 1; } main_loop_wait(false); if (!fetchable) { continue; } input = fetchline(); if (input == NULL) { break; } done = qemuio_command(input); free(input); prompted = 0; fetchable = 0; } qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); } /* from libxcmd/input.c */ #if defined(ENABLE_READLINE) # include <readline/history.h> # include <readline/readline.h> #elif defined(ENABLE_EDITLINE) # include <histedit.h> #endif static char * get_prompt(void) { static char prompt[FILENAME_MAX + 2 /*"> "*/ + 1 /*"\0"*/ ]; if (!prompt[0]) snprintf(prompt, sizeof(prompt), "%s> ", progname); return prompt; } #if defined(ENABLE_READLINE) char * fetchline(void) { char *line; line = readline(get_prompt()); if (line && *line) add_history(line); return line; } #elif defined(ENABLE_EDITLINE) static char *el_get_prompt(EditLine *e) { return get_prompt(); } char * fetchline(void) { static EditLine *el; static History *hist; HistEvent hevent; char *line; int count; if (!el) { hist = history_init(); history(hist, &hevent, H_SETSIZE, 100); el = el_init(progname, stdin, stdout, stderr); el_source(el, NULL); el_set(el, EL_SIGNAL, 1); el_set(el, EL_PROMPT, el_get_prompt); el_set(el, EL_HIST, history, (const char *)hist); } line = strdup(el_gets(el, &count)); if (line) { if (count > 0) line[count-1] = '\0'; if (*line) history(hist, &hevent, H_ENTER, line); } return line; } #else # define MAXREADLINESZ 1024 char * fetchline(void) { char *p, *line = malloc(MAXREADLINESZ); if (!line) return NULL; if (!fgets(line, MAXREADLINESZ, stdin)) { free(line); return NULL; } p = line + strlen(line); if (p != line && p[-1] == '\n') p[-1] = '\0'; return line; } #endif #define EXABYTES(x) ((long long)(x) << 60) #define PETABYTES(x) ((long long)(x) << 50) #define TERABYTES(x) ((long long)(x) << 40) Loading cmd.h +0 −9 Original line number Diff line number Diff line Loading @@ -39,18 +39,11 @@ typedef struct cmdinfo { helpfunc_t help; } cmdinfo_t; typedef int (*checkfunc_t)(BlockDriverState *bs, const cmdinfo_t *ci); void qemuio_add_command(const cmdinfo_t *ci); void add_user_command(char *optarg); void add_check_command(checkfunc_t cf); void command_loop(void); int qemuio_command_usage(const cmdinfo_t *ci); /* from input.h */ char *fetchline(void); void cvtstr(double value, char *str, size_t sz); struct timeval tsub(struct timeval t1, struct timeval t2); Loading @@ -64,8 +57,6 @@ enum { void timestr(struct timeval *tv, char *str, size_t sz, int flags); extern char *progname; bool qemuio_command(const char *cmd); #endif /* __COMMAND_H__ */ qemu-io.c +139 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,10 @@ char *progname; BlockDriverState *qemuio_bs; extern int qemuio_misalign; /* qemu-io commands passed using -c */ static int ncmdline; static char **cmdline; static int close_f(BlockDriverState *bs, int argc, char **argv) { bdrv_delete(bs); Loading Loading @@ -174,6 +178,141 @@ static void usage(const char *name) } #if defined(ENABLE_READLINE) # include <readline/history.h> # include <readline/readline.h> #elif defined(ENABLE_EDITLINE) # include <histedit.h> #endif static char *get_prompt(void) { static char prompt[FILENAME_MAX + 2 /*"> "*/ + 1 /*"\0"*/ ]; if (!prompt[0]) { snprintf(prompt, sizeof(prompt), "%s> ", progname); } return prompt; } #if defined(ENABLE_READLINE) static char *fetchline(void) { char *line = readline(get_prompt()); if (line && *line) { add_history(line); } return line; } #elif defined(ENABLE_EDITLINE) static char *el_get_prompt(EditLine *e) { return get_prompt(); } static char *fetchline(void) { static EditLine *el; static History *hist; HistEvent hevent; char *line; int count; if (!el) { hist = history_init(); history(hist, &hevent, H_SETSIZE, 100); el = el_init(progname, stdin, stdout, stderr); el_source(el, NULL); el_set(el, EL_SIGNAL, 1); el_set(el, EL_PROMPT, el_get_prompt); el_set(el, EL_HIST, history, (const char *)hist); } line = strdup(el_gets(el, &count)); if (line) { if (count > 0) { line[count-1] = '\0'; } if (*line) { history(hist, &hevent, H_ENTER, line); } } return line; } #else # define MAXREADLINESZ 1024 static char *fetchline(void) { char *p, *line = g_malloc(MAXREADLINESZ); if (!fgets(line, MAXREADLINESZ, stdin)) { g_free(line); return NULL; } p = line + strlen(line); if (p != line && p[-1] == '\n') { p[-1] = '\0'; } return line; } #endif static void prep_fetchline(void *opaque) { int *fetchable = opaque; qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); *fetchable= 1; } static void command_loop(void) { int i, done = 0, fetchable = 0, prompted = 0; char *input; for (i = 0; !done && i < ncmdline; i++) { done = qemuio_command(cmdline[i]); } if (cmdline) { g_free(cmdline); return; } while (!done) { if (!prompted) { printf("%s", get_prompt()); fflush(stdout); qemu_set_fd_handler(STDIN_FILENO, prep_fetchline, NULL, &fetchable); prompted = 1; } main_loop_wait(false); if (!fetchable) { continue; } input = fetchline(); if (input == NULL) { break; } done = qemuio_command(input); g_free(input); prompted = 0; fetchable = 0; } qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); } static void add_user_command(char *optarg) { cmdline = g_realloc(cmdline, ++ncmdline * sizeof(char *)); cmdline[ncmdline-1] = optarg; } int main(int argc, char **argv) { int readonly = 0; Loading Loading
cmd.c +0 −139 Original line number Diff line number Diff line Loading @@ -31,145 +31,6 @@ /* from libxcmd/command.c */ static int ncmdline; static char **cmdline; void add_user_command(char *optarg) { cmdline = g_realloc(cmdline, ++ncmdline * sizeof(char *)); cmdline[ncmdline-1] = optarg; } static void prep_fetchline(void *opaque) { int *fetchable = opaque; qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); *fetchable= 1; } static char *get_prompt(void); void command_loop(void) { int i, done = 0, fetchable = 0, prompted = 0; char *input; for (i = 0; !done && i < ncmdline; i++) { done = qemuio_command(cmdline[i]); } if (cmdline) { g_free(cmdline); return; } while (!done) { if (!prompted) { printf("%s", get_prompt()); fflush(stdout); qemu_set_fd_handler(STDIN_FILENO, prep_fetchline, NULL, &fetchable); prompted = 1; } main_loop_wait(false); if (!fetchable) { continue; } input = fetchline(); if (input == NULL) { break; } done = qemuio_command(input); free(input); prompted = 0; fetchable = 0; } qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); } /* from libxcmd/input.c */ #if defined(ENABLE_READLINE) # include <readline/history.h> # include <readline/readline.h> #elif defined(ENABLE_EDITLINE) # include <histedit.h> #endif static char * get_prompt(void) { static char prompt[FILENAME_MAX + 2 /*"> "*/ + 1 /*"\0"*/ ]; if (!prompt[0]) snprintf(prompt, sizeof(prompt), "%s> ", progname); return prompt; } #if defined(ENABLE_READLINE) char * fetchline(void) { char *line; line = readline(get_prompt()); if (line && *line) add_history(line); return line; } #elif defined(ENABLE_EDITLINE) static char *el_get_prompt(EditLine *e) { return get_prompt(); } char * fetchline(void) { static EditLine *el; static History *hist; HistEvent hevent; char *line; int count; if (!el) { hist = history_init(); history(hist, &hevent, H_SETSIZE, 100); el = el_init(progname, stdin, stdout, stderr); el_source(el, NULL); el_set(el, EL_SIGNAL, 1); el_set(el, EL_PROMPT, el_get_prompt); el_set(el, EL_HIST, history, (const char *)hist); } line = strdup(el_gets(el, &count)); if (line) { if (count > 0) line[count-1] = '\0'; if (*line) history(hist, &hevent, H_ENTER, line); } return line; } #else # define MAXREADLINESZ 1024 char * fetchline(void) { char *p, *line = malloc(MAXREADLINESZ); if (!line) return NULL; if (!fgets(line, MAXREADLINESZ, stdin)) { free(line); return NULL; } p = line + strlen(line); if (p != line && p[-1] == '\n') p[-1] = '\0'; return line; } #endif #define EXABYTES(x) ((long long)(x) << 60) #define PETABYTES(x) ((long long)(x) << 50) #define TERABYTES(x) ((long long)(x) << 40) Loading
cmd.h +0 −9 Original line number Diff line number Diff line Loading @@ -39,18 +39,11 @@ typedef struct cmdinfo { helpfunc_t help; } cmdinfo_t; typedef int (*checkfunc_t)(BlockDriverState *bs, const cmdinfo_t *ci); void qemuio_add_command(const cmdinfo_t *ci); void add_user_command(char *optarg); void add_check_command(checkfunc_t cf); void command_loop(void); int qemuio_command_usage(const cmdinfo_t *ci); /* from input.h */ char *fetchline(void); void cvtstr(double value, char *str, size_t sz); struct timeval tsub(struct timeval t1, struct timeval t2); Loading @@ -64,8 +57,6 @@ enum { void timestr(struct timeval *tv, char *str, size_t sz, int flags); extern char *progname; bool qemuio_command(const char *cmd); #endif /* __COMMAND_H__ */
qemu-io.c +139 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,10 @@ char *progname; BlockDriverState *qemuio_bs; extern int qemuio_misalign; /* qemu-io commands passed using -c */ static int ncmdline; static char **cmdline; static int close_f(BlockDriverState *bs, int argc, char **argv) { bdrv_delete(bs); Loading Loading @@ -174,6 +178,141 @@ static void usage(const char *name) } #if defined(ENABLE_READLINE) # include <readline/history.h> # include <readline/readline.h> #elif defined(ENABLE_EDITLINE) # include <histedit.h> #endif static char *get_prompt(void) { static char prompt[FILENAME_MAX + 2 /*"> "*/ + 1 /*"\0"*/ ]; if (!prompt[0]) { snprintf(prompt, sizeof(prompt), "%s> ", progname); } return prompt; } #if defined(ENABLE_READLINE) static char *fetchline(void) { char *line = readline(get_prompt()); if (line && *line) { add_history(line); } return line; } #elif defined(ENABLE_EDITLINE) static char *el_get_prompt(EditLine *e) { return get_prompt(); } static char *fetchline(void) { static EditLine *el; static History *hist; HistEvent hevent; char *line; int count; if (!el) { hist = history_init(); history(hist, &hevent, H_SETSIZE, 100); el = el_init(progname, stdin, stdout, stderr); el_source(el, NULL); el_set(el, EL_SIGNAL, 1); el_set(el, EL_PROMPT, el_get_prompt); el_set(el, EL_HIST, history, (const char *)hist); } line = strdup(el_gets(el, &count)); if (line) { if (count > 0) { line[count-1] = '\0'; } if (*line) { history(hist, &hevent, H_ENTER, line); } } return line; } #else # define MAXREADLINESZ 1024 static char *fetchline(void) { char *p, *line = g_malloc(MAXREADLINESZ); if (!fgets(line, MAXREADLINESZ, stdin)) { g_free(line); return NULL; } p = line + strlen(line); if (p != line && p[-1] == '\n') { p[-1] = '\0'; } return line; } #endif static void prep_fetchline(void *opaque) { int *fetchable = opaque; qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); *fetchable= 1; } static void command_loop(void) { int i, done = 0, fetchable = 0, prompted = 0; char *input; for (i = 0; !done && i < ncmdline; i++) { done = qemuio_command(cmdline[i]); } if (cmdline) { g_free(cmdline); return; } while (!done) { if (!prompted) { printf("%s", get_prompt()); fflush(stdout); qemu_set_fd_handler(STDIN_FILENO, prep_fetchline, NULL, &fetchable); prompted = 1; } main_loop_wait(false); if (!fetchable) { continue; } input = fetchline(); if (input == NULL) { break; } done = qemuio_command(input); g_free(input); prompted = 0; fetchable = 0; } qemu_set_fd_handler(STDIN_FILENO, NULL, NULL, NULL); } static void add_user_command(char *optarg) { cmdline = g_realloc(cmdline, ++ncmdline * sizeof(char *)); cmdline[ncmdline-1] = optarg; } int main(int argc, char **argv) { int readonly = 0; Loading