[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: tests & shared libraries
Peter Burns wrote:
>I found a few flaws. I get warning messages about the comma operator
>with each use of ppDebug1 in the code if I don't have PP_DEBUGLEVEL >= 4
>#define ppDebug1 (void) doesn't cut it
>
>Correct me if I'm wrong but wouldn't that turn
>
>ppDebug1("text %s", "more text");
>
>into
>
>(void)("text %s", "more text");
Right. The problem is that ppDebug1 & Co take a variable argument list.
Experimentally I found that
#define ppDebug1(EXPR,...)
works here, but that (the ellipse in the Macro definition) seems to be
highly specific to the GNU preprocessor (it isn't mentioned anywhere).
>I can get rid of it by using
>
>inline void ppDebug(const char*, ...) {}
>
>instead of the define, but I'm not sure that that is a good thing to do.
Std C doesn't know the "inline" keyword, so that's not a viable solution.
Perhaps if we do a
#if PP_DEBUGLEVEL >= 4
// as usual
#else
# ifdef __GNUC__
# define ppDebug1(EXPR,...)
# else
# define ppDebug1 pp_PrintfLikeStub
# endif
#endif
and define in ppUtils.cpp
PP_EXTC void pp_PrintfLikeStub (const char *expr, ...) {}
>--
>
>I decided to move the tests in PenguinSound to a separate directory
>"src/tests"
>and use libpenguinplay.so instead of the static library. Doing that I
>found that
>_ppDebug etc need to have a PP_EXTC prepended to it in ppUtils.cpp
<looking> Correct. Fixing that now
>There is also a bit of a mixup between the VirtWrite prototype and its
Where is VirtWrite declared and what is it for? A grep over
include/PenguinPlay didn't fid it. Same for src/ and its subdirs.
>variable in PenguinFile. The global variable is FileTGlobalData
>FileGlobalData; and it is defined in FileGlobalData
>a void* .
void* ?? How do you mean this? In FileGlobalData.cpp a single instance of
FileTGlobalData is created as global (in our namespace) variable.
>FileGlobalData is a singleton. There are better ways to
>implement singletons. Take a look at my RegistryFactory for the way I
>did it.
>
>Instead of creating a separate global variable give FileTGlobalData a
>method to
>retrieve an instance of itself. Make the constructor private. Then the
>variable won't be created at startup. It won't be created until it is
>needed.
Hmmm, I'll look into it. perhaps I can do the changes already today.
>The bad memory access was at Directory::Misc::GetHashOf.
<looking>
Ah, right. GetHashOf () counts (from 1 to key.m_nameLen) instead of (from 0
to key.m_nameLen-1). Fixed.
Christian
--
Drive A: not responding...Formatting C: instead