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

155 Commits

Author SHA1 Message Date
Olaf Barthel
1aadee2d9d This commit was manufactured by cvs2svn to create tag 'V1_193'.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/tags/V1_193@14974 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-06-04 14:16:59 +00:00
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
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
Olaf Barthel
86b7e5c429 - Introduced new constructor types and changed the overall priority
order.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14880 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-11 11:35:31 +00:00
Olaf Barthel
42963b39c4 - Moved data out of stdlib_data.c and into the code that references
or initializes it.

- The stdlib constructor now performs the CPU/FPU compatibility test.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14879 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-11 09:37:29 +00:00
Olaf Barthel
678cab02fb - The macro definitions deserved better documentation. Well, they probably still do...
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14878 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-10 13:58:13 +00:00
Olaf Barthel
59d7f8d07f - Fixed another interesting bug in the OS4 destructor code.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14877 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-10 13:30:11 +00:00
Olaf Barthel
9a7c8a8705 - Corrected a typo in the OS4 destructor code.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14876 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-10 13:28:05 +00:00
Olaf Barthel
96e74015f0 - Added S_IREAD, S_IWRITE and S_IEXEC aliases to <sys/stat.h>.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14875 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-10 11:40:57 +00:00
Olaf Barthel
db8710d2ae - Reimplemented the constructor/destructor invocation code for GCC.
Both the 68k and PowerPC platform now invoke them in the same order
  and the 68k code uses the designated invocation priorities. The
  PowerPC destructor function now sets up the exit() jmp_buf before
  the destructor functions are called.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14874 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-10 09:55:03 +00:00
Olaf Barthel
91f12dd8f0 - Reworked the constructor/destructor macros again.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14873 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-10 07:53:57 +00:00
Olaf Barthel
d2f157b0a1 - Cleaned up the GCC constructor/destructor macros again. There is more to come.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14872 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-10 07:47:51 +00:00
Olaf Barthel
e3e82b3657 - Thanks to Joerg Strohmayer, the GCC library build now manages to
invoke the library's constructor/destructor functions in a
  very particular order. That way, you can use constructor/destructor
  functions in your own code and not have them clash with the library's
  own functions.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14871 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-09 21:07:25 +00:00
Olaf Barthel
4d3dc4a77f - The stdio destructor no longer resets the __iob pointer to NULL. This
avoids trouble with destructor functions which use stdio code. Unsolved
  problem: the order in which destructors and constructors are called.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14870 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-09 16:56:05 +00:00
Olaf Barthel
ee556fcb35 - Moved a few __delete_semaphore() calls into conditional compilation
sections where they should have been in the first place.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14869 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-09 12:06:10 +00:00
Olaf Barthel
cc8a8e42c0 - Moved the data declarations out of math_data.c, stat_data.c,
socket_data.c, dirent_data.c and stdio_data.c and into the
  code that initializes them.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14868 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-09 10:48:59 +00:00
Olaf Barthel
0fad53e56e - Moved the CPU/FPU type tests into the respective linker
libraries.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14867 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-07 16:56:36 +00:00
Olaf Barthel
d33e3e909e - Cleaned up the 68k build makefile, so that the CPU and FPU
tests and the error message display can run safely even
  on plain 68000 machines. This won't work for the 32 bit small
  data model, which implies 68020 code, but so there...


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14866 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-07 14:04:09 +00:00
Olaf Barthel
ef43011783 - Made the file descriptor checks in the fsync() and fdatasync()
functions more robust.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14865 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-07 11:58:50 +00:00
Olaf Barthel
a9c8cdc554 - Moved the Workbench console stream initialization into the
initialization code for the stdin/stdout/stderr streams and
  out of the program parameter setup.

- The current program name is now set up in the stdlib
  initialization function.

- Simplified the machine test code; moved the FPU check into
  the math initialization code.

- Added more safety checks to verify that file descriptor
  file handles are valid.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14864 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-07 11:16:43 +00:00
Olaf Barthel
d370bd123b - Corrected the names of macros.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14863 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-06 09:04:44 +00:00
Olaf Barthel
6931123dc1 - DoTimer() now calls AllocSysObject() rather than making up
a MsgPort locally.

- The record locking semaphore code now builds a semaphore to add
  before it tries to find the public one in memory. That way, the
  code can spend less time in Forbid() state and, heaven forbid,
  refrain from allocating memory while in that state.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14862 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-06 09:00:16 +00:00
Olaf Barthel
b2ddf28fa7 - Replaced the plain text documentation with HTML versions.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14861 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-05 18:34:01 +00:00
Olaf Barthel
1bc19a04d3 - Fixed a compiler problem in the socket setup.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14860 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-05 17:55:26 +00:00
Olaf Barthel
1a0999bc1c - Feature freeze!
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14859 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-05 17:16:55 +00:00
Olaf Barthel
1bf430d1d6 - In the thread-safe variant, the library now tries to allow
multiple concurrent callers to use the socket functions. Note
  that this works only with the Roadshow TCP/IP stack, and the
  results with other TCP/IP stacks are rather unpredictable.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14858 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-04 20:08:19 +00:00
Olaf Barthel
f2d1a3238d - Rewrote the code that allocates the file descriptor and file
buffer tables so that all the memory allocations are in one
  place and it's possible to specify exactly how many table
  entries are required at a time.

- Creation and initialization of semaphores now uses the AmigaOS4
  specific functions for this purpose, if available.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14857 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-04 09:07:09 +00:00
Olaf Barthel
2c3bd39f71 - Added a very simple test program, just to see how much of the library
it will pull in when linked.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14856 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-03 15:12:18 +00:00
Olaf Barthel
0deb0e3e2d - Added uname command, 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@14855 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-03 15:02:26 +00:00
Olaf Barthel
dd380f8479 - Fixed the OS4 specific build makefile.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14854 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-03 14:46:10 +00:00
Olaf Barthel
ec3d921f7b - Moved the signal semaphore allocation/initialization/deallocation
into a dedicated module. This also has the advantage that it's
  harder to break code by accidentally forgetting to call
  InitSemaphore() after having allocated the memory for it.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14853 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-03 14:20:55 +00:00
Olaf Barthel
ebd6cc3639 - Added the missing header files required to rebuild ftw_ftw.c and
ftw_nftw.c.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14852 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-03 10:59:17 +00:00
Olaf Barthel
7690bb8399 - Reworked the code that handles quoting for the wildcard expansion
routine. We no longer allocate memory and then modify it, but
  call a function for each quoted parameter which does whatever is
  necessary.

- The shell command parameter parser now considers the non-breaking
  space character (ISO code 160) to be a blank space character, too.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14851 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-03 09:32:09 +00:00
Olaf Barthel
2aba208878 - The lstat() code now reliably detects that it found a soft link.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14850 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-02 18:49:01 +00:00
Olaf Barthel
593caccb38 - Fixed the compilation problems I had introduced by mistake.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14849 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-02 14:47:10 +00:00
Olaf Barthel
ac0cc97924 - Added atoll(), ffs(), ftw(), nftw(), lstat() and uname() code
contributed by Peter Bengtsson. Thank you very much!


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14848 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-03-02 12:57:56 +00:00
Olaf Barthel
ef44c75126 - Cleaned up the header files some more; the POSIX stdio thread locking functions
are now defined as empty macros unless __THREAD_SAFE is defined.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14847 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-28 13:42:54 +00:00
Olaf Barthel
9a8fe330a9 - Updated the README file to mention the PowerPC platform, the floating point
support and the thread-safety.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14846 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-28 13:32:59 +00:00
Olaf Barthel
17d81c12c0 - The translation of Unix to Amiga path names now silently accepts
absolute Amiga path names passed to it and will use them without
  changing them.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14845 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-28 13:32:11 +00:00
Olaf Barthel
c799b17bb9 - Extended the thread-safety locking to the file descriptors.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14844 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-28 13:22:53 +00:00
Olaf Barthel
1df294c07e - The thread-safety code is now subject to conditional compilation.
Both the library and the user code need to be rebuilt with the
  preprocessor symbol __THREAD_SAFE defined to get thread-safe
  code.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14843 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-28 10:07:35 +00:00
Olaf Barthel
f51faeb168 - Added more semaphore locking around the basic stdio, memory, locale
and dirent data operations. That should do it! While the library is
  not reentrant (this is not ixemul.library) it should be thread-safe
  now. Thread-safe in the sense of POSIX 1003.1c-1995.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14842 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-27 21:58:21 +00:00
Olaf Barthel
c0c70bfd99 - Added stdio thread locking functions flockfile(), funlockfile(),
and ftrylockfile().

- Modified the internal FILE structure to allow for thread locking.
  Note that this again requires that the library is rebuilt!

- Added or modified macros for getc_unlocked(), getchar_unlocked(),
  putc_unlocked() and putchar_unlocked().

- Added rand_r().

- Added flockfile()/funlockfile() wrappers around all stdio
  functions.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14841 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-27 18:09:12 +00:00
Olaf Barthel
b10d1ad38c - The process window pointer is now restored and reset between ^C
checks while wildcard patterns are expanded in the the command line.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14840 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-26 09:05:54 +00:00
Olaf Barthel
1550c6fef3 - When using the wildcard expansion code for command line
parameters (which is by default linked in with libunix.a),
  regular expressions can no longer prompt dos.library requesters
  to appear. However, to be on the safe side, if you are expecting
  to pass regular expressions on the command line, do not use
  the wildcard expansion code such as by overriding the library
  symbols with dummy functions such as are used in the file
  "stdlib_wildcard_expand.c".

- Added a new variable '__open_locale' which can be used to
  restrict all library functions to use the "C" language locale
  rather than the current system locale settings. In addition
  to that, two new functions __locale_exit() and __locale_init()
  can be used to close and (re-)open the system locale at a
  later time.

- Local ("static") functions are now identified by the STATIC
  qualifier. This was done in preparation for changes that will
  deal with global and local data and the issue of thread safety.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14839 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-25 10:14:22 +00:00
Olaf Barthel
53d99ac7a2 - Fixed a warning for a possibly uninitialized variable in the new iob hook
code.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14838 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-21 16:09:44 +00:00
Olaf Barthel
c4c25649f2 - Cosmetic changes for (hopefully) better readability.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14837 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-21 10:22:02 +00:00
Olaf Barthel
18f1f75479 - The lseek() function return code was not consistently treated as the
then current file position. Fixed.

- Numerous house-keeping changes.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14836 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-20 15:46:57 +00:00
Olaf Barthel
410833d2ed - The buffered and unbuffered file hook code is now invoked through
function pointers alone. The utility.library/CallHookPkt mechanism
  is no longer required.

- Moved the entire lseek() code relevant for files into the hook
  function.

- Simplified the close() function which now just calls into the
  hook code to perform whatever is necessary. The hook code is
  responsible for cleaning up after aliases, etc. This change in
  turn made it possible to greatly simplify the hook code for
  buffered files which now bypasses close/read/write/lseek and
  directly invokes the hook code for unbuffered files.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14835 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-20 13:19:40 +00:00
Olaf Barthel
cfa6f566db - Simplified the fcntl() code to use the varargs functions more carefully.
Also, the file descriptor duplication code no longer uses a goto to
  deliver its result.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14834 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-20 09:03:02 +00:00
Olaf Barthel
99547756fe - Major, major changes! Moved most of the monolithic code out of
the file descriptor hook and into the respective functions,
  such as dup2(), fchmod(), fchown(), fcntl(), fdatasync(), fstatfs(),
  fsync(), ftruncate() and lseek(). Code which is not strictly
  required will no longer find its way into your programs if you
  link with the updated library.

  NOTE: these changes require that the entire library is rebuilt!


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14833 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-18 18:53:17 +00:00
Olaf Barthel
ea638f0970 - Moved the slash translation code around a bit more. Now ".//" comes out as
"" rather than ":".


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14832 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-16 14:48:17 +00:00
Olaf Barthel
4aa85e1d12 - Rewrote the __translate_unix_to_amiga_path_name() function to
translate patterns such as "foo/bar/../../baz" properly, and to
  use strlen() less.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14831 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-15 17:27:22 +00:00
Olaf Barthel
fcb8cfc0dc - Small changes to make this build properly for OS4.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14830 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-07 11:19:32 +00:00
Olaf Barthel
a626336b7b - Tweaked the build makefiles to produce fewer meaningless warnings.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14828 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-07 10:52:32 +00:00
Olaf Barthel
07d09bb185 - Added the fsync() and fdatasync() functions and the <stdint.h> and
<inttypes.h> header files contributed by Peter Bengtsson. Thank
  you very much!


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14827 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-04 15:03:14 +00:00
Olaf Barthel
6ad88ff97f - The library no longer sends ACTION_DISK_INFO packets to the console
handler. The side-effects were too varied and irritating after all.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14826 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-04 08:49:10 +00:00
Olaf Barthel
2ddfeab0cf - Added some extra documentation on the WBStartup variable.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14825 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-03 17:33:54 +00:00
Olaf Barthel
91028c63bc - Lost the __not_a_number and __infinity variables, including the
code which initialized them.

- Reading/changing the errno variable is no longer done directly, but
  involves accessor functions.

- References to the HUGE_VAL quantity now involve an accessor function, too.

- Changed the manner in which the __huge_val constant is initialized by
  the __math_init() function.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14824 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-03 16:56:20 +00:00
Olaf Barthel
209884bd1f - We now allocate the AnchorPath used in the unistd_wildcard_expand.c
code. Also, the contents of the AnchorPath structure are no longer
  modified between calls. MatchEnd() has to be sufficient.

- Moved redundant code out of the readdir()/opendir()/closedir()
  functions which is not required unless the code is built for
  Unix compatibility mode.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14823 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-03 12:16:38 +00:00
Olaf Barthel
3548d3cf7e - We now allocate the AnchorPath used in the unistd_wildcard_expand.c
code. Also, the contents of the AnchorPath structure are no longer
  modified between calls. MatchEnd() has to be sufficient.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14822 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-02-03 12:14:55 +00:00
Olaf Barthel
50b8b623cc - Folded duplicate code in "time_mktime.c"; also, errno is no longer
modified unless the library is built with the "CHECK_FOR_NULL_POINTERS"
  option.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14821 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-01-30 16:10:59 +00:00
Olaf Barthel
49bc1d6b13 - Updated the ".cvsignore" file.
- Moved the date/time conversion test code around in "test.c".


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14820 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-01-30 10:23:26 +00:00
Olaf Barthel
fce21e21d6 - The functions in stdlib.h which require a compiler that supports the
"long long" data type are no longer prototyped if the library is built
  for SAS/C.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14819 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-01-30 09:48:06 +00:00
Olaf Barthel
f8b1e7516f - Folded duplicate code stdio_init_exit.c into a common function.
- Simplified the code in time_asctime_r.c which builds the time
  string. It gracefully handles buffer sizes which are too short
  by returning an empty string.

- Moved the tm->tm_wday initialization out of the hook function
  in time_strftime.c since it was to be called only once anyway.

- Lost a few compiler warnings in unistd_time_delay.c and
  time_gettimeofday.c.

- Folded duplicate code in time_mktime.c; also, errno is no longer
  modified unless the library is built with the CHECK_FOR_NULL_POINTERS
  option.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14818 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2005-01-30 09:37:59 +00:00
567 changed files with 29414 additions and 7734 deletions

View File

@@ -1,5 +1,5 @@
#
# $Id: GNUmakefile.68k,v 1.23 2005-01-29 18:05:13 obarthel Exp $
# $Id: GNUmakefile.68k,v 1.59 2005-06-04 10:46:21 obarthel Exp $
#
# :ts=8
#
@@ -12,7 +12,7 @@ RANLIB = ranlib
COPY = copy clone buf=0
DELETE = delete all quiet
MAKEDIR = makedir
MAKE = make -f GNUmakefile.68k
MAKE = $(MAKE_COMMAND) -f GNUmakefile.68k
##############################################################################
@@ -77,42 +77,48 @@ $(LIBAMIGA_OBJS)/%.o : %.c
##############################################################################
ifeq (small_data_020,$(TYPE))
CODE_TYPE := -fbaserel -DSMALL_DATA -m68020-60 -DM68020
CODE_TYPE := -m68020-60
CODE_FLAGS := -fbaserel -DSMALL_DATA -DM68020
endif
ifeq (small_data,$(TYPE))
CODE_TYPE := -fbaserel -DSMALL_DATA -m68000
CODE_TYPE := -m68000
CODE_FLAGS := -fbaserel -DSMALL_DATA
endif
ifeq (small_data32,$(TYPE))
CODE_TYPE := -fbaserel32 -DSMALL_DATA32 -m68020-60 -DM68020
CODE_TYPE := -m68020-60
CODE_FLAGS := -fbaserel32 -DSMALL_DATA32 -DM68020
endif
ifeq (large_data_020,$(TYPE))
CODE_TYPE := -m68020-60 -DM68020
CODE_TYPE := -m68020-60
CODE_FLAGS := -DM68020
endif
ifeq (large_data,$(TYPE))
CODE_TYPE := -m68000
CODE_FLAGS :=
endif
##############################################################################
WARNINGS = \
-Wall -W -Wpointer-arith -Wsign-compare -Wmissing-prototypes \
-Wundef -Wbad-function-cast -Wmissing-declarations
-Wundef -Wbad-function-cast -Wmissing-declarations -Wunused
# -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
#OPTIMIZE = -O -fomit-frame-pointer -fstrength-reduce -finline-functions
#OPTIONS = -fno-builtin -fno-common -DDEBUG
OPTIONS = -fno-builtin -fno-common -DNDEBUG
#OPTIONS = -fno-builtin -fno-common -D__MEM_DEBUG
#OPTIONS = -fno-builtin -fno-common -DDEBUG -D__MEM_DEBUG -DNO_INLINE_STDARG
OPTIMIZE = -O -fomit-frame-pointer -fstrength-reduce -finline-functions
#OPTIMIZE = -O2 -fomit-frame-pointer
#DEBUG = -g2
#DEBUG = -g
CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDES)
CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_FLAGS) $(CODE_TYPE) $(INCLUDES)
##############################################################################
@@ -121,6 +127,7 @@ C_LIB = \
ctype_isalnum.o \
ctype_isalpha.o \
ctype_isascii.o \
ctype_isblank.o \
ctype_iscntrl.o \
ctype_isdigit.o \
ctype_isgraph.o \
@@ -130,27 +137,34 @@ C_LIB = \
ctype_isspace.o \
ctype_isupper.o \
ctype_isxdigit.o \
ctype_table.o \
ctype_tolower.o \
ctype_toupper.o \
ctype_table.o \
dirent_closedir.o \
dirent_data.o \
dirent_rewinddir.o \
dirent_opendir.o \
dirent_readdir.o \
dirent_rewinddir.o \
errno_data.o \
fcntl_close.o \
fcntl_creat.o \
fcntl_fcntl.o \
fcntl_get_default_file.o \
fcntl_lock.o \
fcntl_lseek.o \
fcntl_open.o \
fcntl_read.o \
fcntl_write.o \
fcntl_get_default_file.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 \
locale_localeconv.o \
locale_open_locale.o \
locale_setlocale.o \
mount_convertinfo.o \
mount_fstatfs.o \
@@ -168,7 +182,6 @@ C_LIB = \
signal_sigsetmask.o \
stat_chmod.o \
stat_convertfileinfo.o \
stat_data.o \
stat_fchmod.o \
stat_fstat.o \
stat_lstat.o \
@@ -178,21 +191,23 @@ C_LIB = \
stat_umask.o \
stdio_asprintf.o \
stdio_clearerr.o \
stdio_data.o \
stdio_dropiobreadbuffer.o \
stdio_duplicate_fd.o \
stdio_examine_fh.o \
stdio_fclose.o \
stdio_fdhookentry.o \
stdio_feof.o \
stdio_ferror.o \
stdio_fflush.o \
stdio_flush.o \
stdio_fgetc.o \
stdio_fgetpos.o \
stdio_fgets.o \
stdio_filliobreadbuffer.o \
stdio_findvacantfdentry.o \
stdio_findvacantiobentry.o \
stdio_flockfile.o \
stdio_flush.o \
stdio_flush_all_files.o \
stdio_flushiobwritebuffer.o \
stdio_fopen.o \
stdio_fprintf.o \
@@ -204,27 +219,38 @@ C_LIB = \
stdio_fseek.o \
stdio_fsetpos.o \
stdio_ftell.o \
stdio_ftrylockfile.o \
stdio_funlockfile.o \
stdio_fwrite.o \
stdio_getc.o \
stdio_getc_unlocked.o \
stdio_getchar.o \
stdio_get_file_descriptor.o \
stdio_getchar_unlocked.o \
stdio_gets.o \
stdio_get_file_descriptor.o \
stdio_growfdtable.o \
stdio_growiobtable.o \
stdio_grow_file.o \
stdio_initializefd.o \
stdio_initializeiob.o \
stdio_init_exit.o \
stdio_file_init.o \
stdio_iobhookentry.o \
stdio_lock.o \
stdio_locksemaphorename.o \
stdio_nostdio.o \
stdio_openiob.o \
stdio_parent_of_fh.o \
stdio_perror.o \
stdio_popen.o \
stdio_printf.o \
stdio_putc.o \
stdio_putc_unlocked.o \
stdio_putchar.o \
stdio_putchar_unlocked.o \
stdio_puts.o \
stdio_remove.o \
stdio_remove_fd_alias.o \
stdio_rename.o \
stdio_rewind.o \
stdio_scanf.o \
@@ -238,6 +264,7 @@ C_LIB = \
stdio_tmpnam.o \
stdio_translateioerror.o \
stdio_ungetc.o \
stdio_unlockfile.o \
stdio_vasprintf.o \
stdio_vasprintf_hook_entry.o \
stdio_vfprintf.o \
@@ -247,6 +274,8 @@ 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 \
@@ -254,13 +283,12 @@ C_LIB = \
stdlib_atexit.o \
stdlib_atoi.o \
stdlib_atol.o \
stdlib_atoll.o \
stdlib_bsearch.o \
stdlib_calloc.o \
stdlib_checkdetach.o \
stdlib_constructor.o \
stdlib_constructor_begin.o \
stdlib_constructor_end.o \
stdlib_data.o \
stdlib_default_pool_size.o \
stdlib_default_puddle_size.o \
stdlib_destructor.o \
@@ -275,11 +303,15 @@ C_LIB = \
stdlib_getdefstacksize.o \
stdlib_getenv.o \
stdlib_getsp.o \
stdlib_get_errno.o \
stdlib_init_exit.o \
stdlib_isresident.o \
stdlib_labs.o \
stdlib_llabs.o \
stdlib_ldiv.o \
stdlib_lldiv.o \
stdlib_machine_test.o \
stdlib_main.o \
stdlib_malloc.o \
stdlib_math.o \
stdlib_mkdtemp.o \
@@ -295,14 +327,16 @@ C_LIB = \
stdlib_putenv.o \
stdlib_qsort.o \
stdlib_rand.o \
stdlib_rand_r.o \
stdlib_realloc.o \
stdlib_red_black.o \
stdlib_semaphore.o \
stdlib_setenv.o \
stdlib_setjmp.o \
stdlib_set_errno.o \
stdlib_set_process_window.o \
stdlib_shell_escape.o \
stdlib_showerror.o \
stdlib_socket.o \
stdlib_srand.o \
stdlib_stackargbytes.o \
stdlib_stackcheck.o \
@@ -310,22 +344,24 @@ C_LIB = \
stdlib_stacksafezone.o \
stdlib_stacksize.o \
stdlib_stack_usage.o \
stdlib_startup.o \
stdlib_arg.o \
stdlib_stdio_window_spec.o \
stdlib_strtol.o \
stdlib_strtoul.o \
stdlib_strtoll.o \
stdlib_strtoul.o \
stdlib_strtoull.o \
stdlib_swapstack.o \
stdlib_sysbase.o \
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 \
stdlib_stdio_window_spec.o \
strings_ffs.o \
strings_strcasecmp.o \
strings_strncasecmp.o \
string_bcmp.o \
@@ -379,6 +415,8 @@ C_LIB = \
time_strftime.o \
time_time.o \
time_weekday.o \
uio_readv.o \
uio_writev.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
@@ -387,8 +425,10 @@ C_LIB = \
unistd_dup.o \
unistd_dup2.o \
unistd_fchown.o \
unistd_fdatasync.o \
unistd_fdopen.o \
unistd_fileno.o \
unistd_fsync.o \
unistd_ftruncate.o \
unistd_getcwd.o \
unistd_getopt.o \
@@ -401,17 +441,18 @@ C_LIB = \
unistd_realpath.o \
unistd_sleep.o \
unistd_symlink.o \
unistd_sync_fd.o \
unistd_timer.o \
unistd_time_delay.o \
unistd_truncate.o \
unistd_unlink.o \
unistd_usleep.o \
utime_utime.o
utime_utime.o \
utsname_uname.o
UNIX_LIB = \
unix.lib_rev.o \
dirent_closedir.o \
dirent_data.o \
dirent_rewinddir.o \
dirent_opendir.o \
dirent_readdir.o \
@@ -427,19 +468,36 @@ UNIX_LIB = \
stat_mkdir.o \
stat_rmdir.o \
stat_stat.o \
stdio_ctermid.o \
stdio_fdhookentry.o \
stdio_fflush.o \
stdio_fopen.o \
stdio_init_exit.o \
stdio_file_init.o \
stdio_locksemaphorename.o \
stdio_openiob.o \
stdio_popen.o \
stdio_record_locking.o \
stdio_remove.o \
stdio_rename.o \
stdlib_mkdtemp.o \
stdlib_mkstemp.o \
stdlib_mktemp.o \
stdlib_system.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 \
uio_readv.o \
uio_writev.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
@@ -456,44 +514,120 @@ UNIX_LIB = \
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 \
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_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_data.o \
math_coshf.o \
math_erf.o \
math_erfc.o \
math_erfcf.o \
math_erff.o \
math_exp.o \
math_expf.o \
math_expm1.o \
math_expm1f.o \
math_fabs.o \
math_fabsf.o \
math_floor.o \
math_floorf.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_log.o \
math_log10.o \
math_log10f.o \
math_log1p.o \
math_log1pf.o \
math_logb.o \
math_logbf.o \
math_logf.o \
math_modf.o \
math_modff.o \
math_nan.o \
math_nanf.o \
math_nextafter.o \
math_nextafterf.o \
math_pow.o \
math_powf.o \
math_remainder.o \
math_remainderf.o \
math_rem_pio2f.o \
math_rint.o \
math_rintf.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 \
stdio_asprintf.o \
stdio_flush.o \
stdio_flush_all_files.o \
stdio_fprintf.o \
stdio_fscanf.o \
stdio_printf.o \
@@ -504,12 +638,14 @@ 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_machine_test.o \
stdlib_strtod.o \
stdlib_strtof.o \
time_difftime.o
MATH_LIB_881 = \
@@ -563,7 +699,6 @@ NET_LIB = \
socket_accept.o \
socket_bind.o \
socket_connect.o \
socket_data.o \
socket_gethostbyaddr.o \
socket_gethostbyname.o \
socket_gethostid.o \
@@ -630,7 +765,8 @@ NET_LIB = \
usergroup_setregid.o \
usergroup_setreuid.o \
usergroup_setsid.o \
usergroup_setuid.o
usergroup_setuid.o \
utsname_uname.o
DEBUG_LIB = \
debug.lib_rev.o \
@@ -720,7 +856,7 @@ LIBS_020 := $(LIBM881_OBJS)/libm881.a $(LIBS_68K)
##############################################################################
# The 881 math library won't build in plain 68k mode
ifneq (,$(findstring 68020,$(CODE_TYPE)))
ifneq (,$(findstring 68020,$(CODE_FLAGS)))
LIBS := $(LIBS_020)
else
LIBS := $(LIBS_68K)
@@ -728,7 +864,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
##############################################################################
@@ -738,9 +874,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 \
@@ -817,47 +950,38 @@ lib/libm020 : lib
lib/libb/libm020/libm.a: lib lib/libb/libm020
$(MAKE) TYPE=small_data_020 kitchen_sink
$(COPY) $(foreach file,$(LIBS_020),small_data_020/$(file)) lib/libb/libm020
@$(COPY) $(foreach file,$(LIBS_020),small_data_020/$(file)) lib/libb/libm020
lib/libb/libm.a: lib lib/libb
$(MAKE) TYPE=small_data kitchen_sink
$(COPY) $(foreach file,$(LIBS_68K),small_data/$(file)) lib/libb
@$(COPY) $(foreach file,$(LIBS_68K),small_data/$(file)) lib/libb
lib/libb32/libm020/libm.a: lib lib/libb32 lib/libb32/libm020
$(MAKE) TYPE=small_data32 kitchen_sink
$(COPY) $(foreach file,$(LIBS_020),small_data32/$(file)) lib/libb32/libm020
@$(COPY) $(foreach file,$(LIBS_020),small_data32/$(file)) lib/libb32/libm020
lib/libm020/libm.a: lib lib/libm020
$(MAKE) TYPE=large_data_020 kitchen_sink
$(COPY) $(foreach file,$(LIBS_020),large_data_020/$(file)) lib/libm020
@$(COPY) $(foreach file,$(LIBS_020),large_data_020/$(file)) lib/libm020
lib/libm.a: lib
$(MAKE) TYPE=large_data kitchen_sink
$(COPY) $(foreach file,$(LIBS_68K),large_data/$(file)) lib
@$(COPY) $(foreach file,$(LIBS_68K),large_data/$(file)) lib
lib/nrcrt0.o : lib nrcrt0.o
$(COPY) nrcrt0.o lib
@$(COPY) nrcrt0.o lib
lib/nbcrt0.o : lib nbcrt0.o
$(COPY) nbcrt0.o lib
@$(COPY) nbcrt0.o lib
lib/ncrt0.o : lib ncrt0.o
$(COPY) ncrt0.o lib
@$(COPY) ncrt0.o lib
lib/n32bcrt0.o : lib nb32crt0.o
$(COPY) nb32crt0.o lib
@$(COPY) nb32crt0.o lib
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
@$(COPY) nr32crt0.o lib
##############################################################################
@@ -893,21 +1017,48 @@ $(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
$(LIBC_OBJS)/stdlib_calloc.o : stdlib_calloc.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_calloc.o : stdlib_calloc.c stdlib_memory.h
$(LIBC_OBJS)/stdlib_free.o : stdlib_free.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_free.o : stdlib_free.c stdlib_memory.h
$(LIBC_OBJS)/stdlib_init_exit.o : stdlib_init_exit.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_init_exit.o : stdlib_init_exit.c stdlib_memory.h
$(LIBC_OBJS)/stdlib_malloc.o : stdlib_malloc.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_malloc.o : stdlib_malloc.c stdlib_memory.h
$(LIBC_OBJS)/stdlib_realloc.o : stdlib_realloc.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_realloc.o : stdlib_realloc.c stdlib_memory.h
$(LIBC_OBJS)/stdlib_red_black.o : stdlib_red_black.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_red_black.o : stdlib_red_black.c stdlib_memory.h
##############################################################################
# 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) $<
$(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
##############################################################################
@@ -1038,25 +1189,48 @@ $(LIBAMIGA_OBJS)/libamiga.a : $(LIBAMIGA_OBJS) $(foreach file,$(AMIGA_LIB),$(LIB
##############################################################################
nrcrt0.o : nrcrt0.S
$(CC) -traditional -o $@ -c nrcrt0.S
@echo "Assembling $< [resident]"
@$(CC) -traditional -o $@ -c nrcrt0.S
nr32crt0.o : nrcrt0.S
$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c nrcrt0.S
@echo "Assembling $< [resident32]"
@$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c nrcrt0.S
nbcrt0.o : ncrt0.S
$(CC) -traditional -DSMALL_DATA -o $@ -c ncrt0.S
@echo "Assembling $< [small_data]"
@$(CC) -traditional -DSMALL_DATA -o $@ -c ncrt0.S
nb32crt0.o : ncrt0.S
$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c ncrt0.S
@echo "Assembling $< [small_data32]"
@$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c ncrt0.S
ncrt0.o : ncrt0.S
$(CC) -traditional -o $@ -c ncrt0.S
@echo "Assembling $< [large_data]"
@$(CC) -traditional -o $@ -c ncrt0.S
mainb32.o : stdlib_main.c
$(CC) -o mainb32.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel32 -DSMALL_DATA32 -m68020-60 -DM68020 stdlib_main.c
##############################################################################
mainb.o : stdlib_main.c
$(CC) -o mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel -DSMALL_DATA -m68000 stdlib_main.c
CONSTRUCTOR_FILES = \
amiga_rexxvars.c \
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_init_exit.c \
stdlib_setenv.c \
stdlib_stackcheck.c \
stdlib_stackextension.c \
time_clock.c \
unistd_chdir_exit.c \
unistd_init_exit.c \
unistd_timer.c \
unistd_wildcard_expand.c \
usergroup_init_exit.c
mainnb.o : stdlib_main.c
$(CC) -o mainnb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -m68000 stdlib_main.c
touch_constructor_files:
touch $(CONSTRUCTOR_FILES)

View File

@@ -1,5 +1,5 @@
#
# $Id: GNUmakefile.os4,v 1.23 2005-01-29 18:05:13 obarthel Exp $
# $Id: GNUmakefile.os4,v 1.64 2005-06-04 14:16:58 obarthel Exp $
#
# :ts=8
#
@@ -16,7 +16,7 @@ CC = ppc-amigaos-gcc
AR = ppc-amigaos-ar -q
RANLIB = ppc-amigaos-ranlib
COPY = cp -a
DELETE = rm -r
DELETE = rm -rf
MAKEDIR = mkdir
# The following are for the native OS4 compiler
@@ -27,7 +27,7 @@ MAKEDIR = mkdir
# DELETE = delete all quiet
# MAKEDIR = makedir
MAKE = make -f GNUmakefile.os4
MAKE = $(MAKE_COMMAND) -f GNUmakefile.os4
##############################################################################
@@ -101,17 +101,19 @@ CODE_TYPE := -mbaserel -DBASEREL_DATA
FLOAT_TYPE := -DPPC_FLOATING_POINT_SUPPORT
endif
##############################################################################
WARNINGS = \
-Wall -W -Wshadow -Wpointer-arith -Wsign-compare -Wmissing-prototypes \
-Wundef -Wbad-function-cast -Wmissing-declarations -Wconversion
-Wall -W -Wpointer-arith -Wsign-compare -Wmissing-prototypes \
-Wundef -Wbad-function-cast -Wmissing-declarations -Wunused
# -Wconversion -Wshadow
INCLUDES = -Iinclude -I. -I$(SDK_INCLUDE)
OPTIONS = -DNDEBUG -DUSE_64_BIT_INTS -D__USE_INLINE__ -Wa,-mregnames
OPTIMIZE = -O -fomit-frame-pointer -funroll-loops
#DEBUG = -g
#OPTIONS = -D__THREAD_SAFE -DNDEBUG -DUSE_64_BIT_INTS -D__USE_INLINE__ -Wa,-mregnames -fno-common -std=gnu99
OPTIONS = -DNDEBUG -DUSE_64_BIT_INTS -D__USE_INLINE__ -Wa,-mregnames -fno-common -std=gnu99
OPTIMIZE = -O3
#DEBUG = -ggdb
CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDES)
@@ -123,6 +125,7 @@ C_LIB = \
ctype_isalnum.o \
ctype_isalpha.o \
ctype_isascii.o \
ctype_isblank.o \
ctype_iscntrl.o \
ctype_isdigit.o \
ctype_isgraph.o \
@@ -132,27 +135,34 @@ C_LIB = \
ctype_isspace.o \
ctype_isupper.o \
ctype_isxdigit.o \
ctype_table.o \
ctype_tolower.o \
ctype_toupper.o \
ctype_table.o \
dirent_closedir.o \
dirent_data.o \
dirent_rewinddir.o \
dirent_opendir.o \
dirent_readdir.o \
dirent_rewinddir.o \
errno_data.o \
fcntl_close.o \
fcntl_creat.o \
fcntl_fcntl.o \
fcntl_get_default_file.o \
fcntl_lock.o \
fcntl_lseek.o \
fcntl_open.o \
fcntl_read.o \
fcntl_write.o \
fcntl_get_default_file.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 \
locale_localeconv.o \
locale_open_locale.o \
locale_setlocale.o \
mount_convertinfo.o \
mount_fstatfs.o \
@@ -170,7 +180,6 @@ C_LIB = \
signal_sigsetmask.o \
stat_chmod.o \
stat_convertfileinfo.o \
stat_data.o \
stat_fchmod.o \
stat_fstat.o \
stat_lstat.o \
@@ -180,21 +189,23 @@ C_LIB = \
stat_umask.o \
stdio_asprintf.o \
stdio_clearerr.o \
stdio_data.o \
stdio_dropiobreadbuffer.o \
stdio_duplicate_fd.o \
stdio_examine_fh.o \
stdio_fclose.o \
stdio_fdhookentry.o \
stdio_feof.o \
stdio_ferror.o \
stdio_fflush.o \
stdio_flush.o \
stdio_fgetc.o \
stdio_fgetpos.o \
stdio_fgets.o \
stdio_filliobreadbuffer.o \
stdio_findvacantfdentry.o \
stdio_findvacantiobentry.o \
stdio_flockfile.o \
stdio_flush.o \
stdio_flush_all_files.o \
stdio_flushiobwritebuffer.o \
stdio_fopen.o \
stdio_fprintf.o \
@@ -206,27 +217,38 @@ C_LIB = \
stdio_fseek.o \
stdio_fsetpos.o \
stdio_ftell.o \
stdio_ftrylockfile.o \
stdio_funlockfile.o \
stdio_fwrite.o \
stdio_getc.o \
stdio_getc_unlocked.o \
stdio_getchar.o \
stdio_get_file_descriptor.o \
stdio_getchar_unlocked.o \
stdio_gets.o \
stdio_get_file_descriptor.o \
stdio_growfdtable.o \
stdio_growiobtable.o \
stdio_grow_file.o \
stdio_initializefd.o \
stdio_initializeiob.o \
stdio_init_exit.o \
stdio_file_init.o \
stdio_iobhookentry.o \
stdio_lock.o \
stdio_locksemaphorename.o \
stdio_nostdio.o \
stdio_openiob.o \
stdio_parent_of_fh.o \
stdio_perror.o \
stdio_popen.o \
stdio_printf.o \
stdio_putc.o \
stdio_putc_unlocked.o \
stdio_putchar.o \
stdio_putchar_unlocked.o \
stdio_puts.o \
stdio_remove.o \
stdio_remove_fd_alias.o \
stdio_rename.o \
stdio_rewind.o \
stdio_scanf.o \
@@ -240,10 +262,13 @@ C_LIB = \
stdio_tmpnam.o \
stdio_translateioerror.o \
stdio_ungetc.o \
stdio_unlockfile.o \
stdio_vasprintf.o \
stdio_vasprintf_hook_entry.o \
stdio_vfprintf.o \
stdio_vfscanf.o \
stdio_vsscanf.o \
stdio_vscanf.o \
stdio_vprintf.o \
stdio_vsnprintf.o \
stdio_vsnprintf_hook_entry.o \
@@ -256,13 +281,12 @@ C_LIB = \
stdlib_atexit.o \
stdlib_atoi.o \
stdlib_atol.o \
stdlib_atoll.o \
stdlib_bsearch.o \
stdlib_calloc.o \
stdlib_checkdetach.o \
stdlib_constructor.o \
stdlib_constructor_begin.o \
stdlib_constructor_end.o \
stdlib_data.o \
stdlib_default_pool_size.o \
stdlib_default_puddle_size.o \
stdlib_destructor.o \
@@ -277,11 +301,15 @@ C_LIB = \
stdlib_getdefstacksize.o \
stdlib_getenv.o \
stdlib_getsp.o \
stdlib_get_errno.o \
stdlib_init_exit.o \
stdlib_isresident.o \
stdlib_labs.o \
stdlib_llabs.o \
stdlib_ldiv.o \
stdlib_lldiv.o \
stdlib_machine_test.o \
stdlib_main.o \
stdlib_malloc.o \
stdlib_math.o \
stdlib_mkdtemp.o \
@@ -297,14 +325,16 @@ C_LIB = \
stdlib_putenv.o \
stdlib_qsort.o \
stdlib_rand.o \
stdlib_rand_r.o \
stdlib_realloc.o \
stdlib_red_black.o \
stdlib_semaphore.o \
stdlib_setenv.o \
stdlib_setjmp.o \
stdlib_set_errno.o \
stdlib_set_process_window.o \
stdlib_shell_escape.o \
stdlib_showerror.o \
stdlib_socket.o \
stdlib_srand.o \
stdlib_stackargbytes.o \
stdlib_stackcheck.o \
@@ -312,22 +342,24 @@ C_LIB = \
stdlib_stacksafezone.o \
stdlib_stacksize.o \
stdlib_stack_usage.o \
stdlib_startup.o \
stdlib_arg.o \
stdlib_stdio_window_spec.o \
stdlib_strtol.o \
stdlib_strtoul.o \
stdlib_strtoll.o \
stdlib_strtoul.o \
stdlib_strtoull.o \
stdlib_swapstack.o \
stdlib_sysbase.o \
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 \
stdlib_stdio_window_spec.o \
strings_ffs.o \
strings_strcasecmp.o \
strings_strncasecmp.o \
string_bcmp.o \
@@ -381,6 +413,8 @@ C_LIB = \
time_strftime.o \
time_time.o \
time_weekday.o \
uio_readv.o \
uio_writev.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
@@ -389,8 +423,10 @@ C_LIB = \
unistd_dup.o \
unistd_dup2.o \
unistd_fchown.o \
unistd_fdatasync.o \
unistd_fdopen.o \
unistd_fileno.o \
unistd_fsync.o \
unistd_ftruncate.o \
unistd_getcwd.o \
unistd_getopt.o \
@@ -403,18 +439,19 @@ C_LIB = \
unistd_realpath.o \
unistd_sleep.o \
unistd_symlink.o \
unistd_sync_fd.o \
unistd_timer.o \
unistd_time_delay.o \
unistd_truncate.o \
unistd_unlink.o \
unistd_usleep.o \
utime_utime.o
utime_utime.o \
utsname_uname.o
# All objects files which make up libunix.a
UNIX_LIB = \
unix.lib_rev.o \
dirent_closedir.o \
dirent_data.o \
dirent_rewinddir.o \
dirent_opendir.o \
dirent_readdir.o \
@@ -430,19 +467,37 @@ UNIX_LIB = \
stat_mkdir.o \
stat_rmdir.o \
stat_stat.o \
stdio_ctermid.o \
stdio_fdhookentry.o \
stdio_fflush.o \
stdio_fopen.o \
stdio_file_init.o \
stdio_init_exit.o \
stdio_locksemaphorename.o \
stdio_openiob.o \
stdio_popen.o \
stdio_record_locking.o \
stdio_remove.o \
stdio_rename.o \
stdlib_mkdtemp.o \
stdlib_mkstemp.o \
stdlib_mktemp.o \
stdlib_system.o \
termios_cfgetispeed.o \
termios_cfgetospeed.o \
termios_cfmakeraw.o \
termios_cfsetispeed.o \
termios_cfsetospeed.o \
termios_console_fdhookentry.o \
termios_openserial.o \
termios_tcdrain.o \
termios_tcflow.o \
termios_tcflush.o \
termios_tcgetattr.o \
termios_tcsendbreak.o \
termios_tcsetattr.o \
uio_readv.o \
uio_writev.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
@@ -459,6 +514,8 @@ UNIX_LIB = \
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 \
@@ -466,44 +523,118 @@ UNIX_LIB = \
# All objects files which make up libm.a
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 \
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_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_data.o \
math_coshf.o \
math_erf.o \
math_erfc.o \
math_erfcf.o \
math_erff.o \
math_exp.o \
math_expf.o \
math_expm1.o \
math_expm1f.o \
math_fabs.o \
math_fabsf.o \
math_floor.o \
math_floorf.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_isnan.o \
math_isinf.o \
math_isfinite.o \
math_isunordered.o \
math_kernel_cos.o \
math_kernel_cosf.o \
math_kernel_expm1.o \
math_kernel_rem_pio2.o \
math_kernel_scalbn.o \
math_kernel_sin.o \
math_kernel_sinf.o \
math_kernel_tan.o \
math_kernel_tanf.o \
math_ldexp.o \
math_ldexpf.o \
math_lgamma.o \
math_lgammaf.o \
math_log.o \
math_log10.o \
math_log10f.o \
math_log1p.o \
math_log1pf.o \
math_logb.o \
math_logbf.o \
math_logf.o \
math_modf.o \
math_modff.o \
math_nan.o \
math_nanf.o \
math_nextafter.o \
math_nextafterf.o \
math_pow.o \
math_powf.o \
math_remainder.o \
math_remainderf.o \
math_rem_pio2f.o \
math_rint.o \
math_rintf.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_kernel_expm1.o \
math_kernel_scalbn.o \
math_kernel_tan.o \
math_kernel_cos.o \
math_kernel_rem_pio2.o \
math_kernel_sin.o \
math_tanhf.o \
stdio_asprintf.o \
stdio_flush.o \
stdio_flush_all_files.o \
stdio_fprintf.o \
stdio_fscanf.o \
stdio_printf.o \
@@ -514,12 +645,14 @@ 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_machine_test.o \
stdlib_strtod.o \
stdlib_strtof.o \
time_difftime.o
# All objects files which make up libnet.a
@@ -528,7 +661,6 @@ NET_LIB = \
socket_accept.o \
socket_bind.o \
socket_connect.o \
socket_data.o \
socket_gethostbyaddr.o \
socket_gethostbyname.o \
socket_gethostid.o \
@@ -595,7 +727,8 @@ NET_LIB = \
usergroup_setregid.o \
usergroup_setreuid.o \
usergroup_setsid.o \
usergroup_setuid.o
usergroup_setuid.o \
utsname_uname.o
# All objects files which make up libdebug.a
DEBUG_LIB = \
@@ -688,7 +821,7 @@ LIBS := \
##############################################################################
# The startup object files to be built
STARTUPS := bcrt0.o bcrtbegin.o bcrtend.o crt0.o crtbegin.o crtend.o mainb.o mainnb.o
STARTUPS := crt0.o crtbegin.o crtend.o
##############################################################################
@@ -703,22 +836,18 @@ all: \
large_data \
large_data_softfloat \
baserel \
lib/bcrt0.o \
lib/bcrtbegin.o \
lib/bcrtend.o \
lib/crt0.o \
lib/crtbegin.o \
lib/crtend.o \
lib/mainb.o \
lib/mainnb.o \
lib/libm.a \
lib/small-data/crt0.o \
lib/small-data/crtbegin.o \
lib/small-data/crtend.o \
lib/small-data/libm.a \
lib/soft-float/libm.a \
lib/baserel/crt0.o \
lib/baserel/crtbegin.o \
lib/baserel/crtend.o \
lib/baserel/mainb.o \
lib/baserel/mainnb.o \
lib/baserel/libm.a
##############################################################################
@@ -842,20 +971,14 @@ lib/crtbegin.o : lib crtbegin.o
lib/crtend.o : lib crtend.o
$(COPY) crtend.o lib
lib/mainnb.o : lib mainnb.o
$(COPY) mainnb.o lib
lib/small-data/crt0.o : lib small_data/crt0.o
$(COPY) small_data/crt0.o lib/small-data
lib/mainb.o : lib mainb.o
$(COPY) mainb.o lib
lib/small-data/crtbegin.o : lib small_data/crtbegin.o
$(COPY) small_data/crtbegin.o lib/small-data
lib/bcrt0.o : lib bcrt0.o
$(COPY) bcrt0.o lib
lib/bcrtbegin.o : lib bcrtbegin.o
$(COPY) bcrtbegin.o lib
lib/bcrtend.o : lib bcrtend.o
$(COPY) bcrtend.o lib
lib/small-data/crtend.o : lib small_data/crtend.o
$(COPY) small_data/crtend.o lib/small-data
lib/baserel/crt0.o : lib baserel/crt0.o
$(COPY) baserel/crt0.o lib/baserel
@@ -866,13 +989,6 @@ lib/baserel/crtbegin.o : lib baserel/crtbegin.o
lib/baserel/crtend.o : lib baserel/crtend.o
$(COPY) baserel/crtend.o lib/baserel
lib/baserel/mainnb.o : lib baserel/mainnb.o
$(COPY) baserel/mainnb.o lib/baserel
lib/baserel/mainb.o : lib baserel/mainb.o
$(COPY) baserel/mainb.o lib/baserel
##############################################################################
# Individual dependencies which tell make to build the object files from
@@ -903,20 +1019,20 @@ $(LIBAMIGA_OBJS)/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
# Build rules for the debug version of the library which has special
# memory allocation debugging code, controlled by the contents of
# the stdlib_mem_debug.h file.
$(LIBC_OBJS)/stdlib_alloca.o : stdlib_alloca.c stdlib_mem_debug.h
# the stdlib_memory.h file.
$(LIBC_OBJS)/stdlib_alloca.o : stdlib_alloca.c stdlib_memory.h
$(LIBC_OBJS)/stdlib_calloc.o : stdlib_calloc.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_calloc.o : stdlib_calloc.c stdlib_memory.h
$(LIBC_OBJS)/stdlib_free.o : stdlib_free.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_free.o : stdlib_free.c stdlib_memory.h
$(LIBC_OBJS)/stdlib_init_exit.o : stdlib_init_exit.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_init_exit.o : stdlib_init_exit.c stdlib_memory.h
$(LIBC_OBJS)/stdlib_malloc.o : stdlib_malloc.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_malloc.o : stdlib_malloc.c stdlib_memory.h
$(LIBC_OBJS)/stdlib_realloc.o : stdlib_realloc.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_realloc.o : stdlib_realloc.c stdlib_memory.h
$(LIBC_OBJS)/stdlib_red_black.o : stdlib_red_black.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_red_black.o : stdlib_red_black.c stdlib_memory.h
##############################################################################
@@ -1039,38 +1155,27 @@ crt0.o : crt0.S
@echo "Assembling $<"
@$(CC) -Wa,-mregnames -o crt0.o -c crt0.S
bcrt0.o : crt0.S
small_data/crt0.o : crt0.S
@echo "Assembling $<"
@$(CC) -DSMALL_DATA -Wa,-mregnames -o bcrt0.o -c crt0.S
@$(CC) -DSMALL_DATA -Wa,-mregnames -o small_data/crt0.o -c crt0.S
mainnb.o : stdlib_main.c
@echo "Compiling $<"
@$(CC) -o mainnb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=data stdlib_main.c
small_data/crtbegin.o : crtbegin.c
@echo "Assembling $<"
@$(CC) -o small_data/crtbegin.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA crtbegin.c
mainb.o : stdlib_main.c
@echo "Compiling $<"
@$(CC) -o mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA stdlib_main.c
bcrtbegin.o : crtbegin.c
$(CC) -o bcrtbegin.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA crtbegin.c
bcrtend.o : crtend.c
$(CC) -o bcrtend.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA crtend.c
small_data/crtend.o : crtend.c
@echo "Assembling $<"
@$(CC) -o small_data/crtend.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA crtend.c
baserel/crt0.o : crt0.S
@echo "Assembling $<"
@$(CC) -Wa,-mregnames -o baserel/crt0.o -mbaserel -DBASEREL_DATA -c crt0.S
baserel/mainnb.o : stdlib_main.c
@echo "Compiling $<"
@$(CC) -o baserel/mainnb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -mbaserel -DBASEREL_DATA stdlib_main.c
baserel/mainb.o : stdlib_main.c
@echo "Compiling $<"
@$(CC) -o baserel/mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -mbaserel -DBASEREL_DATA stdlib_main.c
baserel/crtbegin.o : crtbegin.c
$(CC) -o baserel/crtbegin.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -mbaserel -DBASEREL_DATA crtbegin.c
@echo "Assembling $<"
@$(CC) -o baserel/crtbegin.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -mbaserel -DBASEREL_DATA crtbegin.c
baserel/crtend.o : crtend.c
$(CC) -o baserel/crtend.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -mbaserel -DBASEREL_DATA crtend.c
@echo "Assembling $<"
@$(CC) -o baserel/crtend.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -mbaserel -DBASEREL_DATA crtend.c

23
library/TODO Executable file
View File

@@ -0,0 +1,23 @@
C99 math functions:
(functions generally missing, including their "float" counterparts)
exp2
exp2f
fma
fmaf
log2
log2f
lrint
lrintf
lround
lroundf
nearbyint
nearbyintf
remquo
remquof
round
roundf
tgamma
tgammaf
trunc
truncf

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 187
#define DATE "29.1.2005"
#define VERS "amiga.lib 1.187"
#define VSTRING "amiga.lib 1.187 (29.1.2005)\r\n"
#define VERSTAG "\0$VER: amiga.lib 1.187 (29.1.2005)"
#define REVISION 193
#define DATE "4.6.2005"
#define VERS "amiga.lib 1.193"
#define VSTRING "amiga.lib 1.193 (4.6.2005)\r\n"
#define VERSTAG "\0$VER: amiga.lib 1.193 (4.6.2005)"

View File

@@ -1 +1 @@
187
193

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_acrypt.c,v 1.2 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga_acrypt.c,v 1.3 2005-05-30 14:01:20 obarthel Exp $
*
* :ts=4
*
@@ -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"

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_addtof.c,v 1.2 2005-01-02 09:07:06 obarthel Exp $
* $Id: amiga_addtof.c,v 1.3 2005-02-25 10:14:20 obarthel Exp $
*
* :ts=4
*
@@ -57,7 +57,7 @@ typedef LONG (* CFUNC)(APTR arg);
/****************************************************************************/
static LONG INTERRUPT ASM
STATIC LONG INTERRUPT ASM
call_routine(REG(a1,struct Isrvstr *i))
{
CFUNC p = (CFUNC)i->ccode;

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_createtask.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_createtask.c,v 1.4 2005-03-18 12:38:21 obarthel Exp $
*
* :ts=4
*
@@ -46,6 +46,12 @@
/****************************************************************************/
#ifndef _STDLIB_PROFILE_H
#include "stdlib_profile.h"
#endif /* _STDLIB_PROFILE_H */
/****************************************************************************/
#include "macros.h"
#include "debug.h"

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_dotimer.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_dotimer.c,v 1.4 2005-03-18 12:38:21 obarthel Exp $
*
* :ts=4
*
@@ -44,6 +44,12 @@
/****************************************************************************/
#ifndef _STDLIB_PROFILE_H
#include "stdlib_profile.h"
#endif /* _STDLIB_PROFILE_H */
/****************************************************************************/
#include "macros.h"
#include "debug.h"
@@ -58,6 +64,22 @@ DoTimer(struct timeval *tv,LONG unit,LONG command)
assert( tv != NULL );
#if defined(__amigaos4__)
{
mp = AllocSysObjectTags(ASOT_PORT,
ASOPORT_Action, PA_SIGNAL,
ASOPORT_Signal, SIGB_SINGLE,
ASOPORT_Target, FindTask(NULL),
TAG_DONE);
if(mp == NULL)
{
error = IOERR_OPENFAIL;
goto out;
}
}
#else
{
mp = AllocVec(sizeof(*mp),MEMF_ANY|MEMF_PUBLIC|MEMF_CLEAR);
if(mp == NULL)
{
@@ -69,7 +91,10 @@ DoTimer(struct timeval *tv,LONG unit,LONG command)
mp->mp_Flags = PA_SIGNAL;
mp->mp_SigBit = SIGB_SINGLE;
mp->mp_SigTask = FindTask(NULL);
NewList(&mp->mp_MsgList);
}
#endif /* __amigaos4__ */
tr = (struct timerequest *)CreateIORequest(mp,sizeof(*tr));
if(tr == NULL)
@@ -107,7 +132,16 @@ DoTimer(struct timeval *tv,LONG unit,LONG command)
DeleteIORequest((struct IORequest *)tr);
}
#if defined(__amigaos4__)
{
if(mp != NULL)
FreeSysObject(ASOT_PORT,mp);
}
#else
{
FreeVec(mp);
}
#endif /* __amigaos4__ */
return(error);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_invertstring.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: amiga_invertstring.c,v 1.3 2005-02-25 10:14:20 obarthel Exp $
*
* :ts=4
*
@@ -49,7 +49,7 @@
/****************************************************************************/
static int
STATIC int
do_escape(int cc)
{
int result;
@@ -91,7 +91,7 @@ do_escape(int cc)
/****************************************************************************/
static ULONG
STATIC ULONG
do_angle(STRPTR * strp, struct InputEvent *ie)
{
ULONG result;

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_rexxvars.c,v 1.3 2005-01-09 10:10:40 obarthel Exp $
* $Id: amiga_rexxvars.c,v 1.6 2005-03-18 12:38:21 obarthel Exp $
*
* :ts=4
*
@@ -34,12 +34,20 @@
/* 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>
@@ -60,7 +68,7 @@ static struct RexxSysIFace * IRexxSys;
/****************************************************************************/
CLIB_CONSTRUCTOR(__rexxvars_init)
CLIB_CONSTRUCTOR(rexxvars_init)
{
ENTER();
@@ -80,12 +88,14 @@ CLIB_CONSTRUCTOR(__rexxvars_init)
}
#endif /* __amigaos4__ */
LEAVE();
CONSTRUCTOR_SUCCEED();
}
/****************************************************************************/
CLIB_DESTRUCTOR(__rexxvars_exit)
CLIB_DESTRUCTOR(rexxvars_exit)
{
ENTER();

View File

@@ -1,5 +1,5 @@
/*
* $Id: amiga_setsuperattrs.c,v 1.3 2005-01-09 10:10:41 obarthel Exp $
* $Id: amiga_setsuperattrs.c,v 1.4 2005-02-25 10:14:20 obarthel Exp $
*
* :ts=4
*
@@ -46,7 +46,7 @@
/****************************************************************************/
static ULONG
STATIC ULONG
SetSuperAttrsA(Class * cl,Object * obj,struct TagItem * tags)
{
ULONG result = 0;

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 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 -a lib $dir_name
cp -a lib.threadsafe $dir_name
cp -a 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
# 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,6 +1,6 @@
#define VERSION 1
#define REVISION 187
#define DATE "29.1.2005"
#define VERS "c.lib 1.187"
#define VSTRING "c.lib 1.187 (29.1.2005)\r\n"
#define VERSTAG "\0$VER: c.lib 1.187 (29.1.2005)"
#define REVISION 193
#define DATE "4.6.2005"
#define VERS "c.lib 1.193"
#define VSTRING "c.lib 1.193 (4.6.2005)\r\n"
#define VERSTAG "\0$VER: c.lib 1.193 (4.6.2005)"

View File

@@ -1 +1 @@
187
193

View File

@@ -1,3 +1,556 @@
c.lib 1.193 (4.6.2005)
- 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.
- Added %D, %e, %F, %g, %G and %h for strftime(); repaired %I.
- 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().
- For %C strtime() should return the century number, not the
year number mod 100.
- 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.
- 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.
- Added NAN, INFINITY, FLT_EVAL_METHOD, float_t and double_t to
<math.h> (C99).
- 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...
- 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.
- Ported cosf(), coshf(), sinf(), sinhf(), tanf(), tanhf()
and hypotf() for C99.
- Ported acosh(), acoshf(), asinh(), asinhf(), lgamma(), lgammaf(),
remainder() and remainderf() for C99.
- The scanf() family now supports character ranges for the %[
conversion. Note that this is a non-standard feature!
- 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.
c.lib 1.192 (12.5.2005)
- 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.
- The record locking semaphore could wind up getting added to the public
list twice. Fixed.
- Fixed two linker errors which were caused by duplicate symbol definitions.
- Added code to the startup routine which allows you to monitor where a command
was started from and which parameters it was invoked with.
- 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.
- The libunix.a flavour of system() no longer attempts to translate the name
of a command unless it contains path separator characters.
- Added strtof(), llabs(), lldiv(), vsscanf() and vscanf() for C99.
- strftime() now supports %C, %n, %r, %R, %t, %T, %u, %V, and %z for C99.
And it ignores the E and O modifiers.
- 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. Also, the "infinity"/"not a number" signals now come out as the
strings "inf" and "nan".
- Added HUGE_VALF to <math.h>.
- 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.
- The scanf() 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. Also, the "inf"/"infinity"/"nan"/"nan()" keywords are processed.
- 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.
- Added isblank().
- 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.
- The printf() family can now produce output for floating point
numbers with more than about 77 characters, provided sufficient
memory is available. C99 calls for a minimum of 4095 characters,
but we're trying to allocate the space required dynamically.
c.lib 1.191 (9.4.2005)
- The name of the public record locking semaphore has to be preallocated
for OS4 if the AllocSysObject() function is used to create it.
- 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.
- 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().
- Moved the __UtilityBase/__IUtility variable declarations into
a separate file.
- Simplified the library/open close code in "stdlib_main.c".
- 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.
- Invoking fstat() on what maps to a con-handler stream now produces
information identifying it as a character special file.
- 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>.
- The stdio locking in fcntl() wasn't working correctly. Fixed.
- Made the clearerr(), feof() and ferror() macros thread-safe.
c.lib 1.190 (25.3.2005)
- DoTimer() now calls AllocSysObject() rather than making up
a MsgPort locally.
- The record locking semaphore code now builds a semaphore to add
before it tries to find the public one in memory. That way, the
code can spend less time in Forbid() state and, heaven forbid,
refrain from allocating memory while in that state.
- Split the general stdio initialization/cleanup code from the
initialization of the stdin/stdout/stderr streams.
- Moved the Workbench console stream initialization into the
initialization code for the stdin/stdout/stderr streams and
out of the program parameter setup.
- The current program name is now set up in the stdlib
initialization function.
- Simplified the machine test code; moved the FPU check into
the math initialization code.
- Added more safety checks to verify that file descriptor
file handles are valid.
- Made the file descriptor checks in the fsync() and fdatasync()
functions more robust.
- Cleaned up the 68k build makefile, so that the CPU and FPU
tests and the error message display can run safely even
on plain 68000 machines. This won't work for the 32 bit small
data model, which implies 68020 code, but so there...
- Moved the CPU/FPU type tests into the respective linker
libraries.
- Moved the data declarations out of math_data.c, stat_data.c,
socket_data.c, dirent_data.c and stdio_data.c and into the
code that initializes them.
- Moved a few __delete_semaphore() calls into conditional compilation
sections where they should have been in the first place.
- Thanks to Jörg Strohmayer, the GCC library build now manages to
invoke the library's constructor/destructor functions in a
very particular order. That way, you can use constructor/destructor
functions in your own code and not have them clash with the library's
own functions.
- Reimplemented the constructor/destructor invocation code for GCC.
Both the 68k and PowerPC platform now invoke them in the same order
and the 68k code uses the designated invocation priorities. The
PowerPC destructor function now sets up the exit() jmp_buf before
the destructor functions are called.
- Added S_IREAD, S_IWRITE and S_IEXEC aliases to <sys/stat.h>.
- Moved data out of stdlib_data.c and into the code that references
or initializes it.
- The stdlib constructor now performs the CPU/FPU compatibility test.
- Introduced new constructor types and changed the overall priority
order.
- Switched over the startup code and the library itself to use
constructor/destructor functions for initialization and cleanup
purposes.
- 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.
- Fixed the SAS/C destructor function prototypes and verified
that the constructors/destructors are called in the proper
order, too.
- 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.
- 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.
- ftruncate() ended up changing the current file position, contrary
to what it is supposed to do. Fixed.
- fcntl() did not work for sockets. Fixed.
- Reorganized the local header files, removing redundancies.
- Dropped unused stub code which is now redundant because of
the constructor/destructor mechanism.
- 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() ;-)
- 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.
- 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...
- Moved stdlib_main.o into the regular libc.a, at least for
the 68k build. The PowerPC build may follow later, provided
I manage to get the specs file fixed. Actually, stdlib_main.o
is in the libc.a library already. Now about that specs file...
- Moved the check for the presence of an FPU into the
math_init.c code. I am far from certain whether this will
have the desired effect, though. Due to how the GNU ld linker
works, libraries are scanned once only. And the FPU check will
be pulled in only if something references the HUGE_VAL
constant.
- Activated the dormant thread-safe standard input/output/error
handling code.
- Small fixes to fcntl() and select() to cover the thread-safe
fd->fd_DefaultFile == ZERO case.
c.lib 1.189 (5.3.2005)
- Rewrote the __translate_unix_to_amiga_path_name() function to
translate patterns such as "foo/bar/../../baz" properly, and to
use strlen() a lot less.
- Major, major changes! Moved most of the monolithic code out of
the file descriptor hook and into the respective functions,
such as dup2(), fchmod(), fchown(), fcntl(), fdatasync(), fstatfs(),
fsync(), ftruncate() and lseek(). Code which is not strictly
required will no longer find its way into your programs if you
link with the updated library.
NOTE: these changes require that the entire library is rebuilt!
- The buffered and unbuffered file hook code is now invoked through
function pointers alone. The utility.library/CallHookPkt mechanism
is no longer required.
- Moved the entire lseek() code relevant for files into the hook
function.
- Simplified the close() function which now just calls into the
hook code to perform whatever is necessary. The hook code is
responsible for cleaning up after aliases, etc. This change in
turn made it possible to greatly simplify the hook code for
buffered files which now bypasses close/read/write/lseek and
directly invokes the hook code for unbuffered files.
- Added various floating point constants to <math.h>, courtesy
of Henning Nielsen Lund. Thank you very much!
- When using the wildcard expansion code for command line
parameters (which is by default linked in with libunix.a),
regular expressions can no longer prompt dos.library requesters
to appear. However, to be on the safe side, if you are expecting
to pass regular expressions on the command line, do not use
the wildcard expansion code such as by overriding the library
symbols with dummy functions such as are used in the file
"stdlib_wildcard_expand.c".
- Added a new variable '__open_locale' which can be used to
restrict all library functions to use the "C" language locale
rather than the current system locale settings. In addition
to that, two new functions __locale_exit() and __locale_init()
can be used to close and (re-)open the system locale at a
later time.
- Local ("static") functions are now identified by the STATIC
qualifier. This was done in preparation for changes that will
deal with global and local data and the issue of thread safety.
- Added stdio thread locking functions flockfile(), funlockfile(),
and ftrylockfile().
- Modified the internal FILE structure to allow for thread locking.
Note that this again requires that the library is rebuilt!
- Added or modified macros for getc_unlocked(), getchar_unlocked(),
putc_unlocked() and putchar_unlocked().
- Added rand_r().
- Added flockfile()/funlockfile() wrappers around all stdio
functions.
- Added more semaphore locking around the basic stdio, memory, locale
and dirent data operations. That should do it! While the library is
not reentrant (this is not ixemul.library) it should be thread-safe
now. Thread-safe in the sense of POSIX 1003.1c-1995.
- The thread-safety code is now subject to conditional compilation.
Both the library and the user code need to be rebuilt with the
preprocessor symbol __THREAD_SAFE defined to get thread-safe
code.
- Extended the thread-safety locking to the file descriptors.
NOTE: these changes require that the entire library is rebuilt!
- The translation of Unix to Amiga path names now silently accepts
absolute Amiga path names passed to it and will use them without
changing them.
- Added atoll(), ffs(), ftw(), nftw(), lstat() and uname() code
contributed by Peter Bengtsson. Thank you very much!
- Reworked the code that handles quoting for the wildcard expansion
routine. We no longer allocate memory and then modify it, but
call a function for each quoted parameter which does whatever is
necessary.
- The shell command parameter parser now considers the non-breaking
space character (ISO code 160) to be a blank space character, too.
- Moved the signal semaphore allocation/initialization/deallocation
into a dedicated module. This also has the advantage that it's
harder to break code by accidentally forgetting to call
InitSemaphore() after having allocated the memory for it.
- Rewrote the code that allocates the file descriptor and file
buffer tables so that all the memory allocations are in one
place and it's possible to specify exactly how many table
entries are required at a time.
- Creation and initialization of semaphores now uses the AmigaOS4
specific functions for this purpose, if available.
- In the thread-safe variant, the library now tries to allow
multiple concurrent callers to use the socket functions. Note
that this works only with the Roadshow TCP/IP stack, and the
results with other TCP/IP stacks are rather unpredictable.
c.lib 1.188 (7.2.2005)
- Folded duplicate code in "stdio_init_exit.c" into a common function.
- Simplified the code in "time_asctime_r.c" which builds the time
string. It gracefully handles buffer sizes which are too short
by returning an empty string.
- Moved the "tm->tm_wday" initialization out of the hook function
in "time_strftime.c" since it was to be called only once anyway.
- Lost a few compiler warnings in "unistd_time_delay.c" and
"time_gettimeofday.c".
- Folded duplicate code in "time_mktime.c"; also, errno is no longer
modified unless the library is built with the "CHECK_FOR_NULL_POINTERS"
option.
- We now allocate the AnchorPath used in the unistd_wildcard_expand.c
code. Also, the contents of the AnchorPath structure are no longer
modified between calls. MatchEnd() has to be sufficient.
- Moved redundant code out of the readdir()/opendir()/closedir()
functions which is not required unless the code is built for
Unix compatibility mode.
- Lost the __not_a_number and __infinity variables, including the
code which initialized them.
- Reading/changing the errno variable is no longer done directly, but
involves accessor functions.
- References to the HUGE_VAL quantity now involve an accessor function, too.
- Changed the manner in which the __huge_val constant is initialized by
the __math_init() function. The new approach should be more portable.
- The library no longer sends ACTION_DISK_INFO packets to the console
handler. The side-effects were too varied and irritating after all.
- Added the fsync() and fdatasync() functions and the <stdint.h> and
<inttypes.h> header files contributed by Peter Bengtsson. Thank
you very much!
- Tweaked the build makefiles to produce fewer meaningless warnings.
c.lib 1.187 (29.1.2005)
- The default console output window opened when a program is launched

52
library/complex_carg.c Normal file
View File

@@ -0,0 +1,52 @@
/*
* $Id: complex_carg.c,v 1.1 2005-04-03 10:22: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>
* 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.1 2005-04-03 10:22: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>
* 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.1 2005-04-03 10:22: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>
* 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.1 2005-04-03 10:22: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>
* 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.1 2005-04-03 10:22: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>
* 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.1 2005-04-03 10:22: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>
* 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.1 2005-04-03 10:22: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>
* 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.1 2005-04-03 10:22: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>
* 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.1 2005-04-03 10:22: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>
* 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.1 2005-04-03 10:22: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>
* 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.1 2005-04-03 10:22: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>
* 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.1 2005-04-03 10:22: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>
* 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 Executable file
View File

@@ -0,0 +1,68 @@
/*
* $Id: complex_headers.h,v 1.3 2005-05-12 14:50:06 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>
* 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 */

View File

@@ -1,132 +1,43 @@
/*
* $Id: crtbegin.c,v 1.3 2004-09-29 16:54:54 obarthel Exp $
* $Id: crtbegin.c,v 1.10 2005-03-18 12:38:22 obarthel Exp $
*
* :ts=4
*
* Handles global constructors and destructors.
* Handles global constructors and destructors for the OS4 GCC build.
*/
#include <exec/types.h>
/****************************************************************************/
#include <stdlib.h>
#include <setjmp.h>
/****************************************************************************/
#if defined(__amigaos4__)
/****************************************************************************/
#ifndef EXEC_TYPES_H
#include <exec/types.h>
#endif /* EXEC_TYPES_H */
/****************************************************************************/
/*
* 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
*/
static void (*__CTOR_LIST__[1]) (void) __attribute__((section(".ctors"))) = { (void *)-1 };
static void (*__DTOR_LIST__[1]) (void) __attribute__((section(".dtors"))) = { (void *)-1 };
/****************************************************************************/
static void
_do_ctors(void)
{
void (**pFuncPtr)(void);
/* Skip the first entry in the list (it's -1 anyway) */
pFuncPtr = __CTOR_LIST__ + 1;
/* Call all constructors in forward order */
while (*pFuncPtr != NULL)
(**pFuncPtr++)();
}
/****************************************************************************/
static void
_do_dtors(void)
{
ULONG i = (ULONG)__DTOR_LIST__[0];
void (**pFuncPtr)(void);
if (i == ~0UL)
{
/* Find the end of the destructors list */
i = 1;
while (__DTOR_LIST__[i] != NULL)
i++;
/* We're at the NULL entry now. Go back by one */
i--;
}
/* Call all destructors in reverse order */
pFuncPtr = __DTOR_LIST__ + i;
while (i-- > 0)
(**pFuncPtr--)();
}
/****************************************************************************/
#else
/****************************************************************************/
typedef void (*func_ptr)(void);
/****************************************************************************/
static void
_do_ctors(void)
{
extern func_ptr __CTOR_LIST__[];
ULONG nptrs = (ULONG)__CTOR_LIST__[0];
ULONG i;
for(i = nptrs ; i > 0 ; i--)
__CTOR_LIST__[i]();
}
/****************************************************************************/
static void
_do_dtors(void)
{
extern func_ptr __DTOR_LIST__[];
extern jmp_buf __exit_jmp_buf;
ULONG nptrs = (ULONG)__DTOR_LIST__[0];
static ULONG i;
/* If one of the destructors drops into
* exit(), processing will continue with
* the next following destructor.
*/
(void)setjmp(__exit_jmp_buf);
while(i++ < nptrs)
__DTOR_LIST__[i]();
}
/****************************************************************************/
#endif /*__amigaos4__ */
/****************************************************************************/
/* FIXME: Do we need to put these in .init/.fini sections? */
//void _init(void) __attribute__((section(".init")));
//void _fini(void) __attribute__((section(".fini")));
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)
{
_do_ctors();
int num_ctors,i;
int j;
for(i = 1, num_ctors = 0 ; __CTOR_LIST__[i] != NULL ; i++)
num_ctors++;
for(j = 0 ; j < num_ctors ; j++)
__CTOR_LIST__[num_ctors - j]();
}
/****************************************************************************/
@@ -134,5 +45,16 @@ _init(void)
void
_fini(void)
{
_do_dtors();
int num_dtors,i;
static int j;
for(i = 1, num_dtors = 0 ; __DTOR_LIST__[i] != NULL ; i++)
num_dtors++;
while(j++ < num_dtors)
__DTOR_LIST__[j]();
}
/****************************************************************************/
#endif /*__amigaos4__ */

View File

@@ -1,5 +1,5 @@
/*
* $Id: crtend.c,v 1.1.1.1 2004-07-26 16:30:22 obarthel Exp $
* $Id: crtend.c,v 1.2 2005-03-09 21:07:25 obarthel Exp $
*
* :ts=4
*
@@ -10,9 +10,10 @@
/****************************************************************************/
static volatile void (*__CTOR_LIST__[1]) (void) __attribute__((used,section(".ctors"))) = { (void *)0 };
static volatile void (*__DTOR_LIST__[1]) (void) __attribute__((used,section(".dtors"))) = { (void *)0 };
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))) ));
/****************************************************************************/
#endif /*__amigaos4__ */

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_headers.h,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_headers.h,v 1.5 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -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,5 +1,5 @@
/*
* $Id: ctype_isalnum.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_isalnum.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -49,16 +49,26 @@ isalnum(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
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
{
result = isalpha(c) || isdigit(c);
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_isalpha.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_isalpha.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -47,11 +47,19 @@ isalpha(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
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
{
@@ -59,5 +67,7 @@ isalpha(int c)
('A' <= c && c <= 'Z'));
}
__locale_unlock();
return(result);
}

52
library/ctype_isblank.c Normal file
View File

@@ -0,0 +1,52 @@
/*
* $Id: ctype_isblank.c,v 1.2 2005-05-29 08:19:36 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>
* 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,5 +1,5 @@
/*
* $Id: ctype_iscntrl.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_iscntrl.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -47,16 +47,26 @@ iscntrl(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
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
{
result = (('\0' <= c && c < ' ') || (c == 127));
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_isdigit.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_isdigit.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -47,16 +47,26 @@ isdigit(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
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
{
result = ('0' <= c && c <= '9');
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_isgraph.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_isgraph.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -47,16 +47,26 @@ isgraph(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
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
{
result = (' ' < c && c < 127);
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_islower.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_islower.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -47,16 +47,26 @@ islower(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
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
{
result = ('a' <= c && c <= 'z');
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_isprint.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_isprint.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -47,16 +47,26 @@ isprint(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
assert( LocaleBase != NULL );
result = IsPrint(__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 = IsPrint(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = FALSE;
}
else
{
result = (' ' <= c && c <= '~');
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_ispunct.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_ispunct.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -47,11 +47,19 @@ ispunct(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
assert( LocaleBase != NULL );
result = IsPunct(__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 = IsPunct(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = FALSE;
}
else
{
@@ -61,5 +69,7 @@ ispunct(int c)
('{' <= c && c <= '~'));
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_isspace.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_isspace.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -47,11 +47,19 @@ isspace(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
assert( LocaleBase != NULL );
result = IsSpace(__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 = IsSpace(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = FALSE;
}
else
{
@@ -63,5 +71,7 @@ isspace(int c)
c == ' ');
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_isupper.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_isupper.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -47,16 +47,26 @@ isupper(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
assert( LocaleBase != NULL );
result = IsUpper(__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 = IsUpper(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = FALSE;
}
else
{
result = ('A' <= c && c <= 'Z');
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_isxdigit.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_isxdigit.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -47,11 +47,19 @@ isxdigit(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
assert( LocaleBase != NULL );
result = IsXDigit(__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 = IsXDigit(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = FALSE;
}
else
{
@@ -60,5 +68,7 @@ isxdigit(int c)
('A' <= c && c <= 'F'));
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_tolower.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_tolower.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -43,16 +43,26 @@ tolower(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
assert( LocaleBase != NULL );
result = ConvToLower(__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 = ConvToLower(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = c;
}
else
{
result = ('A' <= c && c <= 'Z') ? (c + ('a' - 'A')) : c;
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype_toupper.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: ctype_toupper.c,v 1.4 2005-05-29 09:56:09 obarthel Exp $
*
* :ts=4
*
@@ -43,16 +43,26 @@ toupper(int c)
DECLARE_LOCALEBASE();
int result;
__locale_lock();
if(__locale_table[LC_CTYPE] != NULL)
{
assert( LocaleBase != NULL );
result = ConvToUpper(__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 = ConvToUpper(__locale_table[LC_CTYPE],(ULONG)(c & 255));
else
result = c;
}
else
{
result = ('a' <= c && c <= 'z') ? (c - ('a' - 'A')) : c;
}
__locale_unlock();
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: debug.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: debug.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
*
* :ts=8
*
@@ -133,7 +133,7 @@ _POPDEBUGLEVEL(void)
/****************************************************************************/
static void
STATIC VOID
_INDENT(void)
{
if(program_name_len > 0)

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 187
#define DATE "29.1.2005"
#define VERS "debug.lib 1.187"
#define VSTRING "debug.lib 1.187 (29.1.2005)\r\n"
#define VERSTAG "\0$VER: debug.lib 1.187 (29.1.2005)"
#define REVISION 193
#define DATE "4.6.2005"
#define VERS "debug.lib 1.193"
#define VSTRING "debug.lib 1.193 (4.6.2005)\r\n"
#define VERSTAG "\0$VER: debug.lib 1.193 (4.6.2005)"

View File

@@ -1 +1 @@
187
193

View File

@@ -1,5 +1,5 @@
/*
* $Id: debug_headers.h,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: debug_headers.h,v 1.3 2005-03-18 12:38:22 obarthel Exp $
*
* :ts=4
*
@@ -36,14 +36,15 @@
/****************************************************************************/
#ifndef EXEC_LIBRARIES_H
#include <exec/libraries.h>
#endif /* EXEC_LIBRARIES_H */
/****************************************************************************/
#if defined(__SASC)
#include <clib/exec_protos.h>
/*#include <pragmas/exec_sysbase_pragmas.h>*/
#include <pragmas/exec_pragmas.h>
LONG RawMayGetChar(VOID);
@@ -57,7 +58,11 @@ VOID RawPutChar(UBYTE c);
/****************************************************************************/
#if defined(__amigaos4__)
#ifndef EXEC_EMULATION_H
#include <exec/emulation.h>
#endif /* EXEC_EMULATION_H */
#endif /* __amigaos4__ */
/****************************************************************************/
@@ -106,11 +111,13 @@ VOID RawPutChar(UBYTE c);
/****************************************************************************/
#include "debug.h"
/****************************************************************************/
#ifndef _MACROS_H
#include "macros.h"
#endif /* _MACROS_H */
#ifndef _DEBUG_H
#include "debug.h"
#endif /* _DEBUG_H */
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: debug_kputfmt.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: debug_kputfmt.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
*
* :ts=4
*
@@ -43,7 +43,7 @@
parameter table is provided, pick up the parameters and store them in
the table. The table layout follows the format string and can include
both 16 and 32 bit data. */
static size_t
STATIC size_t
process_var_args(char *format_string,va_list argument_list,unsigned short * table)
{
size_t num_args = 0;
@@ -150,7 +150,7 @@ process_var_args(char *format_string,va_list argument_list,unsigned short * tabl
/****************************************************************************/
static VOID ASM
STATIC VOID ASM
raw_put_char(REG(d0,UBYTE c))
{
kputc(c);

View File

@@ -1,5 +1,5 @@
/*
* $Id: dirent_closedir.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: dirent_closedir.c,v 1.13 2005-04-24 08:46:37 obarthel Exp $
*
* :ts=4
*
@@ -31,28 +31,121 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _STDLIB_MEM_DEBUG_H
#include "stdlib_mem_debug.h"
#endif /* _STDLIB_MEM_DEBUG_H */
/****************************************************************************/
#ifndef _DIRENT_HEADERS_H
#include "dirent_headers.h"
#endif /* _DIRENT_HEADERS_H */
/****************************************************************************/
#ifndef _STDLIB_MEMORY_H
#include "stdlib_memory.h"
#endif /* _STDLIB_MEMORY_H */
/****************************************************************************/
#ifndef _STDLIB_CONSTRUCTOR_H
#include "stdlib_constructor.h"
#endif /* _STDLIB_CONSTRUCTOR_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
/* Directories being scanned whose locks need to be freed when shutting down. */
struct MinList __directory_list;
/****************************************************************************/
#if defined(__THREAD_SAFE)
/****************************************************************************/
static struct SignalSemaphore * dirent_lock;
/****************************************************************************/
void
__dirent_lock(void)
{
if(dirent_lock != NULL)
ObtainSemaphore(dirent_lock);
}
/****************************************************************************/
void
__dirent_unlock(void)
{
if(dirent_lock != NULL)
ReleaseSemaphore(dirent_lock);
}
/****************************************************************************/
#endif /* __THREAD_SAFE */
/****************************************************************************/
CLIB_CONSTRUCTOR(dirent_init)
{
BOOL success = FALSE;
ENTER();
NewList((struct List *)&__directory_list);
#if defined(__THREAD_SAFE)
{
dirent_lock = __create_semaphore();
if(dirent_lock == NULL)
goto out;
}
#endif /* __THREAD_SAFE */
success = TRUE;
out:
SHOWVALUE(success);
LEAVE();
if(success)
CONSTRUCTOR_SUCCEED();
else
CONSTRUCTOR_FAIL();
}
/****************************************************************************/
CLIB_DESTRUCTOR(dirent_exit)
{
ENTER();
if(__directory_list.mlh_Head != NULL)
{
while(NOT IsListEmpty((struct List *)&__directory_list))
closedir((DIR *)__directory_list.mlh_Head);
}
#if defined(__THREAD_SAFE)
{
__delete_semaphore(dirent_lock);
dirent_lock = NULL;
}
#endif /* __THREAD_SAFE */
LEAVE();
}
/****************************************************************************/
int
closedir(DIR * directory_pointer)
{
struct DirectoryHandle * dh;
struct Node * node;
int result = -1;
int result = ERROR;
ENTER();
@@ -61,9 +154,11 @@ closedir(DIR * directory_pointer)
if(__check_abort_enabled)
__check_abort();
__dirent_lock();
if(directory_pointer == NULL)
{
errno = EBADF;
__set_errno(EBADF);
goto out;
}
@@ -84,7 +179,7 @@ closedir(DIR * directory_pointer)
if(NOT directory_pointer_is_valid)
{
errno = EBADF;
__set_errno(EBADF);
goto out;
}
}
@@ -94,8 +189,14 @@ closedir(DIR * directory_pointer)
Remove((struct Node *)dh);
while((node = RemHead(&dh->dh_VolumeList)) != NULL)
#if defined(UNIX_PATH_SEMANTICS)
{
struct Node * node;
while((node = RemHead((struct List *)&dh->dh_VolumeList)) != NULL)
free(node);
}
#endif /* UNIX_PATH_SEMANTICS */
PROFILE_OFF();
UnLock(dh->dh_DirLock);
@@ -103,10 +204,12 @@ closedir(DIR * directory_pointer)
free(dh);
result = 0;
result = OK;
out:
__dirent_unlock();
RETURN(result);
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: dirent_headers.h,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: dirent_headers.h,v 1.8 2005-03-18 12:38:22 obarthel Exp $
*
* :ts=4
*
@@ -42,6 +42,18 @@
/****************************************************************************/
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
#ifndef _STDLIB_PROFILE_H
#include "stdlib_profile.h"
#endif /* _STDLIB_PROFILE_H */
/****************************************************************************/
#ifndef _MACROS_H
#include "macros.h"
#endif /* _MACROS_H */
@@ -54,9 +66,10 @@ struct DirectoryHandle
BPTR dh_DirLock;
struct FileInfoBlock dh_FileInfo;
struct dirent dh_DirectoryEntry;
int dh_Position;
struct Node * dh_VolumeNode;
struct List dh_VolumeList;
struct MinList dh_VolumeList;
BOOL dh_ScanVolumeList;
};
@@ -66,4 +79,26 @@ extern struct MinList NOCOMMON __directory_list;
/****************************************************************************/
#if defined(__THREAD_SAFE)
/****************************************************************************/
extern void __dirent_lock(void);
extern void __dirent_unlock(void);
/****************************************************************************/
#else
/****************************************************************************/
#define __dirent_lock() ((void)0)
#define __dirent_unlock() ((void)0)
/****************************************************************************/
#endif /* __THREAD_SAFE */
/****************************************************************************/
#endif /* _DIRENT_HEADERS_H */

View File

@@ -1,5 +1,5 @@
/*
* $Id: dirent_opendir.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: dirent_opendir.c,v 1.9 2005-03-18 12:38:22 obarthel Exp $
*
* :ts=4
*
@@ -37,18 +37,18 @@
/****************************************************************************/
#ifndef _STDLIB_MEM_DEBUG_H
#include "stdlib_mem_debug.h"
#endif /* _STDLIB_MEM_DEBUG_H */
/****************************************************************************/
#ifndef _DIRENT_HEADERS_H
#include "dirent_headers.h"
#endif /* _DIRENT_HEADERS_H */
/****************************************************************************/
#ifndef _STDLIB_MEMORY_H
#include "stdlib_memory.h"
#endif /* _STDLIB_MEMORY_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
@@ -57,7 +57,7 @@
/****************************************************************************/
static struct Node *
STATIC struct Node *
find_by_name(struct List * list,const char * name)
{
struct Node * result = NULL;
@@ -89,7 +89,6 @@ opendir(const char * path_name)
#endif /* UNIX_PATH_SEMANTICS */
struct DirectoryHandle * dh = NULL;
DIR * result = NULL;
struct Node * node;
ENTER();
@@ -106,7 +105,7 @@ opendir(const char * path_name)
{
SHOWMSG("invalid parameter");
errno = EFAULT;
__set_errno(EFAULT);
goto out;
}
}
@@ -121,10 +120,12 @@ opendir(const char * path_name)
memset(dh,0,sizeof(*dh));
NewList(&dh->dh_VolumeList);
#if defined(UNIX_PATH_SEMANTICS)
{
struct Node * node;
NewList((struct List *)&dh->dh_VolumeList);
if(__unix_path_semantics)
{
if(__translate_unix_to_amiga_path_name(&path_name,&path_name_nti) != 0)
@@ -159,7 +160,7 @@ opendir(const char * path_name)
{
UnLockDosList(LDF_VOLUMES|LDF_READ);
errno = ENOMEM;
__set_errno(ENOMEM);
goto out;
}
@@ -172,7 +173,7 @@ opendir(const char * path_name)
/* Check if the name is already on the list. Mind you,
this is not the most sophisticated algorithm but then
the number of volumes should be small. */
if(find_by_name(&dh->dh_VolumeList,node->ln_Name) != NULL)
if(find_by_name((struct List *)&dh->dh_VolumeList,node->ln_Name) != NULL)
{
free(node);
continue;
@@ -180,16 +181,16 @@ opendir(const char * path_name)
D(("adding '%s'",node->ln_Name));
AddTail(&dh->dh_VolumeList,node);
AddTail((struct List *)&dh->dh_VolumeList,node);
}
}
UnLockDosList(LDF_VOLUMES|LDF_READ);
/* Bail out if we cannot present anything. */
if(IsListEmpty(&dh->dh_VolumeList))
if(IsListEmpty((struct List *)&dh->dh_VolumeList))
{
errno = ENOMEM;
__set_errno(ENOMEM);
goto out;
}
}
@@ -212,7 +213,7 @@ opendir(const char * path_name)
{
SHOWMSG("couldn't get a lock on it");
__translate_access_io_error_to_errno(IoErr(),&errno);
__set_errno(__translate_access_io_error_to_errno(IoErr()));
goto out;
}
@@ -226,7 +227,7 @@ opendir(const char * path_name)
{
SHOWMSG("couldn't examine it");
__translate_io_error_to_errno(IoErr(),&errno);
__set_errno(__translate_io_error_to_errno(IoErr()));
goto out;
}
@@ -234,7 +235,7 @@ opendir(const char * path_name)
{
SHOWMSG("this isn't a directory");
errno = ENOTDIR;
__set_errno(ENOTDIR);
goto out;
}
}
@@ -243,8 +244,12 @@ opendir(const char * path_name)
assert( __directory_list.mlh_Head != NULL );
__dirent_lock();
AddTail((struct List *)&__directory_list,(struct Node *)dh);
__dirent_unlock();
result = (DIR *)dh;
dh = NULL;
@@ -254,8 +259,14 @@ opendir(const char * path_name)
{
SHOWMSG("ouch. cleaning up");
while((node = RemHead(&dh->dh_VolumeList)) != NULL)
#if defined(UNIX_PATH_SEMANTICS)
{
struct Node * node;
while((node = RemHead((struct List *)&dh->dh_VolumeList)) != NULL)
free(node);
}
#endif /* UNIX_PATH_SEMANTICS */
PROFILE_OFF();
UnLock(dh->dh_DirLock);

View File

@@ -1,5 +1,5 @@
/*
* $Id: dirent_readdir.c,v 1.5 2005-01-09 15:58:02 obarthel Exp $
* $Id: dirent_readdir.c,v 1.7 2005-02-03 16:56:15 obarthel Exp $
*
* :ts=4
*
@@ -61,7 +61,7 @@ readdir(DIR * directory_pointer)
{
SHOWMSG("ouch. invalid parameter");
errno = EBADF;
__set_errno(EBADF);
goto out;
}
@@ -93,8 +93,8 @@ readdir(DIR * directory_pointer)
assert( (((ULONG)name) & 3) == 0 );
if(dh->dh_VolumeNode == NULL && NOT IsListEmpty(&dh->dh_VolumeList))
dh->dh_VolumeNode = dh->dh_VolumeList.lh_Head;
if(dh->dh_VolumeNode == NULL && NOT IsListEmpty((struct List *)&dh->dh_VolumeList))
dh->dh_VolumeNode = (struct Node *)dh->dh_VolumeList.mlh_Head;
strcpy(name,"\1:"); /* BSTR for ":" */
@@ -164,7 +164,7 @@ readdir(DIR * directory_pointer)
{
if(CANNOT Examine(parent_directory,fib))
{
__translate_io_error_to_errno(IoErr(),&errno);
__set_errno(__translate_io_error_to_errno(IoErr()));
goto out;
}
}
@@ -206,7 +206,7 @@ readdir(DIR * directory_pointer)
{
SHOWMSG("error scanning directory");
__translate_io_error_to_errno(IoErr(),&errno);
__set_errno(__translate_io_error_to_errno(IoErr()));
goto out;
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: dirent_rewinddir.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: dirent_rewinddir.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
*
* :ts=4
*
@@ -76,7 +76,7 @@ rewinddir(DIR * directory_pointer)
if(CANNOT Examine(dh->dh_DirLock,&dh->dh_FileInfo))
{
SHOWMSG("ouch. that didn't work");
__translate_io_error_to_errno(IoErr(),&errno);
__set_errno(__translate_io_error_to_errno(IoErr()));
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl_close.c,v 1.6 2005-01-14 08:36:54 obarthel Exp $
* $Id: fcntl_close.c,v 1.12 2005-04-24 08:46:37 obarthel Exp $
*
* :ts=4
*
@@ -42,23 +42,16 @@
/****************************************************************************/
int
__close(int file_descriptor,int * error_ptr)
close(int file_descriptor)
{
DECLARE_UTILITYBASE();
struct file_hook_message message;
struct file_action_message fam;
struct fd * fd;
int result = -1;
BOOL no_close;
BOOL is_alias;
int result = ERROR;
ENTER();
SHOWVALUE(file_descriptor);
assert( UtilityBase != NULL );
assert( error_ptr != NULL );
assert( file_descriptor >= 0 && file_descriptor < __num_fd );
assert( __fd[file_descriptor] != NULL );
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
@@ -66,123 +59,29 @@ __close(int file_descriptor,int * error_ptr)
if(__check_abort_enabled)
__check_abort();
fd = __get_file_descriptor(file_descriptor);
/* We want to affect this very file descriptor and not the
original one associated with an alias of it. */
fd = __get_file_descriptor_dont_resolve(file_descriptor);
if(fd == NULL)
{
(*error_ptr) = EBADF;
__set_errno(EBADF);
goto out;
}
result = 0;
fam.fam_Action = file_action_close;
SHOWMSG("last customer; cleaning up");
assert( fd->fd_Action != NULL );
if(fd->fd_Original != NULL) /* this is an alias */
if((*fd->fd_Action)(fd,&fam) < 0)
{
struct fd * list_fd;
SHOWMSG("taking out the alias");
assert( fd->fd_Original != fd );
assert( fd->fd_Original->fd_Original == NULL );
/* Remove this alias from the list. */
for(list_fd = fd->fd_Original ;
list_fd != NULL ;
list_fd = list_fd->fd_NextLink)
{
if(list_fd->fd_NextLink == fd)
{
list_fd->fd_NextLink = fd->fd_NextLink;
break;
}
__set_errno(fam.fam_Error);
goto out;
}
no_close = TRUE;
is_alias = TRUE;
}
else if (fd->fd_NextLink != NULL) /* this one has aliases attached; it is the 'original' resource */
{
struct fd * first_alias;
struct fd * list_fd;
SHOWMSG("closing original descriptor; migrating it to first alias");
/* The first link now becomes the original resource */
first_alias = fd->fd_NextLink;
first_alias->fd_Original = NULL;
/* The resources are migrated to the first link. */
for(list_fd = first_alias->fd_NextLink ;
list_fd != NULL ;
list_fd = list_fd->fd_NextLink)
{
list_fd->fd_Original = first_alias;
}
no_close = TRUE;
is_alias = TRUE;
}
else
{
no_close = FLAG_IS_SET(fd->fd_Flags,FDF_NO_CLOSE);
is_alias = FALSE;
}
/* Reset the console to regular buffered/unbuffered input. We don't do this
for aliases and their like since the original stream is still in use. */
if(NOT is_alias)
{
if((FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING) && FLAG_IS_CLEAR(fd->fd_Flags,FDF_DEFAULT_NON_BLOCKING)) ||
(FLAG_IS_CLEAR(fd->fd_Flags,FDF_NON_BLOCKING) && FLAG_IS_SET(fd->fd_Flags,FDF_DEFAULT_NON_BLOCKING)))
{
SHOWMSG("resetting non-blocking access mode");
message.action = file_hook_action_set_blocking;
message.arg = FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING);
assert( fd->fd_Hook != NULL );
CallHookPkt(fd->fd_Hook,fd,&message);
}
}
(*error_ptr) = OK;
if(NOT no_close && NOT is_alias)
{
SHOWMSG("shutting down");
message.action = file_hook_action_close;
assert( fd->fd_Hook != NULL );
CallHookPkt(fd->fd_Hook,fd,&message);
result = message.result;
(*error_ptr) = message.error;
}
memset(fd,0,sizeof(*fd));
result = OK;
out:
RETURN(result);
return(result);
}
/****************************************************************************/
int
close(int file_descriptor)
{
int result;
ENTER();
result = __close(file_descriptor,&errno);
RETURN(result);
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl_creat.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: fcntl_creat.c,v 1.5 2005-04-24 08:46:37 obarthel Exp $
*
* :ts=4
*
@@ -50,7 +50,7 @@
int
creat(const char * path_name, mode_t mode)
{
int result = -1;
int result = ERROR;
ENTER();
@@ -66,7 +66,7 @@ creat(const char * path_name, mode_t mode)
{
if(path_name == NULL)
{
errno = EFAULT;
__set_errno(EFAULT);
goto out;
}
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl_fcntl.c,v 1.5 2005-01-02 09:07:07 obarthel Exp $
* $Id: fcntl_fcntl.c,v 1.18 2005-05-27 13:19:30 obarthel Exp $
*
* :ts=4
*
@@ -44,12 +44,13 @@
int
fcntl(int file_descriptor, int cmd, ... /* int arg */ )
{
DECLARE_UTILITYBASE();
struct file_hook_message message;
struct file_action_message fam;
struct flock * l;
int result = -1;
struct fd * fd;
int vacant_slot;
int result = ERROR;
struct fd * fd = NULL;
va_list arg;
int error;
int flags;
int fdbase;
int i;
@@ -59,8 +60,6 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
SHOWVALUE(file_descriptor);
SHOWVALUE(cmd);
assert( UtilityBase != NULL );
assert( file_descriptor >= 0 && file_descriptor < __num_fd );
assert( __fd[file_descriptor] != NULL );
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
@@ -68,100 +67,116 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
if(__check_abort_enabled)
__check_abort();
/* F_DUPFD will need to modify the file descriptor table, which is why
the stdio lock needs to be obtained here, before the individual
file descriptor lock is held. */
if(cmd == F_DUPFD)
__stdio_lock();
fd = __get_file_descriptor(file_descriptor);
if(fd == NULL)
{
errno = EBADF;
__set_errno(EBADF);
goto out;
}
__fd_lock(fd);
switch(cmd)
{
#if defined(UNIX_PATH_SEMANTICS)
case F_GETLK:
case F_SETLK:
case F_SETLKW:
SHOWMSG("cmd=F_GETLK/F_SETLK/F_SETLKW");
va_start(arg,cmd);
if(FLAG_IS_SET(fd->fd_Flags,FDF_IS_SOCKET))
{
__set_errno(EINVAL);
goto out;
}
if(fd->fd_DefaultFile == ZERO)
{
__set_errno(EBADF);
goto out;
}
va_start(arg,cmd);
l = va_arg(arg,struct flock *);
va_end(arg);
assert( l != NULL );
if(l->l_type < F_RDLCK || l->l_type > F_WRLCK)
{
SHOWMSG("invalid flock type");
va_end(arg);
errno = EINVAL;
__set_errno(EINVAL);
break;
}
if(l->l_whence < SEEK_SET || l->l_whence > SEEK_END)
{
SHOWMSG("invalid flock offset");
va_end(arg);
errno = EINVAL;
__set_errno(EINVAL);
break;
}
message.action = file_hook_action_lock_record;
message.lock = l;
message.command = cmd;
if(__handle_record_locking(cmd,l,fd,&error) < 0)
{
__set_errno(error);
goto out;
}
assert( fd->fd_Hook != NULL );
CallHookPkt(fd->fd_Hook,fd,&message);
result = message.result;
errno = message.error;
va_end(arg);
result = OK;
break;
#endif /* UNIX_PATH_SEMANTICS */
case F_GETFL:
SHOWMSG("cmd=F_GETFL");
result = 0;
if(FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING))
SET_FLAG(result,O_NONBLOCK);
if(FLAG_IS_SET(fd->fd_Flags,FDF_ASYNC_IO))
SET_FLAG(result,O_ASYNC);
result = OK;
break;
case F_SETFL:
SHOWMSG("cmd=F_SETFL");
result = 0;
/* If this is a file, make sure that we don't hit a zero file handle. */
if(FLAG_IS_CLEAR(fd->fd_Flags,FDF_IS_SOCKET) && fd->fd_DefaultFile == ZERO)
{
__set_errno(EBADF);
goto out;
}
va_start(arg,cmd);
flags = va_arg(arg,int);
va_end(arg);
if((FLAG_IS_SET(flags,O_NONBLOCK) && FLAG_IS_CLEAR(fd->fd_Flags,FDF_NON_BLOCKING)) ||
(FLAG_IS_CLEAR(flags,O_NONBLOCK) && FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING)))
{
message.action = file_hook_action_set_blocking;
message.arg = FLAG_IS_CLEAR(flags,O_NONBLOCK);
fam.fam_Action = file_action_set_blocking;
fam.fam_Arg = FLAG_IS_CLEAR(flags,O_NONBLOCK);
assert( fd->fd_Hook != NULL );
assert( fd->fd_Action != NULL );
CallHookPkt(fd->fd_Hook,fd,&message);
result = message.result;
if(result < 0)
if((*fd->fd_Action)(fd,&fam) < 0)
{
errno = message.error;
__set_errno(fam.fam_Error);
va_end(arg);
goto out;
}
@@ -174,19 +189,15 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
if((FLAG_IS_SET(flags,O_ASYNC) && FLAG_IS_CLEAR(fd->fd_Flags,FDF_ASYNC_IO)) ||
(FLAG_IS_CLEAR(flags,O_ASYNC) && FLAG_IS_SET(fd->fd_Flags,FDF_ASYNC_IO)))
{
message.action = file_hook_action_set_async;
message.arg = FLAG_IS_SET(flags,O_ASYNC);
fam.fam_Action = file_action_set_async;
fam.fam_Arg = FLAG_IS_SET(flags,O_ASYNC);
assert( fd->fd_Hook != NULL );
assert( fd->fd_Action != NULL );
CallHookPkt(fd->fd_Hook,fd,&message);
result = message.result;
if(result < 0)
if((*fd->fd_Action)(fd,&fam) < 0)
{
errno = message.error;
__set_errno(fam.fam_Error);
va_end(arg);
goto out;
}
@@ -196,7 +207,7 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
CLEAR_FLAG(fd->fd_Flags,FDF_ASYNC_IO);
}
va_end(arg);
result = OK;
break;
@@ -210,66 +221,64 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
if(fdbase < 0)
{
errno = EINVAL;
__set_errno(EINVAL);
goto out;
}
/* Check if we have that many fd's already */
while(fdbase >= __num_fd)
{
if(__check_abort_enabled)
__check_abort();
/* No; enlarge it */
if(__grow_fd_table() < 0)
/* Make sure that we have the required number of file
descriptors available. */
if(__grow_fd_table(fdbase + 1) < 0)
goto out;
}
vacant_slot = -1;
/* Guaranteed to have enough here */
while(TRUE)
do
{
__stdio_unlock();
if(__check_abort_enabled)
__check_abort();
__stdio_lock();
for(i = fdbase ; i < __num_fd ; i++)
{
if(FLAG_IS_CLEAR(__fd[i]->fd_Flags,FDF_IN_USE))
{
/* Got a file descriptor, duplicate it */
message.action = file_hook_action_duplicate_fd;
message.duplicate_fd = __fd[i];
assert( fd->fd_Hook != NULL );
CallHookPkt(fd->fd_Hook,fd,&message);
/* If it worked, leave */
if (message.result == 0)
{
result = i;
goto out;
}
vacant_slot = i;
break;
}
}
/* Didn't really find any, grow the table further */
if (__grow_fd_table() < 0)
if(vacant_slot < 0 && __grow_fd_table(0) < 0)
goto out;
}
while(vacant_slot < 0);
/* Got a file descriptor, duplicate it */
__duplicate_fd(__fd[vacant_slot],fd);
result = vacant_slot;
errno = EMFILE;
break;
default:
SHOWMSG("something else");
errno = ENOSYS;
__set_errno(ENOSYS);
break;
}
out:
__fd_unlock(fd);
if(cmd == F_DUPFD)
__stdio_unlock();
RETURN(result);
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl_get_default_file.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: fcntl_get_default_file.c,v 1.4 2005-04-24 08:46:37 obarthel Exp $
*
* :ts=4
*
@@ -45,7 +45,7 @@ int
__get_default_file(int file_descriptor,long * file_ptr)
{
struct fd * fd;
int result = -1;
int result = ERROR;
assert( file_descriptor >= 0 && file_descriptor < __num_fd );
assert( __fd[file_descriptor] != NULL );
@@ -55,7 +55,7 @@ __get_default_file(int file_descriptor,long * file_ptr)
fd = __get_file_descriptor(file_descriptor);
if(fd == NULL)
{
errno = EBADF;
__set_errno(EBADF);
goto out;
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl_headers.h,v 1.2 2005-01-02 09:07:07 obarthel Exp $
* $Id: fcntl_headers.h,v 1.4 2005-03-18 12:38:22 obarthel Exp $
*
* :ts=4
*
@@ -42,4 +42,16 @@
/****************************************************************************/
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
#ifndef _STDLIB_PROFILE_H
#include "stdlib_profile.h"
#endif /* _STDLIB_PROFILE_H */
/****************************************************************************/
#endif /* _FCNTL_HEADERS_H */

62
library/fcntl_lock.c Normal file
View File

@@ -0,0 +1,62 @@
/*
* $Id: fcntl_lock.c,v 1.3 2005-04-01 18:46:37 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>
* 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 _STDIO_HEADERS_H
#include "stdio_headers.h"
#endif /* _STDIO_HEADERS_H */
/****************************************************************************/
#if defined(__THREAD_SAFE)
/****************************************************************************/
void
__fd_lock(struct fd * fd)
{
if(fd != NULL && fd->fd_Lock != NULL)
ObtainSemaphore(fd->fd_Lock);
}
/****************************************************************************/
void
__fd_unlock(struct fd * fd)
{
if(fd != NULL && fd->fd_Lock != NULL)
ReleaseSemaphore(fd->fd_Lock);
}
/****************************************************************************/
#endif /* __THREAD_SAFE */

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl_lseek.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: fcntl_lseek.c,v 1.9 2005-04-24 09:53:11 obarthel Exp $
*
* :ts=4
*
@@ -42,11 +42,11 @@
/****************************************************************************/
off_t
__lseek(int file_descriptor, off_t offset, int mode, int * error_ptr)
lseek(int file_descriptor, off_t offset, int mode)
{
DECLARE_UTILITYBASE();
struct file_hook_message message;
off_t result = -1;
struct file_action_message fam;
off_t result = SEEK_ERROR;
off_t position;
struct fd * fd;
ENTER();
@@ -55,9 +55,6 @@ __lseek(int file_descriptor, off_t offset, int mode, int * error_ptr)
SHOWVALUE(offset);
SHOWVALUE(mode);
assert( UtilityBase != NULL );
assert( error_ptr != NULL );
assert( file_descriptor >= 0 && file_descriptor < __num_fd );
assert( __fd[file_descriptor] != NULL );
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
@@ -68,7 +65,7 @@ __lseek(int file_descriptor, off_t offset, int mode, int * error_ptr)
fd = __get_file_descriptor(file_descriptor);
if(fd == NULL)
{
(*error_ptr) = EBADF;
__set_errno(EBADF);
goto out;
}
@@ -76,50 +73,37 @@ __lseek(int file_descriptor, off_t offset, int mode, int * error_ptr)
{
SHOWMSG("seek mode is invalid");
(*error_ptr) = EINVAL;
__set_errno(EINVAL);
goto out;
}
SHOWMSG("calling the hook");
fam.fam_Action = file_action_seek;
fam.fam_Offset = offset;
fam.fam_Mode = mode;
#if defined(UNIX_PATH_SEMANTICS)
assert( fd->fd_Action != NULL );
/* Note that a return value of -1 (= SEEK_ERROR) may be a
valid file position in files larger than 2 GBytes. Just
to be sure, we therefore also check the secondary error
to verify that what could be a file position is really
an error indication. */
position = (*fd->fd_Action)(fd,&fam);
if(position == SEEK_ERROR && fam.fam_Error != OK)
{
message.action = file_hook_action_seek_and_extend;
__set_errno(fam.fam_Error);
goto out;
}
#else
{
message.action = file_hook_action_seek;
}
#endif /* UNIX_PATH_SEMANTICS */
message.position = offset;
message.mode = mode;
/* If this is a valid file position, clear 'errno' so that
it cannot be mistaken for an error. */
if(position < 0)
__set_errno(OK);
assert( fd->fd_Hook != NULL );
CallHookPkt(fd->fd_Hook,fd,&message);
(*error_ptr) = message.error;
result = message.result;
result = position;
out:
RETURN(result);
return(result);
}
/****************************************************************************/
off_t
lseek(int file_descriptor, off_t offset, int mode)
{
off_t result;
ENTER();
result = __lseek(file_descriptor,offset,mode,&errno);
RETURN(result);
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl_open.c,v 1.7 2005-01-09 16:07:27 obarthel Exp $
* $Id: fcntl_open.c,v 1.16 2005-04-24 08:46:37 obarthel Exp $
*
* :ts=4
*
@@ -37,18 +37,18 @@
/****************************************************************************/
#ifndef _STDLIB_MEM_DEBUG_H
#include "stdlib_mem_debug.h"
#endif /* _STDLIB_MEM_DEBUG_H */
/****************************************************************************/
#ifndef _FCNTL_HEADERS_H
#include "fcntl_headers.h"
#endif /* _FCNTL_HEADERS_H */
/****************************************************************************/
#ifndef _STDLIB_MEMORY_H
#include "stdlib_memory.h"
#endif /* _STDLIB_MEMORY_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
@@ -56,7 +56,7 @@
/* This is used in place of ChangeMode() in order to work around a bug in
dos.library V40 and below: a "NIL:" file handle will crash the
caller of the ChangeMode() function. */
static LONG
STATIC LONG
safe_change_mode(LONG type,BPTR file_handle,LONG mode)
{
LONG result = DOSFALSE;
@@ -94,6 +94,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
struct name_translation_info path_name_nti;
#endif /* UNIX_PATH_SEMANTICS */
D_S(struct FileInfoBlock,fib);
struct SignalSemaphore * fd_lock;
LONG is_file_system = FALSE;
LONG open_mode;
BPTR lock = ZERO;
@@ -103,7 +104,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
int fd_slot_number;
struct fd * fd;
int access_mode;
int result = -1;
int result = ERROR;
int i;
ENTER();
@@ -117,13 +118,15 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
if(__check_abort_enabled)
__check_abort();
__stdio_lock();
#if defined(CHECK_FOR_NULL_POINTERS)
{
if(path_name == NULL)
{
SHOWMSG("path name is invalid");
errno = EFAULT;
__set_errno(EFAULT);
goto out;
}
}
@@ -134,14 +137,14 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
{
SHOWMSG("access mode is invalid");
errno = EINVAL;
__set_errno(EINVAL);
goto out;
}
fd_slot_number = __find_vacant_fd_entry();
if(fd_slot_number < 0)
{
if(__grow_fd_table() < 0)
if(__grow_fd_table(0) < 0)
{
SHOWMSG("couldn't find a vacant file descriptor, and couldn't allocate one either");
goto out;
@@ -160,7 +163,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
if(path_name_nti.is_root)
{
errno = EACCES;
__set_errno(EACCES);
goto out;
}
}
@@ -187,7 +190,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
{
SHOWMSG("the file already exists");
errno = EEXIST;
__set_errno(EEXIST);
goto out;
}
@@ -197,14 +200,14 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
{
SHOWMSG("there's something not a directory on the path");
errno = ENOTDIR;
__set_errno(ENOTDIR);
goto out;
}
else if (error != ERROR_OBJECT_NOT_FOUND && error != ERROR_ACTION_NOT_KNOWN)
{
SHOWMSG("error accessing the object");
__translate_io_error_to_errno(IoErr(),&errno);
__set_errno(__translate_io_error_to_errno(IoErr()));
goto out;
}
@@ -233,7 +236,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
{
SHOWMSG("could not examine the object");
__translate_io_error_to_errno(IoErr(),&errno);
__set_errno(__translate_io_error_to_errno(IoErr()));
goto out;
}
@@ -242,7 +245,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
{
SHOWMSG("can't open a directory");
errno = EISDIR;
__set_errno(EISDIR);
goto out;
}
@@ -251,7 +254,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
{
SHOWMSG("this object is not write enabled");
errno = EACCES;
__set_errno(EACCES);
goto out;
}
@@ -274,14 +277,14 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
{
SHOWMSG("there's something not a directory on the path");
errno = ENOTDIR;
__set_errno(ENOTDIR);
goto out;
}
else if (error != ERROR_OBJECT_NOT_FOUND && error != ERROR_ACTION_NOT_KNOWN)
{
SHOWMSG("error accessing the object");
__translate_io_error_to_errno(IoErr(),&errno);
__set_errno(__translate_io_error_to_errno(IoErr()));
goto out;
}
}
@@ -305,7 +308,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
LONG io_err = IoErr();
D(("the file '%s' didn't open in mode %ld",path_name,open_mode));
__translate_access_io_error_to_errno(IoErr(),&errno);
__set_errno(__translate_access_io_error_to_errno(io_err));
/* Check if ended up trying to open a directory as if
it were a plain file. */
@@ -317,7 +320,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
if(lock != ZERO)
{
if(Examine(lock,fib) && fib->fib_DirEntryType >= 0)
errno = EISDIR;
__set_errno(EISDIR);
}
PROFILE_ON();
@@ -326,9 +329,24 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
goto out;
}
#if defined(__THREAD_SAFE)
{
fd_lock = __create_semaphore();
if(fd_lock == NULL)
{
__set_errno(ENOMEM);
goto out;
}
}
#else
{
fd_lock = NULL;
}
#endif /* __THREAD_SAFE */
fd = __fd[fd_slot_number];
__initialize_fd(fd,(HOOKFUNC)__fd_hook_entry,handle,0);
__initialize_fd(fd,__fd_hook_entry,handle,0,fd_lock);
/* Figure out if this stream is attached to a console. */
PROFILE_OFF();
@@ -343,7 +361,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
{
SHOWMSG("enabling non-blocking mode");
if(SetMode(handle,1)) /* single character mode */
if(SetMode(handle,DOSTRUE)) /* single character mode */
SET_FLAG(fd->fd_Flags,FDF_NON_BLOCKING);
}
}
@@ -438,7 +456,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
handle = ZERO;
assert( result != -1 );
assert( result != ERROR );
out:
@@ -449,6 +467,8 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
UnLock(lock);
__stdio_unlock();
PROFILE_ON();
RETURN(result);

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl_read.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: fcntl_read.c,v 1.8 2005-04-24 08:46:37 obarthel Exp $
*
* :ts=4
*
@@ -48,11 +48,11 @@
/****************************************************************************/
ssize_t
__read(int file_descriptor, void * buffer, size_t num_bytes, int * error_ptr)
read(int file_descriptor, void * buffer, size_t num_bytes)
{
DECLARE_UTILITYBASE();
ssize_t num_bytes_read;
ssize_t result = EOF;
struct fd * fd;
off_t result = -1;
ENTER();
@@ -60,10 +60,11 @@ __read(int file_descriptor, void * buffer, size_t num_bytes, int * error_ptr)
SHOWPOINTER(buffer);
SHOWVALUE(num_bytes);
assert( error_ptr != NULL );
assert( buffer != NULL );
assert( (int)num_bytes >= 0);
assert( UtilityBase != NULL );
if(__check_abort_enabled)
__check_abort();
#if defined(CHECK_FOR_NULL_POINTERS)
{
@@ -71,7 +72,7 @@ __read(int file_descriptor, void * buffer, size_t num_bytes, int * error_ptr)
{
SHOWMSG("invalid buffer");
(*error_ptr) = EFAULT;
__set_errno(EFAULT);
goto out;
}
}
@@ -81,13 +82,10 @@ __read(int file_descriptor, void * buffer, size_t num_bytes, int * error_ptr)
assert( __fd[file_descriptor] != NULL );
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
if(__check_abort_enabled)
__check_abort();
fd = __get_file_descriptor(file_descriptor);
if(fd == NULL)
{
(*error_ptr) = EBADF;
__set_errno(EBADF);
goto out;
}
@@ -95,52 +93,38 @@ __read(int file_descriptor, void * buffer, size_t num_bytes, int * error_ptr)
{
SHOWMSG("this descriptor is not read-enabled");
(*error_ptr) = EBADF;
__set_errno(EBADF);
goto out;
}
if(num_bytes > 0)
{
struct file_hook_message message;
struct file_action_message fam;
SHOWMSG("calling the hook");
message.action = file_hook_action_read;
message.data = buffer;
message.size = num_bytes;
fam.fam_Action = file_action_read;
fam.fam_Data = buffer;
fam.fam_Size = num_bytes;
assert( fd->fd_Hook != NULL );
assert( fd->fd_Action != NULL );
CallHookPkt(fd->fd_Hook,fd,&message);
(*error_ptr) = message.error;
result = message.result;
num_bytes_read = (*fd->fd_Action)(fd,&fam);
if(num_bytes_read == EOF)
{
__set_errno(fam.fam_Error);
goto out;
}
}
else
{
(*error_ptr) = 0;
result = 0;
num_bytes_read = 0;
}
result = num_bytes_read;
out:
RETURN(result);
return(result);
}
/****************************************************************************/
ssize_t
read(int file_descriptor, void * buffer, size_t num_bytes)
{
ssize_t result;
ENTER();
result = __read(file_descriptor,buffer,num_bytes,&errno);
RETURN(result);
return(result);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl_write.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
* $Id: fcntl_write.c,v 1.8 2005-04-24 08:46:37 obarthel Exp $
*
* :ts=4
*
@@ -48,11 +48,11 @@
/****************************************************************************/
ssize_t
__write(int file_descriptor, const void * buffer, size_t num_bytes, int * error_ptr)
write(int file_descriptor, const void * buffer, size_t num_bytes)
{
DECLARE_UTILITYBASE();
ssize_t num_bytes_written;
ssize_t result = EOF;
struct fd * fd;
off_t result = -1;
ENTER();
@@ -60,10 +60,11 @@ __write(int file_descriptor, const void * buffer, size_t num_bytes, int * error_
SHOWPOINTER(buffer);
SHOWVALUE(num_bytes);
assert( error_ptr != NULL );
assert( buffer != NULL );
assert( (int)num_bytes >= 0 );
assert( UtilityBase != NULL );
if(__check_abort_enabled)
__check_abort();
#if defined(CHECK_FOR_NULL_POINTERS)
{
@@ -71,7 +72,7 @@ __write(int file_descriptor, const void * buffer, size_t num_bytes, int * error_
{
SHOWMSG("invalid buffer address");
(*error_ptr) = EFAULT;
__set_errno(EFAULT);
goto out;
}
}
@@ -81,13 +82,10 @@ __write(int file_descriptor, const void * buffer, size_t num_bytes, int * error_
assert( __fd[file_descriptor] != NULL );
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
if(__check_abort_enabled)
__check_abort();
fd = __get_file_descriptor(file_descriptor);
if(fd == NULL)
{
(*error_ptr) = EBADF;
__set_errno(EBADF);
goto out;
}
@@ -95,52 +93,38 @@ __write(int file_descriptor, const void * buffer, size_t num_bytes, int * error_
{
SHOWMSG("file descriptor is not write-enabled");
(*error_ptr) = EBADF;
__set_errno(EBADF);
goto out;
}
if(num_bytes > 0)
{
struct file_hook_message message;
struct file_action_message fam;
SHOWMSG("calling the hook");
message.action = file_hook_action_write;
message.data = (void *)buffer;
message.size = num_bytes;
fam.fam_Action = file_action_write;
fam.fam_Data = (void *)buffer;
fam.fam_Size = num_bytes;
assert( fd->fd_Hook != NULL );
assert( fd->fd_Action != NULL );
CallHookPkt(fd->fd_Hook,fd,&message);
(*error_ptr) = message.error;
result = message.result;
num_bytes_written = (*fd->fd_Action)(fd,&fam);
if(num_bytes_written == EOF)
{
__set_errno(fam.fam_Error);
goto out;
}
}
else
{
(*error_ptr) = 0;
result = 0;
num_bytes_written = 0;
}
result = num_bytes_written;
out:
RETURN(result);
return(result);
}
/****************************************************************************/
ssize_t
write(int file_descriptor, const void * buffer, size_t num_bytes)
{
ssize_t result;
ENTER();
result = __write(file_descriptor,buffer,num_bytes,&errno);
RETURN(result);
return(result);
}

222
library/ftw_ftw.c Normal file
View File

@@ -0,0 +1,222 @@
/*
* $Id: ftw_ftw.c,v 1.4 2005-04-24 08:46:37 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>
* 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.
*/
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
/*
* This ftw() implementation builds heavily on existing functionality and could certainly
* be made more efficient (e.g. by combining walk & stat using ExAll()/ExNext()) but this
* way the Unix pathname translation is free.
*/
/****************************************************************************/
#ifndef _FTW_HEADERS_H
#include "ftw_headers.h"
#endif /* _FTW_HEADERS_H */
/****************************************************************************/
static int
walk(const char *path,int (*func)(const char *,const struct stat *,int),int depth,int level)
{
int result = OK;
DIR *dp;
struct dirent *de;
struct stat st;
char *next_name;
int type;
int old_length;
int errtmp;
ENTER();
SHOWSTRING(path);
SHOWPOINTER(func);
SHOWVALUE(depth);
SHOWVALUE(level);
if(__check_abort_enabled)
__check_abort();
if(level > depth)
goto out;
if(stat(path,&st) == OK)
{
if (S_ISDIR(st.st_mode))
{
if(FLAG_IS_SET(st.st_mode,S_IRUSR))
type = FTW_D; /* Directory */
else
type = FTW_DNR; /* Directory No Read-permission */
}
else if (S_ISREG(st.st_mode))
{
type = FTW_F; /* File */
}
else
{
/* Skip */
goto out;
}
}
else
{
type = FTW_NS; /* No Stat */
}
result = (*func)(path,&st,type);
if(result != 0)
goto out;
if(type == FTW_D)
{
dp = opendir(path); /* Also takes care of Unix->Amiga pathname conversion. */
if(dp == NULL)
{
result = ERROR; /* Pass errno from opendir() */
goto out;
}
old_length = strlen(path);
next_name = malloc(old_length + NAME_MAX + 2); /* Allocate new for each recursive step to handle extremely long path names. */
if(next_name == NULL)
{
__set_errno(ENOMEM);
result = ERROR;
goto out;
}
strcpy(next_name,path);
if(old_length > 0 && next_name[old_length - 1] != ':' && next_name[old_length-1] != '/')
next_name[old_length++] = '/';
while((result == 0) && (de = readdir(dp)) != NULL)
{
strlcpy(&next_name[old_length],de->d_name,NAME_MAX + 2);
result = walk(next_name,func,depth,level+1);
}
errtmp = __get_errno();
closedir(dp);
free(next_name);
__set_errno(errtmp);
}
out:
RETURN(result);
return(result);
}
int
ftw(const char *path,int (*func)(const char *,const struct stat *,int),int depth)
{
int result = ERROR;
char *base;
int len;
ENTER();
SHOWSTRING(path);
SHOWPOINTER(func);
SHOWVALUE(depth);
if(path == NULL)
{
SHOWMSG("NULL pathname to ftw().");
__set_errno(EFAULT);
goto out;
}
if(func == NULL)
{
SHOWMSG("No function supplied.");
__set_errno(EFAULT);
goto out;
}
if(depth < 0)
{
SHOWMSG("Invalid depth.\n");
__set_errno(EINVAL);
goto out;
}
/* Make sure the path never ends with '/' unless used to indicate parent directory. */
len = strlen(path);
if(len > 1 && path[len - 1] == '/' && path[len - 2] != '/')
{
int error;
base = strdup(path);
if(base == NULL)
{
__set_errno(ENOMEM);
goto out;
}
base[len - 1] = '\0';
result = walk(base,func,depth,0);
error = __get_errno();
free(base);
__set_errno(error);
}
else
{
result = walk(path,func,depth,0);
}
out:
RETURN(result);
return(result);
}

66
library/ftw_headers.h Normal file
View File

@@ -0,0 +1,66 @@
/*
* $Id: ftw_headers.h,v 1.2 2005-03-18 12:38: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>
* 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 _FTW_HEADERS_H
#define _FTW_HEADERS_H
/****************************************************************************/
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
#include <unistd.h>
#include <dirent.h>
#include <string.h>
#include <stdlib.h>
#include <sys/stat.h>
#include <ftw.h>
#include <errno.h>
#include <dos.h>
/****************************************************************************/
#ifndef _MACROS_H
#include "macros.h"
#endif /* _MACROS_H */
#ifndef _DEBUG_H
#include "debug.h"
#endif /* _DEBUG_H */
/****************************************************************************/
#endif /* _FTW_HEADERS_H */

317
library/ftw_nftw.c Normal file
View File

@@ -0,0 +1,317 @@
/*
* $Id: ftw_nftw.c,v 1.4 2005-04-24 08:46:37 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>
* 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.
*/
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
/*
* This nftw() implementation builds heavily on existing functionality and could certainly
* be made more efficient.
*/
/****************************************************************************/
#ifndef _FTW_HEADERS_H
#include "ftw_headers.h"
#endif /* _FTW_HEADERS_H */
/****************************************************************************/
static int
walk(const char *path,int (*func)(const char *,const struct stat *,int,struct FTW *),const int depth,int level,const int flags,const int base,int * const prune)
{
int result = OK;
DIR *dp;
struct dirent *de;
struct stat st;
char *next_name;
char *old_cwd = 0;
int type;
int old_length;
int errtmp;
struct FTW extra_info;
int stat_result;
ENTER();
SHOWSTRING(path);
SHOWPOINTER(func);
SHOWVALUE(depth);
SHOWVALUE(level);
SHOWVALUE(flags);
if(__check_abort_enabled)
__check_abort();
if(level > depth)
goto out;
if(FLAG_IS_SET(flags,FTW_PHYS))
stat_result = lstat(path,&st);
else
stat_result = stat(path,&st);
if(stat_result == OK)
{
if (S_ISLNK(st.st_mode)) /* Should only be possible if lstat() is used. */
{
type = FTW_SL;
}
else if (S_ISDIR(st.st_mode))
{
if(FLAG_IS_SET(st.st_mode,S_IRUSR))
type = FTW_D; /* Directory */
else
type = FTW_DNR; /* Directory No Read-permission */
}
else if (S_ISREG(st.st_mode))
{
type = FTW_F; /* File */
}
else
{
/* Skip */
goto out;
}
}
else
{
if(FLAG_IS_CLEAR(flags,FTW_PHYS) && lstat(path,&st) == OK)
type = FTW_SLN; /* Broken link. */
else
type = FTW_NS; /* No Stat */
}
extra_info.quit = 0;
extra_info.base = base;
extra_info.level = level;
if(type == FTW_D)
{
old_length = strlen(path);
if(FLAG_IS_CLEAR(flags,FTW_DEPTH))
result = (*func)(path,&st,type,&extra_info);
if(extra_info.quit == 0)
{
dp = opendir(path); /* Also takes care of Unix->Amiga pathname conversion. */
if(dp == NULL)
{
result = ERROR;
goto out;
}
if(FLAG_IS_SET(flags,FTW_CHDIR)) /* Change to directory before traversing. */
{
old_cwd = malloc(old_length + NAME_MAX);
if(old_cwd == NULL)
{
__set_errno(ENOMEM);
result = ERROR;
goto out;
}
getcwd(old_cwd,old_length + NAME_MAX);
chdir(path);
}
next_name = malloc(old_length + NAME_MAX + 2); /* Allocate new for each recursive step to handle extremely long path names. */
if(next_name == NULL)
{
__set_errno(ENOMEM);
result = ERROR;
goto out;
}
strcpy(next_name,path);
if(old_length > 0 && next_name[old_length - 1] != ':' && next_name[old_length - 1] != '/')
next_name[old_length++] = '/';
while((result == 0) && (de = readdir(dp)) != NULL)
{
strlcpy(&next_name[old_length],de->d_name,NAME_MAX + 2);
result = walk(next_name,func,depth,level + 1,flags,old_length,prune);
if((*prune) != 0)
{
(*prune) = 0;
break;
}
}
errtmp = __get_errno();
closedir(dp);
__set_errno(errtmp);
free(next_name);
if((result == 0) && FLAG_IS_SET(flags,FTW_DEPTH))
result = (*func)(path,&st,FTW_DP,&extra_info);
}
if(extra_info.quit == FTW_PRUNE) /* Abort traversal of current directory. */
(*prune) = 1;
}
else
{
result = (*func)(path,&st,type,&extra_info);
}
out:
if(old_cwd != NULL)
{
errtmp = __get_errno();
chdir(old_cwd); /* Restore (pop) old directory. */
free(old_cwd);
__set_errno(errtmp);
}
RETURN(result);
return(result);
}
/****************************************************************/
static int
index_of_end_part(const char *path)
{
int result = OK;
int i;
i = strlen(path) - 1;
while(i-- > 0)
{
if(path[i] == '/' || path[i] == ':')
{
result = i + 1;
break;
}
}
return(result);
}
/****************************************************************/
int
nftw(const char *path,int (*func)(const char *,const struct stat *,int,struct FTW *),int depth,int flags)
{
char *base;
int len;
int base_index;
int prune = 0;
int result = ERROR;
ENTER();
SHOWSTRING(path);
SHOWPOINTER(func);
SHOWVALUE(depth);
SHOWVALUE(flags);
if(path == NULL)
{
SHOWMSG("NULL pathname to nftw().");
__set_errno(EFAULT);
goto out;
}
if(func == NULL)
{
SHOWMSG("No function supplied.");
__set_errno(EFAULT);
goto out;
}
if(depth < 0)
{
SHOWMSG("Invalid depth.\n");
__set_errno(EINVAL);
goto out;
}
if((flags & ~FTW_ALL_FLAGS) != 0)
{
SHOWMSG("Bogus flags.");
__set_errno(EINVAL);
goto out;
}
/* Make sure the path never ends with '/' unless used to indicate parent directory. */
len = strlen(path);
if(len > 1 && path[len - 1] == '/' && path[len - 2] != '/')
{
int error;
base = strdup(path);
if(base == NULL)
{
__set_errno(ENOMEM);
goto out;
}
base[len - 1] = '\0';
base_index = index_of_end_part(base);
result = walk(base,func,depth,0,flags,base_index,&prune);
error = __get_errno();
free(base);
__set_errno(error);
}
else
{
base_index = index_of_end_part(path);
result = walk(path,func,depth,0,flags,base_index,&prune);
}
out:
RETURN(result);
return(result);
}

185
library/include/complex.h Normal file
View File

@@ -0,0 +1,185 @@
/*
* $Id: complex.h,v 1.3 2005-05-12 13:21: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>
* 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_H
#define _COMPLEX_H
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard, but it should
be part of ISO/IEC 9899:1999, also known as "C99". */
/****************************************************************************/
#ifndef __GNUC__
#error Unsupported compiler.
#endif /* __GNUC__ */
/****************************************************************************/
#if defined(__cplusplus)
#warning C99 header file used in C++.
#endif /* __cplusplus */
/****************************************************************************/
#if !defined(__STDC_VERSION__) || (__GNUC__ < 3 && __STDC_VERSION__ < 199901L)
#error Complex numbers are not supported by/for this compiler.
#endif /* __GNUC__ && __STDC_VERSION__ */
/****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************************************************************/
/* Basic types; imaginary is assumed not to be implemented yet. */
#define complex _Complex
/****************************************************************************/
/* Constants */
#define _Complex_I (__extension__ 0.0+1.0fi)
#define I _Complex_I
/****************************************************************************/
extern double creal(double complex z);
extern float crealf(float complex z);
extern long double creall(long double complex z);
extern double cimag(double complex z);
extern float cimagf(float complex z);
extern long double cimagl(long double complex z);
extern double complex conj(double complex z);
extern float complex conjf(float complex z);
extern long double complex conjl(long double complex z);
extern double carg(double complex z);
extern float cargf(float complex z);
extern long double cargl(long double complex z);
/****************************************************************************/
/* Unimplemented functions (so far)... */
/****************************************************************************/
#if 0
extern double complex cacos(double complex z);
extern float complex cacosf(float complex z);
extern long double complex cacosl(long double complex z);
extern double complex casin(double complex z);
extern float complex casinf(float complex z);
extern long double complex casinl(long double complex z);
extern double complex catan(double complex z);
extern float complex catanf(float complex z);
extern long double complex catanl(long double complex z);
extern double complex ccos(double complex z);
extern float complex ccosf(float complex z);
extern long double complex ccosl(long double complex z);
extern double complex csin(double complex z);
extern float complex csinf(float complex z);
extern long double complex csinl(long double complex z);
extern double complex ctan(double complex z);
extern float complex ctanf(float complex z);
extern long double complex ctanl(long double complex z);
extern double complex cacosh(double complex z);
extern float complex cacoshf(float complex z);
extern long double complex cacoshl(long double complex z);
extern double complex casinh(double complex z);
extern float complex casinhf(float complex z);
extern long double complex casinhl(long double complex z);
extern double complex catanh(double complex z);
extern float complex catanhf(float complex z);
extern long double complex catanhl(long double complex z);
extern double complex ccosh(double complex z);
extern float complex ccoshf(float complex z);
extern long double complex ccoshl(long double complex z);
extern double complex csinh(double complex z);
extern float complex csinhf(float complex z);
extern long double complex csinhl(long double complex z);
extern double complex ctanh(double complex z);
extern float complex ctanhf(float complex z);
extern long double complex ctanhl(long double complex z);
extern double complex cexp(double complex z);
extern float complex cexpf(float complex z);
extern long double complex cexpl(long double complex z);
extern double complex clog(double complex z);
extern float complex clogf(float complex z);
extern long double complex clogl(long double complex z);
extern double cabs(double complex z);
extern float cabsf(float complex z);
extern long double cabsl(long double complex z);
extern double complex cpow(double complex z);
extern float complex cpowf(float complex z);
extern long double complex cpowl(long double complex z);
extern double complex csqrt(double complex z);
extern float complex csqrtf(float complex z);
extern long double complex csqrtl(long double complex z);
extern double complex cproj(double complex z);
extern float complex cprojf(float complex z);
extern long double complex cprojl(long double complex z);
#endif
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/****************************************************************************/
#endif /* _COMPLEX_H */

View File

@@ -1,5 +1,5 @@
/*
* $Id: ctype.h,v 1.5 2005-01-09 15:20:33 obarthel Exp $
* $Id: ctype.h,v 1.6 2005-05-11 20:15:28 obarthel Exp $
*
* :ts=4
*
@@ -57,6 +57,7 @@ extern int islower(int c);
extern int isupper(int c);
extern int isspace(int c);
extern int isblank(int c);
extern int tolower(int c);
extern int toupper(int c);
@@ -99,6 +100,7 @@ extern const unsigned char __ctype_table[];
#define islower(c) ((__ctype_table[(c) & 255] & __CTYPE_LOWER_CASE) != 0)
#define isupper(c) ((__ctype_table[(c) & 255] & __CTYPE_UPPER_CASE) != 0)
#define isspace(c) ((__ctype_table[(c) & 255] & __CTYPE_WHITE_SPACE) != 0)
#define isblank(c) ((c) == ' ' || (c) == '\t')
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: dos.h,v 1.5 2005-01-02 09:07:21 obarthel Exp $
* $Id: dos.h,v 1.9 2005-03-06 09:04:44 obarthel Exp $
*
* :ts=4
*
@@ -66,6 +66,26 @@ extern "C" {
* ISO 'C' standard context. It is redefined to WBenchMsg to make it
* compatible with the original Amiga program startup code which would
* refer to the variable under that name.
*
* It is recommended to access the Workbench startup message as part of your
* program's main() function, like this:
*
* int
* main(int argc,char ** argv)
* {
* struct WBStartup * wb_startup_message;
*
* if(argc == 0)
* wb_startup_message = (struct WBStartup *)argv;
* else
* wb_startup_message = NULL;
*
* ...
* }
*
* This approach has the advantage that your program does not rely upon a
* global variable initialized by the startup code, whose name you might
* not even know exactly.
*/
extern struct WBStartup * __WBenchMsg;
#define WBenchMsg __WBenchMsg
@@ -252,6 +272,32 @@ extern unsigned int (* __get_default_stack_size)(void);
/****************************************************************************/
/*
* This library falls back onto locale.library to perform string collation
* in strcoll(), character conversion in toupper() and various other
* functions. This may not your intention. To restrict the library to use
* only the "C" language locale, declare the following variable in your
* code and set it to FALSE, so that it overrides the default settings.
* The variable value is checked during program startup and, if set to
* TRUE, has the effect of opening locale.library and obtaining the
* default locale.
*/
extern BOOL __open_locale;
/*
* Two functions control how this library uses the locale.library API to
* perform string collation, character and time conversion, etc.
*
* __locale_init() opens locale.library and attempts to open the default
* locale. If it succeeds, it will return 0 and -1 otherwise.
*
* __locale_exit() releases the default locale and closes locale.library.
*/
extern int __locale_init(void);
extern void __locale_exit(void);
/****************************************************************************/
/*
* If linked with -lunix, Unix path names are translated to Amiga path
* names (and the other way round). If you wish to disable this, set the
@@ -278,7 +324,7 @@ extern int __translate_relative_path_name(char const ** name_ptr,char *replace,s
extern void __restore_path_name(char const ** name_ptr,struct name_translation_info * nti);
extern int __translate_amiga_to_unix_path_name(char const ** name_ptr,struct name_translation_info * nti);
extern int __translate_unix_to_amiga_path_name(char const ** name_ptr,struct name_translation_info * nti);
extern void __translate_io_error_to_errno(LONG io_error,int * errno_ptr);
extern int __translate_io_error_to_errno(LONG io_error);
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: fcntl.h,v 1.4 2005-01-02 09:07:21 obarthel Exp $
* $Id: fcntl.h,v 1.5 2005-04-03 10:22:48 obarthel Exp $
*
* :ts=4
*
@@ -65,6 +65,7 @@ extern "C" {
#define O_EXCL (1<<4)
#define O_TRUNC (1<<5)
#define O_NONBLOCK (1<<6)
#define O_NDELAY O_NONBLOCK
#define O_SYNC (0)
#define O_NOCTTY (0)
#define O_ASYNC (1<<7)

102
library/include/ftw.h Normal file
View File

@@ -0,0 +1,102 @@
/*
* $Id: ftw.h,v 1.1 2005-03-02 12:57: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>
* 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 _FTW_H
#define _FTW_H
/****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
#include <sys/stat.h>
/****************************************************************************/
/* Values passed to the user function (argument #3). */
enum
{
FTW_F, /* Regular file. */
FTW_D, /* Directory. */
FTW_DP, /* Directory, already visited. (nftw() only) */
FTW_SL, /* Symlink. (nftw() only) */
FTW_SLN, /* Broken Symlink. (does not point to an existing file, nftw() only) */
FTW_DNR, /* Directory which can not be read (e.g. not enough permissions) */
FTW_NS /* Stat failed. */
};
/****************************************************************************/
/* Flags for FTW.quit */
#define FTW_SKD (1L<<0) /* Skip directory. */
#define FTW_PRUNE (1L<<1) /* Prune traversal. (skip up) */
/****************************************************************************/
/* Flags for nftw() */
#define FTW_PHYS (1L<<0)
#define FTW_MOUNT (1L<<1) /* Currently unsupported. */
#define FTW_DEPTH (1L<<2)
#define FTW_CHDIR (1L<<3)
#define FTW_ALL_FLAGS (0x0000000f)
/****************************************************************************/
struct FTW
{
int quit; /* Flags passed out from the user function to ftw()/nftw() */
int base; /* Index of current item from start of string. e.g. 4 for "foo/bar" */
int level; /* Current depth. (counted from 0) */
};
/****************************************************************************/
extern int ftw(const char *path,int (*func)(const char *,const struct stat *,int),int depth);
extern int nftw(const char *path,int (*func)(const char *,const struct stat *,int,struct FTW *),int depth,int flags);
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/****************************************************************************/
#endif /* _FTW_H */

318
library/include/inttypes.h Normal file
View File

@@ -0,0 +1,318 @@
/*
* $Id: inttypes.h,v 1.2 2005-05-12 13:21: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>
* 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 _INTTYPES_H
#define _INTTYPES_H
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
/* Integral types with specified size; contributed by Peter Bengtsson */
/****************************************************************************/
#ifndef _STDINT_H
#include <stdint.h>
#endif /* _STDINT_H */
/****************************************************************************/
#ifndef _STDDEF_H
#include <stddef.h>
#endif /* _STDDEF_H */
/****************************************************************************/
/* printf() format specifications for different types. */
/* "Decimal" */
#define PRId8 "d"
#define PRId16 "d"
#define PRId32 "d"
#define PRId64 "lld"
#define PRIdLEAST8 "d"
#define PRIdLEAST16 "d"
#define PRIdLEAST32 "d"
#define PRIdLEAST64 "lld"
#define PRIdFAST8 "d"
#define PRIdFAST16 "d"
#define PRIdFAST32 "d"
#define PRIdFAST64 "lld"
#define PRIdPTR "ld"
/* "Integer" */
#define PRIi8 "i"
#define PRIi16 "i"
#define PRIi32 "i"
#define PRIi64 "lli"
#define PRIiLEAST8 "i"
#define PRIiLEAST16 "i"
#define PRIiLEAST32 "i"
#define PRIiLEAST64 "lli"
#define PRIiFAST8 "i"
#define PRIiFAST16 "i"
#define PRIiFAST32 "i"
#define PRIiFAST64 "lli"
#define PRIiPTR "li"
/* "Unsigned" */
#define PRIu8 "u"
#define PRIu16 "u"
#define PRIu32 "u"
#define PRIu64 "llu"
#define PRIuLEAST8 "u"
#define PRIuLEAST16 "u"
#define PRIuLEAST32 "u"
#define PRIuLEAST64 "llu"
#define PRIuFAST8 "u"
#define PRIuFAST16 "u"
#define PRIuFAST32 "u"
#define PRIuFAST64 "llu"
#define PRIuPTR "lu"
/* "Hexadecimal - lowercase " */
#define PRIx8 "x"
#define PRIx16 "x"
#define PRIx32 "x"
#define PRIx64 "llx"
#define PRIxLEAST8 "x"
#define PRIxLEAST16 "x"
#define PRIxLEAST32 "x"
#define PRIxLEAST64 "llx"
#define PRIxFAST8 "x"
#define PRIxFAST16 "x"
#define PRIxFAST32 "x"
#define PRIxFAST64 "llx"
#define PRIxPTR "lx"
/* "Hexadecimal - Uppercase" */
#define PRIX8 "X"
#define PRIX16 "X"
#define PRIX32 "X"
#define PRIX64 "llX"
#define PRIXLEAST8 "X"
#define PRIXLEAST16 "X"
#define PRIXLEAST32 "X"
#define PRIXLEAST64 "llX"
#define PRIXFAST8 "X"
#define PRIXFAST16 "X"
#define PRIXFAST32 "X"
#define PRIXFAST64 "llX"
#define PRIXPTR "lX"
/* "Octal" */
#define PRIo8 "o"
#define PRIo16 "o"
#define PRIo32 "o"
#define PRIo64 "llo"
#define PRIoLEAST8 "o"
#define PRIoLEAST16 "o"
#define PRIoLEAST32 "o"
#define PRIoLEAST64 "llo"
#define PRIoFAST8 "o"
#define PRIoFAST16 "o"
#define PRIoFAST32 "o"
#define PRIoFAST64 "llo"
#define PRIoPTR "lo"
/* intmax_t is 32 bits for SAS/C, 64-bits for GCC or if using a conforming C99 compiler. */
#if defined(__GNUC__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
#define PRIdMAX "lld"
#define PRIiMAX "lli"
#define PRIuMAX "llu"
#define PRIxMAX "llx"
#define PRIXMAX "llX"
#define PRIoMAX "llo"
#else
#define PRIdMAX "ld"
#define PRIiMAX "li"
#define PRIuMAX "lu"
#define PRIxMAX "lx"
#define PRIXMAX "lX"
#define PRIoMAX "lo"
#endif /* __GNUC__ || (__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) */
/* scanf() format specifiers. */
/* "Decimal" */
#define SCNd8 "hhd"
#define SCNd16 "hd"
#define SCNd32 "d"
#define SCNd64 "lld"
#define SCNdLEAST8 "hhd"
#define SCNdLEAST16 "hd"
#define SCNdLEAST32 "d"
#define SCNdLEAST64 "lld"
#define SCNdFAST8 "hhd"
#define SCNdFAST16 "d"
#define SCNdFAST32 "d"
#define SCNdFAST64 "lld"
#define SCNdPTR "d"
/* "Integer" */
#define SCNi8 "hhi"
#define SCNi16 "hi"
#define SCNi32 "i"
#define SCNi64 "lli"
#define SCNiLEAST8 "hhi"
#define SCNiLEAST16 "hi"
#define SCNiLEAST32 "i"
#define SCNiLEAST64 "lli"
#define SCNiFAST8 "hhi"
#define SCNiFAST16 "i"
#define SCNiFAST32 "i"
#define SCNiFAST64 "lli"
#define SCNiPTR "i"
/* "Unsigned" */
#define SCNu8 "hhu"
#define SCNu16 "hu"
#define SCNu32 "u"
#define SCNu64 "llu"
#define SCNuLEAST8 "hhu"
#define SCNuLEAST16 "hu"
#define SCNuLEAST32 "u"
#define SCNuLEAST64 "llu"
#define SCNuFAST8 "hhu"
#define SCNuFAST16 "u"
#define SCNuFAST32 "u"
#define SCNuFAST64 "llu"
#define SCNuPTR "u"
/* "Hexadecimal" */
#define SCNx8 "hhx"
#define SCNx16 "hx"
#define SCNx32 "x"
#define SCNx64 "llx"
#define SCNxLEAST8 "hhx"
#define SCNxLEAST16 "hx"
#define SCNxLEAST32 "x"
#define SCNxLEAST64 "llx"
#define SCNxFAST8 "hhx"
#define SCNxFAST16 "x"
#define SCNxFAST32 "x"
#define SCNxFAST64 "llx"
#define SCNxPTR "x"
/* "Octal" */
#define SCNo8 "hho"
#define SCNo16 "ho"
#define SCNo32 "o"
#define SCNo64 "llo"
#define SCNoLEAST8 "hho"
#define SCNoLEAST16 "ho"
#define SCNoLEAST32 "o"
#define SCNoLEAST64 "llo"
#define SCNoFAST8 "hho"
#define SCNoFAST16 "o"
#define SCNoFAST32 "o"
#define SCNoFAST64 "llo"
#define SCNoPTR "o"
#if defined(__GNUC__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
#define SCNdMAX "lld"
#define SCNiMAX "lli"
#define SCNuMAX "llu"
#define SCNxMAX "llx"
#define SCNoMAX "llo"
#else
#define SCNdMAX "ld"
#define SCNiMAX "li"
#define SCNuMAX "lu"
#define SCNxMAX "lx"
#define SCNoMAX "lo"
#endif /* __GNUC__ || (__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) */
/****************************************************************************/
#if defined(__GNUC__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
typedef struct { long long quot; long long rem; } imaxdiv_t;
#else
typedef struct { long quot; long rem; } imaxdiv_t;
#endif /* __GNUC__ || (__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) */
/****************************************************************************/
extern intmax_t imaxabs(intmax_t x);
extern imaxdiv_t imaxdiv(intmax_t n,intmax_t d);
/****************************************************************************/
extern intmax_t strtoimax(const char *str, char **ptr, int base);
extern uintmax_t strtoumax(const char *str, char **ptr, int base);
/****************************************************************************/
extern intmax_t wcstoimax(const wchar_t *str, char **ptr, int base);
extern uintmax_t wcstoumax(const wchar_t *str, char **ptr, int base);
/****************************************************************************/
#endif /* _INTTYPES_H */

View File

@@ -1,5 +1,5 @@
/*
* $Id: limits.h,v 1.5 2005-01-09 09:40:33 obarthel Exp $
* $Id: limits.h,v 1.8 2005-06-04 10:46:23 obarthel Exp $
*
* :ts=4
*
@@ -83,7 +83,8 @@
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/* The following is not part of the ISO 'C' (1994) standard, but it should
be part of ISO/IEC 9899:1999, also known as "C99". */
/****************************************************************************/
@@ -93,8 +94,79 @@
/****************************************************************************/
#define MB_LEN_MAX 1
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
#define SSIZE_MAX 2147483647L
/****************************************************************************/
#define PATH_MAX 1024
/****************************************************************************/
#define WORD_BIT 32
#define LONG_BIT 32 /* For now, at least. */
/****************************************************************************/
/*
* POSIX, POSIX... These are minimum maximum values. I.e. the maximum must be
* at least this large. I am not sure all of these make much sense on the Amiga
* (yet), but here they are anyway.
*
* Actually, these symbols should be defined only if the preprocessor symbol
* _POSIX_SOURCE is defined. Other symbols which should be defined, too, are
* ARG_MAX, CHILD_MAX, LINK_MAX, MAX_CANON, MAX_INPUT, NAME_MAX, NGROUPS_MAX,
* OPEN_MAX, PATH_MAX, PIPE_BUF, SSIZE_MAX, STREAM_MAX and TZNAME_MAX.
*/
#define _POSIX_AIO_LISTIO_MAX 2
#define _POSIX_AIO_MAX 1
#define _POSIX_ARG_MAX 4096
#define _POSIX_CHILD_MAX 6
#define _POSIX_DELAYTIMER_MAX 32
#define _POSIX_LINK_MAX 8
#define _POSIX_LOGIN_NAME_MAX 9
#define _POSIX_MAX_CANON 255
#define _POSIX_MAX_INPUT 255
#define _POSIX_MQ_OPEN_MAX 8
#define _POSIX_MQ_PRIO_MAX 32
#define _POSIX_NAME_MAX 14
#define _POSIX_NGROUPS_MAX 0
#define _POSIX_OPEN_MAX 16
#define _POSIX_PATH_MAX 255
#define _POSIX_PIPE_BUF 512
#define _POSIX_RTSIG_MAX 8
#define _POSIX_SEM_NSEMS_MAX 256
#define _POSIX_SEM_VALUE_MAX 32767
#define _POSIX_SIGQUEUE_MAX 32
#define _POSIX_SSIZE_MAX 32767
#define _POSIX_STREAM_MAX 8
#define _POSIX_THREAD_DESTRUCTOR_ITERATIONS 4
#define _POSIX_THREAD_KEYS_MAX 128
#define _POSIX_THREADS_MAX 64
#define _POSIX_TIMER_MAX 32
#define _POSIX_TTY_NAME_MAX 9
#define _POSIX_TZNAME_MAX 3
#define _POSIX2_BC_BASE_MAX 99
#define _POSIX2_BC_DIM_MAX 2048
#define _POSIX2_BC_SCALE_MAX 99
#define _POSIX2_BC_STRING_MAX 1000
#define _POSIX2_COLL_WEIGHTS_MAX 2
#define _POSIX2_EXPR_NEST_MAX 32
#define _POSIX2_LINE_MAX 2048
#define _POSIX2_RE_DUP_MAX 255
#define _XOPEN_IOV_MAX 16
/* And a maximum minimum value. */
#define _POSIX_CLOCKRES_MIN 20000000 /* Nanoseconds */
/****************************************************************************/
#endif /* _LIMITS_H */

View File

@@ -1,5 +1,5 @@
/*
* $Id: math.h,v 1.5 2005-01-02 09:07:21 obarthel Exp $
* $Id: math.h,v 1.15 2005-05-30 08:47:41 obarthel Exp $
*
* :ts=4
*
@@ -85,12 +85,215 @@ extern double tanh(double x);
/****************************************************************************/
extern double rint(double x);
#define M_E 2.7182818284590452354
#define M_LOG2E 1.4426950408889634074
#define M_LOG10E 0.43429448190325182765
#define M_LN2 0.69314718055994530942
#define M_LN10 2.30258509299404568402
#define M_PI 3.14159265358979323846
#define M_PI_2 1.57079632679489661923
#define M_PI_4 0.78539816339744830962
#define M_1_PI 0.31830988618379067154
#define M_2_PI 0.63661977236758134308
#define M_2_SQRTPI 1.12837916709551257390
#define M_SQRT2 1.41421356237309504880
#define M_SQRT1_2 0.70710678118654752440
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard, but it should
be part of ISO/IEC 9899:1999, also known as "C99". */
/****************************************************************************/
/* Note that the comparison operations performed on the floating point
data types ought to include float, double and long double. However,
because the current (2005-06-12) compiler technology available on the
Amiga does not support the long double type yet, this library is
restricted to operations on float and double. */
/****************************************************************************/
extern float __huge_val_float;
/****************************************************************************/
#define HUGE_VALF ((const float)__huge_val_float)
/****************************************************************************/
extern float __infinity;
extern float __nan;
/****************************************************************************/
#define INFINITY ((const float)__infinity)
#define NAN ((const float)__nan)
/****************************************************************************/
#define FP_INFINITE 0 /* -/+ infinity */
#define FP_NAN 1 /* not a number */
#define FP_NORMAL 2 /* normalized floating point number */
#define FP_SUBNORMAL 3 /* very small floating point number; special
case of IEEE 754 */
#define FP_ZERO 4 /* exponent/fraction are zero */
/****************************************************************************/
extern int __fpclassify_float(float x);
extern int __fpclassify_double(double x);
extern int __isfinite_float(float x);
extern int __isfinite_double(double x);
extern int __signbit_float(float x);
extern int __signbit_double(double x);
/****************************************************************************/
#define fpclassify(x) \
(sizeof(x) == sizeof(float) ? \
__fpclassify_float(x) : \
__fpclassify_double(x))
#define isfinite(x) \
(sizeof(x) == sizeof(float) ? \
__isfinite_float(x) : \
__isfinite_double(x))
#define isinf(x) \
((sizeof(x) == sizeof(float) ? \
__fpclassify_float(x) : \
__fpclassify_double(x)) \
== FP_INFINITE)
#define isnan(x) \
((sizeof(x) == sizeof(float) ? \
__fpclassify_float(x) : \
__fpclassify_double(x)) \
== FP_NAN)
#define isnormal(x) \
((sizeof(x) == sizeof(float) ? \
__fpclassify_float(x) : \
__fpclassify_double(x)) \
== FP_NORMAL)
#define signbit(x) \
(sizeof(x) == sizeof(float) ? \
__signbit_float(x) : \
__signbit_double(x))
/****************************************************************************/
extern int __isunordered_float(float x,float y);
extern int __isunordered_float_double(float x,double y);
extern int __isunordered_double(double x,double y);
/****************************************************************************/
#define isunordered(x,y) \
(sizeof(x) == sizeof(float) ? \
(sizeof(y) == sizeof(float) ? \
__isunordered_float((x),y) : \
__isunordered_float_double((x),(y))) : \
(sizeof(y) == sizeof(float) ? \
__isunordered_float_double((y),(x)) : \
__isunordered_double((x),(y))))
#define isgreater(x,y) \
(isunordered(x,y) ? 0 : (x) > (y))
#define isgreaterequal(x,y) \
(isunordered(x,y) ? 0 : (x) >= (y))
#define isless(x,y) \
(isunordered(x,y) ? 0 : (x) < (y))
#define islessequal(x,y) \
(isunordered(x,y) ? 0 : (x) <= (y))
#define islessgreater(x,y) \
(isunordered(x,y) ? 0 : (x) < (y) || (x) > (y)) /* ZZZ don't evaluate twice! */
/****************************************************************************/
extern float acosf(float x);
extern float asinf(float x);
extern float atanf(float x);
extern float atan2f(float y, float x);
extern float ceilf(float x);
extern float cosf(float x);
extern float coshf(float x);
extern float expf(float x);
extern float fabsf(float x);
extern float floorf(float x);
extern float fmodf(float x, float y);
extern float frexpf(float x, int *eptr);
extern float ldexpf(float x,int exp);
extern float logf(float x);
extern float log10f(float x);
extern float modff(float x, float *iptr);
extern float powf(float x, float y);
extern float sinf(float x);
extern float sinhf(float x);
extern float sqrtf(float x);
extern float tanf(float x);
extern float tanhf(float x);
/****************************************************************************/
extern float acoshf(float x);
extern float asinhf(float x);
extern float cbrtf(float x);
extern float copysignf(float x, float y);
extern float erfcf(float x);
extern float erff(float x);
extern float expm1f(float x);
extern float fdimf(float x,float y);
extern float fmaxf(float x,float y);
extern float fminf(float x,float y);
extern float hypotf(float x, float y);
extern float lgammaf(float x);
extern float log1pf(float x);
extern float logbf(float x);
extern float nanf(const char *tagp);
extern float nextafterf(float x,float y);
extern float remainderf(float x, float p);
extern float rintf(float x);
extern int isinf(double x);
extern int isnan(double x);
extern double logb(double x);
extern float scalbnf (float x, int n);
extern int ilogbf(float x);
/****************************************************************************/
extern double acosh(double x);
extern double asinh(double x);
extern double cbrt(double x);
extern double copysign(double x, double y);
extern double erf(double x);
extern double erfc(double x);
extern double expm1(double x);
extern double fdim(double x,double y);
extern double fmax(double x,double y);
extern double fmin(double x,double y);
extern double hypot(double x,double y);
extern double lgamma(double x);
extern double log1p(double x);
extern double logb(double x);
extern double nan(const char *tagp);
extern double nextafter(double x,double y);
extern double remainder(double x, double p);
extern double rint(double x);
extern double scalbn (double x, int n);
extern int ilogb(double x);
/****************************************************************************/
#define FLT_EVAL_METHOD 0
/****************************************************************************/
typedef float float_t;
typedef double double_t;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: signal.h,v 1.4 2005-01-02 09:07:21 obarthel Exp $
* $Id: signal.h,v 1.5 2005-05-12 13:21:47 obarthel Exp $
*
* :ts=4
*
@@ -62,6 +62,15 @@ extern int raise(int sig);
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard, but it should
be part of ISO/IEC 9899:1999, also known as "C99". */
/****************************************************************************/
typedef int sig_atomic_t;
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
@@ -76,10 +85,6 @@ typedef void (*sig_t)(int);
/****************************************************************************/
typedef int sig_atomic_t;
/****************************************************************************/
typedef int sigset_t;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdarg.h,v 1.3 2005-01-02 09:07:21 obarthel Exp $
* $Id: stdarg.h,v 1.4 2005-04-03 10:22:48 obarthel Exp $
*
* :ts=4
*
@@ -56,6 +56,15 @@ typedef char * va_list;
/****************************************************************************/
/* The following macro is not part of the ISO 'C' (1994) standard, but it should
be part of ISO/IEC 9899:1999, also known as "C99". */
/****************************************************************************/
#define va_copy(dst,src) ((void)((dst) = (src)))
/****************************************************************************/
#else
/****************************************************************************/

81
library/include/stdbool.h Normal file
View File

@@ -0,0 +1,81 @@
/*
* $Id: stdbool.h,v 1.2 2005-05-12 13:21: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>
* 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 _STDBOOL_H
#define _STDBOOL_H
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard, but it should
be part of ISO/IEC 9899:1999, also known as "C99". */
/****************************************************************************/
#if defined(__cplusplus) && defined(__GNUC__)
#warning C99 header used in C++.
#endif /* __GNUC__ */
/****************************************************************************/
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)
#warning C99 header file used by non-C99 compliant compiler.
#endif /* !__STDC_VERSION__ || __STDC_VERSION__ < 199901L */
/****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************************************************************/
#define bool _Bool
/****************************************************************************/
#define false 0
#define true 1
/****************************************************************************/
#define __bool_true_and_false_are_defined 1
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/****************************************************************************/
#endif /* _STDBOOL_H */

View File

@@ -1,5 +1,5 @@
/*
* $Id: stddef.h,v 1.3 2005-01-08 10:21:28 obarthel Exp $
* $Id: stddef.h,v 1.4 2005-05-12 13:21:47 obarthel Exp $
*
* :ts=4
*
@@ -54,7 +54,7 @@ extern "C" {
typedef int ptrdiff_t;
typedef unsigned int size_t;
typedef unsigned int wchar_t;
typedef unsigned short wchar_t;
/****************************************************************************/

196
library/include/stdint.h Normal file
View File

@@ -0,0 +1,196 @@
/*
* $Id: stdint.h,v 1.2 2005-05-12 13:21: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>
* 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 _STDINT_H
#define _STDINT_H
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
/* C99 integer type definitions; contributed by Peter Bengtsson */
/****************************************************************************/
#ifndef _LIMITS_H
#include <limits.h>
#endif /* _LIMITS_H */
/****************************************************************************/
/* Common for all supported compilers. */
typedef signed char int8_t;
typedef signed short int16_t;
typedef signed int int32_t;
typedef unsigned char uint8_t;
typedef unsigned short uint16_t;
typedef unsigned int uint32_t;
typedef signed char int_least8_t;
typedef signed short int_least16_t;
typedef signed int int_least32_t;
typedef unsigned char uint_least8_t;
typedef unsigned short uint_least16_t;
typedef unsigned int uint_least32_t;
/* This is mostly guesswork. */
typedef signed char int_fast8_t;
typedef signed int int_fast16_t;
typedef signed int int_fast32_t;
typedef unsigned char uint_fast8_t;
typedef unsigned int uint_fast16_t;
typedef unsigned int uint_fast32_t;
typedef signed long intptr_t;
typedef unsigned long uintptr_t;
#if defined(__GNUC__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
typedef signed long long int64_t;
typedef unsigned long long uint64_t;
typedef signed long long int_least64_t;
typedef unsigned long long uint_least64_t;
typedef signed long long int_fast64_t;
typedef unsigned long long uint_fast64_t;
typedef signed long long intmax_t;
typedef unsigned long long uintmax_t;
#else
typedef signed long intmax_t;
typedef unsigned long uintmax_t;
#endif /* __GNUC__ || (__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) */
#define INT8_MIN SCHAR_MIN
#define INT8_MAX SCHAR_MAX
#define UINT8_MAX UCHAR_MAX
#define INT16_MIN SHRT_MIN
#define INT16_MAX SHRT_MAX
#define UINT16_MAX USHRT_MAX
#define INT32_MIN INT_MIN
#define INT32_MAX INT_MAX
#define UINT32_MAX UINT_MAX
#if defined(__GNUC__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
#define INT64_MIN LLONG_MIN
#define INT64_MAX LLONG_MAX
#define UINT64_MAX ULLONG_MAX
#endif /* __GNUC__ || (__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) */
#define INT_LEAST8_MIN SCHAR_MIN
#define INT_LEAST8_MAX SCHAR_MAX
#define UINT_LEAST8_MAX UCHAR_MAX
#define INT_LEAST16_MIN SHRT_MIN
#define INT_LEAST16_MAX SHRT_MAX
#define UINT_LEAST16_MAX USHRT_MAX
#define INT_LEAST32_MIN INT_MIN
#define INT_LEAST32_MAX INT_MAX
#define UINT_LEAST32_MAX UINT_MAX
#if defined(__GNUC__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
#define INT_LEAST64_MIN LLONG_MIN
#define INT_LEAST64_MAX LLONG_MAX
#define UINT_LEAST64_MAX ULLONG_MAX
#endif /* __GNUC__ || (__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) */
#define INT_FAST8_MIN SCHAR_MIN
#define INT_FAST8_MAX SCHAR_MAX
#define UINT_FAST8_MAX UCHAR_MAX
#define INT_FAST16_MIN INT_MIN
#define INT_FAST16_MAX INT_MAX
#define UINT_FAST16_MAX UINT_MAX
#define INT_FAST32_MIN INT_MIN
#define INT_FAST32_MAX INT_MAX
#define UINT_FAST32_MAX UINT_MAX
#if defined(__GNUC__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
#define INT_FAST64_MIN LLONG_MIN
#define INT_FAST64_MAX LLONG_MAX
#define UINT_FAST64_MAX ULLONG_MAX
#endif /* __GNUC__ || (__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) */
#define INTPTR_MIN LONG_MIN
#define INTPTR_MAX LONG_MAX
#define UINTPTR_MAX ULONG_MAX
#if defined(__GNUC__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
#define INTMAX_MIN LLONG_MIN
#define INTMAX_MAX LLONG_MAX
#define UINTMAX_MAX ULLONG_MAX
#else
#define INTMAX_MIN LONG_MIN
#define INTMAX_MAX LONG_MAX
#define UINTMAX_MAX ULONG_MAX
#endif /* __GNUC__ || (__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) */
#if !defined(__cplusplus) || defined(__STDC_LIMIT_MACROS)
/* sigatomic_t is an int. */
#define SIG_ATOMIC_MIN INT_MIN
#define SIG_ATOMIC_MAX INT_MAX
/* Maximum value of size_t */
#define SIZE_MAX UINT_MAX
#endif /* not C++ or LIMIT_MACROS */
#if !defined(__cplusplus) || defined(__STDC_CONSTANT_MACROS)
#define INT8_C(x) x
#define INT16_C(x) x
#define INT32_C(x) x
#define INT64_C(x) x ## LL
#define UINT8_C(x) x ## U
#define UINT16_C(x) x ## U
#define UINT32_C(x) x ## U
#define UINT64_C(x) x ## ULL
#if defined(__GNUC__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
#define INTMAX_C(x) x ## LL
#define UINTMAX_C(x) x ## ULL
#else
#define INTMAX_C(x) x ## L
#define UINTMAX_C(x) x ## UL
#endif /* __GNUC__ || (__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) */
#endif /* not C++ or CONSTANT_MACROS */
/****************************************************************************/
#define PTRDIFF_MIN INT_MIN
#define PTRDIFF_MAX INT_MAX
#define WCHAR_MIN 0
#define WCHAR_MAX USHRT_MAX
#define WINT_MIN INT_MIN
#define WINT_MAX INT_MAX
/****************************************************************************/
#endif /* _STDINT_H */

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio.h,v 1.5 2005-01-02 09:07:21 obarthel Exp $
* $Id: stdio.h,v 1.15 2005-06-04 10:46:23 obarthel Exp $
*
* :ts=4
*
@@ -249,20 +249,11 @@ extern char *tmpnam(char *buf);
/****************************************************************************/
/*
* A special buffer flush routine which returns the last character written
* in case of success and EOF in case of failure. This is used by the
* putc() macro defined below.
*/
extern int __flush(FILE *stream);
/****************************************************************************/
/*
* fgetc() implemented as a "simple" macro; note that fgetc() does much more than
* can be conveniently expressed as a macro!
*/
#define getc(f) \
#define __getc_unlocked(f) \
(((((FILE *)(f))->flags & (__FILE_IN_USE|__FILE_READABLE|__FILE_EOF)) == (__FILE_IN_USE|__FILE_READABLE) && \
(((FILE *)(f))->flags & __FILE_BUFFER_MASK) != _IONBF && \
((FILE *)(f))->position < ((FILE *)(f))->num_read_bytes) ? \
@@ -275,7 +266,7 @@ extern int __flush(FILE *stream);
* fputc() implemented as a "simple" macro; note that fputc() does much more than
* can be conveniently expressed as a macro!
*/
#define putc(c,f) \
#define __putc_unlocked(c,f) \
(((((FILE *)(f))->flags & (__FILE_IN_USE|__FILE_WRITABLE)) == (__FILE_IN_USE|__FILE_WRITABLE) && \
(((FILE *)(f))->flags & __FILE_BUFFER_MASK) != _IONBF && \
(((FILE *)(f))->num_write_bytes < ((FILE *)(f))->size)) ? \
@@ -288,6 +279,25 @@ extern int __flush(FILE *stream);
/****************************************************************************/
#if defined(__THREAD_SAFE)
#define getc(f) (flockfile(f), __unlockfile((f),__getc_unlocked(f)))
#define putc(c,f) (flockfile(f), __unlockfile((f),__putc_unlocked((c),(f))))
#else
#define getc(f) __getc_unlocked(f)
#define putc(c,f) __putc_unlocked((c),(f))
#endif /* __THREAD_SAFE */
/****************************************************************************/
#define getchar() getc(stdin)
#define putchar(c) putc((c),stdout)
/****************************************************************************/
/*
* If requested, reimplement some of the file I/O routines as macros.
*/
@@ -296,14 +306,30 @@ extern int __flush(FILE *stream);
/****************************************************************************/
#define getchar() getc(stdin)
#define putchar(c) putc((c),stdout)
#if defined(__THREAD_SAFE)
/****************************************************************************/
#define clearerr(file) ((void)(flockfile(file), (file)->flags &= ~(__FILE_EOF|__FILE_ERROR), funlockfile(file)))
#define feof(file) (flockfile(file), __unlockfile((file),((file)->flags & __FILE_EOF) != 0))
#define ferror(file) (flockfile(file), __unlockfile((file),((file)->flags & __FILE_ERROR) != 0))
/****************************************************************************/
#else
/****************************************************************************/
#define clearerr(file) ((void)((file)->flags &= ~(__FILE_EOF|__FILE_ERROR)))
#define feof(file) (((file)->flags & __FILE_EOF) != 0)
#define ferror(file) (((file)->flags & __FILE_ERROR) != 0)
/****************************************************************************/
#endif /* __THREAD_SAFE */
/****************************************************************************/
#endif /* __C_MACROS__ */
/****************************************************************************/
@@ -316,16 +342,79 @@ extern int __flush(FILE *stream);
/****************************************************************************/
#define L_ctermid 32
/****************************************************************************/
extern char *ctermid(char *);
/****************************************************************************/
/*
* A special buffer flush routine which returns the last character written
* in case of success and EOF in case of failure. This is used by the
* __putc_unlocked() macro defined above.
*/
extern int __flush(FILE *stream);
/****************************************************************************/
/*
* A special function which returns the input character. This is used by
* the __getc_unlocked() macro defined above.
*/
extern int __unlockfile(FILE *stream,int c);
/****************************************************************************/
extern int getc_unlocked(FILE *stream);
extern int getchar_unlocked(void);
extern int putc_unlocked(int c,FILE *stream);
extern int putchar_unlocked(int c);
/****************************************************************************/
#define getc_unlocked(f) __getc_unlocked(f)
#define putc_unlocked(c,f) __putc_unlocked((c),(f))
#define getchar_unlocked() __getc_unlocked(stdin)
#define putchar_unlocked(c) __putc_unlocked((c),stdout)
/****************************************************************************/
extern FILE * fdopen(int file_descriptor, const char * type);
extern int fileno(FILE * file);
extern int asprintf(char **ret, const char *format, ...);
extern int snprintf(char *s,size_t size,const char *format,...);
extern int vsnprintf(char *s,size_t size,const char *format,va_list arg);
extern int pclose(FILE *stream);
extern FILE * popen(const char *command, const char *type);
/****************************************************************************/
#if defined(__THREAD_SAFE)
/****************************************************************************/
extern void flockfile(FILE * file);
extern void funlockfile(FILE * file);
extern int ftrylockfile(FILE * file);
/****************************************************************************/
#else
/****************************************************************************/
#define flockfile(file) ((void)0)
#define funlockfile(file) ((void)0)
#define ftrylockfile(file) (0)
/****************************************************************************/
#endif /* __THREAD_SAFE */
/****************************************************************************/
extern int vasprintf(char **ret,const char *format,va_list arg);
#ifdef __MEM_DEBUG
@@ -336,6 +425,18 @@ extern int __vasprintf(const char *file,int line,char **ret,const char *format,v
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard, but it should
be part of ISO/IEC 9899:1999, also known as "C99". */
/****************************************************************************/
extern int vfscanf(FILE *stream, const char *format, va_list arg);
extern int vsscanf(const char *s, const char *format, va_list arg);
extern int vscanf(const char *format,va_list arg);
extern int snprintf(char *s,size_t size,const char *format,...);
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib.h,v 1.5 2005-01-02 09:07:21 obarthel Exp $
* $Id: stdlib.h,v 1.11 2005-05-12 13:21:47 obarthel Exp $
*
* :ts=4
*
@@ -49,7 +49,7 @@ extern "C" {
/****************************************************************************/
/* Maximum number of bytes in a multibyte character */
#define MB_CUR_MAX 4
#define MB_CUR_MAX 2
/****************************************************************************/
@@ -149,8 +149,7 @@ extern long atol(const char *str);
/****************************************************************************/
extern long long strtoll(const char *str, char **ptr, int base);
extern unsigned long long strtoull(const char *str, char **ptr, int base);
extern int rand_r(unsigned int * seed);
/****************************************************************************/
@@ -178,6 +177,42 @@ extern char * mkdtemp(char *name_template);
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard, but it should
be part of ISO/IEC 9899:1999, also known as "C99". */
/****************************************************************************/
#if defined(__GNUC__) || (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L))
/****************************************************************************/
extern long long strtoll(const char *str, char **ptr, int base);
extern unsigned long long strtoull(const char *str, char **ptr, int base);
extern long long atoll(const char *str);
/****************************************************************************/
typedef struct { long long quot; long long rem; } lldiv_t;
/****************************************************************************/
extern long long llabs(long long x);
extern lldiv_t lldiv(long long n,long long d);
/****************************************************************************/
#endif /* __GNUC__ || (__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) */
/****************************************************************************/
extern float strtof(const char *str, char ** ptr);
/****************************************************************************/
extern void _Exit(int status);
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */

View File

@@ -1,5 +1,5 @@
/*
* $Id: strings.h,v 1.3 2005-01-02 09:07:21 obarthel Exp $
* $Id: strings.h,v 1.4 2005-03-02 12:57:56 obarthel Exp $
*
* :ts=4
*
@@ -52,9 +52,10 @@ extern "C" {
/****************************************************************************/
/* These two come from 4.4BSD. */
/* These come from 4.4BSD. */
extern int strcasecmp(const char *s1, const char *s2);
extern int strncasecmp(const char *s1, const char *s2, size_t len);
extern int ffs(int i);
/****************************************************************************/

View File

@@ -0,0 +1,63 @@
/*
* $Id: clib2_stdc.h,v 1.1 2005-05-12 13:21: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>
* 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 _SYS_CLIB2_STDC_H
#define _SYS_CLIB2_STDC_H
/****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
/* Make the "restrict" qualifier work well with 'C' compilers that do
not support it. We do assume that __STDC__ is defined, though. */
#if !defined(__STDC_VERSION__) || (__STDC_VERSION__ < 199901L)
#define restrict
#endif /* !__STDC_VERSION__ || __STDC_VERSION__ < 199901L */
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/****************************************************************************/
#endif /* _SYS_CLIB2_STDC_H */

View File

@@ -1,5 +1,5 @@
/*
* $Id: stat.h,v 1.3 2005-01-02 09:07:21 obarthel Exp $
* $Id: stat.h,v 1.5 2005-04-02 13:25:55 obarthel Exp $
*
* :ts=4
*
@@ -79,20 +79,32 @@ extern "C" {
#define S_IWOTH 0000002 /* W for other */
#define S_IXOTH 0000001 /* X for other */
/****************************************************************************/
/* Aliases for the owner RWX mask. */
#define S_IREAD S_IRUSR
#define S_IWRITE S_IWUSR
#define S_IEXEC S_IXUSR
/****************************************************************************/
#define S_IFMT 0170000 /* type of file */
#define S_IFIFO 0010000 /* named pipe (fifo) */
#define S_IFCHR 0020000 /* character special */
#define S_IFDIR 0040000 /* directory */
#define S_IFBLK 0060000 /* block special */
#define S_IFREG 0100000 /* regular */
#define S_IFLNK 0120000 /* symbolic link */
#define S_IFSOCK 0140000 /* socket */
/****************************************************************************/
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) /* directory */
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) /* char special */
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) /* regular file */
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) /* symbolic link */
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) /* fifo */
#define S_ISBLK(m) (0) /* block special */
#define S_ISCHR(m) (0) /* character special */
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: types.h,v 1.3 2005-01-02 09:07:21 obarthel Exp $
* $Id: types.h,v 1.4 2005-02-20 15:46:57 obarthel Exp $
*
* :ts=4
*
@@ -53,7 +53,7 @@ typedef unsigned int gid_t;
typedef unsigned int ino_t;
typedef unsigned int mode_t;
typedef unsigned int nlink_t;
typedef int off_t;
typedef long int off_t;
typedef int pid_t;
typedef unsigned int rlim_t;
typedef int ssize_t;

84
library/include/sys/uio.h Normal file
View File

@@ -0,0 +1,84 @@
/*
* $Id: uio.h,v 1.1 2005-04-03 10:22:48 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>
* 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 _SYS_UIO_H
#define _SYS_UIO_H
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************************************************************/
#ifndef _SYS_TYPES_H
#include <sys/types.h>
#endif /* _SYS_TYPES_H */
#ifndef _STDDEF_H
#include <stddef.h>
#endif /* _STDDEF_H */
/****************************************************************************/
/*
* The size of MAX_IOVEC is rather arbitrary since there is no kernel support
* for vectored I/O and even a single struct iovec can overflow a ssize_t.
*/
#define MAX_IOVEC 1024
typedef struct iovec
{
void * iov_base;
size_t iov_len;
} iovec_t;
/****************************************************************************/
extern ssize_t readv(int file_descriptor,const struct iovec *iov,int vec_count);
extern ssize_t writev(int file_descriptor,const struct iovec *iov,int vec_count);
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/****************************************************************************/
#endif /* _SYS_UIO_H */

View File

@@ -0,0 +1,74 @@
/*
* $Id: utsname.h,v 1.1 2005-03-02 12:57: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>
* 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 _SYS_UTSNAME_H
#define _SYS_UTSNAME_H
/****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
#define SYS_NMLN 32
/****************************************************************************/
struct utsname
{
char sysname[SYS_NMLN]; /* OS Name ("AmigaOS") */
char nodename[SYS_NMLN]; /* Usually Hostname, but there appears to be no standard. */
char release[SYS_NMLN]; /* Release e.g. "51.1" (The Version of version.library) */
char version[SYS_NMLN]; /* Version e.h. "4.0" (OS Version) */
char machine[SYS_NMLN]; /* Machine e.g. "m68k" or "ppc" */
};
/****************************************************************************/
extern int uname(struct utsname *);
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/****************************************************************************/
#endif /* _SYS_UTSNAME_H */

189
library/include/termios.h Normal file
View File

@@ -0,0 +1,189 @@
/*
* $Id: termios.h,v 1.1 2005-06-04 10:46:23 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>
* 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.
*/
/*
* Almost-but-not-quite termios.
*/
#ifndef _TERMIOS_H
#define _TERMIOS_H
typedef unsigned int tcflag_t;
typedef unsigned char cc_t;
typedef unsigned int speed_t;
#define NCCS 16 /* Number of Control Characters = Length of the c_cc array. */
enum { /* All the control characters in c_cc[] in a struct termios (below) */
VINTR=0, /* ^C (break) */
VQUIT, /* ^\ (quit) */
VERASE, /* ^H (eraase) */
VKILL, /* ^X (erase-line) */
VEOF, /* ^D (end-of-file) */
VMIN, /* Minimum number of characters to read. Interacts with VTIME. */
VEOL, /* NUL */
VTIME, /* Timeout in 1/10:ths of a second. Interacts with VMIN. */
VSTART, /* ^Q (continue) */
VSTOP, /* ^S (stop) */
VSUSP, /* ^Z (suspend) */
VWERASE, /* ^W (word-erase) */
};
struct termios {
tcflag_t c_iflag;
tcflag_t c_oflag;
tcflag_t c_cflag;
tcflag_t c_lflag;
cc_t c_cc[NCCS];
/* Private */
speed_t c_ispeed;
speed_t c_ospeed;
int type;
unsigned int flags;
};
/* c_iflag */
#define IGNBRK (1<<0L) /* Ignore VINTR */
#define BRKINT (1<<1L) /* Unimpl. */
#define IGNPAR (1<<2L) /* Unimpl. */
#define PARMRK (1<<3L) /* Unimpl. */
#define INPCK (1<<4L) /* Unimpl. */
#define ISTRIP (1<<5L) /* 7-bit data (strip high bit) */
#define INLCR (1<<6L) /* Map NL->CR */
#define IGNCR (1<<7L) /* Map CR->nothing */
#define ICRNL (1<<8L) /* Map CR->NL */
#define IXON (1<<9L) /* Unimpl. Enable XON/XOFF for output. */
#define IXOFF (1<<10L) /* Unimpl. Enable XON/XOFF for input. */
/* c_oflag */
#define OPOST (1<<0L) /* Enable output processing. */
#define ONLCR (1<<1L) /* Map NL->CR+NL */
#define OCRNL (1<<2L) /* Map CR->NL */
#define ONOCR (1<<3L) /* Map CR->nothing, but only in column 0. */
#define ONLRET (1<<4L) /* Map CR->nothing */
/* c_cflag */
#define CSIZE (0x07) /* Bit-width mask. */
#define CS5 (0x01) /* 5-bits */
#define CS6 (0x02) /* 6-bits */
#define CS7 (0x03) /* 7-bits */
#define CS8 (0x04) /* 8-bits */
#define CSTOPB (1<<3L) /* Use 2 stop bits. */
#define CREAD (1<<4L) /* Enable reading/receiving. */
#define PARENB (1<<5L) /* Enable parity generation/checking. */
#define PARODD (1<<6L) /* Parity is odd. */
#define HUPCL (1<<7L) /* Hangup on close (when the device is closed). */
#define CLOCAL (1<<8L) /* Ignore modem control lines (i.e. a null-modem) */
/* c_lflag */
#define ISIG (1<<0L) /* Send SIGINT for ^C, SIGQUIT for ^\ etc. */
#define ICANON (1<<1L) /* Canonical mode. Line buffered with EOF, EOL etc. enabled. */
#define ECHO (1<<2L) /* Echo input characters. */
#define ECHONL (1<<3L) /* Echo newline characters even if ECHO is not set. */
#define IEXTEN (1<<4L) /* Enable implementation defined input processing. (none) */
/* Speeds */
enum {
B0=0, /* 0 baud => disconnect. */
B50=50,
B75=75,
B110=110,
B134=134,
B150=150,
B200=200,
B300=300,
B600=600,
B1200=1200,
B1800=1800,
B2400=2400,
B4800=4800,
B9600=9600,
B19200=19200,
B31250=31250,
B38400=38400,
B57600=57600,
B115200=115200,
B230400=230400,
B460800=460800,
B576000=576000,
B1152000=1152000
};
#define EXTA 1 /* Tell applications we have speeds > 9600 baud. */
/* Action types for tcsetattr() */
enum {
TCSANOW,
TCSADRAIN,
TCSAFLUSH
};
/* Action types for tcflush() */
enum {
TCIFLUSH,
TCOFLUSH,
TCIOFLUSH
};
/* Action types for tcflow() */
enum {
TCOOFF,
TCOON,
TCIOFF,
TCION
};
/* Prototypes. */
extern int tcgetattr(int file_descriptor,struct termios *tios_p);
extern int tcsetattr(int file_descriptor,int action,struct termios *tios_p);
extern int tcsendbreak(int file_descriptor,int duration);
extern int tcdrain(int file_descriptor);
extern int tcflush(int file_descriptor,int what);
extern int tcflow(int file_descriptor,int action);
extern int cfmakeraw(struct termios *tios_p);
extern speed_t cfgetispeed(struct termios *tios_p);
extern speed_t cfgetospeed(struct termios *tios_p);
extern int cfsetispeed(struct termios *tios_p,speed_t input_speed);
extern int cfsetospeed(struct termios *tios_p,speed_t output_speed);
#endif /* _TERMIOS_H */

View File

@@ -1,5 +1,5 @@
/*
* $Id: unistd.h,v 1.8 2005-01-02 09:07:21 obarthel Exp $
* $Id: unistd.h,v 1.10 2005-06-04 10:46:23 obarthel Exp $
*
* :ts=4
*
@@ -98,6 +98,11 @@ extern void usleep(unsigned long microseconds);
extern int getopt(int argc, char * argv[], char *opts);
extern pid_t getpid(void);
extern char *realpath(const char *file_name, char *resolved_name);
extern int fsync(int file_descriptor);
extern int fdatasync(int file_descriptor);
extern char *ttyname(int);
extern int ttyname_r(int file_descriptor,char *name,size_t buflen);
extern int ttyname_t(int,char *,size_t);
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: wchar.h,v 1.2 2005-01-02 09:07:21 obarthel Exp $
* $Id: wchar.h,v 1.3 2005-05-12 13:21:47 obarthel Exp $
*
* :ts=4
*
@@ -162,6 +162,20 @@ extern size_t wcsftime(wchar_t *s, size_t maxsize, const wchar_t *format, const
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard, but it should
be part of ISO/IEC 9899:1999, also known as "C99". */
/****************************************************************************/
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
extern long long wcstoll(const wchar_t *str, wchar_t **ptr, int base);
extern unsigned long long wcstoull(const wchar_t *str, wchar_t **ptr, int base);
#endif /* __STDC_VERSION__ && __STDC_VERSION__ >= 199901L */
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */

View File

@@ -1,5 +1,5 @@
/*
* $Id: wctype.h,v 1.2 2005-01-02 09:07:21 obarthel Exp $
* $Id: wctype.h,v 1.3 2005-05-12 13:21:47 obarthel Exp $
*
* :ts=4
*
@@ -68,6 +68,7 @@ extern int iswlower(wint_t c);
extern int iswupper(wint_t c);
extern int iswspace(wint_t c);
extern int iswblank(wint_t c);
extern wint_t towlower(wint_t c);
extern wint_t towupper(wint_t c);

View File

@@ -0,0 +1,49 @@
/*
* $Id: inttypes_headers.h,v 1.1 2005-05-12 13:21:43 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>
* 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 _INTTYPES_HEADERS_H
#define _INTTYPES_HEADERS_H
/****************************************************************************/
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
#include <inttypes.h>
/****************************************************************************/
#endif /* _INTTYPES_HEADERS_H */

View File

@@ -0,0 +1,51 @@
/*
* $Id: inttypes_imaxabs.c,v 1.1 2005-05-12 13:21:43 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>
* 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 _INTTYPES_HEADERS_H
#include "inttypes_headers.h"
#endif /* _INTTYPES_HEADERS_H */
/****************************************************************************/
intmax_t
imaxabs(intmax_t x)
{
intmax_t result;
if(x < 0)
result = (-x);
else
result = x;
return(result);
}

View File

@@ -0,0 +1,51 @@
/*
* $Id: inttypes_imaxdiv.c,v 1.1 2005-05-12 13:21:43 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>
* 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 _INTTYPES_HEADERS_H
#include "inttypes_headers.h"
#endif /* _INTTYPES_HEADERS_H */
/****************************************************************************/
imaxdiv_t
imaxdiv(intmax_t n,intmax_t d)
{
imaxdiv_t result;
assert( d != 0 );
result.quot = n / d;
result.rem = n % d;
return(result);
}

View File

@@ -0,0 +1,192 @@
/*
* $Id: inttypes_strtoimax.c,v 1.1 2005-05-12 13:21:43 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>
* 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 _STDLIB_NULL_POINTER_CHECK_H
#include "stdlib_null_pointer_check.h"
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
/****************************************************************************/
#ifndef _INTTYPES_HEADERS_H
#include "inttypes_headers.h"
#endif /* _INTTYPES_HEADERS_H */
/****************************************************************************/
intmax_t
strtoimax(const char *str, char **ptr, int base)
{
BOOL is_negative;
intmax_t result = 0;
intmax_t new_sum;
intmax_t sum;
char c;
ENTER();
SHOWSTRING(str);
SHOWPOINTER(ptr);
SHOWVALUE(base);
assert(str != NULL && base >= 0);
#if defined(CHECK_FOR_NULL_POINTERS)
{
if(str == NULL)
{
SHOWMSG("invalid str parameter");
__set_errno(EFAULT);
goto out;
}
}
#endif /* CHECK_FOR_NULL_POINTERS */
if(base < 0)
{
SHOWMSG("invalid base parameter");
__set_errno(ERANGE);
goto out;
}
/* Skip all leading blanks. */
while((c = (*str)) != '\0')
{
if(NOT isspace(c))
break;
str++;
}
/* The first character may be a sign. */
if(c == '-')
{
/* It's a negative number. */
is_negative = TRUE;
str++;
}
else
{
/* It's not going to be negative. */
is_negative = FALSE;
/* But there may be a sign we will choose to
ignore. */
if(c == '+')
str++;
}
c = (*str);
/* There may be a leading '0x' to indicate that what
follows is a hexadecimal number. */
if(base == 0 || base == 16)
{
if((c == '0') && (str[1] == 'x' || str[1] == 'X'))
{
base = 16;
str += 2;
c = (*str);
}
}
/* If we still don't know what base to use and the
next letter to follow is a zero then this is
probably a number in octal notation. */
if(base == 0)
{
if(c == '0')
base = 8;
else
base = 10;
}
sum = 0;
if(1 <= base && base <= 36)
{
while(c != '\0')
{
if('0' <= c && c <= '9')
c -= '0';
else if ('a' <= c)
c -= 'a' - 10;
else if ('A' <= c)
c -= 'A' - 10;
else
break;
/* Ignore invalid numbers. */
if(c >= base)
break;
new_sum = base * sum + c;
if(new_sum < sum) /* overflow? */
{
__set_errno(ERANGE);
if(is_negative)
result = INTMAX_MIN;
else
result = INTMAX_MAX;
goto out;
}
sum = new_sum;
str++;
c = (*str);
}
}
if(is_negative)
result = (-sum);
else
result = sum;
out:
/* If desired, remember where we stopped reading the
number from the buffer. */
if(ptr != NULL)
(*ptr) = (char *)str;
RETURN(result);
return(result);
}

View File

@@ -0,0 +1,189 @@
/*
* $Id: inttypes_strtoumax.c,v 1.1 2005-05-12 13:21:43 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>
* 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 _STDLIB_NULL_POINTER_CHECK_H
#include "stdlib_null_pointer_check.h"
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
/****************************************************************************/
#ifndef _INTTYPES_HEADERS_H
#include "inttypes_headers.h"
#endif /* _INTTYPES_HEADERS_H */
/****************************************************************************/
uintmax_t
strtoumax(const char *str, char **ptr, int base)
{
BOOL is_negative;
uintmax_t result = 0;
uintmax_t new_sum;
uintmax_t sum;
char c;
ENTER();
SHOWSTRING(str);
SHOWPOINTER(ptr);
SHOWVALUE(base);
assert(str != NULL && base >= 0);
#if defined(CHECK_FOR_NULL_POINTERS)
{
if(str == NULL)
{
SHOWMSG("invalid str parameter");
__set_errno(EFAULT);
goto out;
}
}
#endif /* CHECK_FOR_NULL_POINTERS */
if(base < 0)
{
SHOWMSG("invalid base parameter");
__set_errno(ERANGE);
goto out;
}
/* Skip all leading blanks. */
while((c = (*str)) != '\0')
{
if(NOT isspace(c))
break;
str++;
}
/* The first character may be a sign. */
if(c == '-')
{
/* It's a negative number. */
is_negative = TRUE;
str++;
}
else
{
/* It's not going to be negative. */
is_negative = FALSE;
/* But there may be a sign we will choose to
ignore. */
if(c == '+')
str++;
}
c = (*str);
/* There may be a leading '0x' to indicate that what
follows is a hexadecimal number. */
if(base == 0 || base == 16)
{
if((c == '0') && (str[1] == 'x' || str[1] == 'X'))
{
base = 16;
str += 2;
c = (*str);
}
}
/* If we still don't know what base to use and the
next letter to follow is a zero then this is
probably a number in octal notation. */
if(base == 0)
{
if(c == '0')
base = 8;
else
base = 10;
}
sum = 0;
if(1 <= base && base <= 36)
{
while(c != '\0')
{
if('0' <= c && c <= '9')
c -= '0';
else if ('a' <= c)
c -= 'a' - 10;
else if ('A' <= c)
c -= 'A' - 10;
else
break;
/* Ignore invalid numbers. */
if(c >= base)
break;
new_sum = base * sum + c;
if(new_sum < sum) /* overflow? */
{
__set_errno(ERANGE);
result = UINTMAX_MAX;
goto out;
}
sum = new_sum;
str++;
c = (*str);
}
}
if(is_negative)
result = (-sum);
else
result = sum;
out:
/* If desired, remember where we stopped reading the
number from the buffer. */
if(ptr != NULL)
(*ptr) = (char *)str;
RETURN(result);
return(result);
}

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