From: Junio C Hamano <gitster@pobox.com>
To: Jeff King <peff@peff.net>
Cc: "brian m. carlson" <sandals@crustytoothpaste.net>, git@vger.kernel.org
Subject: Re: "#define precompose_argv(c,v) /* empty */" is evil
Date: Thu, 06 Aug 2020 21:09:38 -0700 [thread overview]
Message-ID: <xmqqh7tfhzb1.fsf@gitster.c.googlers.com> (raw)
In-Reply-To: <20200807032723.GA15119@coredump.intra.peff.net> (Jeff King's message of "Thu, 6 Aug 2020 23:27:23 -0400")
Jeff King <peff@peff.net> writes:
> But this one for example:
>
>> -#define flockfile(fh)
>> -#define funlockfile(fh)
>> +static inline void flockfile(FILE *fh)
>> +{
>> + ; /* nothing */
>> +}
>> +static inline void funlockfile(FILE *fh)
>> +{
>> + ; /* nothing */
>> +}
>
> is re-defining a name that's usually reserved for the system (at least
> on POSIX systems). For most systems that define it, we'd actually use
> the system version (and not compile this code at all).
> But there may be
> systems where we choose not to (either the system version is deficient,
> or we're testing the fallback code on a more-capable system, or our
> #ifndef check isn't sufficient on that system for some reason).
Hmph, perhaps. We'll cross that bridge when we need to port to such
a system, and until then, doing this will more easily catch the need
to cross that bridge, I would imagine.
> If the system defines it as a macro, we'd probably get a garbled
> compiler error as the macro is expanded here. Adding #undef flockfile,
> etc beforehand would help. I'm not sure if the current code might give
> us a macro redefinition warning on such a system.
>
> If the system defines it as a function, we'd probably get redefinition
> warnings.
>
> So...I dunno. Those are all theoretical complaints. But I also think
> what it's buying is not very big:
>
> - unlike precompose_argv(), modern POSIX-compliant systems (which we
> all tend to develop on) don't hit this fallback code. So your
> average developer is likely to see any problems here.
That's OK. I am not particularly interested in systems that has to
ifdef out flockfile() and funlockfile(). I did these two primarily
to reduce the number of instances of the bad pattern to implement a
no-op replacement as C-preprocessor macro that can be copied by less
experienced developers.
> - this is really the tip of the portability iceberg anyway. In the
> example that motivated this thread, you were catching failures to
> adjust to strvec. But in code like this:
>
> #ifdef FOO
> void some_func(int x, const char *y)
> {
> struct argv_array whatever = ARGV_ARRAY_INIT;
> ...
> }
> #else
> void some_func(int x, const char *y)
> {
> /* do nothing */
> }
> #endif
Yes, of course, but as I wrote in my response to Brian, the whole
point of using these replacement implementation macros is so that we
do not have to sprinkle the main code with such #ifdef/#endif, so
I think the code like that is what needs to be corrected ;-)
>> @@ -270,7 +272,9 @@ struct itimerval {
>> #endif
>>
>> #ifdef NO_SETITIMER
>> -#define setitimer(which,value,ovalue)
>> +static inline int setitimer(int which, const struct itimerval *value, struct itimerval *newvalue) {
>> + ; /* nothing */
>> +}
>> #endif
>
> Same reasoning applies to this one, plus the added bonus that we'd need
> that struct type defined. brian mentioned using "void *".
See my message to Brian.
next prev parent reply other threads:[~2020-08-07 4:09 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-06 23:47 "#define precompose_argv(c,v) /* empty */" is evil Junio C Hamano
2020-08-07 0:01 ` brian m. carlson
2020-08-07 0:23 ` Junio C Hamano
2020-08-07 1:32 ` brian m. carlson
2020-08-07 4:03 ` Junio C Hamano
2020-08-07 3:27 ` Jeff King
2020-08-07 4:09 ` Junio C Hamano [this message]
2020-08-07 4:34 ` Jeff King
2020-08-07 6:42 ` Junio C Hamano
2020-08-07 7:56 ` Torsten Bögershausen
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
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=xmqqh7tfhzb1.fsf@gitster.c.googlers.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=peff@peff.net \
--cc=sandals@crustytoothpaste.net \
/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.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).