svn commit: r257298 - head/lib/libproc

Bruce Evans brde at optusnet.com.au
Tue Oct 29 13:21:39 UTC 2013


On Tue, 29 Oct 2013, Mark Johnston wrote:

> Log:
>  Revert r257248 and fix the problem in a way that doesn't violate style(9).

Why did gcc complain about the original version?

> Modified: head/lib/libproc/_libproc.h
> ==============================================================================
> --- head/lib/libproc/_libproc.h	Tue Oct 29 02:25:18 2013	(r257297)
> +++ head/lib/libproc/_libproc.h	Tue Oct 29 03:12:31 2013	(r257298)
> @@ -52,6 +52,6 @@ struct proc_handle {
> #define	DPRINTF(...) 	warn(__VA_ARGS__)
> #define	DPRINTFX(...)	warnx(__VA_ARGS__)
> #else
> -#define	DPRINTF(...)
> -#define	DPRINTFX(...)
> +#define	DPRINTF(...)    do { } while (0)
> +#define	DPRINTFX(...)   do { } while (0)
> #endif
>
> Modified: head/lib/libproc/proc_util.c
> ==============================================================================
> --- head/lib/libproc/proc_util.c	Tue Oct 29 02:25:18 2013	(r257297)
> +++ head/lib/libproc/proc_util.c	Tue Oct 29 03:12:31 2013	(r257298)
> @@ -145,9 +145,8 @@ proc_wstatus(struct proc_handle *phdl)
> 	if (phdl == NULL)
> 		return (-1);
> 	if (waitpid(phdl->pid, &status, WUNTRACED) < 0) {
> -		if (errno != EINTR) {
> +		if (errno != EINTR)
> 			DPRINTF("waitpid");
> -		}
> 		return (-1);
> 	}
> 	if (WIFSTOPPED(status))

Unlike some buggy macros, the null macro expanded to syntactically correct
code:

 		if (errno != EINTR)
 			;

so it doesn't need the do-while hack.  Empty statements are common in some
contexts, so compilers shouldn't warn about them.  In all versions, the
macro isn't completely function-like and the if statement is dead code,
so if compilers warn about too many things then the do-while hack wouldn't
work here or in most places that it is used.

Nearby style bugs:
- the error check is for "< 0" instead of for "== -1"
- the error message is not as loud as old ones.  All old ones begin with
   "ERROR: ".  The new style is better.  "ERROR" is not even redundant.
   It is wrong, since the errors are just warnings.

Bruce


More information about the svn-src-head mailing list