1
0
mirror of https://github.com/adtools/clib2.git synced 2025-12-08 14:59:05 +00:00

423 Commits

Author SHA1 Message Date
c02665938f Merge pull request #13 from sodero/topic/additional_error_codes
Add ENOTSUP error code
2021-05-14 00:38:42 +02:00
1e2863c5b8 fixed README.md 2021-05-14 00:32:09 +02:00
e1da3dadfb moved from travis-ci to github actions and retired codeclimate. 2021-05-14 00:31:17 +02:00
b51c79577e Add ENOTSUP error code. 2021-01-20 15:34:37 +01:00
975f949aa1 Rewritten to handle date ranges better which lie outside the expected time of day, day of month and month.
The 'struct tm' is now properly updated to reflect the time and date information which comes out of the number of seconds calculated.

A bug reported by Andreas Falkenhahn is resolved which had the effect of distorting the number of seconds calculated.
2020-07-06 12:09:51 +02:00
5f14118d73 Fix for translation bug, which would make "a/../b" into "a./b". Contributed by Thomas Frieden - thank you very much! 2018-12-05 13:31:43 +01:00
b874ff71de Add wcscoll() dummy. 2018-04-22 11:21:24 +02:00
397013922c Use IsMinListEmpty() for MinList rather than IsListEmpty().
This removes the warnings about breaking the strict-aliasing rules.
2018-04-10 23:20:20 +02:00
85c36839d5 Create the proper directoy for MAKELIB. 2018-04-10 23:19:13 +02:00
196d37b28a Compile with -nostdlib, rather than -mcrt=clib2.
We are actually building the clib2 here.
2018-04-10 23:18:30 +02:00
e8086be768 Disable -Wunused-label.
There are a lot of unused lables, depending on the actual
compiling mode.
2018-04-10 23:17:08 +02:00
82dd474e3b Disable -Wbad-function-cast. It produces a lot of useless warnings. 2018-04-09 23:24:56 +02:00
58f36203b1 Fix cast to function pointer. 2018-04-09 23:24:07 +02:00
425f899302 Merge pull request #7 from sba1/wchar-fixes
Wchar fixes
2018-03-31 09:37:50 +02:00
febe89c61b Update changelog. 2018-03-30 22:17:41 +02:00
3e50be491b Include stdint.h for WCHAR_MAX to avoid redundant definitions. 2018-03-30 21:42:12 +02:00
dfc7f310d6 Don't define wchar_t in C++ as it is a bultin-type there. 2018-03-30 21:35:06 +02:00
a6a9352a00 Compile wchar_wscoll.c. 2018-03-30 21:21:31 +02:00
eb1d784c0d Provide stub for mbrtowc(). 2018-03-30 21:21:11 +02:00
d1092099d0 Provide some more wide char functions. 2018-03-29 20:59:02 +02:00
bc621bed9c Disable the LOG_COMMAND.
Piping will have the consequence that the exit status of the first command
will not be considered. As this is the compiling command in our case, make
will not exit with an error code even if the compiling failed.

While there are shell-specific solutions, disabling LOG_COMMAND seems to
be the most general solution.
2018-03-29 20:57:32 +02:00
60eebbe732 Implement wcscat(). 2018-03-28 21:23:13 +02:00
345995000a Implement some more of the iswXXX() functions. 2018-03-28 21:16:14 +02:00
ef18bf5f3e Fix vswprintf() prototype. 2018-03-28 18:47:24 +02:00
6f3b3b6d28 Implement few wide char functions. 2018-03-28 17:09:18 +02:00
846eebc66c Fix mbtowc() to and compile it. 2018-03-28 17:08:42 +02:00
75d47ccdad Build all existing wchar and wctype functions. 2018-03-27 20:03:45 +02:00
456123fe7f Add dummy wctob(). 2018-03-27 20:02:54 +02:00
5733c99ba1 Fix wcspbrk() definition to match the prototype. 2018-03-27 20:00:28 +02:00
391e7e39ad Add wcscoll() prototype. 2018-03-27 19:59:54 +02:00
f5f0e17e78 Define ISO 99 multibyte functions also in C++ context. 2018-03-27 19:59:23 +02:00
f6f0082a0e Include sys/clib2_stdc.h for restrict. 2018-03-27 19:56:45 +02:00
c84b1fc1ff Tiny fixes 2018-02-18 13:58:25 +01:00
e35307a7e3 Ignore linker map files, too. 2018-02-17 13:45:21 +01:00
911114c286 add an unimplemented tzset().
ctime_r() and localtime_r() are already using the localtime, so no need to do anything.
http://pubs.opengroup.org/onlinepubs/9699919799/functions/tzset.html

Signed-off-by: Henning Nielsen Lund <hnl_dk@amigaos.dk>
2017-08-27 13:30:12 +02:00
9e998ca108 should have been sys/clib2_stdc.h 2017-08-15 21:53:49 +02:00
99695dec0b we use restrict
Signed-off-by: Henning Nielsen Lund <hnl_dk@amigaos.dk>
2017-08-15 21:45:33 +02:00
0ec7094877 Code depending on statfs or fstatfs do both depend on sys/mount.h and sys/param.h where we only had sys/mount.h
Signed-off-by: Henning Nielsen Lund <hnl_dk@amigaos.dk>
2017-08-15 21:26:45 +02:00
a471e73adf add timespec declaration 2017-08-05 17:28:39 +02:00
c76bf8e20b add strnlen() 2017-08-01 21:28:07 +02:00
309bbd8c8c Add a few extra wide-character prototypes and the missing typedef locale_t 2017-08-01 21:26:59 +02:00
d6e5769bc5 using restrict, so restrict to c99 2017-08-01 14:52:45 +02:00
976b6ae7e1 Change the mbrlen declaration to equal ISO C.
http://pubs.opengroup.org/onlinepubs/9699919799/functions/mbrlen.html

Signed-off-by: Henning Nielsen Lund <hnl_dk@amigaos.dk>
2017-08-01 13:55:11 +02:00
8af96cb6cb Merge branch 'master' of https://github.com/adtools/clib2 2017-07-08 18:10:45 +02:00
febe690623 This got lost last year
The missing calloc() overflow test never made it to the CVS or git repositories :-(
2017-07-08 18:10:28 +02:00
e36ebff16e Merge pull request #3 from adtools/gcc5-fixes
Fixes for compiling with GCC 5.4.0 on AmigaOS 4.1
2017-06-28 08:55:21 +02:00
6a1fd36b3a Revision bump. 2017-06-28 06:35:31 +02:00
feebeb6751 GCC 5 changes 2017-06-28 06:34:57 +02:00
1b2c798467 Fixed calloc() and getopt_long()
Added integer overflow test to calloc().

Tiny change in getopt_long() so that the value pointed to by the "longindex" parameter is always initialized to an invalid index position (that being -1), instead of 0. The value of 0 can break some shell commands, most notably GNU wget.
2017-05-01 18:06:23 +02:00
053a61fc4b Create LICENSE 2016-12-05 14:41:06 +01:00
4c54ee3f2d Version bump 2016-12-04 11:14:17 +01:00
f491e38b38 Added code to temporarily disable profiling 2016-12-04 11:14:00 +01:00
734ce4c1a9 Added code to temporarily disable profiling 2016-12-04 11:13:37 +01:00
ce345df9da Hide warnings for deprecated functions 2016-12-04 11:13:00 +01:00
5e0fa78d61 Only builds with GCC now 2016-12-04 11:12:42 +01:00
bc3e19abe5 Only uses MEMF_PRIVATE on OS4 now 2016-12-04 11:12:32 +01:00
29e02775fb Cleaned up the build rules, added missing files 2016-12-04 11:11:53 +01:00
5cb27db203 Slab allocator is exercised much more 2016-12-04 11:11:28 +01:00
4fc1b13945 Added a rogue malloc/free pair 2016-12-04 11:11:05 +01:00
8beaabac4f Removed unused local variable 2016-12-04 11:10:46 +01:00
271572ed56 Fixed so that it builds correctly with SAS/C again 2016-12-04 11:10:33 +01:00
e0feef8932 Moved __CXV54 into sas_cxv.asm
sas_cxv54.asm is no longer needed.
2016-12-04 11:10:13 +01:00
07259ed7eb This is needed when building with math=ieee option 2016-12-04 11:09:24 +01:00
3203fcf96a Removed unused result variable 2016-12-04 11:08:54 +01:00
bfba44bf83 Rewritten to use setjmp()/longjmp()
Also contains new code which prints the number of times a slab was reused.
2016-12-04 11:08:41 +01:00
35434bdedc Updated to build correctly with SAS/C again 2016-12-04 11:07:40 +01:00
17ba18c731 Added code which temporarily disables profiling 2016-12-04 11:06:50 +01:00
78a8c7655e Added __decay_unused_slabs() 2016-12-04 11:05:50 +01:00
184a127860 Added stdlib_decay_unused_slabs() 2016-12-04 11:05:30 +01:00
5617c0eacf Slab allocator update
Unused slabs which get recycled are no longer reinitialized from scratch if their chunk size matches what the allocator needed. If the chunk size matches, the list of available chunks is left unchanged, and just the various counters are reset.

Added __get_slab_stats() function.

Added support for global __slab_purge_threshold tuning variable.

Added a short test program for the slab allocator.

The malloc-test program was linked against the wrong object file in GNUmakefile.68k. Fixed.
2016-11-27 15:53:40 +01:00
ac710b333e Accidentally omitted from version 1.211 2016-11-24 09:45:35 +01:00
d2acae7cd7 Slab allocator update
Added more consistency checking to the slab allocator, which is built if DEBUG is defined in "stdlib_slab.c".

Memory allocations are no longer guaranteed to be aligned to 64 bit word boundaries. In fact, this has not even worked reliably in the past 10 years.

Memory allocation request sizes are now rounded to multiples of 32 bit words (the size of an address pointer) instead to the size of a 64 bit word.

Reduced the memory footprint of the memory allocation management data structures by reusing the most significant bit of the memory allocation size. This allows many more allocations to fit into the 32 byte chunk slabs, but limits the maximum memory allocation size to a little less than 2 GBytes.

Added integer overflow checks to the memory management code.

Reduced the memory management overhead further. This cuts an additional 8 bytes per allocation, unless neither the slab allocator nor memory pools are available. With this reduction the slab allocator is able to use 16 byte chunks, which cover memory allocation requests of 1..8 bytes.

Fixed a bug caused by returning an allocation back to a slab which passed the wrong pointer.
2016-11-23 16:37:46 +01:00
f8cf752e6a Merge branch 'master' of https://github.com/adtools/clib2 2016-11-22 11:07:46 +01:00
0c5b88d2d3 Slab allocator changes
If the first slab in the list of slabs which share the same chunk size has no more room, it means that all other slabs following it have no room either. This speeds up the test to find a slab with free space, which can now abort and directly proceed to allocate memory for a new slab.

If an empty slab's decay count hits zero, it is moved to the front of the empty slab list to be reclaimed more quickly.

Allocations made from the slab now carry a pointer back to the slab which they are a part of. This speeds up deallocation but has the downside of making the smallest usable slab chunk size 64 bytes, which is double what used to be the minimum before.
2016-11-22 11:07:38 +01:00
1ea8953bd3 Added __get_slab_allocations() function
__get_slab_allocations() which will report information about each memory allocation made by the slab allocator which does not come from a slab.
2016-11-22 11:06:29 +01:00
ff908f8a02 Added a malloc test program 2016-11-22 10:54:58 +01:00
525e193113 added missing .codeclimate.yml and .travis.yml 2016-11-22 10:52:01 +01:00
2df2393b81 minor tweak 2016-11-22 10:50:03 +01:00
ecd40943e2 added Travis-CI and CodeClimate code check support. 2016-11-22 10:46:01 +01:00
7e201fea06 Maximum slab size limited, debug mode errors fixed
The maximum slab size is now 2^17 bytes (= 131072). If you request a slab size larger than this, you will get slab sizes of 131072 bytes instead.

Enabling the memory management debugging code no longer produces compiler errors.
2016-11-21 12:27:40 +01:00
799ee705e8 New monitoring function for slab allocator
Added __get_slab_usage() function which can be used to query the slab allocator memory usage at runtime.
2016-11-19 15:49:21 +01:00
3425e33cf9 New functions and data structures for slab allocator 2016-11-19 15:48:51 +01:00
ef66e530b7 This was missing from the previous commit :-( 2016-11-19 13:08:27 +01:00
fbc8694c49 Added a slab allocator
Added a slab allocator which replaces the use of memory pools or the plain AllocMem() operations, respectively. In order to activate the slab allocator, choose a slab size (e.g. 2048 bytes or 4096 bytes) and declare a global variable like this:

   ULONG __slab_max_size = 2048;

Memory allocations smaller than the slab size will be made from "slabs", i.e. large chunks of memory of the given size. Larger allocations will be managed separately.
2016-11-18 17:22:21 +01:00
eb223f269d simple_sprintf build again
simple_sprintf needs libgcc.a to build correctly.
2016-11-18 17:20:58 +01:00
025b183b5a Unused slabs are getting purged after adding a new slab
If a new slab is allocated, or an empty slab is reused, the list of empty slabs is now purged, if possible. Empty slabs which cannot be immediately purged "decay" and will be collected the next time a new slab is allocated or an empty slab is reused.

If a chunk is allocated and the slab which the chunk came from is fully utilized, the slab is moved to the end of its list. This should avoid searching this slab for free space before all other slabs of the same chunk size have been tested first. Slabs with free space are always placed closer to the head of the list.
2016-11-17 13:14:13 +01:00
8051da3c9a Added a slab allocator
A slab-allocator can now be used as the back-end for all memory allocations by setting __slab_max_size to a value > 0. This controls the slab size used for allocations and should be a power of 2, such as 2048 or 4096 bytes.

This change still needs testing.
2016-11-17 11:45:59 +01:00
ac6d131dc3 Made the call to GetProgramName() work again
Added '#include <dos/obsolete.h>' in order to make the call to GetProgramName() work again. No functional changes.
2016-09-11 10:33:37 +02:00
bb82ad015d Ignore object and library files 2016-09-11 09:22:34 +02:00
e403edd04a Added missing #include <dos/obsolete.h>
Changes in the naming of certain dos.library functions in the
V53 header files are now accounted for. This also affects
unistd/stat/utime code which uses the same header file.
2015-09-30 11:23:04 +02:00
c149db9037 - The contents of the math_fmodf.c and math_modff.c did not match the names of the respective files. In fact, the contents of these files were swapped. 2015-07-24 14:08:57 +02:00
34487c68b4 Added the missing '#include <dos/obsolete.h>', required for the OS4 build. 2015-07-18 10:02:03 +02:00
a1b46cb3d4 Added the missing library revision information pertaining to clib2 1.206. 2015-07-18 10:01:10 +02:00
75f1d5a57e Updated/amended missing copyright information 2015-06-11 13:19:07 +02:00
2bc44bb0f2 Still more typo corrections and repairs 2015-06-11 13:01:23 +02:00
ac03cbb272 Typo corrections and repairs 2015-06-11 12:44:28 +02:00
fd33c09c41 - Added a markdown version of the documentation/README.html file.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15307 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2015-06-10 17:39:55 +00:00
2310605f10 - Removed the "executable" properties from those files which are not executable scripts
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15306 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2015-06-10 13:22:53 +00:00
7f0f7929ba - Updated copyright text and contact information
- Replaced ISO Latin 1 code #160 with a plain blank space (ASCII code #32) where necessary


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15305 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2015-06-10 13:13:40 +00:00
3a63fb9ff8 git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15217 87f5fb63-7c3d-0410-a384-fd976d0f7a62 2015-06-04 09:34:11 +00:00
718574aae5 m.lib 1.206 (24.4.2015)
- The fscanf() family failed to parse and convert %f parameters correctly
  if the respective number did not begin with a digit, but a decimal
  point. Hence ".7" would not be processed, but "0.7" would.

c.lib 1.206 (24.4.2015)

- Reworked the __putc() and putc() macros to reference the 'c' input
  parameter only once, and to be free of side-effects when tinkering
  with the buffer position.

- isatty() had the __fd_lock() call in the wrong place, which could have
  led to cleanup problems later.

- The close action in the stdio, socket and termios hook code now
  also zaps the fd pointer itself after cleaning up the file descriptor
  table entry.

- Removed the remains of all the stack extension and stack overflow/underflow
  checking code. It never actually worked. The bit that does work is the stack
  usage measurement code, plus the bit that sets up the the custom stack
  according to local setting or by calling a query function.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15215 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2015-04-24 14:00:23 +00:00
bdfdd84e38 - Bumped math library versions, due to vfscanf() changes.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15214 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2015-04-24 13:56:39 +00:00
eeb4e5d7aa - Floating point numbers which do not begin with a digit, but with a decimal point, are now processed correctly.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15213 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2015-04-24 13:00:12 +00:00
a665fffff1 - Removed the remains of all the stack extension and stack overflow/underflow
checking code. It never actually worked. The bit that does work is the stack
  usage measurement code, plus the bit that sets up the the custom stack
  according to local setting or by calling a query function.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15212 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2010-10-20 13:50:17 +00:00
a436ebdad1 - Reworked the __putc() and putc() macros to reference the 'c' input
parameter only once, and to be free of side-effects when tinkering
  with the buffer position.

- isatty() had the __fd_lock() call in the wrong place, which could have
  led to cleanup problems later.

- The close action in the stdio, socket and termios hook code now
  also zaps the fd pointer itself after cleaning up the file descriptor
  table entry.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15211 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2010-10-20 13:12:59 +00:00
81e66075e2 - The fputc() and __putc() macros were not entirely free of side-effects. Ouch.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15210 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2010-10-19 09:35:16 +00:00
6bc8108a39 - Version bump to 1.205
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15208 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2010-08-21 11:39:10 +00:00
f600c5e37a - Added dlclose(), dlerror(), dlopen() and dlsym() functions, which are
available only under OS4. There is a variant of dlopen() in libunix.a
  which will perform a path name conversion. Note that these functions
  will not work in the thread-safe variant of the library because it
  would be unwise to tinker with the currently running program's binary.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15207 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2010-08-21 11:37:03 +00:00
1bdfc0d143 - Added dlclose(), dlerror(), dlopen() and dlsym() functions, which are
available only under OS4. There is a variant of dlopen() in libunix.a
  which will perform a path name conversion.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15206 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2010-08-21 10:59:34 +00:00
37a1fdee4f - The shared object initialization has to be performed before any local
constructors are invoked, and after all local destructors have been
  invoked.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15205 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2010-08-21 09:57:50 +00:00
d10027ece7 - Preparations for clib2 1.205
- Added support for ELF shared objects and libraries. This is implemented through
  constructor/destructor functions, which means that you can use this
  functionality even in Amiga Exec style shared libraries, with the proper
  library initialization code to invoke the constructor/destructor functions
  for you.

- Updated uname() to recognize AmigaOS 4.1.

- The translation from Unix to Amiga path names did not properly process
  multiple occurences of "/./" in the path name. Thanks go to Steven Solie
  for finding the issue.

- The detection of "/./" and "/../" patterns in Unix path names to be
  translated into Amiga path names did not test if it was overrunning
  the end of the string.

- If strcmp(), strncmp() and memcmp() detect a pair of different
  characters, then the function result must be calculated as if the
  characters were of type "unsigned char". This is a requirement
  according to the ISO 'C' (1994) standard. Thanks go to Georg Steger
  for finding the issue.

- The definitions for INT_MIN, INT_MAX and UINT_MAX in <limits.h> no
  longer use long integer types, as prompted by Steven Solie.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15204 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2010-08-20 15:33:36 +00:00
60fbee698e - Preparations for c.lib 1.204 release.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15203 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-11-11 12:58:39 +00:00
933483d365 - Updated the build rules for use with GCC 4.2.x
- Added a workaround for the baserel build flavour, which requires a specific
  GCC version, e.g. 4.0.4 or earlier.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15202 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-11-06 14:44:07 +00:00
4291a0564f - The memory allocated by malloc() and friends is now of type MEMF_PRIVATE
under OS4 and beyond. The AmigaOS 2.x/3.x compatible code will still
  use MEMF_ANY in the same situation, though. Other uses of MEMF_ANY have
  been replaced as well where MEMF_PRIVATE would have made better sense.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15201 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-09-30 14:09:00 +00:00
8a1347e61d - I/O buffers allocated are now aligned according to the CPU cache line size,
if the operating system can supply that detailed information.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15200 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-09-04 12:07:58 +00:00
b9ad1fda3f - Elaborated on the unidirectional/bidirectional PIPE: issues.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15199 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-05-07 09:33:55 +00:00
f28dcf8ed1 - stdlib_unsetenv.c needs stdio_headers.h to compile properly.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15198 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-30 16:32:49 +00:00
8eac1027a5 - It's iswpunct() and not iswpunc().
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15197 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-30 14:41:28 +00:00
0b19424148 - unsetenv() now returns a status value.
- Corrected the function prototype for wcspbrk().

- Added function prototypes for mbrtowc_l(), wcscoll_l(), wcscspn() and wcsrchr().


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15196 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-30 14:34:03 +00:00
f100199861 - Switched to BSD style options for the "cp" command, as used in the build
makefiles and the archive build script (that is: 'cp -a' becomes 'cp -p'
  and 'cp -pR', depending upon the specific context).


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15195 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-28 16:12:22 +00:00
f727c0f4c4 *** empty log message ***
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15193 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-28 15:49:25 +00:00
6a149abc57 - Final checkin prior to upcoming release.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15192 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-28 15:42:13 +00:00
e3bde26409 - Added 68k stubs to amiga_rexxvars.c for the OS4 build to use. The new code now
works just about exactly like the amiga.lib RVI code used to do, which means
  that there is no artificial length limit for the number of characters a string
  retrieved may have, and the code is largely reentrant.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15191 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-18 10:11:59 +00:00
bbc98790fe - The 68k stub for StrcpyN stored d1 as a result value, which was both
dangerous and unnecessary.

- Plugged in 68k stubs for the OS4 build.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15190 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-18 10:06:07 +00:00
e7258bf939 - To work around a bug in the Roadshow TCP/IP stack (since fixed), the waitselect()
function now substitutes a 10 microsecond timeout for a zero length timeout.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15189 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-16 07:53:40 +00:00
4444438e8f - isatty() now checks if the file descriptor refers to a real file before
it calls IsInteractive() on it.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15188 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-16 07:46:05 +00:00
6c50657673 - Added disk type definitions to mount_convertinfo.c and unistd_common_pathconf.c,
prompted by Thore Boeckelmann.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15187 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-16 07:38:10 +00:00
7dcc410d0c - Preparations for OS4 conversion.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15186 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-15 16:22:51 +00:00
f0503cd915 - MakeString() did not clear the ns->ns_Ivalue field and did not NUL-terminate
the copied string either. Fixed.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15185 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-15 09:33:06 +00:00
ca20eeab97 - Small indentation changes for the stub code.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15184 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-14 15:16:03 +00:00
6148d06dca - Rewrote the GetRexxVar()/SetRexxVar() functions (mostly) in 'C', using available
code as a reference. The 68k stubs currently only work for the 68k version of
  the library, and a solution for the OS4 build still needs to be found. The code
  is currently untested, but it should be complete.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15183 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-04-14 15:07:37 +00:00
6578b303f7 - Added local inline function definitions for the two rexxsyslib.library V45
API functions, rather than omitting support for them in the 68k build.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15182 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-03-11 13:26:18 +00:00
6801a4fcf0 - reverted the soft-float subdirectory changes as the problem was solved by
olaf in a different way so that libm.a never contains any hard float
  opcodes and instead libm881 contains them. so the separate soft-float
  directory are not required.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15181 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-03-11 07:41:27 +00:00
fa4223c544 [tboeckel]: when compiling amiga_rexxvars.c for m68k/OS3 the GetRexxVarFromMsg()
and SetRexxVarFromMsg() will not be used and therefore not cause linkage errors
with our libamiga.a stubs anymore.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15180 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-03-11 07:37:31 +00:00
91ccaa5ba9 - Added "-msoft-float" to the non-FPU libm build rules, which ought to
resolve the issues with FPU code popping up in the mathieee#?.library
  software floating point code.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15179 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-03-10 16:31:56 +00:00
234a17cc07 - The printf() family now ignores argument specifications, as in "%2$d %1$d",
which are used for localization on some platforms. This is a non-standard
  feature and the way clib2 treats it for now is just intended to avoid
  trouble while performing the conversion.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15178 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-03-10 15:28:11 +00:00
a41212e575 - Temporarily deactivated the separate -msoft-float builds.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15177 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-03-10 14:59:54 +00:00
2591e249d7 - [jlangner]: changed the GNUmakefile.68k to also build soft-float variants of all
our libraries. In addition the specs file now also respects the -msoft-float
  option at link time and sets the default link directory accordingly.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15176 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2008-03-04 16:25:35 +00:00
5ea68e3265 - the log() and log10() functions always returned -inf() even if the arguments
was within the valid range for a log() function. Using DBL_EPSILON as the
  threshold was not correct as EPSILON is 2.2204460492503131E-16 whereas
  values like 1E-200 are still valid double values for a log().


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15175 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2007-11-08 11:23:53 +00:00
0f3791a9a4 c.lib 1.202 (16.1.2007)
- Added llrint() function contributed by Henning Nielsen Lund. Thank you
  very much!

- <unistd.h> now also include <stdio.h>, so that the SEEK_SET, etc. macros
  are defined for lseek() to use.

- Added a wrapper function which handles the thread-safe stdio stream
  resolution.

- In tcflush() a break signal can no longer cause the read flush loop
  to be quit with two semaphores still locked.

- In __obtain_daemon_message() the test to verify if the bsdsocket.library API
  would support the server API functionality checked the wrong feature. Fixed.

- Switched over the fd->fd_DefaultFile references to fd->fd_Socket where
  sockets are used rather than file handles.

- Added functions which modify the callback function and the userdata pointer
  stored in a low level unbuffered file/socket data structure. These function
  perform the proper locking and are thus safe to use in a thread-safe environment.

- The low level unbuffered file/socket now has a public equivalent, which
  is defined (along with the typedefs and flags) in <sys/clib2_io.h>. Functions
  for tinkering with it are still to come.

- The math kernel code no longer uses its own private scalbn() function.

- Added a function prototype for the _exit() function. Note that _exit() is
  not an ISO 'C' function.

- Corrected the getopt() function prototype, as prompted by Henning Nielsen Lund.

- The printf() family no longer adds a 0 or 0x prefix if the alternate
  conversion modifier is present for the %o and %x conversions and the
  value to be converted is 0 already. Put another way, printf("%#x %#o",0,0);
  now prints "0 0". This required another change so that %p always includes
  the 0x prefix even if the pointer involved is a NULL pointer.

- readlink() no longer sort-of-works for files and directories. It now only
  works for soft linked objects and returns an error for everything else.
  This is based upon a fix by Peter Bengtsson. Thank you very much!

- Moved the lstat() local Lock() function into its own separate file.

- uname() now returns correct and robust information for OS version
  numbers > 36. This integrates a fix by Peter Bengtsson. Thank you
  very much!

- Moved the crtbegin.o/crtend.o files out of the link libraries. Moving
  them in was intended to work as a fix for the shared library build, but
  now it seems that this has to be done at the link stage through the
  GCC specs file...

- Integrated a fix for __rem_pio2() which affects sin(), tan() and cos(),
  contributed by Steven Solie. Thank you very much!

- The internal 'struct fd' file descriptor table entry data structure
  now has a user data field entry.

- Rearranged the contents of the 'struct fd' file descriptor table entry
  data structure in preparation for making it public. Also added a version
  field so that user code can handle changes to it gracefully. The default
  file is no longer a BCPL pointer to a file handle by default, but
  both a BPTR and a socket identifier, wrapped into a union.

- Added experimental tilde expansion in Unix path names. This still needs
  some more work.

- __get_default_file() called __fd_unlock() without having called
  __fd_lock() first. Ouch.

- Removed an unnecessary pair of __fd_lock()..__fd_unlock() calls from
  ttyname_r().

- The libunix.a unlink() function is now reentrant, or at least thread-safe.

- You can now make unlink() stop after a failed deletion attempt which
  failed because the object to be deleted was reported as being "in use".
  The libunix.a variant defaults to report the deletion to have succeeded
  under these circumstances and later tries to delete the files marked
  for deletion. See <dos.h> for a brief documentation of how to change
  the behaviour.

- basename() and dirname() can no longer return NULL. They truncate the
  resulting path name instead. This is done so because some code that
  calls basename() or dirname() does not check if the function's return
  value is NULL.

- The SetOwner() fall-back code for Kickstart 2.04 was passing the wrong
  parameters to the file system. The first (dp_Arg1) should have been
  zero. Ouch.

- basename() is not supposed to modify the string it is passed and should
  return a pointer to a string which can be modified. Now it does. Same
  thing for dirname().

- asctime_r() now returns NULL if the buffer is too short to hold even a single
  byte of data.

- ttyname() now calls ttyname_r(). Also, the libunix.a version of ttyname_r()
  will produce "/CONSOLE" rather than "CONSOLE:".


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15173 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2007-01-16 08:52:30 +00:00
e5a2a2b451 - Added llrint() function contributed by Henning Nielsen Lund. Thank you
very much!

- <unistd.h> now also include <stdio.h>, so that the SEEK_SET, etc. macros
  are defined for lseek() to use.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15172 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2007-01-06 10:09:49 +00:00
ca1fc13792 - Removed the timeval/TimeVal change workaround and replaced it with something
cleaner.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15171 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-12-28 14:30:57 +00:00
3a0324e4ff - Added a wrapper function which handles the thread-safe stdio stream
resolution.

- In tcflush() a break signal can no longer cause the read flush loop
  to be quit with two semaphores still locked.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15170 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-11-16 14:39:23 +00:00
77279e3224 - In __obtain_daemon_message() the test to verify if the bsdsocket.library API
would support the server API functionality checked the wrong feature. Fixed.

- Switched over the fd->fd_DefaultFile references to fd->fd_Socket where
  sockets are used rather than file handles.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15169 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-11-16 10:41:15 +00:00
75b0a762ef - Replaced rows of blank spaces by tabs.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15168 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-11-16 10:09:20 +00:00
c635fb3ffe - Added a comment to clarify which version number is being used for the
'_fd' data structure definition.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15167 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-11-15 09:21:49 +00:00
70d1e4b7a3 - Added functions which modify the callback function and the userdata pointer
stored in a low level unbuffered file/socket data structure. These function
  perform the proper locking and are thus safe to use in a thread-safe environment.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15166 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-11-15 09:17:04 +00:00
e9659f46d6 - The low level unbuffered file/socket now has a public equivalent, which
is defined (along with the typedefs and flags) in <sys/clib2_io.h>. Functions
  for tinkering with it are still to come.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15165 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-11-15 08:51:07 +00:00
acc795df55 - The math kernel code no longer uses its own private scalbn() function.
- Added a function prototype for the _exit() function. Note that _exit() is
  not an ISO 'C' function.

- Corrected the getopt() function prototype, as prompted by Henning Nielsen Lund.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15164 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-11-13 09:51:53 +00:00
66303e9ba2 - Added a directory to hold contributed code which has not been integrated
with the library yet.

- The byteswap code was contributed by Peter Bengtsson. Thank you very much!


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15163 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-11-13 09:49:49 +00:00
7e1d5d6f6a - The printf() family no longer adds a 0 or 0x prefix if the alternate
conversion modifier is present for the %o and %x conversions and the
  value to be converted is 0 already. Put another way, printf("%#x %#o",0,0);
  now prints "0 0". This required another change so that %p always includes
  the 0x prefix even if the pointer involved is a NULL pointer.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15162 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-11-13 09:32:28 +00:00
e789564429 - readlink() no longer sort-of-works for files and directories. It now only
works for soft linked objects and returns an error for everything else.
  This is based upon a fix by Peter Bengtsson. Thank you very much!

- Moved the lstat() local Lock() function into its own separate file.

- uname() now returns correct and robust information for OS version
  numbers > 36. This integrates a fix by Peter Bengtsson. Thank you
  very much!

- Moved the crtbegin.o/crtend.o files out of the link libraries. Moving
  them in was intended to work as a fix for the shared library build, but
  now it seems that this has to be done at the link stage through the
  GCC specs file...

- Integrated a fix for __rem_pio2() which affects sin(), tan() and cos(),
  contributed by Steven Solie. Thank you very much!


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15161 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-11-13 09:25:28 +00:00
350ffdb790 - The internal 'struct fd' file descriptor table entry data structure
now has a user data field entry.

- Rearranged the contents of the 'struct fd' file descriptor table entry
  data structure in preparation for making it public. Also added a version
  field so that user code can handle changes to it gracefully. The default
  file is no longer a BCPL pointer to a file handle by default, but
  both a BPTR and a socket identifier, wrapped into a union.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15160 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-10-10 13:39:26 +00:00
6809a5dd5b - Added experimental tilde expansion in Unix path names. This still needs
some more work.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15159 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-10-03 16:36:47 +00:00
591ee2250e - Removed an unnecessary (STRPTR) cast.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15158 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-10-02 07:16:06 +00:00
2b9d624d1d - Added some documenting comments to the source code.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15157 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-10-02 07:15:37 +00:00
bf4d3b763c - __get_default_file() called __fd_unlock() without having called
__fd_lock() first. Ouch.

- Removed an unnecessary pair of __fd_lock()..__fd_unlock() calls from
  ttyname_r().


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15156 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-27 11:54:54 +00:00
9984a37cb4 - Unlink is now reentrant, or at least thread-safe.
- You can now make unlink() stop after a failed deletion attempt which
  failed because the object to be deleted was reported as being "in use".
  The libunix.a variant defaults to report the deletion to have succeeded
  under these circumstances and later tries to delete the files marked
  for deletion. See <dos.h> for a brief documentation of how to change
  the behaviour.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15155 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-27 09:40:06 +00:00
0b833b8680 - Added the base_dir_nametest test program.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15154 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-25 18:20:09 +00:00
b8ba11b158 - basename() and dirname() can no longer return NULL. They truncate the
resulting path name instead. This is done so because some code that
  calls basename() or dirname() does not check if the function's return
  value is NULL.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15153 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-25 18:19:44 +00:00
872b2b335b - Forgot to update chown() to use the same bug fix as fchown().
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15152 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-25 15:41:50 +00:00
b1f56b1bbe - The SetOwner() fall-back code for Kickstart 2.04 was passing the wrong
parameters to the file system. The first (dp_Arg1) should have been
  zero. Ouch.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15151 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-25 15:38:21 +00:00
9ce2ba234f - Got rid of some more compiler warnings by introducing function prototypes
which were missing and by casting pointers to the expected types.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15150 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-25 15:12:47 +00:00
d5bfee3917 - Corrected a couple more compiler warnings caused by mutable/constant
string pointer assignments.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15149 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-25 14:51:15 +00:00
9f37f76b01 - Replaced "char *" pointers with "const char *" pointers.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15148 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-25 14:12:15 +00:00
2f3de1dcd6 - ttyname() now calls ttyname_r(). Also, the libunix.a version of ttyname_r()
will produce "/CONSOLE" rather than "CONSOLE:".


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15147 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-25 14:05:31 +00:00
74b2838663 - asctime_r() now returns NULL if the buffer is too short to hold even a single
byte of data.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15146 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-25 13:43:06 +00:00
2c450a1e48 - basename() is not supposed to modify the string it is passed and should
return a pointer to a string which can be modified. Now it does. Same
  thing for dirname().


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15145 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-25 13:29:47 +00:00
828e36f2d7 - Fixed another compiler warning.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15143 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-22 09:19:07 +00:00
502d1aaab7 - Removed some more compiler warnings.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15142 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-22 09:02:51 +00:00
d6e18a9266 - If defined, the local environment variable "DISABLE_COMMANDLINE_WILDCARD_EXPANSION"
will disable expansion of wildcard patterns passed on the command line.
  Note that if the variable is not set then the global variable
  '__expand_wildcard_args' will provide the defaults for the switch that
  controls whether the wildcard expansion takes place. And after the
  environment variable has been checked, the '__expand_wildcard_args_check'
  function pointer can still be used to override the switch.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15141 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-22 07:54:25 +00:00
3fe72eaa44 - Removed a couple more compiler warnings.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15140 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-21 09:24:20 +00:00
3541b011a6 - Preparations for release...
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15139 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-21 08:48:19 +00:00
7b903355a7 - fstat() now works with "NIL:" and "/dev/null", respectively. Not that
it returns much useful information, though.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15138 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-20 19:46:57 +00:00
36c33073a5 - Added the fstat() test program.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15137 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-20 19:46:37 +00:00
fba16b67fd - The _PC_MAX_INPUT query for file handles now returns the default
buffer size.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15136 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-17 17:53:15 +00:00
5c29f84a0d - Integrated the new OS4 build makefile collection, as contributed by
Steven Solie. Thank you very much!


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15135 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-17 17:37:27 +00:00
aa3240972a *** empty log message ***
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15134 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-17 17:36:42 +00:00
8aeb5072ab - fpathconf() should work with the stdio streams, even in the thread-safe
library version, again.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15133 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-17 16:36:48 +00:00
42dba39aef - Added a new callback function which can be used in programs which want
to avoid that the command line wildcard expansion takes place.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15132 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-15 06:58:17 +00:00
927407de1b - updated m68k specs file in /documentation to contain an own __CLIB2__
define so that existing m68k compilers also have this define. In addition,
  the common "-noixemul" option can now also be specified but will do a NOP
  so that Makefiles sharing multiple runtime lib setups work without
  a warning.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15131 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-15 06:50:47 +00:00
f3dcdfe1ce - __get_default_file() now dynamically fills in file handles for the
stdin/stdout/stderr streams if it's part of the thread-safe library.

- fpathconf() now checks if the file descriptor is really referring to a file.

- The termios hook entry code could file descriptor's embedded file handle
  rather than what the thread safe library had dynamically bound to the
  stdin/stdout/stderr streams.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15130 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-09-12 14:16:44 +00:00
ead90dee0d - execve() now finds commands in the current directory again, even if you
omit the leading "./" path name.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15129 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-14 14:08:06 +00:00
1721b10610 - Dropped an unused local variable.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15128 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-13 15:56:38 +00:00
05ef0d30bc - It is unwise to strip the volume name portion from the path name
used in the GetDeviceProc() loop.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15127 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-13 15:35:40 +00:00
3a7ac52248 - The execve() code that looks for the command/script file now begins by
checking if the file name includes path separators. If it does not,
  then the search for the command begins with the resident command list;
  otherwise the local directories are checked. The new code also properly
  cleans after itself (a FreeDeviceProc() was missing) and the "PROGDIR:"
  lock now always refers to the directory in which the command/script
  file is found.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15126 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-13 15:15:11 +00:00
2c81be592c - Cleaned up and updated the .cvsignore file.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15125 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-07 08:41:53 +00:00
e158a3fe18 - Changed the execvp() test program to reflect how the corrected
execvp() function works.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15124 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-07 08:39:56 +00:00
40d64e1413 - Added the missing fdim() and fdimf() functions to the build
makefiles. The OS4 build makefile was missing lrint() and
  lrintf(). Ouch.

- execve() now checks if an abort signal arrives while it's trying
  to read the first line of a script, or looking for an executable
  on an assignment path.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15123 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-06 08:31:06 +00:00
62d0c2dc81 - execve() no longer directly calls exit(), but a function which can be
replaced by the user. If that function __execve_exit() does not call
  exit but just returns to the caller without doing anything, execve()
  will return the caller with the return code of the RunCommand()
  function.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15122 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-06 08:15:42 +00:00
940b8295c0 - Small corrections...
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15121 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-02 14:44:01 +00:00
a91cb96b1b - That's setlocale and not setlocate.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15120 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-02 14:14:57 +00:00
864a0e703e - Hid setlocale and execvp_test
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15119 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-02 14:14:30 +00:00
5828c6cdab - execve() now actually works!
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15118 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-02 11:07:57 +00:00
cdfe0dad6f - Added the "execvp_test" program.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15117 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-02 09:22:38 +00:00
85122893ff - Added the POSIX exec() family functions, based upon code contributed
by Henning Nielsen Lund. Thank you very much!

- atoll() no longer sets 'errno' directly but now calls __set_errno()
  instead.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15116 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-02 08:00:30 +00:00
9caa5b7ec4 - Fixed to compile correctly.
- Changed how multi-volume assignments are handled by execve().


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15115 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-02 06:49:47 +00:00
6cf4cc5b4a - The types of the __default_path_delimiter and __default_path variables
were wrong.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15114 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-01 19:06:48 +00:00
42acda07f3 - Rewrote execve() from scratch and documented it.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15113 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-01 19:01:17 +00:00
8633c3a77b - The default configuration options for execvp() are now configurable at
link time.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15112 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-01 17:01:14 +00:00
5f42fb06f9 - Added the exec() family functions to the makefiles and the <unistd.h>
header file.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15111 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-01 16:41:02 +00:00
4e1c4967e6 - Added preliminary versions of the exec() family functions.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15110 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-08-01 14:27:52 +00:00
2d48db0ce0 - Added the missing string pointer.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15109 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-07-31 13:32:35 +00:00
e2cadc9ea5 - Added pathconf() and fpathconf() as contributed by Peter Bengtsson. Thank you very much!
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15108 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-07-28 14:37:28 +00:00
bde4d37a64 - Added sysinfo() as contributed by Peter Bengtsson. Thank you very much!
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15107 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-07-28 14:02:32 +00:00
c3d55e94ec - Added ftime(), ulimit(), getrlimit() and setrlimit() as contributed by
Peter Bengtsson. Thank you very much!


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15106 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-07-28 13:36:17 +00:00
a1dc5e8e6e - Added ftime(), as contributed by Peter Bengtsson. Thank you very much!
- Added the missing S_ISSOCKET() macro to <sys/stat.h>. Note that this
  is not actually a POSIX feature.

- Added fmin(), fminf(), fmax() and fmaxf() to the build makefiles.
  Somehow I must have forgotten about them :-(


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15105 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-07-28 13:19:12 +00:00
75a85db1a7 - Added the constructor begin/end files to the OS4 build makefile for
the skeleton library.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15104 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-06-22 09:30:25 +00:00
d4528b2862 - select() and waitselect() can now be called without any file descriptor
sets to work with, as some software does which uses select() in place
  of sleep().


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15103 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-06-22 09:02:44 +00:00
b043a1ac1f - The <sys/ioctl.h> header file now includes both <sys/select.h> and
<sys/filio.h> for better compatibility with the TCP/IP stack header
  files.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15102 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-06-21 15:53:55 +00:00
83543472f1 - Added a couple more program names to the list.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15101 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-06-01 09:12:12 +00:00
601caa5708 - Added the global variable __expand_wildcard_args which can be used
to disable wildcard pattern expansion of command line parameters when
  linked against "libunix.a". Note that this has no effect on the "regular"
  libc.a behaviour.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15100 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-05-04 08:01:47 +00:00
2cf92a6395 - Added the rand() test program.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15099 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-18 08:29:46 +00:00
c26ee0ba7f - Preparations for new release.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15097 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-17 08:41:52 +00:00
41eef5e1aa - Replaced an inappropriate "ULONG" with "unsigned long".
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15096 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-10 15:08:11 +00:00
bbea0a86bd - Changed wait_select() to waitselect().
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15095 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-07 15:45:49 +00:00
91b4f288f9 - The default break signal mask (SIGBREAKF_CTRL_C) is no longer
hard-coded. You can override it at link time with a different
  variable value for __break_signal_mask. This may have to be
  augmented by an API for changing the value.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15094 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-05 08:39:46 +00:00
55ab845de0 - Disabled the thread-safe build.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15093 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-05 08:24:32 +00:00
184a2ada87 - Corrected the lock variable name.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15092 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-05 08:19:11 +00:00
2e227506e5 - Added a wait_select() function which works very much like the
bsdsocket.library/WaitSelect() function.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15091 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-05 07:53:30 +00:00
2e4de301cc - Added <sys/time.h> include to <sys/socket.h> due to latest "TimeVal" change
in the OS4 SDK. Otherwise "struct timeval" will not be defined at the time
  the <net/if.h> of the netincludes will be included by <proto/bsdsocket.h>.

- The strftime() hook function had the locale and character parameters
  switched, which made 'setlocale(LC_ALL,""); strftime(..);' unusable.
  Fixed.

- fchown() and chown() now accept owner and group ID values of -1, which
  indicate that the respective information should not be changed.

- The OS4 library build now includes the crtbegin.o and crtend.o object
  files in the libc.a library, which solves a problem with the thread-safe
  shared library support code.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15090 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-05 06:43:56 +00:00
9c436ceaaa - Added the "setlocale.c" test program.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15089 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-05 06:35:42 +00:00
bfedbbabd7 - added <sys/time.h> include to sys/socket.h due to latest "TimeVal" change
in the OS4 SDK. Otherwise "struct timeval" will not be defined at the time
  the <net/if.h> of the netincludes will be included by <proto/bsdsocket.h>.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15088 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-04 21:59:13 +00:00
0266e8c0ad - Preparations for release...
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15086 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-03-06 11:10:59 +00:00
524b70034c - In <stdio.h> MAXPATHLEN is now equivalent to PATH_MAX (from <limits.h>),
as suggested by Henning Nielsen Lund.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15085 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-03-06 08:43:48 +00:00
48654e7cb4 - CVS now ignores the "factorial" test program.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15084 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-03-06 08:41:19 +00:00
e40fc3dea2 - Modified the GetProcSegList() call to match what the current SDK
expects.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15083 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-02-27 11:18:52 +00:00
230dcf2e26 - Moved an allocation size roundup operation in realloc().
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15082 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-02-17 10:55:03 +00:00
98d26f36ac - Added lockf() support, as supplied by Henning Nielsen Lund.
Thank you very much!

- symlink() now also works for absolute and relative links, and is
  part of "libunix.a". This patch was supplied by Henning Nielsen Lund.
  Thank you very much!


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15081 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-01-29 09:17:00 +00:00
9be142d251 - More corrections and clarifications.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15080 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-01-18 10:23:17 +00:00
b2bc0096dc - Updated the copyright text.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15079 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-01-08 12:06:14 +00:00
e833477448 - The printf() family stripped trailing zeroes from the integer part
of %g output. Fixed.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15078 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-01-02 13:23:33 +00:00
23c2091ab4 - Added "factorial" test program for "%g" testing.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15077 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-01-02 13:11:39 +00:00
ca30ee62a2 - The __main() stub function expected by the 68k GCC build is no
longer part of "stdlib_main.c". This helps the C++ support, since the
  __main symbol definition no longer clashes with the definition in
  "libgcc.a".


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15076 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-12-31 12:23:54 +00:00
9ab31bb996 - Preparations for release.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15075 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-12-11 08:55:29 +00:00
26b8b9efbf - Forgot to check in a file.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15074 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-28 10:11:07 +00:00
67ff2ca833 - Added another function called __reset_max_mem_stats() which will reset the
counters for "maximum amount of memory used" and "maximum number of chunks
  allocated" to the current figures for these values.

- Fixed the alloca() declaration in <stdlib.h> so that software which keys
  off the fact whether or not the alloca preprocessor symbol is defined
  will do the right thing.

- Added an optional call-back function which can be called if alloca()
  is about to return NULL, which some software does not consider.
  Rather than letting such software drop into an illegal memory access
  or worse, that call-back function will be invoked instead, which can
  print an error message and eventually call abort().


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15073 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-28 09:53:51 +00:00
797fcb89a1 - Fixed the header files I broke by mistake.
- You can now request that your program uses the clib2 alloca() function
  rather than the built-in compiler alloca().

- alloca() is now part of libunix.a, too.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15072 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-27 10:28:16 +00:00
0809248009 - Added notes on where to find documentation and updates to each header file.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15071 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-27 09:51:45 +00:00
1153e58366 - In libunix.a malloc(), calloc() and realloc() no longer treat a
request to allocate 0 bytes as an error, returning NULL. They all
  return a pointer sized memory chunk (= four bytes) initialized to
  NULL (= 0) instead.

- The alloca() implementation which allocates memory from the system
  rather than the local stack frame is thread-safe now. It also
  interacts with the realloc(), calloc(), free() and malloc() functions
  in that the alloca() cleanup routine is called once alloca() has
  done its job. If all the memory allocated through alloca() has been
  released no further calls to the cleanup function will be made.

- In the thread-safe library, realloc() permitted two different overlapping
  calls to succeed in trying to reallocate the same chunk of memory due to
  a race condition. Fixed.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15070 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-27 09:26:55 +00:00
06e5f437d9 - Moved the thread-safe library documentation.
- The malloc() in libunix.a now allocates four bytes of memory instead
  of just one for a request to allocate 0 bytes.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15069 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-27 09:25:21 +00:00
fa8fc6959f - Corrected the section numbering.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15068 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-20 20:04:47 +00:00
954e614cb2 - Fixed the remaining HTML errors.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15067 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-20 19:56:58 +00:00
a5a5e36119 - Changed the assertion message text shown in the requester window.
- The standard malloc() now sets errno to EINVAL for zero length
  allocations.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15066 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-20 19:04:10 +00:00
e4f9d1b7f6 - Updated the general documentation and started to document the implementation-specific
behaviour of the library functions.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15065 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-20 19:02:44 +00:00
0459ea1fc9 - In libunix.a malloc(), calloc() and realloc() no longer treat a
request to allocate 0 bytes as an error, returning NULL. They all
  return a 1 byte memory chunk initialized to 0 instead.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15064 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-20 17:00:22 +00:00
fe29857567 - Replaced the sqrt() call.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15063 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-19 17:17:47 +00:00
5578c6a39e - Added <fenv.h> for C99, and the (yet unimplemented) functions
feclearexcept(), fegetenv(), fegetexceptflag(), fegetround(),
  feholdexcept(), feraiseexcept(), fesetenv(), fesetexceptflag(),
  fetestexcept(), fetestround() and feupdateenv().

- Replaced the old pow() implementation. However, powf() may need to
  be changed to set a domain error.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15062 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-19 17:11:22 +00:00
2b50d1586c - Added more boundary checks to the FD_#?() macros which now also catch
the case of negative socket IDs.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15061 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-06 14:37:49 +00:00
0f5e6747e0 - Fixed the Amiga archive build script to delete the remains of the
CVS directory structure.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15059 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-04 10:10:57 +00:00
a0a46206d1 - Updated the Unix archive build script to clean up the
CVS subdirectories in the "include" directory.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15058 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-04 09:39:40 +00:00
c7fbdf27e1 - Added Steven Solie's new OS4 build makefile.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15057 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-04 09:35:02 +00:00
010d4c1c06 - Preparations for clib2 1.197 release.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15056 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-11-04 09:21:44 +00:00
81958fd44b - Tried to reduce the number of compiler warnings generated.
- The cross compiler GNUmakefile.os4 variant now also logs all warnings
  and errors to a compiler.log file.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15055 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-27 08:58:41 +00:00
937169c0ba - Updated the OS4 build makefile to allow for a parallel build to work
better. Note that this is not yet entirely succesful.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15054 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-27 08:26:17 +00:00
dda36eb609 - IsServerProcess() should have read ProcessIsServer().
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15053 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-23 11:58:12 +00:00
867e6d500a - Updated the new __obtain_daemon_message() function to call a
bsdsocket.library API function to determine if what appears to be
  a valid daemon startup message is sound.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15052 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-23 09:53:39 +00:00
99e9ebfc15 - Moved the code which rebinds the standard I/O streams to the server
socket into a separate function which can be overridden by user code.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15051 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-20 07:19:16 +00:00
63c08cfe0e - The network startup code no longer checks for the presence of a possible
daemon startup message by default. You now have to enable this feature
  by declaring a global variable called "__check_daemon_startup" which is
  described in <dos.h>.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15050 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-20 06:50:32 +00:00
b6de3e4c48 - In <stdbool.h> the preprocessor definition should read
"__bool_true_false_are_defined" rather than "__bool_true_and_false_are_defined".
  Thanks go to Peter Bengtsson for finding and fixing it.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15049 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-19 08:11:44 +00:00
090753282b - Added __set_h_errno() and __get_h_errno() functions.
- The thread-safe library now tries to enable bsdsocket.library base
  sharing and attempts to make the TCP/IP stack call the local
  __set_errno() and __set_h_errno(), so that any Process calling
  the library functions will get a chance to see proper error
  codes. Whether any of these features could be enabled can be tested
  through two global variables __can_share_socket_library_base and
  __thread_safe_errno_h_errno which are defined in <dos.h>. Note that
  for both features to work you will need the Roadshow bsdsocket.library
  version 4.275 or higher.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15048 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-17 13:54:25 +00:00
d45da0acd4 - Corrected a variable name.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15047 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-16 09:17:11 +00:00
3480ec40b3 - Updated the build files so that atanh() and atanhf() are built for the
respective math libraries.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15046 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-16 09:14:28 +00:00
f9e782d358 - Implemented atanh() and atanhf() which were not listed in the TODO
file but were still unimplemented up until now.

- Replaced ldexp() and modf().


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15045 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-16 09:05:03 +00:00
44bcf889e5 - Corrected a typo.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15044 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-16 08:34:52 +00:00
257dd6af88 - Updated math_hypot.c to a newer (e_hypot.c 1.3 95/01/18) version from
fdlibm which uses macros for manipulating the high and low words of a
  double, like the rest of fdlibm functions in clib2. The previous version
  would give bogus results when compiled with -O3 in clib2 which lead to
  "interesting" results (and lots of fun while searching for the problem)
  in Ghostscript. Wish I managed to track this down yesterday for 1.196
  release... <aantonijevic>


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15043 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-11 19:05:18 +00:00
acafd14bc2 - Removed <sys/clib2_net.h> and every reference to it.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15042 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-11 11:24:53 +00:00
b63587ed80 - Removed the compiler log file generation.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15041 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-11 09:37:27 +00:00
b861ed19c4 - Removed a couple of compiler warnings; fishing for more...
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15040 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-11 09:28:29 +00:00
ccfea73fc5 - Updated the thread-safe library documentation section.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15039 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-11 08:28:32 +00:00
d74640b15b - Getting ready to make a new release.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15038 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-11 07:37:58 +00:00
db9a1c69e5 - Resolved the vulnerability by caching the socket descriptor while the
stdio data is still locked.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15037 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-09 14:48:19 +00:00
cb1f1a4a10 - Removed the various workarounds associated with <unistd.h>, required
for building code that references the networking API. It is now possible,
  provided you build your code with an existing TCP/IP API header file
  set (such as from the "Roadshow" SDK) without running into data type
  or function prototype declaration conflicts. I have added local versions
  of <arpa/inet.h>, <netinet/in.h>, <netdb.h>, <sys/filio.h>, <sys/ioccom.h>,
  <sys/ioctl.h>, <sys/select.h> and <sys/socket.h> and updated <unistd.h>,
  <pwd.h> and <grp.h> accordingly. Note that some of the function prototypes
  will conflict with the bsdsocket.library/usergroup.library API, which is
  why you can disable the declarations through the __NO_NET_API preprocessor
  symbol: if defined, none of the function prototypes will be defined.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15036 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-09 12:32:18 +00:00
bb2376a6ed - Implemented lrintf(), lrint(), lroundf(), lround(), nearbyintf(),
nearbyint(), remquof(), remquo(), roundf(), round(), tgammaf(),
  tgamma(), truncf(), trunc(). Sort of implemented fmaf() and fma(),
  which really ought to be done in "SIMD" fashion.

  This completes the "real" floating point math library (ignoring
  for a moment that the floating point environment code is still
  not implemented).


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15035 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-09 10:38:56 +00:00
159e55f1e6 - Fixed the locking and the NULL pointer reference.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15034 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-09 09:05:27 +00:00
4e30f5604d - accept() now calls the bsdsocket.library accept() function first
and then hooks up the socket with the clib2 data structures. This
  makes it possible to have several Processes calling the accept()
  stub at the same time.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15033 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-10-08 15:59:56 +00:00
095a14bf1f - When the main() function returns directly or indirectly by way of
calling exit(), the IoErr() value set at this time will now be
  preserved until the program really returns control to the shell.
  This turned out to be easier to implement than I had originally
  thought, thanks to the fact that the atexit() functions are all
  invoked straight after the exit() call.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15032 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-09-28 10:28:38 +00:00
f84fbc32cb - The ERANGE initialization is not necessary.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15031 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-09-28 09:51:16 +00:00
3099f6210a - strtoimax(), strtoumax(), strtod(), strtof(), strtol(), strtoll(),
strtoul() and strtoull() now count how many digits were converted.
  If that number is zero, then the conversion is considered to have
  failed: 0 is returned, errno is set to ERANGE and the 'ptr' parameter
  reference is initialized with a pointer to the string to be converted.
  This has two consequences:

     1) A floating point number that has no digits in the significand
        is no longer converted to zero. For example ".e10" can no longer
        result in a successful conversion.

     2) You can detect if a conversion is successful by comparing pointers
        after the conversion function has returned:

           char * str;
           char * ptr;
           long n;

           n = strtol(str,&ptr,10);
           if(n == 0 && str == ptr)
              printf("conversion has failed");


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15030 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-09-28 09:28:39 +00:00
378e50d2ab - tmpnam() wrote more than L_tmpnam bytes to the name buffer. Also, the
TMP_MAX value was off by one.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15029 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-09-04 11:28:00 +00:00
0d85b41a2d - Following detection of a stack overflow, the startup code eventually
called _exit(). It should have called exit() instead.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15028 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-09-04 07:38:51 +00:00
7a57c4d499 - Fixed a typo in the new tag item list.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15026 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-09-03 14:45:14 +00:00
cef75752d9 - Getting ready for release...
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15025 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-09-03 14:09:56 +00:00
d31a351d6c - DoTimer() did not allocate the local MsgPort correctly. Fixed.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15024 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-08-31 07:26:13 +00:00
2e56caa3fb - The 68020/030/040/060 versions of the library now include the
64 bit integer conversion code. The plain 68000 version does not.

- The 64 bit integer conversion code used in by the scanf() family
  was broken due to a misplaced overflow check, which had the cruel
  effect of triggering for 32 bit integers as well. Fixed.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15023 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-08-27 12:57:26 +00:00
4cde124d5d - Added the sscanf_64 test program.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15022 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-08-27 12:52:26 +00:00
1d1d340ae1 - The 68020/030/040/060 library version now supports 64 bit integers
in the printf(), scanf(), atoll(), strtoll() and strtoull() functions.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15021 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-08-27 12:12:50 +00:00
6612118e97 - log(+/-0), logb(+/-0), log10(+/-0) now return -infinity.
- getcwd() now considers a buffer size of 0 an error, and it sets
  the errno code to ERANGE if the buffer is too small.

- With Unix path semantics enabled, rename() now fails if either
  the old or the new name are empty strings. Same thing for
  opendir(), utime(), unlink(), chown(), link(), readlink(),
  realpath(), chdir(), access(), stat(), rmdir(), lstat(),
  chmod(), statfs() and open()/fopen().

- Fixed several issues with the formatted output of strftime()
  for the "C" locale: "%p" could return " PM", "%c" is now
  equivalent to "%a %b %e %T %Y", "%x" is equivalent to "%m/%d/%y"
  and "%X" is now equivalent to "%T".


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15020 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-08-26 12:39:33 +00:00
5acfef419b - Added the "date_test" program.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15019 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-08-26 12:21:51 +00:00
eb10d40332 - The startup code now references the linker symbol generated for
the user-supplied main() function.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15018 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-08-20 14:25:20 +00:00
6aaa439593 - Fixed to built properly.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15017 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-08-15 11:31:39 +00:00
b76ec2c143 - We now check if the file refers to a pipe before we make assumptions.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15016 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-08-15 10:43:54 +00:00
773035a695 - Modified select() to support plain files, too. The new code now
compares the current file position against the current file size,
  if that file is on a file system, or simply checks if there is
  any data in the file (which works for the default PIPE: device).

- The raw file descriptor structure member fd_Position is now
  always updated, regardless of whether the file supports random
  access or not.

- The wildcard escape character used in __wildcard_expand_init() was
  wrong. It should have been "'" but it was "`". Fixed.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15015 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-08-15 10:17:48 +00:00
79be2279ec - In __time_delay() the CheckIO() test was wrong and should have
tested for a request still in progress. Fixed.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15014 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-08-02 10:18:50 +00:00
b1f08e4123 - Getting ready for a new release...
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15013 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-15 14:45:01 +00:00
872c9bc39c - <sys/types.h> now also includes <time.h> and <stddef.h>.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15012 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-15 14:31:37 +00:00
132aaa8293 - The socket/usergroup API function and data type definitions that used to
be defined in <unistd.h> have been moved into a separate header file
  <sys/clib2_net.h> which, for backwards compatibility, can be include
  from within <unistd.h> if the preprocessor symbol __USE_CLIB2_NETLIB
  is defined early on. Eventually, <sys/clib2_net.h> should be removed
  from the general header files and become a local library build header
  file altogether. Note that in this case you would have to build your
  own software using common TCP/IP SDK header files.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15011 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-12 13:35:58 +00:00
882875d79a - The thread-safe version of isatty() should now work for stdio
file descriptors, too.

- Retrofitted thread-safety into the termios code.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15010 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-06 18:48:53 +00:00
cd7b02f4d7 - Added some documentation on the skeleton library code.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15009 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-04 13:24:35 +00:00
2ed463f8e3 - Added a complete shared library skeleton example to demonstrate how the
clib2 shared library initialization/cleanup functions should be used.
  This is a dual-build library which will both work with the plain 68k
  AmigaOS and the PowerPC native AmigaOS4. The example source code can be
  found in the "skeleton_library" subdirectory.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15008 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-04 11:25:34 +00:00
acaf12ee7c - Fixed an important error in the documentation...
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15007 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-04 11:22:23 +00:00
fdb188da1a - Added the clib2 shared library initialization/cleanup code.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15006 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-04 11:21:14 +00:00
9d2ab96b56 - Modified to build with the thread-safe library on OS4.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15005 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-04 11:14:27 +00:00
6ba2f7a178 - Updated to use the proper OS4 build environment.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15004 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-04 11:06:23 +00:00
525bdde6d5 - Updated for dual PowerPC/68k build.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15002 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-04 10:25:33 +00:00
38818e6502 - Added shared library skeleton code (68k-only for now).
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15000 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-04 09:39:00 +00:00
ebf5d63bc6 - Moved all the constructor code out of "stdlib_init_exit.c" and into the
files which initialize global data, such as the new "stdlib_program_name.c"
  and "stdlib_malloc.c".

- Until I can find a way to invoke it from within the library, the
  __machine_test() function is no longer invoked.

- Tagged global data with NOCOMMON attributes.

- Added the __lib_init() and __lib_exit() functions, which are part of the
  thread-safe library and which can be used to hook up clib2 with standard
  Amiga shared library/device code. Some documentation on how to use them
  can be found in the <dos.h> header file.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14999 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-07-03 10:36:48 +00:00
2421ffcbb9 Removed unneeded baserel stuff
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14998 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-26 12:02:56 +00:00
2bdd055f4b Fixed a bug in getopt_long
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14997 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-26 12:01:50 +00:00
039c805161 *** empty log message ***
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14996 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-26 12:01:00 +00:00
e19974fe47 Added file system names
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14995 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-26 11:59:37 +00:00
bb41d5e549 *** empty log message ***
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14994 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-26 11:58:26 +00:00
fd163c7105 output_buffer wasn't set correctly when the buffer was allocated
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14993 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-26 11:57:26 +00:00
a3d61a67c8 - Corrected a typo in the object build list (math_exp2f.c rather than
math_expf2.c).


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14992 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-26 11:46:21 +00:00
459d57da9c - Dropped stdlib_wildcard_expand.c, which is no longer necessary.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14991 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-26 11:34:44 +00:00
3d58795d0f - Repaired the pattern matching code which expands command line arguments:
it no longer requires that any parameters are quoted and it is automatically
  enabled if you link against libunix.a, without libc.a standing a chance to
  accidentally override it.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14990 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-26 10:23:05 +00:00
e293873dc7 - The pattern matching code which expands command line arguments, as part
of libunix.a, now translates the "*" wildcard into "#?" unless you prefix
  it with a backtick ("`"), which is the wildcard pattern escape character
  used on AmigaOS.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14989 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-26 09:57:52 +00:00
17e3b3b0e2 - Implemented exp2()/exp2f() and log2()/log2f() as suggested by
Henning Nielsen Lund. Thank you very much!


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14988 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-26 09:06:12 +00:00
ae1ac21c71 *** empty log message ***
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14987 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-21 15:03:14 +00:00
2025e39014 lstat would overwrite the passed-in name in lstat_lock with ReadLink
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14986 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-21 15:01:08 +00:00
ea09fc96db - libunix.a now also holds stdlib_main.o, which should fix the issue with
the wildcard pattern expansion functions not getting included.

- Replacing "int" with "socklen_t" in the header files caused compilation
  errors with the source code which wasn't using the new typedef yet. Fixed.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14985 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-20 07:43:59 +00:00
bf0a6e0c43 - statfs() never stated that a disk was mounted for read-only access
because the wrong InfoData structure member was tested. Fixed.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14984 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-19 13:06:25 +00:00
cf74717ead - Added ftello() and fseeko() which both merely call the equivalent (at
least for clib2) ftell() and fseek() functions, respectively.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14983 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-18 07:23:17 +00:00
f81dfdfca7 Added section about profiling
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14982 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-15 15:23:29 +00:00
196ce6e140 *** empty log message ***
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14981 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-15 15:00:57 +00:00
629e40475f Added profil prototype
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14980 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-15 15:00:28 +00:00
85e421feb8 Removed compiler warnings
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14979 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-15 14:59:51 +00:00
3be260b746 Added profiling support to makefile (PowerPC specific)
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14978 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-15 14:59:15 +00:00
b78a86774c Added getopt_long
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14977 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-14 15:56:57 +00:00
9aba55afba Added getopt_long
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14976 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-14 15:26:29 +00:00
426fe0cc61 New file
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14975 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-14 15:22:56 +00:00
6a13b08f40 - Header files don't belong into the list of object files...
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14973 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-04 14:16:58 +00:00
59807dbff1 - Added an error/EOF check in the input drain loop.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14972 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-04 13:57:08 +00:00
414e07aa20 - Integrated Peter Bengtsson's termios code. Thank you very much! I chose
to add it to libunix.a rather than keeping it in a separate libtermios.a
  library.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14971 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-04 10:46:23 +00:00
2a22c4ff0d - The scanf() family now supports character ranges for the %[
conversion. Note that this is a non-standard feature!


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14970 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-03 11:12:12 +00:00
576660ca0a - Added more casts for the powf() function parameters.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14969 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-30 18:28:45 +00:00
5451d3a694 - Made ACrypt() compile again.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14968 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-30 14:01:20 +00:00
c26da2c5e8 - Updated the smakefile, so that it includes the new math object files.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14967 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-30 11:42:38 +00:00
c3975b1e6e - Replaced the (float) casts in strtof() with calls to powf().
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14966 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-30 09:50:43 +00:00
a79b05194d - Ported acosh(), acoshf(), asinh(), asinhf(), lgamma(), lgammaf(),
remainder() and remainderf() for C99.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14965 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-30 08:47:41 +00:00
3975d234bd - Ported cosf(), coshf(), sinf(), sinhf(), tanf(), tanhf()
and hypotf() for C99.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14964 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-30 08:10:41 +00:00
3c220c3939 - Implemented fmin()/fminf(), fmax()/fmaxf(), fdim()/fdimf() for C99.
- Ported acosf(), asinf(), atan2f(), atanf(), ceilf(), expf(), floorf(),
  fmodf(), frexpf(), ldexpf(), log10f(), logbf(), logf(), modff(), powf(), sqrtf(),
  scalbn() and scalbnf() for C99.

- Ported cbrt(), cbrtf(), erf(), erff(), erfc(), erfcf(), expm1(),
  expm1f(), ilogb(), ilogbf(), log1p() and log1pf() for C99.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14963 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-29 14:45:33 +00:00
49e98713d4 - Implemented fmin()/fminf(), fmax()/fmaxf(), fdim()/fdimf() (C99).
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14962 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-29 12:41:04 +00:00
505c23237a - Added skeleton code for acosf(), acosh(), acoshf(), asinf(), asinh(),
asinhf(), atan2f(), atanf(), atanh(), atanhf(), cbrt(), cbrtf(),
  ceilf(), cosf(), coshf(), erf(), erfc(), erfcf(), erff(),
  exp2(), exp2f(), expf(), expm1(), expm1f(), fdim(), fdimf(),
  floorf(), fma(), fmaf(), fmax(), fmaxf(), fmin(), fminf(),
  fmodf(), frexpf(), hypotf(), ilogb(), ilogbf(), ldexpf(), lgamma(),
  lgammaf(), log10f(), log1p(), log1pf(), log2(), log2f(), logbf(),
  logf(), lrint(), lrintf(), lround(), lroundf(), modff(), nearbyint(),
  nearbyintf(), powf(), remainder(), remainderf(), remquo(), remquof(), round(),
  roundf(), scalbn(), scalbnf(), sinf(), sinhf(), sqrtf(), tanf(),
  tanhf(), tgamma(), tgammaf(), trunc() and truncf(), to be filled in
  later...


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14961 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-29 11:19:01 +00:00
ffeb475873 - Added a TODO-list which at this time only covers the missing floating
point arithmetic functions.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14960 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-29 10:44:23 +00:00
c3a10b88b5 - Added NAN, INFINITY, FLT_EVAL_METHOD, float_t and double_t to
<math.h>.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14959 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-29 10:09:55 +00:00
2ced1d3293 - Modified the locale-aware isalnum(), isalpha(), iscntrl(),
isdigit(), isgraph(), islower(), isprint(), ispunct(), isspace(),
  isupper(), isxdigit(), tolower() and toupper() functions
  to clamp the input parameter to the "unsigned char" range before
  it is submitted to the respective locale.library function. This
  should be in sync with what the specs demand, which state that
  if the input parameter is neither EOF nor in the range of an
  "unsigned char" variable, then the results are undefined.

- ungetc() now returns the input character, clamped to an unsigned
  char value, upon success. Previously, if the input parameter was
  negative and not EOF, the result was identical to the input, which
  could have had negative side-effects.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14958 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-29 09:56:09 +00:00
fb4dae84aa - Added a couple of (float) casts.
- Fixed isblank() to compile properly.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14957 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-29 08:19:36 +00:00
a03ced93b0 - The record locking code in fcntl() is no longer part of the
regular libc.a, but only of libunix.a.

- Changed the definition of the D_S() macro to cast the pointer
  address to an unsigned 32 bit integer.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14956 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-27 13:19:30 +00:00
a19d60f524 - For %C strtime() should return the century number, not the
year number mod 100.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14955 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-19 13:57:53 +00:00
f6d20fee01 - Moved the IExec initialization in "simple_sprintf.c".
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14954 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-18 07:22:52 +00:00
d4aa0b04af - Forgot to update the .cvsignore file to ignore the simple_sprintf test
program.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14953 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-17 19:16:43 +00:00
df05c80c57 - Added a simple test for sprintf() which does not use any of the
normal library startup code.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14952 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-17 19:15:32 +00:00
a1ffc20864 - Documented __strip_double_slash() and plugged in a memmove()
in place of the copying loop.

- Modified __translate_unix_to_amiga_path_name() and
  __translate_amiga_to_unix_path_name() to not to call strlen()
  on the results of __strip_double_slash().


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14951 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-15 12:32:59 +00:00
13c857ba0a - Added %D, %e, %F, %g, %G and %h for strftime(); repaired %I.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14950 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-14 14:47:46 +00:00
5ecfdf33c6 - Added tests for inf/nan.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14949 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-14 10:57:43 +00:00
fa31c468dc - fpclassify() now returns FP_ZERO both for 0 and -0.
- nan() and nanf() now return quiet NaNs.

- Added internal __inf() and __inff() functions.

- strtof() now calls nanf() and __inff(), respectively, to produce
  the special floating point values for nan/inf/infinity.

- strtod() now calls nan() and __inf(), respectively, to produce
  the special floating point values for nan/inf/infinity.

- The scanf() family now calls nan() and __inf(), respectively, to
  produce the special floating point values for nan/inf/infinity.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14948 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-14 10:52:31 +00:00
feb29fa334 - Enabled the C99 language option.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14947 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-12 15:07:22 +00:00
d0a4e057bc - Added C99 checks to "complex_headers.h".
- No longer uses a local copysign() function in "math_kernel_scalbn.c".

- Fixed an assignment which actually came out as a comparison in "stdio_vfscanf.c".


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14946 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-12 14:50:06 +00:00
c5087c78ce - Getting ready for the 1.192 release.
- Floating point output in hexadecimal notation can now show a sign
  in front of the hex prefix string.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14945 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-12 14:42:32 +00:00
c5c6492868 - fflush() no longer calls flockfile()/funlockfile() with a NULL parameter.
- Removed the old isinf() and isnan() functions.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14944 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-12 14:00:54 +00:00
539cc3553d - Added isunordered(), isgreater(), isgreaterequal(), isless(),
islessequal() and islessgreater() to <math.h> for C99.

- The wchar_t type is now an 'unsigned short' integer (16 bits wide).

- Added PTRDIFF_MIN/PTRDIFF_MAX, WCHAR_MIN/WCHAR_MAX and
  WINT_MIN/WINT_MAX to <stdint.h> for C99.

- Added imaxdiv() and imaxabs() for C99.

- Added strtoimax() and strtoumax() for C99.

- Added nextafter() and nextafterf() for C99.

- Added copysign() and copysignf() for C99.

- Unless I missed something, clib2 should now be functionally complete
  with regard to C99, except for the floating point operations covered.
  These are a major challenge all by themselves, and I wonder both
  whether they are worth the effort and how one could implement them
  correctly.

- fflush() now consistently supports a NULL parameter, causing all
  streams to be flushed for which this behaviour is defined.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14943 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-12 13:21:47 +00:00
bc65dd2877 - Added isblank().
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14942 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-11 20:15:28 +00:00
ec027fa510 - The strftime() %z conversion now prints the time zone difference as a
"decimal" number. That is, if the difference is 5 hours and 30 minutes,
  then %z will now print "530" rather than "330".

- mktime() now handles one leap second gracefully.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14941 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-09 13:47:24 +00:00
65484eac3c - Corrected the thread-safe clearerr() macro.
- Fixed math_headers.h so that fabsf.c compiles correctly with SAS/C.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14940 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-08 17:02:16 +00:00
2be60de3e7 - Added "fstat_stdout_test".
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14939 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-08 16:27:25 +00:00
89b568bcb8 - Small fixes to the scanf() family.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14938 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-08 11:27:26 +00:00
2548af2b4b - Hid two more program files.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14937 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-08 11:20:49 +00:00
a1b39c4d01 - Added test cases for C99 format conversions.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14936 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-08 11:20:03 +00:00
9e32991a6d - For the printf() "%a" conversion the exponent now comes out as a binary
number rather than a decimal one. Now how odd is that?

- strtod() and strtof() now support "inf"/"infinity"/"nan"/"nan(..)" and
  hexadecimal floating point numbers, for C99.

- Added the fpclassify(), isfinite(), isnormal() and signbit() macros for C99.

- Reimplemented isnan() and isinf() as macros for C99. The corresponding
  functions will be dropped from the library. Note that the isinf() macro
  does not return -1, 0 or 1 like the old function did, but only 0 or 1
  depending upon whether the parameter represents +/- infinity or not.

- Added fabsf() for C99.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14935 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-08 08:51:30 +00:00
c8d29ea9c1 - Added HUGE_VALF to <math.h>.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14934 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-07 17:04:07 +00:00
28f561c61b - The printf() family now supports the %hh, %j, %t and %z modifiers and the
%a/%A conversions for C99. The %j is treated like %ll, %t and %z are treated
  like %l.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14933 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-07 16:39:27 +00:00
07056f3e26 - Plugged in the proper ISO 8601 week number calculation function.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14932 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-07 14:03:08 +00:00
3bd6766484 - strftime() now ignores the E and O modifiers.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14931 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-07 13:40:19 +00:00
e01d58319d - Added strtof(), llabs(), lldiv(), vsscanf() and vscanf() for C99.
- strftime() now supports %C, %n, %r, %R, %t, %T, %u, %V, and %z for C99.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14930 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-05-07 13:21:49 +00:00
ec4fd3c2cb - The libunix.a flavour of system() no longer attempts to translate the name
of a command unless it contains path separator characters.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14929 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-28 15:38:47 +00:00
df89c636db - Fixed a typo in the semaphore creation code. Ouch.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14928 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-25 15:39:56 +00:00
90a192134e - If fread()/fwrite() fail to read/write any data because either the number
of records or the size of each record is zero, both now call clearerr() to
  avoid giving the caller the wrong impression that an EOF or error occured.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14927 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-24 19:38:59 +00:00
3660b26c9f - Fixed two linker errors which were caused by duplicate symbol definitions.
- Added code to the startup routine which allows you to monitor where command
  was started from and which parameters it was invoked with.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14926 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-24 15:27:13 +00:00
9f3d5e50b4 - Fixed two linker errors which were caused by duplicate symbol definitions.
- Added code to the startup routine which allows you to monitor where command
  was started from and which parameters it was invoked with.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14925 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-24 14:04:36 +00:00
876039440f - The record locking semaphore could wind up getting added to the public
list twice. Fixed.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14924 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-24 12:19:06 +00:00
0c553faff1 - Changed how errors are detected, as returned by Write(), Read() and
Seek(). Seek() is particularly challenging because the value it
  returns might be a valid file position and not an error.

- Replaced numeric function return codes of 0 and -1 with macros OK,
  SEEK_ERROR/ERROR to clarify the respective purposes.

- Changed how ftell() and fseek() are used, double-checking the return
  value and the errno code.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14923 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-24 09:53:12 +00:00
1d611fefbe - Changed how error conditions raised by dos.library file I/O functions
are detected.

- Modified function return values of 0 and -1 to use macros like OK,
  ERROR/SEEK_ERROR instead, to better convey what the purpose of these
  values is.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14922 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-24 08:46:37 +00:00
a50aba0b64 - Reversed the change in rename() which enforced deletion of the target file.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14921 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-21 10:23:17 +00:00
2e9ac7d003 - The Unix-like rename() now removes the target file even if that
file has been protected from deletion.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14920 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-20 12:06:00 +00:00
0a440c8405 - Added the two release archive build scripts.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14919 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-16 10:35:12 +00:00
f63a0788d5 - Fixed the startup build target directory names.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14918 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-16 10:11:26 +00:00
431dd488a1 - Changed how the startup code is built for the different library flavours,
and which files this involves.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14917 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-13 14:35:06 +00:00
15c16efd07 - Final version bump before release.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14916 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-09 09:30:29 +00:00
6e39efe7d7 - Added a hopefully enlightening comment on the subtleties of semaphore
locking in the stdio_fflush.c file.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14915 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-04 11:56:26 +00:00
92cc3e9a79 - The stdio locking in fcntl() wasn't working correctly. Fixed.
- Made the clearerr(), feof() and ferror() macros thread-safe.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14914 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-04 10:10:02 +00:00
a18f415374 - Small tweaks to fix GCC 68k compiler warnings.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14913 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-03 10:53:24 +00:00
3096691d75 - Added more code and changes contributed by Peter Bengtsson, thank you
very much! This includes the following:

  - Added SSIZE_MAX to <limits.h>.

  - Added <sys/uio.h>, readv() and writev().

  - Cut back the soft link resolution code in lstat().

  - In <fcntl.h> O_NDELAY is now an alias for O_NONBLOCK.

  - Added <complex.h>, carg(), cargf(), cargl(), cimag(), cimagf(),
    cimagl(), conj(), conjf(), conjl(), creal(), crealf() and creall().

  Note that the C99 support for the complex floating point data
  types is limited to GCC 3.x for now.

- Added va_copy() to <stdarg.h>.

- Added _Exit() to <stdlib.h>.

- Added <stdbool.h>.

- Added vfscanf() to <stdio.h>.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14912 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-03 10:22:48 +00:00
d5c36d66e4 - We now call IsInteractive() rather than send a type ACTION_DISK_INFO
to a likely console handler file's MsgPort.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14911 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-02 18:02:54 +00:00
7f9fbc453b - Invoking fstat() on what maps to a con-handler stream now produces
information identifying it as a character special file. Side-effect:
  if the input/output went to a CON:/AUTO window, that window will
  pop open and stay open.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14910 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-02 13:25:55 +00:00
6f010ddf87 - File descriptors produced by dup() or dup2() now work exactly like
the original file descriptors they are duplicates of. I modified the
  function which maps file descriptor numbers to file descriptor
  table entries to return the table entries of the original files.

- In the thread-safe library, duplicated stdin/stdout/stderr
  descriptors now work like the "real" ones. This is true even if
  the "real" ones were closed and only their former aliases remain.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14909 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-04-01 18:46:37 +00:00
09b52e077f - Moved the __UtilityBase/__IUtility variable declarations into
a separate file.

- Simplified the library/open close code in "stdlib_main.c".


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14908 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-30 19:37:47 +00:00
9c2c44b008 - raise() no longer resets the signal handler before it invokes the one
currently configured. It merely blocks the delivery of the respective
  signal to prevent recursion.

- raise() now drops into abort() if a signal handler is set to
  SIG_DFL. The exception is in SIGINT delivery, which has the
  effect of printing a different termination message but otherwise
  program flow takes the same path as abort().


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14907 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-27 10:02:50 +00:00
df01f27551 - Moved the signal block mask and the signal function table out of
signal_data.c and into signal_raise.c where they are actually used.
  This makes it possible to override the default definition of the
  __check_abort_enabled variable in your own programs.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14906 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-26 11:01:13 +00:00
58d26ce8cb - The name of the public record locking semaphore has to be preallocated
for OS4 if the AllocSysObject() function is used to create it.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14905 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-26 10:53:35 +00:00
b1ac45a0b9 - Updated the specs file not to reference the main.o files any more.
- Clarified the caveats of the libm.a use.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14904 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-26 09:15:07 +00:00
aafda37c84 - Ready for release...
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14903 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-25 09:14:38 +00:00
3eb15a612f - Oops, nearly broke fcntl() again for sockets.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14902 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-25 08:59:22 +00:00
590d1b8eec - Small fixes to fcntl() and select() to cover the thread-safe
fd->fd_DefaultFile == ZERO case.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14901 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-25 08:50:59 +00:00
1fbe4bd0a5 - Added a description of the thread-safe stdin/stdout/stderr behaviour.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14900 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-25 08:50:10 +00:00
8edfcc3f86 - Activated the dormant thread-safe standard input/output/error
handling code.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14899 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-24 16:40:16 +00:00
a6daababe7 - The thread-safe system() call now blocks all standard I/O operations
until the function has returned. Which is harsh, but there is no
  elegant solution to the issue of keeping the same dos.library
  file handles from concurrent use which SystemTagList() might just
  end up using.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14898 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-24 15:31:16 +00:00
5695784272 - Moved stdlib_main.o into the regular lib.c, at least for
the 68k build. The PowerPC build may follow later, provided
  I manage to get the specs file fixed.

- Moved the check for the presence of an FPU into the
  math_init.c code.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14897 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-20 17:14:58 +00:00
5eefcf4555 - Fixed the constructor/destructor invocation sequence for the SAS/C and
GCC 68k library builds.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14896 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-20 12:14:09 +00:00
d85d6648ea - Modified the SAS/C constructor/destructor invocation sequence, now that
the names of the functions assigned through the new macros are different.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14895 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-20 11:57:11 +00:00
c471c50784 - Turns out that the constructor/destructor calling sequence
was still wrongish for the OS4 library. So I had to change
  it *again*. Which probably means that the 68k library will
  need further changes...


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14894 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-20 11:18:06 +00:00
cd10dc9a1a - assertion failures early on during program initialization
should no longer spell big trouble on account of the stdio
  data structures possibly not being in a well-defined and
  initialized state.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14893 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-19 11:06:57 +00:00
7d3ea7fae6 - Moved the call chain printing out of stdlib_main.c and into
separate files.

- Removed some more redundant data from stdlib_main.c.

- Added the first real C99 function: _Exit().


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14892 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-19 10:15:56 +00:00
ead29c1850 - Reorganized the local header files, removing redundancies.
- Dropped unused stub code which is now redundant because of
  the constructor/destructor mechanism.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14891 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-18 12:38:25 +00:00
f492e6a6c0 - fcntl() did not work for sockets. Fixed.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14890 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-16 09:28:37 +00:00
dc80018239 - Re-added the long word alignment check for MC68020 I didn't commit
at home.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14889 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-15 11:18:32 +00:00
966851e8bd - ftruncate() ended up changing the current file position, contrary
to what it is supposed to do. Fixed.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14888 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-14 10:03:06 +00:00
a60623bbc6 - Turns out that the 68k GCC port does not sort constructor and
destructor functions in any way at all. I reimplemented the
  entire library constructor/destructor functionality to use the
  same approach as libnix.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14887 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-12 14:10:09 +00:00
d8bf652ae6 - Added a table size check to guard against accesses beyond the last
file descriptor.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14886 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-12 09:49:47 +00:00
b048323196 - Aliases of file descriptors are now using the signal semaphore
of the original file descriptor.

- close() did not return 0 if the file descriptor in question
  was really just an alias. Fixed.

- Added a feature which makes it possible to have several clients
  use the standard I/O streams (stdin/stdout/stderr) and have these
  referring to their process' Input()/Output()/ErrorOutput()
  streams. This is intended to support the upcoming shared
  library feature.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14885 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-12 09:43:48 +00:00
08cc54d3fa - Fixed the SAS/C destructor function prototypes and verified
that the constructors/destructors are called in the proper
  order, too.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14884 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-11 18:27:27 +00:00
419172fb0e - The destructor function invocation code no longer calls
setjmp(). This is now done within stdlib_main.c prior to
  calling the destructor function invocation code.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14883 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-11 16:04:51 +00:00
f289140266 - Switched over the startup code and the library itself to use
constructor/destructor functions for initialization and cleanup
  purposes.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14882 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-11 13:23:18 +00:00
1025 changed files with 46386 additions and 10561 deletions

54
.github/workflows/ci.yml vendored Normal file
View File

@ -0,0 +1,54 @@
name: CI
on:
push:
pull_request:
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-20.04
timeout-minutes: 480
strategy:
fail-fast: false
matrix:
platform: [os4, os3]
steps:
- uses: actions/checkout@v2
- name: setup dependencies
run: |
sudo dpkg --add-architecture i386
sudo apt-get update -y -qq || true
sudo apt-get -qq install libc6:i386
sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
- name: setup env
run : |
echo "GITHUB_SHA7=$(echo ${GITHUB_SHA::7})" >>$GITHUB_ENV
- name: install adtools build env
run: |
DOWNLOAD_PATH=https://github.com/adtools/adtools/releases/download/20170213
curl -L ${DOWNLOAD_PATH}/adtools-utils.tar.bz2 | sudo tar xj -C /
if [[ ${{ matrix.platform }} =~ os3 ]]; then curl -L ${DOWNLOAD_PATH}/adtools-m68k-amigaos.tar.bz2 | sudo tar xj -C / ; fi
if [[ ${{ matrix.platform }} =~ os4 ]]; then curl -L ${DOWNLOAD_PATH}/adtools-ppc-amigaos.tar.bz2 | sudo tar xj -C / ; fi
if [[ ${{ matrix.platform }} =~ mos ]]; then curl -L ${DOWNLOAD_PATH}/adtools-ppc-morphos.tar.bz2 | sudo tar xj -C / ; fi
if [[ ${{ matrix.platform }} =~ aros-ppc ]]; then curl -L ${DOWNLOAD_PATH}/adtools-ppc-aros.tar.bz2 | sudo tar xj -C / ; fi
if [[ ${{ matrix.platform }} =~ aros-i386 ]]; then curl -L ${DOWNLOAD_PATH}/adtools-i386-aros.tar.bz2 | sudo tar xj -C / ; fi
if [[ ${{ matrix.platform }} =~ aros-x86_64 ]]; then curl -L ${DOWNLOAD_PATH}/adtools-x86_64-aros.tar.bz2 | sudo tar xj -C / ; fi
- name: cleanup old action artifacts
run: .github/workflows/purge_artifacts.sh ${{ secrets.GITHUB_TOKEN }}
#- name: remote debug tmate session
# uses: mxschmitt/action-tmate@v1
# if: matrix.platform == 'os4'
- name: build [${{ matrix.platform }}]
timeout-minutes: 480
run: |
export PATH=/usr/local/amiga/bin:/opt/m68k-amigaos/bin:/opt/ppc-amigaos/bin:/opt/ppc-morphos/bin:${PATH}
if [[ ${{ matrix.platform }} =~ os4 ]]; then make -C library -j1 -f GNUmakefile.os4 OS=os4 ; fi
if [[ ${{ matrix.platform }} =~ os3 ]]; then make -C library -j1 -f GNUmakefile.68k OS=os3 ; fi

55
.github/workflows/purge_artifacts.sh vendored Executable file
View File

@ -0,0 +1,55 @@
#!/usr/bin/env bash
# Customize those three lines with your repository and credentials:
REPO=https://api.github.com/repos/${GITHUB_REPOSITORY}
GITHUB_USER=${GITHUB_REPOSITORY%%/*}
GITHUB_TOKEN=${1}
# Number of most recent versions to keep for each artifact:
KEEP=4
# A shortcut to call GitHub API.
ghapi() { curl --silent --location --user $GITHUB_USER:$GITHUB_TOKEN "$@"; }
# A temporary file which receives HTTP response headers.
TMPFILE=/tmp/tmp.$$
# An associative array, key: artifact name, value: number of artifacts of that name.
declare -A ARTCOUNT
# Process all artifacts on this repository, loop on returned "pages".
URL=$REPO/actions/artifacts
while [[ -n "$URL" ]]; do
# Get current page, get response headers in a temporary file.
JSON=$(ghapi --dump-header $TMPFILE "$URL")
# Get URL of next page. Will be empty if we are at the last page.
URL=$(grep '^Link:' "$TMPFILE" | tr ',' '\n' | grep 'rel="next"' | head -1 | sed -e 's/.*<//' -e 's/>.*//')
rm -f ${TMPFILE}
# Number of artifacts on this page:
COUNT=$(( $(jq <<<$JSON -r '.artifacts | length') ))
# Loop on all artifacts on this page.
for ((i=0; $i < $COUNT; i++)); do
# Get name of artifact and count instances of this name.
STR=$(jq <<<$JSON -r ".artifacts[$i].name?")
name=${STR%%-*}-${STR##*-}
ARTCOUNT[$name]=$(( $(( ${ARTCOUNT[$name]} )) + 1))
printf "Found '%s' #%d, " $STR ${ARTCOUNT[$name]}
# Check if we must delete this one.
if [[ ${ARTCOUNT[$name]} -gt $KEEP ]]; then
id=$(jq <<<$JSON -r ".artifacts[$i].id?")
size=$(( $(jq <<<$JSON -r ".artifacts[$i].size_in_bytes?") ))
printf "deleting %d bytes\n" $size
ghapi -X DELETE $REPO/actions/artifacts/$id
else
printf "OK\n"
fi
done
done
exit 0

5
.gitignore vendored Normal file
View File

@ -0,0 +1,5 @@
*.o
*.a
/library/compiler.log
/library/netinclude
*.map

View File

@ -1,13 +0,0 @@
# The "checkoutlist" file is used to support additional version controlled
# administrative files in $CVSROOT/CVSROOT, such as template files.
#
# The first entry on a line is a filename which will be checked out from
# the corresponding RCS file in the $CVSROOT/CVSROOT directory.
# The remainder of the line is an error message to use if the file cannot
# be checked out.
#
# File format:
#
# [<whitespace>]<filename>[<whitespace><error message>]<end-of-line>
#
# comment lines begin with '#'

View File

@ -1,15 +0,0 @@
# The "commitinfo" file is used to control pre-commit checks.
# The filter on the right is invoked with the repository and a list
# of files to check. A non-zero exit of the filter program will
# cause the commit to be aborted.
#
# The first entry on a line is a regular expression which is tested
# against the directory that the change is being committed to, relative
# to the $CVSROOT. For the first match that is found, then the remainder
# of the line is the name of the filter to run.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name "ALL" appears as a regular expression it is always used
# in addition to the first matching regex or "DEFAULT".

View File

@ -1,21 +0,0 @@
# Set this to "no" if pserver shouldn't check system users/passwords
#SystemAuth=no
# Put CVS lock files in this directory rather than directly in the repository.
#LockDir=/var/lock/cvs
# Set `TopLevelAdmin' to `yes' to create a CVS directory at the top
# level of the new working directory when using the `cvs checkout'
# command.
#TopLevelAdmin=no
# Set `LogHistory' to `all' or `TOEFWUPCGMAR' to log all transactions to the
# history file, or a subset as needed (ie `TMAR' logs all write operations)
#LogHistory=TOEFWUPCGMAR
# Set `RereadLogAfterVerify' to `always' (the default) to allow the verifymsg
# script to change the log message. Set it to `stat' to force CVS to verify# that the file has changed before reading it (this can take up to an extra
# second per directory being committed, so it is not recommended for large
# repositories. Set it to `never' (the previous CVS behavior) to prevent
# verifymsg scripts from changing the log message.
#RereadLogAfterVerify=always

View File

@ -1,19 +0,0 @@
# This file affects handling of files based on their names.
#
# The -m option specifies whether CVS attempts to merge files.
#
# The -k option specifies keyword expansion (e.g. -kb for binary).
#
# Format of wrapper file ($CVSROOT/CVSROOT/cvswrappers or .cvswrappers)
#
# wildcard [option value][option value]...
#
# where option is one of
# -f from cvs filter value: path to filter
# -t to cvs filter value: path to filter
# -m update methodology value: MERGE or COPY
# -k expansion mode value: b, o, kkv, &c
#
# and value is a single-quote delimited value.
# For example:
#*.gif -k 'b'

View File

@ -1,21 +0,0 @@
# The "editinfo" file is used to allow verification of logging
# information. It works best when a template (as specified in the
# rcsinfo file) is provided for the logging procedure. Given a
# template with locations for, a bug-id number, a list of people who
# reviewed the code before it can be checked in, and an external
# process to catalog the differences that were code reviewed, the
# following test can be applied to the code:
#
# Making sure that the entered bug-id number is correct.
# Validating that the code that was reviewed is indeed the code being
# checked in (using the bug-id number or a seperate review
# number to identify this particular code set.).
#
# If any of the above test failed, then the commit would be aborted.
#
# Actions such as mailing a copy of the report to each reviewer are
# better handled by an entry in the loginfo file.
#
# One thing that should be noted is the the ALL keyword is not
# supported. There can be only one entry that matches a given
# repository.

View File

@ -1,27 +0,0 @@
# The "loginfo" file controls where "cvs commit" log information
# is sent. The first entry on a line is a regular expression which must match
# the directory that the change is being made to, relative to the
# $CVSROOT. If a match is found, then the remainder of the line is a filter
# program that should expect log information on its standard input.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name ALL appears as a regular expression it is always used
# in addition to the first matching regex or DEFAULT.
#
# You may specify a format string as part of the
# filter. The string is composed of a `%' followed
# by a single format character, or followed by a set of format
# characters surrounded by `{' and `}' as separators. The format
# characters are:
#
# s = file name
# V = old version number (pre-checkin)
# v = new version number (post-checkin)
# t = tag or branch name
#
# For example:
#DEFAULT (echo ""; id; echo %s; date; cat) >> $CVSROOT/CVSROOT/commitlog
# or
#DEFAULT (echo ""; id; echo %{sVv}; date; cat) >> $CVSROOT/CVSROOT/commitlog

View File

@ -1,26 +0,0 @@
# Three different line formats are valid:
# key -a aliases...
# key [options] directory
# key [options] directory files...
#
# Where "options" are composed of:
# -i prog Run "prog" on "cvs commit" from top-level of module.
# -o prog Run "prog" on "cvs checkout" of module.
# -e prog Run "prog" on "cvs export" of module.
# -t prog Run "prog" on "cvs rtag" of module.
# -u prog Run "prog" on "cvs update" of module.
# -d dir Place module in directory "dir" instead of module name.
# -l Top-level directory only -- do not recurse.
#
# NOTE: If you change any of the "Run" options above, you'll have to
# release and re-checkout any working directories of these modules.
#
# And "directory" is a path to a directory relative to $CVSROOT.
#
# The "-a" option specifies an alias. An alias is interpreted as if
# everything on the right of the "-a" had been typed on the command line.
#
# You can encode a module within a module by using the special '&'
# character to interpose another module into the current module. This
# can be useful for creating a module that consists of many directories
# spread out over the entire source repository.

View File

@ -1,12 +0,0 @@
# The "notify" file controls where notifications from watches set by
# "cvs watch add" or "cvs edit" are sent. The first entry on a line is
# a regular expression which is tested against the directory that the
# change is being made to, relative to the $CVSROOT. If it matches,
# then the remainder of the line is a filter program that should contain
# one occurrence of %s for the user to notify, and information on its
# standard input.
#
# "ALL" or "DEFAULT" can be used in place of the regular expression.
#
# For example:
#ALL mail -s "CVS notification" %s

View File

@ -1,13 +0,0 @@
# The "rcsinfo" file is used to control templates with which the editor
# is invoked on commit and import.
#
# The first entry on a line is a regular expression which is tested
# against the directory that the change is being made to, relative to the
# $CVSROOT. For the first match that is found, then the remainder of the
# line is the name of the file that contains the template.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name "ALL" appears as a regular expression it is always used
# in addition to the first matching regex or "DEFAULT".

View File

@ -1,20 +0,0 @@
# The "taginfo" file is used to control pre-tag checks.
# The filter on the right is invoked with the following arguments:
#
# $1 -- tagname
# $2 -- operation "add" for tag, "mov" for tag -F, and "del" for tag -d
# $3 -- repository
# $4-> file revision [file revision ...]
#
# A non-zero exit of the filter program will cause the tag to be aborted.
#
# The first entry on a line is a regular expression which is tested
# against the directory that the change is being committed to, relative
# to the $CVSROOT. For the first match that is found, then the remainder
# of the line is the name of the filter to run.
#
# If the repository name does not match any of the regular expressions in this
# file, the "DEFAULT" line is used, if it is specified.
#
# If the name "ALL" appears as a regular expression it is always used
# in addition to the first matching regex or "DEFAULT".

View File

@ -1,21 +0,0 @@
# The "verifymsg" file is used to allow verification of logging
# information. It works best when a template (as specified in the
# rcsinfo file) is provided for the logging procedure. Given a
# template with locations for, a bug-id number, a list of people who
# reviewed the code before it can be checked in, and an external
# process to catalog the differences that were code reviewed, the
# following test can be applied to the code:
#
# Making sure that the entered bug-id number is correct.
# Validating that the code that was reviewed is indeed the code being
# checked in (using the bug-id number or a seperate review
# number to identify this particular code set.).
#
# If any of the above test failed, then the commit would be aborted.
#
# Actions such as mailing a copy of the report to each reviewer are
# better handled by an entry in the loginfo file.
#
# One thing that should be noted is the the ALL keyword is not
# supported. There can be only one entry that matches a given
# repository.

29
LICENSE Normal file
View File

@ -0,0 +1,29 @@
BSD 3-Clause License
Copyright (c) 2016, 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.
* Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
* Neither the name of the copyright holder nor the names of its
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 HOLDER 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.

295
README.md Normal file
View File

@ -0,0 +1,295 @@
# clib2 An ISO 'C' (1994) compliant runtime library for AmigaOS
[![Build](https://github.com/adtools/clib2/workflows/CI/badge.svg)](https://github.com/adtools/clib2/actions)
[![License](https://img.shields.io/badge/License-BSD%203--Clause-blue.svg)](https://opensource.org/licenses/BSD-3-Clause)
## What is this?
This is my attempt to get Samba 2.2.x ported to the Amiga. My first Amiga port required *SAS/C* and a number of strange tricks had to be pulled to get it to support the kind of environment Samba needed. But with the introduction of Samba 2.2.x many of those tricks did not work any more, which is why I decided to attack the problem at the root, namely the runtime library.
Because it was no longer possible to build Samba with *SAS/C* on the new Amiga platform, the idea came up to move development to the GNU 'C' compiler. This turned out to be a challenge due to its somewhat underdeveloped runtime library and header files. Eventually, I decided to rewrite that library from scratch.
## What does it do?
Using *'C' - A reference manual* (4th edition) as a reference I wrote a set of header files, then proceeded to implement each single function referenced in them. With few exceptions in the area of wide character support, the result should be a feature complete implementation of the ISO 'C' (1994) runtime library. The library was subsequently updated to offer functionality defined in *ISO/IEC 9899:1999*, also known as *C99*.
Because Samba needs a few POSIX-like routines to be supported, the library functionality is complemented by a set of routines described in *Advanced programming in the Unix environment*.
This is not a portable implementation of the library in the sense that you could move it from one 'C' compiler on one operating system to another. This is an Amiga specific implementation.
The library supports floating point math, which, for the 68k platform, is limited to IEEE single and double precision or M68881 inline math. There is no support for the fast floating point (FFP) format or exclusive IEEE single precision. You either get double precision (IEEE math) or extended precision (M68881 inline math). What it is that you get is determined at compile time. Use the `IEEE_FLOATING_POINT_SUPPORT` preprocessor symbol to activate IEEE math code and the `M68881_FLOATING_POINT_SUPPORT` symbol for M68881 inline math.
For the PowerPC platform, the library uses code borrowed from <a href="http://www.netlib.org/fdlibm/">fdlibm 5.3</a>, which is a portable library of arithmetic functions developed by Sun Microsystems which, for example, is also used within the Java platform.
## What does it not do?
This library is a departure from the typical 'C' runtime environments of the past which had to run on all AmigaOS releases, down to *Kickstart 1.1*. This very library was designed to take advantage of the routines available since *Kickstart 2.04* was introduced and virtually nobody ever put to use. This helps to cut the code size, and it also helps to keep bugs out of the library by falling back onto well-tested implementations. However, the catch is that the code won't run under *Kickstart 1.3* and below. But then these operating system releases have been obsolete for more than a decade, and you can always go back to a compiler environment which supports them.
There is very little support for `amiga.lib` functionality. There is `NewList()`, `HookEntry()`, `CallHook()`, `CallHookA()`, the `DoMethod()` family, the *RexxVars* family, but that's all. If you need more, you would have to implement it yourself. Put another way, if you absolutely need functionality that is only found in `amiga.lib`, you really shouldn't need it in the first place.
## Where does the source code come from?
I originally thought that it might be helpful to piece this library together from various sources, such as the BSD libc. It turned out that this code was so 'portable' that it became much more complex than it ought to be. Also, some side-effects were present which considerably changed the behaviour of the library. For example, the BSD libc uses `bcopy()` as an alias for `memcpy()`, and unlike `memcpy()` is documented to, `bcopy()` supports overlapping copies.
Eventually, I wrote virtually all the code myself, borrowing algorithmic ideas from the BSD libc and the *Manx Aztec 'C'* runtime library. Because I don't know much about the environment *GCC* expects, I borrowed code snippets from *libnix*, which was written by Matthias Fleischer and Gunther Nikl. This in particular concerns the integer and floating point math support, the `setjmp`/`longjmp` routines and the startup code. The M68881 inline math code comes from the `<math-68881.h>` file written by Matthew Self `(self [at] bayes.arc.nasa.gov)`.
## Limitations and caveats
There is hardly any documentation on the code I wrote. In part this is due to the fact that the code itself is very simple in design. It should speak for itself. However, to make a usable runtime library you have to have a user documentation as in *man pages* or *AutoDocs*. We will eventually have to have *AutoDocs* for this library.
The exception handling in the math code is not particularly effective. For one part this is due to the fact that there is no exception handler installed by the runtime library when it starts up which could catch and process the error conditions the CPU or FPU generates. The idea was to provide for a portable runtime library with little to no assembly language involved. To make the exception handling complete, such code would be necessary.
The library currently builds under *SAS/C*, but because the 'normal' program startup code is not utilized, the base relative (A4) addressing does not work. If you are going to test it, use the `data=faronly` option to compile the library and the programs.
Different build *Makefiles* are supplied for use with *GCC*. There is a `GNUmakefile.68k` for the 68k platform and a `GNUmakefile.os4` for the AmigaOS4 PowerPC version.
### Floating point math and functions (`scanf()`, `printf()`, etc.)
The plain `libc.a`, which your software would be linked against by default, does not contain any floating point support code. This means, for example, that `printf("%f",...)` will not produce the desired output and that `scanf("%f",...)` may not read any data at all. If your program needs functions such as these or `atod()` then you must link against `libm.a` or the equivalent.
To link the floating point support code with your software, use the `-lm` compiler option.
**Careful!** The order in which you specify the libraries to link against is important here. Thus, `gcc -o test test.c -lm -lc` would correctly link the program `test` against the proper floating point math library, but `gcc -o test test.c -lc -lm` would not.
### The thread-safe library
Thread-safety does not imply that you can have multiple callers access and close the same file. There is no resource tracking to that degree yet. All that the thread-safety tries to afford you is not to get into big trouble if simultaneous and overlapping accesses to files, memory allocation and other resources are taking place.
The library code is supposed to be thread-safe if built with the `__THREAD_SAFE` preprocessor symbol defined. Note that 'thread-safe' does **not** mean 'reentrant'. Multiple callers for certain library functions are permitted, but not for all of them. For example, `mkdtemp()` is not thread-safe, and neither is `rand()` or `localtime()`. But as per *POSIX 1003.1c-1995* there are thread-safe variants of `rand()` and `localtime()` called `rand_r()`, `localtime_r()`, and others.
The use of the socket I/O functions is problematic because the underlying `bsdsocket.library` API is not supposed to be used by any process other than the one which opened it. While one TCP/IP stack (my own "Roadshow") allows you to share the library base among different processes, if so configured, it is the exception. No other TCP/IP stack available for the Amiga robustly supports a similar feature. If the TCP/IP stack supports this feature, then the global variable `__can_share_socket_library_base` will be set to a non-zero value.
Errors reported by the socket I/O functions which modify the global variables `errno` and `h_errno` may be directed to call the `__set_errno()` and `__set_h_errno()` functions instead, if the TCP/IP stack supports this feature. The global variable `__thread_safe_errno_h_errno` will be set to a non-zero value if it does.
A much more serious problem resides with the `exit()`, `abort()`, `assert()` and `raise()` functions, and how the `SIGINT` signal is processed. In the thread-safe library only the `main()` function may directly or indirectly call the `exit()` function. No child process may do so, since this would wreck its stack context, crashing it instantly; the main program would be very likely to crash, too, because `exit()` will clean up after all memory allocations and files currently in use. Functions such as `abort()` and `raise()` may call the `exit()` function indirectly. And the `raise()` function may be invoked as part of the `Control+C` checking. You should make sure that the signal handling does not affect any child processes. This can be done by replacing the `__check_abort()` function or by disabling `SIGINT` processing altogether, such as through a `signal(SIGINT,SIG_IGN)` call.
Also take care with file I/O involving the `stdin`/`stdout`/`stderr` streams; read/write operations on these streams will be mapped to the `Input()`/`Output()`/`ErrorOutput()` file handles of the process performing these operations. Since only this small set of operations is mapped, functions such as `fcntl()` or `select()` will not work on the `stdin`/`stdout`/`stderr` streams and the corresponding file descriptors `STDIN_FILENO`/`STDOUT_FILENO`/`STDERR_FILENO`. It is therefore strongly recommended to use the thread-safe library only for applications which can cope with the limitations described above.
### Using gmon (PowerPC only)
To use profiling, two steps are required. First of all, your program must be compiled with the *GCC* command line option `-pg`. This instructs the compiler to generate special profiling code in the prologue and epilogue of each function. Additionally, the program must be linked against `libprofile.a`. To do this, either manually add `-lprofile` to the linker command line, or modify the specs file as follows. Find the lines that look like this (it may actually differ slightly from your specs file, but the important thing is that the line before the line to be modified reads `lib:`):
```
lib:
--start-group -lc --end-group
```
You will have to modify this to look like this:
```
lib:
%{pg: -lprofile} --start-group -lc --end-group
```
Normally, the `specs` file is located at the compiler's installation directory. For cross-compilers, this is `/usr/local/amiga/lib/gcc/ppc-amigaos/*compiler-version*/specs`. For a native compiler, it's in `gcc:lib/gcc/ppc-amigaos/*compiler-version*/specs`. Most likely, your compiler will already have this added to it's `specs` file.
Profiling makes use of a special PowerPC facility called the *Performance Monitor*. It allows to "mark" tasks and count only during while a marked task is running. This allows performance analysis to be made independent of the actual system load. The *Performance Monitor* is available on all PowerPC models supported by AmigaOS 4 except for the *603e*, and embedded versions of the PowerPC like the *405* and *440* series. Consult the manual of the appropriate chip for more information.
### Implementation defined behaviour
#### 'C' language
##### Environment
The `main(int argc,char **argv);` function may be called with an `argc` value of 0, in which case the `argv` variable will contain a pointer to the Amiga Workbench startup message, which is of type `struct WBStartup *`, and is defined in the Amiga system header file `<workbench/startup.h>`.
##### Characters
The current locale is derived from the current Amiga operating system locale settings. The `setlocale("")` function call will choose the current Amiga operating system locale settings. Any other name passed to the `setlocale()` function, with the exception of `"C"`, which selects the 'C' locale, must be a locale name, as used by the Amiga operating system function `OpenLocale()` in `locale.library`.
##### Floating-point
The 68k version of *clib2* supports single and double precision floating point numbers, according to the *IEEE 754* standard. The software floating point number support is built upon the Amiga operating system libraries `mathieeesingbas.library`, `mathieeedoubbas.library` and `mathieeedoubtrans.library`. The hardware floating point number support uses the M68881/M68882/M68040/M68060 floating point unit instead.
The PowerPC version of *clib2* supports only double precision floating point numbers, according to the *IEEE 754* standard, because that is exactly what the PowerPC CPU supports. Single precision numbers may be implicitly converted to double precision numbers. This also means that the *C99* data type `long double` is identical to the `double` data type. Because there is no difference between these two, the library omits support for *C99* functions specifically designed to operate on `long double` data types, such as `rintl()`.
Both the 68k and the PowerPC versions of *clib2* may call software floating point support routines in order to perform double and single precision operations that go beyond simple addition and multiplication, such as `sqrt()`. These functions come from Sun Microsystems <a href="http://www.netlib.org/fdlibm/">fdlibm 5.3</a> library.
Unless your software is linked against `libm.a` no floating point functions will be available to it, possibly causing a linker error. When using the GNU 'C' compiler, you will want to add the option `-lm -lc` to the linker command line.
The exception handling is currently entirely out of control of the developer and solely subject to the rules imposed by the operating system itself.
The `fmod()` function returns the value of the `x` parameter and sets `errno` to `EDOM` if the `y` parameter value is 0.
#### Library functions
##### `NULL`
The `NULL` pointer constant is defined in the `<stddef.h>` header and will expand to `((void *)0L)` if the 'C' compiler is used. For a C++ compiler the constant will expand to `0L` instead.
##### `assert()` diagnostic messages
The diagnostic messages printed by the `assert()` function take the following form:
> `[*program name*] *file*:*line*: failed assertion "*condition*".`
where:
Label | Meaning
----- | -------
program name | Optional program name; if the program name is not yet known, then the entire text enclosed in square brackets will be omitted.
file | The value of the `__FILE__` symbol at the location of the `assert()` call.
line | The value of the `__LINE__` symbol at the location of the `assert()` call.
condition | The condition passed to the `assert()` function.
If available, the diagnostic messages will be sent to `stderr`.
If the program was launched from Workbench or if the global variable `__no_standard_io` is set to a non-zero value, then the assertion failure message will not be displayed in the shell window, but in a requester window. The diagnostic message shown in this window will take the following form:
> `Assertion of condition "*condition*" failed in file "*file*", line *line*.`
The name of the program, if it is know at that time, will be displayed in the requester window title.
##### Signal handling
Only the minimum of required signals are supported by this library. These are `SIGABRT`, `SIGFPE`, `SIGILL`, `SIGINT`, `SIGSEGV` and `SIGTERM`.
As of this writing `SIGFPE` is never called by the floating point library functions.
The `Ctrl+C` event is translated into `SIGINT`. Signal delivery may be delayed until a library function which polls for the signal examines it. This means, for example, that a runaway program caught in an infinite loop cannot be aborted by sending it a `Ctrl+C` event unless special code is added which tests for the presence of the signal and calls the `__check_abort()` function on its own accord.
Processing of the `Ctrl+C` event involves the internal `__check_abort()` function which polls for the presence of the event and which will call `raise(SIGINT);`. The `__check_abort()` function may be replaced by user code.
##### Files
No new line characters are written unless specifically requested.
Space characters in a text stream before a new line character are read in and are not discarded.
When data is read from a file, the last character does not have to be a new line character.
No `NUL` byte will be appended to data written to a binary stream.
There is no difference between text and binary streams.
Writing to a text or binary stream does not truncate the associated file. A stream may be truncated by the initial `fopen()` call if the `mode` parameter starts with the letter `w`.
The file position indicator is initially set to the end of an append mode stream.
##### `printf()` family
The `%p` conversion is the hexadecimal representation of the pointer, and it is preceded by the string `0x`.
The `%a`, `%e`, `%f`, `%g`, `%A`, `%E`, `%F` and `%G` specifiers will produce the string `inf` for infinity.
##### `scanf()` family
The input for the `%p` conversion must be a hexadecimal number, preceded by either the string `0x` or `0X`.
In the `%[` conversion a `-` (dash) character that is neither the first nor the last character in the scanset indicates that a subrange of characters should be used. Thus `%[a-d]` is equivalent to `%[abcd]`.
The period (.) is the decimal-point character. The locale specific decimal-point character is accepted as an alternative to the period (.).
##### `malloc()`, `realloc()` and `calloc()`
In the standard `libc.a` implementation any request to allocate 0 (zero) bytes will fail. A result value of `NULL` will be returned and the global `errno` variable will be set to `EINVAL`.
In the `libunix.a` implementation a request to allocate 0 (zero) bytes will result in an allocation of at least 4 bytes, which will be set to zero. Each zero length allocation will return a different memory address.
##### `rename()`
In the standard `libc.a` implementation the `rename()` function will fail if there already is a file or directory by the new name to be used.
In the `libunix.a` implementation the `rename()` function will delete any existing file or directory by the new name.
##### `remove()`
In the standard `libc.a` implementation the `remove()` function will fail if the file is protected by deletion or currently in use.
In the `libunix.a` implementation the `remove()` function will remove the file when the program exits or the file is closed.
##### `abort()`
The `abort()` function will flush all buffered files, close all the files currently open and delete temporary files.
##### `exit()` and `_Exit()`
The value passed to the `exit()` function will be passed to the Amiga operating system. The value of `EXIT_FAILURE` is equivalent to `RETURN_FAIL` as defined in the Amiga system header file `<dos/dos.h>`; this value maps to the number 20. The value of `EXIT_SUCCESS` is equivalent to `RETURN_OK` as defined in the Amiga system header file `<dos/dos.h>`; this value maps to the number 0.
The `_Exit()` function will flush all buffered files, close all the files currently open and delete temporary files.
##### `getenv()`
Environment data is retrieved from the global Amiga operating system environment storage area through the `dos.library/GetEnv()` function. Global variables are stored in files in the `ENV:` directory.
##### `system()`
If the `command` parameter is not NULL and the `system()` function returns, then the result will be equivalent to the exit code of the program invoked, or -1 if the program could not be started. This follows the behaviour of the Amiga operating system function `dos.library/System()`. A return value of 0 typically indicates successful execution and a value > 0 typically indicates failure.
##### Time
The default time zone is derived from the Amiga operating system locale settings and takes the form `GMT+*hh*` or `GMT-*hh*`, respectively, in which *hh* stands for the difference between the local time zone and Greenwich Mean Time (actually, this is not GMT but UTC).
The `clock_t` and `time_t` types are unsigned 32 bit integers. The `time_t` epoch starts with midnight January 1st, 1970.
Daylight savings time is not supported.
The reference point used by the `clock()` function is the time when the program was started.
#### Locale specific behaviour
The direction of printing is from left to right.
The period (.) is the decimal-point character.
The `strftime()` behaviour follows the Amiga operating system locale settings. If the 'C' locale is in effect, then the output generated by the `%Z` takes the form `GMT+*hh*` or `GMT-*hh*`, respectively, in which *hh* stands for the difference between the local time zone and Greenwich Mean Time (this is really UTC).
## Conventions and design issues
You will have noticed the 330+ files in this directory. This is not the best way to organize a runtime library, but at least all the bits and pieces are in plain sight. Each file stands for the one or two routines it contains. The name indicates what routine(s) that might be. Each file name is prefixed by the name of the header file in which the corresponding routine is defined. So, for example, you will find that `unistd_lchown.c` contains the definition of the `lchown()` routine, which has its prototype defined in the `<unistd.h>` header file.
Internal function and variables which need to be visible across several modules have names prefixed with two underscores, as in `__stdio_init()`.
By default all library routines follow the ISO 'C' conventions in that where implementation defined behaviour is permitted, the AmigaOS rules are followed. For example, `unlink()` will by default operate like `DeleteFile()` and `rename()` will return with an error code set if the name of the file/directory to be renamed would collide with an existing directory entry.
## The startup code
There are three program startup files provided. The most simplistic is in `startup.c` which I use for *SAS/C*. It just invokes the setup routine which eventually calls `main()` and drops straight into `exit()`.
The `ncrt0.S` file was adapted from the *libnix* startup code which sets up the base relative data area, if necessary (the `SMALL_DATA` preprocessor symbol must be defined).
The `nrcrt0.S` file was adapted from *libnix* startup code, too, and sets up the base relative data area for programs to be made resident. Note that the `geta4()` stub is missing here; it wouldn't work in a resident program anyway.
The `ncrt0.S` and `nrcrt0.S` files are considerably smaller and less complex than the *libnix* code they are based on. This is because in this library design all the more complex tasks are performed in the `stdlib_main.c` file rather than in assembly language.
## Documentation
Well, you're reading it. There isn't anything much yet. You can consult the book *'C' - A reference manual* and you could look at the
<a href="http://www.opengroup.org/onlinepubs/007904975">Open Group's Single Unix
Specification</a>.
It is recommended to browse the contents of the `include` directory. The header files contain information on library behaviour and not just data type and function prototype definitions. Specifically, the `<dos.h>` header file contains documentation about special libraries and global variables which may be used or replaced by user code.
## Legal status
Because this library is in part based upon free software it would be uncourteous not to make it free software itself. The BSD license would probably be appropriate here.
The PowerPC math library is based in part on work by Sun Microsystems:
<pre>
====================================================
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.
====================================================
</pre>
## Contacting the author
The basic work was done by Olaf Barthel during two weeks in July 2002. You can reach me at:
Olaf Barthel
Gneisenaustr. 43
D-31275 Lehrte
Or via e-mail:
obarthel [at] gmx.net

View File

@ -28,7 +28,8 @@ rewrite that library from scratch.</p>
header files, then proceeded to implement each single function referenced in
them. With few exceptions in the area of wide character support, the result
should be a feature complete implementation of the ISO 'C' (1994) runtime
library.</p>
library. The library was subsequently updated to offer functionality defined in
<i>ISO/IEC 9899:1999</i>, also known as <i>C99</i>.</p>
<p>Because Samba needs a few POSIX-like routines to be supported, the library
functionality is complemented by a set of routines described in <i>Advanced
@ -46,36 +47,10 @@ precision. You either get double precision (IEEE math) or extended precision
Use the <tt>IEEE_FLOATING_POINT_SUPPORT</tt> preprocessor symbol to activate IEEE math
code and the <tt>M68881_FLOATING_POINT_SUPPORT</tt> symbol for M68881 inline math.</p>
<p>For the PowerPC platform, the library uses code borrowed from fdlibm 5.3,
<p>For the PowerPC platform, the library uses code borrowed from <i>fdlibm 5.3</i>,
which is a portable library of arithmetic functions developed by Sun
Microsystems which, for example, is also used within the Java platform.</p>
<p>Not unlike SAS/C, you can configure a minimum stack size the program is to use
when it starts up. This is controlled via the <tt>__stack_size</tt> variable (see
<tt>stdlib_main.c</tt>).</p>
<p>I added some <tt>amiga.lib</tt> and <tt>debug.lib</tt> functionality to the library, but don't
count on it to be complete.</p>
<p>The library code is supposed to be thread-safe if built with the <tt>__THREAD_SAFE</tt>
preprocesssor symbold defined. Note that 'thread-safe' does <em>not</em> mean
'reentrant'. Multiple callers for certain library functions are permitted, but
not for all of them. For example, <tt>mkdtemp()</tt> is not thread-safe, and neither is
<tt>rand()</tt> or <tt>localtime()</tt>. But as per POSIX 1003.1c-1995 there are thread-safe
variants of <tt>rand()</tt> and <tt>localtime()</tt> called <tt>rand_r()</tt>, <tt>localtime_r()</tt>, and others.
The use of the socket I/O functions is still problematic because the
underlying <tt>bsdsocket.library</tt> API is not supposed to be used by any process
other than the one that opened it. Also yet unsolved is the issue of reading
error codes from the <tt>errno</tt> variable which currently always contains the
error code left by the last caller.</p>
<p>Take care: thread-safety does not imply that you can have multiple callers
access and close the same file. There is no resource tracking to that degree
yet. All the thread-safety tries to afford you is not to get into big trouble
if simultaneous and overlapping accesses to files, memory allocation and other
resources are taking place.</p>
<h2>3. What does it not do?</h2>
<p>This library is a departure from the typical 'C' runtime environments of the
@ -92,13 +67,13 @@ to a compiler environment which supports them.</p>
<tt>HookEntry()</tt>, <tt>CallHook()</tt>, <tt>CallHookA()</tt>, the <tt>DoMethod()</tt> family, the RexxVars
family, but that's all. If you need more, you would have to implement it
yourself. Put another way, if you absolutely need functionality that is only
found in <tt>amiga.lib</tt>, you really shouldn't need in in the first place.</p>
found in <tt>amiga.lib</tt>, you really shouldn't need it in the first place.</p>
<h2>4. Where does the source code come from?</h2>
<p>I originally thought that it might be helpful to piece this library together
from various sources, such as the BSD libc. Turned out that this code was so
from various sources, such as the BSD libc. It turned out that this code was so
'portable' that it became much more complex than it ought to be. Also, some
side-effects were present which considerably changed the behaviour of the
library. For example, the BSD libc uses <tt>bcopy()</tt> as an alias for <tt>memcpy()</tt>, and
@ -110,7 +85,7 @@ much about the environment GCC expects, I borrowed code snippets from libnix,
which was written by Matthias Fleischer and Gunther Nikl. This in particular
concerns the integer and floating point math support, the <tt>setjmp</tt>/<tt>longjmp</tt>
routines and the startup code. The M68881 inline math code comes from the
<tt>&lt;math-68881.h&gt;</tt> file written by Matthew Self <tt>(self@bayes.arc.nasa.gov)</tt>.</p>
<tt>&lt;math-68881.h&gt;</tt> file written by Matthew Self <tt>(self [at] bayes&#46;arc&#46;nasa&#46;gov)</tt>.</p>
<h2>5. Limitations and caveats</h2>
@ -118,18 +93,9 @@ routines and the startup code. The M68881 inline math code comes from the
<p>There is hardly any documentation on the code I wrote. In part this is due to
the fact that the code itself is very simple in design. It should speak for
itself. However, to make a usable runtime library you have to have a user
documentation as in man pages or autodocs. We will eventually have to have
documentation as in man pages or AutoDocs. We will eventually have to have
autodocs for this library.</p>
<p>The code is currently plastered with assertions and debug code. It is
therefore much larger than it ought to be and runs much slower than it ought
to be. For example, the <tt>malloc()</tt> routine will set the contents of the memory
allocated to a 'dirty' bit pattern which is likely to break software which
makes assumptions about its contents. Likewise, the <tt>free()</tt> routine will trash
the memory to deallocate with a different 'dirty' bit pattern to turn up reuse
of memory after deallocation. All these debugging features can be disabled by
defining the <tt>NDEBUG</tt> preprocessor symbol at compile time (see <tt>&lt;assert.h&gt;</tt>).</p>
<p>The exception handling in the math code is not particularly effective. For one
part this is due to the fact that there is no exception handler installed by
the runtime library when it starts up which could catch and process the error
@ -142,10 +108,324 @@ startup code is not utilized, the base relative (A4) addressing does not work.
If you are going to test it, use the <tt>data=faronly</tt> option to compile the
library and the programs.</p>
<p>Different build makefiles are supplied for use with GCC. There is
<tt>GNUmakefile.68k</tt> for the 68k platform and <tt>GNUmakefile.os4</tt> for the AmigaOS4
<p>Different build makefiles are supplied for use with GCC. There is a
<tt>GNUmakefile.68k</tt> for the 68k platform and a <tt>GNUmakefile.os4</tt> for the AmigaOS4
PowerPC version.</p>
<h3>5.1 Floating point math and functions (<tt>scanf()</tt>, <tt>printf()</tt>, etc.) </h3>
<p>The plain <tt>libc.a</tt>, which your software would be linked against by default, does not contain
any floating point support code. This means, for example, that <tt>printf("%f",...)</tt> will not produce
the desired output and that <tt>scanf("%f",...)</tt> may not read any data at all. If your
program needs functions such as these or <tt>atod()</tt> then you must link against <tt>libm.a</tt> or
the equivalent.</p>
<p>To link the floating point support code with your software, use the <tt>-lm</tt> compiler option. <em>Careful!</em>
The order in which you specify the libraries to link against is important here. Thus, <tt>gcc -o test test.c -lm -lc</tt>
would correctly link the program <tt>test</tt> against the proper floating point math library, but
<tt>gcc -o test test.c -lc -lm</tt> would not.</p>
<h3>5.2 The thread-safe library</h3>
<p>Thread-safety does not imply that you can have multiple callers
access and close the same file. There is no resource tracking to that degree
yet. All that the thread-safety tries to afford you is not to get into big trouble
if simultaneous and overlapping accesses to files, memory allocation and other
resources are taking place.</p>
<p>The library code is supposed to be thread-safe if built with the <tt>__THREAD_SAFE</tt>
preprocesssor symbol defined. Note that 'thread-safe' does <em>not</em> mean
'reentrant'. Multiple callers for certain library functions are permitted, but
not for all of them. For example, <tt>mkdtemp()</tt> is not thread-safe, and neither is
<tt>rand()</tt> or <tt>localtime()</tt>. But as per <i>POSIX 1003.1c-1995</i> there are thread-safe
variants of <tt>rand()</tt> and <tt>localtime()</tt> called <tt>rand_r()</tt>, <tt>localtime_r()</tt>, and others.</p>
<p>The use of the socket I/O functions is problematic because the
underlying <tt>bsdsocket.library</tt> API is not supposed to be used by any process
other than the one which opened it. While one TCP/IP stack (my own "Roadshow") allows you
to share the library base among different processes, if so configured, it is the
exception. No other TCP/IP stack available for the Amiga robustly supports a similar
feature. If the TCP/IP stack supports this feature, then the global variable
<tt>__can_share_socket_library_base</tt> will be set to a non-zero value.</p>
<p>Errors reported by the socket I/O functions which modify the global variables
<tt>errno</tt> and <tt>h_errno</tt> may be directed to call the <tt>__set_errno()</tt>
and <tt>__set_h_errno()</tt> functions instead, if the TCP/IP stack supports this feature. The global
variable <tt>__thread_safe_errno_h_errno</tt> will be set to a non-zero value if it does.</p>
<p>A much more serious problem resides with the <tt>exit()</tt>, <tt>abort()</tt>,
<tt>assert()</tt> and <tt>raise()</tt> functions, and how the <tt>SIGINT</tt> signal is
processed. In the thread-safe library only the <tt>main()</tt> function may directly
or indirectly call the <tt>exit()</tt> function. No child process may do so, since this
would wreck its stack context, crashing it instantly; the main program would be very
likely to crash, too, because <tt>exit()</tt> will clean up after all memory allocations
and files currently in use. Functions such as <tt>abort()</tt> and <tt>raise()</tt> may
call the <tt>exit()</tt> function indirectly. And the <tt>raise()</tt> function may
be invoked as part of the <tt>Control+C</tt> checking. You should make sure that the
signal handling does not affect any child processes. This can be done by replacing the
<tt>__check_abort()</tt> function or by disabling <tt>SIGINT</tt> processing altogether,
such as through a <tt>signal(SIGINT,SIG_IGN)</tt> call.</p>
<p> Also take care with file I/O involving the <tt>stdin</tt>/<tt>stdout</tt>/<tt>stderr</tt>
streams; read/write operations on these streams will be mapped to the <tt>Input()</tt>/<tt>Output()</tt>/<tt>ErrorOutput()</tt>
file handles of the process performing these operations. Since only this small set of
operations is mapped, functions such as <tt>fcntl()</tt> or <tt>select()</tt> will not
work on the <tt>stdin</tt>/<tt>stdout</tt>/<tt>stderr</tt> streams and the corresponding
file descriptors <tt>STDIN_FILENO</tt>/<tt>STDOUT_FILENO</tt>/<tt>STDERR_FILENO</tt>.
It is therefore strongly recommended to use the thread-safe library only for applications
which can cope with the limitations described above.</p>
<h3>5.3 Using gmon (PowerPC only)</h3>
<p>To use profiling, two steps are required. First of all, your program must be compiled with
the gcc command line option <tt>-pg</tt>. This instructs the compiler to generate special
profiling code in the prologue and epilogue of each function. Additionally, the program
must be linked with <tt>libprofile.a</tt>. To do this, either manually add
<tt>-lprofile</tt> to the linker command line, or modify the specs file as follows.
Find the lines that look like this (it may actually differ silghtily from your specs file,
but the important thing is that the line before the line to be modified reads <tt>lib:</tt>):
<pre>
lib:
--start-group -lc --end-group
</pre>
You will have to modify this to look like this:
<pre>
lib:
%{pg: -lprofile} --start-group -lc --end-group
</pre>
<p>Normally, the specs file is located at the compilers installation directory. For cross-compilers,
this is <tt>/usr/local/amiga/lib/gcc/ppc-amigaos/<i>compiler-version</i>/specs</tt>. For a native compiler,
it's in <tt>gcc:lib/gcc/ppc-amigaos/<i>compiler-version</i>/specs</tt>. Most likely, your compiler will already have this added to it's specs file.</p>
<p>Profiling makes use of a special PowerPC facility called the Performance Monitor. It
allows to "mark" tasks and count only during while a marked task is running. This allows
performance analysis to be made independant of the actual system load. The Performace Monitor
is available on all PowerPC models supported by AmigaOS 4 except for the <tt>603e</tt>, and
embedded versions of the PowerPC like the <tt>405</tt> and <tt>440</tt> series. Consult the manual
of the appropriate chip for more information.</p>
<h3>5.4 Implementation defined behaviour</h3>
<h4>5.4.1. 'C' language</h4>
<h5>5.4.1.1. Environment</h5>
<p>The <tt>main(int argc,char **argv);</tt> function may be called with an <tt>argc</tt> value of 0,
in which case the <tt>argv</tt> variable will contain a pointer to the Amiga Workbench startup
message, which is of type <tt>struct WBStartup *</tt>, and is defined in the Amiga system header
file <tt>&lt;workbench/startup.h&gt;</tt>.</p>
<h5>5.4.1.2. Characters</h5>
<p>The current locale is derived from the current Amiga operating system locale settings. The
<tt>setlocale("")</tt> function call will choose the current Amiga operating system locale settings.
Any other name passed to the <tt>setlocale()</tt> function, with the exception of <tt>"C"</tt>,
which selects the 'C' locale, must be a locale name, as used by the Amiga operating system
function <tt>OpenLocale()</tt> in <tt>locale.library</tt>.</p>
<h5>5.4.1.3. Floating-point</h5>
<p>The 68k version of clib2 supports single and double precision floating point numbers,
according to the <i>IEEE 754</i> standard. The software floating point number support is built upon the Amiga
operating system libraries <tt>mathieeesingbas.library</tt>, <tt>mathieeedoubbas.library</tt>
and <tt>mathieeedoubtrans.library</tt>. The hardware floating point number support uses
the M68881/M68882/M68040/M68060 floating point unit intead.</p>
<p>The PowerPC version of clib2 supports only double precision floating point numbers, according to
the <i>IEEE 754</i> standard, because that is exactly what the PowerPC CPU supports. Single precision
numbers may be implicitly converted to double precision numbers. This also means that the <i>C99</i>
data type <tt>long double</tt> is identical to the <tt>double</tt> data type. Because there is no
difference between these two, the library omits support for <i>C99</i> functions specifically designed
to operate on <tt>long double</tt> data types, such as <tt>rintl()</tt>.</p>
<p>Both the 68k and the PowerPC versions of clib2 may call software floating point support
routines in order to perform double and single precision operations that go beyond
simple addition and multiplication, such as <tt>sqrt()</tt>. These functions come from
Sun Microsystems <i>fdlibm 5.3</i> library.</p>
<p>Unless your software is linked against <tt>libm.a</tt> no floating point functions will
be available to it, possibly causing a linker error. When using the GNU 'C' compiler, you will
want to add the option <tt>-lm -lc</tt> to the linker command line.</p>
<p>The exception handling is currently entirely out of control of the developer
and solely subject to the rules imposed by the operating system itself.</p>
<p>The <tt>fmod()</tt> function returns the value of the <tt>x</tt> parameter and
sets <tt>errno</tt> to <tt>EDOM</tt> if the <tt>y</tt> parameter value is 0.</p>
<h4>5.4.2. Library functions</h4>
<h5>5.4.2.1. <tt>NULL</tt></h5>
<p>The <tt>NULL</tt> pointer constant is defined in the <tt>&lt;stddef.h&gt;</tt> header and
will expand to <tt>((void *)0L)</tt> if the 'C' compiler is used. For a C++ compiler the constant
will expand to <tt>0L</tt> instead.</p>
<h5>5.4.2.2. <tt>assert()</tt> diagnostic messages</h5>
<p>The diagnostic messages printed by the <tt>assert()</tt> function take the following form:</p>
<blockquote><tt>[<i>program name</i>] <i>file</i>:<i>line</i>: failed assertion "<i>condition</i>".</tt></blockquote>
<p>where:</p>
<table border=0>
<tr><th align=right>program name</th><td>Optional program name; if the program name is not yet known, then the
entire text enclosed in square brackets will be omitted.</td></tr>
<tr><th align=right>file</th><td>The value of the <tt>__FILE__</tt> symbol at the location of the <tt>assert()</tt> call.</td></tr>
<tr><th align=right>line</th><td>The value of the <tt>__LINE__</tt> symbol at the location of the <tt>assert()</tt> call.</td></tr>
<tr><th align=right>condition</th><td>The condition passed to the <tt>assert()</tt> function.</td></tr>
</table>
<p>If available, the diagnostic messages will be sent to <tt>stderr</tt>.</p>
<p>If the program was launched from Workbench or if the global variable <tt>__no_standard_io</tt> is set
to a non-zero value, then the assertion failure message will not be displayed in the shell window, but
in a requester window. The diagnostic message shown in this window will take the following form:</p>
<blockquote><tt>Assertion of condition "<i>condition</i>" failed in file "<i>file</i>", line <i>line</i>.</tt></blockquote>
<p>The name of the program, if it is know at that time, will be displayed in the requester window title.</p>
<h5>5.4.2.3. Signal handling</h5>
<p>Only the minimum of required signals are supported by this library. These are <tt>SIGABRT</tt>, <tt>SIGFPE</tt>,
<tt>SIGILL</tt>, <tt>SIGINT</tt>, <tt>SIGSEGV</tt> and <tt>SIGTERM</tt>.</p>
<p>As of this writing <tt>SIGFPE</tt> is never called by the floating point library functions.</p>
<p>The <tt>Ctrl+C</tt> event is translated into <tt>SIGINT</tt>. Signal delivery may be delayed
until a library function which polls for the signal examines it. This means, for example, that
a runaway program caught in an infinite loop cannot be aborted by sending it a <tt>Ctrl+C</tt> event unless special code
is added which tests for the presence of the signal and calls the <tt>__check_abort()</tt> all on its own.</p>
<p>Processing of the <tt>Ctrl+C</tt> event involves the internal <tt>__check_abort()</tt> function which
polls for the presence of the event and which will call <tt>raise(SIGINT);</tt>. The <tt>__check_abort()</tt>
function may be replaced by user code.</p>
<h5>5.4.2.4. Files</h5>
<p>No new line characters are written unless specifically requested.</p>
<p>Space characters in a text stream before a new line character are read in and not discarded.</p>
<p>When data is read from a file, the last character does not have to be a new line character.</p>
<p>No NUL byte will be appended to data written to a binary stream.</p>
<p>There is no difference between text and binary streams.</p>
<p>Writing to a text or binary stream does not truncate the associated file. A stream may be
truncated by the initial <tt>fopen()</tt> call if the <tt>mode</tt> parameter starts with
the letter <tt>w</tt>.</p>
<p>The file position indicator is initially set to the end of an append mode stream.</p>
<h5>5.4.2.5. <tt>printf()</tt> family</h5>
<p>The <tt>%p</tt> conversion is the hexadecimal representation of the pointer, and
it is preceded by the string <tt>0x</tt>.</p>
<p>The <tt>%a</tt>, <tt>%e</tt>, <tt>%f</tt>, <tt>%g</tt>, <tt>%A</tt>,
<tt>%E</tt>, <tt>%F</tt> and <tt>%G</tt> specifiers will produce the string <tt>inf</tt>
for infinity.</p>
<h5>5.4.2.6. <tt>scanf()</tt> family</h5>
<p>The input for the <tt>%p</tt> conversion must be a hexadecimal number,
preceded by either the string <tt>0x</tt> or <tt>0X</tt>.</p>
<p>In the <tt>%[</tt> conversion a <tt>-</tt> (dash) character that is neither the
first nor the last character in the scanset indicates that a subrange of
characters should be used. Thus <tt>%[a-d]</tt> is equivalent to <tt>%[abcd]</tt>.</p>
<p>The period (.) is the decimal-point character. The locale specific decimal-point
character is accepted as an alternative to the period (.).</p>
<h5>5.4.2.7. <tt>malloc()</tt>, <tt>realloc()</tt> and <tt>calloc()</tt></h5>
<p>In the standard <tt>libc.a</tt> implementation any request to allocate
0 (zero) bytes will fail. A result value of <tt>NULL</tt> will be returned and
the global <tt>errno</tt> variable will be set to <tt>EINVAL</tt>.</p>
<p>In the <tt>libunix.a</tt> implementation a request to allocate
0 (zero) bytes will result in an allocation of at least 4 bytes, which will
be set to zero. Each zero length allocation will return a different
memory address.</p>
<h5>5.4.2.8. <tt>rename()</tt></h5>
<p>In the standard <tt>libc.a</tt> implementation the <tt>rename()</tt> function
will fail if there already is a file or directory by the new name to be used.</p>
<p>In the <tt>libunix.a</tt> implementation the <tt>rename()</tt> function will
delete any existing file or directory by the new name.</p>
<h5>5.4.2.9. <tt>remove()</tt></h5>
<p>In the standard <tt>libc.a</tt> implementation the <tt>remove()</tt> function
will fail if the file is protected by deletion or currently in use.</p>
<p>In the <tt>libunix.a</tt> implementation the <tt>remove()</tt> function
will remove the file when the program exits or the file is closed.</p>
<h5>5.4.2.10. <tt>abort()</tt></h5>
<p>The <tt>abort()</tt> function will flush all buffered files,
close all the files currently open and delete temporary files.</p>
<h5>5.4.2.11. <tt>exit()</tt> and <tt>_Exit()</tt></h5>
<p>The value passed to the <tt>exit()</tt> function will be passed to the
Amiga operating system. The value of <tt>EXIT_FAILURE</tt> is equivalent
to <tt>RETURN_FAIL</tt> as defined in the Amiga system header file
<tt>&lt;dos/dos.h&gt;</tt>; this value maps to the number 20. The value
of <tt>EXIT_SUCCESS</tt> is equivalent to <tt>RETURN_OK</tt> as defined in
the Amiga system header file <tt>&lt;dos/dos.h&gt;</tt>; this value maps to
the number 0.</p>
<p>The <tt>_Exit()</tt> function will flush all buffered files,
close all the files currently open and delete temporary files.</p>
<h5>5.4.2.12. <tt>getenv()</tt></h5>
<p>Environment data is retrieved from the global Amiga operating system environment
storage area through the <tt>dos.library/GetEnv()</tt> function. Global variables are
stored in files in the <tt>ENV:</tt> directory.</p>
<h5>5.4.2.13. <tt>system()</tt></h5>
<p>If the <tt>command</tt> parameter is not NULL and the <tt>system()</tt> function returns, then the result will
be equivalent to the exit code of the program invoked, or -1 if the program could not be started.
This follows the behaviour of the Amiga operating system function <tt>dos.library/System()</tt>.
A return value of 0 typically indicates successful execution and a value &gt; 0
typically indicates failure.</p>
<h5>5.4.2.14. Time</h5>
<p>The default time zone is derived from the Amiga operating system locale
settings and takes the form <tt>GMT+<i>hh</i></tt> or <tt>GMT-<i>hh</i></tt>,
respectively, in which <i>hh</i> stands for the difference between the local
time zone and Greenwich Mean Time.</p>
<p>The <tt>clock_t</tt> and <tt>time_t</tt> types are unsigned 32 bit integers.
The <tt>time_t</tt> epoch starts with midnight January 1st, 1970.</p>
<p>Daylight savings time is not supported.</p>
<p>The reference point used by the <tt>clock()</tt> function is the time
when the program was started.</p>
<h4>5.4.3. Locale specific behaviour</h4>
<p>The direction of printing is from left to right.</p>
<p>The period (.) is the decimal-point character.</p>
<p>The <tt>strftime()</tt> behaviour follows the Amiga operating system locale
settings. If the 'C' locale is in effect, then the output generated by the
<tt>%Z</tt> takes the form <tt>GMT+<i>hh</i></tt> or <tt>GMT-<i>hh</i></tt>,
respectively, in which <i>hh</i> stands for the difference between the local
time zone and Greenwich Mean Time.</p>
<h2>6. Conventions and design issues</h2>
@ -161,30 +441,11 @@ file.</p>
<p>Internal function and variables which need to be visible across several
modules have names prefixed with two underscores, as in <tt>__stdio_init()</tt>.</p>
<p>All routines attempt to do error checking on their parameters. They will
either drop into an <tt>assert()</tt> or set an errno value and refuse to go any
further. This cuts performance but should help to catch the simple bugs quite
easily (<tt>NULL</tt> pointers).</p>
<p>Just like any halfway sane Amiga 'C' runtime library, this one performs its <tt>^C</tt>
checking in the I/O routines. Typically once upon entry and in every iteration
of the loop there might be it will quickly poll the <tt>^C</tt> signal and drop into
<tt>raise(SIGINT)</tt> in case the signal is set. This is just about the safest method
to solve the problem and should be much more robust than the ixemul approach
of 'interrupt anywhere - crash anywhere' using the task switch/launch hooks to
test for signals.</p>
<p>By default all library routines follow the ISO 'C' conventions in that where
implementation defined behaviour is permitted, the AmigaOS rules are followed.
For example, <tt>unlink()</tt> will by default operate like <tt>DeleteFile()</tt> and <tt>rename()</tt>
will return with an error code set if the name of the file/directory to be
renamed would collide with an existing directory entry. However, your program
can set a global variable <tt>__unix_semantics</tt> which will cause some routines to
perform like their Unix counterparts. This is necessary for Samba to work but
not a generally desirable feature. You have some Unix-like behaviour, but the
environment itself is not completely Unix- or POSIX-compliant. And it
shouldn't be. Don't make the mistake of trying to mold the environment into a
POSIX emulation. It doesn't work; AmigaOS is not Unix.</p>
renamed would collide with an existing directory entry.</p>
<h2>7. The startup code</h2>
@ -214,6 +475,12 @@ assembly language.</p>
<a href="http://www.opengroup.org/onlinepubs/007904975">Open Group's Single Unix
Specification</a>.</p>
<p>It is recommended to browse the contents of the <tt>include</tt> directory. The
header files contain information on library behaviour and not just data type and
function prototype definitions. Specifically, the <tt>&lt;dos.h&gt;</tt> header file
contains documentation about special libraries and global variables which may be
used or replaced by user code.</p>
<h2>9. Legal status</h2>
@ -245,6 +512,6 @@ can reach me at:</p>
<p>Or via e-mail:</p>
<p>olsen@sourcery.han.de</p>
<p>obarthel [at] gmx&#46;net</p>
</body>
</html>

View File

@ -17,16 +17,16 @@
*link:
%{fbaserel:%{!resident:-m amiga_bss -fl libb}} %{resident:-m amiga_bss -amiga-datadata-reloc -fl libb} %{fbaserel32:%{!resident32:-m amiga_bss -fl libb32}} %{resident32:-m amiga_bss -amiga-datadata-reloc -fl libb32} %{g:-amiga-debug-hunk} %{m68020:-fl libm020} %{mc68020:-fl libm020} %{m68030:-fl libm020} %{m68040:-fl libm020} %{m68060:-fl libm020} %{m68020-40:-fl libm020} %{m68020-60:-fl libm020} %{m68881:-fl libm881}
%{fbaserel:%{!resident:-m amiga_bss -fl libb}} %{resident:-m amiga_bss -amiga-datadata-reloc -fl libb} %{fbaserel32:%{!resident32:-m amiga_bss -fl libb32}} %{resident32:-m amiga_bss -amiga-datadata-reloc -fl libb32} %{g:-amiga-debug-hunk} %{m68020:-fl libm020} %{mc68020:-fl libm020} %{m68030:-fl libm020} %{m68040:-fl libm020} %{m68060:-fl libm020} %{m68020-40:-fl libm020} %{m68020-60:-fl libm020} %{noixemul:}
*lib:
%{mstackextend:-lstack} -lc -lamiga -ldebug -lgcc -lc
*libgcc:
%{mstackextend:-lstack} -lc -lgcc
*startfile:
%{resident32:nr32crt0.o%s mainb32.o%s}%{!resident32:%{fbaserel32:nb32crt0.o%s mainb32.o%s}%{!fbaserel32:%{resident:nrcrt0.o%s mainb.o%s}%{!resident:%{fbaserel:nbcrt0.o%s mainb.o%s}%{!fbaserel:ncrt0.o%s mainnb.o%s}}}}
%{resident32:nr32crt0.o%s}%{!resident32:%{fbaserel32:nb32crt0.o%s}%{!fbaserel32:%{resident:nrcrt0.o%s}%{!resident:%{fbaserel:nbcrt0.o%s}%{!fbaserel:ncrt0.o%s}}}}
*switches_need_spaces:
@ -35,7 +35,7 @@
%{funsigned-char:-D__CHAR_UNSIGNED__}
*predefines:
-Dmc68000 -Damiga -Damigaos -DMCH_AMIGA -DAMIGA -D__chip=__attribute__((__chip__)) -D__saveds=__attribute__((__saveds__)) -D__interrupt=__attribute__((__interrupt__)) -D__stackext=__attribute__((__stackext__)) -D__regargs=__attribute__((__regparm__)) -D__stdargs=__attribute__((__stkparm__)) -D__aligned=__attribute__((__aligned__(4))) -Asystem(amigaos) -Acpu(m68k) -Amachine(m68k)
-Dmc68000 -Damiga -Damigaos -DMCH_AMIGA -DAMIGA -D__CLIB2__ -D__chip=__attribute__((__chip__)) -D__saveds=__attribute__((__saveds__)) -D__interrupt=__attribute__((__interrupt__)) -D__stackext=__attribute__((__stackext__)) -D__regargs=__attribute__((__regparm__)) -D__stdargs=__attribute__((__stkparm__)) -D__aligned=__attribute__((__aligned__(4))) -Asystem(amigaos) -Acpu(m68k) -Amachine(m68k)
*cross_compile:
0

View File

@ -1,18 +1,36 @@
#
# $Id: GNUmakefile.68k,v 1.40 2005-03-11 09:37:27 obarthel Exp $
# $Id: GNUmakefile.68k,v 1.107 2010-10-20 13:50:16 obarthel Exp $
#
# :ts=8
#
##############################################################################
############################################
# find out the HOST operating system
# on which this makefile is run (default to AmigaOS)
HOST ?= $(shell uname)
ifeq ($(HOST),)
HOST = AmigaOS
endif
CC = gcc
AR = ar -q
RANLIB = ranlib
COPY = copy clone buf=0
DELETE = delete all quiet
MAKEDIR = makedir
MAKE = make -f GNUmakefile.68k
MAKE = $(MAKE_COMMAND) -f GNUmakefile.68k
# override certain things for non-native builds
ifneq ($(HOST), AmigaOS)
CC = m68k-amigaos-gcc
AR = m68k-amigaos-ar -q
RANLIB = m68k-amigaos-ranlib
COPY = cp
DELETE = rm -rf
MAKEDIR = mkdir -p
endif
##############################################################################
@ -21,7 +39,6 @@ LIBC_OBJS = libc_objs
LIBUNIX_OBJS = libunix_objs
LIBM_OBJS = libm_objs
LIBM881_OBJS = libm881_objs
LIBSTACK_OBJS = libstack_objs
LIBNET_OBJS = libnet_objs
LIBDEBUG_OBJS = libdebug_objs
LIBAMIGA_OBJS = libamiga_objs
@ -30,7 +47,6 @@ LIBC_OBJS = $(TYPE)/libc_objs
LIBUNIX_OBJS = $(TYPE)/libunix_objs
LIBM_OBJS = $(TYPE)/libm_objs
LIBM881_OBJS = $(TYPE)/libm881_objs
LIBSTACK_OBJS = $(TYPE)/libstack_objs
LIBNET_OBJS = $(TYPE)/libnet_objs
LIBDEBUG_OBJS = $(TYPE)/libdebug_objs
LIBAMIGA_OBJS = $(TYPE)/libamiga_objs
@ -52,15 +68,11 @@ $(LIBUNIX_OBJS)/%.o : %.c
$(LIBM_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):m]"
@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) -DIEEE_FLOATING_POINT_SUPPORT $<
@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) -msoft-float -DIEEE_FLOATING_POINT_SUPPORT $<
$(LIBM881_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):m881]"
@$(CC) -o $(LIBM881_OBJS)/$*.o -c $(CFLAGS) -DM68881_FLOATING_POINT_SUPPORT -m68881 $<
$(LIBSTACK_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):stack]"
@$(CC) -o $(LIBSTACK_OBJS)/$*.o -c $(CFLAGS) -DSTACK_EXTENSION $<
@$(CC) -o $(LIBM881_OBJS)/$*.o -c $(CFLAGS) -m68881 -DM68881_FLOATING_POINT_SUPPORT $<
$(LIBNET_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):net]"
@ -78,7 +90,7 @@ $(LIBAMIGA_OBJS)/%.o : %.c
ifeq (small_data_020,$(TYPE))
CODE_TYPE := -m68020-60
CODE_FLAGS := -fbaserel -DSMALL_DATA -DM68020
CODE_FLAGS := -fbaserel -DSMALL_DATA -DM68020 -DUSE_64_BIT_INTS
endif
ifeq (small_data,$(TYPE))
@ -88,12 +100,12 @@ endif
ifeq (small_data32,$(TYPE))
CODE_TYPE := -m68020-60
CODE_FLAGS := -fbaserel32 -DSMALL_DATA32 -DM68020
CODE_FLAGS := -fbaserel32 -DSMALL_DATA32 -DM68020 -DUSE_64_BIT_INTS
endif
ifeq (large_data_020,$(TYPE))
CODE_TYPE := -m68020-60
CODE_FLAGS := -DM68020
CODE_FLAGS := -DM68020 -DUSE_64_BIT_INTS
endif
ifeq (large_data,$(TYPE))
@ -110,14 +122,19 @@ WARNINGS = \
# -Wconversion -Wshadow
INCLUDES = -Iinclude -I. -Inetinclude
OPTIONS = -DNDEBUG -fno-builtin
#OPTIONS = -D__MEM_DEBUG -fno-builtin
#OPTIONS = -DDEBUG -D__MEM_DEBUG -DNO_INLINE_STDARG -fno-builtin
#OPTIONS = -fno-builtin -fno-common -DDEBUG
OPTIONS = -fno-builtin -fno-common -DNDEBUG
#OPTIONS = -fno-builtin -fno-common -DNDEBUG -D__THREAD_SAFE
#OPTIONS = -fno-builtin -fno-common -D__MEM_DEBUG
#OPTIONS = -fno-builtin -fno-common -DDEBUG -D__MEM_DEBUG -DNO_INLINE_STDARG
#OPTIMIZE = -O3 -fomit-frame-pointer -funroll-loops -finline-functions
OPTIMIZE = -O -fomit-frame-pointer -fstrength-reduce -finline-functions
#OPTIMIZE = -O2 -fomit-frame-pointer
#DEBUG = -g2
#DEBUG = -g
CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_FLAGS) $(CODE_TYPE) $(INCLUDES)
CFLAGS = \
$(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) \
$(CODE_FLAGS) $(INCLUDES) $(CODE_TYPE)
##############################################################################
@ -126,6 +143,7 @@ C_LIB = \
ctype_isalnum.o \
ctype_isalpha.o \
ctype_isascii.o \
ctype_isblank.o \
ctype_iscntrl.o \
ctype_isdigit.o \
ctype_isgraph.o \
@ -154,6 +172,10 @@ C_LIB = \
fcntl_write.o \
ftw_ftw.o \
ftw_nftw.o \
inttypes_imaxdiv.o \
inttypes_imaxabs.o \
inttypes_strtoimax.o \
inttypes_strtoumax.o \
libgen_basename.o \
libgen_dirname.o \
locale_init_exit.o \
@ -166,6 +188,7 @@ C_LIB = \
signal_checkabort.o \
signal_data.o \
signal_kill.o \
signal_mask.o \
signal_raise.o \
signal_sigaddset.o \
signal_sigblock.o \
@ -179,11 +202,14 @@ C_LIB = \
stat_fchmod.o \
stat_fstat.o \
stat_lstat.o \
stat_lock.o \
stat_mkdir.o \
stat_rmdir.o \
stat_stat.o \
stat_umask.o \
stdio_asprintf.o \
stdio_change_fd_action.o \
stdio_change_fd_user_data.o \
stdio_clearerr.o \
stdio_dropiobreadbuffer.o \
stdio_duplicate_fd.o \
@ -201,6 +227,7 @@ C_LIB = \
stdio_findvacantiobentry.o \
stdio_flockfile.o \
stdio_flush.o \
stdio_flush_all_files.o \
stdio_flushiobwritebuffer.o \
stdio_fopen.o \
stdio_fprintf.o \
@ -210,8 +237,10 @@ C_LIB = \
stdio_freopen.o \
stdio_fscanf.o \
stdio_fseek.o \
stdio_fseeko.o \
stdio_fsetpos.o \
stdio_ftell.o \
stdio_ftello.o \
stdio_ftrylockfile.o \
stdio_funlockfile.o \
stdio_fwrite.o \
@ -220,6 +249,7 @@ C_LIB = \
stdio_getchar.o \
stdio_getchar_unlocked.o \
stdio_gets.o \
stdio_get_fd.o \
stdio_get_file_descriptor.o \
stdio_growfdtable.o \
stdio_growiobtable.o \
@ -245,6 +275,7 @@ C_LIB = \
stdio_remove.o \
stdio_remove_fd_alias.o \
stdio_rename.o \
stdio_resolve_fd_file.o \
stdio_rewind.o \
stdio_scanf.o \
stdio_setbuf.o \
@ -267,9 +298,13 @@ C_LIB = \
stdio_vsnprintf_hook_entry.o \
stdio_vsprintf.o \
stdio_vsprintf_hook_entry.o \
stdio_vsscanf.o \
stdio_vscanf.o \
stdlib_abort.o \
stdlib_abs.o \
stdlib_alloca.o \
stdlib_alloca_cleanup.o \
stdlib_alloca_trap.o \
stdlib_assertion_failure.o \
stdlib_atexit.o \
stdlib_atoi.o \
@ -291,15 +326,26 @@ C_LIB = \
stdlib_dosbase.o \
stdlib_exit.o \
stdlib_free.o \
stdlib_free_unused_slabs.o \
stdlib_decay_unused_slabs.o \
stdlib_getdefstacksize.o \
stdlib_getenv.o \
stdlib_getmemstats.o \
stdlib_getsp.o \
stdlib_get_errno.o \
stdlib_init_exit.o \
stdlib_get_slab_usage.o \
stdlib_get_slab_allocations.o \
stdlib_get_slab_stats.o \
stdlib_isresident.o \
stdlib_labs.o \
stdlib_llabs.o \
stdlib_ldiv.o \
stdlib_lldiv.o \
stdlib_lib_main.o \
stdlib_lib_startup.o \
stdlib_machine_test.o \
stdlib_main.o \
stdlib_main_stub.o \
stdlib_malloc.o \
stdlib_math.o \
stdlib_mkdtemp.o \
@ -312,12 +358,14 @@ C_LIB = \
stdlib_oslibversion.o \
stdlib_priority.o \
stdlib_process_name.o \
stdlib_program_name.o \
stdlib_putenv.o \
stdlib_qsort.o \
stdlib_rand.o \
stdlib_rand_r.o \
stdlib_realloc.o \
stdlib_red_black.o \
stdlib_resetmemstats.o \
stdlib_semaphore.o \
stdlib_setenv.o \
stdlib_setjmp.o \
@ -325,12 +373,10 @@ C_LIB = \
stdlib_set_process_window.o \
stdlib_shell_escape.o \
stdlib_showerror.o \
stdlib_socket.o \
stdlib_slab.o \
stdlib_slab_max_size.o \
stdlib_slab_purge_threshold.o \
stdlib_srand.o \
stdlib_stackargbytes.o \
stdlib_stackcheck.o \
stdlib_stackoverflow.o \
stdlib_stacksafezone.o \
stdlib_stacksize.o \
stdlib_stack_usage.o \
stdlib_arg.o \
@ -344,11 +390,11 @@ C_LIB = \
stdlib_system.o \
stdlib_termination_message.o \
stdlib_threshold.o \
stdlib_utilitybase.o \
stdlib_udivsi3.o \
stdlib_udivsi4.o \
stdlib_umodsi3.o \
stdlib_unsetenv.o \
stdlib_wildcard_expand.o \
strings_ffs.o \
strings_strcasecmp.o \
strings_strncasecmp.o \
@ -370,6 +416,7 @@ C_LIB = \
string_strcspn.o \
string_strdup.o \
string_strerror.o \
string_strerror_r.o \
string_strlcat.o \
string_strlcpy.o \
string_strlen.o \
@ -402,7 +449,11 @@ C_LIB = \
time_numbertostring.o \
time_strftime.o \
time_time.o \
time_tzset.o \
time_weekday.o \
uio_readv.o \
uio_writev.o \
ulimit_ulimit.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
@ -423,6 +474,7 @@ C_LIB = \
unistd_isatty.o \
unistd_lchown.o \
unistd_link.o \
unistd_lockf.o \
unistd_readlink.o \
unistd_realpath.o \
unistd_sleep.o \
@ -432,6 +484,7 @@ C_LIB = \
unistd_time_delay.o \
unistd_truncate.o \
unistd_unlink.o \
unistd_unlink_retries.o \
unistd_usleep.o \
utime_utime.o \
utsname_uname.o
@ -446,14 +499,19 @@ UNIX_LIB = \
fcntl_fcntl.o \
fcntl_open.o \
fcntl_get_default_file.o \
getopt_getopt_long.o \
mount_convertinfo.o \
mount_statfs.o \
resource_getrlimit.o \
resource_setrlimit.o \
stat_chmod.o \
stat_fstat.o \
stat_lstat.o \
stat_lock.o \
stat_mkdir.o \
stat_rmdir.o \
stat_stat.o \
stdio_ctermid.o \
stdio_fdhookentry.o \
stdio_fflush.o \
stdio_fopen.o \
@ -465,64 +523,225 @@ UNIX_LIB = \
stdio_record_locking.o \
stdio_remove.o \
stdio_rename.o \
stdlib_alloca.o \
stdlib_alloca_cleanup.o \
stdlib_alloca_trap.o \
stdlib_arg.o \
stdlib_expand_wildcard.o \
stdlib_expand_wildcard_check.o \
stdlib_getmemstats.o \
stdlib_main.o \
stdlib_main_stub.o \
stdlib_mkdtemp.o \
stdlib_mkstemp.o \
stdlib_mktemp.o \
stdlib_malloc.o \
stdlib_realloc.o \
stdlib_resetmemstats.o \
stdlib_system.o \
systeminfo_sysinfo.o \
termios_cfgetispeed.o \
termios_cfgetospeed.o \
termios_cfmakeraw.o \
termios_cfsetispeed.o \
termios_cfsetospeed.o \
termios_console_fdhookentry.o \
termios_tcdrain.o \
termios_tcflow.o \
termios_tcflush.o \
termios_tcgetattr.o \
termios_tcsendbreak.o \
termios_tcsetattr.o \
timeb_ftime.o \
uio_readv.o \
uio_writev.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_common_pathconf.o \
unistd_def_path.o \
unistd_def_path_delimiter.o \
unistd_environ.o \
unistd_execl.o \
unistd_execle.o \
unistd_execlp.o \
unistd_execv.o \
unistd_execve.o \
unistd_execve_env_exit.o \
unistd_execve_env_init.o \
unistd_execve_exit.o \
unistd_execvp.o \
unistd_fpathconf.o \
unistd_getcwd.o \
unistd_lchown.o \
unistd_link.o \
unistd_lockf.o \
unistd_pathconf.o \
unistd_readlink.o \
unistd_realpath.o \
unistd_restorepathname.o \
unistd_setcurrentpath.o \
unistd_strip_double_slash.o \
unistd_symlink.o \
unistd_translatea2u.o \
unistd_translaterel.o \
unistd_translateu2a.o \
unistd_truncate.o \
unistd_ttyname.o \
unistd_ttyname_r.o \
unistd_unix_path_semantics.o \
unistd_unlink.o \
unistd_wildcard_expand.o \
utime_utime.o
MATH_LIB = \
complex_carg.o \
complex_cargf.o \
complex_cargl.o \
complex_cimag.o \
complex_cimagf.o \
complex_cimagl.o \
complex_conj.o \
complex_conjf.o \
complex_conjl.o \
complex_creal.o \
complex_crealf.o \
complex_creall.o \
fenv_feclearexcept.o \
fenv_fegetenv.o \
fenv_fegetexceptflag.o \
fenv_fegetround.o \
fenv_feholdexcept.o \
fenv_feraiseexcept.o \
fenv_fesetenv.o \
fenv_fesetexceptflag.o \
fenv_fetestexcept.o \
fenv_fetestround.o \
fenv_feupdateenv.o \
math_acos.o \
math_acosf.o \
math_acosh.o \
math_acoshf.o \
math_asin.o \
math_asinf.o \
math_asinh.o \
math_asinhf.o \
math_atan.o \
math_atan2.o \
math_atan2f.o \
math_atanf.o \
math_atanh.o \
math_atanhf.o \
math_cbrt.o \
math_cbrtf.o \
math_ceil.o \
math_ceilf.o \
math_copysign.o \
math_copysignf.o \
math_cos.o \
math_cosf.o \
math_cosh.o \
math_coshf.o \
math_erf.o \
math_erfc.o \
math_erfcf.o \
math_erff.o \
math_exp.o \
math_exp2.o \
math_exp2f.o \
math_expf.o \
math_expm1.o \
math_expm1f.o \
math_fabs.o \
math_fabsf.o \
math_fdim.o \
math_fdimf.o \
math_floor.o \
math_floorf.o \
math_fma.o \
math_fmaf.o \
math_fmax.o \
math_fmaxf.o \
math_fmin.o \
math_fminf.o \
math_fmod.o \
math_fmodf.o \
math_fpclassify.o \
math_frexp.o \
math_frexpf.o \
math_huge_val.o \
math_huge_valf.o \
math_hypot.o \
math_hypotf.o \
math_ilogb.o \
math_ilogbf.o \
math_inf.o \
math_inff.o \
math_init_exit.o \
math_isinf.o \
math_isnan.o \
math_isfinite.o \
math_isunordered.o \
math_kernel_cosf.o \
math_kernel_sinf.o \
math_kernel_tanf.o \
math_ldexp.o \
math_ldexpf.o \
math_lgamma.o \
math_lgammaf.o \
math_llrint.o \
math_log.o \
math_log10.o \
math_log10f.o \
math_log1p.o \
math_log1pf.o \
math_log2.o \
math_log2f.o \
math_logb.o \
math_logbf.o \
math_logf.o \
math_lrint.o \
math_lrintf.o \
math_lround.o \
math_lroundf.o \
math_modf.o \
math_modff.o \
math_nan.o \
math_nanf.o \
math_nearbyint.o \
math_nearbyintf.o \
math_nextafter.o \
math_nextafterf.o \
math_pow.o \
math_powf.o \
math_remainder.o \
math_remainderf.o \
math_remquo.o \
math_remquof.o \
math_rem_pio2f.o \
math_rint.o \
math_rintf.o \
math_round.o \
math_roundf.o \
math_scalbn.o \
math_scalbnf.o \
math_signbit.o \
math_sin.o \
math_sinf.o \
math_sinh.o \
math_sinhf.o \
math_sqrt.o \
math_sqrtf.o \
math_tan.o \
math_tanf.o \
math_tanh.o \
math_tanhf.o \
math_tgamma.o \
math_tgammaf.o \
math_trunc.o \
math_truncf.o \
stdio_asprintf.o \
stdio_flush.o \
stdio_flush_all_files.o \
stdio_fprintf.o \
stdio_fscanf.o \
stdio_printf.o \
@ -533,16 +752,18 @@ MATH_LIB = \
stdio_vasprintf.o \
stdio_vfprintf.o \
stdio_vfscanf.o \
stdio_vsscanf.o \
stdio_vscanf.o \
stdio_vprintf.o \
stdio_vsnprintf.o \
stdio_vsprintf.o \
stdlib_atof.o \
stdlib_strtod.o \
stdlib_strtof.o \
time_difftime.o
MATH_LIB_881 = \
m881.lib_rev.o \
stdlib_machine_test.o \
$(MATH_LIB)
MATH_LIB_IEEE = \
@ -579,18 +800,11 @@ MATH_LIB_IEEE = \
math_subsf3.o \
math_truncdfsf2.o
STACK_LIB = \
stack.lib_rev.o \
stdlib_setjmp.o \
stdlib_stackextension.o \
stdlib_stackminframe.o \
stdlib_stackoverflow.o \
stdlib_stacksafezone.o
NET_LIB = \
net.lib_rev.o \
socket_accept.o \
socket_bind.o \
socket_check_daemon.o \
socket_connect.o \
socket_gethostbyaddr.o \
socket_gethostbyname.o \
@ -617,10 +831,13 @@ NET_LIB = \
socket_ioctl.o \
socket_isdaemon.o \
socket_listen.o \
socket_obtain_daemon.o \
socket_recv.o \
socket_recvfrom.o \
socket_recvmsg.o \
socket_select_signal.o \
socket_select.o \
socket_wait_select.o \
socket_send.o \
socket_sendmsg.o \
socket_sendto.o \
@ -629,7 +846,10 @@ NET_LIB = \
socket_socket.o \
socket_hook_entry.o \
socket_hstrerror.o \
socket_get_h_errno.o \
socket_set_h_errno.o \
stat_umask.o \
systeminfo_sysinfo.o \
usergroup_crypt.o \
usergroup_data.o \
usergroup_endgrent.o \
@ -741,7 +961,7 @@ MEMDEBUG_LIB = \
##############################################################################
LIBS_68K := $(LIBC_OBJS)/libc.a $(LIBSTACK_OBJS)/libstack.a $(LIBUNIX_OBJS)/libunix.a \
LIBS_68K := $(LIBC_OBJS)/libc.a $(LIBUNIX_OBJS)/libunix.a \
$(LIBNET_OBJS)/libnet.a $(LIBDEBUG_OBJS)/libdebug.a $(LIBAMIGA_OBJS)/libamiga.a \
$(LIBM_OBJS)/libm.a
LIBS_020 := $(LIBM881_OBJS)/libm881.a $(LIBS_68K)
@ -757,7 +977,7 @@ endif
##############################################################################
STARTUPS := nrcrt0.o nbcrt0.o nr32crt0.o nb32crt0.o ncrt0.o mainnb.o mainb.o mainb32.o
STARTUPS := nrcrt0.o nbcrt0.o nr32crt0.o nb32crt0.o ncrt0.o
##############################################################################
@ -767,9 +987,6 @@ all: \
lib/ncrt0.o \
lib/n32bcrt0.o \
lib/n32rcrt0.o \
lib/mainnb.o \
lib/mainb.o \
lib/mainb32.o \
lib/libm020/libm.a \
lib/libm.a \
lib/libb/libm.a \
@ -781,7 +998,7 @@ all: \
clean:
-$(DELETE) $(TYPE) $(LIBS_020) $(STARTUPS) \
$(LIBC_OBJS) $(LIBUNIX_OBJS) $(LIBM_OBJS) \
$(LIBM881_OBJS) $(LIBSTACK_OBJS) $(LIBNET_OBJS) $(LIBDEBUG_OBJS) \
$(LIBM881_OBJS) $(LIBNET_OBJS) $(LIBDEBUG_OBJS) \
$(LIBAMIGA_OBJS)
realclean:
@ -797,7 +1014,6 @@ version:
copy clone c.lib_rev.rev m.lib_rev.rev
copy clone c.lib_rev.rev m881.lib_rev.rev
copy clone c.lib_rev.rev net.lib_rev.rev
copy clone c.lib_rev.rev stack.lib_rev.rev
copy clone c.lib_rev.rev unix.lib_rev.rev
bumprev 1 amiga.lib
bumprev 1 c.lib
@ -805,7 +1021,6 @@ version:
bumprev 1 m.lib
bumprev 1 m881.lib
bumprev 1 net.lib
bumprev 1 stack.lib
bumprev 1 unix.lib
##############################################################################
@ -879,15 +1094,6 @@ lib/n32bcrt0.o : lib nb32crt0.o
lib/n32rcrt0.o : lib nr32crt0.o
@$(COPY) nr32crt0.o lib
lib/mainnb.o : lib mainnb.o
@$(COPY) mainnb.o lib
lib/mainb.o : lib mainb.o
@$(COPY) mainb.o lib
lib/mainb32.o : lib mainb32.o
@$(COPY) mainb32.o lib
##############################################################################
$(LIBAMIGA_OBJS)/amiga_hookentry.o : amiga_hookentry.c
@ -898,8 +1104,6 @@ $(LIBC_OBJS)/stdlib_swapstack.o : stdlib_swapstack.c
$(LIBC_OBJS)/stdlib_setjmp.o : stdlib_setjmp.c
$(LIBSTACK_OBJS)/stdlib_setjmp.o : stdlib_setjmp.c
##############################################################################
$(LIBC_OBJS)/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
@ -910,8 +1114,6 @@ $(LIBM_OBJS)/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
$(LIBM881_OBJS)/m881.lib_rev.o : m881.lib_rev.c m881.lib_rev.h
$(LIBSTACK_OBJS)/stack.lib_rev.o : stack.lib_rev.c stack.lib_rev.h
$(LIBNET_OBJS)/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
$(LIBDEBUG_OBJS)/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
@ -922,43 +1124,61 @@ $(LIBAMIGA_OBJS)/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
$(LIBC_OBJS)/stdlib_stacksize.o : stdlib_stacksize.c stdlib_gcc_help.h
$(LIBC_OBJS)/stdlib_getdefstacksize.o : stdlib_getdefstacksize.c stdlib_gcc_help.h
$(LIBC_OBJS)/stdlib_shell_escape.o : stdlib_shell_escape.c stdlib_gcc_help.h
$(LIBC_OBJS)/stdlib_alloca.o : stdlib_alloca.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_alloca.o : stdlib_alloca.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_calloc.o : stdlib_calloc.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_calloc.o : stdlib_calloc.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_free.o : stdlib_free.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_free.o : stdlib_free.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_init_exit.o : stdlib_init_exit.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_malloc.o : stdlib_malloc.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_malloc.o : stdlib_malloc.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_slab.o : stdlib_slab.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_realloc.o : stdlib_realloc.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_slab_purge_threshold.o : stdlib_slab_purge_threshold.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_red_black.o : stdlib_red_black.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_get_slab_stats.o : stdlib_get_slab_stats.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_free_unused_slabs.o : stdlib_free_unused_slabs.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_decay_unused_slabs.o : stdlib_decay_unused_slabs.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_get_slab_usage.o : stdlib_get_slab_usage.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_get_slab_allocations.o : stdlib_get_slab_allocations.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_realloc.o : stdlib_realloc.c stdlib_memory.h include/stdlib.h
$(LIBC_OBJS)/stdlib_red_black.o : stdlib_red_black.c stdlib_memory.h include/stdlib.h
##############################################################################
# The -fbaserel32 option requires the CPU type to be 68010/68020, too.
# The -fbaserel32 option requires the CPU type to be 68020, too.
ifneq (,$(findstring fbaserel32,$(CODE_FLAGS)))
LOCAL_CODE_FLAGS := $(CODE_FLAGS) $(CODE_TYPE)
else
LOCAL_CODE_FLAGS := $(CODE_FLAGS)
endif
$(LIBM881_OBJS)/math_init_exit.o : math_init_exit.c
@echo "Compiling $< [$(TYPE):m881]"
@$(CC) -o $(LIBM881_OBJS)/math_init_exit.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) -DM68881_FLOATING_POINT_SUPPORT $(INCLUDES) $<
$(LIBC_OBJS)/stdlib_machine_test.o : stdlib_machine_test.c
@echo "Compiling $< [$(TYPE):c]"
@$(CC) -o $(LIBC_OBJS)/stdlib_machine_test.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) $(INCLUDES) $<
$(LIBM881_OBJS)/stdlib_machine_test.o : stdlib_machine_test.c
@echo "Compiling $< [$(TYPE):c]"
@$(CC) -o $(LIBM881_OBJS)/stdlib_machine_test.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) $(INCLUDES) -DM68881_FLOATING_POINT_SUPPORT $<
$(LIBC_OBJS)/stdlib_showerror.o : stdlib_showerror.c
@echo "Compiling $< [$(TYPE):c]"
@$(CC) -o $(LIBC_OBJS)/stdlib_showerror.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) $(INCLUDES) $<
$(LIBC_OBJS)/stdlib_main.o : stdlib_main.c
@echo "Compiling $< [$(TYPE):c]"
@$(CC) -o $(LIBC_OBJS)/stdlib_main.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) $(INCLUDES) stdlib_main.c
##############################################################################
$(LIBC_OBJS)/stdlib_alloca_debug.o : stdlib_alloca.c
@ -1047,16 +1267,6 @@ $(LIBM881_OBJS)/libm881.a : $(LIBM881_OBJS) $(foreach file,$(MATH_LIB_881),$(LIB
##############################################################################
$(LIBSTACK_OBJS) :
$(MAKEDIR) $@
$(LIBSTACK_OBJS)/libstack.a : $(LIBSTACK_OBJS) $(foreach file,$(STACK_LIB),$(LIBSTACK_OBJS)/$(file))
-$(DELETE) $@
@$(AR) $@ $(foreach file,$(STACK_LIB),$(LIBSTACK_OBJS)/$(file))
$(RANLIB) $@
##############################################################################
$(LIBNET_OBJS) :
$(MAKEDIR) $@
@ -1107,18 +1317,6 @@ ncrt0.o : ncrt0.S
@echo "Assembling $< [large_data]"
@$(CC) -traditional -o $@ -c ncrt0.S
mainb32.o : stdlib_main.c
@echo "Compiling $< [small_data32]"
@$(CC) -o mainb32.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel32 -DSMALL_DATA32 -m68020-60 -DM68020 stdlib_main.c
mainb.o : stdlib_main.c
@echo "Compiling $< [small_data]"
@$(CC) -o mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel -DSMALL_DATA -m68000 stdlib_main.c
mainnb.o : stdlib_main.c
@echo "Compiling $< [large_data]"
@$(CC) -o mainnb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -m68000 stdlib_main.c
##############################################################################
CONSTRUCTOR_FILES = \
@ -1126,12 +1324,15 @@ CONSTRUCTOR_FILES = \
dirent_closedir.c \
locale_init_exit.c \
math_init_exit.c \
sas_profile.c \
socket_init_exit.c \
stdio_file_init.c \
stdio_init_exit.c \
stdlib_alloca.c \
stdlib_arg.c \
stdlib_malloc.c \
stdlib_program_name.c \
stdlib_setenv.c \
stdlib_stackextension.c \
time_clock.c \
unistd_chdir_exit.c \
unistd_init_exit.c \

File diff suppressed because it is too large Load Diff

5
library/TODO Normal file
View File

@ -0,0 +1,5 @@
C99 math functions:
fma() and fmaf() should be implemented as a true "fused" multiply
and add function rather than the sequential operation implied in the
current implementation.

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga.lib_rev.c,v 1.2 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga.lib_rev.c,v 1.3 2006-01-08 12:04:21 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 189
#define DATE "5.3.2005"
#define VERS "amiga.lib 1.189"
#define VSTRING "amiga.lib 1.189 (5.3.2005)\r\n"
#define VERSTAG "\0$VER: amiga.lib 1.189 (5.3.2005)"
#define REVISION 215
#define DATE "26.6.2017"
#define VERS "amiga.lib 1.215"
#define VSTRING "amiga.lib 1.215 (26.6.2017)\r\n"
#define VERSTAG "\0$VER: amiga.lib 1.215 (26.6.2017)"

View File

@ -1 +1 @@
189
215

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_acrypt.c,v 1.2 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga_acrypt.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -31,10 +31,14 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#define ACrypt __ACrypt
#include <exec/types.h>
#include <string.h>
#include <clib/alib_protos.h>
#undef ACrypt
/****************************************************************************/
#include "debug.h"
@ -45,6 +49,10 @@
/****************************************************************************/
UBYTE * ACrypt(UBYTE * buffer, const UBYTE * password, const UBYTE * user);
/****************************************************************************/
UBYTE *
ACrypt(UBYTE * buffer, const UBYTE * password, const UBYTE * user)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_addtof.c,v 1.3 2005-02-25 10:14:20 obarthel Exp $
* $Id: amiga_addtof.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_argarraydone.c,v 1.2 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga_argarraydone.c,v 1.4 2006-09-25 14:05:31 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -48,7 +48,7 @@
/****************************************************************************/
extern char **CXLIB_argarray;
extern const unsigned char **CXLIB_argarray;
extern struct DiskObject * CXLIB_disko;

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_argarrayinit.c,v 1.2 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga_argarrayinit.c,v 1.7 2008-09-30 14:09:00 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -52,6 +52,14 @@
/****************************************************************************/
#ifdef __amigaos4__
#define MEMORY_TYPE MEMF_PRIVATE
#else
#define MEMORY_TYPE MEMF_ANY
#endif /* __amigaos4__ */
/****************************************************************************/
const unsigned char ** CXLIB_argarray;
struct DiskObject * CXLIB_disko;
@ -61,23 +69,23 @@ struct DiskObject * CXLIB_disko;
STRPTR *
ArgArrayInit(LONG argc, CONST_STRPTR * argv)
{
unsigned char ** result = NULL;
STRPTR * result = NULL;
if(argc != 0) /* run from CLI */
{
int i;
LONG i;
if(argc == 1)
goto out; /* skip command name */
CXLIB_argarray = (const unsigned char **)AllocVec(sizeof(char *) * argc,MEMF_ANY|MEMF_CLEAR);
CXLIB_argarray = (const unsigned char **)AllocVec(sizeof(char *) * argc,MEMORY_TYPE|MEMF_CLEAR);
if(CXLIB_argarray == NULL)
goto out;
for(i = 1 ; i < argc ; i++)
CXLIB_argarray[i-1] = argv[i];
CXLIB_argarray[i-1] = (unsigned char *)argv[i];
result = (unsigned char **)CXLIB_argarray;
result = (STRPTR *)CXLIB_argarray;
}
else if (IconBase != NULL)
{
@ -90,7 +98,7 @@ ArgArrayInit(LONG argc, CONST_STRPTR * argv)
if(CXLIB_disko == NULL)
goto out;
result = (unsigned char **)CXLIB_disko->do_ToolTypes;
result = (STRPTR *)CXLIB_disko->do_ToolTypes;
}
out:

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_argint.c,v 1.2 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga_argint.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_argstring.c,v 1.2 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga_argstring.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_beginio.c,v 1.3 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga_beginio.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -103,6 +103,10 @@ BeginIO(struct IORequest *ior)
/****************************************************************************/
VOID BeginIO(struct IORequest *ior);
/****************************************************************************/
VOID
BeginIO(struct IORequest *ior)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_callhook.c,v 1.2 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga_callhook.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
*
* $Id: amiga_callhooka.asm,v 1.2 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga_callhooka.asm,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=8
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_callhooka.c,v 1.2 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga_callhooka.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_coercemethod.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_coercemethod.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_createextio.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_createextio.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -50,6 +50,10 @@
/****************************************************************************/
struct IORequest * CreateExtIO(CONST struct MsgPort * port, LONG io_size);
/****************************************************************************/
struct IORequest *
CreateExtIO(CONST struct MsgPort * port, LONG io_size)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_createport.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_createport.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -50,6 +50,10 @@
/****************************************************************************/
struct MsgPort * CreatePort(CONST_STRPTR name, LONG pri);
/****************************************************************************/
struct MsgPort *
CreatePort(CONST_STRPTR name, LONG pri)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_createstdio.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_createstdio.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -50,6 +50,10 @@
/****************************************************************************/
struct IOStdReq * CreateStdIO(CONST struct MsgPort * port);
/****************************************************************************/
struct IOStdReq *
CreateStdIO(CONST struct MsgPort * port)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_createtask.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_createtask.c,v 1.6 2006-09-25 15:12:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -46,6 +46,12 @@
/****************************************************************************/
#ifndef _STDLIB_PROFILE_H
#include "stdlib_profile.h"
#endif /* _STDLIB_PROFILE_H */
/****************************************************************************/
#include "macros.h"
#include "debug.h"
@ -203,6 +209,10 @@ CreateTask(CONST_STRPTR name,LONG pri,CONST APTR init_pc,ULONG stack_size)
/****************************************************************************/
struct Task * CreateTask(CONST_STRPTR name,LONG pri,CONST APTR init_pc,ULONG stack_size);
/****************************************************************************/
struct Task *
CreateTask(CONST_STRPTR name,LONG pri,CONST APTR init_pc,ULONG stack_size)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_deleteextio.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_deleteextio.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -50,6 +50,10 @@
/****************************************************************************/
VOID DeleteExtIO(struct IORequest * io);
/****************************************************************************/
VOID
DeleteExtIO(struct IORequest * io)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_deleteport.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_deleteport.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -50,6 +50,10 @@
/****************************************************************************/
VOID DeletePort(struct MsgPort * port);
/****************************************************************************/
VOID
DeletePort(struct MsgPort * port)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_deletestdio.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_deletestdio.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -50,6 +50,10 @@
/****************************************************************************/
VOID DeleteStdIO(struct IOStdReq * io);
/****************************************************************************/
VOID
DeleteStdIO(struct IOStdReq * io)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_deletetask.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_deletetask.c,v 1.5 2006-09-25 15:12:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -63,6 +63,10 @@ DeleteTask(struct Task *tc)
/****************************************************************************/
VOID DeleteTask(struct Task *tc);
/****************************************************************************/
VOID
DeleteTask(struct Task *tc)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_domethod.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_domethod.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_dosupermethod.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_dosupermethod.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_dotimer.c,v 1.3 2005-03-06 09:00:16 obarthel Exp $
* $Id: amiga_dotimer.c,v 1.8 2006-04-05 06:43:56 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -44,11 +44,34 @@
/****************************************************************************/
#ifndef _STDLIB_PROFILE_H
#include "stdlib_profile.h"
#endif /* _STDLIB_PROFILE_H */
/****************************************************************************/
#include "macros.h"
#include "debug.h"
/****************************************************************************/
/* A quick workaround for the timeval/timerequest->TimeVal/TimeRequest
change in the recent OS4 header files. */
#if defined(__NEW_TIMEVAL_DEFINITION_USED__)
#define timeval TimeVal
#define tv_secs Seconds
#define tv_micro Microseconds
#define timerequest TimeRequest
#define tr_node Request
#define tr_time Time
#endif /* __NEW_TIMEVAL_DEFINITION_USED__ */
/****************************************************************************/
LONG
DoTimer(struct timeval *tv,LONG unit,LONG command)
{
@ -56,12 +79,15 @@ DoTimer(struct timeval *tv,LONG unit,LONG command)
struct MsgPort * mp;
LONG error;
PROFILE_OFF();
assert( tv != NULL );
#if defined(__amigaos4__)
{
mp = AllocSysObjectTags(ASOT_PORT,
ASOPORT_Action, PA_SIGNAL,
ASOPORT_AllocSig, FALSE,
ASOPORT_Signal, SIGB_SINGLE,
ASOPORT_Target, FindTask(NULL),
TAG_DONE);
@ -105,14 +131,10 @@ DoTimer(struct timeval *tv,LONG unit,LONG command)
tr->tr_time.tv_secs = tv->tv_secs;
tr->tr_time.tv_micro = tv->tv_micro;
PROFILE_OFF();
SetSignal(0,SIGF_SINGLE);
SetSignal(0,(1UL << mp->mp_SigBit));
error = DoIO((struct IORequest *)tr);
PROFILE_ON();
tv->tv_secs = tr->tr_time.tv_secs;
tv->tv_micro = tr->tr_time.tv_micro;
@ -137,5 +159,7 @@ DoTimer(struct timeval *tv,LONG unit,LONG command)
}
#endif /* __amigaos4__ */
PROFILE_ON();
return(error);
}

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_fastrand.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_fastrand.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_freeievents.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_freeievents.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
*
* $Id: amiga_hookentry.asm,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_hookentry.asm,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=8
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_hookentry.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_hookentry.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_hotkey.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_hotkey.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_invertstring.c,v 1.3 2005-02-25 10:14:20 obarthel Exp $
* $Id: amiga_invertstring.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_newlist.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_newlist.c,v 1.4 2006-09-25 15:12:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -43,6 +43,10 @@
/****************************************************************************/
VOID NewList(struct List *lh);
/****************************************************************************/
VOID
NewList(struct List *lh)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_rangerand.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_rangerand.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_remtof.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_remtof.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_rexxvars.c,v 1.3 2005-01-09 10:10:40 obarthel Exp $
* $Id: amiga_rexxvars.c,v 1.19 2008-04-18 10:11:59 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -34,17 +34,31 @@
/* We don't want to pull in <clib/alib_protos.h> */
#define CLIB_ALIB_PROTOS_H
/****************************************************************************/
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
#ifndef _STDLIB_CONSTRUCTOR_H
#include "stdlib_constructor.h"
#endif /* _STDLIB_CONSTRUCTOR_H */
/****************************************************************************/
#include <rexx/rxslib.h>
#include <rexx/errors.h>
/****************************************************************************/
/* This is used by the stub function prototypes. The ARexx header files
do not define it, though. */
struct Environment;
/****************************************************************************/
#define __NOLIBBASE__
#include <proto/rexxsyslib.h>
@ -60,7 +74,13 @@ static struct RexxSysIFace * IRexxSys;
/****************************************************************************/
CLIB_CONSTRUCTOR(__rexxvars_init)
BOOL CheckRexxMsg(struct RexxMsg *message);
LONG GetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR *buffer_pointer);
LONG SetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR value,LONG length);
/****************************************************************************/
CLIB_CONSTRUCTOR(rexxvars_init)
{
ENTER();
@ -80,12 +100,14 @@ CLIB_CONSTRUCTOR(__rexxvars_init)
}
#endif /* __amigaos4__ */
LEAVE();
CONSTRUCTOR_SUCCEED();
}
/****************************************************************************/
CLIB_DESTRUCTOR(__rexxvars_exit)
CLIB_DESTRUCTOR(rexxvars_exit)
{
ENTER();
@ -138,29 +160,411 @@ CheckRexxMsg(struct RexxMsg *message)
/****************************************************************************/
/* The following function works in about like the original, except that it's
not reentrant, does not fill in a pointer to the variable itself and
requires rexxsyslib.library V45. */
LONG
GetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR *buffer_pointer)
{
static UBYTE buffer[256];
LONG result;
#if defined(__amigaos4__)
/* The following uses a function which was added to rexxsyslib.library V45.
We therefore have a minimum library version requirement. */
if(RexxSysBase == NULL || RexxSysBase->lib_Version < 45 || NOT IsRexxMsg(message))
/****************************************************************************/
#include <exec/emulation.h>
/****************************************************************************/
STATIC VOID
_FreeSpace(struct Environment * env,APTR mem,LONG size)
{
result = ERR10_010; /* invalid message packet */
goto out;
STATIC CONST UWORD code[] = { 0x4EAE,0xFF88,0x4E75 }; /* jsr -120(a6) ; rts */
EmulateTags(code,
ET_RegisterA0,env,
ET_RegisterA1,mem,
ET_RegisterD0,size,
ET_RegisterA6,RexxSysBase,
TAG_END);
}
/* The 256 character limit isn't good. This should be done differently. */
result = GetRexxVarFromMsg(variable_name,buffer,message);
if(result != 0)
STATIC APTR
_GetSpace(struct Environment * env,LONG size)
{
STATIC CONST UWORD code[] = { 0x4EAE,0xFF8E,0x4E75 }; /* jsr -114(a6) ; rts */
APTR result;
result = (APTR)EmulateTags(code,
ET_RegisterA0,env,
ET_RegisterD0,size,
ET_RegisterA6,RexxSysBase,
TAG_END);
return(result);
}
STATIC LONG
_IsSymbol(STRPTR name,LONG * symbol_length_ptr)
{
STATIC CONST UWORD code[] = { 0x4EAE,0xFF9A,0x2481,0x4E75 }; /* jsr -102(a6) ; move.l d1,(a2) ; rts */
LONG result;
result = (LONG)EmulateTags(code,
ET_RegisterA0,name,
ET_RegisterA2,symbol_length_ptr,
ET_RegisterA6,RexxSysBase,
TAG_END);
return(result);
}
STATIC VOID
_CurrentEnv(struct RexxTask *task,struct Environment ** environment_ptr)
{
STATIC CONST UWORD code[] = { 0x4EAE,0xFF94,0x2488,0x4E75 }; /* jsr -108(a6) ; move.l a0,(a2) ; rts */
EmulateTags(code,
ET_RegisterA0,task,
ET_RegisterA2,environment_ptr,
ET_RegisterA6,RexxSysBase,
TAG_END);
}
STATIC struct Node *
_FetchValue(struct Environment * env,struct NexxStr * stem,struct NexxStr * compound,struct Node *symbol_table_node,LONG * is_literal_ptr,struct NexxStr ** value_ptr)
{
STATIC CONST UWORD code[] = { 0x4EAE,0xFFB8,0x2488,0x2681,0x4E75 }; /* jsr -72(a6) ; move.l a0,(a2) ; move.l d1,(a3) ; rts */
struct Node * result;
result = (struct Node *)EmulateTags(code,
ET_RegisterA0,env,
ET_RegisterA1,stem,
ET_RegisterD0,compound,
ET_RegisterD1,symbol_table_node,
ET_RegisterA2,is_literal_ptr,
ET_RegisterA3,value_ptr,
ET_RegisterA6,RexxSysBase,
TAG_END);
return(result);
}
STATIC struct Node *
_EnterSymbol(struct Environment * env,struct NexxStr * stem,struct NexxStr * compound)
{
STATIC CONST UWORD code[] = { 0x4EAE,0xFFBE,0x4E75 }; /* jsr -66(a6) ; rts */
struct Node * result;
result = (struct Node *)EmulateTags(code,
ET_RegisterA0,env,
ET_RegisterA1,stem,
ET_RegisterD0,compound,
ET_RegisterA6,RexxSysBase,
TAG_END);
return(result);
}
STATIC VOID
_SetValue(struct Environment * env,struct NexxStr * value,struct Node * symbol_table_node)
{
STATIC CONST UWORD code[] = { 0x4EAE,0xFFAC,0x4E75 }; /* jsr -84(a6) ; rts */
EmulateTags(code,
ET_RegisterA0,env,
ET_RegisterA1,value,
ET_RegisterD0,symbol_table_node,
ET_RegisterA6,RexxSysBase,
TAG_END);
}
STATIC ULONG
_StrcpyN(STRPTR destination,STRPTR source,LONG length)
{
STATIC CONST UWORD code[] = { 0x4EAE,0xFEF2,0x4E75 }; /* jsr -270(a6) ; rts */
ULONG result;
result = (ULONG)EmulateTags(code,
ET_RegisterA0,destination,
ET_RegisterA1,source,
ET_RegisterD0,length,
ET_RegisterA6,RexxSysBase,
TAG_END);
return(result);
}
/****************************************************************************/
#elif defined(__GNUC__) && !defined(__amigaos4__)
/****************************************************************************/
/* A selection of lovingly hand-crafted 68k stub functions which call
into rexxsyslib.library LVOs that still used to be documented back
in 1987. */
/****************************************************************************/
#if defined(SMALL_DATA)
#define A4(x) "a4@(" #x ":W)"
#elif defined(SMALL_DATA32)
#define A4(x) "a4@(" #x ":L)"
#else
#define A4(x) #x
#endif /* SMALL_DATA */
/****************************************************************************/
/* struct Environment * a0,APTR block a1,LONG d0 */
asm("
.text
.even
.globl __FreeSpace
__FreeSpace:
moveal sp@(4),a0
moveal sp@(8),a1
movel sp@(12),d0
movel a6,sp@-
moveal "A4(_RexxSysBase)",a6
jsr a6@(-120)
moveal sp@+,a6
rts
");
/****************************************************************************/
/* struct Environment * a0,LONG d0 : APTR d0 */
asm("
.text
.even
.globl __GetSpace
__GetSpace:
moveal sp@(4),a0
movel sp@(8),d0
movel a6,sp@-
moveal "A4(_RexxSysBase)",a6
jsr a6@(-114)
moveal sp@+,a6
rts
");
/****************************************************************************/
/* STRPTR a0 : LONG d0, LONG d1 */
asm("
.text
.even
.globl __IsSymbol
__IsSymbol:
moveal sp@(4),a0
movel a6,sp@-
moveal "A4(_RexxSysBase)",a6
jsr a6@(-102)
moveal sp@+,a6
moveal sp@(8),a1
movel d1,a1@
rts
");
/****************************************************************************/
/* struct RexxTask * a0 : struct Environment * a0 */
asm("
.text
.even
.globl __CurrentEnv
__CurrentEnv:
moveal sp@(4),a0
movel a6,sp@-
moveal "A4(_RexxSysBase)",a6
jsr a6@(-108)
moveal sp@+,a6
moveal sp@(8),a1
movel a0,a1@
rts
");
/****************************************************************************/
/* struct Environment * a0,struct NexxStr * a1,struct NexxStr * d0,struct Node * d1 : struct NexxStr * a0, LONG d1 */
asm("
.text
.even
.globl __FetchValue
__FetchValue:
moveal sp@(4),a0
moveal sp@(8),a1
movel sp@(12),d0
movel sp@(16),d1
movel a6,sp@-
moveal "A4(_RexxSysBase)",a6
jsr a6@(-72)
moveal sp@+,a6
moveal sp@(20),a1
movel a0,a1@
moveal sp@(24),a1
movel d1,a1@
rts
");
/****************************************************************************/
/* struct Environment a0, struct NexxStr *a1, struct NexxStr * d0 : struct Node * d0 */
asm("
.text
.even
.globl __EnterSymbol
__EnterSymbol:
moveal sp@(4),a0
moveal sp@(8),a1
movel sp@(12),d0
movel a6,sp@-
moveal "A4(_RexxSysBase)",a6
jsr a6@(-66)
moveal sp@+,a6
rts
");
/****************************************************************************/
/* struct Environment *a0, struct NexxStr *a1, struct Node * d0 */
asm("
.text
.even
.globl __SetValue
__SetValue:
moveal sp@(4),a0
moveal sp@(8),a1
movel sp@(12),d0
movel a6,sp@-
moveal "A4(_RexxSysBase)",a6
jsr a6@(-84)
moveal sp@+,a6
rts
");
/****************************************************************************/
/* STRPTR a0,STRPTR a1,LONG d0 : ULONG d0 */
asm("
.text
.even
.globl __StrcpyN
__StrcpyN:
moveal sp@(4),a0
moveal sp@(8),a1
movel sp@(12),d0
movel a6,sp@-
moveal "A4(_RexxSysBase)",a6
jsr a6@(-270)
moveal sp@+,a6
rts
");
/****************************************************************************/
/* Function prototypes for the 68k stubs. */
extern VOID _FreeSpace(struct Environment * env,APTR mem,LONG size);
extern APTR _GetSpace(struct Environment * env,LONG size);
extern LONG _IsSymbol(STRPTR name,LONG * symbol_length_ptr);
extern VOID _CurrentEnv(struct RexxTask *task,struct Environment ** environment_ptr);
extern struct Node * _FetchValue(struct Environment * env,struct NexxStr * stem,struct NexxStr * compound,struct Node *symbol_table_node,LONG * is_literal_ptr,struct NexxStr ** value_ptr);
extern struct Node * _EnterSymbol(struct Environment * env,struct NexxStr * stem,struct NexxStr * compound);
extern VOID _SetValue(struct Environment * env,struct NexxStr * value,struct Node * symbol_table_node);
extern ULONG _StrcpyN(STRPTR destination,STRPTR source,LONG length);
/****************************************************************************/
#endif /* __GNUC__ && !__amigaos4__ */
/****************************************************************************/
/* Releases a string structure, if it's not owned at the time. */
STATIC VOID
FreeString(struct Environment * environment,struct NexxStr * ns)
{
/* Not currently owned? */
if(!(ns->ns_Flags & NSF_KEEP))
_FreeSpace(environment,ns,sizeof(*ns) + ns->ns_Length + 1);
}
/****************************************************************************/
/* Allocates and initializes a string structure. */
STATIC struct NexxStr *
MakeString(struct Environment * environment,STRPTR value,LONG length)
{
struct NexxStr * result = NULL;
struct NexxStr * ns;
/* Allocate memory for the NexxStr and the NUL-terminated string itself. */
ns = _GetSpace(environment,sizeof(*ns) + length + 1);
if(ns == NULL)
goto out;
(*buffer_pointer) = buffer;
/* Fill in the NexxStr structure, copy the string and remember the hash value for it. */
ns->ns_Ivalue = 0;
ns->ns_Length = length;
ns->ns_Flags = NSF_STRING;
ns->ns_Hash = _StrcpyN((STRPTR)ns->ns_Buff,value,length);
/* Copying the string did not NUL-terminate it. */
ns->ns_Buff[length] = '\0';
result = ns;
out:
@ -169,25 +573,169 @@ GetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR *buffer_pointer)
/****************************************************************************/
/* The following function works in about like the original, except that it
ignores the length parameter (the value needs to be a NUL-terminated string)
and requires rexxsyslib.library V45. */
LONG
SetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR value,ULONG length)
/* Classifies a symbol and returns the stem and compound parts. */
STATIC LONG
TypeString(STRPTR variable_name,struct Environment * environment,struct NexxStr ** compound_ptr,struct NexxStr ** stem_ptr)
{
LONG result;
struct NexxStr * compound;
struct NexxStr * stem = NULL;
LONG error = ERR10_003; /* no memory available */
LONG stem_length;
LONG symbol_length;
STRPTR dot;
/* The following uses a function which was added to rexxsyslib.library V45.
We therefore have a minimum library version requirement. */
if(RexxSysBase == NULL || RexxSysBase->lib_Version < 45 || NOT IsRexxMsg(message))
(*compound_ptr) = NULL;
(*stem_ptr) = NULL;
/* The 'compound' part is the entire variable name, including all dots and
what's in between them. */
compound = MakeString(environment,variable_name,strlen(variable_name));
if(compound == NULL)
goto out;
/* Find the first dot in the variable name. Everything in front of it
and including the dot constitutes the 'stem' part. If there is no dot
in the name, then the 'compound' and 'stem' parts are identical. */
dot = memchr(compound->ns_Buff,'.',compound->ns_Length);
if(dot != NULL)
stem_length = ((char *)dot - (char *)compound->ns_Buff) + 1;
else
stem_length = compound->ns_Length;
/* Make a copy of the 'stem' part. */
stem = MakeString(environment,variable_name,stem_length);
if(stem == NULL)
goto out;
/* Figure out if this is a symbol after all. */
_IsSymbol((STRPTR)stem->ns_Buff,&symbol_length);
/* The entire name must match the stem part. */
if(symbol_length != stem->ns_Length)
{
result = ERR10_010; /* invalid message packet */
error = ERR10_040; /* invalid variable name */
goto out;
}
result = SetRexxVarFromMsg(variable_name,value,message);
(*compound_ptr) = compound;
(*stem_ptr) = stem;
error = 0;
out:
return(result);
if(error != 0)
{
if(compound != NULL)
FreeString(environment,compound);
if(stem != NULL)
FreeString(environment,stem);
}
return(error);
}
/****************************************************************************/
/* Retrieves the value of a variable from the current storage environment. */
LONG
GetRexxVar(struct RexxMsg *context,STRPTR variable_name,STRPTR * return_value)
{
struct Environment * environment;
struct NexxStr * ns;
struct NexxStr * compound_string;
struct NexxStr * stem_string;
LONG is_literal;
LONG error;
(*return_value) = NULL;
if(!CheckRexxMsg(context))
{
error = ERR10_010; /* invalid message packet */
goto out;
}
/* Find the current storage environment. */
_CurrentEnv(context->rm_TaskBlock,&environment);
/* Create the stem and component parts. */
error = TypeString(variable_name,environment,&compound_string,&stem_string);
if(error != 0)
goto out;
/* Look up the value. NOTE: _FetchValue() will free the two 'struct NexxStr *' provided. */
_FetchValue(environment,stem_string,compound_string,NULL,&is_literal,&ns);
/* If this is not a literal, return a pointer to the string. */
if(!is_literal)
(*return_value) = (STRPTR)ns->ns_Buff;
error = 0;
out:
return(error);
}
/****************************************************************************/
/* Assigns a value to a variable in the current storage environment. */
LONG
SetRexxVar(struct RexxMsg *context,STRPTR variable_name,STRPTR value,LONG length)
{
struct Environment * environment;
struct NexxStr * compound_string;
struct NexxStr * stem_string;
struct Node * symbol_table_node;
struct NexxStr *value_string;
LONG error;
/* Make sure the value string is not too long */
if(length > 65535)
{
error = ERR10_009; /* symbol or string too long */
goto out;
}
if(!CheckRexxMsg(context))
{
error = ERR10_010; /* invalid message packet */
goto out;
}
/* Find the current storage environment. */
_CurrentEnv(context->rm_TaskBlock,&environment);
/* Create the stem and compound parts */
error = TypeString(variable_name,environment,&compound_string,&stem_string);
if(error != 0)
goto out;
/* Locate or create the symbol node. NOTE: _EnterSymbol() will put the two 'struct NexxStr *' into
the symbol table. It is not nececessary to free them. */
symbol_table_node = _EnterSymbol(environment,stem_string,compound_string);
if(symbol_table_node == NULL)
{
error = ERR10_003; /* no memory available */
goto out;
}
/* Create the value string. */
value_string = MakeString(environment,value,length);
if(value_string == NULL)
{
error = ERR10_003; /* no memory available */
goto out;
}
/* Install the value string. */
_SetValue(environment,value_string,symbol_table_node);
error = 0;
out:
return(error);
}

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_setsuperattrs.c,v 1.4 2005-02-25 10:14:20 obarthel Exp $
* $Id: amiga_setsuperattrs.c,v 1.5 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_timedelay.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_timedelay.c,v 1.4 2006-04-05 06:43:56 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -39,6 +39,19 @@
/****************************************************************************/
/* A quick workaround for the timeval/timerequest->TimeVal/TimeRequest
change in the recent OS4 header files. */
#if defined(__NEW_TIMEVAL_DEFINITION_USED__)
#define timeval TimeVal
#define tv_secs Seconds
#define tv_micro Microseconds
#endif /* __NEW_TIMEVAL_DEFINITION_USED__ */
/****************************************************************************/
LONG
TimeDelay(LONG unit,ULONG seconds,ULONG micros)
{

View File

@ -1,10 +1,10 @@
/*
* $Id: amiga_waitbeam.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_waitbeam.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

31
library/build_archive_amiga Executable file
View File

@ -0,0 +1,31 @@
; Simple release archive build script for Amiga systems.
; Set the name of the archive and the directory the
; files go into
set dir_name clib2-1.`type c.lib_rev.rev`
; Start with a clean slate
delete all quiet ram:$dir_name
; Create the directory, copy all the libraries, header files
; and release note files inside.
makedir ram:$dir_name
copy lib ram:${dir_name}/lib all clone quiet
copy include ram:${dir_name}/include all clone quiet
copy changes ram:$dir_name clone
; Delete the CVS data from the include directory
delete ram:${dir_name}/include/CVS ram:${dir_name}/include/sys/CVS ram:${dir_name}/include/arpa/CVS ram:${dir_name}/include/netinet/CVS all quiet
; Finally, create an lha archive in RAM:
pushcd ram:
lha -r -x -a a ${dir_name}-gcc-68k.lha ${dir_name}
popcd
; Move the archive back to this directory
copy ram:${dir_name}-gcc-68k.lha "" clone
; Clean up...
delete ram:$dir_name all quiet
unset dir_name

27
library/build_archive_unix.sh Executable file
View File

@ -0,0 +1,27 @@
#!/bin/sh
# Simple release archive build script for Unix systems.
# I typically build the library with a cross compiler.
# Set the name of the archive and the directory the
# files go into
export dir_name=clib2-1.`cat c.lib_rev.rev`
# Start with a clean slate
rm -rf $dir_name
# Create the directory, copy all the libraries, header files
# and release note files inside.
mkdir $dir_name
cp -pR lib $dir_name
cp -pR lib.threadsafe $dir_name
cp -pR include $dir_name
cp changes $dir_name
# Delete the CVS data from the include directory
rm -rf ${dir_name}/include/CVS ${dir_name}/include/sys/CVS ${dir_name}/include/arpa/CVS ${dir_name}/include/netinet/CVS
# Finally, create an lha type 5 archive; the Amiga LhA port
# can unpack it.
lha ao5q ${dir_name}-gcc-os4.lha ${dir_name}

View File

@ -1,10 +1,10 @@
/*
* $Id: c.lib_rev.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: c.lib_rev.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

View File

@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 189
#define DATE "5.3.2005"
#define VERS "c.lib 1.189"
#define VSTRING "c.lib 1.189 (5.3.2005)\r\n"
#define VERSTAG "\0$VER: c.lib 1.189 (5.3.2005)"
#define REVISION 215
#define DATE "26.6.2017"
#define VERS "c.lib 1.215"
#define VSTRING "c.lib 1.215 (26.6.2017)\r\n"
#define VERSTAG "\0$VER: c.lib 1.215 (26.6.2017)"

View File

@ -1 +1 @@
189
215

File diff suppressed because it is too large Load Diff

52
library/complex_carg.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_carg.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
double
carg(double complex z)
{
return(atan2(IMAG(z),REAL(z)));
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

52
library/complex_cargf.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_cargf.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
float
cargf(float complex z)
{
return(atan2(IMAG(z),REAL(z))); /* ZZZ this really needs to call ata2f(). */
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

52
library/complex_cargl.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_cargl.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
long double
cargl(long double complex z)
{
return(atan2(IMAG(z),REAL(z))); /* ZZZ this really needs to call atan2l(). */
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

52
library/complex_cimag.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_cimag.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
double
cimag(double complex z)
{
return(IMAG(z));
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

52
library/complex_cimagf.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_cimagf.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
float
cimagf(float complex z)
{
return(IMAG(z));
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

52
library/complex_cimagl.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_cimagl.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
long double
cimagl(long double complex z)
{
return(IMAG(z));
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

52
library/complex_conj.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_conj.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
double complex
conj(double complex z)
{
return(CONJ(z));
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

52
library/complex_conjf.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_conjf.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
float complex
conjf(float complex z)
{
return(CONJ(z));
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

52
library/complex_conjl.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_conjl.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
long double complex
conjl(long double complex z)
{
return(CONJ(z));
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

52
library/complex_creal.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_creal.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
double
creal(double complex z)
{
return(REAL(z));
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

52
library/complex_crealf.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_crealf.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
float
crealf(float complex z)
{
return(REAL(z));
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

52
library/complex_creall.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: complex_creall.c,v 1.2 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#include "complex_headers.h"
#endif /* _COMPLEX_HEADERS_H */
/****************************************************************************/
#if defined(COMPLEX_SUPPORT)
/****************************************************************************/
long double
creall(long double complex z)
{
return(REAL(z));
}
/****************************************************************************/
#endif /* COMPLEX_SUPPORT */

68
library/complex_headers.h Normal file
View File

@ -0,0 +1,68 @@
/*
* $Id: complex_headers.h,v 1.4 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _COMPLEX_HEADERS_H
#define _COMPLEX_HEADERS_H
/****************************************************************************/
#ifndef _MATH_FP_SUPPORT_H
#include "math_fp_support.h"
#endif /* _MATH_FP_SUPPORT_H */
/****************************************************************************/
#if defined(FLOATING_POINT_SUPPORT) && defined(__GNUC__) && defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
/****************************************************************************/
#include <complex.h>
#include <math.h>
/****************************************************************************/
#define COMPLEX_SUPPORT
/****************************************************************************/
#define REAL(z) (__real__ (z))
#define IMAG(z) (__imag__ (z))
#define CONJ(z) (~(z))
/****************************************************************************/
#endif /* FLOATING_POINT_SUPPORT && __GNUC__ && __STDC_VERSION__ */
/****************************************************************************/
#endif /* _COMPLEX_HEADERS_H */

3
library/contrib/README Normal file
View File

@ -0,0 +1,3 @@
This directory contains contributions which have not yet been integrated
with the clib2 library build but which should be in the CVS repository
both for safekeeping and for you to look at and adapt.

View File

@ -0,0 +1,183 @@
#ifndef __BYTESWAP_H
#define __BYTESWAP_H
#include <sys/types.h>
#include <stdint.h>
#if defined(__GNUC__)
#define __CONST_FUNC __attribute__((const))
#else
#define __CONST_FUNC /* Nothing */
#endif
/* Single value byteswap functions. */
extern __CONST_FUNC uint16_t bswap16(uint16_t);
extern __CONST_FUNC uint32_t bswap24(uint32_t);
extern __CONST_FUNC uint32_t bswap32(uint32_t);
#ifdef INT64_MIN
extern __CONST_FUNC uint64_t bswap64(uint64_t);
#endif
/* Block byteswap functions. The swab() function usually resides in unistd.h, so perhaps it should be moved there? */
/* NOTE: Contrary to the standard swab(), this version returns the "to" pointer and the pointers are not restrict
* qualified - so swapping buffer-contents in-place is supported.
* Also, swab24(), swab32() and swab64() are non-standard functions.
*/
extern void *swab(void *from,void *to,ssize_t nbytes);
extern void *swab24(void *from,void *to,ssize_t nbytes); /* Same as swab(), but operates on 24-bit words instead. */
extern void *swab32(void *from,void *to,ssize_t nbytes); /* Same as swab(), but operates on 32-bit words instead. */
extern void *swab64(void *from,void *to,ssize_t nbytes); /* Same as swab(), but operates on 64-bit words instead. */
#define swab16(x) swab(x)
/*
* Optimized inline-versions for the single-value functions follow.
* Only GCC+PPC and GCC+m68k support for now.
*/
#if defined(__GNUC__)
/* Select implementation. */
#define bswap16(x) (__builtin_constant_p(x))?__const_swap16(x):__swap16(x)
#define bswap24(x) (__builtin_constant_p(x))?__const_swap24(x):__swap24(x)
#define bswap32(x) (__builtin_constant_p(x))?__const_swap32(x):__swap32(x)
#define bswap64(x) (__builtin_constant_p(x))?__const_swap64(x):__swap64(x)
/* Assembler implementations */
#if defined(__PPC__)
static __inline__ __CONST_FUNC uint16_t __swap16(uint16_t u16) {
uint_fast16_t result;
__asm__("\
rlwinm %[result],%[u16],8,16,24\n\
rlwimi %[result],%[u16],24,24,31\n\
":[result]"=&r"(result):[u16]"r"(u16));
return(result);
}
static __inline__ __CONST_FUNC uint32_t __swap24(uint32_t u32) {
uint_fast32_t result;
__asm__("\
rlwinm %[result],%[u32],16,8,31\n\
rlwimi %[result],%[u32],0,16,24\n\
":[result]"=&r"(result):[u32]"r"(u32));
return(result);
}
static __inline__ __CONST_FUNC uint32_t __swap32(uint32_t u32) {
uint_fast32_t result;
__asm__("\
rlwinm %[result],%[u32],8,8,31\n\
rlwimi %[result],%[u32],24,0,7\n\
rlwimi %[result],%[u32],24,16,23\n\
":[result]"=&r"(result):[u32]"r"(u32));
return(result);
}
/*
* Note: __swap64() might perhaps be optimized a bit more by scheduling the
* instructions to alternate register-use, but this instead means there
* are two less registers free since "u64" and "result" may no longer overlap.
* Decisions, decisions....
*/
static __inline__ __CONST_FUNC uint64_t __swap64(uint64_t u64) {
uint_fast64_t result;
uint_fast32_t tmp;
__asm__("\
rlwinm %[tmp],%[u64],8,8,31\n\
rlwimi %[tmp],%[u64],24,0,7\n\
rlwimi %[tmp],%[u64],24,16,23\n\
rlwinm %[result],%L[u64],8,8,31\n\
rlwimi %[result],%L[u64],24,0,7\n\
rlwimi %[result],%L[u64],24,16,23\n\
or %L[result],%[tmp],%[tmp]\n\
":[result]"=r"(result),[tmp]"=&r"(tmp):[u64]"r"(u64));
return(result);
}
#elif defined(__mc68020__)
static __inline__ __CONST_FUNC uint16_t __swap16(uint16_t u16) {
__asm__("\
rol.w #8,%[u16]\n\
":[u16]"+d"(u16)::"cc");
return(u16);
}
static __inline__ __CONST_FUNC uint32_t __swap24(uint32_t u32) {
__asm__("\
rol.w #8,%[u32]\n\
swap %[u32]\n\
rol.w #8,%[u32]\n\
ror.l #8,%[u32]\n\
":[u32]"+d"(u32)::"cc");
return(u32);
}
static __inline__ __CONST_FUNC uint32_t __swap32(uint32_t u32) {
__asm__("\
rol.w #8,%[u32]\n\
swap %[u32]\n\
rol.w #8,%[u32]\n\
":[u32]"+d"(u32)::"cc");
return(u32);
}
static __inline__ __CONST_FUNC uint64_t __swap64(uint64_t u64) {
__asm__("\
rol.w #8,%[u64]\n\
rol.w #8,%L[u64]\n\
swap %[u64]\n\
swap %L[u64]\n\
rol.w #8,%[u64]\n\
rol.w #8,%L[u64]\n\
exg %[u64],L%[u64]\n\
":[u64]"+d"(u64)::"cc");
return(u64);
}
#else
/* Unknown or undefined architecture. Perhaps compiling with "-strict -ansi", but should not use this header then anyway. */
#undef bswap16
#undef bswap24
#undef bswap32
#undef bswap64
#define bswap16(x) (__builtin_constant_p(x))?__const_swap16(x):bswap16(x)
#define bswap24(x) (__builtin_constant_p(x))?__const_swap24(x):bswap24(x)
#define bswap32(x) (__builtin_constant_p(x))?__const_swap32(x):bswap32(x)
#define bswap64(x) (__builtin_constant_p(x))?__const_swap64(x):bswap64(x)
#endif
/* C implementations for constant values */
static __inline__ uint16_t __const_swap16(uint16_t u16) {
return(u16>>8|u16<<8);
}
static __inline__ uint32_t __const_swap24(uint32_t u32) {
return(((u32&0xff)<<16)|((u32&0xff00))|((u32&0xff0000)>>16));
}
static __inline__ uint32_t __const_swap32(uint32_t u32) {
return(((u32&0xff)<<24)|((u32&0xff00)<<8)|((u32&0xff0000)>>8)|((u32&0xff000000)>>24));
}
static __inline__ uint64_t __const_swap64(uint64_t u64) {
return(((u64&0xffLL)<<56)|((u64&0xff00LL)<<40)|((u64&0xff0000LL)<<24)|((u64&0xff000000LL)<<8)|
((u64&0xff00000000LL)>>8)|((u64&0xff0000000000LL)>>24)|((u64&0xff000000000000LL)>>40)|((u64&0xff00000000000000LL)>>56));
}
#endif /* __GNUC__ */
#endif /* __BYTESWAP_H */
/* vi:set ts=3: */

View File

@ -0,0 +1,28 @@
#if defined(__PPC__) && defined(__GNUC__)
asm("\
.text\n\
.align 2\n\
.globl bswap16\n\
.type bswap16, @function\n\
bswap16:\n\
# rlwinm %r4,%r3,8,16,24\n\
# rlwimi %r4,%r3,24,24,31\n\
# or %r3,%r4,%r4\n\
rlwimi %r3,%r3,16,8,15\n\
srwi %r3,%r3,8\n\
blr\n\
");
#else
#include <stdint.h>
uint16_t bswap16(uint16_t u16)
{
return(u16>>8|u16<<8);
}
#endif

View File

@ -0,0 +1,29 @@
#if defined(__PPC__) && defined(__GNUC__)
asm(" .text\n\
.align 2\n\
.globl bswap24\n\
.type bswap24, @function\n\
bswap32:\n\
rlwinm %r4,%r3,16,8,31\n\
rlwimi %r4,%r3,0,16,24\n\
or %r3,%r4,%r4\n\
blr\n\
");
#else
#include <stdint.h>
uint32_t bswap24(uint32_t u32)
{
return(
((u32&0xff)<<16)|
((u32&0xff00))|
((u32&0xff0000)>>16)
);
}
#endif

View File

@ -0,0 +1,31 @@
#if defined(__PPC__) && defined(__GNUC__)
asm(" .text\n\
.align 2\n\
.globl bswap32\n\
.type bswap32, @function\n\
bswap32:\n\
rlwinm %r4,%r3,8,8,31\n\
rlwimi %r4,%r3,24,0,7\n\
rlwimi %r4,%r3,24,16,23\n\
or %r3,%r4,%r4\n\
blr\n\
");
#else
#include <stdint.h>
uint32_t bswap32(uint32_t u32)
{
return(
((u32&0xff)<<24)|
((u32&0xff00)<<8)|
((u32&0xff0000)>>8)|
((u32&0xff000000)>>24)
);
}
#endif

View File

@ -0,0 +1,48 @@
#if defined(USE_64_BIT_INTS)
#if defined(__PPC__) && defined(__GNUC__)
asm(" .text\n\
.align 2\n\
.globl bswap64\n\
.type bswap64, @function\n\
bswap64:\n\
rlwinm %r5,%r3,8,8,31\n\
rlwimi %r5,%r3,24,0,7\n\
rlwimi %r5,%r3,24,16,23\n\
rlwinm %r3,%r4,8,8,31\n\
rlwimi %r3,%r4,24,0,7\n\
rlwimi %r3,%r4,24,16,23\n\
or %r4,%r5,%r5\n\
blr\n\
");
#else
#include <stdint.h>
uint64_t bswap64(uint64_t u64)
{
union {
uint64_t ll;
uint32_t l[2];
} v={.ll=u64};
uint32_t tmp;
tmp=v.l[0];
v.l[0]=((v.l[1]&0xff)<<24)|
((v.l[1]&0xff00)<<8)|
((v.l[1]&0xff0000)>>8)|
((v.l[1]&0xff000000)>>24);
v.l[1]=((tmp&0xff)<<24)|
((tmp&0xff00)<<8)|
((tmp&0xff0000)>>8)|
((tmp&0xff000000)>>24);
return(v.ll);
}
#endif
#endif

View File

@ -0,0 +1,70 @@
#if defined(__GNUC__) && defined(__PPC__)
/* r3=from, r4=to, r5=len/count, r6=index, r7=load/store/temp */
asm("\
.text\n\
.align 2\n\
.globl swab\n\
.type swab,@function\n\
swab:\n\
dcbt 0,%r3\n\
srawi. %r5,%r5,1\n\
bc 4,gt,.exit\n\
andi. %r7,%r3,3 # Check if we start on an address evenly divisible by 4.\n\
li %r6,0\n\
bc 4,gt,.preploop\n\
lhbrx %r7,%r6,%r3 # Fix alignment if needed.\n\
sthx %r7,%r6,%r4\n\
addi %r6,%r6,2\n\
subi %r5,%r5,1\n\
.preploop:\n\
andi. %r7,%r5,1 # Check if even or odd number of 16-bit words.\n\
srawi %r5,%r5,1 # Number of 32-bit words to half-swap.\n\
mtctr %r5\n\
bc 12,gt,.oddloop # Jump to loop for odd number of 16-bit words.\n\
.loop: # Loop is 'unrolled' by reading/writing 32-bit words.\n\
lwbrx %r7,%r6,%r3\n\
rotlwi %r7,%r7,16\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
bc 0,lt,.loop\n\
.exit:\n\
or %r3,%r4,%r4\n\
blr\n\
.oddloop:\n\
lwbrx %r7,%r6,%r3\n\
rotlwi %r7,%r7,16\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
bc 0,lt,.oddloop\n\
sub %r6,%r6,2\n\
lhbrx %r7,%r6,%r3 # Fix last 16-bit word.\n\
sthx %r7,%r6,%r4\n\
or %r3,%r4,%r4\n\
blr\n\
");
#else
#include <sys/types.h>
#include <stdint.h>
void *swab(void *from,void *to,ssize_t len)
{
int i;
uint16_t u16,*u16in=from,*u16out=to;
for(i=0;i<(len>>1);i++) {
u16=u16in[i];
u16out[i]=u16>>8|u16<<8;
}
return(u16out);
}
#endif

View File

@ -0,0 +1,91 @@
#if defined(__GNUC__) && defined(__PPC__)
/* r3=from, r4=to, r5=len/remaining, r6/r7=index & r7=temp, r8/r9/r10=read/write temp */
asm("\
.text\n\
.align 2\n\
.globl swab24\n\
.type swab24,@function\n\
swab24:\n\
dcbt 0,%r3\n\
li %r7,3\n\
divwu %r5,%r5,%r7\n\
andi. %r7,%r5,3\n\
srawi. %r5,%r5,2\n\
mtctr %r5\n\
or %r5,%r7,%r7\n\
li %r6,0\n\
bc 4,gt,.postfix\n\
.loop:\n\
lwbrx %r8,%r6,%r3\n\
addi %r7,%r6,4\n\
lwzx %r9,%r7,%r3\n\
addi %r7,%r6,8\n\
lwbrx %r10,%r7,%r3\n\
rotlwi %r8,%r8,8\n\
or %r7,%r9,%r9\n\
rlwimi %r9,%r8,16,8,15\n\
rlwimi %r9,%r10,8,16,23\n\
rlwimi %r8,%r7,16,24,31\n\
rotrwi %r10,%r10,8\n\
rlwimi %r10,%r7,16,0,7\n\
stwx %r8,%r6,%r4\n\
addi %r6,%r6,4\n\
stwx %r9,%r6,%r4\n\
addi %r6,%r6,4\n\
stwx %r10,%r6,%r4\n\
addi %r6,%r6,4\n\
bc 0,lt,.loop\n\
.postfix: # Fix any remaining 24-bit words (number of remaining words in r5).\n\
or. %r5,%r5,%r5\n\
bc 4,gt,.exit\n\
mtctr %r5\n\
add %r3,%r3,%r6\n\
add %r6,%r4,%r6\n\
subi %r3,%r3,1\n\
.fixloop:\n\
lbzu %r7,1(%r3)\n\
lbzu %r8,1(%r3)\n\
lbzu %r9,1(%r3)\n\
stb %r7,2(%r6)\n\
stb %r8,1(%r6)\n\
stb %r9,0(%r6)\n\
addi %r6,%r6,3\n\
bc 0,lt,.fixloop\n\
.exit:\n\
or %r3,%r4,%r4\n\
blr\n\
");
#else
#include <sys/types.h>
#include <stdint.h>
/*
* Ugh, this is really very, very ineffiecient.
* (But simple, understandable and safe)
*/
void *swab24(void *from,void *to,ssize_t len)
{
uint8_t *src=from,B0,B1,B2,*dst=to;
int i;
for(i=0;i<len;i+=3) {
B0=src[i];
B1=src[i+1];
B2=src[i+2];
dst[i]=B2;
dst[i+1]=B1;
dst[i+2]=B0;
}
return(to);
}
#endif

View File

@ -0,0 +1,112 @@
#if defined(__GNUC__) && defined(__PPC__)
/* r3=from, r4=to, r5=len, r6=index, r7=load/store temp */
asm("\
.text\n\
.align 2\n\
.globl swab32\n\
.type swab32,@function\n\
swab32:\n\
srawi. %r5,%r5,2\n\
li %r6,0\n\
bc 4,gt,.exit\n\
mtctr %r5\n\
.loop:\n\
lwbrx %r7,%r6,%r3\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
bc 0,lt,.loop\n\
.exit:\n\
or %r3,%r4,%r4\n\
blr\n\
");
/* r3=from, r4=to, r5=len/temp, r6=index, r7=load/store temp, r8=cache hint
*
* The unrolled, cache-hinting version appears to be about 4.5% faster, but
* in this case I opted for the smaller implementation. swab64() appears to
* gain more from cache-hinting - probably because of it using more registers
* for intermediate storage.
asm("\
.text\n\
.align 2\n\
.globl swab32\n\
.type swab32,@function\n\
swab32:\n\
dcbt 0,%r3\n\
andi. %r8,%r5,31 # The number of bytes handled in '.pre'. Used for prefetch hint.\n\
srawi %r5,%r5,2 # Convert bytes-># of 32-bit words\n\
andi. %r7,%r5,7\n\
li %r6,0\n\
bc 4,gt,.preploop\n\
mtctr %r7\n\
.pre: # One 32-bit word at a time until we have (nLeft%8)==0 \n\
lwbrx %r7,%r6,%r3\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
bc 0,lt,.pre\n\
.preploop:\n\
srawi. %r5,%r5,3 # Divide by 8 again to get number of loops.\n\
addi %r8,%r8,32 # Start address for next loop (from r3).\n\
bc 4,gt,.exit\n\
mtctr %r5\n\
.loop: # Loop unrolled 8 times = 32 bytes = 1 cache-line (except on the 970).\n\
dcbt %r8,%r3 # Cache hint (prefetch) for the next loop\n\
lwbrx %r7,%r6,%r3\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
lwbrx %r7,%r6,%r3\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
lwbrx %r7,%r6,%r3\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
lwbrx %r7,%r6,%r3\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
lwbrx %r7,%r6,%r3\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
lwbrx %r7,%r6,%r3\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
lwbrx %r7,%r6,%r3\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
lwbrx %r7,%r6,%r3\n\
stwx %r7,%r6,%r4\n\
addi %r6,%r6,4\n\
addi %r8,%r8,32 # Update cache-hint offset\n\
bc 0,lt,.loop\n\
.exit:\n\
or %r3,%r4,%r4\n\
blr\n\
");
*/
#else
#include <sys/types.h>
#include <stdint.h>
void *swab32(void *from,void *to,ssize_t len)
{
int i;
uint32_t *u32in=from,*u32out=to,tmp;
for(i=0;i<(len>>2);i++) {
tmp=u32in[i];
u32out[i]=((tmp&0xff)<<24)|
((tmp&0xff00)<<8)|
((tmp&0xff0000)>>8)|
((tmp&0xff000000)>>24);
}
return(to);
}
#endif

View File

@ -0,0 +1,101 @@
#if defined(__GNUC__) && defined(__PPC__)
/* r3=from, r4=to, r5=len/temp, r6/r7=index, r8/r9=load/store temp, r10=cache hint */
/* This version is unrolled and uses cache-hinting. It appears to gain about 10%
* over a non-unrolled, non-hinting version.
*/
asm("\
.text\n\
.align 2\n\
.globl swab64\n\
.type swab64,@function\n\
swab64:\n\
dcbt 0,%r3\n\
andi. %r10,%r5,31 # The number of bytes handled in '.pre'. Used for prefetch hint.\n\
srawi %r5,%r5,3 # Convert bytes-># of 64-bit words\n\
andi. %r7,%r5,3\n\
li %r6,0\n\
bc 4,gt,.preploop\n\
mtctr %r7\n\
.pre: # One 64-bit word at a time until we have (nLeft%4)==0 \n\
lwbrx %r8,%r6,%r3\n\
addi %r7,%r6,4\n\
lwbrx %r9,%r7,%r3\n\
stwx %r8,%r7,%r4\n\
stwx %r9,%r6,%r4\n\
addi %r6,%r6,8\n\
bc 0,lt,.pre\n\
.preploop:\n\
srawi. %r5,%r5,2 # Divide by 4 again to get number of loops.\n\
addi %r10,%r10,32 # Start address for next loop.\n\
bc 4,gt,.exit\n\
mtctr %r5\n\
.loop: # Loop unrolled 4 times = 32 bytes = 1 cache-line (except on the 970).\n\
dcbt %r10,%r3 # Cache hint (prefetch) for the next iteration\n\
lwbrx %r8,%r6,%r3\n\
addi %r7,%r6,4\n\
lwbrx %r9,%r7,%r3\n\
stwx %r8,%r7,%r4\n\
stwx %r9,%r6,%r4\n\
addi %r6,%r6,8\n\
lwbrx %r8,%r6,%r3\n\
addi %r7,%r6,4\n\
lwbrx %r9,%r7,%r3\n\
stwx %r8,%r7,%r4\n\
stwx %r9,%r6,%r4\n\
addi %r6,%r6,8\n\
lwbrx %r8,%r6,%r3\n\
addi %r7,%r6,4\n\
lwbrx %r9,%r7,%r3\n\
stwx %r8,%r7,%r4\n\
stwx %r9,%r6,%r4\n\
addi %r6,%r6,8\n\
lwbrx %r8,%r6,%r3\n\
addi %r7,%r6,4\n\
lwbrx %r9,%r7,%r3\n\
stwx %r8,%r7,%r4\n\
stwx %r9,%r6,%r4\n\
addi %r6,%r6,8\n\
addi %r10,%r10,32 # Update cache-hint offset\n\
bc 0,lt,.loop\n\
.exit:\n\
or %r3,%r4,%r4\n\
blr\n\
");
#else
#include <sys/types.h>
#include <stdint.h>
void *swab64(void *from,void *to,ssize_t len)
{
int i;
struct {
uint32_t u32[2];
} *u64in=from,*u64out=to;
uint32_t tmp1,tmp2;
for(i=0;i<(len>>3);i++) {
tmp1=u64in[i].u32[0];
tmp2=u64in[i].u32[1];
u64out[i].u32[0]=((tmp2&0xff)<<24)|
((tmp2&0xff00)<<8)|
((tmp2&0xff0000)>>8)|
((tmp2&0xff000000)>>24);
u64out[i].u32[1]=((tmp1&0xff)<<24)|
((tmp1&0xff00)<<8)|
((tmp1&0xff0000)>>8)|
((tmp1&0xff000000)>>24);
}
return(to);
}
#endif
/* vi:set ts=3: */

View File

@ -1,11 +1,39 @@
//
// $Id: crt0.S,v 1.2 2004-11-28 12:31:27 tfrieden Exp $
// $Id: crt0.S,v 1.6 2005-10-11 09:28:29 obarthel Exp $
//
// :ts=4
//
// Portable ISO 'C' (1994) runtime library for the Amiga computer
// Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
// 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.
//
.text
.globl main /* This enforces linkage against the main() function */
.globl _main
.globl _start
@ -25,16 +53,3 @@ _start:
#endif
b _main
#if defined(BASEREL_DATA)
.section .rodata
.globl __data_segment_descriptor
__data_segment_descriptor:
.long __data_start
.long __data_end
.long _DATA_BASE_
.section .dend, "wa", @nobits
.space 4
#endif

View File

@ -1,21 +1,46 @@
/*
* $Id: crtbegin.c,v 1.8 2005-03-10 13:30:11 obarthel Exp $
* crtbegin.c
*
* :ts=4
*
* Handles global constructors and destructors for the OS4 GCC build.
*
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#if defined(__amigaos4__)
/****************************************************************************/
#ifndef EXEC_TYPES_H
#include <exec/types.h>
/****************************************************************************/
#include <stdlib.h>
#include <setjmp.h>
#endif /* EXEC_TYPES_H */
/****************************************************************************/
@ -23,19 +48,34 @@
* Dummy constructor and destructor array. The linker script will put these at the
* very beginning of section ".ctors" and ".dtors". crtend.o contains a similar entry
* with a NULL pointer entry and is put at the end of the sections. This way, the init
* code can find the global constructor/destructor pointers
* code can find the global constructor/destructor pointers.
*
* WARNING:
* This hack does not work correctly with GCC 5 and higher. The optimizer
* will see a one element array and act appropriately. The current workaround
* is to use -fno-aggressive-loop-optimizations when compiling this file.
*/
static void (*__CTOR_LIST__[1]) (void) __attribute__(( used, section(".ctors"), aligned(sizeof(void (*)(void))) ));
static void (*__DTOR_LIST__[1]) (void) __attribute__(( used, section(".dtors"), aligned(sizeof(void (*)(void))) ));
/****************************************************************************/
void _init(void);
void _fini(void);
/****************************************************************************/
void
_init(void)
{
extern void shared_obj_init(void);
int num_ctors,i;
int j;
/* The shared objects need to be set up before any local
constructors are invoked. */
shared_obj_init();
for(i = 1, num_ctors = 0 ; __CTOR_LIST__[i] != NULL ; i++)
num_ctors++;
@ -48,21 +88,19 @@ _init(void)
void
_fini(void)
{
extern jmp_buf __exit_jmp_buf;
extern void shared_obj_exit(void);
int num_dtors,i;
static int j;
/* If one of the destructors drops into
exit(), processing will continue with
the next following destructor. */
(void)setjmp(__exit_jmp_buf);
for(i = 1, num_dtors = 0 ; __DTOR_LIST__[i] != NULL ; i++)
num_dtors++;
while(j++ < num_dtors)
__DTOR_LIST__[j]();
/* The shared objects need to be cleaned up after all local
destructors have been invoked. */
shared_obj_exit();
}
/****************************************************************************/

View File

@ -4,6 +4,34 @@
* :ts=4
*
* End markers for the CTOR and DTOR list.
*
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#if defined(__amigaos4__)

View File

@ -1,10 +1,10 @@
/*
* $Id: ctype_headers.h,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_headers.h,v 1.6 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -42,18 +42,25 @@
/****************************************************************************/
#ifndef _STDLIB_LOCALE_UTILITY_H
#include "stdlib_locale_utility.h"
#endif /* _STDLIB_LOCALE_UTILITY_H */
#ifndef _STDLIB_LOCALEBASE_H
#include "stdlib_localebase.h"
#endif /* _STDLIB_LOCALEBASE_H */
#ifndef _STDLIB_UTILITYBASE_H
#include "stdlib_utilitybase.h"
#endif /* _STDLIB_UTILITYBASE_H */
/****************************************************************************/
#ifndef _MACROS_H
#include "macros.h"
#endif /* _MACROS_H */
/****************************************************************************/
#include <locale.h>
#include <assert.h>
#include <limits.h>
#include <ctype.h>
/****************************************************************************/

View File

@ -1,10 +1,10 @@
/*
* $Id: ctype_isalnum.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
* $Id: ctype_isalnum.c,v 1.5 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -55,7 +55,13 @@ isalnum(int c)
{
assert( LocaleBase != NULL );
result = IsAlNum(__locale_table[LC_CTYPE],(ULONG)c);
/* The parameter must be either EOF or in the range of an
'unsigned char'. If it's not, then the behaviour is
undefined. */
if(c != EOF && ((0 <= c && c <= UCHAR_MAX) || ((c + 256) <= UCHAR_MAX)))
result = IsAlNum(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = FALSE;
}
else
{

View File

@ -1,10 +1,10 @@
/*
* $Id: ctype_isalpha.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
* $Id: ctype_isalpha.c,v 1.5 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -53,7 +53,13 @@ isalpha(int c)
{
assert( LocaleBase != NULL );
result = IsAlpha(__locale_table[LC_CTYPE],(ULONG)c);
/* The parameter must be either EOF or in the range of an
'unsigned char'. If it's not, then the behaviour is
undefined. */
if(c != EOF && ((0 <= c && c <= UCHAR_MAX) || ((c + 256) <= UCHAR_MAX)))
result = IsAlpha(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = FALSE;
}
else
{

View File

@ -1,10 +1,10 @@
/*
* $Id: ctype_isascii.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_isascii.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without

52
library/ctype_isblank.c Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: ctype_isblank.c,v 1.3 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* 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.
*/
#ifndef _CTYPE_HEADERS_H
#include "ctype_headers.h"
#endif /* _CTYPE_HEADERS_H */
/****************************************************************************/
#undef isblank
/****************************************************************************/
int
isblank(int c)
{
int result;
result = (c == '\t' || c == ' ');
return(result);
}

View File

@ -1,10 +1,10 @@
/*
* $Id: ctype_iscntrl.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
* $Id: ctype_iscntrl.c,v 1.5 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -53,7 +53,13 @@ iscntrl(int c)
{
assert( LocaleBase != NULL );
result = IsCntrl(__locale_table[LC_CTYPE],(ULONG)c);
/* The parameter must be either EOF or in the range of an
'unsigned char'. If it's not, then the behaviour is
undefined. */
if(c != EOF && ((0 <= c && c <= UCHAR_MAX) || ((c + 256) <= UCHAR_MAX)))
result = IsCntrl(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = FALSE;
}
else
{

View File

@ -1,10 +1,10 @@
/*
* $Id: ctype_isdigit.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
* $Id: ctype_isdigit.c,v 1.5 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -53,7 +53,13 @@ isdigit(int c)
{
assert( LocaleBase != NULL );
result = IsDigit(__locale_table[LC_CTYPE],(ULONG)c);
/* The parameter must be either EOF or in the range of an
'unsigned char'. If it's not, then the behaviour is
undefined. */
if(c != EOF && ((0 <= c && c <= UCHAR_MAX) || ((c + 256) <= UCHAR_MAX)))
result = IsDigit(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = FALSE;
}
else
{

View File

@ -1,10 +1,10 @@
/*
* $Id: ctype_isgraph.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
* $Id: ctype_isgraph.c,v 1.5 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -53,7 +53,13 @@ isgraph(int c)
{
assert( LocaleBase != NULL );
result = IsGraph(__locale_table[LC_CTYPE],(ULONG)c);
/* The parameter must be either EOF or in the range of an
'unsigned char'. If it's not, then the behaviour is
undefined. */
if(c != EOF && ((0 <= c && c <= UCHAR_MAX) || ((c + 256) <= UCHAR_MAX)))
result = IsGraph(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = FALSE;
}
else
{

View File

@ -1,10 +1,10 @@
/*
* $Id: ctype_islower.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
* $Id: ctype_islower.c,v 1.5 2006-01-08 12:04:22 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2005 by Olaf Barthel <olsen@sourcery.han.de>
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@ -53,7 +53,13 @@ islower(int c)
{
assert( LocaleBase != NULL );
result = IsLower(__locale_table[LC_CTYPE],(ULONG)c);
/* The parameter must be either EOF or in the range of an
'unsigned char'. If it's not, then the behaviour is
undefined. */
if(c != EOF && ((0 <= c && c <= UCHAR_MAX) || ((c + 256) <= UCHAR_MAX)))
result = IsLower(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = FALSE;
}
else
{

Some files were not shown because too many files have changed in this diff Show More