From a1f85a9c7fc6a17b2e46394e50f90c1497b06fd3 Mon Sep 17 00:00:00 2001 From: Olaf Barthel Date: Thu, 10 Jul 2025 14:21:30 +0200 Subject: [PATCH] First preparations for a future clib2 release --- library/amiga.lib_rev.h | 10 ++--- library/amiga.lib_rev.rev | 2 +- library/c.lib_rev.h | 10 ++--- library/c.lib_rev.rev | 2 +- library/changes | 93 ++++++++++++++++++++++++++++++++++++++- 5 files changed, 104 insertions(+), 13 deletions(-) diff --git a/library/amiga.lib_rev.h b/library/amiga.lib_rev.h index 15183b1..9f4ac50 100644 --- a/library/amiga.lib_rev.h +++ b/library/amiga.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 215 -#define DATE "26.6.2017" -#define VERS "amiga.lib 1.215" -#define VSTRING "amiga.lib 1.215 (26.6.2017)\r\n" -#define VERSTAG "\0$VER: amiga.lib 1.215 (26.6.2017)" +#define REVISION 216 +#define DATE "10.7.2025" +#define VERS "amiga.lib 1.216" +#define VSTRING "amiga.lib 1.216 (10.7.2025)\r\n" +#define VERSTAG "\0$VER: amiga.lib 1.216 (10.7.2025)" diff --git a/library/amiga.lib_rev.rev b/library/amiga.lib_rev.rev index c34a804..a817176 100644 --- a/library/amiga.lib_rev.rev +++ b/library/amiga.lib_rev.rev @@ -1 +1 @@ -215 +216 diff --git a/library/c.lib_rev.h b/library/c.lib_rev.h index 6eaa68e..d8df282 100644 --- a/library/c.lib_rev.h +++ b/library/c.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 215 -#define DATE "26.6.2017" -#define VERS "c.lib 1.215" -#define VSTRING "c.lib 1.215 (26.6.2017)\r\n" -#define VERSTAG "\0$VER: c.lib 1.215 (26.6.2017)" +#define REVISION 217 +#define DATE "10.7.2025" +#define VERS "c.lib 1.217" +#define VSTRING "c.lib 1.217 (10.7.2025)\r\n" +#define VERSTAG "\0$VER: c.lib 1.217 (10.7.2025)" diff --git a/library/c.lib_rev.rev b/library/c.lib_rev.rev index c34a804..0ddd619 100644 --- a/library/c.lib_rev.rev +++ b/library/c.lib_rev.rev @@ -1 +1 @@ -215 +217 diff --git a/library/changes b/library/changes index fbffe64..dc24aab 100644 --- a/library/changes +++ b/library/changes @@ -1,6 +1,97 @@ +c.lib 1.217 (10.7.2025) + +- The raise() function no longer directly calls abort() because that + function in turn would have invoked raise(SIGABRT), triggering an + infinite loop. Instead, raise() now invokes the __abort() function + which abort() would have called via raise(SIGABRT). + +- fgets() no longer leverages the __getc() macro, which in the + original implementation added excessive overhead for even small + read operations. Instead, fgets() now focuses on copying data + stored in the FILE read buffer, transferring the buffered data + in bulk, if possible. The same kind of changes are present in + the gets() function. + +- fputs() and puts() no longer leverage the __putc() macro. As with + the fgets() implementation, the focus is now on enabling bulk + data transfer, eliminating the __putc() macro overhead. + +- fread() and fwrite() no longer leverage the __getc() and + __putc() macros. Their focus is on enabling bulk data transfer + instead. + +- The setvbuf() function now correctly sets the buffer size to the + value of BUFSIZ if a buffer size of 0 is specified. Previously, + setvbuf() would have disabled buffering for the FILE instead. + Failure to allocate a buffer of the specified non-zero size is + now caught and results in the setvbuf() function to indicate + failure, setting the errno variable to ENOBUFS. + +- The alloca() library function (which is a built-in function for + gcc, for example) now calls abort() rather than returning NULL. + +- Changed the numeric overflow check which the calloc() function + uses to be simpler. + +- The memory management debugging code in stdlib_free.c is no longer + reusing the allocation size value to indicate that an allocation + should never be freed. This indication is now stored in a separate + flags field. + +- The memory debugging code in malloc() now checks if the combined + size of the management data structures and front/back padding + stay within the bounds of a 32 bit integer. + + The list of memory nodes to be freed is now initialized first. + Previously, the list would be left uninitialized if the attempt to + allocate memory for memory arbitration semaphore had failed. + +- The realloc() function now obtains the original size of the + allocation from a dedicated field of the data structure which + precedes the allocation, whose purpose is to track the + allocation until it is freed. Previously, obtaining the relevant + allocation size information was encapsulated by a "clever" + macro. + + With memory debugging enabled, the stored allocation size no + longer says how much memory, padding included, is being used. + Instead, the requested allocation size is stored unchanged, with + the total allocation size derived from this number. The idea is + to make it harder to mistake the original allocation size for + the padded one and vice versa. + +- The use of the optional slab allocator now has to be deliberately + enabled in the "stdlib_memory.h" header file. + +- The minimum size of an allocation managed by the optional slab + allocator is now 16 bytes instead of 8. + +- The minimum size of a slab is now 4096 bytes. + +- The optional slab allocator now checks for integer overflows when + processing allocation requests, taking into account the size of + the actual allocating, including padding. The task of figuring + out how much padding is needed now rests in function which + calculates the total overhead. + + +amiga.lib 1.216 (10.7.2025) + +- Added a 'C' implementation of the pools.lib functions which were + merged with the Kickstart/Workbench 3.0 era amiga.lib. This + implementation provides the LibDeletePool(), LibCreatePool(), + LibAllocPooled() and LibFreePooled() functions which had not + been available before in clib2. + + Please note that these functions are largely obsolete and only + helpful for code which must run on Kickstart 2.04. The current + implementation performs no error checking for integer overflows, + just like the original pools.lib implementation. + + c.lib 1.216 (xxx) -- Add some wchar and multbyte-string related functions to allow gcc +- Add some wchar and multibyte-string related functions to allow gcc building a libstdc++ library with wide char support. For now, the functions are mostly stub ones only. They can be implemented on demand.