From: Zdenek Kabelac <zkabelac@redhat.com>
To: lvm-devel@redhat.com
Subject: Re: LVM2 ./WHATS_NEW_DM libdm/libdm-deptree.c
Date: Fri, 12 Dec 2008 15:00:06 +0100 [thread overview]
Message-ID: <49426E66.9020900@redhat.com> (raw)
In-Reply-To: <1229088579.16499.7.camel@localhost.localdomain>
Dave Wysochanski napsal(a):
> 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?
Inline function would not resolve the 'if (emit() < 0) { stack; return -1;}'
repeating part of the code. So with inline we would have actually saved only
'p += w;' line
Eventually we could use macro 'IF_MEM_OK(emit())' to only hide 'stack; return'
and keep emit() as a static incline function, but then there is no big victory
against the current EMIT_PARAMS macro.
Zdenek
next prev parent reply other threads:[~2008-12-12 14:00 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-11 16:25 LVM2 ./WHATS_NEW_DM libdm/libdm-deptree.c zkabelac
2008-12-11 16:35 ` Dave Wysochanski
2008-12-12 0:07 ` Alasdair G Kergon
2008-12-12 9:26 ` Zdenek Kabelac
2008-12-12 13:29 ` Dave Wysochanski
2008-12-12 14:00 ` Zdenek Kabelac [this message]
2008-12-12 0:02 ` Alasdair G Kergon
-- strict thread matches above, loose matches on Subject: below --
2009-07-03 12:45 agk
2011-02-18 16:13 zkabelac
2011-09-07 8:37 zkabelac
2011-10-03 18:28 zkabelac
2011-10-14 13:34 zkabelac
2011-10-17 13:15 mbroz
2012-01-25 21:50 zkabelac
2012-02-10 14:42 zkabelac
2012-02-10 14:48 zkabelac
2012-05-15 21:27 agk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=49426E66.9020900@redhat.com \
--to=zkabelac@redhat.com \
--cc=lvm-devel@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.