[freetds] getopt compatibility
Christos Zoulas
christos at zoulas.com
Tue May 27 12:01:56 EDT 2008
On May 27, 11:35am, jklowden at freetds.org ("James K. Lowden") wrote:
-- Subject: Re: [freetds] getopt compatibility
| ZIGLIO, Frediano, VF-IT wrote:
| > Testing for HP-UX from code is not that
| > difficult and optreset variable can be tested quite easily in autoconf,
| > something like
| >
| > static int
| > reset_getopt(void)
| > {
| > #if hpux
| > optind = 1;
| > #else
| > #if HAVE_OPTRESET
| > optreset = 1;
| > #endif
| > optind = 0;
| > #endif
| > }
|
| www.gnu.org/software/libtool/manual/libc/Getopt.htm
|
| Actually, this is going to be much easier than you think.
|
| 1. tsql appears to be wrong: GNU says "The initial value of this variable
| is 1." Not zero.
| 2. NetBSD, HP/UX, and opengroup.org all say the same thing.
|
| I tested getopt(3) on a RHEL system; setting optind to 1 caused it to
| parse again from the beginning.
|
| 3. I think it's legal in C to declare
|
| extern int optreset;
|
| without ever having:
|
| int optreset;
|
| so there's no need even to test HAVE_OPTRESET:
|
| static int
| reset_getopt(void)
| {
| optreset = 1;
| optind = 1;
| }
|
| which of course means we don't need the funciton at all. :-)
Yes, it is, but then you get a link error unless you make it weak.
setting optind always to 1 is probably the best way. For the belt
and suspenders version, setting optreset if it exists is good too.
christos
More information about the FreeTDS
mailing list