On Thu, May 26, 2011 at 10:55:14AM +0200, Denys Vlasenko wrote: [...] > Please take a look at the patch below. It should have all your > suggestions incorporated.
Thanks, OK for me, with one more suggestion related to *error_msg*()
implementation.
> -static void error_msg_and_die(const char *fmt, ...)
> -#if defined __GNUC__
> - __attribute__ ((noreturn, format(printf, 1, 2)))
> -#endif
> -;
> -static void error_msg_and_die(const char *fmt, ...)
> +static void verror_msg(int err_and_exitflag, const char *fmt, va_list p)
> {
> char *msg;
> - va_list p;
>
> - va_start(p, fmt);
> msg = NULL;
> vasprintf(&msg, fmt, p);
> if (msg) {
> - fprintf(stderr, "%s: %s\n", progname, msg);
> + int err = err_and_exitflag & INT_MAX;
> + fflush(NULL);
> + if (err)
> + fprintf(stderr, "%s: %s: %s\n", progname, msg,
> strerror(err));
> + else
> + fprintf(stderr, "%s: %s\n", progname, msg);
> free(msg);
> }
> +
> + if (err_and_exitflag & ((unsigned)INT_MAX+1)) {
> + /* Careful: don't do cleanup not from tracer process */
> + if (strace_tracer_pid == getpid()) {
> + /* TODO? cflag = 0; -- or else cleanup() may print
> summary */
> + cleanup();
> + }
> + exit(1);
> + }
> +}
I think it would be more readable just to create a simple die() function
instead:
static void die(void) __attribute__ ((noreturn))
{
if (strace_tracer_pid == getpid()) {
cflag = 0;
cleanup();
}
exit(1);
}
> +void error_msg_and_die(const char *fmt, ...)
> +{
> + va_list p;
> + va_start(p, fmt);
> + verror_msg(((unsigned)INT_MAX+1), fmt, p);
> + exit(1); /* verror_msg won't return. shut up compiler's warning */
verror_msg(0, fmt, p);
die();
> +}
> +
> +void perror_msg(const char *fmt, ...)
> +{
> + va_list p;
> + va_start(p, fmt);
> + verror_msg(errno, fmt, p);
> + va_end(p);
> +}
> +
> +void perror_msg_and_die(const char *fmt, ...)
> +{
> + va_list p;
> + va_start(p, fmt);
> + verror_msg(((unsigned)INT_MAX+1) | errno, fmt, p);
> + exit(1); /* verror_msg won't return. shut up compiler's warning */
verror_msg(errno, fmt, p);
die();
--
ldv
pgpjtetuBZISU.pgp
Description: PGP signature
------------------------------------------------------------------------------ vRanger cuts backup time in half-while increasing security. With the market-leading solution for virtual backup and recovery, you get blazing-fast, flexible, and affordable data protection. Download your free trial now. http://p.sf.net/sfu/quest-d2dcopy1
_______________________________________________ Strace-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/strace-devel
