Robert Haas <robertmhaas@gmail.com> writes:
> I do not think that using #define to play clever tricks like this can
> reasonably be classified as non-invasive. Non-invasive doesn't mean
> it touches a small number of lines; it means it's unlikely to break
> stuff. Otherwise,
> #define continue break
> would qualify as non-invasive.
This argument would hold more water if it weren't that "stat" is already
a macro in our Windows port:
#ifndef UNSAFE_STAT_OK
extern int pgwin32_safestat(const char *path, struct stat *buf);
#define stat(a,b) pgwin32_safestat(a,b)
#endif
Admittedly, a macro with params will fire in fewer places than one
without, but claiming that the current situation is entirely surprise-free
seems wrong.
I also think that you're underestimating the value of continuing to spell
"struct stat" in the standard way. People know what that is, if they've
done any Unix programming before, whereas "pg_struct_stat" requires some
learning.
More, I can just about guarantee that even if we make the substitution
today, new occurrences of "struct stat" will sneak in via patches, because
not everybody will remember this PG-ism all the time. Yeah, probably the
buildfarm will find those mistakes, but maybe not quickly or reliably ---
I think it'd only show up as a warning not an error, which isn't going to
be something we'd notice easily.
So I'm not buying that "#define stat" is so evil it should be rejected
out of hand. It may be that it doesn't work for some reason, but we
should at least test it.
regards, tom lane