Message ID | 20190220010232.18731-26-philmd@redhat.com |
---|---|
State | New |
Headers | show |
Series | chardev: Convert qemu_chr_write() to take a size_t argument | expand |
On Wed, Feb 20, 2019 at 02:02:32AM +0100, Philippe Mathieu-Daudé wrote: > diff --git a/include/chardev/char.h b/include/chardev/char.h > index 0341dd1ba2..2e3b5a15ca 100644 > --- a/include/chardev/char.h > +++ b/include/chardev/char.h > @@ -221,7 +221,7 @@ void qemu_chr_set_feature(Chardev *chr, > ChardevFeature feature); > QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename, > bool permit_mux_mon); > -int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all); > +int qemu_chr_write(Chardev *s, const uint8_t *buf, size_t len, bool write_all); Seeing this cleanup reminds me that I think we ought to change the chardev read & write functions to take "void *buf" instead. as is done for regular libc read/write functions. This would avoid casts in the callers between char */uint8_t * Something to think about for a future cleanup job....same applies for the QIOChannel APIs which take a 'char *buf', annoyingly different from the chardev APIs :-( Both ought to have void *buf Regards, Daniel
Hi On Wed, Feb 20, 2019 at 11:39 AM Daniel P. Berrangé <berrange@redhat.com> wrote: > > On Wed, Feb 20, 2019 at 02:02:32AM +0100, Philippe Mathieu-Daudé wrote: > > > diff --git a/include/chardev/char.h b/include/chardev/char.h > > index 0341dd1ba2..2e3b5a15ca 100644 > > --- a/include/chardev/char.h > > +++ b/include/chardev/char.h > > @@ -221,7 +221,7 @@ void qemu_chr_set_feature(Chardev *chr, > > ChardevFeature feature); > > QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename, > > bool permit_mux_mon); > > -int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all); > > +int qemu_chr_write(Chardev *s, const uint8_t *buf, size_t len, bool write_all); > > Seeing this cleanup reminds me that I think we ought to change > the chardev read & write functions to take "void *buf" instead. > as is done for regular libc read/write functions. This would > avoid casts in the callers between char */uint8_t * > > Something to think about for a future cleanup job....same applies > for the QIOChannel APIs which take a 'char *buf', annoyingly > different from the chardev APIs :-( Both ought to have void *buf I fully agree, and I started that conversion some time ago, and lost it somewhere. That should be easier than changing the sign of return values though! > > > Regards, > Daniel > -- > |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| > |: https://libvirt.org -o- https://fstop138.berrange.com :| > |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
On 2/20/19 11:42 AM, Marc-André Lureau wrote: > Hi > > On Wed, Feb 20, 2019 at 11:39 AM Daniel P. Berrangé <berrange@redhat.com> wrote: >> >> On Wed, Feb 20, 2019 at 02:02:32AM +0100, Philippe Mathieu-Daudé wrote: >> >>> diff --git a/include/chardev/char.h b/include/chardev/char.h >>> index 0341dd1ba2..2e3b5a15ca 100644 >>> --- a/include/chardev/char.h >>> +++ b/include/chardev/char.h >>> @@ -221,7 +221,7 @@ void qemu_chr_set_feature(Chardev *chr, >>> ChardevFeature feature); >>> QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename, >>> bool permit_mux_mon); >>> -int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all); >>> +int qemu_chr_write(Chardev *s, const uint8_t *buf, size_t len, bool write_all); >> >> Seeing this cleanup reminds me that I think we ought to change >> the chardev read & write functions to take "void *buf" instead. >> as is done for regular libc read/write functions. This would >> avoid casts in the callers between char */uint8_t * >> >> Something to think about for a future cleanup job....same applies >> for the QIOChannel APIs which take a 'char *buf', annoyingly >> different from the chardev APIs :-( Both ought to have void *buf > > I fully agree, and I started that conversion some time ago, and lost > it somewhere. That should be easier than changing the sign of return > values though! I thought about it too and am happy both of you agree. The "part #3" update the prototypes to return ssize_t instead of int. I can do this change there. >> >> >> Regards, >> Daniel >> -- >> |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| >> |: https://libvirt.org -o- https://fstop138.berrange.com :| >> |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
diff --git a/chardev/char.c b/chardev/char.c index 3149cd3ba9..8f1f56a802 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -99,8 +99,8 @@ static void qemu_chr_write_log(Chardev *s, const uint8_t *buf, size_t len) } static int qemu_chr_write_buffer(Chardev *s, - const uint8_t *buf, int len, - int *offset, bool write_all) + const uint8_t *buf, size_t len, + size_t *offset, bool write_all) { ChardevClass *cc = CHARDEV_GET_CLASS(s); int res = 0; @@ -132,9 +132,9 @@ static int qemu_chr_write_buffer(Chardev *s, return res; } -int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all) +int qemu_chr_write(Chardev *s, const uint8_t *buf, size_t len, bool write_all) { - int offset = 0; + size_t offset = 0; int res; if (qemu_chr_replay(s) && replay_mode == REPLAY_MODE_PLAY) { diff --git a/include/chardev/char.h b/include/chardev/char.h index 0341dd1ba2..2e3b5a15ca 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -221,7 +221,7 @@ void qemu_chr_set_feature(Chardev *chr, ChardevFeature feature); QemuOpts *qemu_chr_parse_compat(const char *label, const char *filename, bool permit_mux_mon); -int qemu_chr_write(Chardev *s, const uint8_t *buf, int len, bool write_all); +int qemu_chr_write(Chardev *s, const uint8_t *buf, size_t len, bool write_all); #define qemu_chr_write_all(s, buf, len) qemu_chr_write(s, buf, len, true) int qemu_chr_wait_connected(Chardev *chr, Error **errp); diff --git a/include/sysemu/replay.h b/include/sysemu/replay.h index 3a7c58e423..334944715d 100644 --- a/include/sysemu/replay.h +++ b/include/sysemu/replay.h @@ -158,7 +158,7 @@ void replay_chr_be_write(struct Chardev *s, uint8_t *buf, int len); /*! Writes char write return value to the replay log. */ void replay_char_write_event_save(int res, int offset); /*! Reads char write return value from the replay log. */ -void replay_char_write_event_load(int *res, int *offset); +void replay_char_write_event_load(int *res, size_t *offset); /*! Reads information about read_all character event. */ int replay_char_read_all_load(uint8_t *buf); /*! Writes character read_all error code into the replay log. */ diff --git a/replay/replay-char.c b/replay/replay-char.c index 736cc8c2e6..f0308578eb 100644 --- a/replay/replay-char.c +++ b/replay/replay-char.c @@ -104,7 +104,7 @@ void replay_char_write_event_save(int res, int offset) replay_put_dword(offset); } -void replay_char_write_event_load(int *res, int *offset) +void replay_char_write_event_load(int *res, size_t *offset) { g_assert(replay_mutex_locked()); diff --git a/stubs/replay.c b/stubs/replay.c index 4ac607895d..cf584d3191 100644 --- a/stubs/replay.c +++ b/stubs/replay.c @@ -44,7 +44,7 @@ void replay_char_write_event_save(int res, int offset) abort(); } -void replay_char_write_event_load(int *res, int *offset) +void replay_char_write_event_load(int *res, size_t *offset) { abort(); }
We now know all callers use a size_t argument. We can convert qemu_chr_write() and qemu_chr_write_all() to use a size_t argument. Signed-off-by: Philippe Mathieu-Daudé <philmd@redhat.com> --- chardev/char.c | 8 ++++---- include/chardev/char.h | 2 +- include/sysemu/replay.h | 2 +- replay/replay-char.c | 2 +- stubs/replay.c | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-)