* Fabiano Rosas ([email protected]) wrote:
> "Dr. David Alan Gilbert" <[email protected]> writes:
> 
> > * Fabiano Rosas ([email protected]) wrote:
> >> The following patches will touch HMP readline completion for migration
> >> parameters, add a test case.
> >> 
> >> The test puts the monitor on a chardev via socket and bypasses qtest
> >> facilities because it needs to emit raw codes to readline. It
> >> therefore requires a couple of new helpers to read/write to the
> >> monitor socket.
> >> 
> >> Usage:
> >> QTEST_QEMU_BINARY=./qemu-system-x86_64 \
> >> ./tests/qtest/migration-test --full -p /x86_64/migration/hmp/completion
> >> 
> >> Signed-off-by: Fabiano Rosas <[email protected]>
> >> ---
> >
> >> +static void hmp_sock_read(int fd, char *buf, size_t buf_sz)
> >> +{
> >> +    char *p = buf;
> >> +    size_t sz = buf_sz - 1;
> >> +
> >> +    assert(fd >= 0);
> >> +    memset(buf, 0, buf_sz);
> >> +
> >> +    while (sz > 0) {
> >> +        ssize_t r = read(fd, p, sz);
> >> +        char *prompt;
> >> +
> >> +        if (!r) {
> >> +            break;
> >> +        } else if (r < 0) {
> >> +            if (errno == EINTR) {
> >> +                continue;
> >> +            }
> >> +            g_assert_not_reached();
> >> +        }
> >> +
> >> +        p += r;
> >> +        sz -= r;
> >> +
> >> +        prompt = strstr(buf, "(qemu) ");
> >> +        if (prompt) {
> >> +            *prompt = '\0';
> >
> > I'm a bit confused by what you want the output to look like after this,
> > are you assuming this is the end of the string you're reading so truncation
> > is OK?
> >
> 
> Yes, it's how I'm detecting the end of input. Here's a printf("%s|\n", buf)
> before the truncation:
> 
> 1) Read banner:                                                               
>                      
> 
> QEMU 11.1.50 monitor - type 'help' for more information
> (qemu) |

Oh right, that makes sense - please add a comment above the function something 
like
'read the output until we hit the next (qemu) prompt'

Dave

> 2) Write completion input 'migra\t'. Then read back:
> 
> migra
> migrate                 migrate_cancel          migrate_continue
> migrate_incoming        migrate_pause           migrate_recover
> migrate_set_capability  migrate_set_parameter   migrate_start_postcopy
> (qemu) |
> 
> 3) Write completion input 'info migra\t'. Then read back:
> 
> info migra
> migrate               migrate_capabilities  migrate_parameters
> (qemu) |
> 
> I think this is correct? Let me know if I missed something.
> 
> >> +            break;
> >> +        }
> >> +    }
> >> +}
> >> +
> >> +static int comp(const void *a, const void *b)
> >> +{
> >> +    return strcmp(*(const char **) a, *(const char **) b);
> >> +}
> >
> > Can you use qemu_pstrcmp0 there? (Maybe with g_ptr_array and 
> > g_ptr_array_sort is
> > what adds to some of the other questions below?)
> >
> 
> Good idea, specially the g_ptr_array. I'll update the code.
> 
-- 
 -----Open up your eyes, open up your mind, open up your code -------   
/ Dr. David Alan Gilbert    |       Running GNU/Linux       | Happy  \ 
\        dave @ treblig.org |                               | In Hex /
 \ _________________________|_____ http://www.treblig.org   |_______/

Reply via email to