Looks bueno.
On Thu, Mar 31, 2011 at 4:31 PM, Ben Pfaff <[email protected]> wrote: > This will acquire a new user in an upcoming commit. > --- > lib/process.c | 16 +++++----------- > lib/signals.c | 21 +++++++++++++++++++++ > lib/signals.h | 2 ++ > 3 files changed, 28 insertions(+), 11 deletions(-) > > diff --git a/lib/process.c b/lib/process.c > index 8263437..f772833 100644 > --- a/lib/process.c > +++ b/lib/process.c > @@ -30,6 +30,7 @@ > #include "fatal-signal.h" > #include "list.h" > #include "poll-loop.h" > +#include "signals.h" > #include "socket-util.h" > #include "util.h" > #include "vlog.h" > @@ -353,17 +354,10 @@ process_status_msg(int status) > struct ds ds = DS_EMPTY_INITIALIZER; > if (WIFEXITED(status)) { > ds_put_format(&ds, "exit status %d", WEXITSTATUS(status)); > - } else if (WIFSIGNALED(status) || WIFSTOPPED(status)) { > - int signr = WIFSIGNALED(status) ? WTERMSIG(status) : > WSTOPSIG(status); > - const char *name = NULL; > -#ifdef HAVE_STRSIGNAL > - name = strsignal(signr); > -#endif > - ds_put_format(&ds, "%s by signal %d", > - WIFSIGNALED(status) ? "killed" : "stopped", signr); > - if (name) { > - ds_put_format(&ds, " (%s)", name); > - } > + } else if (WIFSIGNALED(status)) { > + ds_put_format(&ds, "killed (%s)", signal_name(WTERMSIG(status))); > + } else if (WIFSTOPPED(status)) { > + ds_put_format(&ds, "stopped (%s)", signal_name(WSTOPSIG(status))); > } else { > ds_put_format(&ds, "terminated abnormally (%x)", status); > } > diff --git a/lib/signals.c b/lib/signals.c > index e9d2627..b5bacea 100644 > --- a/lib/signals.c > +++ b/lib/signals.c > @@ -127,3 +127,24 @@ signal_handler(int signr) > signaled[signr] = true; > } > } > + > +/* Returns the name of signal 'signum' as a string. The string may be in a > + * static buffer that is reused from one call to the next. > + * > + * The string is probably a (possibly multi-word) description of the signal > + * (e.g. "Hangup") instead of just the stringified version of the macro > + * (e.g. "SIGHUP"). */ > +const char * > +signal_name(int signum) > +{ > + const char *name = NULL; > +#ifdef HAVE_STRSIGNAL > + name = strsignal(signum); > +#endif > + if (!name) { > + static char buffer[7 + INT_STRLEN(int) + 1]; > + sprintf(buffer, "signal %d", signum); > + name = buffer; > + } > + return name; > +} > diff --git a/lib/signals.h b/lib/signals.h > index 847e58b..41066c4 100644 > --- a/lib/signals.h > +++ b/lib/signals.h > @@ -24,4 +24,6 @@ struct signal *signal_register(int signr); > bool signal_poll(struct signal *); > void signal_wait(struct signal *); > > +const char *signal_name(int signum); > + > #endif /* signals.h */ > -- > 1.7.1 > > _______________________________________________ > dev mailing list > [email protected] > http://openvswitch.org/mailman/listinfo/dev > _______________________________________________ dev mailing list [email protected] http://openvswitch.org/mailman/listinfo/dev
