sys_errlist

J. J. Farrell jjf@bcs.org.uk
Wed Nov 3 16:17:00 GMT 1999


> From: "J. J. Farrell" <jjf@bcs.org.uk>
> 
> Since the non-underscore versions are required to be present in
> the interface definition which many modern UNIXes are based on,
> I'd say that cygwin should expose them, but no-cygwin shouldn't.
> Is it possible to expose them in a way which makes user declaration
> work, as mandated by the SVID, rather than requiring the <errno.h>
> inclusion? Both should expose the underscore versions since there's
> no harm doing so.

To add another confusing data point, I've just noticed that Microsoft
Visual C 6.0 declares _sys_errlist and _sys_nerr in <stdlib.h> rather
that <errno.h>; and if the compiler is not running in "strict ANSI"
mode and doesn't have _POSIX_ defined, it also declares sys_errlist
and sys_nerr in <stdlib.h>.

I don't know if the optimum solution can be achieved, but it would
look like:

- when in maximum UNIX compatibility mode, just declaring

    extern char *sys_errlist[]; extern int sys_nerr;

  in the code should work. Failing this, removing these declarations
  and including <errno.h> seems a reasonable option since such code
  will almost certainly be including <errno.h> already. The versions
  with leading underscores should probably be made available in the
  same way.

- when in  maximum VC++ compatibility mode, the leading underscore
  versions should be made available by including <stdlib.h>; if not
  in strict Standard C mode, the non-underscore versions should be
  available in the same way.

If it isn't possible to support declarations in the code, the simplest
solution is probably that both <errno.h> and <stdlib.h> should declare
the leading underscore names, and if not in strict Standard C mode
they should #define the no-underscore names to the underscore ones.


--
Want to unsubscribe from this list?
Send a message to cygwin-unsubscribe@sourceware.cygnus.com



More information about the Cygwin mailing list