decrement the recursion count.
Fixes the problem of uic dying with a no-next-thread assertion while
building kdeadmin3; reported by Perry Metzger and others on
tech-pkg.
The man page for getaddrinfo() and RFC2553 says it should return EAI_NONAME
for the case where hostname != NULL, hostname is not a numeric string and
ai_flags has the AI_NUMERICHOST bit set. Instead, it returns EAI_NODATA
for this case. The diff below makes it return EAI_NONAME for this case.
This is why ntpq and ntpdc from ntp-4.1.74 can't resolve hostnames,
but work fine with numeric strings like ::1 or 127.0.0.1.
if ((xdrp->x_handy -= need) < 0)
return FALSE;
because by repeatedly calling this we can cause overflow, and then overwrite
valid memory. Instead do:
if (xdrp->x_handy < need)
return FALSE;
xdrp->x_handy -= need;
- rename some macros and types defined in runetype.h.
- move declarations of some global symbols to rune.h from runetype.h.
- make sure the target sources use rune.h and mklocale use runetype.h.
I tested them on FreeBSD-4.6.2 box (./build.sh -m i386 tools).
- these are defined in C99 (wcsto[ui]max) and SUSv3.
- these implementations are written by sigsegv@s25.xrea.com,
derived from NetBSD's wcstol/wcstoul.
- I just added some comments.
- clean up cpp directives.
- stop including rune.h from mklocale.
- stop using _BSD_RUNE_T macro. instead, use int32_t directly in runetype.h.
- move _DEFAULT_INVALID_RUNE to runetype.h.
These were for historical reason on porting rune from FreeBSD,
but it seems that these are no longer reasonable but troublesome
under the current NetBSD build system.
additionally:
- runetype.h -> locale/runetype.h in mklocale, because this might conflict
to FreeBSD's one.
- add wcstok() and wcswcs(),
- add wcstok(3),
- move btowc() and wctob() into each ctype modules,
- bump ctype interface ABI version,
- bump i18n modules' minor and
- update sets.
and fix a stupid bug in _RUNE_ISCACHED macro.
that these calls be thread-safe with respect to the environment, and it
causes serious problems for threaded applications which call vfork() and
exec*() (including indirectly, via popen() or system()).
Acquire and release __environ_lock in the parent in popen() and system() to
play safe and provide the child with a stable environment.
__environ_lock should also have an atfork() handler; still under development.
A dynamically linked program invokes the rtld cleanup routine via
an atexit handler. This rtld cleanup routine invokes _fini() for
shared libraries, which in-turn invoke __cxa_finalize() with their
DSO handle. By luck, this happens to work okay for non-threaded
programs, but for a threaded program, this leads to deadlock (sometimes
manifested as an assertion failure, if the program didn't actually
create any threads).
Fixed by teaching __cxa_finalize() that it can be recursively invoked,
adjusting the handler list manipulation accordingly.