Message ID | 1431620920-19710-4-git-send-email-quintela@redhat.com |
---|---|
State | New |
Headers | show |
* Juan Quintela (quintela@redhat.com) wrote: > This allows us to store the current state to send it through migration. > > Signed-off-by: Juan Quintela <quintela@redhat.com> > --- > include/sysemu/sysemu.h | 1 + > vl.c | 11 +++++++++++ > 2 files changed, 12 insertions(+) > > diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h > index 8a52934..c1a403e 100644 > --- a/include/sysemu/sysemu.h > +++ b/include/sysemu/sysemu.h > @@ -28,6 +28,7 @@ bool runstate_check(RunState state); > void runstate_set(RunState new_state); > int runstate_is_running(void); > bool runstate_needs_reset(void); > +int runstate_store(char *str, int size); > typedef struct vm_change_state_entry VMChangeStateEntry; > typedef void VMChangeStateHandler(void *opaque, int running, RunState state); > > diff --git a/vl.c b/vl.c > index 15bccc4..7dca13f 100644 > --- a/vl.c > +++ b/vl.c > @@ -609,6 +609,17 @@ bool runstate_check(RunState state) > return current_run_state == state; > } > > +int runstate_store(char *str, int size) > +{ size_t size and perhaps a bool for the return type? > + const char *state = RunState_lookup[current_run_state]; > + > + if (strlen(state)+1 > size) { > + return -1; > + } > + strncpy(str, state, strlen(state)+1); Why not a plain strcpy? (I'd be very tempted by an assert if it's too long; I mean it really shouldn't happen; although I don't like asserts in the migrate path). Dave > + return 0; > +} > + > static void runstate_init(void) > { > const RunStateTransition *p; > -- > 2.4.0 > > -- Dr. David Alan Gilbert / dgilbert@redhat.com / Manchester, UK
On 14/05/15 19:28, Juan Quintela wrote: > This allows us to store the current state to send it through migration. > > Signed-off-by: Juan Quintela <quintela@redhat.com> > --- > include/sysemu/sysemu.h | 1 + > vl.c | 11 +++++++++++ > 2 files changed, 12 insertions(+) > > diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h > index 8a52934..c1a403e 100644 > --- a/include/sysemu/sysemu.h > +++ b/include/sysemu/sysemu.h > @@ -28,6 +28,7 @@ bool runstate_check(RunState state); > void runstate_set(RunState new_state); > int runstate_is_running(void); > bool runstate_needs_reset(void); > +int runstate_store(char *str, int size); > typedef struct vm_change_state_entry VMChangeStateEntry; > typedef void VMChangeStateHandler(void *opaque, int running, RunState state); > > diff --git a/vl.c b/vl.c > index 15bccc4..7dca13f 100644 > --- a/vl.c > +++ b/vl.c > @@ -609,6 +609,17 @@ bool runstate_check(RunState state) > return current_run_state == state; > } > > +int runstate_store(char *str, int size) > +{ > + const char *state = RunState_lookup[current_run_state]; > + > + if (strlen(state)+1 > size) { > + return -1; > + } > + strncpy(str, state, strlen(state)+1); > + return 0; > +} > + > static void runstate_init(void) > { > const RunStateTransition *p; > minor. why to call strlen() twice? if you have the length in hand it would be better to call memcpy to copy data.
On 05/18/2015 04:38 AM, Denis V. Lunev wrote: > On 14/05/15 19:28, Juan Quintela wrote: >> This allows us to store the current state to send it through migration. >> >> Signed-off-by: Juan Quintela <quintela@redhat.com> >> --- >> + if (strlen(state)+1 > size) { >> + return -1; >> + } >> + strncpy(str, state, strlen(state)+1); >> + return 0; >> +} >> + >> static void runstate_init(void) >> { >> const RunStateTransition *p; >> > > minor. why to call strlen() twice? Also, why no spaces around binary '+'?
"Dr. David Alan Gilbert" <dgilbert@redhat.com> wrote: > * Juan Quintela (quintela@redhat.com) wrote: >> This allows us to store the current state to send it through migration. >> >> Signed-off-by: Juan Quintela <quintela@redhat.com> >> --- >> include/sysemu/sysemu.h | 1 + >> vl.c | 11 +++++++++++ >> 2 files changed, 12 insertions(+) >> >> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h >> index 8a52934..c1a403e 100644 >> --- a/include/sysemu/sysemu.h >> +++ b/include/sysemu/sysemu.h >> @@ -28,6 +28,7 @@ bool runstate_check(RunState state); >> void runstate_set(RunState new_state); >> int runstate_is_running(void); >> bool runstate_needs_reset(void); >> +int runstate_store(char *str, int size); >> typedef struct vm_change_state_entry VMChangeStateEntry; >> typedef void VMChangeStateHandler(void *opaque, int running, RunState state); >> >> diff --git a/vl.c b/vl.c >> index 15bccc4..7dca13f 100644 >> --- a/vl.c >> +++ b/vl.c >> @@ -609,6 +609,17 @@ bool runstate_check(RunState state) >> return current_run_state == state; >> } >> >> +int runstate_store(char *str, int size) >> +{ > > size_t size > > and perhaps a bool for the return type? ack > >> + const char *state = RunState_lookup[current_run_state]; >> + >> + if (strlen(state)+1 > size) { >> + return -1; >> + } >> + strncpy(str, state, strlen(state)+1); > > Why not a plain strcpy? asked for memcpy, I don't really cared one way or another, it is a really small string. Thanks, Juan.
"Denis V. Lunev" <den-lists@parallels.com> wrote: > On 14/05/15 19:28, Juan Quintela wrote: >> This allows us to store the current state to send it through migration. >> >> Signed-off-by: Juan Quintela <quintela@redhat.com> >> --- >> include/sysemu/sysemu.h | 1 + >> vl.c | 11 +++++++++++ >> 2 files changed, 12 insertions(+) >> >> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h >> index 8a52934..c1a403e 100644 >> --- a/include/sysemu/sysemu.h >> +++ b/include/sysemu/sysemu.h >> @@ -28,6 +28,7 @@ bool runstate_check(RunState state); >> void runstate_set(RunState new_state); >> int runstate_is_running(void); >> bool runstate_needs_reset(void); >> +int runstate_store(char *str, int size); >> typedef struct vm_change_state_entry VMChangeStateEntry; >> typedef void VMChangeStateHandler(void *opaque, int running, RunState state); >> >> diff --git a/vl.c b/vl.c >> index 15bccc4..7dca13f 100644 >> --- a/vl.c >> +++ b/vl.c >> @@ -609,6 +609,17 @@ bool runstate_check(RunState state) >> return current_run_state == state; >> } >> >> +int runstate_store(char *str, int size) >> +{ >> + const char *state = RunState_lookup[current_run_state]; >> + >> + if (strlen(state)+1 > size) { >> + return -1; >> + } >> + strncpy(str, state, strlen(state)+1); >> + return 0; >> +} >> + >> static void runstate_init(void) >> { >> const RunStateTransition *p; >> > > minor. why to call strlen() twice? > > if you have the length in hand it would be better to call > memcpy to copy data. Done, thanks.
diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h index 8a52934..c1a403e 100644 --- a/include/sysemu/sysemu.h +++ b/include/sysemu/sysemu.h @@ -28,6 +28,7 @@ bool runstate_check(RunState state); void runstate_set(RunState new_state); int runstate_is_running(void); bool runstate_needs_reset(void); +int runstate_store(char *str, int size); typedef struct vm_change_state_entry VMChangeStateEntry; typedef void VMChangeStateHandler(void *opaque, int running, RunState state); diff --git a/vl.c b/vl.c index 15bccc4..7dca13f 100644 --- a/vl.c +++ b/vl.c @@ -609,6 +609,17 @@ bool runstate_check(RunState state) return current_run_state == state; } +int runstate_store(char *str, int size) +{ + const char *state = RunState_lookup[current_run_state]; + + if (strlen(state)+1 > size) { + return -1; + } + strncpy(str, state, strlen(state)+1); + return 0; +} + static void runstate_init(void) { const RunStateTransition *p;
This allows us to store the current state to send it through migration. Signed-off-by: Juan Quintela <quintela@redhat.com> --- include/sysemu/sysemu.h | 1 + vl.c | 11 +++++++++++ 2 files changed, 12 insertions(+)