clib2 1.202 has been released featuring a public API to the underlying file structure (e.g. useful for porting) and many important bug fixes.
See SourceForge for downloads and source code.
- Added llrint() function contributed by Henning Nielsen Lund. Thank you very much!
- now also include , so that the SEEK_SET, etc. macros are defined for lseek() to use.
- Added a wrapper function which handles the thread-safe stdio stream resolution.
- In tcflush() a break signal can no longer cause the read flush loop to be quit with two semaphores still locked.
- In __obtain_daemon_message() the test to verify if the bsdsocket.library API would support the server API functionality checked the wrong feature. Fixed.
- Switched over the fd->fd_DefaultFile references to fd->fd_Socket where sockets are used rather than file handles.
- Added functions which modify the callback function and the userdata pointer stored in a low level unbuffered file/socket data structure. These function perform the proper locking and are thus safe to use in a thread-safe environment.
- The low level unbuffered file/socket now has a public equivalent, which is defined (along with the typedefs and flags) in . Functions for tinkering with it are still to come.
- The math kernel code no longer uses its own private scalbn() function.
- Added a function prototype for the _exit() function. Note that _exit() is not an ISO 'C' function.
- Corrected the getopt() function prototype, as prompted by Henning Nielsen Lund.
- The printf() family no longer adds a 0 or 0x prefix if the alternate conversion modifier is present for the %o and %x conversions and the value to be converted is 0 already. Put another way, printf("%#x %#o",0,0); now prints "0 0". This required another change so that %p always includes the 0x prefix even if the pointer involved is a NULL pointer.
- readlink() no longer sort-of-works for files and directories. It now only works for soft linked objects and returns an error for everything else. This is based upon a fix by Peter Bengtsson. Thank you very much!
- Moved the lstat() local Lock() function into its own separate file.
- uname() now returns correct and robust information for OS version numbers > 36. This integrates a fix by Peter Bengtsson. Thank you very much!
- Moved the crtbegin.o/crtend.o files out of the link libraries. Moving them in was intended to work as a fix for the shared library build, but now it seems that this has to be done at the link stage through the GCC specs file...
- Integrated a fix for __rem_pio2() which affects sin(), tan() and cos(), contributed by Steven Solie. Thank you very much!
- The internal 'struct fd' file descriptor table entry data structure now has a user data field entry.
- Rearranged the contents of the 'struct fd' file descriptor table entry data structure in preparation for making it public. Also added a version field so that user code can handle changes to it gracefully. The default file is no longer a BCPL pointer to a file handle by default, but both a BPTR and a socket identifier, wrapped into a union.
- Added experimental tilde expansion in Unix path names. This still needs some more work.
- __get_default_file() called __fd_unlock() without having called __fd_lock() first. Ouch.
- Removed an unnecessary pair of__fd_lock()..__fd_unlock() calls from ttyname_r().
- The libunix.a unlink() function is now reentrant, or at least thread-safe.
- You can now make unlink() stop after a failed deletion attempt which failed because the object to be deleted was reported as being "in use". The libunix.a variant defaults to report the deletion to have succeeded under these circumstances and later tries to delete the files marked for deletion. See for a brief documentation of how to change the behaviour.
- basename() and dirname() can no longer return NULL. They truncate the resulting path name instead. This is done so because some code that calls basename() or dirname() does not check if the function's return value is NULL.
- The SetOwner() fall-back code for Kickstart 2.04 was passing the wrong parameters to the file system. The first (dp_Arg1) should have been zero. Ouch.
- basename() is not supposed to modify the string it is passed and should return a pointer to a string which can be modified. Now it does. Same thing for dirname().
- asctime_r() now returns NULL if the buffer is too short to hold even a single byte of data.
- ttyname() now calls ttyname_r(). Also, the libunix.a version of ttyname_r() will produce "/CONSOLE" rather than "CONSOLE:".
|