DragonFly BSD
DragonFly commits List (threaded) for 2005-07
[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]

Re: cvs commit: src/sys/sys errno.h


From: "Simon 'corecode' Schubert" <corecode@xxxxxxxxxxxx>
Date: Sun, 3 Jul 2005 16:11:01 +0200

Lately Joerg Sonnenberger <joerg@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
Description: PGP signature



[Date Prev][Date Next]  [Thread Prev][Thread Next]  [Date Index][Thread Index]