- Added the sprintmt and vsprintmt routines. These are thread
safe variants of the sprintf and vsprintf routines. Note that
they don't support as many formatting options as stdio does.
gnomisc.c:
- Define the global variable "__progname". This is initially
set to "(unknown)", but is properly initialized to the return
value of __prognameGS() the first time that function is called.
- added thread safe functions syslogmt and vsyslogmt.
- minor changes to sendPort to make it thread safe
- moved variadic wrappers to the end of the file so that the
command line optimize/debug levels get propogated through
the rest of the source during compilation.
- changed the mechanism by which sendPort waits for it's buffer
to be released by syslogd
- since ctime(3) is not thread safe, add a flag to the
SyslogDataBuffer_t that tells syslogd(8) to add the appropriate
time stamp. This is easier than implementing thread safe
versions of ctime and localtime.
Fix for PR#56 -- there is a kludge to modify the exponent for
a converted value of zero, due to the way that SANE special-
cases it. This kludge was applied for all values that had a
zero exponent; now do it only for the value zero.
The ecvt(), fcvt(), and __dtoa() routines were generally
rewritten to address the problem of printing floating point
numbers (they sometimes came out wrong, especially representations
of zero).
__dtoa was written from the description in the BSD sources (note
that the comment of it being "like ecvt/fcvt other than truncating
trailing zeros") is not quite accurate where it comes to the rve
pointer or the printing of zero values. __dtoa is still expected
to be wrong for any modes other than 2 and 3, however those modes
are not used by anything in libc yet. Fix them when they pop up.
BSD has not ecvt/fcvt routines, so these have been written based
on the man page and observed behavior of the Linux implementation.
There is no gcvt yet.
- Fixed a problem reported by Derek where stack trashing
was happening once an EOF was reached. This was actually
only one example of a class of problems; any time __svfscanf
returned before filling all the requested arguments, va_arg
was left uncalled for some set of arguments. This has been
fixed by adding a "stack cleanup" section to the code where
va_arg is called once for each remaining argument.
- The __svfscanf routine still had large arrays on the stack.
These have been changed to static storage class. There is
currently an assert in place to assure that recursion isn't
happening since I didn't have the chance yet to verify in
detail the control flow here. This assert (and the related
use of the "recursing" variable) can be removed after such
a verification.
- specify files via SRCS vice OBJS. This eliminates an extraneous
".o" in the final OBJS value.
- don't attempt to attach a rez fork (leave it for the upper
level makefile)
- move generated macro file to /obj hierarchy
Makefile:
- fix location of (non-generated) macro sources
- specify files via SRCS vice OBJS. This eliminates an extraneous
".o" in the final OBJS value.
- don't attempt to attach a rez fork (leave it for the upper
level makefile)
- eliminate double concatenation of resource fork
- specify files via SRCS vice OBJS
- obtain the assert object file from where it is built in
the ORCA hierarchy
libc.rez:
- add build date to displayed data
and INCLUDE_GNO_ALT. The directories specified in 13/orcacdefs/defaults.h
are now assumed to be correct. When building lib/libc/stdio/vfprintf.o,
these directories have to explicitly stated the makefile for the moment.
- Use macros for -I flag values rather than explicit directories
- Use a text diversion rather than explicit shell redirection.
This avoids a gsh hang on some systems.
- changed OPSHIFT macro to use a (unsigned long) vs (unsigned) cast;
this at least will compile now; ORCA/C was complaining about 'duplicate
label in case statement'.