[lvm-devel] Re: LVM2 ./WHATS_NEW_DM libdm/libdm-deptree.c

Dave Wysochanski dwysocha at redhat.com
Fri Dec 12 13:29:39 UTC 2008


On Fri, 2008-12-12 at 10:26 +0100, Zdenek Kabelac wrote:
> Dave Wysochanski napsal(a):
> >> +/* simplify string emiting code */
> >> +#define EMIT_PARAMS(p, str...)\
> >> +	do {\
> >> +		const size_t bufsize = paramsize - (size_t)p;\
> >> +		int w;\
> >> +		\
> >> +		if ((w = snprintf(params + p, bufsize, str)) < 0\
> >> +		    || ((size_t)w >= bufsize)) {\
> >> +			stack; /* Out of space */\
> >> +			return -1;\
> >> +		}\
> >> +		p += w;\
> >> +	} while (0)
> >> +
> > 
> > Do we have to do a macro here?  Macros like this are harder to debug...
> > 
> 
> 
> I think it's actually minimizing the chance you will add a buggy code by some 
> cut&paste operation when you add new string emitting line.
> 
> Also it makes the code more readable.
> 
> Do you think there is some potential debug problem in this code, that makes
> worth to keep the original emitting style?
> 
> (i.e. replicator emits string 11 times - without this macro it makes the code 
> even less readable,  and also using inline function and 'stack' macro is not 
> going to work together, so it's hard to use gdb-friendly inline here :( )
> 

I agree something like this makes the code more readable - I was not
suggesting keeping the original code.  Was just wondering why you chose
the macro vs a regular function.  Is performance very critical here?
Something to do with using va_list?  Is there another reason for a macro
I'm missing?




More information about the lvm-devel mailing list