From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ian Jackson Subject: Re: [PATCH 24/29] libxl: Introduce FILLZERO Date: Tue, 31 Mar 2015 19:51:16 +0100 Message-ID: <21786.60580.482169.516456@mariner.uk.xensource.com> References: <1423599016-32639-1-git-send-email-ian.jackson@eu.citrix.com> <1423599016-32639-25-git-send-email-ian.jackson@eu.citrix.com> <1427198621.21742.372.camel@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1427198621.21742.372.camel@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Ian Campbell Cc: xen-devel@lists.xensource.com, Euan Harris List-Id: xen-devel@lists.xenproject.org Ian Campbell writes ("Re: [Xen-devel] [PATCH 24/29] libxl: Introduce FILLZERO"): > On Tue, 2015-02-10 at 20:10 +0000, Ian Jackson wrote: > > FILLZERO is a macro for memset(&foo,0,sizeof(foo)). It eliminates the > > possiblity to make the error memset(&foo,0,sizeof(&foo)). > > but not: > foo *p = allocate_a_foo() > memset(p, 0, sizeof(p)) > although that's probably less likely to go wrong and I don't think it > can be avoided by the sorts of tricks used here. Well, we could make a macro that you _have_ to pass the pointer to. The result is that passing a non-pointer object gets you an error. > > No callers yet, but document it in CODING_STYLE. (In accordance with > > existing libxl policy, I haven't gone through all existing possible > > call sites.) > > We don't usually expose such helpers in the public API, but I suppose > you have a good reason to do so here, could you mention it in the commit > log please. It should be in the public API because xl*.c is full of uses of memset which ought to be replaced with FILLZERO. Do you really think I need to mention this in the commit message ? > > +#define LIBXL_FILLZERO(object) (memset(&(object), 0, sizeof((object)))) > > Evaluates object twice, so LIBXL_FILEZERO(*(p++)), would behave > surprisingly. I'm not sure if this can be resolved though, so this might > be a Don't Do That Then situation. sizeof() does not evaluate its argument. Ian.