diff --git a/library/GNUmakefile.68k b/library/GNUmakefile.68k index 214ff25..08d1409 100644 --- a/library/GNUmakefile.68k +++ b/library/GNUmakefile.68k @@ -1,5 +1,5 @@ # -# $Id: GNUmakefile.68k,v 1.5 2004-08-14 08:54:25 obarthel Exp $ +# $Id: GNUmakefile.68k,v 1.6 2004-08-16 09:33:11 obarthel Exp $ # # :ts=8 # @@ -103,9 +103,9 @@ WARNINGS = \ -Wundef -Wbad-function-cast -Wmissing-declarations -Wconversion INCLUDES = -Iinclude -I. -Inetinclude - OPTIONS = -DNDEBUG -fno-builtin -DNO_INLINE_STDARG -#OPTIONS = -D__MEM_DEBUG -fno-builtin -#OPTIONS = -DDEBUG -D__MEM_DEBUG -DNO_INLINE_STDARG -fno-builtin + OPTIONS = -DUSE_64_BIT_INTS -DNDEBUG -fno-builtin -DNO_INLINE_STDARG +#OPTIONS = -DUSE_64_BIT_INTS -D__MEM_DEBUG -fno-builtin +#OPTIONS = -DUSE_64_BIT_INTS -DDEBUG -D__MEM_DEBUG -DNO_INLINE_STDARG -fno-builtin OPTIMIZE = -O #OPTIMIZE = -O2 -fomit-frame-pointer #DEBUG = -g2 @@ -452,6 +452,7 @@ MATH_LIB = \ math_floor.o \ math_fmod.o \ math_frexp.o \ + math_hypot.o \ math_init_exit.o \ math_isinf.o \ math_isnan.o \ diff --git a/library/GNUmakefile.os4 b/library/GNUmakefile.os4 index 7f481aa..1e892de 100644 --- a/library/GNUmakefile.os4 +++ b/library/GNUmakefile.os4 @@ -1,5 +1,5 @@ # -# $Id: GNUmakefile.os4,v 1.4 2004-08-12 12:31:15 obarthel Exp $ +# $Id: GNUmakefile.os4,v 1.5 2004-08-16 09:33:11 obarthel Exp $ # # :ts=8 # @@ -444,6 +444,7 @@ MATH_LIB = \ math_floor.o \ math_fmod.o \ math_frexp.o \ + math_hypot.o \ math_init_exit.o \ math_isnan.o \ math_isinf.o \ diff --git a/library/amiga.lib_rev.h b/library/amiga.lib_rev.h index 21e61dd..cb96262 100644 --- a/library/amiga.lib_rev.h +++ b/library/amiga.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 170 -#define DATE "14.8.2004" -#define VERS "amiga.lib 1.170" -#define VSTRING "amiga.lib 1.170 (14.8.2004)\r\n" -#define VERSTAG "\0$VER: amiga.lib 1.170 (14.8.2004)" +#define REVISION 171 +#define DATE "16.8.2004" +#define VERS "amiga.lib 1.171" +#define VSTRING "amiga.lib 1.171 (16.8.2004)\r\n" +#define VERSTAG "\0$VER: amiga.lib 1.171 (16.8.2004)" diff --git a/library/amiga.lib_rev.rev b/library/amiga.lib_rev.rev index 2cd1cfa..b34c321 100644 --- a/library/amiga.lib_rev.rev +++ b/library/amiga.lib_rev.rev @@ -1 +1 @@ -170 +171 diff --git a/library/c.lib_rev.h b/library/c.lib_rev.h index 4de0eb6..eb9bcbc 100644 --- a/library/c.lib_rev.h +++ b/library/c.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 170 -#define DATE "14.8.2004" -#define VERS "c.lib 1.170" -#define VSTRING "c.lib 1.170 (14.8.2004)\r\n" -#define VERSTAG "\0$VER: c.lib 1.170 (14.8.2004)" +#define REVISION 171 +#define DATE "16.8.2004" +#define VERS "c.lib 1.171" +#define VSTRING "c.lib 1.171 (16.8.2004)\r\n" +#define VERSTAG "\0$VER: c.lib 1.171 (16.8.2004)" diff --git a/library/c.lib_rev.rev b/library/c.lib_rev.rev index 2cd1cfa..b34c321 100644 --- a/library/c.lib_rev.rev +++ b/library/c.lib_rev.rev @@ -1 +1 @@ -170 +171 diff --git a/library/changes b/library/changes new file mode 100644 index 0000000..064b482 --- /dev/null +++ b/library/changes @@ -0,0 +1,3100 @@ +c.lib 1.171 (16.8.2004) + +- Added "math_hypot.c" + +- The 68k build makefile now builds the vfprintf/vfscanf functions + with %lld/%llu support. + +- Split the release notes file into changes and actual release notes, + which may overlap but differ in technical content. + + +c.lib 1.170 (14.8.2004) + +- Added "math_logb.c", and it appears to work, too. + + +c.lib 1.169 (8.8.2004) + +- Since the 'long double' data type is not really supported by the GCC + versions we use (and not supported by SAS/C either) building the + library with support code for it is now a configurable option. Unless + enabled, 'long double' is now treated like 'double'. + +- Reworked the HUGE_VAL definition which previously would default to + Infinity. The new code properly defines this to the largest + representable floating point number. The 'great' thing about the + HUGE_VAL definition in this library is that it's a reference to + a binary constant initialized by the library startup code. So any + application checking for HUGE_VAL merely needs to be relinked + rather than recompiled. + + +c.lib 1.168 (7.8.2004) + +- Ditched __is_infinity() and __is_not_a_number(), brought them back + as isinf() and isnan(). + +- Updated code and header files to state exactly which ISO 'C' version + is meant by the "The following is not part of the ISO 'C' standard." + warning. + +- Integrated rint() and rintf(). + + +c.lib 1.167 (29.7.2004) + +- Modified __is_infinity() and __is_not_a_number() to use more portable + methods for accessing the low level representation of the IEEE 754 + numbers they work on. + +- Fixed a compiler warning in h_strerror() + + +c.lib 1.166 (28.7.2004) + +- Added h_strerror() function to libnet.a; there's a global 'h_errno' + variable available, too. + +- now defines a type 'sig_t'. + +- now allows the 'fd_set' type to be referenced as + 'struct fd_set', too. + + +c.lib 1.165 (26.7.2004) + +- In printf(), if the precision is 0 and the value to be printed for + the %d, %i, %u, %o and %x conversion types is 0, no output should + be produced. Fixed. + +- Fixed the rounding for %g (again). The maximum number of significant + digits produced by a precision given for %g is different for numbers + < 1.0 and those >= 1.0: the leading 0 for numbers < 1.0 does not count + as a significant digit. + +- The calculation of the number of leading digits in a floating point + number now uses a mixture of log10() and a fall-back just in case + log10() returns gunk. + +- For floating point numbers, the sign, the digits, trailing zeroes + and the exponent are now set up and 'assembled' separately. This + removes the artificial limitation of floating point numbers to + a maximum of 78 digits to follow the decimal point. + + +c.lib 1.164 (25.7.2004) + +- The precision given for the printf() %g conversion types determines the + number of digits to generate, not the number of digits to follow the + decimal point. Fixed. The GCC FPU code generation now works again. + Previously, the floating point number conversion crashed cc1 since the + output amounted to 32 digits plus a terminating NUL, which overran the + 30 byte buffer sprintf() stored the output in. My, this was very hard + to find :( + +- Restored the floor() loop to figure out the size of the integer part + of a floating point number. For some strange reason, the log10() function + can return HUGE_VAL for numbers >= MAX_INT if mathieeedoubtrans.library + is involved. This crashes the conversion, which has the effect of making + the number come out as 0 rather than MAX_INT. Now that was nasty, too :( + + +c.lib 1.163 (25.7.2004) + +- Simplified the %e/%f/%g conversion some more. We now call log10 and pow + instead of looping and scaling the floating point number to be printed. + + +c.lib 1.162 (25.7.2004) + +- Simplified the floating point number output code in vfprintf(). + Instead of two separate branches handling output for the %e and + %f conversion types, the two now share the same code. + + +c.lib 1.161 (24.7.2004) + +- Dropped all the non-public source code fragments from the library, + including the memory pools, ARexx variable support and asyncio + functionality. + + +c.lib 1.160 (24.7.2004) + +- fputc() never flushed the output buffer if the stream in question + was unbuffered. + +- Rewrote puts() not to call fputs(). This avoids flushing the output + buffer twice if stdout is unbuffered. + + +c.lib 1.159 (23.7.2004) + +- Trying to open a directory like a file now reliably produces the + error code EISDIR. Previously, the error code could have come + out as ENOTDIR instead. + + +c.lib 1.158 (21.7.2004) + +- freopen() was broken since it tried to reuse data from an already + closed stream. Fixed. + +- Fixed a number of small compiler problems resulting from debug + output code that had never been exercised, or was not adapted to + subsequent code changes. + +- You can now enable debug output and have assertions come out + correctly. + + +c.lib 1.157 (21.7.2004) + +- The file hook message action "file_hook_action_write_and_flush" was + not handled properly by the socket and scanf/printf hooks. Fixed. + +- Removed a few assertions from the select() wrapper code which + prevented it from working properly. + +- Changed the stdio buffered I/O flushing code so that data can stay + in the cache, if necessary, rather than get written to disk. This + should help the asynchronous I/O feature. + + +c.lib 1.156 (21.7.2004) + +- Brought back the __unix_path_semantics variable. If you link with + -lunix and set this variable to FALSE, you'll still get Unix-like + behaviour from certain routines, only the translations of Unix<->Amiga + path name semantics will be disabled, leaving you with Amiga path + semantics. + +- sscanf(), asprintf(), vasprintf(), snprintf(), vsnprintf(), sprintf() + and vsprintf() now use short local buffers to speed up conversion rather + than a single measly byte. + +- opendir() now avoids returning duplicate volume names. + + + +c.lib 1.155 (21.7.2004) + +- Lost all special case code which took care of unbuffered output + and input. The new implementation works by using one byte of + buffer, which is part of the iob structure. Unbuffered output + is produced by 'flushing' the buffer once data has been written + to it. The new code also has the advantage of making ungetc() + work on unbuffered streams. + + NOTE THAT THIS MEANS THAT THE ENTIRE LIBRARY NEEDS TO BE REBUILT! + +- Each FILE buffer now sports back-link information which can be + tested to verify that it is valid. + + +c.lib 1.154 (21.7.2004) + +- fwrite() has to call fputc() for each byte to be written. Oops... + fwrite() no longer changes the file position if a write access + went wrong. Trying to write to a stream which is not available + for writing now counts as an error. + +- fread() has to call fgetc() for each byte to be read. fread() no + longer changes the file position if a partial read would yield + fewer data than is necessary to fill an element. Trying to read + from a stream which is not available for reading now counts as + an error. + +- Lost all the code that tested if the hook pointer embedded in a + file descriptor table entry or buffered file was NULL. It + simply has to be a valid pointer. + + +c.lib 1.153 (19.7.2004) + +- Oops: cli->cli_DefaultStack does not necessarily match the size + of the program's stack if it was launched from the shell and the + "$STACK:" keyword embedded in the program overrides the default + shell command stack size. + +- Stack space allocated locally is now public rather than private + memory (although it probably should be private). + + +c.lib 1.152 (19.7.2004) + +- Simplified the code that figures out how much stack space was + provided to the program when it was launched. The number does + not need to be absolutely accurate at the time it is calculated. + +- vfprintf() now prints a pointer (%p) as if it were a hexadecimal + number with 8 digits (0x%08x). + + +c.lib 1.151 (18.7.2004) + +- Oops: I mixed up the file descriptor and buffered I/O flags + in fflush() and __fill_iob_read_buffer(). + + +c.lib 1.150 (18.7.2004) + +- Checked the dos.library/InternalRunCommand() code to see if + the fiddling with Process->pr_ReturnAddresss is really necessary to + figure out how much stack space is available. Turns out that it + isn't under Kickstart 2.0 and beyond. Since this is what the library + requires, only the task lower/upper bound and the current stack + pointer address are consulted now. + +- isascii() is now a macro. + + +c.lib 1.149 (17.7.2004) + +- Reworked the ctype table layout and how the table is used by + the optional ctype macros. + + +c.lib 1.148 (17.7.2004) + +- Changed the flag definitions used by buffered files. + + NOTE THAT THIS MEANS THAT THE ENTIRE LIBRARY NEEDS TO BE REBUILT! + +- Added new macros to and which replace functions + of the same name and which might be more efficient. + + +c.lib 1.147 (17.7.2004) + +- Removed the isascii() macro and replaced it with a real function. + + +c.lib 1.146 (17.7.2004) + +- added a missing isascii() define to the ctype.h include file + as it is quiet a common function macro and should be included + + +c.lib 1.145 (16.7.2004) + +- Oops, I broke strncpy() *again*. Fixed. + + +c.lib 1.144 (16.7.2004) + +- The file descriptor duplication code now sits in a separate + function rather than in the different file/socket descriptor + hooks. + +- The code which reduces AmigaDOS path names by dropping path + components followed by two slashes now sits in a separate + function. Previously, it appeared twice in the Amiga<->Unix + path name translation code. + +- Simplified the select() function considerably. + + +c.lib 1.143 (16.7.2004) + +- added missing hook_entry object files to GNU OS4 makefile + +- added required newlines "\n" to the 68k GNU inline assembler + functions to make them compile with GCC version 3 and upwards. + + +c.lib 1.142 (15.7.2004) + +- ferror() does not return the code of the error for the stream + which ran into trouble, it merely signals that an error occured. + There goes another iob state variable. + + NOTE THAT THIS MEANS THAT THE ENTIRE LIBRARY NEEDS TO BE REBUILT! + +- Removed all the code that set the value of 'errno' to 0. + +- Likewise, removed all the code that reset the error condition + that might have been set for a file. The only function which + can do that is clearerr(). + +- No functions other but clearerr(), ungetc() and fseek() clear the + 'eof detected' flag now. + +- Simplified vfprintf() some more, merging the %x formatting code + with the other integer conversion code. + +- vfscanf() now decides that with the %i conversion, a number is + in octal notation if the first digit converted is a 0 and there + is no 'x' or 'X' character following it. + +- vfscanf() no longer counts '%n' as an assignment/conversion operation. + +- Rewrote strtol() and strtoul() again. The overflow detection is + now different in both routines and they avoid performing a + conversion if the base is 1 (which would lead to an infinite + loop). Also, the possible base values are limited to <= 36 and + letters in the range a..z are allowed, too. + +- All buffered streams which hold data and which operate in line buffering + mode are now flushed before the buffer of a line buffered input stream + is filled. + +- fflush() now flushes all buffered files if the stream parameter + is NULL. + +- Unlike fgets(), gets() does *not* put the terminating '\n' character + into the buffer. Fixed. + +- rewind() now clears both the 'end of file' and error indicator flags. + +- Replaced all memcpy() calls with memmove(). + +- Cleaned up error code translation and forwarding within the hook + functions. Instead of mucking around with the global errno variable, + the hook functions now return the error code as part of the hook + message. The error code translation is now done entirely through + two functions rather than one function, which fiddled with the + global errno variable, and local code which, if necessary, translated + ERROR_OBJECT_WRONG_TYPE into ENOTDIR. + + NOTE THAT THIS, TOO, MEANS THAT THE ENTIRE LIBRARY NEEDS TO BE REBUILT! + +- Lost the unconditional address alignment test in the qsort() data + swapping routine. If the code is built for an 68020 and beyond, it + is replaced by a no-op. + + +c.lib 1.141 (14.7.2004) + +- Rewrote the buffered file I/O code, and in particular how the read + access interacts with the file's state information. Rather than + counting how many bytes can be read from the buffer still, the + new code checks the buffer position against the number of bytes + stored in the buffer. This makes maintenance easier since only + one state variable needs to be modified at a time. + + Note that this means that code which would use the getc() macro + needs to be rebuilt! + +- The pid_t type used by kill() and returned by getpid() is now + really a Process address pointer. It used to be a CLI number. + + +c.lib 1.140 (12.7.2004) + +- The stack alignment code used when reallocating new stack space and + swapping it with the current configuration pushed the end of the + stack beyond the boundaries of the allocated stack. This crashed + in no time at all, but sometimes it just about worked without + blowing up. The fixed code is simpler than before and now initializes + both the lower and the upper stack boundaries to be aligned to + multiples of 16 bytes. + + +c.lib 1.139 (11.7.2004) + +- snprintf/vsnprintf were broken: instead of limiting output to + the size given as a parameter, data beyond the end of the buffer + was trashed. + + +c.lib 1.138 (11.7.2004) + +- Greatly simplified the vfscanf() code. Added new code which + initializes each parameter before the conversion begins. + This should help software which tosses data at scanf() + and expects it to come back initialized without checking for + the function's return code. + +- The vfscanf() '%f' conversion method could have consumed one + more character than it was really allowed to. Fixed. + +- If vfscanf() is built without floating point support, the + '%f' conversion method now properly pulls the respective + floating point number from the stack but performs no + conversion and does not modify the contents of the + variable. + + +c.lib 1.137 (11.7.2004) + +- Moved the initialization for the stack size checking out + of the _main() code and into its own initialization function + where it belongs. That way, the test also works for programs + that detach from the shell. + +- The '%g' and '%G' vfprintf() format specifiers now have the + effect of stripping trailing 0 and . characters in the number + string produced. Previously, this effect was also enabled for + the '%f', '%e' and '%E' formats. + +- Greatly simplified the vfprintf() code and verified that the + output matches the requirements. + + +c.lib 1.136 (9.7.2004) + +- Dropped in loads more of assertions to check the validity of + files and descriptors. + + +c.lib 1.135 (6.7.2004) + +- Fixed the last two issues in puts() and fputs() caused by the + bug fix I made to fputc() which would not return the character + value passed in. Occasionally, this could cause puts() to omit + the trailing '\n'. + + +c.lib 1.134 (4.7.2004) + +- Simplified and reordered the init/exit procedure in "stdlib_main.c". + Initializations which could be done on the spot when required are + no longer performed that early on. The stdio initialization is + performed earlier so that error messages can be printed using + stdio methods. + +- A stack overflow can no longer turn into an infinite loop. + +- Removed some more redundant data from the memory management data + structures. + +- The temporary file cleanup in fclose() did not properly turn off + profiling. Fixed. + +- Both close() and fclose() now fill their data structures with 0 + bytes before they return. + +- The tables for the file descriptors and buffered files are now + allocated dynamically. + +- If the asynchronous I/O options is not in effect, then the + global file data structures will not include a pointer to + the AsyncFile. + +- Lost some duplicate code from the locale cleanup routines. + +- Simplified the code that picks a vacant file descriptor table + slot. + +- NOTE: YOU NEED TO REBUILD THE ENTIRE LIBRARY IF YOU WANT TO USE + THESE CHANGES! + + +c.lib 1.133 (4.7.2004) + +- The memory routines no longer look up the management data structures + before they deallocate or modify an allocated memory chunk. This is + now done only in the debug version of the library. + +- Moved the code that performs memory deallocations in the debug and + nodebug versions of the library. Instead of separate functions, a + single common routine is used. + +- When launched from shell, the program's name is no longer allocated + through malloc() but through AllocVec(), and released separately later. + This helps the memory debug code which otherwise wouldn't be able to + print meaningful information when starting up and shutting down. + +- You can now get additional information out of the memory debugging + code, covering the locations where memory is allocated and released, + including how much memory is involved. + +- The month and day names used by the time conversion code are now + declared as 'const'. + +- Replaced all uses of the EPERM error code with EACCES. + + + +c.lib 1.132 (26.6.2004) + +- abort() and raise() now call a common termination routine. + +- Chopped the math_kernel.c code into individual files. Some local constant + values had to be duplicated, but so there... + +- Lost "smakefile.old" and "math_kernel.c". + +- Got rid of more compiler warnings... + +- Fixed a typo in the "stdlib_headers.h" header file. + +- In libdebug.a, for 'va_arg()' to work with 'char' type parameters, these must + be picked up as type 'int' from the stack. Otherwise we get a linker error later... + This should finally make the PowerPC 'native' kprintf() function work. + + +c.lib 1.131 (21.6.2004) + +- The '%i' conversion method in the scanf() family did not take + a leading '0' properly into account when updating the number of + letters to be read and processed. + +- If the '%c' conversion method reads fewer than the required + characters, it stops the conversion rather than aborting it + with an error. + +- The scanf() family now watches more carefully what data it still + requires to satisfy a conversion. For example, while it may accept + a '-' character to indicate that a sign is given to the number to + follow, if there is no number to follow will trigger an error + condition. + + +c.lib 1.130 (20.6.2004) + +- The scanf() family now returns EOF if an error was detected + (not just an end of file) or if the stream ended before a + conversion could be performed. + +- The file type reported by stat() did not really take pipes into + account. Fixed. + +- Cleaned up the data structure definitions and references. This turned + up a bug in the Unix<->Amiga path name translation which would use + a local data structure which was larger than the public version. Fixed. + + +c.lib 1.129 (18.6.2004) + +- Added a free memory threshold test feature to malloc(); how it works + is described in . + +- The PowerPC debug.lib now calls RawPutChar() and RawMayGetChar() + through the 68k LVO. This should finally make kprintf() and friends + usable on the PowerPC. + +- The asyncio code now defaults to allocate at least twice as much + memory as a buffered file would require (so that double buffering + can be used). Also, the fundamental asyncio support functions require + that enough memory is allocated to allow for four disk blocks to + be read at a time. + +- When opening a file for asynchronous I/O access, both read-only and + write-only access is supported now. Previously, the functionality + was limited to read-only access. + + +c.lib 1.128 (14.6.2004) + +- Moved the stack size usage reporting code again so that the name of + the program can be printed correctly. Also, the data from the + initial stack size swapping is now cached until it is used. + +- Reordered the resource allocations and initializations in tmpname() + to make error recovery more robust. + + +c.lib 1.127 (13.6.2004) + +- Truncating a file to size 0 was, if successful, considered a failure. + Fixed. + +- ftruncate() no longer changes the file position. + +- Advisory record locking now checks if the lock should be shared or + exclusive and verifies that the file open mode supports this access + mode. + +- Negative record lengths are now supported in the advisory record + locking code. + + +c.lib 1.126 (13.6.2004) + +- Unless Unix path semantics are in use, lseek() no longer defaults + to 'seek and extend' operation. + +- There are no longer two separate functions to take care of 'seek' + and 'seek and extend' operations. + +- The Unix-like lseek() behaviour now takes advantage of cached + file seek position information. Previously, it just ignored it. + +- The 'truncate' file action now makes sure that once the size of + the file has been trimmed, the new file position refers to the + end of the file. There also was a problem with growing the size + of the file which could have started at the wrong file offset. + +- The advisory file locking code now handles integer overflows + gracefully when the end of a locked region is to be calculated. + In this case, the end is assumed to be the (2^31)-1st byte. + Also, when removing a lock the search for the locked region in + question keys off the start position and the length rather than + the start position and the adjusted end position. + +- Added more sanity checks to file system operations which invariably + have to deal with FileHandle->fh_Type. + +- Rewrote the Unix->Amiga path name translation function again. + + +c.lib 1.125 (13.6.2004) + +- Rewrote the Amiga->Unix path name conversion code. Double slashes are + translated more robustly into '../' and the translation of the volume + name and the path to follow it are now done separately. The current + directory name ("") could wind up getting translated to a string pointing + into a local buffer. Fixed. Also, the new code knows how to translate + ":" to a path relative to the current directory (if that directory is + defined by an absolute path name). + +- The code that parsed and initialized the command line parameter + array to be passed to the main() function made different assumptions + during the counting and the initialization of the different parameters. + Fixed. + +- snprintf() and vsnprintf() now handle zero length buffer + sizes properly. + +- The stack size usage measuring code got broken when the + constructor/destructor mechanism was reimplemented. It + now works again. + + +c.lib 1.124 (12.6.2004) + +- Dropped the fseek() optimization for files with a write buffer. This + feature had little impact, but complicated buffer management enormously. + +- In fputc(), __fputc(), fwrite(), __flush(), etc. and the functions which + build upon them flushing the buffer now always takes place before new data + is pushed into the buffer. The exception is fputc()/__fputc() which can + flush the buffer if the file is in line buffering mode and a line feed + character has just been written. Also, failure to flush the buffer now + implies that the character/data to be stored in the respective function + was not successful. Previously, the different functions either stored the + data in the cache before and/or after the buffer was flushed, making it + difficult to tell if it had been written. Which in turn made it impossible + to recover from the failure since you could not be sure if another attempt + to store that data would really store it at the proper file position. + +- mktime() now insists that the year must be 1978 or later. + +- In debug.lib, KPutFmt() and the functions which build upon it now + should work even on the PowerPC. This works by analyzing the format + string and by converting the parameters to fit into a table whose + contents RawDoFmt() can handle. + +- For the asyncio code, all write accesses immediately flushed the buffer, + thus nullifying any advantage the asynchronous I/O might have provided. + Fixed. + +- The optimized memset(), memcpy() and memmove() functions now use + displacement addressing rather than post- and preincrement in the + unrolled loop. This should help strictly pipelined processors. It + does not seem to make any difference at all for the 68060, though. + +- The locale cleanup code now separately closes the specific locales + and the 'all' locale. + + +c.lib 1.123 (12.6.2004) + +- The distribution license no longer requires that for binaries using + the library a mention of the license text is mandatory. + +- closedir() now checks for a NULL pointer and backs out if it finds + one. + +- opendir() now exits with an error if it cannot allocate enough memory + for a volume name to be added to the list. + +- readdir() now checks for a NULL pointer and backs out if it finds one. + +- readdir() no longer builds with volume list scanning code unless + Unix path compatibility is enabled. + +- rewinddir() now ignores a NULL directory pointer. + +- strncmp() now treats the parameters as strings of unsigned characters. + +- strdup() no longer traverses the string to be copied twice to figure + out how much data needs to be copied. + +- strerror() now knows how to produce an error message for error + code 0x80000000. + +- strtol() and strtoul() always need to initialize the 'ptr' + parameter before they exit, not just when they succeed. + +- fputc() did not return the character value written, but 0. Fixed. + +- fputs() now returns EOF if it couldn't flush the write buffer, + if that was necessary. + +- fseek() no longer changes the value of the global 'errno' variable, + as required by the specification. + +- fseek() now sets the buffer position to 0 if the number of bytes that + can be read from the buffer drops to 0. This avoids clashes with write + access to the same file. + +- ftell() now always sets the global 'errno' variable to a well-defined + value. + +- fwrite() now tries to seek back to the original file position if + flushing the buffer failed. This complements similar code in fread(). + +- fwrite() no longer flushes the buffer before it returns. It appears + that this behaviour is not mandated by the specifications. The + buffer will only be flushed upon entry, and even then only to make + room for new data to be stored. + +- fread() now preserves error status information when recovering from + a failed buffer fill attempt. Previously, the error status information + would revert to 'no error' during this task. + +- mktemp() now also adds the current Task address to the seed value that + goes into the creation of the temporary name. + +- If dup2() fails to close a file, if that is necessary, it will return + an error rather than ignoring the failure. + +- Lost a return statement in dup2(). Also, growing the size of the + file descriptor table can now be aborted with ^C. + +- In fcntl(), growing the size of the file descriptor table can now be + aborted with ^C. + + +c.lib 1.122 (1.6.2004) + +- Lost the NULL tests in front of all UnLock() and FreeDeviceProc() calls. + +- The command line is now trimmed, dropping leading and trailing + blank spaces. + +- The ftruncate() functionality did not write 0 bytes to the file + being extended. Fixed. + +- popen() allocated a few bytes less than necessary for the command + name and the parameters. + +- Neither popen() nor system() now quote the command name unless it + is really necessary. + + +c.lib 1.121 (30.5.2004) + +- Made the memory debugging options a little more flexible and easier to + configure. + + +c.lib 1.120 (30.5.2004) + +- The asynchronous I/O code was never actually used by the library. Fixed. + +- Tweaked the realloc() code to take the memory allocation granularity into + account. This means, for example, that for small allocation sizes < 8 bytes + no reallocation will ever be performed since it wouldn't amount to anything. + This complements similiar code in malloc() which also rounds up allocation + sizes to the OS memory allocation granularity limits. + + +c.lib 1.119 (27.5.2004) + +- Got rid of a few compiler warnings involving signed/unsigned integer + comparisons. + +- Fixed a bug in the Unix->Amiga translation routine which would cause + file names such as './../foo' come out as '/foo' and end up being + translated to 'foo:'. The new code now takes care of removing leading + './' and embedded '/./' segments before further processing is + performed on the name string. + +- Fixed up the 68k GNUmakefile so that it builds properly. + + +c.lib 1.118 (26.5.2004) + +- Rewrote those putc/__putc macros again... + +- The vfprintf()/fputs() code did not properly test the result of + the __putc() function call. There should have been a test for + '!= EOF' rather than '== OK'. + + +c.lib 1.117 (26.5.2004) + +- realloc() now checks the size of blocks to be shrunk. If the block + shrinks by less than half its current size, then no new memory + is allocated for it. This saves the need to allocate memory and to + move the data. + +- Implemented an option to have the allocated memory chunks managed + by a balanced tree, sorted by address. This should help applications + which claim a lot of memory, possibly in small chunks, which get + allocated/released a lot. While this is still not quite as good as + having the low level memory management code use buddy lists or + slab allocation, it might still do the trick. This feature is + activated in "stdlib_headers.h" via the __USE_MEM_TREES preprocessor + symbol. You will need to rebuild the files stdlib_data.o, stdlib_free.o, + stdlib_init_exit.o, stdlib_malloc.o, and stdlib_red_black.o if you + change this. + +- The size of the physical memory allocation chunks is now taken into + account when making memory allocations. This means that allocations + are rounded up to multiples of 8 bytes each. + + +c.lib 1.116 (26.5.2004) + +- Reworked the putc/getc macro definitions, moved them behind the + function prototype declarations in . + +- The putc() macro did not return the same result as the equivalent + fputc() function would have done after flushing the buffer. The + new macro now calls a special flush routine which itself safely + returns the last character written. + + +c.lib 1.115 (24.5.2004) + +- Prior to performing ^C checking, the respective routines now verify first + if ^C checking is enabled in the first place. This saves a function call. + +- Replaced all ^C handling code that would drop straight into raise(SIGINT) + with a proper call to __check_abort(), which the user may have set up to + his own liking. + +- The wildcard matching argument list build code no longer defaults to + allow for ^C checking. This is permitted only if the global checking + flag is enabled. + + +c.lib 1.114 (24.5.2004) + +- Replaced most of the internal single character I/O calls with macros. + +- I/O buffers are now allocated so that their start addresses are aligned + to cache line boundaries. + +- Buffer size and position are now both signed integers. This fixes a + tricky issue with the newly-introduced macros and zero length buffer + sizes. + + +c.lib 1.113 (23.5.2004) + +- The 'FILE' structure now has a public part. Flags and layout have changed! + +- Reimplemented getc() and putc() as macros, which helps a lot with some + applications. + +- Added more of the SAS/C internal floating point support code, which makes + sprintf() and friends build even with floating point options enabled. + +- Replaced CheckSignal() with SetSignal(), which helped the ^C checking + code a lot. + + +c.lib 1.112 (23.5.2004) + +- Plugged in the SAS/C code profiling functionality. This works by measuring + calling time intervals and should be very portable. + +- Duplicating file descriptors could lead to trouble if the descriptor + number in question exactly matched the number of descriptors. Fixed. + +- Reactivated code in open() which was disabled for OS4 but which + should have stayed active. + +- Reduced the overhead of the single character input/output routines, + especially when called from within the library. This helped fgets(), + scanf(), fputs() printf() and others. + + +c.lib 1.111 (12.5.2004) + +- chdir() now checks if the object in question is really a directory. + +- Added special tests to a number of Open(), Lock() and Delete() calls + to catch attempts to open "subdirectories" of files. If it happens, + e.g. trying to open when "utility" is a header + file on the search list, errno will be set to ENOTDIR. + + +c.lib 1.110 (10.4.2004) + +- memmove() no longer tries to move large chunks of data if the source + and destination overlap by fewer bytes than can be moved at a time. + The original code should not have done this in the first place, but + it's safer to check rather than to assume that it will work out fine. + + +c.lib 1.109 (9.4.2004) + +- Fixed a bug in the PPC version of setjmp that would trash floating + point registers. + +- Fixed a bug in dup2: If the second fd didn't exist, it would return -1, + which is wrong (it should not close the second fd when it doesn't exist). + +- Added F_DUPFD to fcntl + + +c.lib 1.108 (15.3.2004) + +- Fixed a bug in the printf() family which affected how the %e + output was formed (and by extension, %E, %g and %G). The %e + format must put exactly one digit in front of the decimal + point, followed by the mantissa and the exponent. This worked + fine unless the round-off fudge added to the number caused + an overflow, producing two digits in front of the decimal point. + This has been fixed by checking for an overflow after having + added the round-off fudge and rescaling the result, if + necessary [Andrija Antonijevic]. + + +c.lib 1.107 (15.2.2004) + +- The setjmp() code now actually manages to save and restore the + FPU state in the 68k library form. + +- The SAS/C constructor/destructor invocation finally works. + +- Added an option to cache the current file position, which should + help seek performance. + +- Added targets "version" and "cvs-tag" to the makefiles. + + +c.lib 1.106 (14.2.2004) + +- index() now calls strchr() and rindex() calls strrchr(). + +- strchr() and strrchr() now read each byte of the string to + be searched exactly once. + +- Added optimized versions of memchr() and memcmp(). + +- The optimized versions of memchr(), memcmp(), memcpy(), memmove() + and memset() check first if the amount of data involved justifies + the expense of gearing up to perform an optimized operation. + +- strstr() no longer calls strlen() even once. + + +c.lib 1.105 (12.2.2004) + +- Replaced memcpy(), memmove() and memset() with optimized portable + versions. + + +c.lib 1.104 (11.2.2004) + +- When open() calls Lock() and fails to obtain a correct result, the + error code checking now also covers ERROR_ACTION_NOT_KNOWN (which is + ignored). This should help handlers which are no file systems, such + as PAR: and PIPE:. + +- The file->iob_BufferWriteBytes and file->iob_BufferPosition counters + no longer have to be in sync. In fact, the position can be smaller + than the number of bytes waiting to be written. The buffer flushing + has to take this into account now (it may have to seek back after + having dumped the buffer, which is nasty). + +- Worked Jörg's changes into the fseek() code. This covers two fields: + if possible, an absolute positioning command is converted into a + relative position change; if the current file buffer allows for it, + the buffer access position is updated rather than forcing the buffer + to be flushed to disk/reread. + + +c.lib 1.103 (8.2.2004) + +- The bug fixes in version 1.101 broke ungetc(). Fixed. Also reworked the + sanity checks in ungetc() which previously were performed either out + of order or were entirely missing. + +- Renamed socket_get_socket_descriptor.c to socket_get_descriptor.c to + make it easier to build the library on the Amiga. + + +c.lib 1.102 (22.1.2004) + +- modified string.h to also include strings.h within the non ISO 'C' standard + part. This should make porting of existing applications a bit easier as many + sources only include . As the current string.h anyway defines the + symbols of i.e. bcmp() and bcopy() etc, which should normally also be + in strings.h, I don't see any problem with that. + +- added function macros for stricmp() and strnicmp() to non ISO 'C' standard + part of to make it easier to port applications relying on + stricmp()/strnicmp(). + + +c.lib 1.101 (18.1.2004) + +- Draining an stdio buffer via fgetc/fread, etc. completely before switching + over to using the same buffer for writing data to a file would flop because + one of two important variables did not get reset to zero. This would also + end up trashing the buffer management. New code makes sure that if a read + access ends up setting the number of bytes available for reading from the + buffer to 0, the buffer position is reset to 0 as well. + +- fwrite() now pushes the buffer contents to disk if it has completely + filled up rather than allowing the full buffer to stick around until + another opportunity presents itself to flush it to disk. + + +c.lib 1.100 (18.1.2004) + +- abort() and raise() no longer call fprintf(stderr,..) but rather + use fputs(..,stderr) instead. + +- Updated the copyright text. + + +c.lib 1.99 (28.12.2003) + +- Updated "stdlib_constructor_begin.c" to invoke the SAS/C constructors + and destructors and to make the OS4 specific destructor handling + safer: destructors calling exit() will now cause the next following + destructor function to be called. + + +c.lib 1.98 (23.12.2003) + +- Fixed up Hans-Jörg's previous fix for strncat(). Added comments + explaining as to what this function is supposed to accomplish in + order to avoid making the same mistake again and again. + +- accept() now returns a properly wrapped socket descriptor (thanks to + Marcus!). + +- TODO: fix up the PowerPC destructor code; currently, a destructor + function calling exit() will cause all subsequent destructors to + be either skipped or the entire destructor list to be rerun ad + inifinitum (haven't checked this in detail yet). Change the code to + work more like the 68k version, which plants a setjmp() at the beginning + of the loop and remembers which one was the last destructor called. + + +c.lib 1.97 (15.12.2003) + +- The library can now use constructors and destructors internally. + +- Added the realpath() function. + +- Put the dirent functions back in libc.a. + + +c.lib 1.96 (13.12.2003) + +- gettimeofday() no longer reports microsecond values > 1000000. + + +c.lib 1.95 (13.12.2003) + +- The default memory pool and puddle sizes can now be configured at link + time by defining the __default_pool_size and __default_puddle_size + variables in your program. + +- strncat() no longer eats the last character copied. + + +c.lib 1.94 (9.12.2003) + +- now includes rather than , if + necessary. + +- Changed DoTimer() to allocate the MsgPort and the timerequest from + public memory rather than from the stack (which could be allocated + as private memory). + + +c.lib 1.93 (29.11.2003) + +- Fixed up the Unix->Amiga path name translation code to map "volume:/" style + paths to the virtual root directory. + +- The file operations (open, chmod, mkdir, rmdir, mktemp, chown, unlink, + utime and rename) now watch out for the root directory to come out of a + Unix->Amiga path name translation and will react according to it. + +- access() now also works on the virtual root directory. + + +c.lib 1.92 (28.11.2003) + +- Replaced qsort() with a different, iterative implementation. In terms of + performace it seems to beat everything out there. + +- Tinkered with the select() code again. The local FD_ZERO() implementation + was too smart. It would attempt to optimize the operation by breaking it + down in to series of bytes to be set to zero, followed by individual bits. + This went wrong because this isn't how the fd_set bits are organized. + The code now clears all the long words involved. + +- Updated the fix_datestamp() function which is part of the select() + wrapper. The updated version should be less vulnerable against + overflows. + + +c.lib 1.91 (25.11.2003) + +- Fixed up the dependencies in the makefiles. The libunix.a routines which + would involve the asynchronous I/O code would not get rebuilt if the + associated header file would change. + +- Added extra code to the fd hook function which looks after files that + should be unlinked, but which didn't get deleted at the first attempt + because they were still in use. That extra code checks, after a file is + closed, if the file in question was set up for deletion. This seems to + help the Samba port a lot, which no longer accumulates scores of lock + files in "Samba:log/locks" which get deleted only when smbd exits. + + +c.lib 1.90 (24.11.2003) + +- The wildcard pattern expansion for command line arguments no longer + drops parameters for which there is no match. Instead, the argument + is used as is. With the old behaviour, things like + "-D__interrupt=__attribute__((__interrupt__))" would expand to nothing, + breaking the GCC preprocessor. + +- The special definitions & code that help GCC to build itself are now + enabled through a single line in a local header file. + +- The file descriptor hook now sets errno to EBADF for file descriptors + which are not in use (this used to be ENOSYS). + + +c.lib 1.89 (23.11.2003) + +- The asynchronous file I/O support can now be enabled at library build + time by uncommenting a definition in a single header file. The makefile + dependencies then do the rest... + +- Fixed a bug in the Unix->Amiga path name conversion code. A trailing + "/." in a path name is now stripped. + + +c.lib 1.88 (22.11.2003) + +- alloca() is now included in the library even if GCC is used as the + host compiler. + + +c.lib 1.87 (17.11.2003) + +- truncate() and ftruncate() now safely extend the size of a file by + adding 0 bytes at the end. + + +c.lib 1.86 (17.11.2003) + +- Fixed a bug in the Unix->Amiga name translation which could lead to + a path beginning with "../" to be mistakenly identified as being an + absolute path name starting with "/". + + +c.lib 1.85 (16.11.2003) + +- The realignment code was missing in the FlushAsync() routine. Fixed. + +- The alignment position was not calculated correctly in SeekAsync() + as the wrong variable was involved. Fixed. + +- __umodsi3, __udivsi3, __udivsi4, __modsi3, __divsi3, __divsi4 would + not refer to the proper __UtilityBase library symbol. Fixed. + + +c.lib 1.84 (12.11.2003) + +- Updated the optional asyncio code to return to a block-aligned + file position after seeking in a write-only file. Also added + code to check if read/write access is actually allowed. + +- Multiple inclusion of debug.h no longer leads to trouble. + +- Merged duplicate file advisory lock testing code. + +- The dirent functions are now a part of libunix.a and no longer + appear in libc.a. + +- Advisory file locks can now start beyond the end of the (current) + file and it is possible to lock a region until the end of the file. + Previously, the latter was rejected as an invalid range. + +- If several exactly overlapping regions are locked on a file, + they all are now unlocked by a single call. + +- Replaced the qsort() code. + +- The assertion handling has moved into its own routine which + tries to make sure that the failure message is shown. + +- Rewrote clock() (again) to be much simpler in operation. + +- The opendir/readdir/closedir cleanup code now actually invokes the + closedir() function rather than doing the cleanup job manually. + +- open() no longer tests for delete protection after the file has + been already opened. If it's open, only a possible write protection + may be problematic and ought to be flagged. + +- __drop_iob_read_buffer() now checks if the buffered file is actually + in use. + +- If fseek(..,0,SEEK_CUR) is is called, it no longer results in the + read/write buffers to be dropped. + +- The snprintf() family now returns the proper number of characters + that would have gone into the buffer, if enough room were available. + Previously, it would stop counting after the buffer had filled up. + +- Merged duplicate code around free(). + +- The memory cleanup code now calls the free functions if memory + debugging code is enabled. + +- If the memory debugging code is enabled, allocations and deallocations + will trigger consistency checks now and then (with a likelyhood of + about 6% per operation). + +- mktime() now properly fills in the day of the week. + +- strftime() now expects the format hook code to provide for the NUL- + termination. + +- __translate_amiga_to_unix_path_name() now performs a sanity check + before it proceeds to use the supplied path name. The check is + to make sure that the local buffer does not overflow. Rearranged + code in __translate_unix_to_amiga_path_name() to perform a similar + test. + +- Rewrote the command line wildcard expansion code to use standard + Exec lists rather than the tricky singly linked list stuff, coupled + with tricky pointer arithmetic. If the code crashes, it's now much + easier to tell why. + +- The __usergroup_init() function now returns an error code rather + than dropping into exit() in case of trouble. + +- They 'key' parameter of bsearch() is now of type "void *" rather + than "char *". + + +c.lib 1.83 (5.11.2003) + +- The scanf() family now skips over initial whitespace preceding + data to be converted. Exceptions are the %c, %n and %[ conversions + which are documented not to bother. + + +c.lib 1.82 (4.11.2003) + +- Fixed another bug in the scanf() family. Floating point numbers were + not converted correctly, only the integral part was picked up. + + +c.lib 1.81 (4.11.2003) + +- Added assertions to track trashing of certain global variables. + +- Rewrote the select() wrapper again. It no longer makes assumptions about + the size of the fd_set data structures passed in. The new code is, however, + significantly more complex than it used to be. It uses far less stack space, + though... + + +c.lib 1.80 (29.10.2003) + +- More tweaking for the optional asyncio support. If requested, it's + always enabled for read-only files bound to descriptors, but never + for write-only or read/write access. It's always enabled for buffered + files standard I/O files because there's an fflush() to take care + of pushing the buffer contents to disk. There is no fsync() for + file descriptors which would accomplish the same. + + +c.lib 1.79 (29.10.2003) + +- The optional asyncio code now also sports a function similiar + to fflush() which will write the current contents of the buffer + to the file. + + +c.lib 1.78 (27.10.2003) + +- The asyncio code support is now an optional feature which can be + enabled at library build time by defining the ASYNCIO_SUPPORT + preprocessor symbol. + +- Cleaned up the code that uses the buffered I/O data structure + 'iob', which used to be a much bigger data structure with + a hard-coded buffer attached to it. The buffer is now allocated + dynamically when needed. + + Note that this change requires that the library is rebuilt or the + I/O buffer data structures will cause trouble. + + +c.lib 1.77 (26.10.2003) + +- Worked an updated version of the asyncio code into the library. + File I/O performance will benefit from this if, and only if, a + file is opened either for read or write access only. If both + read and write access are requested for a file, the asyncio layer + will not kick in. Also, in order to enable it, you have to declare + a '__asyncio_buffer_size' variable (see "stdio_asynciobuffersize.c") + somewhere in your program. + + Note that this change requires that the library is rebuilt or the + file descriptor data structures will cause trouble. + + +c.lib 1.76 (22.10.2003) + +- Added to define the macros va_startlinear() and + va_getlinearva(). + + +c.lib 1.75 (20.10.2003) + +- __initialize_fd() and __initialize_iob() now perform the bulk of the + data structure initialization rather than just setting the data to + zero and plugging in a hook function. + + +c.lib 1.74 (19.10.2003) + +- Renamed the global __fd_table variable to __fd to match the buffered + I/O data structure name. + +- Further modifications to make the debug version of the library build + without errors. + +- Moved the stack size usage checking code from _main() into separate + routines which are found in the linker library. + + +c.lib 1.73 (19.10.2003) + +- __grow_fd_table(), __grow_iob_table(), __flush_iob_write_buffer(), + __drop_iob_read_buffer(), __fill_iob_read_buffer() and __open_iob() + now returns 0 for success, -1 otherwise. + +- __grow_fd_table() and __grow_iob_table() now both set errno in + case of failure. + +- Lost the unnecessary file descriptor and buffered I/O table + initializations. + + +c.lib 1.72 (19.10.2003) + +- fopen(), freopen() and fdopen() now all call the same common + routine to set up a buffered stdio stream. Previously, the + fdopen() code was seperate and did things differently from + the rest. + +- Deletion of temporary files upon program exit could lead to + a crash (worst case), but never actually deleted anything. Fixed. + +- The stdio_exit() cleanup function now actually calls into + fclose() and close() rather than doing the same job all over + again manually. + +- Lost code which didn't make much sense in the socket descriptor + hook. Same thing for the temp file cleanup code. + +- dup() now invokes dup2() with the second parameter set to -1. + +- Simplified the duplicate cleanup in close(). + + +c.lib 1.71 (19.10.2003) + +- Added missing prototype for setbuf() in . + +- Put the definition of HUGE_VAL in inside #ifndef, to allow + GCC to do its thing. + + +c.lib 1.70 (18.10.2003) + +- The tests to verify that a file descriptor was valid all had a + problem. This test is now done in a separate function which + performs the necessary error checking. + +- The dup2() function did not close the second file descriptor + prior to duplicating the first one. Also, the dup(..,-1) case + did not return the number of the new file descriptor but -1 + instead. + +- The tests to check whether a Hook is attached to a file + descriptor now set errno to EBADF if no Hook is found. + +- All file descriptor flags are now cleared when a descriptor + is closed. Same thing for buffered files. + + +c.lib 1.69 (14.10.2003) + +- Not all conversions performed by the scanf() family would respect + the maximum field width. Fixed. + +- The local sscanf() file hook function had the last two parameters + reversed. Fixed. + +- strftime() now fills in the week day if it's not provided. + + +c.lib 1.68 (13.10.2003) + +- To activate the memory debugging code, use "#define __MEM_DEBUG". + Other debugging code (assertions) is deactivated through + "#define NDEBUG". + + +c.lib 1.67 (11.10.2003) + +- Reworked the program startup code. Instead of rattling down a number of + initialization functions, one at a time, the whole thing is now performed + through a 'constructor style' table. This ought to be replaced by the + real thing once it's safely possible. + + +c.lib 1.66 (11.10.2003) + +- UtilityBase, LocaleBase, SocketBase and UserGroupBase no longer override + any user defined global variables. The library now keeps them under + private names. + +- The wildcard expansion code would not return an empty argument list in + case no match was found. Fixed. + +- Cleaned up the stdlib_main.c code, moved all the data and function + references into local header files. + +- Completed the usergroup.library API integration for the OS4 variant. + +- The constructors are now called in forward order and the destructors + in reverse order. + +- Moved the constructor/destructor invocation code into a separate file. + + +c.lib 1.65 (9.10.2003) + +- In dev_t is now an unsigned long. + + +c.lib 1.64 (9.10.2003) + +- Bum. The old and the new clock() code was wrong. The clock() function + is supposed to return how much processor time the current process + consumed since it was started, which is a monotonously increasing + number (or something like it, unless the system time is reset). + The new code should deliver proper data, although it might be better + to switch it over to timer.device/ReadEClock. + + +c.lib 1.63 (8.10.2003) + +- Ouch, the old clock() code was correct, it just didn't look like it. + I rewrote it to make it clearer what happens and why it happens like + that [Andrija Antonijevic]. + + +c.lib 1.62 (6.10.2003) + +- A "+" and a "*" had been mixed up in clock(). Fixed. + + +c.lib 1.61 (5.10.2003) + +- Now that main.o is a platform neutral startup code file, it's possible + to do some machine type checks in "stdlib_machine_test.c". This code + checks for presence of an FPU and an MC68020 CPU (or better). It may + not work for -fbaserel32 which by the time the test is performed + will have already crashed. + +- Added the missing stdlib_dosbase.c, stdlib_localebase.c, stdlib_sysbase.c, + stdlib_utilitybase.c and math_init_exit.c files to the repository. + + +c.lib 1.60 (5.10.2003) + +- Renamed the source code files which implement the strtod(), strtol(), + strtoul(), atof(), atoi() and atol() functions. + +- Moved main() out of libc.a and made it into a startup object file + which needs to be added to the GCC specs file in the "*startfile" + section, right at the end of the list. This solves practically all + linking problems I encountered so far. Which means that -lunix + and -lsocket actually work and that you don't have to tweak the + specs file to build the compiler. + + +c.lib 1.59 (4.10.2003) + +- The math initialization/test function is now always invoked by the + _main() function. The math init/exit code defaults to stubs, though, + unless libm.a is linked in. + + +c.lib 1.58 (4.10.2003) + +- Moved the global library base/interface definitions from stdlib_main.c + into separate files, each of which defines a base/interface pair. + +- Moved the math library initialization/testing into libm.a where it + really belongs. The MathIEEE library base definitions went there, + too. + + +c.lib 1.57 (1.10.2003) + +- Calling dup2() on a stdio file reinitialized the source fd instead of the + destination fd. Fixed. + +- Added const declaration to first argument of sscanf(). + +- no longer enforces the inclusion of . + + +c.lib 1.56 (30.9.2003) + +- Moved the scalbn() function prototype into math_pow.c, where it is + used. This is not an ISO 'C' function to start with. + +- strtod(), strtol(), strtoul(), atof(), atoi() and atol() moved + from into . + +- fputs() no longer adds a newline character at the end of the line. + This is now done only by puts(). + +- fdopen(), fopen(), freopen() and popen() no longer mix up file + access mode options such as "r" and "r+". + +- popen() now adds the current time stamp to the name of the + temporary files it opens. + + +c.lib 1.55 (21.9.2003) + +- Added support for 'long long' quantities in the printf/scanf + families. This is not yet enabled by default since I couldn't + seem to make it work on the 68k platform. + + +c.lib 1.54 (18.9.2003) + +- fputs()/puts() didn't add the '\n' character at the end of the + line. Fixed. + + +c.lib 1.53 (25.8.2003) + +- Added hooks for code to perform wildcard expansion for all + command line parameters. Excluded are those parameters which + are surrounded by quotes ("). + + +c.lib 1.52 (19.8.2003) + +- fpos_t is now a scalar data type. + +- size_t is now an unsigned integer. + +- Lost the file descriptor table usage counter. Whether or not a + file descriptor is in use is now indicated by a flag. + +- Temporary buffered files now have a dynamically allocated temporary + file name string attached. Previously, a statically allocated + buffer was part of each file buffer data structure. + +- The order of the hook parameters for the file descriptor and + buffered files was wrong. + +- All the buffered file routines now check if the file in question + is actually in use before they proceed. + +NOTE: the last four changes require a rebuild of the entire library, + just to be safe! + + +c.lib 1.51 (12.8.2003) + +- setvbuf() now sets the buffer size to 0 when switching a stream + into unbuffered mode. Also, with buffering mode _IONBF (no + buffering) no memory is allocated and no supplied buffer is + used. + +- The stdio cleanup code no longer runs all file descriptors and + files through the shutdown code. Only those which are actually + in use. + +- Fixed a typo in the BSD style license text. + +- Cosmetic changes... + +- fopen("a+", ..) did not actually append any data. + +- The unlink() cleanup code didn't unlock the temporary locks + it maintained. + + +c.lib 1.50 (2.8.2003) + +- Rewrote the entire Amiga->Unix and Unix->Amiga name/path translation + code from scratch. It's now much more robust than it used to be. + +- Restored the original difftime() code. + + +c.lib 1.49 (1.8.2003) + +- vfprintf() now treats the '%' format specifier as an escape + character and produces the next following letter as is if that + letter does not indicate a specific format. + + +c.lib 1.48 (31.7.2003) + +- vfprintf() now sets up the buffer it uses for converting numbers + into text every time it goes through the main loop. This means + that a terminating '\0' is placed at the end. + +- vfprintf() now first checks if a floating point number is + +/-infinity or not a number and then performs the '%g' check + to figure out which output format should be used. + +- Fixed the alternate conversion option for precision == 0 and + the %e/%f/%g conversions. + +- In vfprintf(), if there is no digit following the precision + specifier, the precision is now set to 0. + +- In vfscanf() only %c, %s and %[ respond to the maximum field + width option, all other conversion methods ignore it. + +- readdir() again returns the ".." entry for the root + directory. + + +c.lib 1.47 (31.7.2003) + +- Fixed vfscanf() and strtol() again to accept very small negative + integers (-2147483648). The previous check to avoid overflows + was too strict. + + +c.lib 1.46 (31.7.2003) + +- strftime() now makes sure that the string generated is always + NUL-terminated. The formatting code checks if the dates are + in range to avoid accessing invalid day/month table data. + + +c.lib 1.45 (30.7.2003) + +- lseek() could end up freeing a local buffer twice. Fixed. + +- The sscanf() wrapper no longer emulates seek/write. + +- Added some more error checking to the vasprintf() code. + +- Fixed the %h qualifier in vfprintf(). + +- The %d conversion of negative integers in vfprintf() was relying + upon a non-portable operation: the % operator used on negative + numbers was expected to yield a negative result. The new code + tries to be more careful and uses the % operator only on + non-negative numbers. + +- vfprintf() now handles floating point number exponents + gracefully which are larger than 100. + +- Made the varargs handling vfprintf() more portable. + +- vfscanf() could produce an error if a character in the + format string did not exactly match the corresponding + character in the input stream. Now it just pushes the + character back and stops scanning. + +- The %c conversion in vfscanf() never stored more than + one single character. + +- The automatic %d octal number conversion in vfscanf() lost + the first digit following the introducing '0'. Fixed. + +- vfscanf() now properly handles the 0x/0X prefix for the + %x conversion. + +- vfscanf() now only returns EOF if no arguments could be + converted and the EOF status of the stream involved has + been asserted. + +- vsnprintf() no longer tries to skip the trailing NUL byte if + the resulting string is larger than the buffer it would + hold. + +- The memory allocation cleanup code now also properly handles + the extra large debug allocations and cleans up the + alloca() tracking list. + +- Fixed strncpy() and strncat() again not to write too much + data. Also strncat() does not pad the destination buffer. + Neither function is supposed to do anything if the + length parameter is negative. + +- strncmp() now returns 0 if the length parameter is negative. + + +amiga.lib 1.7 (30.7.2003) + +- None of the 68k assembly language files appear in the PowerPC build + any more. Also, none of the functions which use the local CallHook() + appear in the PowerPC build either. + + +c.lib 1.44 (28.7.2003) + +- Files created through open() now get their 'executable' protection + bits cleared when they are closed. + +- mkdir() now sets the protection bits on the directory created. + +- The record locking code now uses shared semaphore locking where + necessary. + +- Added workarounds for NIL: style file handles inthe record locking + code. + +- Preparations to get rid of the file descriptor use counter... + +- __open_iob() no longer calls lseek(). + +- popen() and fdopen() now also ignore the extra access options + separated by a comma. + +- tmpnam() now creates names with up to 10 characters. + +- Lost the special case code for zero length memory allocations. + They now produce NULL result codes. + +- Lost the DosLibrary, LocaleBase and ExecBase definitions where + they were not actually required. + +- strncat() didn't pad the destination string with NUL bytes, + according to spec. Fixed. + +- Fixed the weird strxfrm() to work according to spec. + +- Simplified the asctime() and strftime() code. + +- The "%j" format specifier did not produce exactly three digits + in strftime(). Fixed. + + +amiga.lib 1.6 (28.7.2003) + +- Removed NULL pointer checks from "amiga.lib". Added assertions in + their places. + +- Added tests for IconBase and CxBase to the "amiga.lib" routines. + + +c.lib 1.43 (27.7.2003) + +- readlink() didn't free the DeviceProc structure it could use. + +- More fixes to the record locking code. If a lock/unlock action was + performed on a duplicate of a file descriptor, it wasn't always + guaranteed that all the duplicate/original file descriptors were + affected. + +- Fixed a potential bug in the strncpy() code which could drop into + an infinite loop. + +- Replaced almost all do .. while loops with while .. loops. + + +c.lib 1.42 (27.7.2003) + +- Changed the memcpy(), bcopy(), memmove() and bcopy() code + not to use any assembly language bits. I'm wondering whether + this will have an effect on overall stability. + +- The internal number->string conversion routine used by the + time.lib code had two of its parameters swapped. Fixed. + +- The main() startup code had a bug in the character escape + handling. Everything escaped other than 'e' or 'n' would + terminate the respective command line parameter in place. + +- The shell escape character (default is '*') is now configurable + at compile time, which can help applications ported from the + Unix world.Note that you cannot override the '*' escape character, + you can merely define another valid escape character. + +- Changed how double quotes are used by the main() startup code. + A quoted string is now terminated if there is a blank space + following the final double quote or if the end of the command + line is reached. + + +c.lib 1.41 (26.7.2003) + +- In vfscanf() the '%e', '%f' and '%g' conversions now default again + to 'float' unless a format size specifier is used. Also, the function + no longer 'forgets' that the default conversion is being used, which + could happen if several parameters were to be converted. + +- asctime() now tries to make sure that the conversion process + does not overflow the local buffer. + +- readdir() no longer returns the ".." entry for the root + directory. Also simplified the readdir() cleanup code. + +- open(), stat() and lstat() could leave dangling FileLocks behind. Fixed. + +- dup2() now returns the new file descriptor rather than 0. It also + tries to close the second descriptor if that one is in use and + easy to close. + +- fileno() never returned the associated file descriptor but the + table index of the FILE stream. Fixed. + +- Increased the internal maximum directory/file path length to + 1024 characters. Note that this means that the entire library + will have to be rebuilt! + +- setvbuf() now frees its custom allocated buffer if flushing the + write buffer fails. + +- setenv() now longer permits a NULL 'value' parameter. + +- fdopen() now 'claims' a file descriptor rather than performing + an 'internal' dup() on it. + +- vfscanf() now stops converting the mantissa when it finds + an exponent character in the input stream. + +- vfscanf() now makes sure that the strings it reads are + all NUL terminated while they are being read. If the + conversion is aborted, this will still produce a properly + NUL terminated string. + +- The '%' conversion in vfscanf() no longer exits with an + error if the next character read does not match the + '%s' character. + +- vfprintf() now watches the size of the buffer it uses for + converting numeric data into strings. + +- The file descriptor hook code now initializes the duplicate + when it performs a dup() operation. + +- The record locking support now also extends to duplicated + file descriptors. + +TODO: replace struct fd.fd_UseCount with a flag. + + +net.lib 1.8 (25.7.2003) + +- The select() function was broken in a number of ways. Always was, even + in its original form in the Samba 2.0.7 Amiga emulation library. First, + the except_fd bits could have been set even for files (unlikely, if not + impossible to happen). Second, if sockets and real files were used in + parallel, sockets were preferred and the FD_SETs for the files would + come out as indicating that data was available for reading/writing + (which was wrong). Third, the test loop which checked whether the files + had data waiting to be read never initialized the data structure it + had to use. As a bonus, the new code now also checks if a file is + writable and will then flag its FD_SET bit as "ready for writing". + +- More fixes to select(): in each iteration of the polling code, the + set bits would be cleared that might later be used to check for + new input. This no longer happens. + + +c.lib 1.40 (25.7.2003) + +- fopen() now ignores any open options following the mode string, + separated by comma. + + +c.lib 1.39 (23.7.2003) + +- Ouch! vfprintf() didn't work right for floating point number conversion + (again). The '%g' conversion code didn't work on the PowerPC because + the method employed to figure out which format to use was not portable. + Fixed. The '%f' conversion code would produce no output at all if the + number to be printed was zero and the number of digits following the + comma was zero, too. Fixed. Large numbers didn't come ought right. + Fixed. The '%e' conversion code was ill prepared for converting + negative numbers and sometimes failed to produce digits. Fixed. + +- More trouble. strtod() and, by extension, atof() didn't convert + numbers properly with more than one digit following the mantissa. + Fixed. Same stupid problem in vfscanf(). + +- The '%e', '%f' and '%g' conversions would always default to 'float'. + They now default to 'double'. Use the 'h' or 'L' specifiers if you + want less/more. + + +c.lib 1.38 (23.7.2003) + +- The '%s' and '%[' conversion code in vfscanf() never NUL-terminated + the string just read. Fixed. + + +amiga.lib 1.5 (15.6.2003) + +- CreatePort() didn't fill in the port priority. Fixed. + + +amiga.lib 1.4 (1.5.2003) + +- RangeRand() didn't obey the range parameter's restrictions. Fixed. + + +c.lib 1.37 (3.3.2003) + +- Added an option to allow a program to detach itself from the shell + it was launched from. This option is ignored for residentable + programs. + + +c.lib 1.36 (14.2.2003) + +- Removed redundant code from the routines which deal with buffered + stdio streams. The respective routines now only test for the + buffering type and ignore the buffer size altogether, just like + it's supposed to work. + +- Fixed the vfprintf() %e format output which no longer flips the + sign of the number to be converted until it's safe to do so. + The code to figure out whether %g should be mapped to %e or %f + was unreliable because it could miscount the number of digits in + front of the comma. + +- Updated the code that dumps the stdio buffer in fcntl() before the + set/get lock function is performed. These two should have nothing + in common, though. Let's see what it does. + + +c.lib 1.35 (13.2.2003) + +- When a stdio or plain unbuffered stream is opened, the respective data + structures are reinitialized with default values. Previously, the old + settings could persist and stale data could cause unallocated or + reallocated data to be clobbered. This seems to have been the problem + which eventually broke the Samba port. + +- Added some more code to improve debug output quality. + +- The buffered stdio routines now include some extra safety checking + code in case the buffer data structures get clobbered. Not that this + should happen again... + + +c.lib 1.34 (8.2.2003) + +- The program startup code now opens dos.library and utility.library + before it starts to figure out whether it has sufficient stack space + available or not. This allows the stack size setup callback function + to get its bearings. It also simplifies the startup code a bit. + +- The UtilityBase and LocaleBase library bases will now be cached until + the startup code performs its cleanup duties. This is intended to help + application software which insists on reopening these libraries by + itself all over again. + +- The stdio initialization code now uses the shell's standard error output + stream if one is available. Otherwise, it will open "CONSOLE:" instead, + thereby cloning the console file handle. + + +c.lib 1.33 (2.2.2003) + +- Rewrote the vfprintf() floating point conversion code not to rely + upon floating point to integer conversions which could overflow the + capacity of 32 bit integers. The new code now converts the individual + digits as floating point numbers which then end up getting converted + into integers, which should be safe enough. + +- Simplified the fgets() code a bit. + + +c.lib 1.32 (26.1.2003) + +- The fgets() EOF detection was flawed. Fixed [Andrea Valinotto]. + It now returns NULL if no data was read yet and an EOF condition + was detected. Previously, it would keep returning an empty string. + + +c.lib 1.31 (14.1.2003) + +- Rewrote the floating point conversion code in vfscanf(). The + EOF handling for the data to be parsed was not robust enough. + It aborted scanning altogether if the last data item also + included the last character in the data stream. + +- Now properly counts all characters read in vfscanf() even if + some of them have to be pushed back. + +- Invalid character matches are now pushed back by vfscanf(). + + +c.lib 1.30 (28.12.2002) + +- ungetc() now returns the character pushed back, or EOF if it + could not push anything back. It also clears the end-of-file + indicator. + +- ftell() no longer drops the read/write buffer contents. It now + checks where the current file access pointer is and then adjusts + that position with regard to what's in the read/write buffer. + + +net.lib 1.7 (28.12.2002) + +- The socket file descriptor hook now rejects seek accesses, + setting the proper errno code ESPIPE. + + +net.lib 1.6 (21.12.2002) + +- Turns out that the daemon socket bound to the stdio streams must be + marked as available for reading and writing or Samba won't work. + + +stack.lib 1.2 (18.12.2002) + +- Added code that collects information on how much memory is allocated + for stack extension. That data is printed by the debug library before + it exits. + + +c.lib 1.29 (18.12.2002) + +- strxfrm() and strcoll() did not use the locale.library pragma/inline + header files and thus would not link properly. Fixed. + +- Changed the entry assertions for bcopy(), bsearch(), memcpy(), + memmove(), memset() and bzero() to ignore zero length arrays. + This fixes the GCC port which had alloca(0) followed by bzero(..,0) + in it. + +- malloc() and alloca() now return NULL again for a zero length + allocation. Not sure if this is the way to go... + + +c.lib 1.28 (14.12.2002) + +- setenv() trashed the variable value to be used if the variable and + value names were given in the "variable=value" form. Fixed. + +- Reworked the overflow checking for strtol() and the scanf() family + again. This time it hopefully works as expected. + +- Trying to allocate a memory chunk of size 0 now returns a pointer + to a unique address rather than NULL. I wonder whether this is + really the right thing to do, but it seems to help the compiler. + +- Calling realloc() on a memory chunk with exactly the same size it + was allocated with now returns a pointer to that chunk rather than + NULL. + +- The alloca() memory cleanup code is now triggered from within the + library by a separate function which can be told apart from user + code making the call. + +- Now remembers which local variables were set with putenv()/setenv() + and makes sure that before it exits that they all get removed first. + + +c.lib 1.27 (13.12.2002) + +- The strtol() fix didn't actually fix anything broken, but broke some + working things instead. Fixed. + +- Reworked the overflow checking code in scanf() and strtol() again to + compile without producing warnings. + + +c.lib 1.26 (13.12.2002) + +- strtol() did not set the converted number to the smallest possible + negative integer if the number to convert had a sign. Fixed. + + +c.lib 1.25 (13.12.2002) + +- Added special case code to handle conversion of the smallest long + integer -2147483648 from ASCII string to number. + + +c.lib 1.24 (12.12.2002) + +- vfprintf() couldn't convert -2147483648 into a string. This is what + caused GCC to fail rebuilding itself. Fixed. + + +c.lib 1.23 (12.12.2002) + +- setvbuf() now consistently accepts a size value of 0, whereupon + it will default to "no buffering" mode. + +- Ouch. My "optimization" for unbuffered streams did not work if the + buffer size was set to zero. Fixed. + + +c.lib 1.22 (12.12.2002) + +- The buffered file I/O routines no longer take care of appending + data to the end of the file. This is now done entirely by the + file descriptor layer. + +- fread() could in unbuffered mode end up reading partial elements + from the file. It now backs up to change the file position to take + the exact number of records into account that should have been + read. + +- setvbuf() now frees the custom file buffer before replacing it + with a user supplied buffer. + +- stderr is no longer buffered by default (as it should be). However, + optimizations are in place to make vfprintf() and fputs() queue their + output until they return. + + +net.lib 1.5 (12.12.2002) + +- Replaced the inline header files. + +- When launched as a daemon from inetd or similar, the daemon socket + passed to the startup code is now adopted for stdin. Previously, + three new sockets were duplicated from the daemon socket. Also, + the three stdio streams are no longer buffered by default. The + file descriptor setup now matches the standard I/O setup in that + stdin can be read from and stdout/stderr can be written to. + + +c.lib 1.21 (10.12.2002) + +- The path name translation code could end up clobbering the original + string. Fixed. + +- The command name translation in system() did not work right. It + ended up translating the entire string which bombed with very + long command lines. Same problem for popen(), same fix. + +- Updated the Unix name translation code to bail out of the string + to translate is too long to be translated in the first place. + Previously, it just trashed the stack :( + +- system() now calls SystemTagList() with SYS_UserShell=TRUE. + +- Fixed up the header files so that function pointers for the debug + routines actually work. This became apparent when I was trying to + rebuild the binutils with the clib2. + +- The header file no longer pulls in + by default. If it hasn't been included yet, then only the timeval + structure is defined. + + +c.lib 1.20 (8.12.2002) + +- The stdio buffered file I/O routines now clear their error indicators + before work begins. + +- Simplified the code to back the lseek() function. It no longer calls + Seek() twice if the file position does not change. + +- fgetc() and fputc() now set errno to EBADF if the file in question + cannot be read from or written to, respectively. + + +amiga.lib 1.3 (8.12.2002) + +- The name of the memory pool is now placed at an odd memory location. + + +c.lib 1.19 (4.12.2002) + +- index()/rindex()/strchr()/strrch() now perform signed byte + comparisons. These used to be unsigned. + +- Added a cast to memchr() to make sure that the comparison + is performed on unsigned bytes. + +- fseek() and fsetpos() now clear the file EOF condition. + + +c.lib 1.18 (29.11.2002) + +- ftruncate() no longer works for files which aren't open for writing. + +- Simplified the __show_error() code. + +- When allocating a custom buffer, setvbuf() didn't actually fill in + the allocated buffer's address, causing data to be trashed. Fixed. + Setting the buffer size to zero now works only for the + "don't buffer" mode. If the buffer size was changed, the previous + buffer was not flushed to disk before. + +- If an attempt to flush a file write buffer fails, the next attempt + to put data into the buffer will retry flushing the buffer. + Previously, data would have been written beyond the bounds of the + buffer. + +- If fgets() hits an error, it now NUL terminates the string + to be on the safe side. + +- Lost the (disabled) asyncio code. + +- The startup file for SMALL_DATA32 mode did not set up register A4 + at all. Ouch. + + +amiga.lib 1.2 (29.11.2002) + +- Fixed the RVI code to look & work more like the original implementation. + + +m.lib 1.2 (7.11.2002) + +- pow() called the IEEEDPPow() LVO with the x/y parameters reversed. + Actually, IEEEDPPow() seems to be the one to blame [Andrija Antonijevic]. + +- __fixunsdfsi() and __fixunssfsi() had a cast in the wrong place. + The original libnix functions these were based on were still + correct [Andrija Antonijevic]. + + +m881.lib 1.2 (7.11.2002) + +- __fixunsdfsi() and __fixunssfsi() had a cast in the wrong place. + The original libnix functions these were based on were still + correct [Andrija Antonijevic]. + + +c.lib 1.17 (7.11.2002) + +- ftell() now returns the current file position rather than invoking + fseek(), which does something different altogether [Andrija Antonijevic]. + +- fgetpos() now calls ftell() [Andrija Antonijevic]. + +- fsetpos() didn't properly evaluate the return value of fseek() + which would have been -1 in case of error [Andrija Antonijevic]. + +- fseek() now returns 0 for success and -1 for error [Andrija Antonijevic]. + + +c.lib 1.16 (5.11.2002) + +- memcpy() and memmove() had a debug switch wired the wrong way + round, causing the wrong kind of code to be emitted. Code which + could call exec.library/CopyMem and shouldn't have called it. + Fixed. It no longer depends upon exec.library. + +- Removed all the abort signal routines from the string formatting + code. This kind of action is now done solely by the I/O routines. + + +c.lib 1.15 (4.11.2002) + +- sscanf() ended up calling vfprintf(). Ouch. + +- Practically none of the numeric conversion operations in the scanf() + family actually worked. Fixed. + +- scanf() and friends now push a character back upon detecting an + overflow rather than using it and setting the number converted to + MAXINT. + + +c.lib 1.14 (21.10.2002) + +- Rewrote strcasecmp() and strncasecmp() to work more like strcmp() and + strncmp(). Previously, these functions would drop into the utility.library + routines Stricmp() and Strnicmp() which don't work like strcmp() or + strncmp(), respectively. + +- Rewrote the code that closes file descriptors. It should now be much smarter + in handling duplicates. + +- fchmod() invoked the wrong hook action which could lead to a crash. + +- Added wrapper code for ExamineFH() to avoid crashing due to a bug in + dos.library V40 and below with NIL: file handles. + +- The temporary directory locks set up for temporary files were never + unlocked. + +- Submitting an untracked memory region to be freed did not produce the + intended error output. + + +c.lib 1.13 (7.10.2002) + +- The vfprintf() family didn't produce any sign characters at all unless + a field width specifier was used [Andrija Antonijevic]. + + +c.lib 1.12 (28.9.2002) + +- The vfprintf() family got the hexadecimal number conversion (and the pointer + conversion, too) wrong because the conversion string had an extra zero digit + in it [Detlef Würkner]. + + +c.lib 1.11 (15.9.2002) + +- In the printf() family, the default case for '%c' (plain character + output without padding) did not update the length of the string + created [Andrija Antonijevic]. + + +c.lib 1.10 (11.9.2002) + +- In gettimeofday() the important DateStamp() call was missing [Andrija + Antonijevic]. + +- Removed the replacement remainder calculation code. It's not necessary. + + +c.lib 1.9 (7.9.2002) + +- Added replacement code for the two routines the updated compiler will call + in place of the inline '020 math which cannot be used on the '060. This + ought to be done smarter, but this works, too. + + +c.lib 1.8 (28.8.2002) + +- The open() code now avoids calling Lock() on NIL:, which otherwise could + have caused the file open action to follow later to be skipped. + +- Added more compiler internal code to support SAS/C. + +- Increased the size of the memory debugging walls. + +- When reading data off stdin character by character, the stdout and + stderr streams are now flushed first. + + +c.lib 1.7 (27.8.2002) + +- Discovered that ExamineFH() and ChangeMode() will crash on file + handles which refer to "NIL:". Put a workaround for these into + the open() code. + + +c.lib 1.6 (27.8.2002) + +- With the standard I/O streams the vfprintf() code would still add a + terminating NUL byte to each string printed. Fixed. + +- The open() code now checks before it opens if the file in question + can be overwritten, should this be necessary. Likewise, once the + file in question has opened, its protection bits are examined to + verify that the access mode it has been opened for is applicable + in the first place. + +- The asynchronous I/O option now works only for O_RDONLY and O_WRONLY + mode access. + + +c.lib 1.5 (25.8.2002) + +- fread() treated EOF as an error, returning with 0 characters read + from the buffer even if there was still some data in the buffer that + could be read. + +- fread() now seeks back to the last location it could read an entire + element from. Subsequent fgetc() calls will thus pick up the data + not processed by the previous fread() call. Also, if fread() encounters + an error, it seeks back to where the read was supposed to begin. + + +c.lib 1.4 (22.8.2002) + +- Updated the ctype_headers.h, locale_headers.h, math_headers.h, + signal_headers.h, stdio_headers.h, stdlib_headers.h, string_headers.h, + strings_headers.h and time_headers.h header files. The extern library + definitions are now in the SAS/C branch. + +- Moved the __is_daemon definition from unistd.h into dos.h and changed + its type as well. + + +net.lib 1.4 (22.8.2002) + +- Updated the SAS/C compatible prototypes and #pragma definitions. + + +c.lib 1.3 (22.8.2002) + +- Files opened in exclusive access mode are now switched back into + shared access mode for testing. + +- The asynchronous file I/O is now enabled only for read and write + access. Appending is disabled. + +- You now have more control over the asynchronous file I/O and can + enable it on demand and specify the default buffer size. + +- You can now provide for a callback function that initializes the + default stack size to use early on during the runtime configuration + process. + + +net.lib 1.3 (22.8.2002) + +- getgroups() and setgroups() now ignore the second parameter if the + number of groups involved is zero. + +- Upon startup, the runtime environment now sets a global variable + to 1 if the current program was launched by the internet superserver + or an equivalent facility. + + +c.lib 1.2 (21.8.2002) + +- Added sigaddset() and sigemptyset(). + +- isxdigit() didn't work. Fixed. + + +net.lib 1.2 (21.8.2002) + +- Added setpwent(), getpwent(), endpwent(), setgrent(), getgrent() and + endgrent() + + +---------------------------------------------------------------------------- + +amiga.lib 1.1 (20.08.2002) + +- Now bears a version number. + + +c.lib 1.1 (20.08.2002) + +- Now bears a version number. + + +debug.lib 1.1 (20.08.2002) + +- Now bears a version number. + + +m.lib 1.1 (20.08.2002) + +- Now bears a version number. + + +m881.lib 1.1 (20.08.2002) + +- Now bears a version number. + + +net.lib 1.1 (20.08.2002) + +- Now bears a version number. + + +stack.lib 1.1 (20.08.2002) + +- Now bears a version number. + + +unix.lib 1.1 (20.08.2002) + +- Now bears a version number. + + +---------------------------------------------------------------------------- + +- '%f' floating point output now also works for numbers > 9. + +- needs to include and . + +- now only defines a bunch of data types, it no + longer includes any header files. + +- Activated the local bcopy() and ovbcopy() code. + +- Added ACrypt(). + +- Added CreateTask() and DeleteTask(). + +- Added Sebastian's fix for vsprintf(), which did not generate + a '-' at all appropriate times. + +- Added Unix-style directory scanning with pseudo "/" directory + support. + +- Added __stdio_configure_streams() to reconfigure the stream + I/O after the Workbench output window has been opened. + +- Added a local NewList() replacement. + +- Added a plain 68k version of the setjump()/longjmp() pair. + +- Added an extra call to __check_abort() after each + bsdsocket.library call. Because, if a ^C was registered, + causing the respective function call to return, the signal + will still be set, waiting to be picked up. + +- Added assertions to vfscanf(). + +- Added basename(), dirname(), asprintf(), snprintf(), + vasprintf(), vsnprintf(), mkdtemp(), mkstemp(), mktemp(), + putenv(), setenv(), unsetenv(), strcasecmp(), strncasecmp(), + strdup(), gettimeofday() and alloca(). + +- Added data and code to support SAS/C stack overflow checking + and abort. + +- Added further ^C checking to closedir(), opendir(), readdir(), + rewinddir(), creat(), open(), read(), write(), chmod(), fchmod(), + fstat(), lstat(), mkdir(), rmdir(), stat(), fprintf(), fputs(), + ftell(), getc(), getchar(), gets(), __open_iob(), printf(), + putc(), putchar(), puts(), rewind(), setbuf(), sprintf(), + tmpfile(), tmpnam(), vfprintf(), __vfscan(), vprintf(), + vsprintf(), getenv(), system(), strtod(), strtol(), strtoul(), + strftime(), access(), chdir(), chown(), fchown(), fileno(), + ftruncate(), getcwd(), getopt(), lchown(), link(), readlink(), + sleep(), symlink(), truncate(), unlink() and utime(). + +- Added getopt(), kill() and getpid(). + +- Added grp.h and pwd.h header files. + +- Added isatty(). + +- Added more assertions and tests to detect illegal parameters + earlier than before. + +- Added more assertions to strftime(). + +- Added more casts to (size_t) where appropriate. + +- Added more memory debugging hooks to other routines which + implicitly allocate memory and return it. + +- Added more of the GCC specific support routines. + +- Added new __get_a4() and __set_a4() routines to the startup + code. Also put them into the header file. + +- Added platform specific header file. + +- Added popen() and pclose(). + +- Added some more assertions to qsort(). + +- Added some of the bsdsocket.library stubs required for + Samba 2.0.7 to work. + +- Added stack size checking support. + +- Added stack swapping code. + +- Added statfs() and fstatfs(). + +- Added stub code to handle double precision IEEE math. + +- Added support code to emulate the behaviour of debug.lib. + +- Added the Amiga/Unix name translation code. + +- Added the GCC specific floating point runtime library routines. + +- Added the GCC specific startup code. + +- Added the README file. + +- Added the amiga.lib RVI code. + +- Added the hook and method functions from amiga.lib. + +- Added the math support code. + +- Added the memory allocation debugging code. + +- Added the memory pools code to the amiga.lib set. + +- Added the monitoring and debugging code. + +- Added the remaining few amiga.lib 'C' library routines. The + memory pools stuff is probably hopeless, but we'll what I can do. + +- Added the socket I/O wrapper. + +- Added the source code comments to the memory pools source code. + +- Added the stack extension code. It still has to be updated to + be more readable, though. + +- Added the wide character stubs. + +- Added umask(). + +- Added usergroup.library support. + +- All debug output now uses kprintf() again. + +- All memory allocations now use malloc() and free(). + +- Changed the manner in which the floating point support code is + compiled into the library. + +- Changed the name of the preprocessor symbol which activates + the Unix file name semantic support. + +- Changed the names of unused function parameters to match their uses. + +- Changed the way the library is built. We now build seven + different component libraries which all must be linked + separately. + +- Conditional branches no longer bear an 's' or 'w' suffix. + The assembler is supposed to find out all by itself which + one should be picked. + +- File descriptors and I/O buffers now receive the respective + data structures as part of the hook calling packet rather + than having to probe the h_Data contents. + +- Finally figured out what the %n format specifier is supposed + to accomplish in fprintf(). + +- Finally figured out what the __main() reference was good + for and implemented construtor and destructor support. + +- Fixed a bunch of compiler warnings. + +- Fixed more than one bug in sleep(). This time the code + hopefully works as advertized. + +- Fixed several bugs GCC highlighted. + +- Fixed two more compiler warnings related to signed/unsigned + comparisons. + +- For Workbench startup, the stderr stream is now merely an alias + for the stdout stream. + +- Forgot the SAS/C CallHookA() stub. + +- Forgot to add the stubs for the socket and usergroup components. + +- Found and worked around two more code generation problems with + WaitSelect() and recvfrom(). + +- GMT+0 always came out as GMT+ with strftime(). It now stays GMT. + +- If possible, memory pools are used for memory management. + +- In we now define sigset_t rather than in . + +- In CreateTask(), the recovery from a failed AllocEntry() call + was flawed. Reread the exec source code and fixed that bug. + +- In alloca(), no unused memory was ever freed. + +- In listen() a test to see if the file descriptor was really a + socket was missing. + +- In memmove(), the local ovbcopy() code is now smarter about the + registers it has to save. + +- In stat(), lstat() and fstat() the st_dev structure member is + now initialized with the address of the file system's MsgPort + the respective directory/file is stored on. This allows file + descriptors to be compared. + +- In strstr() there is now a test to make sure that the substring + is smaller or equal in size to the big string to be searched in. + +- In vfprintf() the '%g' output format always came out as '%e' if + the precision was uninitialized. Fixed. + +- Instead of passing local variables around to show errors or to + display the current program name, the whole code now uses global + variables. + +- Integrated a modified version of the Commodore asynchronous file + I/O code into the library, mainly for the benefit of Samba. + +- Integrated the default stack size checking variables into the + makefiles. + +- Integrated the extra super elaborate advisory file locking code + which worked so well with Samba. Or did it? With the new library + it appears that opportunistic locks don't work any more. I'm not + so sure if they ever did :( + +- Knocked up replacement functions for amiga.lib and SAS/C runtime + library functions. + +- Looks like Samba needs the super elaborate locking method after + all. Oh well... + +- Modified the startup code and the assembly language fragments + to support the -fbaserel32 option. Built Samba 2.0.7 with it, + which actually seems to work OK. + +- Modified the unistd.h header file to avoid clashes with the + TCP/IP header files. + +- More components are now part of libunix.a to make sure that the right replacement functions are linked in. + +- Moved NewList() into its own source file. This is supposed to + be more compatible with amiga.lib. + +- Moved all the functions which are unimplemented out of the build + files. The old build makefiles are still around, though. + +- Moved the fundamental file descriptor I/O into the stdio branch. + The fcntl branch now only contains stubs. + +- Moved the locale references made in strtod() into the math + libraries, too. + +- Moved the macro definitions into a separate header file. + +- Moved the string hook code into sscanf(). + +- No longer uses the cooked version of for the build. + A local "debug.h" header file is used instead. + +- Now actually compiles and links with GCC. + +- Now builds code for the 68020-60 target rather than 68020-40. + +- Now builds with SAS/C again. + +- Only a single error message should appear during startup, not + a long list of messages for each problem that might appear. + +- Oops. Forgot the constructor/destructor defaults for GCC. + +- Oops. One variable was uninitialized. + +- Plugged in the optimized assembly language data copying code. + +- Preparations for %ll support in vfprintf() and vfscanf(). + +- Rebuilt with GCC, which revealed a problem in calling + AutoRequest(). Fixed. + +- Rebuilt with new GCC inline macros which yield better code. + +- Redid the BOOPSI functions in 'C'. + +- Redid the qsort() code, borrowing snippets from libnix2. + +- Reduced the complexity of fseek() a bit. + +- Renamed stdio_unixsemantics.c to stdio_unixbehaviour.c. + +- Reorganized the libdebug.a source code. Each file now contains + only a single routine. + +- Replaced all unconditional branches with jbra. + +- Restored the old advisory record locking code to see if it + makes a difference. + +- Reviewed the stack extension code and added comments. Now + uses pooled memory allocations instead of AllocMem()/FreeMem() + if possible. + +- Reworked the header file set to key off the compiler used. + +- Reworked the popen() initialization code. + +- Rewrote the ncrt0.S and nrcrt0.S startup code again, trying to + make it simpler. + +- Rewrote the setjmp()/longjmp() code to also save and restore + the floating point register set if there is an FPU installed. + +- Separated the code paths for alloca(), malloc(), realloc() + and free(). They all call intermediate routines to get their + jobs done. + +- Simplified error return codes in many components. + +- Simplified the build makefile. + +- Stack swapping appears to work. + +- Switched compiler options to large data/large code to keep + SAS/C out of my hair. + +- Tested the Unix name semantics translation. + +- The 'e', 'f' and 'g' formatting commands produce no output + the floating point support code is not built into the library. + +- The Amiga/Unix name translation routines now treat "" and "." + special. + +- The FLOATING_POINT_SUPPORT macro definition never checked for + the M68881_FLOATING_POINT_SUPPORT symbol. Fixed. + +- The HUGE_VAL constant now actually refers to a constant floating + point number which the startup code will initialize with 'positive + infinity'. + +- The IEEE math code now compiles properly. + +- The IEEE math libraries are now opened requiring version 33 or + higher. Earlier versions did not support floor() or ceil(). + +- The Unix name translation code now allows for files in /dev to + be accessed. /dev/null, however, is still mapped to NIL:. + +- The __swap_stack_and_call() function never actually loaded A6 + with SysBase. Guess I was lucky... + +- The _main() startup code now displays error messages and is more + careful about mucking with the program's streams and current + directory configuration. + +- The abort() and raise() code now shares the same error message. + +- The abort() code now drops into _exit() rather than relying + upon raise() to do this. + +- The amiga_rexxvars code no longer uses 'fp' in place of 'a5'. + +- The asyncio.c code now uses the local bcopy() routine rather + than calling into CopyMem(). The local bcopy() is a lot faster. + +- The atexit() processing now takes care of all registered + functions, even if exit() is called by one of them. + +- The constructor/destructor support code could crash if no + such functions were present in the binary. Fixed. + +- The conversion of the program startup parameters to a command + vector now works as expected. + +- The debug.h header file now also works with GCC (sort of). + +- The file descriptor duplication is now done in the respective hook. + +- The fundamental lseek() code could trash the current file + position. Fixed. + +- The kgetnum() code did not properly update the character + position for the sign and the digits. Fixed. + +- The libdebug.a code is now fully self contained, so that it may + be linked in last. + +- The log tag initialization in the socket setup code did not work + properly. Fixed. + +- The math routines are now compiled only if the preprocessor + symbols are set up for them to build. + +- The name translation routine in readlink() changed the wrong name. + Fixed. + +- The new test code also prints an integer and a rational number + to test floating point output. + +- The non-blocking console I/O flag was not reset as it should have + been. Fixed. + +- The numeric and collation locale references were still using + the old locale variables. Fixed. + +- The numeric conversion routine used by the time code did not + generate proper ASCII digits. Fixed. + +- The old record locking code needed to be integrated better. + +- The pseudo-root directory containing all volumes is now scanned + entirely within readdir(); opendir() now only collects the + available volume names. + +- The raw I/O routines no longer reference the SysBase variable. + +- The return code of rename() was always the opposite of what + it really should have been. Fixed. + +- The socket code is now compiled conditionally. + +- The special behaviour of remove() and rename() is now a compile + time option. + +- The stack extension setup and cleanup routines are actually + called now. + +- The stack size checking code is no longer built if the stack + extension code is to be used. + +- The stdlib initialization code now attempts to create a memory + pool. This is done exactly once. + +- The time conversion code no longer drops into assert() if the + time stamp is not within the supported Amiga time window. + +- The unlink() and rename() functions can now be configured to + perform vaguely like on a Unix system. + +- There is still something wrong with the built-in functions, so + I disabled them in the makefile. + +- Tried to find a way to allow for ":" to pass through the Unix + file name translation process without being mistaken for the + pseudo-root directory. + +- Triggering a call to exit() while the program is already on the + way out should now be considerably safer than it used to be and + no longer end in recursion. + +- Turned out that in order to be residentable, the constant + __huge_val cannot actually be replaced at runtime with positive + infinity. So the __huge_val is no longer constant, but a cast in + forces it to be. + +- Turns out that the GNU linker visits each library only once. + Bummer. Had to reorganize the source code again and now libnet.a + contains only those special versions of the file access routines + which use Unix-like semantics and behaviour. + +- Updated several instances of signed vs. unsigned comparisons. + +- Updated the GNUMakefil to be more portable and to build all the + library flavours necessary. + +- Updated the object file list. + +- When using socket I/O as a daemon, no error messages are sent to + stderr by abort() or raise(). + +- Whoops. Overlooked two files which should have gone into the + repository much earlier. + +- Workbench startup now opens a default output window. + +- __fixunsdfsi() and __fixunssfsi() didn't actually do anything + useful. Fixed. + +- __locale_exit() should no longer close the same locale twice. + +- __open_iob() now truncates files for "w+" mode. + +- __stdio_exit() and close() should handle closing of an aliased + file descriptor properly now. + +- _main() now checks how much stack space was actually used and + prints that number. + +- access() now always returns an error if a file does not exist. + This fixes open(), which could fail if a file did not exist + even though it should have failed if it existed. + +- assert() now prints the program name. + +- assert() now throughs an Enforcer hit to make bug tracking easier. + +- assert() now uses kprintf() to print its messages. + +- bcopy() no longer calls into memcpy(). + +- bzero() no longer calls into memset(). + +- clock() did not work properly. Fixed. + +- free() and malloc() now mangle the contents of the memory + buffer before they return unless the NDEBUG symbol is defined. + +- free() now also invokes the alloca() drop code. + +- fseek() could end in an assertion if no data had been read from + the file yet. Fixed. + +- fstat() now also works on sockets. + +- getcwd() always trashed memory if "/" was returned. Fixed. + +- getcwd() now takes the / directory into account. + +- index() and rindex() no longer invoke strchr() and strrch(). + +- lseek() returns the file position reached after the file + pointer has been repositioned. + +- mktemp() always changed the wrong string. Fixed. + +- mktemp() ran over the end of the buffer, only that this didn't + really matter up until now. + +- popen() didn't actually compile. Fixed. + +- printf() and friends no longer attempt to NUL terminate streams. + +- qsort() and bsearch() no longer drop into abort() if their + invalid parameters don't matter because there is no data to + examine. + +- readlink() now attempts to let dos.library resolve the path + and then returns an absolute path name. If that doesn't work, + it invokes ReadLink() instead. + +- realloc() no longer needs to know about the manner in which + the allocation itself is managed. + +- remove() now calls unlink(). + +- rename() now returns -1 on error, not 0 as it could have done + accidentally. + +- setvbuf() doesn't really need to go through the memory + allocation debugging code. The memory allocated isn't visible + to the outside. + +- size_t parameters are now tested to see if they might have been + negative integers originally. + +- sleep() tries to be nicer about the timer I/O request in progress. + +- snprintf() now returns the number of characters that would + have been written to the buffer, now matter how many could + really be stored. + +- stat() now makes up pseudo data for the pseudo root directory. + +- statfs() now also knows how to treat the pseudo root directory. + +- strchr() and strrchr() now perform their comparisons on + unsigned characters. + +- strings.h didn't actually compile. Fixed. + +- time() did not add any seconds to the current time. Fixed. + +- tmpnam() could return with AmigaDOS requesters disabled for + the shell. Fixed. + +- unlink() now checks if the file to be deleted has been set up + for deletion before. + +- vfprintf() now uses fputc() to dump strings rather than calling + fwrite(). This has the effect of flushing the buffer properly + if there are line feed characters in the string specified for %s. diff --git a/library/debug.lib_rev.h b/library/debug.lib_rev.h index e05248e..6820439 100644 --- a/library/debug.lib_rev.h +++ b/library/debug.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 170 -#define DATE "14.8.2004" -#define VERS "debug.lib 1.170" -#define VSTRING "debug.lib 1.170 (14.8.2004)\r\n" -#define VERSTAG "\0$VER: debug.lib 1.170 (14.8.2004)" +#define REVISION 171 +#define DATE "16.8.2004" +#define VERS "debug.lib 1.171" +#define VSTRING "debug.lib 1.171 (16.8.2004)\r\n" +#define VERSTAG "\0$VER: debug.lib 1.171 (16.8.2004)" diff --git a/library/debug.lib_rev.rev b/library/debug.lib_rev.rev index 2cd1cfa..b34c321 100644 --- a/library/debug.lib_rev.rev +++ b/library/debug.lib_rev.rev @@ -1 +1 @@ -170 +171 diff --git a/library/include/math.h b/library/include/math.h index d2e8471..fd7a4d3 100644 --- a/library/include/math.h +++ b/library/include/math.h @@ -1,5 +1,5 @@ /* - * $Id: math.h,v 1.3 2004-08-12 12:31:29 obarthel Exp $ + * $Id: math.h,v 1.4 2004-08-16 09:33:13 obarthel Exp $ * * :ts=4 * @@ -90,6 +90,7 @@ extern float rintf(float x); extern int isinf(double x); extern int isnan(double x); extern double logb(double x); +extern double hypot(double x,double y); /****************************************************************************/ diff --git a/library/m.lib_rev.h b/library/m.lib_rev.h index f7259cb..97ebf78 100644 --- a/library/m.lib_rev.h +++ b/library/m.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 170 -#define DATE "14.8.2004" -#define VERS "m.lib 1.170" -#define VSTRING "m.lib 1.170 (14.8.2004)\r\n" -#define VERSTAG "\0$VER: m.lib 1.170 (14.8.2004)" +#define REVISION 171 +#define DATE "16.8.2004" +#define VERS "m.lib 1.171" +#define VSTRING "m.lib 1.171 (16.8.2004)\r\n" +#define VERSTAG "\0$VER: m.lib 1.171 (16.8.2004)" diff --git a/library/m.lib_rev.rev b/library/m.lib_rev.rev index 2cd1cfa..b34c321 100644 --- a/library/m.lib_rev.rev +++ b/library/m.lib_rev.rev @@ -1 +1 @@ -170 +171 diff --git a/library/m881.lib_rev.h b/library/m881.lib_rev.h index fa43f03..2874f84 100644 --- a/library/m881.lib_rev.h +++ b/library/m881.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 170 -#define DATE "14.8.2004" -#define VERS "m881.lib 1.170" -#define VSTRING "m881.lib 1.170 (14.8.2004)\r\n" -#define VERSTAG "\0$VER: m881.lib 1.170 (14.8.2004)" +#define REVISION 171 +#define DATE "16.8.2004" +#define VERS "m881.lib 1.171" +#define VSTRING "m881.lib 1.171 (16.8.2004)\r\n" +#define VERSTAG "\0$VER: m881.lib 1.171 (16.8.2004)" diff --git a/library/m881.lib_rev.rev b/library/m881.lib_rev.rev index 2cd1cfa..b34c321 100644 --- a/library/m881.lib_rev.rev +++ b/library/m881.lib_rev.rev @@ -1 +1 @@ -170 +171 diff --git a/library/math_hypot.c b/library/math_hypot.c new file mode 100644 index 0000000..f8fa824 --- /dev/null +++ b/library/math_hypot.c @@ -0,0 +1,171 @@ +/* + * $Id: math_hypot.c,v 1.1 2004-08-16 09:33:11 obarthel Exp $ + * + * :ts=4 + * + * Portable ISO 'C' (1994) runtime library for the Amiga computer + * Copyright (c) 2002-2004 by Olaf Barthel + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * - Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Neither the name of Olaf Barthel nor the names of contributors + * may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * + * PowerPC math library based in part on work by Sun Microsystems + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + */ + +#ifndef _MATH_HEADERS_H +#include "math_headers.h" +#endif /* _MATH_HEADERS_H */ + +/****************************************************************************/ + +#if defined(FLOATING_POINT_SUPPORT) + +/****************************************************************************/ + +#if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT) + +INLINE static const double +__hypot(double x,double y) +{ + double yx; + + x = fabs(x); + y = fabs(y); + if ( x < y ) + { + double temp = x; + x = y; + y = temp; + } + + if (x == 0.) + { + return 0.; + } + else + { + yx = y/x; + return x*sqrt(1. + yx*yx); + } +} + +#endif /* IEEE_FLOATING_POINT_SUPPORT || M68881_FLOATING_POINT_SUPPORT */ + +/****************************************************************************/ + +#if defined(PPC_FLOATING_POINT_SUPPORT) + +static const double one = 1.0; + +INLINE static const double +__hypot(double x,double y) +{ + int n0; + double a=x,b=y,t1,t2,y1,y2,w; + int j,k,ha,hb; + + n0 = ((*(int*)&one)>>29)^1; /* high word index */ + ha = *(n0+(int*)&x)&0x7fffffff; /* high word of x */ + hb = *(n0+(int*)&y)&0x7fffffff; /* high word of y */ + if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;} + *(n0+(int*)&a) = ha; /* a <- |a| */ + *(n0+(int*)&b) = hb; /* b <- |b| */ + if((ha-hb)>0x3c00000) {return a+b;} /* x/y > 2**60 */ + k=0; + if(ha > 0x5f300000) { /* a>2**500 */ + if(ha >= 0x7ff00000) { /* Inf or NaN */ + w = a+b; /* for sNaN */ + if(((ha&0xfffff)|*(1-n0+(int*)&a))==0) w = a; + if(((hb^0x7ff00000)|*(1-n0+(int*)&b))==0) w = b; + return w; + } + /* scale a and b by 2**-600 */ + ha -= 0x25800000; hb -= 0x25800000; k += 600; + *(n0+(int*)&a) = ha; + *(n0+(int*)&b) = hb; + } + if(hb < 0x20b00000) { /* b < 2**-500 */ + if(hb <= 0x000fffff) { /* subnormal b or 0 */ + if((hb|(*(1-n0+(int*)&b)))==0) return a; + t1=0; + *(n0+(int*)&t1) = 0x7fd00000; /* t1=2^1022 */ + b *= t1; + a *= t1; + k -= 1022; + } else { /* scale a and b by 2^600 */ + ha += 0x25800000; /* a *= 2^600 */ + hb += 0x25800000; /* b *= 2^600 */ + k -= 600; + *(n0+(int*)&a) = ha; + *(n0+(int*)&b) = hb; + } + } + /* medium size a and b */ + w = a-b; + if (w>b) { + t1 = 0; + *(n0+(int*)&t1) = ha; + t2 = a-t1; + w = sqrt(t1*t1-(b*(-b)-t2*(a+t1))); + } else { + a = a+a; + y1 = 0; + *(n0+(int*)&y1) = hb; + y2 = b - y1; + t1 = 0; + *(n0+(int*)&t1) = ha+0x00100000; + t2 = a - t1; + w = sqrt(t1*y1-(w*(-w)-(t1*y2+t2*b))); + } + if(k!=0) { + t1 = 1.0; + *(n0+(int*)&t1) += (k<<20); + return t1*w; + } else return w; +} + +#endif /* PPC_FLOATING_POINT_SUPPORT */ + +/****************************************************************************/ + +double +hypot(double x,double y) +{ + double result; + + result = __hypot(x,y); + + return(result); +} + +/****************************************************************************/ + +#endif /* FLOATING_POINT_SUPPORT */ diff --git a/library/net.lib_rev.h b/library/net.lib_rev.h index 6fdb984..ad0d9c3 100644 --- a/library/net.lib_rev.h +++ b/library/net.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 170 -#define DATE "14.8.2004" -#define VERS "net.lib 1.170" -#define VSTRING "net.lib 1.170 (14.8.2004)\r\n" -#define VERSTAG "\0$VER: net.lib 1.170 (14.8.2004)" +#define REVISION 171 +#define DATE "16.8.2004" +#define VERS "net.lib 1.171" +#define VSTRING "net.lib 1.171 (16.8.2004)\r\n" +#define VERSTAG "\0$VER: net.lib 1.171 (16.8.2004)" diff --git a/library/net.lib_rev.rev b/library/net.lib_rev.rev index 2cd1cfa..b34c321 100644 --- a/library/net.lib_rev.rev +++ b/library/net.lib_rev.rev @@ -1 +1 @@ -170 +171 diff --git a/library/releasenotes b/library/releasenotes index ee59f38..c78b103 100644 --- a/library/releasenotes +++ b/library/releasenotes @@ -1,3089 +1,6 @@ -c.lib 1.170 (14.8.2004) +c.lib 1.171 (16.8.2004) -- Added "math_logb.c", and it appears to work, too. +- Added hypot() - -c.lib 1.169 (8.8.2004) - -- Since the 'long double' data type is not really supported by the GCC - versions we use (and not supported by SAS/C either) building the - library with support code for it is now a configurable option. Unless - enabled, 'long double' is now treated like 'double'. - -- Reworked the HUGE_VAL definition which previously would default to - Infinity. The new code properly defines this to the largest - representable floating point number. The 'great' thing about the - HUGE_VAL definition in this library is that it's a reference to - a binary constant initialized by the library startup code. So any - application checking for HUGE_VAL merely needs to be relinked - rather than recompiled. - - -c.lib 1.168 (7.8.2004) - -- Ditched __is_infinity() and __is_not_a_number(), brought them back - as isinf() and isnan(). - -- Updated code and header files to state exactly which ISO 'C' version - is meant by the "The following is not part of the ISO 'C' standard." - warning. - -- Integrated rint() and rintf(). - - -c.lib 1.167 (29.7.2004) - -- Modified __is_infinity() and __is_not_a_number() to use more portable - methods for accessing the low level representation of the IEEE 754 - numbers they work on. - -- Fixed a compiler warning in h_strerror() - - -c.lib 1.166 (28.7.2004) - -- Added h_strerror() function to libnet.a; there's a global 'h_errno' - variable available, too. - -- now defines a type 'sig_t'. - -- now allows the 'fd_set' type to be referenced as - 'struct fd_set', too. - - -c.lib 1.165 (26.7.2004) - -- In printf(), if the precision is 0 and the value to be printed for - the %d, %i, %u, %o and %x conversion types is 0, no output should - be produced. Fixed. - -- Fixed the rounding for %g (again). The maximum number of significant - digits produced by a precision given for %g is different for numbers - < 1.0 and those >= 1.0: the leading 0 for numbers < 1.0 does not count - as a significant digit. - -- The calculation of the number of leading digits in a floating point - number now uses a mixture of log10() and a fall-back just in case - log10() returns gunk. - -- For floating point numbers, the sign, the digits, trailing zeroes - and the exponent are now set up and 'assembled' separately. This - removes the artificial limitation of floating point numbers to - a maximum of 78 digits to follow the decimal point. - - -c.lib 1.164 (25.7.2004) - -- The precision given for the printf() %g conversion types determines the - number of digits to generate, not the number of digits to follow the - decimal point. Fixed. The GCC FPU code generation now works again. - Previously, the floating point number conversion crashed cc1 since the - output amounted to 32 digits plus a terminating NUL, which overran the - 30 byte buffer sprintf() stored the output in. My, this was very hard - to find :( - -- Restored the floor() loop to figure out the size of the integer part - of a floating point number. For some strange reason, the log10() function - can return HUGE_VAL for numbers >= MAX_INT if mathieeedoubtrans.library - is involved. This crashes the conversion, which has the effect of making - the number come out as 0 rather than MAX_INT. Now that was nasty, too :( - - -c.lib 1.163 (25.7.2004) - -- Simplified the %e/%f/%g conversion some more. We now call log10 and pow - instead of looping and scaling the floating point number to be printed. - - -c.lib 1.162 (25.7.2004) - -- Simplified the floating point number output code in vfprintf(). - Instead of two separate branches handling output for the %e and - %f conversion types, the two now share the same code. - - -c.lib 1.161 (24.7.2004) - -- Dropped all the non-public source code fragments from the library, - including the memory pools, ARexx variable support and asyncio - functionality. - - -c.lib 1.160 (24.7.2004) - -- fputc() never flushed the output buffer if the stream in question - was unbuffered. - -- Rewrote puts() not to call fputs(). This avoids flushing the output - buffer twice if stdout is unbuffered. - - -c.lib 1.159 (23.7.2004) - -- Trying to open a directory like a file now reliably produces the - error code EISDIR. Previously, the error code could have come - out as ENOTDIR instead. - - -c.lib 1.158 (21.7.2004) - -- freopen() was broken since it tried to reuse data from an already - closed stream. Fixed. - -- Fixed a number of small compiler problems resulting from debug - output code that had never been exercised, or was not adapted to - subsequent code changes. - -- You can now enable debug output and have assertions come out - correctly. - - -c.lib 1.157 (21.7.2004) - -- The file hook message action "file_hook_action_write_and_flush" was - not handled properly by the socket and scanf/printf hooks. Fixed. - -- Removed a few assertions from the select() wrapper code which - prevented it from working properly. - -- Changed the stdio buffered I/O flushing code so that data can stay - in the cache, if necessary, rather than get written to disk. This - should help the asynchronous I/O feature. - - -c.lib 1.156 (21.7.2004) - -- Brought back the __unix_path_semantics variable. If you link with - -lunix and set this variable to FALSE, you'll still get Unix-like - behaviour from certain routines, only the translations of Unix<->Amiga - path name semantics will be disabled, leaving you with Amiga path - semantics. - -- sscanf(), asprintf(), vasprintf(), snprintf(), vsnprintf(), sprintf() - and vsprintf() now use short local buffers to speed up conversion rather - than a single measly byte. - -- opendir() now avoids returning duplicate volume names. - - - -c.lib 1.155 (21.7.2004) - -- Lost all special case code which took care of unbuffered output - and input. The new implementation works by using one byte of - buffer, which is part of the iob structure. Unbuffered output - is produced by 'flushing' the buffer once data has been written - to it. The new code also has the advantage of making ungetc() - work on unbuffered streams. - - NOTE THAT THIS MEANS THAT THE ENTIRE LIBRARY NEEDS TO BE REBUILT! - -- Each FILE buffer now sports back-link information which can be - tested to verify that it is valid. - - -c.lib 1.154 (21.7.2004) - -- fwrite() has to call fputc() for each byte to be written. Oops... - fwrite() no longer changes the file position if a write access - went wrong. Trying to write to a stream which is not available - for writing now counts as an error. - -- fread() has to call fgetc() for each byte to be read. fread() no - longer changes the file position if a partial read would yield - fewer data than is necessary to fill an element. Trying to read - from a stream which is not available for reading now counts as - an error. - -- Lost all the code that tested if the hook pointer embedded in a - file descriptor table entry or buffered file was NULL. It - simply has to be a valid pointer. - - -c.lib 1.153 (19.7.2004) - -- Oops: cli->cli_DefaultStack does not necessarily match the size - of the program's stack if it was launched from the shell and the - "$STACK:" keyword embedded in the program overrides the default - shell command stack size. - -- Stack space allocated locally is now public rather than private - memory (although it probably should be private). - - -c.lib 1.152 (19.7.2004) - -- Simplified the code that figures out how much stack space was - provided to the program when it was launched. The number does - not need to be absolutely accurate at the time it is calculated. - -- vfprintf() now prints a pointer (%p) as if it were a hexadecimal - number with 8 digits (0x%08x). - - -c.lib 1.151 (18.7.2004) - -- Oops: I mixed up the file descriptor and buffered I/O flags - in fflush() and __fill_iob_read_buffer(). - - -c.lib 1.150 (18.7.2004) - -- Checked the dos.library/InternalRunCommand() code to see if - the fiddling with Process->pr_ReturnAddresss is really necessary to - figure out how much stack space is available. Turns out that it - isn't under Kickstart 2.0 and beyond. Since this is what the library - requires, only the task lower/upper bound and the current stack - pointer address are consulted now. - -- isascii() is now a macro. - - -c.lib 1.149 (17.7.2004) - -- Reworked the ctype table layout and how the table is used by - the optional ctype macros. - - -c.lib 1.148 (17.7.2004) - -- Changed the flag definitions used by buffered files. - - NOTE THAT THIS MEANS THAT THE ENTIRE LIBRARY NEEDS TO BE REBUILT! - -- Added new macros to and which replace functions - of the same name and which might be more efficient. - - -c.lib 1.147 (17.7.2004) - -- Removed the isascii() macro and replaced it with a real function. - - -c.lib 1.146 (17.7.2004) - -- added a missing isascii() define to the ctype.h include file - as it is quiet a common function macro and should be included - - -c.lib 1.145 (16.7.2004) - -- Oops, I broke strncpy() *again*. Fixed. - - -c.lib 1.144 (16.7.2004) - -- The file descriptor duplication code now sits in a separate - function rather than in the different file/socket descriptor - hooks. - -- The code which reduces AmigaDOS path names by dropping path - components followed by two slashes now sits in a separate - function. Previously, it appeared twice in the Amiga<->Unix - path name translation code. - -- Simplified the select() function considerably. - - -c.lib 1.143 (16.7.2004) - -- added missing hook_entry object files to GNU OS4 makefile - -- added required newlines "\n" to the 68k GNU inline assembler - functions to make them compile with GCC version 3 and upwards. - - -c.lib 1.142 (15.7.2004) - -- ferror() does not return the code of the error for the stream - which ran into trouble, it merely signals that an error occured. - There goes another iob state variable. - - NOTE THAT THIS MEANS THAT THE ENTIRE LIBRARY NEEDS TO BE REBUILT! - -- Removed all the code that set the value of 'errno' to 0. - -- Likewise, removed all the code that reset the error condition - that might have been set for a file. The only function which - can do that is clearerr(). - -- No functions other but clearerr(), ungetc() and fseek() clear the - 'eof detected' flag now. - -- Simplified vfprintf() some more, merging the %x formatting code - with the other integer conversion code. - -- vfscanf() now decides that with the %i conversion, a number is - in octal notation if the first digit converted is a 0 and there - is no 'x' or 'X' character following it. - -- vfscanf() no longer counts '%n' as an assignment/conversion operation. - -- Rewrote strtol() and strtoul() again. The overflow detection is - now different in both routines and they avoid performing a - conversion if the base is 1 (which would lead to an infinite - loop). Also, the possible base values are limited to <= 36 and - letters in the range a..z are allowed, too. - -- All buffered streams which hold data and which operate in line buffering - mode are now flushed before the buffer of a line buffered input stream - is filled. - -- fflush() now flushes all buffered files if the stream parameter - is NULL. - -- Unlike fgets(), gets() does *not* put the terminating '\n' character - into the buffer. Fixed. - -- rewind() now clears both the 'end of file' and error indicator flags. - -- Replaced all memcpy() calls with memmove(). - -- Cleaned up error code translation and forwarding within the hook - functions. Instead of mucking around with the global errno variable, - the hook functions now return the error code as part of the hook - message. The error code translation is now done entirely through - two functions rather than one function, which fiddled with the - global errno variable, and local code which, if necessary, translated - ERROR_OBJECT_WRONG_TYPE into ENOTDIR. - - NOTE THAT THIS, TOO, MEANS THAT THE ENTIRE LIBRARY NEEDS TO BE REBUILT! - -- Lost the unconditional address alignment test in the qsort() data - swapping routine. If the code is built for an 68020 and beyond, it - is replaced by a no-op. - - -c.lib 1.141 (14.7.2004) - -- Rewrote the buffered file I/O code, and in particular how the read - access interacts with the file's state information. Rather than - counting how many bytes can be read from the buffer still, the - new code checks the buffer position against the number of bytes - stored in the buffer. This makes maintenance easier since only - one state variable needs to be modified at a time. - - Note that this means that code which would use the getc() macro - needs to be rebuilt! - -- The pid_t type used by kill() and returned by getpid() is now - really a Process address pointer. It used to be a CLI number. - - -c.lib 1.140 (12.7.2004) - -- The stack alignment code used when reallocating new stack space and - swapping it with the current configuration pushed the end of the - stack beyond the boundaries of the allocated stack. This crashed - in no time at all, but sometimes it just about worked without - blowing up. The fixed code is simpler than before and now initializes - both the lower and the upper stack boundaries to be aligned to - multiples of 16 bytes. - - -c.lib 1.139 (11.7.2004) - -- snprintf/vsnprintf were broken: instead of limiting output to - the size given as a parameter, data beyond the end of the buffer - was trashed. - - -c.lib 1.138 (11.7.2004) - -- Greatly simplified the vfscanf() code. Added new code which - initializes each parameter before the conversion begins. - This should help software which tosses data at scanf() - and expects it to come back initialized without checking for - the function's return code. - -- The vfscanf() '%f' conversion method could have consumed one - more character than it was really allowed to. Fixed. - -- If vfscanf() is built without floating point support, the - '%f' conversion method now properly pulls the respective - floating point number from the stack but performs no - conversion and does not modify the contents of the - variable. - - -c.lib 1.137 (11.7.2004) - -- Moved the initialization for the stack size checking out - of the _main() code and into its own initialization function - where it belongs. That way, the test also works for programs - that detach from the shell. - -- The '%g' and '%G' vfprintf() format specifiers now have the - effect of stripping trailing 0 and . characters in the number - string produced. Previously, this effect was also enabled for - the '%f', '%e' and '%E' formats. - -- Greatly simplified the vfprintf() code and verified that the - output matches the requirements. - - -c.lib 1.136 (9.7.2004) - -- Dropped in loads more of assertions to check the validity of - files and descriptors. - - -c.lib 1.135 (6.7.2004) - -- Fixed the last two issues in puts() and fputs() caused by the - bug fix I made to fputc() which would not return the character - value passed in. Occasionally, this could cause puts() to omit - the trailing '\n'. - - -c.lib 1.134 (4.7.2004) - -- Simplified and reordered the init/exit procedure in "stdlib_main.c". - Initializations which could be done on the spot when required are - no longer performed that early on. The stdio initialization is - performed earlier so that error messages can be printed using - stdio methods. - -- A stack overflow can no longer turn into an infinite loop. - -- Removed some more redundant data from the memory management data - structures. - -- The temporary file cleanup in fclose() did not properly turn off - profiling. Fixed. - -- Both close() and fclose() now fill their data structures with 0 - bytes before they return. - -- The tables for the file descriptors and buffered files are now - allocated dynamically. - -- If the asynchronous I/O options is not in effect, then the - global file data structures will not include a pointer to - the AsyncFile. - -- Lost some duplicate code from the locale cleanup routines. - -- Simplified the code that picks a vacant file descriptor table - slot. - -- NOTE: YOU NEED TO REBUILD THE ENTIRE LIBRARY IF YOU WANT TO USE - THESE CHANGES! - - -c.lib 1.133 (4.7.2004) - -- The memory routines no longer look up the management data structures - before they deallocate or modify an allocated memory chunk. This is - now done only in the debug version of the library. - -- Moved the code that performs memory deallocations in the debug and - nodebug versions of the library. Instead of separate functions, a - single common routine is used. - -- When launched from shell, the program's name is no longer allocated - through malloc() but through AllocVec(), and released separately later. - This helps the memory debug code which otherwise wouldn't be able to - print meaningful information when starting up and shutting down. - -- You can now get additional information out of the memory debugging - code, covering the locations where memory is allocated and released, - including how much memory is involved. - -- The month and day names used by the time conversion code are now - declared as 'const'. - -- Replaced all uses of the EPERM error code with EACCES. - - - -c.lib 1.132 (26.6.2004) - -- abort() and raise() now call a common termination routine. - -- Chopped the math_kernel.c code into individual files. Some local constant - values had to be duplicated, but so there... - -- Lost "smakefile.old" and "math_kernel.c". - -- Got rid of more compiler warnings... - -- Fixed a typo in the "stdlib_headers.h" header file. - -- In libdebug.a, for 'va_arg()' to work with 'char' type parameters, these must - be picked up as type 'int' from the stack. Otherwise we get a linker error later... - This should finally make the PowerPC 'native' kprintf() function work. - - -c.lib 1.131 (21.6.2004) - -- The '%i' conversion method in the scanf() family did not take - a leading '0' properly into account when updating the number of - letters to be read and processed. - -- If the '%c' conversion method reads fewer than the required - characters, it stops the conversion rather than aborting it - with an error. - -- The scanf() family now watches more carefully what data it still - requires to satisfy a conversion. For example, while it may accept - a '-' character to indicate that a sign is given to the number to - follow, if there is no number to follow will trigger an error - condition. - - -c.lib 1.130 (20.6.2004) - -- The scanf() family now returns EOF if an error was detected - (not just an end of file) or if the stream ended before a - conversion could be performed. - -- The file type reported by stat() did not really take pipes into - account. Fixed. - -- Cleaned up the data structure definitions and references. This turned - up a bug in the Unix<->Amiga path name translation which would use - a local data structure which was larger than the public version. Fixed. - - -c.lib 1.129 (18.6.2004) - -- Added a free memory threshold test feature to malloc(); how it works - is described in . - -- The PowerPC debug.lib now calls RawPutChar() and RawMayGetChar() - through the 68k LVO. This should finally make kprintf() and friends - usable on the PowerPC. - -- The asyncio code now defaults to allocate at least twice as much - memory as a buffered file would require (so that double buffering - can be used). Also, the fundamental asyncio support functions require - that enough memory is allocated to allow for four disk blocks to - be read at a time. - -- When opening a file for asynchronous I/O access, both read-only and - write-only access is supported now. Previously, the functionality - was limited to read-only access. - - -c.lib 1.128 (14.6.2004) - -- Moved the stack size usage reporting code again so that the name of - the program can be printed correctly. Also, the data from the - initial stack size swapping is now cached until it is used. - -- Reordered the resource allocations and initializations in tmpname() - to make error recovery more robust. - - -c.lib 1.127 (13.6.2004) - -- Truncating a file to size 0 was, if successful, considered a failure. - Fixed. - -- ftruncate() no longer changes the file position. - -- Advisory record locking now checks if the lock should be shared or - exclusive and verifies that the file open mode supports this access - mode. - -- Negative record lengths are now supported in the advisory record - locking code. - - -c.lib 1.126 (13.6.2004) - -- Unless Unix path semantics are in use, lseek() no longer defaults - to 'seek and extend' operation. - -- There are no longer two separate functions to take care of 'seek' - and 'seek and extend' operations. - -- The Unix-like lseek() behaviour now takes advantage of cached - file seek position information. Previously, it just ignored it. - -- The 'truncate' file action now makes sure that once the size of - the file has been trimmed, the new file position refers to the - end of the file. There also was a problem with growing the size - of the file which could have started at the wrong file offset. - -- The advisory file locking code now handles integer overflows - gracefully when the end of a locked region is to be calculated. - In this case, the end is assumed to be the (2^31)-1st byte. - Also, when removing a lock the search for the locked region in - question keys off the start position and the length rather than - the start position and the adjusted end position. - -- Added more sanity checks to file system operations which invariably - have to deal with FileHandle->fh_Type. - -- Rewrote the Unix->Amiga path name translation function again. - - -c.lib 1.125 (13.6.2004) - -- Rewrote the Amiga->Unix path name conversion code. Double slashes are - translated more robustly into '../' and the translation of the volume - name and the path to follow it are now done separately. The current - directory name ("") could wind up getting translated to a string pointing - into a local buffer. Fixed. Also, the new code knows how to translate - ":" to a path relative to the current directory (if that directory is - defined by an absolute path name). - -- The code that parsed and initialized the command line parameter - array to be passed to the main() function made different assumptions - during the counting and the initialization of the different parameters. - Fixed. - -- snprintf() and vsnprintf() now handle zero length buffer - sizes properly. - -- The stack size usage measuring code got broken when the - constructor/destructor mechanism was reimplemented. It - now works again. - - -c.lib 1.124 (12.6.2004) - -- Dropped the fseek() optimization for files with a write buffer. This - feature had little impact, but complicated buffer management enormously. - -- In fputc(), __fputc(), fwrite(), __flush(), etc. and the functions which - build upon them flushing the buffer now always takes place before new data - is pushed into the buffer. The exception is fputc()/__fputc() which can - flush the buffer if the file is in line buffering mode and a line feed - character has just been written. Also, failure to flush the buffer now - implies that the character/data to be stored in the respective function - was not successful. Previously, the different functions either stored the - data in the cache before and/or after the buffer was flushed, making it - difficult to tell if it had been written. Which in turn made it impossible - to recover from the failure since you could not be sure if another attempt - to store that data would really store it at the proper file position. - -- mktime() now insists that the year must be 1978 or later. - -- In debug.lib, KPutFmt() and the functions which build upon it now - should work even on the PowerPC. This works by analyzing the format - string and by converting the parameters to fit into a table whose - contents RawDoFmt() can handle. - -- For the asyncio code, all write accesses immediately flushed the buffer, - thus nullifying any advantage the asynchronous I/O might have provided. - Fixed. - -- The optimized memset(), memcpy() and memmove() functions now use - displacement addressing rather than post- and preincrement in the - unrolled loop. This should help strictly pipelined processors. It - does not seem to make any difference at all for the 68060, though. - -- The locale cleanup code now separately closes the specific locales - and the 'all' locale. - - -c.lib 1.123 (12.6.2004) - -- The distribution license no longer requires that for binaries using - the library a mention of the license text is mandatory. - -- closedir() now checks for a NULL pointer and backs out if it finds - one. - -- opendir() now exits with an error if it cannot allocate enough memory - for a volume name to be added to the list. - -- readdir() now checks for a NULL pointer and backs out if it finds one. - -- readdir() no longer builds with volume list scanning code unless - Unix path compatibility is enabled. - -- rewinddir() now ignores a NULL directory pointer. - -- strncmp() now treats the parameters as strings of unsigned characters. - -- strdup() no longer traverses the string to be copied twice to figure - out how much data needs to be copied. - -- strerror() now knows how to produce an error message for error - code 0x80000000. - -- strtol() and strtoul() always need to initialize the 'ptr' - parameter before they exit, not just when they succeed. - -- fputc() did not return the character value written, but 0. Fixed. - -- fputs() now returns EOF if it couldn't flush the write buffer, - if that was necessary. - -- fseek() no longer changes the value of the global 'errno' variable, - as required by the specification. - -- fseek() now sets the buffer position to 0 if the number of bytes that - can be read from the buffer drops to 0. This avoids clashes with write - access to the same file. - -- ftell() now always sets the global 'errno' variable to a well-defined - value. - -- fwrite() now tries to seek back to the original file position if - flushing the buffer failed. This complements similar code in fread(). - -- fwrite() no longer flushes the buffer before it returns. It appears - that this behaviour is not mandated by the specifications. The - buffer will only be flushed upon entry, and even then only to make - room for new data to be stored. - -- fread() now preserves error status information when recovering from - a failed buffer fill attempt. Previously, the error status information - would revert to 'no error' during this task. - -- mktemp() now also adds the current Task address to the seed value that - goes into the creation of the temporary name. - -- If dup2() fails to close a file, if that is necessary, it will return - an error rather than ignoring the failure. - -- Lost a return statement in dup2(). Also, growing the size of the - file descriptor table can now be aborted with ^C. - -- In fcntl(), growing the size of the file descriptor table can now be - aborted with ^C. - - -c.lib 1.122 (1.6.2004) - -- Lost the NULL tests in front of all UnLock() and FreeDeviceProc() calls. - -- The command line is now trimmed, dropping leading and trailing - blank spaces. - -- The ftruncate() functionality did not write 0 bytes to the file - being extended. Fixed. - -- popen() allocated a few bytes less than necessary for the command - name and the parameters. - -- Neither popen() nor system() now quote the command name unless it - is really necessary. - - -c.lib 1.121 (30.5.2004) - -- Made the memory debugging options a little more flexible and easier to - configure. - - -c.lib 1.120 (30.5.2004) - -- The asynchronous I/O code was never actually used by the library. Fixed. - -- Tweaked the realloc() code to take the memory allocation granularity into - account. This means, for example, that for small allocation sizes < 8 bytes - no reallocation will ever be performed since it wouldn't amount to anything. - This complements similiar code in malloc() which also rounds up allocation - sizes to the OS memory allocation granularity limits. - - -c.lib 1.119 (27.5.2004) - -- Got rid of a few compiler warnings involving signed/unsigned integer - comparisons. - -- Fixed a bug in the Unix->Amiga translation routine which would cause - file names such as './../foo' come out as '/foo' and end up being - translated to 'foo:'. The new code now takes care of removing leading - './' and embedded '/./' segments before further processing is - performed on the name string. - -- Fixed up the 68k GNUmakefile so that it builds properly. - - -c.lib 1.118 (26.5.2004) - -- Rewrote those putc/__putc macros again... - -- The vfprintf()/fputs() code did not properly test the result of - the __putc() function call. There should have been a test for - '!= EOF' rather than '== OK'. - - -c.lib 1.117 (26.5.2004) - -- realloc() now checks the size of blocks to be shrunk. If the block - shrinks by less than half its current size, then no new memory - is allocated for it. This saves the need to allocate memory and to - move the data. - -- Implemented an option to have the allocated memory chunks managed - by a balanced tree, sorted by address. This should help applications - which claim a lot of memory, possibly in small chunks, which get - allocated/released a lot. While this is still not quite as good as - having the low level memory management code use buddy lists or - slab allocation, it might still do the trick. This feature is - activated in "stdlib_headers.h" via the __USE_MEM_TREES preprocessor - symbol. You will need to rebuild the files stdlib_data.o, stdlib_free.o, - stdlib_init_exit.o, stdlib_malloc.o, and stdlib_red_black.o if you - change this. - -- The size of the physical memory allocation chunks is now taken into - account when making memory allocations. This means that allocations - are rounded up to multiples of 8 bytes each. - - -c.lib 1.116 (26.5.2004) - -- Reworked the putc/getc macro definitions, moved them behind the - function prototype declarations in . - -- The putc() macro did not return the same result as the equivalent - fputc() function would have done after flushing the buffer. The - new macro now calls a special flush routine which itself safely - returns the last character written. - - -c.lib 1.115 (24.5.2004) - -- Prior to performing ^C checking, the respective routines now verify first - if ^C checking is enabled in the first place. This saves a function call. - -- Replaced all ^C handling code that would drop straight into raise(SIGINT) - with a proper call to __check_abort(), which the user may have set up to - his own liking. - -- The wildcard matching argument list build code no longer defaults to - allow for ^C checking. This is permitted only if the global checking - flag is enabled. - - -c.lib 1.114 (24.5.2004) - -- Replaced most of the internal single character I/O calls with macros. - -- I/O buffers are now allocated so that their start addresses are aligned - to cache line boundaries. - -- Buffer size and position are now both signed integers. This fixes a - tricky issue with the newly-introduced macros and zero length buffer - sizes. - - -c.lib 1.113 (23.5.2004) - -- The 'FILE' structure now has a public part. Flags and layout have changed! - -- Reimplemented getc() and putc() as macros, which helps a lot with some - applications. - -- Added more of the SAS/C internal floating point support code, which makes - sprintf() and friends build even with floating point options enabled. - -- Replaced CheckSignal() with SetSignal(), which helped the ^C checking - code a lot. - - -c.lib 1.112 (23.5.2004) - -- Plugged in the SAS/C code profiling functionality. This works by measuring - calling time intervals and should be very portable. - -- Duplicating file descriptors could lead to trouble if the descriptor - number in question exactly matched the number of descriptors. Fixed. - -- Reactivated code in open() which was disabled for OS4 but which - should have stayed active. - -- Reduced the overhead of the single character input/output routines, - especially when called from within the library. This helped fgets(), - scanf(), fputs() printf() and others. - - -c.lib 1.111 (12.5.2004) - -- chdir() now checks if the object in question is really a directory. - -- Added special tests to a number of Open(), Lock() and Delete() calls - to catch attempts to open "subdirectories" of files. If it happens, - e.g. trying to open when "utility" is a header - file on the search list, errno will be set to ENOTDIR. - - -c.lib 1.110 (10.4.2004) - -- memmove() no longer tries to move large chunks of data if the source - and destination overlap by fewer bytes than can be moved at a time. - The original code should not have done this in the first place, but - it's safer to check rather than to assume that it will work out fine. - - -c.lib 1.109 (9.4.2004) - -- Fixed a bug in the PPC version of setjmp that would trash floating - point registers. - -- Fixed a bug in dup2: If the second fd didn't exist, it would return -1, - which is wrong (it should not close the second fd when it doesn't exist). - -- Added F_DUPFD to fcntl - - -c.lib 1.108 (15.3.2004) - -- Fixed a bug in the printf() family which affected how the %e - output was formed (and by extension, %E, %g and %G). The %e - format must put exactly one digit in front of the decimal - point, followed by the mantissa and the exponent. This worked - fine unless the round-off fudge added to the number caused - an overflow, producing two digits in front of the decimal point. - This has been fixed by checking for an overflow after having - added the round-off fudge and rescaling the result, if - necessary [Andrija Antonijevic]. - - -c.lib 1.107 (15.2.2004) - -- The setjmp() code now actually manages to save and restore the - FPU state in the 68k library form. - -- The SAS/C constructor/destructor invocation finally works. - -- Added an option to cache the current file position, which should - help seek performance. - -- Added targets "version" and "cvs-tag" to the makefiles. - - -c.lib 1.106 (14.2.2004) - -- index() now calls strchr() and rindex() calls strrchr(). - -- strchr() and strrchr() now read each byte of the string to - be searched exactly once. - -- Added optimized versions of memchr() and memcmp(). - -- The optimized versions of memchr(), memcmp(), memcpy(), memmove() - and memset() check first if the amount of data involved justifies - the expense of gearing up to perform an optimized operation. - -- strstr() no longer calls strlen() even once. - - -c.lib 1.105 (12.2.2004) - -- Replaced memcpy(), memmove() and memset() with optimized portable - versions. - - -c.lib 1.104 (11.2.2004) - -- When open() calls Lock() and fails to obtain a correct result, the - error code checking now also covers ERROR_ACTION_NOT_KNOWN (which is - ignored). This should help handlers which are no file systems, such - as PAR: and PIPE:. - -- The file->iob_BufferWriteBytes and file->iob_BufferPosition counters - no longer have to be in sync. In fact, the position can be smaller - than the number of bytes waiting to be written. The buffer flushing - has to take this into account now (it may have to seek back after - having dumped the buffer, which is nasty). - -- Worked Jörg's changes into the fseek() code. This covers two fields: - if possible, an absolute positioning command is converted into a - relative position change; if the current file buffer allows for it, - the buffer access position is updated rather than forcing the buffer - to be flushed to disk/reread. - - -c.lib 1.103 (8.2.2004) - -- The bug fixes in version 1.101 broke ungetc(). Fixed. Also reworked the - sanity checks in ungetc() which previously were performed either out - of order or were entirely missing. - -- Renamed socket_get_socket_descriptor.c to socket_get_descriptor.c to - make it easier to build the library on the Amiga. - - -c.lib 1.102 (22.1.2004) - -- modified string.h to also include strings.h within the non ISO 'C' standard - part. This should make porting of existing applications a bit easier as many - sources only include . As the current string.h anyway defines the - symbols of i.e. bcmp() and bcopy() etc, which should normally also be - in strings.h, I don't see any problem with that. - -- added function macros for stricmp() and strnicmp() to non ISO 'C' standard - part of to make it easier to port applications relying on - stricmp()/strnicmp(). - - -c.lib 1.101 (18.1.2004) - -- Draining an stdio buffer via fgetc/fread, etc. completely before switching - over to using the same buffer for writing data to a file would flop because - one of two important variables did not get reset to zero. This would also - end up trashing the buffer management. New code makes sure that if a read - access ends up setting the number of bytes available for reading from the - buffer to 0, the buffer position is reset to 0 as well. - -- fwrite() now pushes the buffer contents to disk if it has completely - filled up rather than allowing the full buffer to stick around until - another opportunity presents itself to flush it to disk. - - -c.lib 1.100 (18.1.2004) - -- abort() and raise() no longer call fprintf(stderr,..) but rather - use fputs(..,stderr) instead. - -- Updated the copyright text. - - -c.lib 1.99 (28.12.2003) - -- Updated "stdlib_constructor_begin.c" to invoke the SAS/C constructors - and destructors and to make the OS4 specific destructor handling - safer: destructors calling exit() will now cause the next following - destructor function to be called. - - -c.lib 1.98 (23.12.2003) - -- Fixed up Hans-Jörg's previous fix for strncat(). Added comments - explaining as to what this function is supposed to accomplish in - order to avoid making the same mistake again and again. - -- accept() now returns a properly wrapped socket descriptor (thanks to - Marcus!). - -- TODO: fix up the PowerPC destructor code; currently, a destructor - function calling exit() will cause all subsequent destructors to - be either skipped or the entire destructor list to be rerun ad - inifinitum (haven't checked this in detail yet). Change the code to - work more like the 68k version, which plants a setjmp() at the beginning - of the loop and remembers which one was the last destructor called. - - -c.lib 1.97 (15.12.2003) - -- The library can now use constructors and destructors internally. - -- Added the realpath() function. - -- Put the dirent functions back in libc.a. - - -c.lib 1.96 (13.12.2003) - -- gettimeofday() no longer reports microsecond values > 1000000. - - -c.lib 1.95 (13.12.2003) - -- The default memory pool and puddle sizes can now be configured at link - time by defining the __default_pool_size and __default_puddle_size - variables in your program. - -- strncat() no longer eats the last character copied. - - -c.lib 1.94 (9.12.2003) - -- now includes rather than , if - necessary. - -- Changed DoTimer() to allocate the MsgPort and the timerequest from - public memory rather than from the stack (which could be allocated - as private memory). - - -c.lib 1.93 (29.11.2003) - -- Fixed up the Unix->Amiga path name translation code to map "volume:/" style - paths to the virtual root directory. - -- The file operations (open, chmod, mkdir, rmdir, mktemp, chown, unlink, - utime and rename) now watch out for the root directory to come out of a - Unix->Amiga path name translation and will react according to it. - -- access() now also works on the virtual root directory. - - -c.lib 1.92 (28.11.2003) - -- Replaced qsort() with a different, iterative implementation. In terms of - performace it seems to beat everything out there. - -- Tinkered with the select() code again. The local FD_ZERO() implementation - was too smart. It would attempt to optimize the operation by breaking it - down in to series of bytes to be set to zero, followed by individual bits. - This went wrong because this isn't how the fd_set bits are organized. - The code now clears all the long words involved. - -- Updated the fix_datestamp() function which is part of the select() - wrapper. The updated version should be less vulnerable against - overflows. - - -c.lib 1.91 (25.11.2003) - -- Fixed up the dependencies in the makefiles. The libunix.a routines which - would involve the asynchronous I/O code would not get rebuilt if the - associated header file would change. - -- Added extra code to the fd hook function which looks after files that - should be unlinked, but which didn't get deleted at the first attempt - because they were still in use. That extra code checks, after a file is - closed, if the file in question was set up for deletion. This seems to - help the Samba port a lot, which no longer accumulates scores of lock - files in "Samba:log/locks" which get deleted only when smbd exits. - - -c.lib 1.90 (24.11.2003) - -- The wildcard pattern expansion for command line arguments no longer - drops parameters for which there is no match. Instead, the argument - is used as is. With the old behaviour, things like - "-D__interrupt=__attribute__((__interrupt__))" would expand to nothing, - breaking the GCC preprocessor. - -- The special definitions & code that help GCC to build itself are now - enabled through a single line in a local header file. - -- The file descriptor hook now sets errno to EBADF for file descriptors - which are not in use (this used to be ENOSYS). - - -c.lib 1.89 (23.11.2003) - -- The asynchronous file I/O support can now be enabled at library build - time by uncommenting a definition in a single header file. The makefile - dependencies then do the rest... - -- Fixed a bug in the Unix->Amiga path name conversion code. A trailing - "/." in a path name is now stripped. - - -c.lib 1.88 (22.11.2003) - -- alloca() is now included in the library even if GCC is used as the - host compiler. - - -c.lib 1.87 (17.11.2003) - -- truncate() and ftruncate() now safely extend the size of a file by - adding 0 bytes at the end. - - -c.lib 1.86 (17.11.2003) - -- Fixed a bug in the Unix->Amiga name translation which could lead to - a path beginning with "../" to be mistakenly identified as being an - absolute path name starting with "/". - - -c.lib 1.85 (16.11.2003) - -- The realignment code was missing in the FlushAsync() routine. Fixed. - -- The alignment position was not calculated correctly in SeekAsync() - as the wrong variable was involved. Fixed. - -- __umodsi3, __udivsi3, __udivsi4, __modsi3, __divsi3, __divsi4 would - not refer to the proper __UtilityBase library symbol. Fixed. - - -c.lib 1.84 (12.11.2003) - -- Updated the optional asyncio code to return to a block-aligned - file position after seeking in a write-only file. Also added - code to check if read/write access is actually allowed. - -- Multiple inclusion of debug.h no longer leads to trouble. - -- Merged duplicate file advisory lock testing code. - -- The dirent functions are now a part of libunix.a and no longer - appear in libc.a. - -- Advisory file locks can now start beyond the end of the (current) - file and it is possible to lock a region until the end of the file. - Previously, the latter was rejected as an invalid range. - -- If several exactly overlapping regions are locked on a file, - they all are now unlocked by a single call. - -- Replaced the qsort() code. - -- The assertion handling has moved into its own routine which - tries to make sure that the failure message is shown. - -- Rewrote clock() (again) to be much simpler in operation. - -- The opendir/readdir/closedir cleanup code now actually invokes the - closedir() function rather than doing the cleanup job manually. - -- open() no longer tests for delete protection after the file has - been already opened. If it's open, only a possible write protection - may be problematic and ought to be flagged. - -- __drop_iob_read_buffer() now checks if the buffered file is actually - in use. - -- If fseek(..,0,SEEK_CUR) is is called, it no longer results in the - read/write buffers to be dropped. - -- The snprintf() family now returns the proper number of characters - that would have gone into the buffer, if enough room were available. - Previously, it would stop counting after the buffer had filled up. - -- Merged duplicate code around free(). - -- The memory cleanup code now calls the free functions if memory - debugging code is enabled. - -- If the memory debugging code is enabled, allocations and deallocations - will trigger consistency checks now and then (with a likelyhood of - about 6% per operation). - -- mktime() now properly fills in the day of the week. - -- strftime() now expects the format hook code to provide for the NUL- - termination. - -- __translate_amiga_to_unix_path_name() now performs a sanity check - before it proceeds to use the supplied path name. The check is - to make sure that the local buffer does not overflow. Rearranged - code in __translate_unix_to_amiga_path_name() to perform a similar - test. - -- Rewrote the command line wildcard expansion code to use standard - Exec lists rather than the tricky singly linked list stuff, coupled - with tricky pointer arithmetic. If the code crashes, it's now much - easier to tell why. - -- The __usergroup_init() function now returns an error code rather - than dropping into exit() in case of trouble. - -- They 'key' parameter of bsearch() is now of type "void *" rather - than "char *". - - -c.lib 1.83 (5.11.2003) - -- The scanf() family now skips over initial whitespace preceding - data to be converted. Exceptions are the %c, %n and %[ conversions - which are documented not to bother. - - -c.lib 1.82 (4.11.2003) - -- Fixed another bug in the scanf() family. Floating point numbers were - not converted correctly, only the integral part was picked up. - - -c.lib 1.81 (4.11.2003) - -- Added assertions to track trashing of certain global variables. - -- Rewrote the select() wrapper again. It no longer makes assumptions about - the size of the fd_set data structures passed in. The new code is, however, - significantly more complex than it used to be. It uses far less stack space, - though... - - -c.lib 1.80 (29.10.2003) - -- More tweaking for the optional asyncio support. If requested, it's - always enabled for read-only files bound to descriptors, but never - for write-only or read/write access. It's always enabled for buffered - files standard I/O files because there's an fflush() to take care - of pushing the buffer contents to disk. There is no fsync() for - file descriptors which would accomplish the same. - - -c.lib 1.79 (29.10.2003) - -- The optional asyncio code now also sports a function similiar - to fflush() which will write the current contents of the buffer - to the file. - - -c.lib 1.78 (27.10.2003) - -- The asyncio code support is now an optional feature which can be - enabled at library build time by defining the ASYNCIO_SUPPORT - preprocessor symbol. - -- Cleaned up the code that uses the buffered I/O data structure - 'iob', which used to be a much bigger data structure with - a hard-coded buffer attached to it. The buffer is now allocated - dynamically when needed. - - Note that this change requires that the library is rebuilt or the - I/O buffer data structures will cause trouble. - - -c.lib 1.77 (26.10.2003) - -- Worked an updated version of the asyncio code into the library. - File I/O performance will benefit from this if, and only if, a - file is opened either for read or write access only. If both - read and write access are requested for a file, the asyncio layer - will not kick in. Also, in order to enable it, you have to declare - a '__asyncio_buffer_size' variable (see "stdio_asynciobuffersize.c") - somewhere in your program. - - Note that this change requires that the library is rebuilt or the - file descriptor data structures will cause trouble. - - -c.lib 1.76 (22.10.2003) - -- Added to define the macros va_startlinear() and - va_getlinearva(). - - -c.lib 1.75 (20.10.2003) - -- __initialize_fd() and __initialize_iob() now perform the bulk of the - data structure initialization rather than just setting the data to - zero and plugging in a hook function. - - -c.lib 1.74 (19.10.2003) - -- Renamed the global __fd_table variable to __fd to match the buffered - I/O data structure name. - -- Further modifications to make the debug version of the library build - without errors. - -- Moved the stack size usage checking code from _main() into separate - routines which are found in the linker library. - - -c.lib 1.73 (19.10.2003) - -- __grow_fd_table(), __grow_iob_table(), __flush_iob_write_buffer(), - __drop_iob_read_buffer(), __fill_iob_read_buffer() and __open_iob() - now returns 0 for success, -1 otherwise. - -- __grow_fd_table() and __grow_iob_table() now both set errno in - case of failure. - -- Lost the unnecessary file descriptor and buffered I/O table - initializations. - - -c.lib 1.72 (19.10.2003) - -- fopen(), freopen() and fdopen() now all call the same common - routine to set up a buffered stdio stream. Previously, the - fdopen() code was seperate and did things differently from - the rest. - -- Deletion of temporary files upon program exit could lead to - a crash (worst case), but never actually deleted anything. Fixed. - -- The stdio_exit() cleanup function now actually calls into - fclose() and close() rather than doing the same job all over - again manually. - -- Lost code which didn't make much sense in the socket descriptor - hook. Same thing for the temp file cleanup code. - -- dup() now invokes dup2() with the second parameter set to -1. - -- Simplified the duplicate cleanup in close(). - - -c.lib 1.71 (19.10.2003) - -- Added missing prototype for setbuf() in . - -- Put the definition of HUGE_VAL in inside #ifndef, to allow - GCC to do its thing. - - -c.lib 1.70 (18.10.2003) - -- The tests to verify that a file descriptor was valid all had a - problem. This test is now done in a separate function which - performs the necessary error checking. - -- The dup2() function did not close the second file descriptor - prior to duplicating the first one. Also, the dup(..,-1) case - did not return the number of the new file descriptor but -1 - instead. - -- The tests to check whether a Hook is attached to a file - descriptor now set errno to EBADF if no Hook is found. - -- All file descriptor flags are now cleared when a descriptor - is closed. Same thing for buffered files. - - -c.lib 1.69 (14.10.2003) - -- Not all conversions performed by the scanf() family would respect - the maximum field width. Fixed. - -- The local sscanf() file hook function had the last two parameters - reversed. Fixed. - -- strftime() now fills in the week day if it's not provided. - - -c.lib 1.68 (13.10.2003) - -- To activate the memory debugging code, use "#define __MEM_DEBUG". - Other debugging code (assertions) is deactivated through - "#define NDEBUG". - - -c.lib 1.67 (11.10.2003) - -- Reworked the program startup code. Instead of rattling down a number of - initialization functions, one at a time, the whole thing is now performed - through a 'constructor style' table. This ought to be replaced by the - real thing once it's safely possible. - - -c.lib 1.66 (11.10.2003) - -- UtilityBase, LocaleBase, SocketBase and UserGroupBase no longer override - any user defined global variables. The library now keeps them under - private names. - -- The wildcard expansion code would not return an empty argument list in - case no match was found. Fixed. - -- Cleaned up the stdlib_main.c code, moved all the data and function - references into local header files. - -- Completed the usergroup.library API integration for the OS4 variant. - -- The constructors are now called in forward order and the destructors - in reverse order. - -- Moved the constructor/destructor invocation code into a separate file. - - -c.lib 1.65 (9.10.2003) - -- In dev_t is now an unsigned long. - - -c.lib 1.64 (9.10.2003) - -- Bum. The old and the new clock() code was wrong. The clock() function - is supposed to return how much processor time the current process - consumed since it was started, which is a monotonously increasing - number (or something like it, unless the system time is reset). - The new code should deliver proper data, although it might be better - to switch it over to timer.device/ReadEClock. - - -c.lib 1.63 (8.10.2003) - -- Ouch, the old clock() code was correct, it just didn't look like it. - I rewrote it to make it clearer what happens and why it happens like - that [Andrija Antonijevic]. - - -c.lib 1.62 (6.10.2003) - -- A "+" and a "*" had been mixed up in clock(). Fixed. - - -c.lib 1.61 (5.10.2003) - -- Now that main.o is a platform neutral startup code file, it's possible - to do some machine type checks in "stdlib_machine_test.c". This code - checks for presence of an FPU and an MC68020 CPU (or better). It may - not work for -fbaserel32 which by the time the test is performed - will have already crashed. - -- Added the missing stdlib_dosbase.c, stdlib_localebase.c, stdlib_sysbase.c, - stdlib_utilitybase.c and math_init_exit.c files to the repository. - - -c.lib 1.60 (5.10.2003) - -- Renamed the source code files which implement the strtod(), strtol(), - strtoul(), atof(), atoi() and atol() functions. - -- Moved main() out of libc.a and made it into a startup object file - which needs to be added to the GCC specs file in the "*startfile" - section, right at the end of the list. This solves practically all - linking problems I encountered so far. Which means that -lunix - and -lsocket actually work and that you don't have to tweak the - specs file to build the compiler. - - -c.lib 1.59 (4.10.2003) - -- The math initialization/test function is now always invoked by the - _main() function. The math init/exit code defaults to stubs, though, - unless libm.a is linked in. - - -c.lib 1.58 (4.10.2003) - -- Moved the global library base/interface definitions from stdlib_main.c - into separate files, each of which defines a base/interface pair. - -- Moved the math library initialization/testing into libm.a where it - really belongs. The MathIEEE library base definitions went there, - too. - - -c.lib 1.57 (1.10.2003) - -- Calling dup2() on a stdio file reinitialized the source fd instead of the - destination fd. Fixed. - -- Added const declaration to first argument of sscanf(). - -- no longer enforces the inclusion of . - - -c.lib 1.56 (30.9.2003) - -- Moved the scalbn() function prototype into math_pow.c, where it is - used. This is not an ISO 'C' function to start with. - -- strtod(), strtol(), strtoul(), atof(), atoi() and atol() moved - from into . - -- fputs() no longer adds a newline character at the end of the line. - This is now done only by puts(). - -- fdopen(), fopen(), freopen() and popen() no longer mix up file - access mode options such as "r" and "r+". - -- popen() now adds the current time stamp to the name of the - temporary files it opens. - - -c.lib 1.55 (21.9.2003) - -- Added support for 'long long' quantities in the printf/scanf - families. This is not yet enabled by default since I couldn't - seem to make it work on the 68k platform. - - -c.lib 1.54 (18.9.2003) - -- fputs()/puts() didn't add the '\n' character at the end of the - line. Fixed. - - -c.lib 1.53 (25.8.2003) - -- Added hooks for code to perform wildcard expansion for all - command line parameters. Excluded are those parameters which - are surrounded by quotes ("). - - -c.lib 1.52 (19.8.2003) - -- fpos_t is now a scalar data type. - -- size_t is now an unsigned integer. - -- Lost the file descriptor table usage counter. Whether or not a - file descriptor is in use is now indicated by a flag. - -- Temporary buffered files now have a dynamically allocated temporary - file name string attached. Previously, a statically allocated - buffer was part of each file buffer data structure. - -- The order of the hook parameters for the file descriptor and - buffered files was wrong. - -- All the buffered file routines now check if the file in question - is actually in use before they proceed. - -NOTE: the last four changes require a rebuild of the entire library, - just to be safe! - - -c.lib 1.51 (12.8.2003) - -- setvbuf() now sets the buffer size to 0 when switching a stream - into unbuffered mode. Also, with buffering mode _IONBF (no - buffering) no memory is allocated and no supplied buffer is - used. - -- The stdio cleanup code no longer runs all file descriptors and - files through the shutdown code. Only those which are actually - in use. - -- Fixed a typo in the BSD style license text. - -- Cosmetic changes... - -- fopen("a+", ..) did not actually append any data. - -- The unlink() cleanup code didn't unlock the temporary locks - it maintained. - - -c.lib 1.50 (2.8.2003) - -- Rewrote the entire Amiga->Unix and Unix->Amiga name/path translation - code from scratch. It's now much more robust than it used to be. - -- Restored the original difftime() code. - - -c.lib 1.49 (1.8.2003) - -- vfprintf() now treats the '%' format specifier as an escape - character and produces the next following letter as is if that - letter does not indicate a specific format. - - -c.lib 1.48 (31.7.2003) - -- vfprintf() now sets up the buffer it uses for converting numbers - into text every time it goes through the main loop. This means - that a terminating '\0' is placed at the end. - -- vfprintf() now first checks if a floating point number is - +/-infinity or not a number and then performs the '%g' check - to figure out which output format should be used. - -- Fixed the alternate conversion option for precision == 0 and - the %e/%f/%g conversions. - -- In vfprintf(), if there is no digit following the precision - specifier, the precision is now set to 0. - -- In vfscanf() only %c, %s and %[ respond to the maximum field - width option, all other conversion methods ignore it. - -- readdir() again returns the ".." entry for the root - directory. - - -c.lib 1.47 (31.7.2003) - -- Fixed vfscanf() and strtol() again to accept very small negative - integers (-2147483648). The previous check to avoid overflows - was too strict. - - -c.lib 1.46 (31.7.2003) - -- strftime() now makes sure that the string generated is always - NUL-terminated. The formatting code checks if the dates are - in range to avoid accessing invalid day/month table data. - - -c.lib 1.45 (30.7.2003) - -- lseek() could end up freeing a local buffer twice. Fixed. - -- The sscanf() wrapper no longer emulates seek/write. - -- Added some more error checking to the vasprintf() code. - -- Fixed the %h qualifier in vfprintf(). - -- The %d conversion of negative integers in vfprintf() was relying - upon a non-portable operation: the % operator used on negative - numbers was expected to yield a negative result. The new code - tries to be more careful and uses the % operator only on - non-negative numbers. - -- vfprintf() now handles floating point number exponents - gracefully which are larger than 100. - -- Made the varargs handling vfprintf() more portable. - -- vfscanf() could produce an error if a character in the - format string did not exactly match the corresponding - character in the input stream. Now it just pushes the - character back and stops scanning. - -- The %c conversion in vfscanf() never stored more than - one single character. - -- The automatic %d octal number conversion in vfscanf() lost - the first digit following the introducing '0'. Fixed. - -- vfscanf() now properly handles the 0x/0X prefix for the - %x conversion. - -- vfscanf() now only returns EOF if no arguments could be - converted and the EOF status of the stream involved has - been asserted. - -- vsnprintf() no longer tries to skip the trailing NUL byte if - the resulting string is larger than the buffer it would - hold. - -- The memory allocation cleanup code now also properly handles - the extra large debug allocations and cleans up the - alloca() tracking list. - -- Fixed strncpy() and strncat() again not to write too much - data. Also strncat() does not pad the destination buffer. - Neither function is supposed to do anything if the - length parameter is negative. - -- strncmp() now returns 0 if the length parameter is negative. - - -amiga.lib 1.7 (30.7.2003) - -- None of the 68k assembly language files appear in the PowerPC build - any more. Also, none of the functions which use the local CallHook() - appear in the PowerPC build either. - - -c.lib 1.44 (28.7.2003) - -- Files created through open() now get their 'executable' protection - bits cleared when they are closed. - -- mkdir() now sets the protection bits on the directory created. - -- The record locking code now uses shared semaphore locking where - necessary. - -- Added workarounds for NIL: style file handles inthe record locking - code. - -- Preparations to get rid of the file descriptor use counter... - -- __open_iob() no longer calls lseek(). - -- popen() and fdopen() now also ignore the extra access options - separated by a comma. - -- tmpnam() now creates names with up to 10 characters. - -- Lost the special case code for zero length memory allocations. - They now produce NULL result codes. - -- Lost the DosLibrary, LocaleBase and ExecBase definitions where - they were not actually required. - -- strncat() didn't pad the destination string with NUL bytes, - according to spec. Fixed. - -- Fixed the weird strxfrm() to work according to spec. - -- Simplified the asctime() and strftime() code. - -- The "%j" format specifier did not produce exactly three digits - in strftime(). Fixed. - - -amiga.lib 1.6 (28.7.2003) - -- Removed NULL pointer checks from "amiga.lib". Added assertions in - their places. - -- Added tests for IconBase and CxBase to the "amiga.lib" routines. - - -c.lib 1.43 (27.7.2003) - -- readlink() didn't free the DeviceProc structure it could use. - -- More fixes to the record locking code. If a lock/unlock action was - performed on a duplicate of a file descriptor, it wasn't always - guaranteed that all the duplicate/original file descriptors were - affected. - -- Fixed a potential bug in the strncpy() code which could drop into - an infinite loop. - -- Replaced almost all do .. while loops with while .. loops. - - -c.lib 1.42 (27.7.2003) - -- Changed the memcpy(), bcopy(), memmove() and bcopy() code - not to use any assembly language bits. I'm wondering whether - this will have an effect on overall stability. - -- The internal number->string conversion routine used by the - time.lib code had two of its parameters swapped. Fixed. - -- The main() startup code had a bug in the character escape - handling. Everything escaped other than 'e' or 'n' would - terminate the respective command line parameter in place. - -- The shell escape character (default is '*') is now configurable - at compile time, which can help applications ported from the - Unix world.Note that you cannot override the '*' escape character, - you can merely define another valid escape character. - -- Changed how double quotes are used by the main() startup code. - A quoted string is now terminated if there is a blank space - following the final double quote or if the end of the command - line is reached. - - -c.lib 1.41 (26.7.2003) - -- In vfscanf() the '%e', '%f' and '%g' conversions now default again - to 'float' unless a format size specifier is used. Also, the function - no longer 'forgets' that the default conversion is being used, which - could happen if several parameters were to be converted. - -- asctime() now tries to make sure that the conversion process - does not overflow the local buffer. - -- readdir() no longer returns the ".." entry for the root - directory. Also simplified the readdir() cleanup code. - -- open(), stat() and lstat() could leave dangling FileLocks behind. Fixed. - -- dup2() now returns the new file descriptor rather than 0. It also - tries to close the second descriptor if that one is in use and - easy to close. - -- fileno() never returned the associated file descriptor but the - table index of the FILE stream. Fixed. - -- Increased the internal maximum directory/file path length to - 1024 characters. Note that this means that the entire library - will have to be rebuilt! - -- setvbuf() now frees its custom allocated buffer if flushing the - write buffer fails. - -- setenv() now longer permits a NULL 'value' parameter. - -- fdopen() now 'claims' a file descriptor rather than performing - an 'internal' dup() on it. - -- vfscanf() now stops converting the mantissa when it finds - an exponent character in the input stream. - -- vfscanf() now makes sure that the strings it reads are - all NUL terminated while they are being read. If the - conversion is aborted, this will still produce a properly - NUL terminated string. - -- The '%' conversion in vfscanf() no longer exits with an - error if the next character read does not match the - '%s' character. - -- vfprintf() now watches the size of the buffer it uses for - converting numeric data into strings. - -- The file descriptor hook code now initializes the duplicate - when it performs a dup() operation. - -- The record locking support now also extends to duplicated - file descriptors. - -TODO: replace struct fd.fd_UseCount with a flag. - - -net.lib 1.8 (25.7.2003) - -- The select() function was broken in a number of ways. Always was, even - in its original form in the Samba 2.0.7 Amiga emulation library. First, - the except_fd bits could have been set even for files (unlikely, if not - impossible to happen). Second, if sockets and real files were used in - parallel, sockets were preferred and the FD_SETs for the files would - come out as indicating that data was available for reading/writing - (which was wrong). Third, the test loop which checked whether the files - had data waiting to be read never initialized the data structure it - had to use. As a bonus, the new code now also checks if a file is - writable and will then flag its FD_SET bit as "ready for writing". - -- More fixes to select(): in each iteration of the polling code, the - set bits would be cleared that might later be used to check for - new input. This no longer happens. - - -c.lib 1.40 (25.7.2003) - -- fopen() now ignores any open options following the mode string, - separated by comma. - - -c.lib 1.39 (23.7.2003) - -- Ouch! vfprintf() didn't work right for floating point number conversion - (again). The '%g' conversion code didn't work on the PowerPC because - the method employed to figure out which format to use was not portable. - Fixed. The '%f' conversion code would produce no output at all if the - number to be printed was zero and the number of digits following the - comma was zero, too. Fixed. Large numbers didn't come ought right. - Fixed. The '%e' conversion code was ill prepared for converting - negative numbers and sometimes failed to produce digits. Fixed. - -- More trouble. strtod() and, by extension, atof() didn't convert - numbers properly with more than one digit following the mantissa. - Fixed. Same stupid problem in vfscanf(). - -- The '%e', '%f' and '%g' conversions would always default to 'float'. - They now default to 'double'. Use the 'h' or 'L' specifiers if you - want less/more. - - -c.lib 1.38 (23.7.2003) - -- The '%s' and '%[' conversion code in vfscanf() never NUL-terminated - the string just read. Fixed. - - -amiga.lib 1.5 (15.6.2003) - -- CreatePort() didn't fill in the port priority. Fixed. - - -amiga.lib 1.4 (1.5.2003) - -- RangeRand() didn't obey the range parameter's restrictions. Fixed. - - -c.lib 1.37 (3.3.2003) - -- Added an option to allow a program to detach itself from the shell - it was launched from. This option is ignored for residentable - programs. - - -c.lib 1.36 (14.2.2003) - -- Removed redundant code from the routines which deal with buffered - stdio streams. The respective routines now only test for the - buffering type and ignore the buffer size altogether, just like - it's supposed to work. - -- Fixed the vfprintf() %e format output which no longer flips the - sign of the number to be converted until it's safe to do so. - The code to figure out whether %g should be mapped to %e or %f - was unreliable because it could miscount the number of digits in - front of the comma. - -- Updated the code that dumps the stdio buffer in fcntl() before the - set/get lock function is performed. These two should have nothing - in common, though. Let's see what it does. - - -c.lib 1.35 (13.2.2003) - -- When a stdio or plain unbuffered stream is opened, the respective data - structures are reinitialized with default values. Previously, the old - settings could persist and stale data could cause unallocated or - reallocated data to be clobbered. This seems to have been the problem - which eventually broke the Samba port. - -- Added some more code to improve debug output quality. - -- The buffered stdio routines now include some extra safety checking - code in case the buffer data structures get clobbered. Not that this - should happen again... - - -c.lib 1.34 (8.2.2003) - -- The program startup code now opens dos.library and utility.library - before it starts to figure out whether it has sufficient stack space - available or not. This allows the stack size setup callback function - to get its bearings. It also simplifies the startup code a bit. - -- The UtilityBase and LocaleBase library bases will now be cached until - the startup code performs its cleanup duties. This is intended to help - application software which insists on reopening these libraries by - itself all over again. - -- The stdio initialization code now uses the shell's standard error output - stream if one is available. Otherwise, it will open "CONSOLE:" instead, - thereby cloning the console file handle. - - -c.lib 1.33 (2.2.2003) - -- Rewrote the vfprintf() floating point conversion code not to rely - upon floating point to integer conversions which could overflow the - capacity of 32 bit integers. The new code now converts the individual - digits as floating point numbers which then end up getting converted - into integers, which should be safe enough. - -- Simplified the fgets() code a bit. - - -c.lib 1.32 (26.1.2003) - -- The fgets() EOF detection was flawed. Fixed [Andrea Valinotto]. - It now returns NULL if no data was read yet and an EOF condition - was detected. Previously, it would keep returning an empty string. - - -c.lib 1.31 (14.1.2003) - -- Rewrote the floating point conversion code in vfscanf(). The - EOF handling for the data to be parsed was not robust enough. - It aborted scanning altogether if the last data item also - included the last character in the data stream. - -- Now properly counts all characters read in vfscanf() even if - some of them have to be pushed back. - -- Invalid character matches are now pushed back by vfscanf(). - - -c.lib 1.30 (28.12.2002) - -- ungetc() now returns the character pushed back, or EOF if it - could not push anything back. It also clears the end-of-file - indicator. - -- ftell() no longer drops the read/write buffer contents. It now - checks where the current file access pointer is and then adjusts - that position with regard to what's in the read/write buffer. - - -net.lib 1.7 (28.12.2002) - -- The socket file descriptor hook now rejects seek accesses, - setting the proper errno code ESPIPE. - - -net.lib 1.6 (21.12.2002) - -- Turns out that the daemon socket bound to the stdio streams must be - marked as available for reading and writing or Samba won't work. - - -stack.lib 1.2 (18.12.2002) - -- Added code that collects information on how much memory is allocated - for stack extension. That data is printed by the debug library before - it exits. - - -c.lib 1.29 (18.12.2002) - -- strxfrm() and strcoll() did not use the locale.library pragma/inline - header files and thus would not link properly. Fixed. - -- Changed the entry assertions for bcopy(), bsearch(), memcpy(), - memmove(), memset() and bzero() to ignore zero length arrays. - This fixes the GCC port which had alloca(0) followed by bzero(..,0) - in it. - -- malloc() and alloca() now return NULL again for a zero length - allocation. Not sure if this is the way to go... - - -c.lib 1.28 (14.12.2002) - -- setenv() trashed the variable value to be used if the variable and - value names were given in the "variable=value" form. Fixed. - -- Reworked the overflow checking for strtol() and the scanf() family - again. This time it hopefully works as expected. - -- Trying to allocate a memory chunk of size 0 now returns a pointer - to a unique address rather than NULL. I wonder whether this is - really the right thing to do, but it seems to help the compiler. - -- Calling realloc() on a memory chunk with exactly the same size it - was allocated with now returns a pointer to that chunk rather than - NULL. - -- The alloca() memory cleanup code is now triggered from within the - library by a separate function which can be told apart from user - code making the call. - -- Now remembers which local variables were set with putenv()/setenv() - and makes sure that before it exits that they all get removed first. - - -c.lib 1.27 (13.12.2002) - -- The strtol() fix didn't actually fix anything broken, but broke some - working things instead. Fixed. - -- Reworked the overflow checking code in scanf() and strtol() again to - compile without producing warnings. - - -c.lib 1.26 (13.12.2002) - -- strtol() did not set the converted number to the smallest possible - negative integer if the number to convert had a sign. Fixed. - - -c.lib 1.25 (13.12.2002) - -- Added special case code to handle conversion of the smallest long - integer -2147483648 from ASCII string to number. - - -c.lib 1.24 (12.12.2002) - -- vfprintf() couldn't convert -2147483648 into a string. This is what - caused GCC to fail rebuilding itself. Fixed. - - -c.lib 1.23 (12.12.2002) - -- setvbuf() now consistently accepts a size value of 0, whereupon - it will default to "no buffering" mode. - -- Ouch. My "optimization" for unbuffered streams did not work if the - buffer size was set to zero. Fixed. - - -c.lib 1.22 (12.12.2002) - -- The buffered file I/O routines no longer take care of appending - data to the end of the file. This is now done entirely by the - file descriptor layer. - -- fread() could in unbuffered mode end up reading partial elements - from the file. It now backs up to change the file position to take - the exact number of records into account that should have been - read. - -- setvbuf() now frees the custom file buffer before replacing it - with a user supplied buffer. - -- stderr is no longer buffered by default (as it should be). However, - optimizations are in place to make vfprintf() and fputs() queue their - output until they return. - - -net.lib 1.5 (12.12.2002) - -- Replaced the inline header files. - -- When launched as a daemon from inetd or similar, the daemon socket - passed to the startup code is now adopted for stdin. Previously, - three new sockets were duplicated from the daemon socket. Also, - the three stdio streams are no longer buffered by default. The - file descriptor setup now matches the standard I/O setup in that - stdin can be read from and stdout/stderr can be written to. - - -c.lib 1.21 (10.12.2002) - -- The path name translation code could end up clobbering the original - string. Fixed. - -- The command name translation in system() did not work right. It - ended up translating the entire string which bombed with very - long command lines. Same problem for popen(), same fix. - -- Updated the Unix name translation code to bail out of the string - to translate is too long to be translated in the first place. - Previously, it just trashed the stack :( - -- system() now calls SystemTagList() with SYS_UserShell=TRUE. - -- Fixed up the header files so that function pointers for the debug - routines actually work. This became apparent when I was trying to - rebuild the binutils with the clib2. - -- The header file no longer pulls in - by default. If it hasn't been included yet, then only the timeval - structure is defined. - - -c.lib 1.20 (8.12.2002) - -- The stdio buffered file I/O routines now clear their error indicators - before work begins. - -- Simplified the code to back the lseek() function. It no longer calls - Seek() twice if the file position does not change. - -- fgetc() and fputc() now set errno to EBADF if the file in question - cannot be read from or written to, respectively. - - -amiga.lib 1.3 (8.12.2002) - -- The name of the memory pool is now placed at an odd memory location. - - -c.lib 1.19 (4.12.2002) - -- index()/rindex()/strchr()/strrch() now perform signed byte - comparisons. These used to be unsigned. - -- Added a cast to memchr() to make sure that the comparison - is performed on unsigned bytes. - -- fseek() and fsetpos() now clear the file EOF condition. - - -c.lib 1.18 (29.11.2002) - -- ftruncate() no longer works for files which aren't open for writing. - -- Simplified the __show_error() code. - -- When allocating a custom buffer, setvbuf() didn't actually fill in - the allocated buffer's address, causing data to be trashed. Fixed. - Setting the buffer size to zero now works only for the - "don't buffer" mode. If the buffer size was changed, the previous - buffer was not flushed to disk before. - -- If an attempt to flush a file write buffer fails, the next attempt - to put data into the buffer will retry flushing the buffer. - Previously, data would have been written beyond the bounds of the - buffer. - -- If fgets() hits an error, it now NUL terminates the string - to be on the safe side. - -- Lost the (disabled) asyncio code. - -- The startup file for SMALL_DATA32 mode did not set up register A4 - at all. Ouch. - - -amiga.lib 1.2 (29.11.2002) - -- Fixed the RVI code to look & work more like the original implementation. - - -m.lib 1.2 (7.11.2002) - -- pow() called the IEEEDPPow() LVO with the x/y parameters reversed. - Actually, IEEEDPPow() seems to be the one to blame [Andrija Antonijevic]. - -- __fixunsdfsi() and __fixunssfsi() had a cast in the wrong place. - The original libnix functions these were based on were still - correct [Andrija Antonijevic]. - - -m881.lib 1.2 (7.11.2002) - -- __fixunsdfsi() and __fixunssfsi() had a cast in the wrong place. - The original libnix functions these were based on were still - correct [Andrija Antonijevic]. - - -c.lib 1.17 (7.11.2002) - -- ftell() now returns the current file position rather than invoking - fseek(), which does something different altogether [Andrija Antonijevic]. - -- fgetpos() now calls ftell() [Andrija Antonijevic]. - -- fsetpos() didn't properly evaluate the return value of fseek() - which would have been -1 in case of error [Andrija Antonijevic]. - -- fseek() now returns 0 for success and -1 for error [Andrija Antonijevic]. - - -c.lib 1.16 (5.11.2002) - -- memcpy() and memmove() had a debug switch wired the wrong way - round, causing the wrong kind of code to be emitted. Code which - could call exec.library/CopyMem and shouldn't have called it. - Fixed. It no longer depends upon exec.library. - -- Removed all the abort signal routines from the string formatting - code. This kind of action is now done solely by the I/O routines. - - -c.lib 1.15 (4.11.2002) - -- sscanf() ended up calling vfprintf(). Ouch. - -- Practically none of the numeric conversion operations in the scanf() - family actually worked. Fixed. - -- scanf() and friends now push a character back upon detecting an - overflow rather than using it and setting the number converted to - MAXINT. - - -c.lib 1.14 (21.10.2002) - -- Rewrote strcasecmp() and strncasecmp() to work more like strcmp() and - strncmp(). Previously, these functions would drop into the utility.library - routines Stricmp() and Strnicmp() which don't work like strcmp() or - strncmp(), respectively. - -- Rewrote the code that closes file descriptors. It should now be much smarter - in handling duplicates. - -- fchmod() invoked the wrong hook action which could lead to a crash. - -- Added wrapper code for ExamineFH() to avoid crashing due to a bug in - dos.library V40 and below with NIL: file handles. - -- The temporary directory locks set up for temporary files were never - unlocked. - -- Submitting an untracked memory region to be freed did not produce the - intended error output. - - -c.lib 1.13 (7.10.2002) - -- The vfprintf() family didn't produce any sign characters at all unless - a field width specifier was used [Andrija Antonijevic]. - - -c.lib 1.12 (28.9.2002) - -- The vfprintf() family got the hexadecimal number conversion (and the pointer - conversion, too) wrong because the conversion string had an extra zero digit - in it [Detlef Würkner]. - - -c.lib 1.11 (15.9.2002) - -- In the printf() family, the default case for '%c' (plain character - output without padding) did not update the length of the string - created [Andrija Antonijevic]. - - -c.lib 1.10 (11.9.2002) - -- In gettimeofday() the important DateStamp() call was missing [Andrija - Antonijevic]. - -- Removed the replacement remainder calculation code. It's not necessary. - - -c.lib 1.9 (7.9.2002) - -- Added replacement code for the two routines the updated compiler will call - in place of the inline '020 math which cannot be used on the '060. This - ought to be done smarter, but this works, too. - - -c.lib 1.8 (28.8.2002) - -- The open() code now avoids calling Lock() on NIL:, which otherwise could - have caused the file open action to follow later to be skipped. - -- Added more compiler internal code to support SAS/C. - -- Increased the size of the memory debugging walls. - -- When reading data off stdin character by character, the stdout and - stderr streams are now flushed first. - - -c.lib 1.7 (27.8.2002) - -- Discovered that ExamineFH() and ChangeMode() will crash on file - handles which refer to "NIL:". Put a workaround for these into - the open() code. - - -c.lib 1.6 (27.8.2002) - -- With the standard I/O streams the vfprintf() code would still add a - terminating NUL byte to each string printed. Fixed. - -- The open() code now checks before it opens if the file in question - can be overwritten, should this be necessary. Likewise, once the - file in question has opened, its protection bits are examined to - verify that the access mode it has been opened for is applicable - in the first place. - -- The asynchronous I/O option now works only for O_RDONLY and O_WRONLY - mode access. - - -c.lib 1.5 (25.8.2002) - -- fread() treated EOF as an error, returning with 0 characters read - from the buffer even if there was still some data in the buffer that - could be read. - -- fread() now seeks back to the last location it could read an entire - element from. Subsequent fgetc() calls will thus pick up the data - not processed by the previous fread() call. Also, if fread() encounters - an error, it seeks back to where the read was supposed to begin. - - -c.lib 1.4 (22.8.2002) - -- Updated the ctype_headers.h, locale_headers.h, math_headers.h, - signal_headers.h, stdio_headers.h, stdlib_headers.h, string_headers.h, - strings_headers.h and time_headers.h header files. The extern library - definitions are now in the SAS/C branch. - -- Moved the __is_daemon definition from unistd.h into dos.h and changed - its type as well. - - -net.lib 1.4 (22.8.2002) - -- Updated the SAS/C compatible prototypes and #pragma definitions. - - -c.lib 1.3 (22.8.2002) - -- Files opened in exclusive access mode are now switched back into - shared access mode for testing. - -- The asynchronous file I/O is now enabled only for read and write - access. Appending is disabled. - -- You now have more control over the asynchronous file I/O and can - enable it on demand and specify the default buffer size. - -- You can now provide for a callback function that initializes the - default stack size to use early on during the runtime configuration - process. - - -net.lib 1.3 (22.8.2002) - -- getgroups() and setgroups() now ignore the second parameter if the - number of groups involved is zero. - -- Upon startup, the runtime environment now sets a global variable - to 1 if the current program was launched by the internet superserver - or an equivalent facility. - - -c.lib 1.2 (21.8.2002) - -- Added sigaddset() and sigemptyset(). - -- isxdigit() didn't work. Fixed. - - -net.lib 1.2 (21.8.2002) - -- Added setpwent(), getpwent(), endpwent(), setgrent(), getgrent() and - endgrent() - - ----------------------------------------------------------------------------- - -amiga.lib 1.1 (20.08.2002) - -- Now bears a version number. - - -c.lib 1.1 (20.08.2002) - -- Now bears a version number. - - -debug.lib 1.1 (20.08.2002) - -- Now bears a version number. - - -m.lib 1.1 (20.08.2002) - -- Now bears a version number. - - -m881.lib 1.1 (20.08.2002) - -- Now bears a version number. - - -net.lib 1.1 (20.08.2002) - -- Now bears a version number. - - -stack.lib 1.1 (20.08.2002) - -- Now bears a version number. - - -unix.lib 1.1 (20.08.2002) - -- Now bears a version number. - - ----------------------------------------------------------------------------- - -- '%f' floating point output now also works for numbers > 9. - -- needs to include and . - -- now only defines a bunch of data types, it no - longer includes any header files. - -- Activated the local bcopy() and ovbcopy() code. - -- Added ACrypt(). - -- Added CreateTask() and DeleteTask(). - -- Added Sebastian's fix for vsprintf(), which did not generate - a '-' at all appropriate times. - -- Added Unix-style directory scanning with pseudo "/" directory - support. - -- Added __stdio_configure_streams() to reconfigure the stream - I/O after the Workbench output window has been opened. - -- Added a local NewList() replacement. - -- Added a plain 68k version of the setjump()/longjmp() pair. - -- Added an extra call to __check_abort() after each - bsdsocket.library call. Because, if a ^C was registered, - causing the respective function call to return, the signal - will still be set, waiting to be picked up. - -- Added assertions to vfscanf(). - -- Added basename(), dirname(), asprintf(), snprintf(), - vasprintf(), vsnprintf(), mkdtemp(), mkstemp(), mktemp(), - putenv(), setenv(), unsetenv(), strcasecmp(), strncasecmp(), - strdup(), gettimeofday() and alloca(). - -- Added data and code to support SAS/C stack overflow checking - and abort. - -- Added further ^C checking to closedir(), opendir(), readdir(), - rewinddir(), creat(), open(), read(), write(), chmod(), fchmod(), - fstat(), lstat(), mkdir(), rmdir(), stat(), fprintf(), fputs(), - ftell(), getc(), getchar(), gets(), __open_iob(), printf(), - putc(), putchar(), puts(), rewind(), setbuf(), sprintf(), - tmpfile(), tmpnam(), vfprintf(), __vfscan(), vprintf(), - vsprintf(), getenv(), system(), strtod(), strtol(), strtoul(), - strftime(), access(), chdir(), chown(), fchown(), fileno(), - ftruncate(), getcwd(), getopt(), lchown(), link(), readlink(), - sleep(), symlink(), truncate(), unlink() and utime(). - -- Added getopt(), kill() and getpid(). - -- Added grp.h and pwd.h header files. - -- Added isatty(). - -- Added more assertions and tests to detect illegal parameters - earlier than before. - -- Added more assertions to strftime(). - -- Added more casts to (size_t) where appropriate. - -- Added more memory debugging hooks to other routines which - implicitly allocate memory and return it. - -- Added more of the GCC specific support routines. - -- Added new __get_a4() and __set_a4() routines to the startup - code. Also put them into the header file. - -- Added platform specific header file. - -- Added popen() and pclose(). - -- Added some more assertions to qsort(). - -- Added some of the bsdsocket.library stubs required for - Samba 2.0.7 to work. - -- Added stack size checking support. - -- Added stack swapping code. - -- Added statfs() and fstatfs(). - -- Added stub code to handle double precision IEEE math. - -- Added support code to emulate the behaviour of debug.lib. - -- Added the Amiga/Unix name translation code. - -- Added the GCC specific floating point runtime library routines. - -- Added the GCC specific startup code. - -- Added the README file. - -- Added the amiga.lib RVI code. - -- Added the hook and method functions from amiga.lib. - -- Added the math support code. - -- Added the memory allocation debugging code. - -- Added the memory pools code to the amiga.lib set. - -- Added the monitoring and debugging code. - -- Added the remaining few amiga.lib 'C' library routines. The - memory pools stuff is probably hopeless, but we'll what I can do. - -- Added the socket I/O wrapper. - -- Added the source code comments to the memory pools source code. - -- Added the stack extension code. It still has to be updated to - be more readable, though. - -- Added the wide character stubs. - -- Added umask(). - -- Added usergroup.library support. - -- All debug output now uses kprintf() again. - -- All memory allocations now use malloc() and free(). - -- Changed the manner in which the floating point support code is - compiled into the library. - -- Changed the name of the preprocessor symbol which activates - the Unix file name semantic support. - -- Changed the names of unused function parameters to match their uses. - -- Changed the way the library is built. We now build seven - different component libraries which all must be linked - separately. - -- Conditional branches no longer bear an 's' or 'w' suffix. - The assembler is supposed to find out all by itself which - one should be picked. - -- File descriptors and I/O buffers now receive the respective - data structures as part of the hook calling packet rather - than having to probe the h_Data contents. - -- Finally figured out what the %n format specifier is supposed - to accomplish in fprintf(). - -- Finally figured out what the __main() reference was good - for and implemented construtor and destructor support. - -- Fixed a bunch of compiler warnings. - -- Fixed more than one bug in sleep(). This time the code - hopefully works as advertized. - -- Fixed several bugs GCC highlighted. - -- Fixed two more compiler warnings related to signed/unsigned - comparisons. - -- For Workbench startup, the stderr stream is now merely an alias - for the stdout stream. - -- Forgot the SAS/C CallHookA() stub. - -- Forgot to add the stubs for the socket and usergroup components. - -- Found and worked around two more code generation problems with - WaitSelect() and recvfrom(). - -- GMT+0 always came out as GMT+ with strftime(). It now stays GMT. - -- If possible, memory pools are used for memory management. - -- In we now define sigset_t rather than in . - -- In CreateTask(), the recovery from a failed AllocEntry() call - was flawed. Reread the exec source code and fixed that bug. - -- In alloca(), no unused memory was ever freed. - -- In listen() a test to see if the file descriptor was really a - socket was missing. - -- In memmove(), the local ovbcopy() code is now smarter about the - registers it has to save. - -- In stat(), lstat() and fstat() the st_dev structure member is - now initialized with the address of the file system's MsgPort - the respective directory/file is stored on. This allows file - descriptors to be compared. - -- In strstr() there is now a test to make sure that the substring - is smaller or equal in size to the big string to be searched in. - -- In vfprintf() the '%g' output format always came out as '%e' if - the precision was uninitialized. Fixed. - -- Instead of passing local variables around to show errors or to - display the current program name, the whole code now uses global - variables. - -- Integrated a modified version of the Commodore asynchronous file - I/O code into the library, mainly for the benefit of Samba. - -- Integrated the default stack size checking variables into the - makefiles. - -- Integrated the extra super elaborate advisory file locking code - which worked so well with Samba. Or did it? With the new library - it appears that opportunistic locks don't work any more. I'm not - so sure if they ever did :( - -- Knocked up replacement functions for amiga.lib and SAS/C runtime - library functions. - -- Looks like Samba needs the super elaborate locking method after - all. Oh well... - -- Modified the startup code and the assembly language fragments - to support the -fbaserel32 option. Built Samba 2.0.7 with it, - which actually seems to work OK. - -- Modified the unistd.h header file to avoid clashes with the - TCP/IP header files. - -- More components are now part of libunix.a to make sure that the right replacement functions are linked in. - -- Moved NewList() into its own source file. This is supposed to - be more compatible with amiga.lib. - -- Moved all the functions which are unimplemented out of the build - files. The old build makefiles are still around, though. - -- Moved the fundamental file descriptor I/O into the stdio branch. - The fcntl branch now only contains stubs. - -- Moved the locale references made in strtod() into the math - libraries, too. - -- Moved the macro definitions into a separate header file. - -- Moved the string hook code into sscanf(). - -- No longer uses the cooked version of for the build. - A local "debug.h" header file is used instead. - -- Now actually compiles and links with GCC. - -- Now builds code for the 68020-60 target rather than 68020-40. - -- Now builds with SAS/C again. - -- Only a single error message should appear during startup, not - a long list of messages for each problem that might appear. - -- Oops. Forgot the constructor/destructor defaults for GCC. - -- Oops. One variable was uninitialized. - -- Plugged in the optimized assembly language data copying code. - -- Preparations for %ll support in vfprintf() and vfscanf(). - -- Rebuilt with GCC, which revealed a problem in calling - AutoRequest(). Fixed. - -- Rebuilt with new GCC inline macros which yield better code. - -- Redid the BOOPSI functions in 'C'. - -- Redid the qsort() code, borrowing snippets from libnix2. - -- Reduced the complexity of fseek() a bit. - -- Renamed stdio_unixsemantics.c to stdio_unixbehaviour.c. - -- Reorganized the libdebug.a source code. Each file now contains - only a single routine. - -- Replaced all unconditional branches with jbra. - -- Restored the old advisory record locking code to see if it - makes a difference. - -- Reviewed the stack extension code and added comments. Now - uses pooled memory allocations instead of AllocMem()/FreeMem() - if possible. - -- Reworked the header file set to key off the compiler used. - -- Reworked the popen() initialization code. - -- Rewrote the ncrt0.S and nrcrt0.S startup code again, trying to - make it simpler. - -- Rewrote the setjmp()/longjmp() code to also save and restore - the floating point register set if there is an FPU installed. - -- Separated the code paths for alloca(), malloc(), realloc() - and free(). They all call intermediate routines to get their - jobs done. - -- Simplified error return codes in many components. - -- Simplified the build makefile. - -- Stack swapping appears to work. - -- Switched compiler options to large data/large code to keep - SAS/C out of my hair. - -- Tested the Unix name semantics translation. - -- The 'e', 'f' and 'g' formatting commands produce no output - the floating point support code is not built into the library. - -- The Amiga/Unix name translation routines now treat "" and "." - special. - -- The FLOATING_POINT_SUPPORT macro definition never checked for - the M68881_FLOATING_POINT_SUPPORT symbol. Fixed. - -- The HUGE_VAL constant now actually refers to a constant floating - point number which the startup code will initialize with 'positive - infinity'. - -- The IEEE math code now compiles properly. - -- The IEEE math libraries are now opened requiring version 33 or - higher. Earlier versions did not support floor() or ceil(). - -- The Unix name translation code now allows for files in /dev to - be accessed. /dev/null, however, is still mapped to NIL:. - -- The __swap_stack_and_call() function never actually loaded A6 - with SysBase. Guess I was lucky... - -- The _main() startup code now displays error messages and is more - careful about mucking with the program's streams and current - directory configuration. - -- The abort() and raise() code now shares the same error message. - -- The abort() code now drops into _exit() rather than relying - upon raise() to do this. - -- The amiga_rexxvars code no longer uses 'fp' in place of 'a5'. - -- The asyncio.c code now uses the local bcopy() routine rather - than calling into CopyMem(). The local bcopy() is a lot faster. - -- The atexit() processing now takes care of all registered - functions, even if exit() is called by one of them. - -- The constructor/destructor support code could crash if no - such functions were present in the binary. Fixed. - -- The conversion of the program startup parameters to a command - vector now works as expected. - -- The debug.h header file now also works with GCC (sort of). - -- The file descriptor duplication is now done in the respective hook. - -- The fundamental lseek() code could trash the current file - position. Fixed. - -- The kgetnum() code did not properly update the character - position for the sign and the digits. Fixed. - -- The libdebug.a code is now fully self contained, so that it may - be linked in last. - -- The log tag initialization in the socket setup code did not work - properly. Fixed. - -- The math routines are now compiled only if the preprocessor - symbols are set up for them to build. - -- The name translation routine in readlink() changed the wrong name. - Fixed. - -- The new test code also prints an integer and a rational number - to test floating point output. - -- The non-blocking console I/O flag was not reset as it should have - been. Fixed. - -- The numeric and collation locale references were still using - the old locale variables. Fixed. - -- The numeric conversion routine used by the time code did not - generate proper ASCII digits. Fixed. - -- The old record locking code needed to be integrated better. - -- The pseudo-root directory containing all volumes is now scanned - entirely within readdir(); opendir() now only collects the - available volume names. - -- The raw I/O routines no longer reference the SysBase variable. - -- The return code of rename() was always the opposite of what - it really should have been. Fixed. - -- The socket code is now compiled conditionally. - -- The special behaviour of remove() and rename() is now a compile - time option. - -- The stack extension setup and cleanup routines are actually - called now. - -- The stack size checking code is no longer built if the stack - extension code is to be used. - -- The stdlib initialization code now attempts to create a memory - pool. This is done exactly once. - -- The time conversion code no longer drops into assert() if the - time stamp is not within the supported Amiga time window. - -- The unlink() and rename() functions can now be configured to - perform vaguely like on a Unix system. - -- There is still something wrong with the built-in functions, so - I disabled them in the makefile. - -- Tried to find a way to allow for ":" to pass through the Unix - file name translation process without being mistaken for the - pseudo-root directory. - -- Triggering a call to exit() while the program is already on the - way out should now be considerably safer than it used to be and - no longer end in recursion. - -- Turned out that in order to be residentable, the constant - __huge_val cannot actually be replaced at runtime with positive - infinity. So the __huge_val is no longer constant, but a cast in - forces it to be. - -- Turns out that the GNU linker visits each library only once. - Bummer. Had to reorganize the source code again and now libnet.a - contains only those special versions of the file access routines - which use Unix-like semantics and behaviour. - -- Updated several instances of signed vs. unsigned comparisons. - -- Updated the GNUMakefil to be more portable and to build all the - library flavours necessary. - -- Updated the object file list. - -- When using socket I/O as a daemon, no error messages are sent to - stderr by abort() or raise(). - -- Whoops. Overlooked two files which should have gone into the - repository much earlier. - -- Workbench startup now opens a default output window. - -- __fixunsdfsi() and __fixunssfsi() didn't actually do anything - useful. Fixed. - -- __locale_exit() should no longer close the same locale twice. - -- __open_iob() now truncates files for "w+" mode. - -- __stdio_exit() and close() should handle closing of an aliased - file descriptor properly now. - -- _main() now checks how much stack space was actually used and - prints that number. - -- access() now always returns an error if a file does not exist. - This fixes open(), which could fail if a file did not exist - even though it should have failed if it existed. - -- assert() now prints the program name. - -- assert() now throughs an Enforcer hit to make bug tracking easier. - -- assert() now uses kprintf() to print its messages. - -- bcopy() no longer calls into memcpy(). - -- bzero() no longer calls into memset(). - -- clock() did not work properly. Fixed. - -- free() and malloc() now mangle the contents of the memory - buffer before they return unless the NDEBUG symbol is defined. - -- free() now also invokes the alloca() drop code. - -- fseek() could end in an assertion if no data had been read from - the file yet. Fixed. - -- fstat() now also works on sockets. - -- getcwd() always trashed memory if "/" was returned. Fixed. - -- getcwd() now takes the / directory into account. - -- index() and rindex() no longer invoke strchr() and strrch(). - -- lseek() returns the file position reached after the file - pointer has been repositioned. - -- mktemp() always changed the wrong string. Fixed. - -- mktemp() ran over the end of the buffer, only that this didn't - really matter up until now. - -- popen() didn't actually compile. Fixed. - -- printf() and friends no longer attempt to NUL terminate streams. - -- qsort() and bsearch() no longer drop into abort() if their - invalid parameters don't matter because there is no data to - examine. - -- readlink() now attempts to let dos.library resolve the path - and then returns an absolute path name. If that doesn't work, - it invokes ReadLink() instead. - -- realloc() no longer needs to know about the manner in which - the allocation itself is managed. - -- remove() now calls unlink(). - -- rename() now returns -1 on error, not 0 as it could have done - accidentally. - -- setvbuf() doesn't really need to go through the memory - allocation debugging code. The memory allocated isn't visible - to the outside. - -- size_t parameters are now tested to see if they might have been - negative integers originally. - -- sleep() tries to be nicer about the timer I/O request in progress. - -- snprintf() now returns the number of characters that would - have been written to the buffer, now matter how many could - really be stored. - -- stat() now makes up pseudo data for the pseudo root directory. - -- statfs() now also knows how to treat the pseudo root directory. - -- strchr() and strrchr() now perform their comparisons on - unsigned characters. - -- strings.h didn't actually compile. Fixed. - -- time() did not add any seconds to the current time. Fixed. - -- tmpnam() could return with AmigaDOS requesters disabled for - the shell. Fixed. - -- unlink() now checks if the file to be deleted has been set up - for deletion before. - -- vfprintf() now uses fputc() to dump strings rather than calling - fwrite(). This has the effect of flushing the buffer properly - if there are line feed characters in the string specified for %s. +- vfprintf/vfscanf now support the %lld/%llu (64 bit integer) format + by default diff --git a/library/smakefile b/library/smakefile index 26c4807..d9034bc 100644 --- a/library/smakefile +++ b/library/smakefile @@ -1,5 +1,5 @@ # -# $Id: smakefile,v 1.5 2004-08-12 12:31:27 obarthel Exp $ +# $Id: smakefile,v 1.6 2004-08-16 09:33:12 obarthel Exp $ # # :ts=8 # @@ -189,6 +189,7 @@ MATH_OBJ = \ math_floor.o \ math_fmod.o \ math_frexp.o \ + math_hypot.o \ math_init_exit.o \ math_isinf.o \ math_isnan.o \ diff --git a/library/stack.lib_rev.h b/library/stack.lib_rev.h index 04ea54b..9cf0edd 100644 --- a/library/stack.lib_rev.h +++ b/library/stack.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 170 -#define DATE "14.8.2004" -#define VERS "stack.lib 1.170" -#define VSTRING "stack.lib 1.170 (14.8.2004)\r\n" -#define VERSTAG "\0$VER: stack.lib 1.170 (14.8.2004)" +#define REVISION 171 +#define DATE "16.8.2004" +#define VERS "stack.lib 1.171" +#define VSTRING "stack.lib 1.171 (16.8.2004)\r\n" +#define VERSTAG "\0$VER: stack.lib 1.171 (16.8.2004)" diff --git a/library/stack.lib_rev.rev b/library/stack.lib_rev.rev index 2cd1cfa..b34c321 100644 --- a/library/stack.lib_rev.rev +++ b/library/stack.lib_rev.rev @@ -1 +1 @@ -170 +171 diff --git a/library/unix.lib_rev.h b/library/unix.lib_rev.h index e7eacf8..ad22adb 100644 --- a/library/unix.lib_rev.h +++ b/library/unix.lib_rev.h @@ -1,6 +1,6 @@ #define VERSION 1 -#define REVISION 170 -#define DATE "14.8.2004" -#define VERS "unix.lib 1.170" -#define VSTRING "unix.lib 1.170 (14.8.2004)\r\n" -#define VERSTAG "\0$VER: unix.lib 1.170 (14.8.2004)" +#define REVISION 171 +#define DATE "16.8.2004" +#define VERS "unix.lib 1.171" +#define VSTRING "unix.lib 1.171 (16.8.2004)\r\n" +#define VERSTAG "\0$VER: unix.lib 1.171 (16.8.2004)" diff --git a/library/unix.lib_rev.rev b/library/unix.lib_rev.rev index 2cd1cfa..b34c321 100644 --- a/library/unix.lib_rev.rev +++ b/library/unix.lib_rev.rev @@ -1 +1 @@ -170 +171