cvs commit: src/sys/sys errno.h

Simon 'corecode' Schubert corecode at fs.ei.tum.de
Sun Jul 3 07:11:52 PDT 2005


Lately Joerg Sonnenberger <joerg at xxxxxxxxxxxxxxxxx> said:
> >     The change stays in for now.  As was said earlier... we've run into a
> >     concrete wall.  Too many third party programs are being broken.  This 
> >     is the only way we can make errno use TLS storage and still remain sane.
> > 
> >     We may be able to remove it a year or two or three from now, or if 
> >     someone wants to make a concerted effort to get all the third party
> >     software sources to fix their code... then we can remove it.  But for
> >     now we need to move on.
> Oh, come one Matt. I know that you know that the world doesn't work that way.
> most programmers work follow the principle of least resistence. It ain't broken
> since it compiles fine.

you want to fight and fix all occurences of browkn programs out there?
happy hacking. i prefer to fix *our* code.

> I object this chance for three reasons:
> (a) it hides problems. that's *never* a good thing and that will result in
> upstream code not getting fixed.

This is true. If you find a way to emit a warning if somebody declares
	extern int errno;
it would be really good!

> (b) It violates POLA. Why is "extern int errno;\n#include <errno.h>" different
> from the reverse version?

because errno is a define. Like in *all* other major open source operating
systems i could check (*BSD, Linux, OpenSolaris). why do i need to include
sys/types.h before everything else? because.

> (c) It violates ISO C for those programs it tries to "fix". Yes, read again.
> It just doesn't work this way.
> 
> #include <errno.h>
> 
> extern int errno;
> 
> expands to something like this:
> static inline int *
> __error(void)
> {
> }
> 
> extern int *__error();
> 
> That's invalid C, since the same symbol has both static and extern visibility.

our compiler doesn't complain. So maybe we should as well "fix" the compiler
to deal with this issue.

> Speaking about breakage, this is a typical example of bitrot and with the exception
> of perhaps Perl all other programs simple don't need the define at all.

This is no bitrot. It restores the status quo we had (and all other systems have):
being able to compile most programs out there without breakage.
yes, and they don't suffer from it. It is a no-op.

cheers
  simon

-- 
Serve - BSD     +++  RENT this banner advert  +++    ASCII Ribbon   /"\
Work - Mac      +++  space for low $$$ NOW!1  +++      Campaign     \ /
Party Enjoy Relax   |   http://dragonflybsd.org      Against  HTML   \
Dude 2c 2 the max   !   http://golden-apple.biz       Mail + News   / \
Attachment:
pgp00002.pgp
-------------- next part --------------
A non-text attachment was scrubbed...
Name: pgp00002.pgp
Type: application/octet-stream
Size: 189 bytes
Desc: "Description: PGP signature"
URL: <http://lists.dragonflybsd.org/pipermail/commits/attachments/20050703/b379184a/attachment-0017.obj>


More information about the Commits mailing list