[LTP] [PATCH 1/2] SAFE_MACROS: Redirect to tst_brk_() early
Cyril Hrubis
chrubis@suse.cz
Thu Feb 9 17:11:20 CET 2017
Hi!
> > +#ifndef BRKM_REDIRECT_H__
> > +#define BRKM_REDIRECT_H__
> > +
> > +#include "ltp_priv.h"
> > +
> > +#ifdef tst_brkm
> > +# undef tst_brkm
> > +#endif
> > +
> > +#define tst_brkm(flags, cleanup, fmt, ...) do { \
> > + if (tst_test) \
> > + tst_brk_(__FILE__, __LINE__, flags, fmt, ##__VA_ARGS__); \
> > + else \
> > + tst_brkm_(__FILE__, __LINE__, flags, cleanup, fmt,
> > ##__VA_ARGS__); \
> > + } while (0)
>
> Stil trying to wrap my head around all this, but after first look,..
> How does this related to "tst_brkm_" from lib/tst_res.c?
> Can it be simplified? It doesn't look like we can reach newlib branch
> now, because tst_test condition is now in tst_brkm macro.
Well there more library code shared between oldlib and newlib than
SAFE_MACROS. So we can still reach tst_brkm_() from newlib, for instance
tst_device, tst_brkm, ... Hence the redirection has to stay.
Only change after this patch is that it cannot be reached from
SAFE_MACROS().
> Did we loose the check for "Non-NULL cleanup in newlib"?
Not really, since there is no way SAFE_MACRO would pass non-NULL cleanup
callback, since that is hardcoded in the tst_safe_macros.h header.
> > +#define tst_brkr(rval, flags, cleanup, fmt, ...) do { \
> > + tst_brkm(flags, cleanup, fmt, ##__VA_ARGS__); \
> > + return rval; \
> > + } while (0)
> > +
> > +#define tst_brkv(flags, cleanup, fmt, ...) do { \
> > + tst_brkm(flags, cleanup, fmt, ##__VA_ARGS__); \
> > + return; \
> > + } while (0)
>
> All variants of tst_brk_ are more and more tricky to remember.
> Would it be too much to ask people "when writing new safe function,
> take into account that tst_brkm can return" and leave it up to
> them how they do it. Maybe they'll see goto more fitting.
I wanted to keep the changes minimal, but yes, we can as well
do explicit return instead of tst_brkr() and tst_brkv().
--
Cyril Hrubis
chrubis@suse.cz
More information about the ltp
mailing list