[freetds] getopt compatibility

James K. Lowden jklowden at freetds.org
Tue May 27 10:15:10 EDT 2008


ZIGLIO, Frediano, VF-IT wrote:
> > 
> > ZIGLIO, Frediano, VF-IT wrote:
> > > In tsql
> > > getopt is restarted to read options. It's currently 
> > > restarted using GNU getopt way, that is setting optind with 0. 
> > 
> > Looking at the code, I think the most portable choice -- and 
> > probably the
> > least work -- is to refactor tsql.c: call getopt(3) in only 
> > one place, and
> > don't reset optind/optreset.  
> 
> ehm.... that is only for main argc/argv ??

So ... are you suggesting I should read the code before offering advice? 
Don't you understand how much harder that is?  

OK, I see: the "go flags".  

www.opengroup.org/onlinepubs/ 000095399/functions/getopt.html

There is no standard for resetting getopt.  

Do what you think is easiest or most interesting.  I don't see the need --
unless you want to -- to develop an autoconf test for this.  (A quick
search didn't turn up anything, and "getopt" doesn't appear in the
autoconf info file.  It seems it's a void that needs filling.)  

The quickest and least kludgy answer is probably to write a function:

	static int reset_getopt();

that does what you want, complete with all the #ifs you need.  :-/  

At least it won't be very big!  

>>> try to detect HP-UX and reset optind with 1?

ISTR we already test HP/UX symbols somewhere?  

> > I think refactoring is best because otherwise you need an 
> > autoconf test ...
> > with a bunch of #define macros.  It would look like 
> > src/tds/net.c.  :-(
> 
> I know.. net.c is ugly but it does a lot of system optimizations and all
> contained in a single file... all others use mainly plain C and some
> allocation/deallocation function...

Yeah, a dancing bear: not graceful, but impressive that it does what it
does.  

Regards, 

--jkl



More information about the FreeTDS mailing list