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

46 Commits

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


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


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


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


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


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


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


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

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

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


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


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


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


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


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

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


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


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

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


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


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


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


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


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


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

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


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


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


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


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


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15100 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-05-04 08:01:47 +00:00
Olaf Barthel
2cf92a6395 - Added the rand() test program.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@15099 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2006-04-18 08:29:46 +00:00
136 changed files with 5494 additions and 4073 deletions

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,30 +0,0 @@
<!DOCTYPE html public "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Notes on building the library</title>
<body>
<h1>Notes on building the library</h1>
<p>In order to build the library, you need a 'C' compiler (obvious, isn't it?) and
a set of header files for the networking API definitions. The networking header
files go into a directory <tt>netinclude</tt> which has to sit in the same directory as
the source code and the <tt>include</tt> directory you find in there. I'm not currently
supplying these header files here. Drop me a line, and I'll take care of that.</p>
<p>The SAS/C flavour (<tt>smakefile</tt>) should get the library built using the "large data"
model. This rules out the use of residentable programs as the startup code I'm
using is very primitive (<tt>startup.o</tt>) and doesn't tinker with A4 relative data
addressing (and how this may be set up).</p>
<p>There are two makefiles for GCC, each a different flavour. There is <tt>GNUmakefile.68k</tt>,
which will build the library for GCC on the 68k platform ("classic" Amiga). This
builds all variants of the library, for large data, small data, resident, whatever
model. It's a lot of work and I don't recommend you do this on a plain 68k machine.
It will literally (!) take hours. The other makefile flavour is for AmigaOS4 using
the PowerPC hosted GCC system (<tt>GNUmakefile.os4</tt>). This builds only the large data
version of the library, but this is usually all you need. Small data support is
currently not implemented but might follow in the future.</p>
</body>
</html>

View File

@@ -1,67 +0,0 @@
<!DOCTYPE html public "-//W3C//DTD HTML 3.2 Final//EN">
<html>
<head>
<title>Notes on using the library with Amiga GCC (68k)</title>
<body>
<h1>Notes on using the library with Amiga GCC (68k)</h1>
<p>You can use the 68k build of clib2 with the existing Amiga 68k ports of the
GNU 'C' compiler. In order to do so, you need to modify the <tt>specs</tt> file which
controls how the compiler(s) and the linker interact, and where the linker
will look for the program startup code and library files. Also, you will need
to copy the header files, startup code and library files to the locations
where the 'C' compiler and linker expects them.</p>
<p>Please read the following description before you follow the instructions. The
changes suggested may have unexpected side-effects!</p>
<p>I have provided a working <tt>specs</tt> file with this documentation file. To switch
over an existing Amiga 68k port of GCC to use clib2, you would proceed as
follows:</p>
<ul>
<li> Locate the directory within which GCC is installed. For example, this
could be within a directory to which the name <tt>ADE:</tt>, <tt>GG:</tt> or <tt>GCC:</tt>
is assigned. For the sake of simplicity, the following notes assume
that the assignment name is <tt>GCC:</tt>
<li> Make backup copies of the following directories and files:
<ol>
<li> <tt>GCC:lib/gcc-lib/amigaos/2.95.3/specs</tt><br>
<p>(NOTE: Check the directory called <tt>GCC:lib/gcc-lib/amigaos</tt>
first; the "2.95.3" quoted above refers to the version,
revision and patch number of the GCC installed and your
version number may differ!)</p>
<li> <tt>GCC:include</tt>
<li> <tt>GCC:lib</tt>
</ol>
<li> Now you can proceed to install clib2; just copy the <tt>include</tt> and <tt>lib</tt>
directories over, like this:
<ol>
<li><kbd>Copy include GCC:include all quiet</kbd>
<li><kbd>Copy lib GCC:lib all quiet</kbd>
</ol>
<li> Finally, replace the <tt>specs</tt> file with the one provided:
<ol>
<li> <kbd>Copy specs GCC:lib/gcc-lib/amigaos/2.95.3/specs</kbd><br>
<p>(NOTE: Check the directory called <tt>GCC:lib/gcc-lib/amigaos</tt>
first; the "2.95.3" quoted above refers to the version,
revision and patch number of the GCC installed and your
version number may differ!)</p>
</ol>
</ul>
<p>Once you have completed these steps you should be able to build programs using
the 68k build of clib2 and you currently installed GCC. Note that these
changes may have the effect of rendering your C++ compiler unusable, so make
sure that you've made backup copies of all files and directories first!</p>
</body>
</html>

View File

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

View File

@@ -1,64 +0,0 @@
*asm:
%{m68000:-mc68010} %{mc68000:-mc68010} %{m68020:-mc68020} %{mc68020:-mc68020} %{m68030:-mc68030} %{m68040:-mc68040} %{m68060:-mc68060} %{m68020-40:-mc68020} %{m68020-60:-mc68020} %{!mc68000:%{!m68000:%{!mc68020:%{!m68020:%{!m68030:%{!m68040:%{!m68060:%{!m68020-40:%{!m68020-60:-mc68010}}}}}}}}} %{msmall-code:-sc}
*asm_final:
*cpp:
%{m68881:-D__HAVE_68881__} %{!ansi:%{m68020:-Dmc68020} %{mc68020:-Dmc68020} %{m68020-40:-Dmc68020} %{m68020-60:-Dmc68020} %{m68030:-Dmc68030} %{m68040:-Dmc68040} %{m68060:-Dmc68060}} %{m68020:-D__mc68020__ -D__mc68020} %{mc68020:-D__mc68020__ -D__mc68020} %{m68020-40:-D__mc68020__ -D__mc68020} %{m68020-60:-D__mc68020__ -D__mc68020} %{m68030:-D__mc68030__ -D__mc68030} %{m68040:-D__mc68040__ -D__mc68040} %{m68060:-D__mc68060__ -D__mc68060}
*cc1:
%{resident:-fbaserel} %{resident32:-fbaserel32} %{msmall-code:-fno-function-cse}
*cc1plus:
*endfile:
*link:
%{fbaserel:%{!resident:-m amiga_bss -fl libb}} %{resident:-m amiga_bss -amiga-datadata-reloc -fl libb} %{fbaserel32:%{!resident32:-m amiga_bss -fl libb32}} %{resident32:-m amiga_bss -amiga-datadata-reloc -fl libb32} %{g:-amiga-debug-hunk} %{m68020:-fl libm020} %{mc68020:-fl libm020} %{m68030:-fl libm020} %{m68040:-fl libm020} %{m68060:-fl libm020} %{m68020-40:-fl libm020} %{m68020-60:-fl libm020}
*lib:
%{mstackextend:-lstack} -lc -lamiga -ldebug -lgcc -lc
*libgcc:
*startfile:
%{resident32:nr32crt0.o%s}%{!resident32:%{fbaserel32:nb32crt0.o%s}%{!fbaserel32:%{resident:nrcrt0.o%s}%{!resident:%{fbaserel:nbcrt0.o%s}%{!fbaserel:ncrt0.o%s}}}}
*switches_need_spaces:
*signed_char:
%{funsigned-char:-D__CHAR_UNSIGNED__}
*predefines:
-Dmc68000 -Damiga -Damigaos -DMCH_AMIGA -DAMIGA -D__chip=__attribute__((__chip__)) -D__saveds=__attribute__((__saveds__)) -D__interrupt=__attribute__((__interrupt__)) -D__stackext=__attribute__((__stackext__)) -D__regargs=__attribute__((__regparm__)) -D__stdargs=__attribute__((__stkparm__)) -D__aligned=__attribute__((__aligned__(4))) -Asystem(amigaos) -Acpu(m68k) -Amachine(m68k)
*cross_compile:
0
*version:
2.95.3
*multilib:
. ;
*multilib_defaults:
*multilib_extra:
*multilib_matches:
*linker:
collect2
*link_command:
%{!fsyntax-only: %{!c:%{!M:%{!MM:%{!E:%{!S:%(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t} %{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}} %{static:} %{L*} %D %o %{!nostdlib:%{!nodefaultlibs:%G %L %G}} %{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*}
}}}}}}

View File

@@ -1,5 +1,5 @@
# #
# $Id: GNUmakefile.68k,v 1.84 2006-04-05 08:39:45 obarthel Exp $ # $Id: GNUmakefile.68k,v 1.96 2006-09-17 17:36:42 obarthel Exp $
# #
# :ts=8 # :ts=8
# #
@@ -388,6 +388,7 @@ C_LIB = \
string_strcspn.o \ string_strcspn.o \
string_strdup.o \ string_strdup.o \
string_strerror.o \ string_strerror.o \
string_strerror_r.o \
string_strlcat.o \ string_strlcat.o \
string_strlcpy.o \ string_strlcpy.o \
string_strlen.o \ string_strlen.o \
@@ -423,6 +424,7 @@ C_LIB = \
time_weekday.o \ time_weekday.o \
uio_readv.o \ uio_readv.o \
uio_writev.o \ uio_writev.o \
ulimit_ulimit.o \
unistd_access.o \ unistd_access.o \
unistd_chdir.o \ unistd_chdir.o \
unistd_chdir_exit.o \ unistd_chdir_exit.o \
@@ -470,6 +472,8 @@ UNIX_LIB = \
getopt_getopt_long.o \ getopt_getopt_long.o \
mount_convertinfo.o \ mount_convertinfo.o \
mount_statfs.o \ mount_statfs.o \
resource_getrlimit.o \
resource_setrlimit.o \
stat_chmod.o \ stat_chmod.o \
stat_fstat.o \ stat_fstat.o \
stat_lstat.o \ stat_lstat.o \
@@ -492,6 +496,8 @@ UNIX_LIB = \
stdlib_alloca_cleanup.o \ stdlib_alloca_cleanup.o \
stdlib_alloca_trap.o \ stdlib_alloca_trap.o \
stdlib_arg.o \ stdlib_arg.o \
stdlib_expand_wildcard.o \
stdlib_expand_wildcard_check.o \
stdlib_getmemstats.o \ stdlib_getmemstats.o \
stdlib_main.o \ stdlib_main.o \
stdlib_main_stub.o \ stdlib_main_stub.o \
@@ -502,6 +508,7 @@ UNIX_LIB = \
stdlib_realloc.o \ stdlib_realloc.o \
stdlib_resetmemstats.o \ stdlib_resetmemstats.o \
stdlib_system.o \ stdlib_system.o \
systeminfo_sysinfo.o \
termios_cfgetispeed.o \ termios_cfgetispeed.o \
termios_cfgetospeed.o \ termios_cfgetospeed.o \
termios_cfmakeraw.o \ termios_cfmakeraw.o \
@@ -514,16 +521,32 @@ UNIX_LIB = \
termios_tcgetattr.o \ termios_tcgetattr.o \
termios_tcsendbreak.o \ termios_tcsendbreak.o \
termios_tcsetattr.o \ termios_tcsetattr.o \
timeb_ftime.o \
uio_readv.o \ uio_readv.o \
uio_writev.o \ uio_writev.o \
unistd_access.o \ unistd_access.o \
unistd_chdir.o \ unistd_chdir.o \
unistd_chdir_exit.o \ unistd_chdir_exit.o \
unistd_chown.o \ unistd_chown.o \
unistd_common_pathconf.o \
unistd_def_path.o \
unistd_def_path_delimiter.o \
unistd_environ.o \
unistd_execl.o \
unistd_execle.o \
unistd_execlp.o \
unistd_execv.o \
unistd_execve.o \
unistd_execve_env_exit.o \
unistd_execve_env_init.o \
unistd_execve_exit.o \
unistd_execvp.o \
unistd_fpathconf.o \
unistd_getcwd.o \ unistd_getcwd.o \
unistd_lchown.o \ unistd_lchown.o \
unistd_link.o \ unistd_link.o \
unistd_lockf.o \ unistd_lockf.o \
unistd_pathconf.o \
unistd_readlink.o \ unistd_readlink.o \
unistd_realpath.o \ unistd_realpath.o \
unistd_restorepathname.o \ unistd_restorepathname.o \
@@ -601,10 +624,16 @@ MATH_LIB = \
math_expm1f.o \ math_expm1f.o \
math_fabs.o \ math_fabs.o \
math_fabsf.o \ math_fabsf.o \
math_fdim.o \
math_fdimf.o \
math_floor.o \ math_floor.o \
math_floorf.o \ math_floorf.o \
math_fma.o \ math_fma.o \
math_fmaf.o \ math_fmaf.o \
math_fmax.o \
math_fmaxf.o \
math_fmin.o \
math_fminf.o \
math_fmod.o \ math_fmod.o \
math_fmodf.o \ math_fmodf.o \
math_fpclassify.o \ math_fpclassify.o \
@@ -788,6 +817,7 @@ NET_LIB = \
socket_get_h_errno.o \ socket_get_h_errno.o \
socket_set_h_errno.o \ socket_set_h_errno.o \
stat_umask.o \ stat_umask.o \
systeminfo_sysinfo.o \
usergroup_crypt.o \ usergroup_crypt.o \
usergroup_data.o \ usergroup_data.o \
usergroup_endgrent.o \ usergroup_endgrent.o \

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,6 @@
#define VERSION 1 #define VERSION 1
#define REVISION 200 #define REVISION 201
#define DATE "17.4.2006" #define DATE "21.9.2006"
#define VERS "amiga.lib 1.200" #define VERS "amiga.lib 1.201"
#define VSTRING "amiga.lib 1.200 (17.4.2006)\r\n" #define VSTRING "amiga.lib 1.201 (21.9.2006)\r\n"
#define VERSTAG "\0$VER: amiga.lib 1.200 (17.4.2006)" #define VERSTAG "\0$VER: amiga.lib 1.201 (21.9.2006)"

View File

@@ -1 +1 @@
200 201

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: amiga_argarrayinit.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $ * $Id: amiga_argarrayinit.c,v 1.6 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -75,9 +75,9 @@ ArgArrayInit(LONG argc, CONST_STRPTR * argv)
goto out; goto out;
for(i = 1 ; i < argc ; i++) for(i = 1 ; i < argc ; i++)
CXLIB_argarray[i-1] = argv[i]; CXLIB_argarray[i-1] = (unsigned char *)argv[i];
result = (unsigned char **)CXLIB_argarray; result = (STRPTR *)CXLIB_argarray;
} }
else if (IconBase != NULL) else if (IconBase != NULL)
{ {
@@ -90,7 +90,7 @@ ArgArrayInit(LONG argc, CONST_STRPTR * argv)
if(CXLIB_disko == NULL) if(CXLIB_disko == NULL)
goto out; goto out;
result = (unsigned char **)CXLIB_disko->do_ToolTypes; result = (STRPTR *)CXLIB_disko->do_ToolTypes;
} }
out: out:

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: amiga_rexxvars.c,v 1.7 2006-01-08 12:04:22 obarthel Exp $ * $Id: amiga_rexxvars.c,v 1.8 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -154,7 +154,7 @@ CheckRexxMsg(struct RexxMsg *message)
LONG LONG
GetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR *buffer_pointer) GetRexxVar(struct RexxMsg *message,STRPTR variable_name,STRPTR *buffer_pointer)
{ {
static UBYTE buffer[256]; static TEXT buffer[256];
LONG result; LONG result;
/* The following uses a function which was added to rexxsyslib.library V45. /* The following uses a function which was added to rexxsyslib.library V45.

View File

@@ -1,6 +1,6 @@
#define VERSION 1 #define VERSION 1
#define REVISION 200 #define REVISION 201
#define DATE "17.4.2006" #define DATE "21.9.2006"
#define VERS "c.lib 1.200" #define VERS "c.lib 1.201"
#define VSTRING "c.lib 1.200 (17.4.2006)\r\n" #define VSTRING "c.lib 1.201 (21.9.2006)\r\n"
#define VERSTAG "\0$VER: c.lib 1.200 (17.4.2006)" #define VERSTAG "\0$VER: c.lib 1.201 (21.9.2006)"

View File

@@ -1 +1 @@
200 201

View File

@@ -1,3 +1,89 @@
c.lib 1.201 (21.9.2006)
- If defined, the local environment variable "DISABLE_COMMANDLINE_WILDCARD_EXPANSION"
will disable expansion of wildcard patterns passed on the command line.
Note that if the variable is not set then the global variable
'__expand_wildcard_args' will provide the defaults for the switch that
controls whether the wildcard expansion takes place. And after the
environment variable has been checked, the '__expand_wildcard_args_check'
function pointer can still be used to override the switch.
- fstat() now works with "NIL:" and "/dev/null", respectively. Not that
it returns much useful information, though.
- The _PC_MAX_INPUT query for file handles now returns the default
buffer size.
- Integrated the new OS4 build makefile collection, as contributed by
Steven Solie. Thank you very much!
- Added the missing strerror_r() function.
- fpathconf() should work with the stdio streams, even in the thread-safe
library version, again.
- Updated m68k specs file in /documentation to contain an own __CLIB2__
define so that existing m68k compilers also have this define. In addition,
the common "-noixemul" option can now also be specified but will do a NOP
so that Makefiles sharing multiple runtime lib setups work without
a warning.
- Added a new callback function which can be used in programs which want
to avoid that the command line wildcard expansion takes place.
- __get_default_file() now dynamically fills in file handles for the
stdin/stdout/stderr streams if it's part of the thread-safe library.
- fpathconf() now checks if the file descriptor is really referring to a file.
- The termios hook entry code could file descriptor's embedded file handle
rather than what the thread safe library had dynamically bound to the
stdin/stdout/stderr streams.
- execve() now finds commands in the current directory again, even if you
omit the leading "./" path name.
- The execve() code that looks for the command/script file now begins by
checking if the file name includes path separators. If it does not,
then the search for the command begins with the resident command list;
otherwise the local directories are checked. The new code also properly
cleans up after itself (a FreeDeviceProc() was missing) and the "PROGDIR:"
lock now always refers to the directory in which the command/script
file is found.
- Added the missing fdim() and fdimf() functions to the build
makefiles. The OS4 build makefile was missing lrint() and
lrintf(). Ouch.
- Added the POSIX exec() family functions, based upon code contributed
by Henning Nielsen Lund. Thank you very much!
- atoll() no longer sets 'errno' directly but now calls __set_errno()
instead.
- Added pathconf(), fpathconf(), sysinfo(), ftime(), ulimit(), getrlimit()
and setrlimit() as contributed by Peter Bengtsson. Thank you very much!
- Added the missing S_ISSOCKET() macro to <sys/stat.h>. Note that this
is not actually a POSIX feature.
- Added fmin(), fminf(), fmax() and fmaxf() to the build makefiles.
Somehow I must have forgotten about them :-(
- select() and waitselect() can now be called without any file descriptor
sets to work with, as some software does which uses select() in place
of sleep().
- The <sys/ioctl.h> header file now includes both <sys/select.h> and
<sys/filio.h> for better compatibility with the TCP/IP stack header
files.
- Added the global variable __expand_wildcard_args which can be used
to disable wildcard pattern expansion of command line parameters when
linked against "libunix.a". Note that this has no effect on the "regular"
libc.a behaviour.
c.lib 1.200 (17.4.2006) c.lib 1.200 (17.4.2006)
- The default break signal mask (SIGBREAKF_CTRL_C) is no longer - The default break signal mask (SIGBREAKF_CTRL_C) is no longer

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: crtbegin.c,v 1.10 2005-03-18 12:38:22 obarthel Exp $ * $Id: crtbegin.c,v 1.11 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -27,6 +27,11 @@ static void (*__DTOR_LIST__[1]) (void) __attribute__(( used, section(".dtors"),
/****************************************************************************/ /****************************************************************************/
void _init(void);
void _fini(void);
/****************************************************************************/
void void
_init(void) _init(void)
{ {

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: debug.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $ * $Id: debug.c,v 1.5 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=8 * :ts=8
* *
@@ -160,7 +160,7 @@ _SHOWVALUE(
{ {
if(__debug_level >= DEBUGLEVEL_Reports) if(__debug_level >= DEBUGLEVEL_Reports)
{ {
char *fmt; const char *fmt;
switch(size) switch(size)
{ {
@@ -207,7 +207,7 @@ _SHOWPOINTER(
{ {
if(__debug_level >= DEBUGLEVEL_Reports) if(__debug_level >= DEBUGLEVEL_Reports)
{ {
char *fmt; const char *fmt;
_INDENT(); _INDENT();

View File

@@ -1,6 +1,6 @@
#define VERSION 1 #define VERSION 1
#define REVISION 200 #define REVISION 201
#define DATE "17.4.2006" #define DATE "21.9.2006"
#define VERS "debug.lib 1.200" #define VERS "debug.lib 1.201"
#define VSTRING "debug.lib 1.200 (17.4.2006)\r\n" #define VSTRING "debug.lib 1.201 (21.9.2006)\r\n"
#define VERSTAG "\0$VER: debug.lib 1.200 (17.4.2006)" #define VERSTAG "\0$VER: debug.lib 1.201 (21.9.2006)"

View File

@@ -1 +1 @@
200 201

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: fcntl_get_default_file.c,v 1.5 2006-01-08 12:04:22 obarthel Exp $ * $Id: fcntl_get_default_file.c,v 1.6 2006-09-12 14:16:44 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -44,8 +44,9 @@
int int
__get_default_file(int file_descriptor,long * file_ptr) __get_default_file(int file_descriptor,long * file_ptr)
{ {
struct fd * fd;
int result = ERROR; int result = ERROR;
struct fd * fd;
BPTR file;
assert( file_descriptor >= 0 && file_descriptor < __num_fd ); assert( file_descriptor >= 0 && file_descriptor < __num_fd );
assert( __fd[file_descriptor] != NULL ); assert( __fd[file_descriptor] != NULL );
@@ -59,11 +60,73 @@ __get_default_file(int file_descriptor,long * file_ptr)
goto out; goto out;
} }
(*file_ptr) = (long)fd->fd_DefaultFile; __fd_unlock(fd);
#if defined(__THREAD_SAFE)
{
/* Check if this file should be dynamically bound to one of the
three standard I/O streams. */
if(FLAG_IS_SET(fd->fd_Flags,FDF_STDIO))
{
switch(fd->fd_DefaultFile)
{
case STDIN_FILENO:
file = Input();
break;
case STDOUT_FILENO:
file = Output();
break;
case STDERR_FILENO:
#if defined(__amigaos4__)
{
file = ErrorOutput();
}
#else
{
struct Process * this_process = (struct Process *)FindTask(NULL);
file = this_process->pr_CES;
}
#endif /* __amigaos4__ */
/* The following is rather controversial; if the standard error stream
is unavailable, we default to reuse the standard output stream. This
is problematic if the standard output stream was redirected and should
not be the same as the standard error output stream. */
if(file == ZERO)
file = Output();
break;
default:
file = ZERO;
break;
}
}
else
{
file = fd->fd_DefaultFile;
}
}
#else
{
file = fd->fd_DefaultFile;
}
#endif /* __THREAD_SAFE */
(*file_ptr) = (long)file;
result = 0; result = 0;
out: out:
__fd_unlock(fd);
return(result); return(result);
} }

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: dos.h,v 1.19 2006-04-05 08:39:46 obarthel Exp $ * $Id: dos.h,v 1.26 2006-09-22 07:54:25 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -470,6 +470,91 @@ extern BOOL __thread_safe_errno_h_errno;
/****************************************************************************/ /****************************************************************************/
/*
* If you link against libunix.a then the default command line processing
* function will attempt to expand every single wildcard parameter on the
* command line into a series of file and directories names matching the
* wildcards. The idea is to provide functionality which on Unix the
* shell is responsible for. On AmigaDOS the shell commands need to perform
* the expansion. However, if you are mixing AmigaDOS commands which expand
* wildcard patterns with a shell that already does the job, you may run into
* big trouble. To disable the expansion, declare the global variable named
* "__expand_wildcard_args" in your code and have it set to FALSE. Because
* the program startup code checks this variable early on, its value must
* be available at that time, i.e. you cannot just set it differently in
* your code lateron because by that time the startup code will have already
* checked it.
*
* Note that the startup code will disable wildcard expansion if the local
* shell environment variable "DISABLE_COMMANDLINE_WILDCARD_EXPANSION"
* is set.
*/
extern BOOL __expand_wildcard_args;
/*
* Similar to the boolean flag value __expand_wildcard_args described above,
* a function can be called which may be used to enable/disable wildcard
* expansion at runtime. The function is undefined by default, which means
* that the __expand_wildcard_args value will take precedence. If you want
* to override the effects of the __expand_wildcard_args variable, declare
* your own check function and then assign it to the
* __expand_wildcard_args_check pointer.
*/
extern BOOL (*__expand_wildcard_args_check)(void);
/****************************************************************************/
/*
* Defaults for path delimiter (":") and the shell search path
* ("/gcc/bin:/SDK/C:/SDK/Local/C:/C:.") as used by the execvp()
* function.
*/
extern char * __default_path_delimiter;
extern char * __default_path;
/****************************************************************************/
/*
* 'environ' is the default environment variable table as used by the execl(),
* execv() and execvp() functions. This needs to be initialized before you
* can use it. The table has the following form:
*
* char ** environ =
* {
* "variable1=value",
* "variable2=value",
* NULL
* };
*
* Note that if you initialize the 'environ' table you will also have to
* provide for a function which prepares its contents in execve() for use
* by the command to be executed. That function is called
* __execve_environ_init(). Should program execution fail, you need to
* clean up after what __execve_environ_init() set up. To do this, call
* __execve_environ_exit(). There are stubs in clib2 for these functions
* which essentially do nothing at all. You will have to implement these
* yourself if you want to use them.
*/
extern char ** environ;
extern int __execve_environ_init(char * const envp[]);
extern void __execve_environ_exit(char * const envp[]);
/****************************************************************************/
/*
* The __execve_exit() function is called by execve() if the command
* executed correctly and control should be returned to the shell. The
* default behaviour is to eventually call exit(). You can, however,
* replace __execve_exit() with a stub which does nothing at all. In
* that case the execve() function will return control to the caller
* instead.
*/
extern void __execve_exit(int return_code);
/****************************************************************************/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: string.h,v 1.11 2006-01-08 12:06:14 obarthel Exp $ * $Id: string.h,v 1.12 2006-09-17 17:36:42 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -106,6 +106,7 @@ extern void *memset(void *ptr, int val, size_t len);
/****************************************************************************/ /****************************************************************************/
extern int strerror_r(int error,char * buffer,size_t buffer_size);
extern char * index(const char *s, int c); extern char * index(const char *s, int c);
extern char * rindex(const char *s, int c); extern char * rindex(const char *s, int c);

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: ioctl.h,v 1.4 2006-01-08 12:06:14 obarthel Exp $ * $Id: ioctl.h,v 1.5 2006-06-21 15:53:55 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -47,6 +47,16 @@
/****************************************************************************/ /****************************************************************************/
#ifndef _SYS_SELECT_H
#include <sys/select.h>
#endif /* _SYS_SELECT_H */
#ifndef _SYS_FILIO_H
#include <sys/filio.h>
#endif /* _SYS_FILIO_H */
/****************************************************************************/
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif /* __cplusplus */ #endif /* __cplusplus */

View File

@@ -0,0 +1,99 @@
/*
* $Id: resource.h,v 1.2 2006-07-28 14:02:32 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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.
*
*****************************************************************************
*
* Documentation and source code for this library, and the most recent library
* build are available from <http://sourceforge.net/projects/clib2>.
*
*****************************************************************************
*/
#ifndef _SYS_RESOURCE_H
#define _SYS_RESOURCE_H
/****************************************************************************/
#ifndef _SYS_TYPES_H
#include <sys/types.h> /* For the definition of rlim_t */
#endif /* _SYS_TYPES_H */
/****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
#define RLIM_INFINITY 0xffffffffUL
#define RLIM_SAVED_MAX (RLIM_INFINITY-1)
#define RLIM_SAVED_CUR (RLIM_INFINITY-2)
/****************************************************************************/
#define RLIM_VMEM 1
#define RLIM_AS RLIM_VMEM
#define RLIM_CORE 2
#define RLIM_CPU 3
#define RLIM_DATA 4
#define RLIM_FSIZE 5
#define RLIM_NOFILE 6
#define RLIM_OFILE RLIMIT_NOFILE
#define RLIM_STACK 7
/****************************************************************************/
struct rlimit
{
rlim_t rlim_cur;
rlim_t rlim_max;
};
/****************************************************************************/
extern int getrlimit(int resource,struct rlimit *rlp);
extern int setrlimit(int resource,const struct rlimit *rlp);
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/****************************************************************************/
#endif /* _SYS_RESOURCE_H */

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stat.h,v 1.9 2006-01-08 12:06:14 obarthel Exp $ * $Id: stat.h,v 1.10 2006-07-28 13:19:12 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -112,6 +112,7 @@ extern "C" {
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) /* symbolic link */ #define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) /* symbolic link */
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) /* fifo */ #define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) /* fifo */
#define S_ISBLK(m) (0) /* block special */ #define S_ISBLK(m) (0) /* block special */
#define S_ISSOCK(m) (((m) & S_IFSOCK) == S_IFSOCK) /* socket */
/****************************************************************************/ /****************************************************************************/

View File

@@ -0,0 +1,84 @@
/*
* $Id: systeminfo.h,v 1.1 2006-07-28 14:02:32 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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.
*
*****************************************************************************
*
* Documentation and source code for this library, and the most recent library
* build are available from <http://sourceforge.net/projects/clib2>.
*
*****************************************************************************
*/
#ifndef _SYS_SYSTEMINFO_H
#define _SYS_SYSTEMINFO_H
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************************************************************/
/* Numbers are picked to be the same as for Solaris */
#define SI_SYSNAME 1
#define SI_HOSTNAME 2
#define SI_RELEASE 3
#define SI_VERSION 4
#define SI_MACHINE 5
#define SI_ARCHITECTURE 6
#define SI_HW_SERIAL 7
#define SI_HW_PROVIDER 8
#define SI_SET_HOSTNAME 258
#define SI_PLATFORM 513
#define SI_ISALIST 514
/****************************************************************************/
extern long sysinfo(int cmd,char *buf,long buflen);
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/****************************************************************************/
#endif /* _SYS_SYSTEMINFO_H */

View File

@@ -0,0 +1,82 @@
/*
* $Id: timeb.h,v 1.3 2006-07-28 14:02:32 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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.
*
*****************************************************************************
*
* Documentation and source code for this library, and the most recent library
* build are available from <http://sourceforge.net/projects/clib2>.
*
*****************************************************************************
*/
#ifndef _SYS_TIMEB_H
#define _SYS_TIMEB_H
/****************************************************************************/
#ifndef _TIME_H
#include <time.h> /* For the definition of time_t */
#endif /* _TIME_H */
/****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
struct timeb
{
time_t time;
unsigned short millitm;
short timezone;
short dstflag;
};
/****************************************************************************/
extern int ftime(struct timeb *);
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/****************************************************************************/
#endif /* _SYS_TIMEB_H */

73
library/include/ulimit.h Normal file
View File

@@ -0,0 +1,73 @@
/*
* $Id: ulimit.h,v 1.2 2006-07-28 14:02:32 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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.
*
*****************************************************************************
*
* Documentation and source code for this library, and the most recent library
* build are available from <http://sourceforge.net/projects/clib2>.
*
*****************************************************************************
*/
#ifndef _ULIMIT_H
#define _ULIMIT_H
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */
/****************************************************************************/
#define UL_GETFSIZE 1
#define UL_SETFSIZE 2
#define UL_GMEMLIM 3
#define UL_GDESLIM 4
/****************************************************************************/
extern long ulimit(int cmd,long newlimit);
/****************************************************************************/
#ifdef __cplusplus
}
#endif /* __cplusplus */
/****************************************************************************/
#endif /* _ULIMIT_H */

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: unistd.h,v 1.18 2006-01-29 09:17:00 obarthel Exp $ * $Id: unistd.h,v 1.21 2006-08-02 06:49:47 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -122,7 +122,12 @@ extern int fdatasync(int file_descriptor);
extern char *ttyname(int); extern char *ttyname(int);
extern int ttyname_r(int file_descriptor,char *name,size_t buflen); extern int ttyname_r(int file_descriptor,char *name,size_t buflen);
extern int ttyname_t(int,char *,size_t); extern int ttyname_t(int,char *,size_t);
extern int execl(const char *path,const char *arg0,...);
extern int execle(const char *path,const char *arg0,...);
extern int execlp(const char *path,const char *arg0,...);
extern int execv(const char *path,char * const argv[]);
extern int execve(const char *path,char *const argv[],char *const envp[]);
extern int execvp(const char *command,char * const argv[]);
extern int profil(unsigned short *buffer, size_t bufSize, size_t offset, unsigned int scale); extern int profil(unsigned short *buffer, size_t bufSize, size_t offset, unsigned int scale);
/****************************************************************************/ /****************************************************************************/
@@ -167,6 +172,42 @@ extern int setuid(uid_t uid);
/****************************************************************************/ /****************************************************************************/
/* The following is for use with pathconf()/fpathconf() */
#define _PC_LINK_MAX 0
#define _PC_MAX_CANON 1
#define _PC_MAX_INPUT 2
#define _PC_NAME_MAX 3
#define _PC_PATH_MAX 4
#define _PC_PIPE_BUF 5
#define _PC_CHOWN_RESTRICTED 6
#define _PC_NO_TRUNC 7
#define _PC_VDISABLE 8
#define _PC_SYNC_IO 9
#define _PC_ASYNC_IO 10
#define _PC_PRIO_IO 11
#define _PC_SOCK_MAXBUF 12
#define _PC_FILESIZEBITS 13
#if 0
#define _PC_REC_INCR_XFER_SIZE 14
#define _PC_REC_MAX_XFER_SIZE 15
#define _PC_REC_MIN_XFER_SIZE 16
#define _PC_REC_XFER_ALIGN 17
#define _PC_ALLOC_SIZE_MIN 18
#endif
#define _PC_SYMLINK_MAX 19
#define _PC_XATTR_EXISTS 20
#define _PC_XATTR_ENABLED 21
/* Amiga Specific */
#define _PC_DOSTYPE 300
/****************************************************************************/
extern long pathconf(const char *path,int name);
extern long fpathconf(int file_descriptor,int name);
/****************************************************************************/
#ifdef __cplusplus #ifdef __cplusplus
} }
#endif /* __cplusplus */ #endif /* __cplusplus */

127
library/libamiga.gmk Executable file
View File

@@ -0,0 +1,127 @@
#
# $Id: libamiga.gmk,v 1.1 2006-09-17 17:37:27 obarthel Exp $
#
# :ts=8
#
# -*- mode: makefile; -*-
##############################################################################
LIBS += \
lib/libamiga.a \
lib/soft-float/libamiga.a \
lib/small-data/libamiga.a \
lib/baserel/libamiga.a \
lib.threadsafe/libamiga.a \
lib.threadsafe/soft-float/libamiga.a \
lib.threadsafe/small-data/libamiga.a \
lib.threadsafe/baserel/libamiga.a
##############################################################################
AMIGA_LIB = \
amiga.lib_rev.o \
amiga_acrypt.o \
amiga_addtof.o \
amiga_argarraydone.o \
amiga_argarrayinit.o \
amiga_argint.o \
amiga_argstring.o \
amiga_beginio.o \
amiga_callhooka.o \
amiga_coercemethod.o \
amiga_createextio.o \
amiga_createport.o \
amiga_createstdio.o \
amiga_createtask.o \
amiga_deleteextio.o \
amiga_deleteport.o \
amiga_deletestdio.o \
amiga_deletetask.o \
amiga_domethod.o \
amiga_dosupermethod.o \
amiga_dotimer.o \
amiga_fastrand.o \
amiga_freeievents.o \
amiga_hotkey.o \
amiga_invertstring.o \
amiga_newlist.o \
amiga_rangerand.o \
amiga_remtof.o \
amiga_rexxvars.o \
amiga_setsuperattrs.o \
amiga_timedelay.o \
amiga_waitbeam.o
##############################################################################
# Dependencies to rebuild if the library version changes
obj/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
obj/soft-float/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
obj/small-data/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
obj/baserel/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
obj.threadsafe/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
obj.threadsafe/soft-float/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
obj.threadsafe/small-data/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
obj.threadsafe/baserel/libamiga/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
##############################################################################
obj/libamiga/%.o : CFLAGS += $(LARGEDATA)
obj/libamiga/%.o : %.c
@$(COMPILE)
obj/soft-float/libamiga/%.o : CFLAGS += $(SOFTFLOAT)
obj/soft-float/libamiga/%.o : %.c
@$(COMPILE)
obj/small-data/libamiga/%.o : CFLAGS += $(SMALLDATA)
obj/small-data/libamiga/%.o : %.c
@$(COMPILE)
obj/baserel/libamiga/%.o : CFLAGS += $(BASEREL)
obj/baserel/libamiga/%.o : %.c
@$(COMPILE)
obj.threadsafe/libamiga/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA)
obj.threadsafe/libamiga/%.o : %.c
@$(COMPILE)
obj.threadsafe/soft-float/libamiga/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT)
obj.threadsafe/soft-float/libamiga/%.o : %.c
@$(COMPILE)
obj.threadsafe/small-data/libamiga/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA)
obj.threadsafe/small-data/libamiga/%.o : %.c
@$(COMPILE)
obj.threadsafe/baserel/libamiga/%.o : CFLAGS += $(THREADSAFE) $(BASEREL)
obj.threadsafe/baserel/libamiga/%.o : %.c
@$(COMPILE)
##############################################################################
lib/libamiga.a : $(addprefix obj/libamiga/,$(AMIGA_LIB))
@$(MAKELIB)
lib/soft-float/libamiga.a : $(addprefix obj/soft-float/libamiga/,$(AMIGA_LIB))
@$(MAKELIB)
lib/small-data/libamiga.a : $(addprefix obj/small-data/libamiga/,$(AMIGA_LIB))
@$(MAKELIB)
lib/baserel/libamiga.a : $(addprefix obj/baserel/libamiga/,$(AMIGA_LIB))
@$(MAKELIB)
lib.threadsafe/libamiga.a : $(addprefix obj.threadsafe/libamiga/,$(AMIGA_LIB))
@$(MAKELIB)
lib.threadsafe/soft-float/libamiga.a : $(addprefix obj.threadsafe/soft-float/libamiga/,$(AMIGA_LIB))
@$(MAKELIB)
lib.threadsafe/small-data/libamiga.a : $(addprefix obj.threadsafe/small-data/libamiga/,$(AMIGA_LIB))
@$(MAKELIB)
lib.threadsafe/baserel/libamiga.a : $(addprefix obj.threadsafe/baserel/libamiga/,$(AMIGA_LIB))
@$(MAKELIB)

436
library/libc.gmk Executable file
View File

@@ -0,0 +1,436 @@
#
# $Id: libc.gmk,v 1.1 2006-09-17 17:37:27 obarthel Exp $
#
# :ts=8
#
# -*- mode: makefile; -*-
##############################################################################
LIBS += \
lib/libc.a \
lib/soft-float/libc.a \
lib/small-data/libc.a \
lib/baserel/libc.a \
lib.threadsafe/libc.a \
lib.threadsafe/soft-float/libc.a \
lib.threadsafe/small-data/libc.a \
lib.threadsafe/baserel/libc.a
##############################################################################
C_LIB := \
c.lib_rev.o \
crtbegin.o \
ctype_isalnum.o \
ctype_isalpha.o \
ctype_isascii.o \
ctype_isblank.o \
ctype_iscntrl.o \
ctype_isdigit.o \
ctype_isgraph.o \
ctype_islower.o \
ctype_isprint.o \
ctype_ispunct.o \
ctype_isspace.o \
ctype_isupper.o \
ctype_isxdigit.o \
ctype_table.o \
ctype_tolower.o \
ctype_toupper.o \
dirent_closedir.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 \
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 \
mount_statfs.o \
profile_profil.o \
signal_checkabort.o \
signal_data.o \
signal_kill.o \
signal_mask.o \
signal_raise.o \
signal_sigaddset.o \
signal_sigblock.o \
signal_sigemptyset.o \
signal_sigmask.o \
signal_signal.o \
signal_sigprocmask.o \
signal_sigsetmask.o \
stat_chmod.o \
stat_convertfileinfo.o \
stat_fchmod.o \
stat_fstat.o \
stat_lstat.o \
stat_mkdir.o \
stat_rmdir.o \
stat_stat.o \
stat_umask.o \
stdio_asprintf.o \
stdio_clearerr.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_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 \
stdio_fputc.o \
stdio_fputs.o \
stdio_fread.o \
stdio_freopen.o \
stdio_fscanf.o \
stdio_fseek.o \
stdio_fseeko.o \
stdio_fsetpos.o \
stdio_ftell.o \
stdio_ftello.o \
stdio_ftrylockfile.o \
stdio_funlockfile.o \
stdio_fwrite.o \
stdio_getc.o \
stdio_getc_unlocked.o \
stdio_getchar.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 \
stdio_setbuf.o \
stdio_setvbuf.o \
stdio_snprintf.o \
stdio_sprintf.o \
stdio_sscanf.o \
stdio_sscanf_hook_entry.o \
stdio_tmpfile.o \
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 \
stdio_vsprintf.o \
stdio_vsprintf_hook_entry.o \
stdlib_abort.o \
stdlib_abs.o \
stdlib_alloca.o \
stdlib_alloca_cleanup.o \
stdlib_alloca_trap.o \
stdlib_assertion_failure.o \
stdlib_atexit.o \
stdlib_atoi.o \
stdlib_atol.o \
stdlib_atoll.o \
stdlib_bsearch.o \
stdlib_calloc.o \
stdlib_checkdetach.o \
stdlib_constructor.o \
stdlib_constructor_begin.o \
stdlib_default_pool_size.o \
stdlib_default_puddle_size.o \
stdlib_destructor.o \
stdlib_detach.o \
stdlib_disablerequesters.o \
stdlib_div.o \
stdlib_divsi3.o \
stdlib_divsi4.o \
stdlib_dosbase.o \
stdlib_exit.o \
stdlib_free.o \
stdlib_getdefstacksize.o \
stdlib_getenv.o \
stdlib_getmemstats.o \
stdlib_getsp.o \
stdlib_get_errno.o \
stdlib_isresident.o \
stdlib_labs.o \
stdlib_llabs.o \
stdlib_ldiv.o \
stdlib_lldiv.o \
stdlib_lib_main.o \
stdlib_lib_startup.o \
stdlib_machine_test.o \
stdlib_main.o \
stdlib_main_stub.o \
stdlib_malloc.o \
stdlib_math.o \
stdlib_mkdtemp.o \
stdlib_mkstemp.o \
stdlib_mktemp.o \
stdlib_modsi3.o \
stdlib_mulsi3.o \
stdlib_never_free.o \
stdlib_osliberror.o \
stdlib_oslibversion.o \
stdlib_priority.o \
stdlib_process_name.o \
stdlib_program_name.o \
stdlib_putenv.o \
stdlib_qsort.o \
stdlib_rand.o \
stdlib_rand_r.o \
stdlib_realloc.o \
stdlib_red_black.o \
stdlib_resetmemstats.o \
stdlib_semaphore.o \
stdlib_setenv.o \
stdlib_setjmp.o \
stdlib_set_errno.o \
stdlib_set_process_window.o \
stdlib_shell_escape.o \
stdlib_showerror.o \
stdlib_srand.o \
stdlib_stackargbytes.o \
stdlib_stackcheck.o \
stdlib_stackoverflow.o \
stdlib_stacksafezone.o \
stdlib_stacksize.o \
stdlib_stack_usage.o \
stdlib_arg.o \
stdlib_stdio_window_spec.o \
stdlib_strtol.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 \
strings_ffs.o \
strings_strcasecmp.o \
strings_strncasecmp.o \
string_bcmp.o \
string_bcopy.o \
string_bzero.o \
string_index.o \
string_memchr.o \
string_memcmp.o \
string_memcpy.o \
string_memmove.o \
string_memset.o \
string_rindex.o \
string_strcat.o \
string_strchr.o \
string_strcmp.o \
string_strcoll.o \
string_strcpy.o \
string_strcspn.o \
string_strdup.o \
string_strerror.o \
string_strerror_r.o \
string_strlcat.o \
string_strlcpy.o \
string_strlen.o \
string_strncat.o \
string_strncmp.o \
string_strncpy.o \
string_strpbrk.o \
string_strrchr.o \
string_strspn.o \
string_strstr.o \
string_strtok.o \
string_strtok_r.o \
string_strxfrm.o \
time_asctime.o \
time_asctime_r.o \
time_clock.o \
time_converttime.o \
time_convert_datestamp.o \
time_convert_time.o \
time_ctime.o \
time_ctime_r.o \
time_data.o \
time_days_per_date.o \
time_gettimeofday.o \
time_gmtime.o \
time_gmtime_r.o \
time_localtime.o \
time_localtime_r.o \
time_mktime.o \
time_numbertostring.o \
time_strftime.o \
time_time.o \
time_weekday.o \
uio_readv.o \
uio_writev.o \
ulimit_ulimit.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_currentpathname.o \
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 \
unistd_getpid.o \
unistd_init_exit.o \
unistd_isatty.o \
unistd_lchown.o \
unistd_link.o \
unistd_lockf.o \
unistd_readlink.o \
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 \
utsname_uname.o \
crtend.o
##############################################################################
# Dependencies to rebuild if the library version changes
obj/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
obj/soft-float/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
obj/small-data/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
obj/baserel/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
obj.threadsafe/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
obj.threadsafe/soft-float/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
obj.threadsafe/small-data/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
obj.threadsafe/baserel/libc/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
##############################################################################
obj/libc/%.o : CFLAGS += $(LARGEDATA)
obj/libc/%.o : %.c
@$(COMPILE)
obj/soft-float/libc/%.o : CFLAGS += $(SOFTFLOAT)
obj/soft-float/libc/%.o : %.c
@$(COMPILE)
obj/small-data/libc/%.o : CFLAGS += $(SMALLDATA)
obj/small-data/libc/%.o : %.c
@$(COMPILE)
obj/baserel/libc/%.o : CFLAGS += $(BASEREL)
obj/baserel/libc/%.o : %.c
@$(COMPILE)
obj.threadsafe/libc/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA)
obj.threadsafe/libc/%.o : %.c
@$(COMPILE)
obj.threadsafe/soft-float/libc/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT)
obj.threadsafe/soft-float/libc/%.o : %.c
@$(COMPILE)
obj.threadsafe/small-data/libc/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA)
obj.threadsafe/small-data/libc/%.o : %.c
@$(COMPILE)
obj.threadsafe/baserel/libc/%.o : CFLAGS += $(THREADSAFE) $(BASEREL)
obj.threadsafe/baserel/libc/%.o : %.c
@$(COMPILE)
##############################################################################
lib/libc.a : $(addprefix obj/libc/,$(C_LIB))
@$(MAKELIB)
lib/soft-float/libc.a : $(addprefix obj/soft-float/libc/,$(C_LIB))
@$(MAKELIB)
lib/small-data/libc.a : $(addprefix obj/small-data/libc/,$(C_LIB))
@$(MAKELIB)
lib/baserel/libc.a : $(addprefix obj/baserel/libc/,$(C_LIB))
@$(MAKELIB)
lib.threadsafe/libc.a : $(addprefix obj.threadsafe/libc/,$(C_LIB))
@$(MAKELIB)
lib.threadsafe/soft-float/libc.a : $(addprefix obj.threadsafe/soft-float/libc/,$(C_LIB))
@$(MAKELIB)
lib.threadsafe/small-data/libc.a : $(addprefix obj.threadsafe/small-data/libc/,$(C_LIB))
@$(MAKELIB)
lib.threadsafe/baserel/libc.a : $(addprefix obj.threadsafe/baserel/libc/,$(C_LIB))
@$(MAKELIB)

125
library/libdebug.gmk Executable file
View File

@@ -0,0 +1,125 @@
#
# $Id: libdebug.gmk,v 1.1 2006-09-17 17:37:27 obarthel Exp $
#
# :ts=8
#
# -*- mode: makefile; -*-
##############################################################################
LIBS += \
lib/libdebug.a \
lib/soft-float/libdebug.a \
lib/small-data/libdebug.a \
lib/baserel/libdebug.a \
lib.threadsafe/libdebug.a \
lib.threadsafe/soft-float/libdebug.a \
lib.threadsafe/small-data/libdebug.a \
lib.threadsafe/baserel/libdebug.a
##############################################################################
DEBUG_LIB = \
debug.lib_rev.o \
debug.o \
debug_cmpstrexec.o \
debug_kcmpstr.o \
debug_kdofmt.o \
debug_kgetc.o \
debug_kgetch1.o \
debug_kgetch2.o \
debug_kgetchar1.o \
debug_kgetchar2.o \
debug_kgetnum1.o \
debug_kgetnum2.o \
debug_kmaygetch.o \
debug_kmaygetchar.o \
debug_kprintf1.o \
debug_kprintf2.o \
debug_kputc.o \
debug_kputch1.o \
debug_kputch2.o \
debug_kputchar1.o \
debug_kputchar2.o \
debug_kputfmt.o \
debug_kputs1.o \
debug_kputs2.o \
debug_kputstr1.o \
debug_kputstr2.o \
debug_kvprintf1.o \
debug_kvprintf2.o \
debug_level.o
##############################################################################
# Dependencies to rebuild if the library version changes
obj/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
obj/soft-float/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
obj/small-data/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
obj/baserel/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
obj.threadsafe/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
obj.threadsafe/soft-float/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
obj.threadsafe/small-data/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
obj.threadsafe/baserel/libdebug/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
##############################################################################
obj/libdebug/%.o : CFLAGS += $(LARGEDATA)
obj/libdebug/%.o : %.c
@$(COMPILE)
obj/soft-float/libdebug/%.o : CFLAGS += $(SOFTFLOAT)
obj/soft-float/libdebug/%.o : %.c
@$(COMPILE)
obj/small-data/libdebug/%.o : CFLAGS += $(SMALLDATA)
obj/small-data/libdebug/%.o : %.c
@$(COMPILE)
obj/baserel/libdebug/%.o : CFLAGS += $(BASEREL)
obj/baserel/libdebug/%.o : %.c
@$(COMPILE)
obj.threadsafe/libdebug/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA)
obj.threadsafe/libdebug/%.o : %.c
@$(COMPILE)
obj.threadsafe/soft-float/libdebug/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT)
obj.threadsafe/soft-float/libdebug/%.o : %.c
@$(COMPILE)
obj.threadsafe/small-data/libdebug/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA)
obj.threadsafe/small-data/libdebug/%.o : %.c
@$(COMPILE)
obj.threadsafe/baserel/libdebug/%.o : CFLAGS += $(THREADSAFE) $(BASEREL)
obj.threadsafe/baserel/libdebug/%.o : %.c
@$(COMPILE)
##############################################################################
lib/libdebug.a : $(addprefix obj/libdebug/,$(DEBUG_LIB))
@$(MAKELIB)
lib/soft-float/libdebug.a : $(addprefix obj/soft-float/libdebug/,$(DEBUG_LIB))
@$(MAKELIB)
lib/small-data/libdebug.a : $(addprefix obj/small-data/libdebug/,$(DEBUG_LIB))
@$(MAKELIB)
lib/baserel/libdebug.a : $(addprefix obj/baserel/libdebug/,$(DEBUG_LIB))
@$(MAKELIB)
lib.threadsafe/libdebug.a : $(addprefix obj.threadsafe/libdebug/,$(DEBUG_LIB))
@$(MAKELIB)
lib.threadsafe/soft-float/libdebug.a : $(addprefix obj.threadsafe/soft-float/libdebug/,$(DEBUG_LIB))
@$(MAKELIB)
lib.threadsafe/small-data/libdebug.a : $(addprefix obj.threadsafe/small-data/libdebug/,$(DEBUG_LIB))
@$(MAKELIB)
lib.threadsafe/baserel/libdebug.a : $(addprefix obj.threadsafe/baserel/libdebug/,$(DEBUG_LIB))
@$(MAKELIB)

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: libgen_basename.c,v 1.4 2006-01-08 12:04:22 obarthel Exp $ * $Id: libgen_basename.c,v 1.5 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -58,7 +58,7 @@ basename(char *path)
if(path == NULL || path[0] == '\0') if(path == NULL || path[0] == '\0')
{ {
result = "."; result = (char *)".";
} }
else else
{ {
@@ -86,7 +86,7 @@ basename(char *path)
} }
else else
{ {
result = "/"; result = (char *)"/";
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: libgen_dirname.c,v 1.4 2006-01-08 12:04:23 obarthel Exp $ * $Id: libgen_dirname.c,v 1.5 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -58,7 +58,7 @@ dirname(char *path)
if(path == NULL || path[0] == '\0') if(path == NULL || path[0] == '\0')
{ {
result = "."; result = (char *)".";
} }
else else
{ {
@@ -71,7 +71,7 @@ dirname(char *path)
if(len > 0) if(len > 0)
{ {
result = "."; result = (char *)".";
for(i = len-1 ; i >= 0 ; i--) for(i = len-1 ; i >= 0 ; i--)
{ {
@@ -87,7 +87,7 @@ dirname(char *path)
} }
else else
{ {
result = "/"; result = (char *)"/";
} }
} }

265
library/libm.gmk Executable file
View File

@@ -0,0 +1,265 @@
#
# $Id: libm.gmk,v 1.1 2006-09-17 17:37:27 obarthel Exp $
#
# :ts=8
#
# -*- mode: makefile; -*-
##############################################################################
LIBS += \
lib/libm.a \
lib/soft-float/libm.a \
lib/small-data/libm.a \
lib/baserel/libm.a \
lib.threadsafe/libm.a \
lib.threadsafe/soft-float/libm.a \
lib.threadsafe/small-data/libm.a \
lib.threadsafe/baserel/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 \
fenv_feclearexcept.o \
fenv_fegetenv.o \
fenv_fegetexceptflag.o \
fenv_fegetround.o \
fenv_feholdexcept.o \
fenv_feraiseexcept.o \
fenv_fesetenv.o \
fenv_fesetexceptflag.o \
fenv_fetestexcept.o \
fenv_fetestround.o \
fenv_feupdateenv.o \
math_acos.o \
math_acosf.o \
math_acosh.o \
math_acoshf.o \
math_asin.o \
math_asinf.o \
math_asinh.o \
math_asinhf.o \
math_atan.o \
math_atan2.o \
math_atan2f.o \
math_atanf.o \
math_atanh.o \
math_atanhf.o \
math_cbrt.o \
math_cbrtf.o \
math_ceil.o \
math_ceilf.o \
math_copysign.o \
math_copysignf.o \
math_cos.o \
math_cosf.o \
math_cosh.o \
math_coshf.o \
math_erf.o \
math_erfc.o \
math_erfcf.o \
math_erff.o \
math_exp.o \
math_exp2.o \
math_exp2f.o \
math_expf.o \
math_expm1.o \
math_expm1f.o \
math_fabs.o \
math_fabsf.o \
math_fdim.o \
math_fdimf.o \
math_floor.o \
math_floorf.o \
math_fma.o \
math_fmaf.o \
math_fmax.o \
math_fmaxf.o \
math_fmin.o \
math_fminf.o \
math_fmod.o \
math_fmodf.o \
math_fpclassify.o \
math_frexp.o \
math_frexpf.o \
math_huge_val.o \
math_huge_valf.o \
math_hypot.o \
math_hypotf.o \
math_ilogb.o \
math_ilogbf.o \
math_inf.o \
math_inff.o \
math_init_exit.o \
math_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_log2.o \
math_log2f.o \
math_logb.o \
math_logbf.o \
math_logf.o \
math_lrint.o \
math_lrintf.o \
math_lround.o \
math_lroundf.o \
math_modf.o \
math_modff.o \
math_nan.o \
math_nanf.o \
math_nearbyint.o \
math_nearbyintf.o \
math_nextafter.o \
math_nextafterf.o \
math_pow.o \
math_powf.o \
math_remainder.o \
math_remainderf.o \
math_remquo.o \
math_remquof.o \
math_rem_pio2f.o \
math_rint.o \
math_rintf.o \
math_round.o \
math_roundf.o \
math_scalbn.o \
math_scalbnf.o \
math_signbit.o \
math_sin.o \
math_sinf.o \
math_sinh.o \
math_sinhf.o \
math_sqrt.o \
math_sqrtf.o \
math_tan.o \
math_tanf.o \
math_tanh.o \
math_tanhf.o \
math_tgamma.o \
math_tgammaf.o \
math_trunc.o \
math_truncf.o \
stdio_asprintf.o \
stdio_flush.o \
stdio_flush_all_files.o \
stdio_fprintf.o \
stdio_fscanf.o \
stdio_printf.o \
stdio_scanf.o \
stdio_snprintf.o \
stdio_sprintf.o \
stdio_sscanf.o \
stdio_vasprintf.o \
stdio_vfprintf.o \
stdio_vfscanf.o \
stdio_vsscanf.o \
stdio_vscanf.o \
stdio_vprintf.o \
stdio_vsnprintf.o \
stdio_vsprintf.o \
stdlib_atof.o \
stdlib_strtod.o \
stdlib_strtof.o \
time_difftime.o
##############################################################################
# Dependencies to rebuild if the library version changes
obj/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
obj/soft-float/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
obj/small-data/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
obj/baserel/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
obj.threadsafe/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
obj.threadsafe/soft-float/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
obj.threadsafe/small-data/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
obj.threadsafe/baserel/libm/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
##############################################################################
obj/libm/%.o : CFLAGS += $(LARGEDATA) -DPPC_FLOATING_POINT_SUPPORT
obj/libm/%.o : %.c
@$(COMPILE)
obj/soft-float/libm/%.o : CFLAGS += $(SOFTFLOAT)
obj/soft-float/libm/%.o : %.c
@$(COMPILE)
obj/small-data/libm/%.o : CFLAGS += $(SMALLDATA) -DPPC_FLOATING_POINT_SUPPORT
obj/small-data/libm/%.o : %.c
@$(COMPILE)
obj/baserel/libm/%.o : CFLAGS += $(BASEREL) -DPPC_FLOATING_POINT_SUPPORT
obj/baserel/libm/%.o : %.c
@$(COMPILE)
obj.threadsafe/libm/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA) -DPPC_FLOATING_POINT_SUPPORT
obj.threadsafe/libm/%.o : %.c
@$(COMPILE)
obj.threadsafe/soft-float/libm/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT)
obj.threadsafe/soft-float/libm/%.o : %.c
@$(COMPILE)
obj.threadsafe/small-data/libm/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA) -DPPC_FLOATING_POINT_SUPPORT
obj.threadsafe/small-data/libm/%.o : %.c
@$(COMPILE)
obj.threadsafe/baserel/libm/%.o : CFLAGS += $(THREADSAFE) $(BASEREL) -DPPC_FLOATING_POINT_SUPPORT
obj.threadsafe/baserel/libm/%.o : %.c
@$(COMPILE)
##############################################################################
lib/libm.a : $(addprefix obj/libm/,$(MATH_LIB))
@$(MAKELIB)
lib/soft-float/libm.a : $(addprefix obj/soft-float/libm/,$(MATH_LIB))
@$(MAKELIB)
lib/small-data/libm.a : $(addprefix obj/small-data/libm/,$(MATH_LIB))
@$(MAKELIB)
lib/baserel/libm.a : $(addprefix obj/baserel/libm/,$(MATH_LIB))
@$(MAKELIB)
lib.threadsafe/libm.a : $(addprefix obj.threadsafe/libm/,$(MATH_LIB))
@$(MAKELIB)
lib.threadsafe/soft-float/libm.a : $(addprefix obj.threadsafe/soft-float/libm/,$(MATH_LIB))
@$(MAKELIB)
lib.threadsafe/small-data/libm.a : $(addprefix obj.threadsafe/small-data/libm/,$(MATH_LIB))
@$(MAKELIB)
lib.threadsafe/baserel/libm.a : $(addprefix obj.threadsafe/baserel/libm/,$(MATH_LIB))
@$(MAKELIB)

174
library/libnet.gmk Executable file
View File

@@ -0,0 +1,174 @@
#
# $Id: libnet.gmk,v 1.1 2006-09-17 17:37:27 obarthel Exp $
#
# :ts=8
#
# -*- mode: makefile; -*-
##############################################################################
LIBS += \
lib/libnet.a \
lib/soft-float/libnet.a \
lib/small-data/libnet.a \
lib/baserel/libnet.a \
lib.threadsafe/libnet.a \
lib.threadsafe/soft-float/libnet.a \
lib.threadsafe/small-data/libnet.a \
lib.threadsafe/baserel/libnet.a
##############################################################################
NET_LIB := \
net.lib_rev.o \
socket_accept.o \
socket_bind.o \
socket_check_daemon.o \
socket_connect.o \
socket_gethostbyaddr.o \
socket_gethostbyname.o \
socket_gethostid.o \
socket_gethostname.o \
socket_getnetbyaddr.o \
socket_getnetbyname.o \
socket_getpeername.o \
socket_getprotobyname.o \
socket_getprotobynumber.o \
socket_getservbyname.o \
socket_getservbyport.o \
socket_getsockname.o \
socket_getsockopt.o \
socket_get_descriptor.o \
socket_inet_addr.o \
socket_inet_aton.o \
socket_inet_lnaof.o \
socket_inet_makeaddr.o \
socket_inet_netof.o \
socket_inet_network.o \
socket_inet_ntoa.o \
socket_init_exit.o \
socket_ioctl.o \
socket_isdaemon.o \
socket_listen.o \
socket_obtain_daemon.o \
socket_recv.o \
socket_recvfrom.o \
socket_recvmsg.o \
socket_select_signal.o \
socket_select.o \
socket_wait_select.o \
socket_send.o \
socket_sendmsg.o \
socket_sendto.o \
socket_setsockopt.o \
socket_shutdown.o \
socket_socket.o \
socket_hook_entry.o \
socket_hstrerror.o \
socket_get_h_errno.o \
socket_set_h_errno.o \
systeminfo_sysinfo.o \
stat_umask.o \
usergroup_crypt.o \
usergroup_data.o \
usergroup_endgrent.o \
usergroup_endpwent.o \
usergroup_getegid.o \
usergroup_geteuid.o \
usergroup_getgid.o \
usergroup_getgrent.o \
usergroup_getgrgid.o \
usergroup_getgrnam.o \
usergroup_getgroups.o \
usergroup_getpass.o \
usergroup_getpwent.o \
usergroup_getpwnam.o \
usergroup_getpwuid.o \
usergroup_getuid.o \
usergroup_initgroups.o \
usergroup_init_exit.o \
usergroup_rootmode.o \
usergroup_setegid.o \
usergroup_seteuid.o \
usergroup_setgid.o \
usergroup_setgrent.o \
usergroup_setgroups.o \
usergroup_setpwent.o \
usergroup_setregid.o \
usergroup_setreuid.o \
usergroup_setsid.o \
usergroup_setuid.o \
utsname_uname.o
##############################################################################
# Dependencies to rebuild if the library version changes
obj/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
obj/soft-float/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
obj/small-data/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
obj/baserel/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
obj.threadsafe/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
obj.threadsafe/soft-float/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
obj.threadsafe/small-data/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
obj.threadsafe/baserel/libnet/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
##############################################################################
obj/libnet/%.o : CFLAGS += $(LARGEDATA) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
obj/libnet/%.o : %.c
@$(COMPILE)
obj/soft-float/libnet/%.o : CFLAGS += $(SOFTFLOAT) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
obj/soft-float/libnet/%.o : %.c
@$(COMPILE)
obj/small-data/libnet/%.o : CFLAGS += $(SMALLDATA) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
obj/small-data/libnet/%.o : %.c
@$(COMPILE)
obj/baserel/libnet/%.o : CFLAGS += $(BASEREL) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
obj/baserel/libnet/%.o : %.c
@$(COMPILE)
obj.threadsafe/libnet/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
obj.threadsafe/libnet/%.o : %.c
@$(COMPILE)
obj.threadsafe/soft-float/libnet/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
obj.threadsafe/soft-float/libnet/%.o : %.c
@$(COMPILE)
obj.threadsafe/small-data/libnet/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
obj.threadsafe/small-data/libnet/%.o : %.c
@$(COMPILE)
obj.threadsafe/baserel/libnet/%.o : CFLAGS += $(THREADSAFE) $(BASEREL) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT
obj.threadsafe/baserel/libnet/%.o : %.c
@$(COMPILE)
##############################################################################
lib/libnet.a : $(addprefix obj/libnet/,$(NET_LIB))
@$(MAKELIB)
lib/soft-float/libnet.a : $(addprefix obj/soft-float/libnet/,$(NET_LIB))
@$(MAKELIB)
lib/small-data/libnet.a : $(addprefix obj/small-data/libnet/,$(NET_LIB))
@$(MAKELIB)
lib/baserel/libnet.a : $(addprefix obj/baserel/libnet/,$(NET_LIB))
@$(MAKELIB)
lib.threadsafe/libnet.a : $(addprefix obj.threadsafe/libnet/,$(NET_LIB))
@$(MAKELIB)
lib.threadsafe/soft-float/libnet.a : $(addprefix obj.threadsafe/soft-float/libnet/,$(NET_LIB))
@$(MAKELIB)
lib.threadsafe/small-data/libnet.a : $(addprefix obj.threadsafe/small-data/libnet/,$(NET_LIB))
@$(MAKELIB)
lib.threadsafe/baserel/libnet.a : $(addprefix obj.threadsafe/baserel/libnet/,$(NET_LIB))
@$(MAKELIB)

132
library/libprofile.gmk Executable file
View File

@@ -0,0 +1,132 @@
#
# $Id: libprofile.gmk,v 1.1 2006-09-17 17:37:27 obarthel Exp $
#
# :ts=8
#
# -*- mode: makefile; -*-
##############################################################################
LIBS += \
lib/libprofile.a \
lib/soft-float/libprofile.a \
lib/small-data/libprofile.a \
lib/baserel/libprofile.a \
lib.threadsafe/libprofile.a \
lib.threadsafe/soft-float/libprofile.a \
lib.threadsafe/small-data/libprofile.a \
lib.threadsafe/baserel/libprofile.a
##############################################################################
PROFILE_LIB = \
profile__mcount.o \
profile_gmon.o \
profile_mcount.o
##############################################################################
# Dependencies to rebuild if the library version changes
obj/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
obj/soft-float/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
obj/small-data/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
obj/baserel/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
obj.threadsafe/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
obj.threadsafe/soft-float/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
obj.threadsafe/small-data/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
obj.threadsafe/baserel/libprofile/profile.lib_rev.o : profile.lib_rev.c profile.lib_rev.h
##############################################################################
obj/libprofile/%.o : AFLAGS += $(LARGEDATA)
obj/libprofile/%.o : %.S
@$(ASSEMBLE)
obj/soft-float/libprofile/%.o : AFLAGS += $(SOFTFLOAT)
obj/soft-float/libprofile/%.o : %.S
@$(ASSEMBLE)
obj/small-data/libprofile/%.o : AFLAGS += $(SMALLDATA)
obj/small-data/libprofile/%.o : %.S
@$(ASSEMBLE)
obj/baserel/libprofile/%.o : AFLAGS += $(BASEREL)
obj/baserel/libprofile/%.o : %.S
@$(ASSEMBLE)
obj.threadsafe/libprofile/%.o : AFLAGS += $(LARGEDATA)
obj.threadsafe/libprofile/%.o : %.S
@$(ASSEMBLE)
obj.threadsafe/soft-float/libprofile/%.o : AFLAGS += $(SOFTFLOAT)
obj.threadsafe/soft-float/libprofile/%.o : %.S
@$(ASSEMBLE)
obj.threadsafe/small-data/libprofile/%.o : AFLAGS += $(SMALLDATA)
obj.threadsafe/small-data/libprofile/%.o : %.S
@$(ASSEMBLE)
obj.threadsafe/baserel/libprofile/%.o : AFLAGS += $(BASEREL)
obj.threadsafe/baserel/libprofile/%.o : %.S
@$(ASSEMBLE)
##############################################################################
obj/libprofile/%.o : CFLAGS += $(LARGEDATA)
obj/libprofile/%.o : %.c
@$(COMPILE)
obj/soft-float/libprofile/%.o : CFLAGS += $(SOFTFLOAT)
obj/soft-float/libprofile/%.o : %.c
@$(COMPILE)
obj/small-data/libprofile/%.o : CFLAGS += $(SMALLDATA)
obj/small-data/libprofile/%.o : %.c
@$(COMPILE)
obj/baserel/libprofile/%.o : CFLAGS += $(BASEREL)
obj/baserel/libprofile/%.o : %.c
@$(COMPILE)
obj.threadsafe/libprofile/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA)
obj.threadsafe/libprofile/%.o : %.c
@$(COMPILE)
obj.threadsafe/soft-float/libprofile/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT)
obj.threadsafe/soft-float/libprofile/%.o : %.c
@$(COMPILE)
obj.threadsafe/small-data/libprofile/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA)
obj.threadsafe/small-data/libprofile/%.o : %.c
@$(COMPILE)
obj.threadsafe/baserel/libprofile/%.o : CFLAGS += $(THREADSAFE) $(BASEREL)
obj.threadsafe/baserel/libprofile/%.o : %.c
@$(COMPILE)
##############################################################################
lib/libprofile.a : $(addprefix obj/libprofile/,$(PROFILE_LIB))
@$(MAKELIB)
lib/soft-float/libprofile.a : $(addprefix obj/soft-float/libprofile/,$(PROFILE_LIB))
@$(MAKELIB)
lib/small-data/libprofile.a : $(addprefix obj/small-data/libprofile/,$(PROFILE_LIB))
@$(MAKELIB)
lib/baserel/libprofile.a : $(addprefix obj/baserel/libprofile/,$(PROFILE_LIB))
@$(MAKELIB)
lib.threadsafe/libprofile.a : $(addprefix obj.threadsafe/libprofile/,$(PROFILE_LIB))
@$(MAKELIB)
lib.threadsafe/soft-float/libprofile.a : $(addprefix obj.threadsafe/soft-float/libprofile/,$(PROFILE_LIB))
@$(MAKELIB)
lib.threadsafe/small-data/libprofile.a : $(addprefix obj.threadsafe/small-data/libprofile/,$(PROFILE_LIB))
@$(MAKELIB)
lib.threadsafe/baserel/libprofile.a : $(addprefix obj.threadsafe/baserel/libprofile/,$(PROFILE_LIB))
@$(MAKELIB)

200
library/libunix.gmk Executable file
View File

@@ -0,0 +1,200 @@
#
# $Id: libunix.gmk,v 1.1 2006-09-17 17:37:27 obarthel Exp $
#
# :ts=8
#
# -*- mode: makefile; -*-
##############################################################################
LIBS += \
lib/libunix.a \
lib/soft-float/libunix.a \
lib/small-data/libunix.a \
lib/baserel/libunix.a \
lib.threadsafe/libunix.a \
lib.threadsafe/soft-float/libunix.a \
lib.threadsafe/small-data/libunix.a \
lib.threadsafe/baserel/libunix.a
##############################################################################
UNIX_LIB := \
unix.lib_rev.o \
dirent_closedir.o \
dirent_rewinddir.o \
dirent_opendir.o \
dirent_readdir.o \
fcntl_creat.o \
fcntl_fcntl.o \
fcntl_open.o \
fcntl_get_default_file.o \
getopt_getopt_long.o \
mount_convertinfo.o \
mount_statfs.o \
resource_getrlimit.o \
resource_setrlimit.o \
stat_chmod.o \
stat_fstat.o \
stat_lstat.o \
stat_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_alloca.o \
stdlib_alloca_cleanup.o \
stdlib_alloca_trap.o \
stdlib_arg.o \
stdlib_expand_wildcard.o \
stdlib_expand_wildcard_check.o \
stdlib_getmemstats.o \
stdlib_main.o \
stdlib_main_stub.o \
stdlib_mkdtemp.o \
stdlib_mkstemp.o \
stdlib_mktemp.o \
stdlib_malloc.o \
stdlib_realloc.o \
stdlib_resetmemstats.o \
stdlib_system.o \
systeminfo_sysinfo.o \
termios_cfgetispeed.o \
termios_cfgetospeed.o \
termios_cfmakeraw.o \
termios_cfsetispeed.o \
termios_cfsetospeed.o \
termios_console_fdhookentry.o \
termios_openserial.o \
termios_tcdrain.o \
termios_tcflow.o \
termios_tcflush.o \
termios_tcgetattr.o \
termios_tcsendbreak.o \
termios_tcsetattr.o \
timeb_ftime.o \
uio_readv.o \
uio_writev.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_common_pathconf.o \
unistd_def_path.o \
unistd_def_path_delimiter.o \
unistd_environ.o \
unistd_execl.o \
unistd_execle.o \
unistd_execlp.o \
unistd_execv.o \
unistd_execve.o \
unistd_execve_env_exit.o \
unistd_execve_env_init.o \
unistd_execve_exit.o \
unistd_execvp.o \
unistd_fpathconf.o \
unistd_getcwd.o \
unistd_lchown.o \
unistd_link.o \
unistd_lockf.o \
unistd_pathconf.o \
unistd_readlink.o \
unistd_realpath.o \
unistd_restorepathname.o \
unistd_setcurrentpath.o \
unistd_strip_double_slash.o \
unistd_symlink.o \
unistd_translatea2u.o \
unistd_translaterel.o \
unistd_translateu2a.o \
unistd_truncate.o \
unistd_ttyname.o \
unistd_ttyname_r.o \
unistd_unix_path_semantics.o \
unistd_unlink.o \
unistd_wildcard_expand.o \
utime_utime.o
##############################################################################
# Dependencies to rebuild if the library version changes
obj/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
obj/soft-float/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
obj/small-data/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
obj/baserel/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
obj.threadsafe/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
obj.threadsafe/soft-float/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
obj.threadsafe/small-data/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
obj.threadsafe/baserel/libunix/unit.lib_rev.o : unit.lib_rev.c unit.lib_rev.h
##############################################################################
obj/libunix/%.o : CFLAGS += $(LARGEDATA) -DUNIX_PATH_SEMANTICS
obj/libunix/%.o : %.c
@$(COMPILE)
obj/soft-float/libunix/%.o : CFLAGS += $(SOFTFLOAT) -DUNIX_PATH_SEMANTICS
obj/soft-float/libunix/%.o : %.c
@$(COMPILE)
obj/small-data/libunix/%.o : CFLAGS += $(SMALLDATA) -DUNIX_PATH_SEMANTICS
obj/small-data/libunix/%.o : %.c
@$(COMPILE)
obj/baserel/libunix/%.o : CFLAGS += $(BASEREL) -DUNIX_PATH_SEMANTICS
obj/baserel/libunix/%.o : %.c
@$(COMPILE)
obj.threadsafe/libunix/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA) -DUNIX_PATH_SEMANTICS
obj.threadsafe/libunix/%.o : %.c
@$(COMPILE)
obj.threadsafe/soft-float/libunix/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT) -DUNIX_PATH_SEMANTICS
obj.threadsafe/soft-float/libunix/%.o : %.c
@$(COMPILE)
obj.threadsafe/small-data/libunix/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA) -DUNIX_PATH_SEMANTICS
obj.threadsafe/small-data/libunix/%.o : %.c
@$(COMPILE)
obj.threadsafe/baserel/libunix/%.o : CFLAGS += $(THREADSAFE) $(BASEREL) -DUNIX_PATH_SEMANTICS
obj.threadsafe/baserel/libunix/%.o : %.c
@$(COMPILE)
##############################################################################
lib/libunix.a : $(addprefix obj/libunix/,$(UNIX_LIB))
@$(MAKELIB)
lib/soft-float/libunix.a : $(addprefix obj/soft-float/libunix/,$(UNIX_LIB))
@$(MAKELIB)
lib/small-data/libunix.a : $(addprefix obj/small-data/libunix/,$(UNIX_LIB))
@$(MAKELIB)
lib/baserel/libunix.a : $(addprefix obj/baserel/libunix/,$(UNIX_LIB))
@$(MAKELIB)
lib.threadsafe/libunix.a : $(addprefix obj.threadsafe/libunix/,$(UNIX_LIB))
@$(MAKELIB)
lib.threadsafe/soft-float/libunix.a : $(addprefix obj.threadsafe/soft-float/libunix/,$(UNIX_LIB))
@$(MAKELIB)
lib.threadsafe/small-data/libunix.a : $(addprefix obj.threadsafe/small-data/libunix/,$(UNIX_LIB))
@$(MAKELIB)
lib.threadsafe/baserel/libunix.a : $(addprefix obj.threadsafe/baserel/libunix/,$(UNIX_LIB))
@$(MAKELIB)

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: locale_localeconv.c,v 1.5 2006-01-08 12:04:23 obarthel Exp $ * $Id: locale_localeconv.c,v 1.6 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -56,16 +56,16 @@ localeconv(void)
/* This makes up the current locale settings from the various /* This makes up the current locale settings from the various
* components in use. * components in use.
*/ */
loc.decimal_point = (numeric_locale != NULL) ? ((char *)numeric_locale->loc_DecimalPoint) : "."; loc.decimal_point = (numeric_locale != NULL) ? ((char *)numeric_locale->loc_DecimalPoint) : (char *)".";
loc.thousands_sep = (numeric_locale != NULL) ? ((char *)numeric_locale->loc_GroupSeparator) : ""; loc.thousands_sep = (numeric_locale != NULL) ? ((char *)numeric_locale->loc_GroupSeparator) : (char *)"";
loc.grouping = (numeric_locale != NULL) ? ((char *)numeric_locale->loc_Grouping) : ""; loc.grouping = (numeric_locale != NULL) ? ((char *)numeric_locale->loc_Grouping) : (char *)"";
loc.int_curr_symbol = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonIntCS) : ""; loc.int_curr_symbol = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonIntCS) : (char *)"";
loc.currency_symbol = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonCS) : ""; loc.currency_symbol = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonCS) : (char *)"";
loc.mon_decimal_point = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonDecimalPoint) : ""; loc.mon_decimal_point = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonDecimalPoint) : (char *)"";
loc.mon_thousands_sep = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonGroupSeparator) : ""; loc.mon_thousands_sep = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonGroupSeparator) : (char *)"";
loc.mon_grouping = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonGrouping) : ""; loc.mon_grouping = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonGrouping) : (char *)"";
loc.positive_sign = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonPositiveSign) : ""; loc.positive_sign = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonPositiveSign) : (char *)"";
loc.negative_sign = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonNegativeSign) : ""; loc.negative_sign = (monetary_locale != NULL) ? ((char *)monetary_locale->loc_MonNegativeSign) : (char *)"";
loc.int_frac_digits = (monetary_locale != NULL) ? monetary_locale->loc_MonIntFracDigits : CHAR_MAX; loc.int_frac_digits = (monetary_locale != NULL) ? monetary_locale->loc_MonIntFracDigits : CHAR_MAX;
loc.frac_digits = (monetary_locale != NULL) ? monetary_locale->loc_MonFracDigits : CHAR_MAX; loc.frac_digits = (monetary_locale != NULL) ? monetary_locale->loc_MonFracDigits : CHAR_MAX;
loc.p_cs_precedes = (monetary_locale != NULL) ? monetary_locale->loc_MonPositiveCSPos : CHAR_MAX; loc.p_cs_precedes = (monetary_locale != NULL) ? monetary_locale->loc_MonPositiveCSPos : CHAR_MAX;

View File

@@ -1,6 +1,6 @@
#define VERSION 1 #define VERSION 1
#define REVISION 200 #define REVISION 201
#define DATE "17.4.2006" #define DATE "21.9.2006"
#define VERS "m.lib 1.200" #define VERS "m.lib 1.201"
#define VSTRING "m.lib 1.200 (17.4.2006)\r\n" #define VSTRING "m.lib 1.201 (21.9.2006)\r\n"
#define VERSTAG "\0$VER: m.lib 1.200 (17.4.2006)" #define VERSTAG "\0$VER: m.lib 1.201 (21.9.2006)"

View File

@@ -1 +1 @@
200 201

View File

@@ -1,6 +1,6 @@
#define VERSION 1 #define VERSION 1
#define REVISION 200 #define REVISION 201
#define DATE "17.4.2006" #define DATE "21.9.2006"
#define VERS "m881.lib 1.200" #define VERS "m881.lib 1.201"
#define VSTRING "m881.lib 1.200 (17.4.2006)\r\n" #define VSTRING "m881.lib 1.201 (21.9.2006)\r\n"
#define VERSTAG "\0$VER: m881.lib 1.200 (17.4.2006)" #define VERSTAG "\0$VER: m881.lib 1.201 (21.9.2006)"

View File

@@ -1 +1 @@
200 201

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: math_atan2.c,v 1.8 2006-01-08 12:04:23 obarthel Exp $ * $Id: math_atan2.c,v 1.9 2006-09-22 07:54:24 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -225,7 +225,7 @@ __atan2(double y,double x)
if( ((ix|((lx|-lx)>>31))>0x7ff00000) || ((iy|((ly|-ly)>>31))>0x7ff00000) ) /* x or y is NaN */ if( ((ix|((lx|-lx)>>31))>0x7ff00000) || ((iy|((ly|-ly)>>31))>0x7ff00000) ) /* x or y is NaN */
return x+y; return x+y;
if((hx-0x3ff00000|lx)==0) if(((hx-0x3ff00000)|lx)==0)
return atan(y); /* x=1.0 */ return atan(y); /* x=1.0 */
m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */ m = ((hy>>31)&1)|((hx>>30)&2); /* 2*sign(x)+sign(y) */

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: math_exp.c,v 1.6 2006-01-08 12:04:23 obarthel Exp $ * $Id: math_exp.c,v 1.8 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -158,8 +158,8 @@ P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */
INLINE STATIC double INLINE STATIC double
__exp(double x) __exp(double x)
{ {
double y,hi,lo,c,t; double y,hi=0,lo=0,c,t;
int k,xsb; int k=0,xsb;
unsigned int hx; unsigned int hx;
GET_HIGH_WORD(hx,x); GET_HIGH_WORD(hx,x);

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: math_kernel_expm1.c,v 1.3 2006-01-08 12:04:23 obarthel Exp $ * $Id: math_kernel_expm1.c,v 1.4 2006-09-22 07:54:24 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -67,7 +67,7 @@ Q5 = -2.01099218183624371326e-07; /* BE8AFDB7 6E09C32D */
double __expm1(double x) double __expm1(double x)
{ {
double y,hi,lo,c,t,e,hxs,hfx,r1; double y,hi,lo,c=0,t,e,hxs,hfx,r1;
int k,xsb; int k,xsb;
unsigned int hx; unsigned int hx;

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: math_sqrt.c,v 1.8 2006-01-08 12:04:24 obarthel Exp $ * $Id: math_sqrt.c,v 1.9 2006-09-22 07:54:24 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -143,7 +143,7 @@ INLINE STATIC double
__sqrt(double x) __sqrt(double x)
{ {
double z; double z;
int sign = (int)0x80000000; unsigned int sign = (unsigned int)0x80000000;
unsigned int r,t1,s1,ix1,q1; unsigned int r,t1,s1,ix1,q1;
int ix0,s0,q,m,t,i; int ix0,s0,q,m,t,i;

View File

@@ -1,6 +1,6 @@
#define VERSION 1 #define VERSION 1
#define REVISION 200 #define REVISION 201
#define DATE "17.4.2006" #define DATE "21.9.2006"
#define VERS "net.lib 1.200" #define VERS "net.lib 1.201"
#define VSTRING "net.lib 1.200 (17.4.2006)\r\n" #define VSTRING "net.lib 1.201 (21.9.2006)\r\n"
#define VERSTAG "\0$VER: net.lib 1.200 (17.4.2006)" #define VERSTAG "\0$VER: net.lib 1.201 (21.9.2006)"

View File

@@ -1 +1 @@
200 201

View File

@@ -0,0 +1,131 @@
/*
* $Id: resource_getrlimit.c,v 1.2 2006-07-28 14:37:27 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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.
*/
#include <sys/resource.h>
/****************************************************************************/
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
int
getrlimit(int resource,struct rlimit *rlp)
{
struct Task *self;
int ret = -1;
rlim_t l;
if(rlp == NULL)
{
__set_errno(EFAULT);
goto out;
}
switch(resource)
{
case RLIM_VMEM:
rlp->rlim_cur = RLIM_INFINITY;
rlp->rlim_max = RLIM_INFINITY;
break;
case RLIM_CORE: /* Coredumps are not supported. */
rlp->rlim_cur = 0;
rlp->rlim_max = 0;
break;
case RLIM_CPU:
rlp->rlim_cur = RLIM_INFINITY;
rlp->rlim_max = RLIM_INFINITY;
break;
case RLIM_DATA:
#if defined(__amigaos4__)
{
l = AvailMem(MEMF_TOTAL|MEMF_VIRTUAL);
}
#else
{
l = AvailMem(MEMF_TOTAL);
}
#endif /* __amigaos4__ */
rlp->rlim_cur = l;
rlp->rlim_max = l;
break;
case RLIM_FSIZE:
rlp->rlim_cur = RLIM_INFINITY; /* Use RLIM_INFINITY in case we have a 64-bit fs. pathconf() can be more precise. */
rlp->rlim_max = RLIM_INFINITY;
break;
case RLIM_NOFILE:
rlp->rlim_cur = RLIM_INFINITY;
rlp->rlim_max = RLIM_INFINITY;
break;
case RLIM_STACK: /* Return current stacksize. */
self = FindTask(NULL);
l = (char *)self->tc_SPUpper - (char *)self->tc_SPLower;
rlp->rlim_cur = l;
rlp->rlim_max = RLIM_INFINITY;
break;
default:
__set_errno(EINVAL);
goto out;
}
ret = 0;
out:
return(ret);
}

View File

@@ -0,0 +1,83 @@
/*
* $Id: resource_setrlimit.c,v 1.2 2006-07-28 14:37:27 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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.
*/
#include <sys/resource.h>
/****************************************************************************/
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
int
setrlimit(int resource,const struct rlimit *rlp)
{
int ret = -1;
if(rlp == NULL)
{
__set_errno(EFAULT);
goto out;
}
switch(resource)
{
case RLIM_VMEM:
case RLIM_CORE:
case RLIM_CPU:
case RLIM_DATA:
case RLIM_FSIZE:
case RLIM_NOFILE:
case RLIM_STACK: /* TODO: See if it might be possible to set the stacksize here. */
__set_errno(EPERM);
goto out;
default:
__set_errno(EINVAL);
goto out;
}
ret = 0;
out:
return(ret);
}

View File

@@ -1,5 +1,5 @@
# #
# $Id: GNUmakefile.os4,v 1.4 2006-01-08 12:06:14 obarthel Exp $ # $Id: GNUmakefile.os4,v 1.5 2006-06-22 09:30:25 obarthel Exp $
# #
# :ts=4 # :ts=4
# #
@@ -40,6 +40,8 @@ CPU =
OPTIONS = -DNDEBUG -mcrt=clib2-ts OPTIONS = -DNDEBUG -mcrt=clib2-ts
OPTIMIZE = -O OPTIMIZE = -O
DEBUG = -ggdb DEBUG = -ggdb
CRTBEGIN = /usr/local/amiga/ppc-amigaos/clib2/lib/crtbegin.o
CRTEND = /usr/local/amiga/ppc-amigaos/clib2/lib/crtend.o
############################################################################### ###############################################################################
@@ -52,7 +54,7 @@ OBJS = \
############################################################################### ###############################################################################
LIBS = -lc -lamiga LIBS = $(CRTBEGIN) -lc -lamiga $(CRTEND)
############################################################################### ###############################################################################

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: socket_ioctl.c,v 1.11 2006-01-08 12:04:24 obarthel Exp $ * $Id: socket_ioctl.c,v 1.12 2006-09-21 09:24:20 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -91,14 +91,14 @@ ioctl(int sockfd,int request, ... /* char *arg */)
{ {
int * option = (int *)param; int * option = (int *)param;
if(request == (unsigned int)FIONBIO) if(request == (int)FIONBIO)
{ {
if((*option) != 0) if((*option) != 0)
SET_FLAG(fd->fd_Flags,FDF_NON_BLOCKING); SET_FLAG(fd->fd_Flags,FDF_NON_BLOCKING);
else else
CLEAR_FLAG(fd->fd_Flags,FDF_NON_BLOCKING); CLEAR_FLAG(fd->fd_Flags,FDF_NON_BLOCKING);
} }
else if (request == (unsigned int)FIOASYNC) else if (request == (int)FIOASYNC)
{ {
if((*option) != 0) if((*option) != 0)
SET_FLAG(fd->fd_Flags,FDF_ASYNC_IO); SET_FLAG(fd->fd_Flags,FDF_ASYNC_IO);

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: socket_select_signal.c,v 1.2 2006-04-05 08:39:45 obarthel Exp $ * $Id: socket_select_signal.c,v 1.3 2006-06-22 09:02:44 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -938,7 +938,7 @@ __select(int num_fds,fd_set *read_fds,fd_set *write_fds,fd_set *except_fds,struc
else else
{ {
/* Wait for file input? */ /* Wait for file input? */
if((total_file_fd > 0) && (timeout == NULL || timeout->tv_secs > 0 || timeout->tv_micro > 0)) if(timeout == NULL || timeout->tv_secs > 0 || timeout->tv_micro > 0)
{ {
struct DateStamp stop_when; struct DateStamp stop_when;
BOOL got_input; BOOL got_input;
@@ -1090,7 +1090,7 @@ __select(int num_fds,fd_set *read_fds,fd_set *write_fds,fd_set *except_fds,struc
} }
else else
{ {
SHOWMSG("no files to worry about"); SHOWMSG("no files and no timeout to worry about");
if(signal_mask != 0) if(signal_mask != 0)
(*signal_mask_ptr) = signal_mask & SetSignal(0,signal_mask & ~__break_signal_mask); (*signal_mask_ptr) = signal_mask & SetSignal(0,signal_mask & ~__break_signal_mask);

View File

@@ -1,6 +1,6 @@
#define VERSION 1 #define VERSION 1
#define REVISION 200 #define REVISION 201
#define DATE "17.4.2006" #define DATE "21.9.2006"
#define VERS "stack.lib 1.200" #define VERS "stack.lib 1.201"
#define VSTRING "stack.lib 1.200 (17.4.2006)\r\n" #define VSTRING "stack.lib 1.201 (21.9.2006)\r\n"
#define VERSTAG "\0$VER: stack.lib 1.200 (17.4.2006)" #define VERSTAG "\0$VER: stack.lib 1.201 (21.9.2006)"

View File

@@ -1 +1 @@
200 201

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stat_convertfileinfo.c,v 1.8 2006-01-08 12:04:24 obarthel Exp $ * $Id: stat_convertfileinfo.c,v 1.9 2006-09-20 19:46:57 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -81,7 +81,7 @@ __convert_file_info_to_stat(
mode = S_IFIFO; mode = S_IFIFO;
else if (fib->fib_DirEntryType == ST_SOCKET) else if (fib->fib_DirEntryType == ST_SOCKET)
mode = S_IFSOCK; mode = S_IFSOCK;
else if (fib->fib_DirEntryType == ST_CONSOLE) else if (fib->fib_DirEntryType == ST_CONSOLE || fib->fib_DirEntryType == ST_NIL)
mode = S_IFCHR; mode = S_IFCHR;
else if (fib->fib_DirEntryType < 0) else if (fib->fib_DirEntryType < 0)
mode = S_IFREG; mode = S_IFREG;

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stat_lstat.c,v 1.13 2006-01-08 12:04:24 obarthel Exp $ * $Id: stat_lstat.c,v 1.14 2006-09-21 09:24:20 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -271,7 +271,7 @@ lstat(const char * path_name, struct stat * st)
time(&mtime); time(&mtime);
st->st_mode = S_IFLNK | S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; st->st_mode = S_IFLNK | S_IRUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
st->st_dev = (ULONG)DeviceProc((STRPTR)path_name); st->st_dev = (dev_t)DeviceProc((STRPTR)path_name);
st->st_size = link_length; st->st_size = link_length;
st->st_mtime = mtime; st->st_mtime = mtime;
st->st_atime = mtime; st->st_atime = mtime;

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdio_fdhookentry.c,v 1.32 2006-01-08 12:04:24 obarthel Exp $ * $Id: stdio_fdhookentry.c,v 1.33 2006-09-20 19:46:57 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -581,7 +581,18 @@ __fd_hook_entry(
fh = BADDR(file); fh = BADDR(file);
if(CANNOT __safe_examine_file_handle(file,fam->fam_FileInfo)) /* Special treatment for "NIL:", for which we make
some stuff up. */
if(fh->fh_Type == NULL)
{
/* Make up some stuff for this stream. */
memset(fam->fam_FileInfo,0,sizeof(*fam->fam_FileInfo));
DateStamp(&fam->fam_FileInfo->fib_Date);
fam->fam_FileInfo->fib_DirEntryType = ST_NIL;
}
else if (CANNOT __safe_examine_file_handle(file,fam->fam_FileInfo))
{ {
LONG error; LONG error;

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdio_filliobreadbuffer.c,v 1.11 2006-01-08 12:04:24 obarthel Exp $ * $Id: stdio_filliobreadbuffer.c,v 1.12 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -66,7 +66,7 @@ __fill_iob_read_buffer(struct iob * file)
SHOWVALUE(file->iob_BufferSize); SHOWVALUE(file->iob_BufferSize);
fam.fam_Action = file_action_read; fam.fam_Action = file_action_read;
fam.fam_Data = file->iob_Buffer; fam.fam_Data = (char *)file->iob_Buffer;
fam.fam_Size = file->iob_BufferSize; fam.fam_Size = file->iob_BufferSize;
assert( file->iob_Action != NULL ); assert( file->iob_Action != NULL );

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdio_flushiobwritebuffer.c,v 1.8 2006-01-08 12:04:24 obarthel Exp $ * $Id: stdio_flushiobwritebuffer.c,v 1.9 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -70,7 +70,7 @@ __flush_iob_write_buffer(struct iob * file)
SHOWMSG("calling the hook"); SHOWMSG("calling the hook");
fam.fam_Action = file_action_write; fam.fam_Action = file_action_write;
fam.fam_Data = file->iob_Buffer; fam.fam_Data = (char *)file->iob_Buffer;
fam.fam_Size = file->iob_BufferWriteBytes; fam.fam_Size = file->iob_BufferWriteBytes;
assert( file->iob_Action != NULL ); assert( file->iob_Action != NULL );

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdio_headers.h,v 1.25 2006-01-08 12:04:24 obarthel Exp $ * $Id: stdio_headers.h,v 1.26 2006-09-20 19:46:57 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -168,6 +168,9 @@ struct iob;
/* The same for a console stream. */ /* The same for a console stream. */
#define ST_CONSOLE (20050402) #define ST_CONSOLE (20050402)
/* And something for NIL: */
#define ST_NIL (20060920)
/****************************************************************************/ /****************************************************************************/
/* Operations that can be performed by the file action function. */ /* Operations that can be performed by the file action function. */

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdio_initializeiob.c,v 1.5 2006-01-08 12:04:24 obarthel Exp $ * $Id: stdio_initializeiob.c,v 1.6 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -54,7 +54,7 @@ __initialize_iob(
memset(iob,0,sizeof(*iob)); memset(iob,0,sizeof(*iob));
iob->iob_CustomBuffer = custom_buffer; iob->iob_CustomBuffer = custom_buffer;
iob->iob_Buffer = buffer; iob->iob_Buffer = (UBYTE *)buffer;
iob->iob_BufferSize = buffer_size; iob->iob_BufferSize = buffer_size;
iob->iob_Descriptor = file_descriptor; iob->iob_Descriptor = file_descriptor;
iob->iob_SlotNumber = slot_number; iob->iob_SlotNumber = slot_number;

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdio_locksemaphorename.c,v 1.4 2006-01-08 12:04:24 obarthel Exp $ * $Id: stdio_locksemaphorename.c,v 1.5 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -37,4 +37,4 @@
/****************************************************************************/ /****************************************************************************/
char * NOCOMMON __file_lock_semaphore_name = "Advisory File Locking"; char * NOCOMMON __file_lock_semaphore_name = (char *)"Advisory File Locking";

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdio_setvbuf.c,v 1.9 2006-01-08 12:04:25 obarthel Exp $ * $Id: stdio_setvbuf.c,v 1.10 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -154,7 +154,7 @@ setvbuf(FILE *stream,char *buf,int bufmode,size_t size)
if(bufmode == IOBF_BUFFER_MODE_NONE) if(bufmode == IOBF_BUFFER_MODE_NONE)
{ {
/* Use the default buffer, which is one byte in size. */ /* Use the default buffer, which is one byte in size. */
new_buffer = &file->iob_SingleByte; new_buffer = (char *)&file->iob_SingleByte;
size = 1; size = 1;
} }
else else
@@ -162,7 +162,7 @@ setvbuf(FILE *stream,char *buf,int bufmode,size_t size)
/* Replace the old buffer. */ /* Replace the old buffer. */
if(buf != NULL) if(buf != NULL)
{ {
new_buffer = (UBYTE *)buf; new_buffer = (char *)buf;
} }
else else
{ {
@@ -178,7 +178,7 @@ setvbuf(FILE *stream,char *buf,int bufmode,size_t size)
assert( file->iob_BufferReadBytes == 0 ); assert( file->iob_BufferReadBytes == 0 );
assert( file->iob_BufferWriteBytes == 0 ); assert( file->iob_BufferWriteBytes == 0 );
file->iob_Buffer = new_buffer; file->iob_Buffer = (UBYTE *)new_buffer;
file->iob_BufferSize = size; file->iob_BufferSize = size;
file->iob_Flags &= ~IOBF_BUFFER_MODE; file->iob_Flags &= ~IOBF_BUFFER_MODE;

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdio_vfprintf.c,v 1.21 2006-01-08 12:04:25 obarthel Exp $ * $Id: stdio_vfprintf.c,v 1.22 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -1329,7 +1329,7 @@ vfprintf(FILE * stream,const char * format, va_list arg)
#if defined(NDEBUG) #if defined(NDEBUG)
{ {
if(output_buffer == NULL) if(output_buffer == NULL)
output_buffer = ""; output_buffer = (char *)"";
} }
#else #else
{ {
@@ -1504,13 +1504,13 @@ vfprintf(FILE * stream,const char * format, va_list arg)
/* Get ready to prefix a sign character, if required. */ /* Get ready to prefix a sign character, if required. */
if(FLAG_IS_SET(format_flags,FORMATF_IsNegative)) if(FLAG_IS_SET(format_flags,FORMATF_IsNegative))
prefix = "-"; prefix = (char *)"-";
else if (FLAG_IS_SET(format_flags,FORMATF_ProduceSign)) else if (FLAG_IS_SET(format_flags,FORMATF_ProduceSign))
prefix = "+"; prefix = (char *)"+";
else if (FLAG_IS_SET(format_flags,FORMATF_ProduceSpace)) else if (FLAG_IS_SET(format_flags,FORMATF_ProduceSpace))
prefix = " "; prefix = (char *)" ";
else if (FLAG_IS_SET(format_flags,FORMATF_ZeroPrefix)) else if (FLAG_IS_SET(format_flags,FORMATF_ZeroPrefix))
prefix = "0"; prefix = (char *)"0";
else else
prefix = NULL; prefix = NULL;

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdlib_arg.c,v 1.10 2006-01-08 12:04:25 obarthel Exp $ * $Id: stdlib_arg.c,v 1.14 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -121,16 +121,32 @@ ARG_CONSTRUCTOR(arg_init)
/* Shell startup? */ /* Shell startup? */
if(__WBenchMsg == NULL) if(__WBenchMsg == NULL)
{ {
BOOL expand_wildcard_args;
size_t number_of_arguments; size_t number_of_arguments;
unsigned char * arg_str; unsigned char * arg_str;
size_t arg_len; size_t arg_len;
unsigned char * command_line; unsigned char * command_line;
unsigned char * str; unsigned char * str;
/* Check if wildcard expansion of command line parameters
should be enabled. Note that the callback function, if
declared, takes precedence over the global variable. */
#if defined(UNIX_PATH_SEMANTICS)
{
expand_wildcard_args = __expand_wildcard_args;
if(FindVar("DISABLE_COMMANDLINE_WILDCARD_EXPANSION",LV_VAR) != NULL)
expand_wildcard_args = FALSE;
if(__expand_wildcard_args_check != NULL)
expand_wildcard_args = (*__expand_wildcard_args_check)();
}
#endif /* UNIX_PATH_SEMANTICS */
/* Get the shell parameter string and find out /* Get the shell parameter string and find out
how long it is, stripping a trailing line how long it is, stripping a trailing line
feed and blank spaces if necessary. */ feed and blank spaces if necessary. */
arg_str = GetArgStr(); arg_str = (unsigned char *)GetArgStr();
while(is_space(*arg_str)) while(is_space(*arg_str))
arg_str++; arg_str++;
@@ -234,16 +250,16 @@ ARG_CONSTRUCTOR(arg_init)
#if defined(UNIX_PATH_SEMANTICS) #if defined(UNIX_PATH_SEMANTICS)
{ {
/* If necessary, indicate that this parameter was quoted. */ /* If necessary, indicate that this parameter was quoted. */
if(__wildcard_quote_parameter(__argc) < 0) if(expand_wildcard_args && __wildcard_quote_parameter(__argc) < 0)
goto out; goto out;
} }
#endif /* UNIX_PATH_SEMANTICS */ #endif /* UNIX_PATH_SEMANTICS */
str++; str++;
__argv[__argc++] = str; __argv[__argc++] = (char *)str;
arg = str; arg = (char *)str;
/* Process the quoted string. */ /* Process the quoted string. */
while((*str) != '\0' && NOT is_final_quote_character(str)) while((*str) != '\0' && NOT is_final_quote_character(str))
@@ -298,7 +314,7 @@ ARG_CONSTRUCTOR(arg_init)
} }
else else
{ {
__argv[__argc++] = str; __argv[__argc++] = (char *)str;
while((*str) != '\0' && NOT is_space(*str)) while((*str) != '\0' && NOT is_space(*str))
str++; str++;
@@ -319,7 +335,7 @@ ARG_CONSTRUCTOR(arg_init)
{ {
/* If necessary, expand wildcard patterns found in the command /* If necessary, expand wildcard patterns found in the command
line string into file and directory names. */ line string into file and directory names. */
if(__wildcard_expand_init() < 0) if(expand_wildcard_args && __wildcard_expand_init() < 0)
goto out; goto out;
} }
#endif /* UNIX_PATH_SEMANTICS */ #endif /* UNIX_PATH_SEMANTICS */

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdlib_atoll.c,v 1.2 2006-01-08 12:04:25 obarthel Exp $ * $Id: stdlib_atoll.c,v 1.3 2006-08-02 08:00:27 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -58,7 +58,7 @@ atoll(const char *str)
{ {
if(str == NULL) if(str == NULL)
{ {
errno = EFAULT; __set_errno(EFAULT);
goto out; goto out;
} }
} }

View File

@@ -0,0 +1,40 @@
/*
* $Id: stdlib_expand_wildcard.c,v 1.1 2006-05-04 08:01:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
BOOL __expand_wildcard_args = TRUE;

View File

@@ -0,0 +1,40 @@
/*
* $Id: stdlib_expand_wildcard_check.c,v 1.1 2006-09-15 06:58:16 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
BOOL (*__expand_wildcard_args_check)(void);

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdlib_main.c,v 1.30 2006-01-08 12:04:25 obarthel Exp $ * $Id: stdlib_main.c,v 1.32 2006-09-22 09:19:07 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -347,7 +347,7 @@ _main(void)
/* Try to open the libraries we need to proceed. */ /* Try to open the libraries we need to proceed. */
if(CANNOT open_libraries()) if(CANNOT open_libraries())
{ {
char * error_message; const char * error_message;
/* If available, use the error message provided by the client. */ /* If available, use the error message provided by the client. */
error_message = __minimum_os_lib_error; error_message = __minimum_os_lib_error;
@@ -501,7 +501,7 @@ _main(void)
tags[i]. ti_Tag = NP_StackSize; tags[i]. ti_Tag = NP_StackSize;
tags[i++]. ti_Data = stack_size; tags[i++]. ti_Data = stack_size;
tags[i]. ti_Tag = NP_Name; tags[i]. ti_Tag = NP_Name;
tags[i++]. ti_Data = (ULONG)(__process_name != NULL ? __process_name : FilePart(program_name)); tags[i++]. ti_Data = (ULONG)(__process_name != NULL ? __process_name : (char *)FilePart(program_name));
tags[i]. ti_Tag = NP_CommandName; tags[i]. ti_Tag = NP_CommandName;
tags[i++]. ti_Data = (ULONG)FilePart(program_name); tags[i++]. ti_Data = (ULONG)FilePart(program_name);
tags[i]. ti_Tag = NP_Cli; tags[i]. ti_Tag = NP_Cli;

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdlib_setenv.c,v 1.10 2006-01-08 12:04:26 obarthel Exp $ * $Id: stdlib_setenv.c,v 1.11 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -220,7 +220,7 @@ setenv(const char *original_name, const char *original_value, int overwrite)
} }
if(value == NULL) if(value == NULL)
value = ""; value = (char *)"";
SHOWSTRING(name); SHOWSTRING(name);
SHOWSTRING(value); SHOWSTRING(value);

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: string_memcpy.c,v 1.7 2006-01-08 12:04:26 obarthel Exp $ * $Id: string_memcpy.c,v 1.8 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -312,8 +312,8 @@ __memcpy(unsigned char * to,unsigned char * from,size_t len)
len -= sizeof(long); len -= sizeof(long);
} }
to = (char *)_to; to = (unsigned char *)_to;
from = (char *)_from; from = (unsigned char *)_from;
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: string_memmove.c,v 1.6 2006-01-08 12:04:26 obarthel Exp $ * $Id: string_memmove.c,v 1.7 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -447,8 +447,8 @@ __memmove(unsigned char * to,unsigned char * from,size_t len)
len -= sizeof(long); len -= sizeof(long);
} }
to = (char *)_to; to = (unsigned char *)_to;
from = (char *)_from; from = (unsigned char *)_from;
} }
} }
@@ -549,8 +549,8 @@ __memmove(unsigned char * to,unsigned char * from,size_t len)
len -= sizeof(long); len -= sizeof(long);
} }
to = (char *)_to; to = (unsigned char *)_to;
from = (char *)_from; from = (unsigned char *)_from;
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: string_memset.c,v 1.7 2006-01-08 12:04:26 obarthel Exp $ * $Id: string_memset.c,v 1.8 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -116,7 +116,7 @@ __memset(unsigned char * to,unsigned char value,size_t len)
len -= sizeof(long); len -= sizeof(long);
} }
to = (char *)_to; to = (unsigned char *)_to;
} }
} }

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: string_strerror.c,v 1.3 2006-01-08 12:04:27 obarthel Exp $ * $Id: string_strerror.c,v 1.4 2006-09-17 17:36:42 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -37,123 +37,27 @@
/****************************************************************************/ /****************************************************************************/
static char * error_table[EILSEQ - EPERM + 1] = static void
number_to_string(int number,char * string,size_t string_size)
{ {
"Operation not permitted",
"No such file or directory",
"No such process",
"Interrupted system call",
"Input/output error",
"Device not configured",
"Argument list too long",
"Exec format error",
"Bad file descriptor",
"No child processes",
"Resource deadlock avoided",
"Cannot allocate memory",
"Permission denied",
"Bad address",
"Block device required",
"Device busy",
"File exists",
"Cross-device link",
"Operation not supported by device",
"Not a directory",
"Is a directory",
"Invalid argument",
"Too many open files in system",
"Too many open files",
"Inappropriate ioctl for device",
"Text file busy",
"File too large",
"No space left on device",
"Illegal seek",
"Read-only file system",
"Too many links",
"Broken pipe",
"Numerical argument out of domain",
"Result too large",
"Resource temporarily unavailable",
"Operation now in progress",
"Operation already in progress",
"Socket operation on non-socket",
"Destination address required",
"Message too long",
"Protocol wrong type for socket",
"Protocol not available",
"Protocol not supported",
"Socket type not supported",
"Operation not supported on socket",
"Protocol family not supported",
"Address family not supported by protocol family",
"Address already in use",
"Can't assign requested address",
"Network is down",
"Network is unreachable",
"Network dropped connection on reset",
"Software caused connection abort",
"Connection reset by peer",
"No buffer space available",
"Socket is already connected",
"Socket is not connected",
"Can't send after socket shutdown",
"Too many references: can't splice",
"Connection timed out",
"Connection refused",
"Too many levels of symbolic links",
"File name too long",
"Host is down",
"No route to host",
"Directory not empty",
"Too many processes",
"Too many users",
"Disc quota exceeded",
"Stale NFS file handle",
"Too many levels of remote in path",
"RPC struct is bad",
"RPC version wrong",
"RPC program not available",
"Program version wrong",
"Bad procedure for program",
"No locks available",
"Function not implemented",
"Inappropriate file type or format",
"Authentication error",
"Need authenticator",
"Identifier removed",
"No message of the desired type.",
"Value too large to be stored in data type.",
"Encoding error detected"
};
/****************************************************************************/
char *
strerror(int error_number)
{
char * result;
if(error_number < EPERM || error_number > EILSEQ)
{
static char error_buffer[80];
char number[30];
char *s = number;
int is_negative = 0; int is_negative = 0;
char * s = string;
unsigned int n; unsigned int n;
int i,len,c; size_t i,len;
char c;
/* We convert the error number into in an unsigned /* We convert the error number into in an unsigned
integer, so that numbers such as 0x80000000 integer, so that numbers such as 0x80000000
can come out of the conversion. */ can come out of the conversion. */
if(error_number < 0) if(number < 0)
{ {
is_negative = 1; is_negative = 1;
n = (-error_number); n = (-number);
} }
else else
{ {
n = error_number; n = number;
} }
/* Convert the error number into a string of digits. */ /* Convert the error number into a string of digits. */
@@ -165,10 +69,10 @@ strerror(int error_number)
n /= 10; n /= 10;
len++; len++;
} }
while(n > 0 && len < (int)sizeof(number)-1); while(n > 0 && len < string_size-1);
/* Add the sign, if necessary. */ /* Add the sign, if necessary. */
if(is_negative && len < (int)sizeof(number)-1) if(is_negative && len < string_size-1)
{ {
(*s++) = '-'; (*s++) = '-';
len++; len++;
@@ -179,20 +83,32 @@ strerror(int error_number)
/* Reverse the string in place. */ /* Reverse the string in place. */
for(i = 0 ; i < len / 2 ; i++) for(i = 0 ; i < len / 2 ; i++)
{ {
c = number[len-1-i]; c = string[len-1-i];
number[len-1-i] = number[i]; string[len-1-i] = string[i];
number[i] = c; string[i] = c;
}
} }
strcpy(error_buffer,"Unknown error "); /****************************************************************************/
strcat(error_buffer,number);
result = error_buffer; char *
} strerror(int error_number)
else
{ {
result = error_table[error_number - EPERM]; static char error_message[80];
/* NOTE: We are making the assumption that if strerror_r() fails, it
will fail only because the error code is unknown, and not
because the size of the supplied buffer is too small. */
if(strerror_r(error_number,error_message,sizeof(error_message)) != 0)
{
char number[20];
number_to_string(error_number,number,sizeof(number));
strcpy(error_message,"Unknown error ");
strcat(error_message,number);
} }
return(result); return(error_message);
} }

164
library/string_strerror_r.c Normal file
View File

@@ -0,0 +1,164 @@
/*
* $Id: string_strerror_r.c,v 1.2 2006-09-21 09:24:20 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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 _STRING_HEADERS_H
#include "string_headers.h"
#endif /* _STRING_HEADERS_H */
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
static const char * error_table[EILSEQ - EPERM + 1] =
{
"Operation not permitted",
"No such file or directory",
"No such process",
"Interrupted system call",
"Input/output error",
"Device not configured",
"Argument list too long",
"Exec format error",
"Bad file descriptor",
"No child processes",
"Resource deadlock avoided",
"Cannot allocate memory",
"Permission denied",
"Bad address",
"Block device required",
"Device busy",
"File exists",
"Cross-device link",
"Operation not supported by device",
"Not a directory",
"Is a directory",
"Invalid argument",
"Too many open files in system",
"Too many open files",
"Inappropriate ioctl for device",
"Text file busy",
"File too large",
"No space left on device",
"Illegal seek",
"Read-only file system",
"Too many links",
"Broken pipe",
"Numerical argument out of domain",
"Result too large",
"Resource temporarily unavailable",
"Operation now in progress",
"Operation already in progress",
"Socket operation on non-socket",
"Destination address required",
"Message too long",
"Protocol wrong type for socket",
"Protocol not available",
"Protocol not supported",
"Socket type not supported",
"Operation not supported on socket",
"Protocol family not supported",
"Address family not supported by protocol family",
"Address already in use",
"Can't assign requested address",
"Network is down",
"Network is unreachable",
"Network dropped connection on reset",
"Software caused connection abort",
"Connection reset by peer",
"No buffer space available",
"Socket is already connected",
"Socket is not connected",
"Can't send after socket shutdown",
"Too many references: can't splice",
"Connection timed out",
"Connection refused",
"Too many levels of symbolic links",
"File name too long",
"Host is down",
"No route to host",
"Directory not empty",
"Too many processes",
"Too many users",
"Disc quota exceeded",
"Stale NFS file handle",
"Too many levels of remote in path",
"RPC struct is bad",
"RPC version wrong",
"RPC program not available",
"Program version wrong",
"Bad procedure for program",
"No locks available",
"Function not implemented",
"Inappropriate file type or format",
"Authentication error",
"Need authenticator",
"Identifier removed",
"No message of the desired type.",
"Value too large to be stored in data type.",
"Encoding error detected"
};
/****************************************************************************/
int
strerror_r(int number,char * buffer,size_t buffer_size)
{
int result = -1;
const char * str;
size_t len;
if(number < EPERM || number > EILSEQ)
{
__set_errno(EINVAL);
goto out;
}
str = error_table[number - EPERM];
len = strlen(str);
if(len >= buffer_size)
{
__set_errno(ERANGE);
goto out;
}
strcpy(buffer,str);
result = 0;
out:
return(result);
}

View File

@@ -0,0 +1,214 @@
/*
* $Id: systeminfo_sysinfo.c,v 1.5 2006-09-22 09:02:51 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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.
*/
#include <sys/systeminfo.h>
#include <sys/utsname.h>
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
#if defined(SOCKET_SUPPORT) && !defined(_SOCKET_HEADERS_H)
#include "socket_headers.h"
#endif /* SOCKET_SUPPORT && !_SOCKET_HEADERS_H */
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
#if !defined(__amigaos4__)
#include <exec/execbase.h>
/* The order here is important. */
static const struct { UWORD flags; char *name; } isanames[] =
{
/* Apparently there is a 060 card sans FPU, but how to detect it without a LineF exception?
Perhaps I should see if I can find my old MC68060 manual. */
{AFF_68060|AFF_68060, "68060+fpu060 "},
{AFF_68060|AFF_68060, "68060+fpu "},
{AFF_68040|AFF_FPU40, "68040+fpu040 "},
{AFF_68040|AFF_68882, "68040+fpu "},
{AFF_68040|AFF_68881, "68040+fpu "},
{AFF_68040, "68040 "},
{AFF_68030|AFF_68882, "68030+fpu "},
{AFF_68030|AFF_68881, "68030+fpu "},
{AFF_68020|AFF_68882, "68020+fpu "},
{AFF_68020|AFF_68881, "68020+fpu "},
{AFF_68030, "68030 "},
{AFF_68020, "68020 "},
{AFF_68010, "68010 "},
};
#endif /* !__amigaos4__ */
/****************************************************************************/
long
sysinfo(int cmd,char *buf,long buflen)
{
struct utsname info;
long ret = -1;
ENTER();
if(buf == NULL)
{
__set_errno(EFAULT);
goto out;
}
uname(&info); /* Most of the keys use this. */
switch(cmd)
{
case SI_SYSNAME:
ret = strlcpy(buf,info.sysname,buflen);
break;
case SI_HOSTNAME:
ret = strlcpy(buf,info.nodename,buflen);
break;
case SI_SET_HOSTNAME:
__set_errno(EPERM);
goto out;
case SI_RELEASE:
ret = strlcpy(buf,info.release,buflen);
break;
case SI_VERSION:
ret = strlcpy(buf,info.version,buflen);
break;
case SI_MACHINE:
ret = strlcpy(buf,"amiga",buflen);
break;
case SI_ARCHITECTURE:
ret = strlcpy(buf,info.machine,buflen);
break;
case SI_ISALIST:
#if defined(__amigaos4__)
{
/* Solaris uses "ppc" as the isa name, but gcc uses powerpc. "ppc+altivec" follows the
convention of specifying isa+ext from Solaris on SPARC machines. This way of implementing
SI_ISALIST seemed like a good idea at the time. */
const char * s;
uint32 vecu;
GetCPUInfoTags(GCIT_VectorUnit,&vecu,TAG_DONE);
if(vecu == VECTORTYPE_ALTIVEC || vecu == VECTORTYPE_VMX) /* AltiVec and VMX are the same. */
s = "ppc+altivec ppc common";
else
s = "ppc common";
ret = strlcpy(buf,s,buflen);
}
#else
{
UWORD attention_flags = ((struct ExecBase *)SysBase)->AttnFlags;
char * last_added = "";
size_t i;
ret = 0;
strlcpy(buf,"",buflen);
for(i = 0 ; i < NUM_ENTRIES(isanames) ; i++)
{
if((attention_flags & isanames[i].flags) == isanames[i].flags)
{
if(strcmp(last_added,isanames[i].name) != SAME)
{
ret += strlcat(buf,isanames[i].name,buflen);
last_added = isanames[i].name;
}
}
}
ret += strlcat(buf,"68000",buflen);
}
#endif
break;
case SI_PLATFORM: /* TODO: Figure out a good way of checking this. */
ret = strlcpy(buf,"Amiga,Unknown",buflen);
break;
case SI_HW_PROVIDER: /* TODO: Figure out a good way of checking this. */
ret = strlcpy(buf,"Unknown",buflen);
break;
case SI_HW_SERIAL:
#if defined(SOCKET_SUPPORT)
{
ret = snprintf(buf,buflen,"%lu",gethostid());
}
#else
{
ret = strlcpy(buf,"0",buflen);
}
#endif
break;
default:
__set_errno(EINVAL);
goto out;
}
out:
RETURN(ret);
return(ret);
}

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: termios_console_fdhookentry.c,v 1.2 2006-01-08 12:04:27 obarthel Exp $ * $Id: termios_console_fdhookentry.c,v 1.4 2006-09-20 19:46:57 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -328,7 +328,7 @@ __termios_console_hook(
} }
else else
{ {
if(WaitForChar(fd->fd_DefaultFile,100000*tios->c_cc[VTIME])) if(WaitForChar(file,100000*tios->c_cc[VTIME]))
result = Read(file,fam->fam_Data,fam->fam_Size); result = Read(file,fam->fam_Data,fam->fam_Size);
} }
} }
@@ -589,7 +589,18 @@ __termios_console_hook(
fh = BADDR(file); fh = BADDR(file);
if(CANNOT __safe_examine_file_handle(file,fam->fam_FileInfo)) /* Special treatment for "NIL:", for which we make
some stuff up. */
if(fh->fh_Type == NULL)
{
/* Make up some stuff for this stream. */
memset(fam->fam_FileInfo,0,sizeof(*fam->fam_FileInfo));
DateStamp(&fam->fam_FileInfo->fib_Date);
fam->fam_FileInfo->fib_DirEntryType = ST_NIL;
}
else if (CANNOT __safe_examine_file_handle(file,fam->fam_FileInfo))
{ {
LONG error; LONG error;

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: time_asctime_r.c,v 1.8 2006-01-08 12:04:27 obarthel Exp $ * $Id: time_asctime_r.c,v 1.9 2006-09-22 09:02:51 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -177,7 +177,7 @@ __asctime_r(const struct tm *tm,char * buffer,size_t buffer_size)
} }
else else
{ {
result = ""; result = (char *)"";
} }
out: out:

78
library/timeb_ftime.c Normal file
View File

@@ -0,0 +1,78 @@
/*
* $Id: timeb_ftime.c,v 1.2 2006-07-28 14:37:27 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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.
*/
#include <sys/timeb.h>
#include <sys/time.h>
/****************************************************************************/
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
int
ftime(struct timeb *tb)
{
struct timeval tv;
struct timezone tz;
int retval = -1;
ENTER();
if(tb == NULL)
{
__set_errno(EFAULT);
goto out;
}
if(gettimeofday(&tv,&tz) != 0)
goto out;
tb->time = tv.tv_sec;
tb->millitm = tv.tv_usec / 1000;
tb->timezone = tz.tz_minuteswest;
tb->dstflag = tz.tz_dsttime;
retval = 0;
out:
RETURN(retval);
return(retval);
}

94
library/ulimit_ulimit.c Normal file
View File

@@ -0,0 +1,94 @@
/*
* $Id: ulimit_ulimit.c,v 1.2 2006-07-28 14:37:27 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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.
*/
#include <ulimit.h>
/****************************************************************************/
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
long
ulimit(int cmd,long newlim)
{
long ret = -1;
switch(cmd)
{
case UL_GETFSIZE:
/* Maximum number of 512-byte blocks in a file. Largefile aware programs should not use ulimit() anyway. */
ret = (0x7fffffffL >> 9) - 1L; /* Max Filesize/512 - 1 */
break;
case UL_GMEMLIM: /* Which flags are appropriate for AvailMem()? */
#if defined(__amigaos4__)
{
ret = AvailMem(MEMF_TOTAL|MEMF_VIRTUAL);
}
#else
{
ret = AvailMem(MEMF_ANY|MEMF_LARGEST); /* Too conservative? */
}
#endif
break;
case UL_GDESLIM: /* No limit, so we just return a reasonably large value. */
ret = 1024;
break;
case UL_SETFSIZE: /* Not supported */
__set_errno(EPERM);
goto out;
default:
__set_errno(EINVAL);
goto out;
}
out:
return(ret);
}

View File

@@ -0,0 +1,266 @@
/*
* $Id: unistd_common_pathconf.c,v 1.3 2006-09-21 09:24:20 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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 _UNISTD_HEADERS_H
#include "unistd_headers.h"
#endif /* _UNISTD_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
#ifndef ID_CON
#define ID_CON (0x434F4E00L) /* 'CON\0' */
#endif /* ID_CON */
#ifndef ID_RAWCON
#define ID_RAWCON (0x52415700L) /* 'RAW\0' */
#endif /* ID_RAWCON */
/****************************************************************************/
struct fs_info
{
ULONG dos_type;
int name_max,path_max;
int link_max,symlink_max;
int file_size_bits;
};
/****************************************************************************/
static const struct fs_info fs_info[] =
{
{ID_NO_DISK_PRESENT, 0, 0, 0, 0, 0}, /* No disk */
{ID_UNREADABLE_DISK, 0, 0, 0, 0, 0}, /* BAD\0 */
{ID_BUSY_DISK, 0, 0, 0, 0, 0}, /* BUSY - Diskchange in progress? */
{ID_CON, 0, 0, 0, 0, 0}, /* CON\0 - Not really a disk. */
{ID_RAWCON, 0, 0, 0, 0, 0}, /* RAW\0 - Not really a disk. */
{ID_NOT_REALLY_DOS, 0, 0, 0, 0, 0}, /* Unreadable disk. */
{ID_KICKSTART_DISK, 0, 0, 0, 0, 0}, /* Kickstart disk. */
{ID_MSDOS_DISK, 8, 31, 0, 0, 30}, /* MSDOS - TODO: Check what the limits really are. */
{ID_DOS_DISK, 30, 254, -1, -1, 31}, /* DOS\0 = OFS */
{ID_FFS_DISK, 30, 254, -1, -1, 31}, /* DOS\1 = FFS */
{ID_INTER_DOS_DISK, 30, 254, -1, -1, 31}, /* DOS\2 = OFS INTL */
{ID_INTER_FFS_DISK, 30, 254, -1, -1, 31}, /* DOS\3 = FFS INTL */
{ID_FASTDIR_DOS_DISK, 30, 254, -1, -1, 31}, /* DOS\4 = OFS DC */
{ID_FASTDIR_FFS_DISK, 30, 254, -1, -1, 31}, /* DOS\5 = FFS DC */
{ID_LONGNAME_DOS_DISK, 107, 8192, -1, -1, 31}, /* DOS\6 = OFS LONGNAMES */
{ID_LONGNAME_FFS_DISK, 107, 8192, -1, -1, 63}, /* DOS\7 = FFS LONGNAMES */
{0x53465300, 107, 8192, 0, -1, 31}, /* SFS\0 = Smartfilesystem */
{0x53465302, 107, 8192, 0, -1, 63}, /* SFS\2 = Smartfilesystem2 */
{0x50465300, 30, 254, 0, 0, 31}, /* PFS\0 = Professional File System */
{0x46545854, 0, 0, 0, 0, 0}, /* FTXT - Textclip device */
};
/****************************************************************************/
long
__pathconf(struct MsgPort *port,int name)
{
ULONG dos_type = 0;
size_t fs_index = 0;
long ret = -1;
if(port != NULL)
{
D_S(struct InfoData,id);
if(DoPkt(port,ACTION_IS_FILESYSTEM,0,0,0,0,0) == DOSFALSE) /* Not a filesystem. */
{
SHOWMSG("Not a filesystem.");
__set_errno(ENODEV);
goto out;
}
if(DoPkt(port,ACTION_DISK_INFO,MKBADDR(id),0,0,0,0)) /* Managed to obtain disk info. */
{
size_t i;
switch(id->id_DiskState)
{
case ID_VALIDATING: /* Consider this an error condition? */
case ID_WRITE_PROTECTED:
case ID_VALIDATED:
dos_type = id->id_DiskType;
/* See if we know anything about this file-system */
for(i = 0 ; i < NUM_ENTRIES(fs_info) ; i++)
{
if(dos_type == fs_info[i].dos_type)
{
fs_index = i;
break;
}
}
break;
default:
SHOWMSG("Invalid disk state.");
break;
}
}
else
{
/* Treat error as no disk present by having default fs_index=0 */
SHOWMSG("Unable to query DISK_INFO");
}
}
switch(name)
{
case _PC_FILESIZEBITS:
ret = fs_info[fs_index].file_size_bits;
break;
case _PC_LINK_MAX:
ret = fs_info[fs_index].link_max;
break;
case _PC_MAX_CANON:
ret = 510; /* I could not find any documentation regarding this. */
break;
case _PC_MAX_INPUT:
#if defined(__amigaos4__)
{
uint32 Bufsize;
struct TagItem TagList[2]=
{
{DC_FHBufferR, (ULONG)&Bufsize},
{TAG_DONE, 0}
};
DosControl(TagList);
ret = Bufsize; /* Default is 2048 bytes. */
}
#else
{
ret = 204;
}
#endif /* __amigaos4__ */
break;
case _PC_NAME_MAX:
ret = fs_info[fs_index].name_max;
break;
case _PC_PATH_MAX:
ret = fs_info[fs_index].path_max;
break;
case _PC_PIPE_BUF:
ret = 512; /* One buffer. The PIPE: device usually has 8 of these. */
break;
case _PC_XATTR_ENABLED:
ret = 0;
break;
case _PC_XATTR_EXISTS:
ret = 0;
break;
case _PC_CHOWN_RESTRICTED:
ret = 0;
break;
case _PC_NO_TRUNC:
ret = 0;
break;
case _PC_VDISABLE:
ret = 0; /* TODO: Implement this in the termios emulation. */
break;
case _PC_ASYNC_IO:
ret = 0;
break;
case _PC_PRIO_IO:
ret = 0;
break;
case _PC_SYNC_IO:
ret = 0;
break;
case _PC_SYMLINK_MAX:
ret = fs_info[fs_index].symlink_max;
break;
case _PC_DOSTYPE: /* Amiga-specific extension. */
ret = dos_type;
break;
default:
SHOWMSG("Invalid option name");
__set_errno(EINVAL);
goto out;
}
out:
return(ret);
}

40
library/unistd_def_path.c Normal file
View File

@@ -0,0 +1,40 @@
/*
* $Id: unistd_def_path.c,v 1.3 2006-09-22 09:02:51 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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 _UNISTD_HEADERS_H
#include "unistd_headers.h"
#endif /* _UNISTD_HEADERS_H */
/****************************************************************************/
char * __default_path = (char *)"/gcc/bin:/SDK/C:/SDK/Local/C:/C:.";

View File

@@ -0,0 +1,40 @@
/*
* $Id: unistd_def_path_delimiter.c,v 1.3 2006-09-22 09:02:51 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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 _UNISTD_HEADERS_H
#include "unistd_headers.h"
#endif /* _UNISTD_HEADERS_H */
/****************************************************************************/
char * __default_path_delimiter = (char *)":";

40
library/unistd_environ.c Normal file
View File

@@ -0,0 +1,40 @@
/*
* $Id: unistd_environ.c,v 1.1 2006-08-02 08:00:27 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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 _UNISTD_HEADERS_H
#include "unistd_headers.h"
#endif /* _UNISTD_HEADERS_H */
/****************************************************************************/
char ** environ;

98
library/unistd_execl.c Normal file
View File

@@ -0,0 +1,98 @@
/*
* $Id: unistd_execl.c,v 1.3 2006-08-02 08:00:27 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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 _UNISTD_HEADERS_H
#include "unistd_headers.h"
#endif /* _UNISTD_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
int
execl(const char *path, const char *arg0, ...)
{
char ** argv = NULL;
int result = -1;
size_t argc = 0;
va_list args;
/* If there are any, count the number of arguments supplied */
if(arg0 != NULL)
{
argc = 1;
va_start(args,arg0);
while(va_arg(args,const char *) != NULL)
argc++;
va_end(args);
}
/* Allocate enough memory for the entire argument list
plus the terminating NULL */
argv = (char **)malloc(sizeof(*argv) * (argc + 1));
if(argv == NULL)
{
__set_errno(ENOMEM);
goto out;
}
if(argc > 0)
{
size_t i;
argv[0] = (char *)arg0;
va_start(args,arg0);
for(i = 1 ; i < argc ; i++)
argv[i] = va_arg(args,char *);
va_end(args);
}
argv[argc] = NULL;
result = execve(path,(char * const *)argv,environ);
out:
if(argv != NULL)
free(argv);
return(result);
}

104
library/unistd_execle.c Normal file
View File

@@ -0,0 +1,104 @@
/*
* $Id: unistd_execle.c,v 1.3 2006-08-02 06:49:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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 _UNISTD_HEADERS_H
#include "unistd_headers.h"
#endif /* _UNISTD_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
int
execle(const char *path, const char *arg0, ...)
{
char ** argv = NULL;
int result = -1;
size_t argc = 0;
va_list args;
char **envp;
/* If there are any, count the number of arguments supplied */
if(arg0 != NULL)
{
argc = 1;
va_start(args,arg0);
while(va_arg(args,const char *) != NULL)
argc++;
va_end(args);
}
/* Allocate enough memory for the entire argument list
plus the terminating NULL */
argv = (char **)malloc(sizeof(*argv) * (argc + 1));
if(argv == NULL)
{
__set_errno(ENOMEM);
goto out;
}
va_start(args,arg0);
if(argc > 0)
{
size_t i;
argv[0] = (char *)arg0;
for(i = 1 ; i < argc ; i++)
argv[i] = va_arg(args,char *);
/* Skip the NULL terminator */
(void)va_arg(args, char **);
}
envp = va_arg(args, char **);
va_end(args);
argv[argc] = NULL;
result = execve(path,(char * const *)argv, envp );
out:
if(argv != NULL)
free(argv);
return(result);
}

98
library/unistd_execlp.c Normal file
View File

@@ -0,0 +1,98 @@
/*
* $Id: unistd_execlp.c,v 1.2 2006-08-02 06:49:47 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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 _UNISTD_HEADERS_H
#include "unistd_headers.h"
#endif /* _UNISTD_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
int
execlp(const char *path, const char *arg0, ...)
{
char ** argv = NULL;
int result = -1;
size_t argc = 0;
va_list args;
/* If there are any, count the number of arguments supplied */
if(arg0 != NULL)
{
argc = 1;
va_start(args,arg0);
while(va_arg(args,const char *) != NULL)
argc++;
va_end(args);
}
/* Allocate enough memory for the entire argument list
plus the terminating NULL */
argv = (char **)malloc(sizeof(*argv) * (argc + 1));
if(argv == NULL)
{
__set_errno(ENOMEM);
goto out;
}
if(argc > 0)
{
size_t i;
argv[0] = (char *)arg0;
va_start(args,arg0);
for(i = 1 ; i < argc ; i++)
argv[i] = va_arg(args,char *);
va_end(args);
}
argv[argc] = NULL;
result = execvp(path,(char * const *)argv);
out:
if(argv != NULL)
free(argv);
return(result);
}

52
library/unistd_execv.c Normal file
View File

@@ -0,0 +1,52 @@
/*
* $Id: unistd_execv.c,v 1.3 2006-08-02 08:00:27 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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 _UNISTD_HEADERS_H
#include "unistd_headers.h"
#endif /* _UNISTD_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
int
execv(const char *path,char * const argv[])
{
int result;
result = execve(path,argv,environ);
return(result);
}

844
library/unistd_execve.c Normal file
View File

@@ -0,0 +1,844 @@
/*
* $Id: unistd_execve.c,v 1.12 2006-08-14 14:08:06 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2006 by Olaf Barthel <olsen (at) 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 _UNISTD_HEADERS_H
#include "unistd_headers.h"
#endif /* _UNISTD_HEADERS_H */
/****************************************************************************/
#include <dos/stdio.h>
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
/* This gets handed around when trying to locate a program or a script
interpreter which knows how to do the job. */
struct program_info
{
struct Segment * resident_command; /* If not NULL, points to a valid
resident command */
BPTR home_dir; /* If not ZERO refers to the directory
in which the command to be executed
can be found */
BPTR segment_list; /* If not ZERO refers to a command
loaded into memory */
char * program_name; /* Points to the name of the command */
char * interpreter_name; /* If not NULL the name of the command
interpreter to use */
char * interpreter_args; /* If not NULL these are additional
arguments to be passedto the command
interpreter */
};
/****************************************************************************/
/* Try to find a resident command by name; returns a pointer to the Segment
data structure ready to use, or NULL if none could be found */
static struct Segment *
find_resident_command(const char * command_name)
{
struct Segment * seg;
/* This must be done under Forbid() since dos.library does not have
a more sophisticated arbitration method for this yet... */
Forbid();
seg = FindSegment((STRPTR)command_name,NULL,FALSE);
if(seg == NULL)
seg = FindSegment((STRPTR)command_name,NULL,TRUE);
if(seg != NULL)
{
/* Check if that's a disabled command or something else. */
if((seg->seg_UC < 0) && ((seg->seg_UC > CMD_INTERNAL) || (seg->seg_UC <= CMD_DISABLED)))
{
seg = NULL;
}
else
{
/* Unless it's a built-in command, mark it as having another user. */
if(seg->seg_UC >= 0)
seg->seg_UC++;
}
}
Permit();
return(seg);
}
/****************************************************************************/
/* Try to read the first line of a script file */
static int
get_first_script_line(const char * path,char ** line_ptr)
{
BPTR script_file;
int result = -1;
char * script_line = NULL;
size_t script_line_size = 0;
size_t script_line_length = 0;
LONG c;
(*line_ptr) = NULL;
script_file = Open((STRPTR)path,MODE_OLDFILE);
if(script_file == ZERO)
{
__set_errno(__translate_io_error_to_errno(IoErr()));
goto out;
}
/* Make file access a little more robust. */
SetVBuf(script_file,NULL,BUF_LINE,1024);
while((c = FGetC(script_file)) != -1)
{
/* Still enough room in the buffer? We always reserve
enough memory for the next character and a NUL
to terminate the string with. */
if(script_line_length + 2 > script_line_size)
{
char * new_script_line;
/* Give the user a chance to bail out. */
if(__check_abort_enabled && (SetSignal(0,0) & __break_signal_mask) != 0)
{
__set_errno(EAGAIN);
goto out;
}
/* Always reserve a little more memory than needed,
and one extra byte to allow us to to NUL-terminate
the string. */
new_script_line = realloc(script_line,script_line_length + 10);
if(new_script_line == NULL)
{
__set_errno(ENOMEM);
goto out;
}
script_line = new_script_line;
script_line_size = script_line_length + 10;
}
/* Stop when we hit a line feed or an unprintable character */
if(c == '\n' || (c < ' ' && c != '\t' && c != '\r') || (c >= 128 && c < 160))
break;
script_line[script_line_length++] = c;
}
/* Check for read error */
if(c == -1 && IoErr() != 0)
{
__set_errno(__translate_io_error_to_errno(IoErr()));
goto out;
}
/* Provide for NUL-termination. */
if(script_line_size > 0)
{
/* Also strip all trailing blank spaces; that includes
line feed and carriage return characters. */
while(script_line_length > 0 && isspace(script_line[script_line_length-1]))
script_line_length--;
}
script_line[script_line_length] = '\0';
(*line_ptr) = script_line;
script_line = NULL;
result = 0;
out:
if(script_file != ZERO)
Close(script_file);
if(script_line != NULL)
free(script_line);
return(result);
}
/****************************************************************************/
/* Release all the resources allocate for the program information, as produced
by the find_command() function */
static void
free_program_info(struct program_info * pi)
{
if(pi != NULL)
{
if(pi->resident_command != NULL)
{
Forbid();
if(pi->resident_command->seg_UC > 0)
pi->resident_command->seg_UC--;
Permit();
}
if(pi->interpreter_name != NULL)
free(pi->interpreter_name);
if(pi->interpreter_args != NULL)
free(pi->interpreter_args);
if(pi->program_name != NULL)
free(pi->program_name);
if(pi->home_dir != ZERO)
UnLock(pi->home_dir);
if(pi->segment_list != ZERO)
UnLoadSeg(pi->segment_list);
free(pi);
}
}
/****************************************************************************/
/* Try to find a command by name; if the name does not include any path
information, try the dos.library resident command list */
static int
find_command(const char * path,struct program_info ** result_ptr)
{
struct name_translation_info nti;
char * script_line = NULL;
struct program_info * pi;
APTR old_window_ptr;
int result = -1;
BPTR old_dir = ZERO;
BOOL found_path_separator;
BOOL found_volume_separator;
const char *p;
int error;
char c;
(*result_ptr) = NULL;
/* We don't want to show any dos.library requesters while we
are looking */
old_window_ptr = __set_process_window((APTR)-1);
pi = malloc(sizeof(*pi));
if(pi == NULL)
{
__set_errno(ENOMEM);
goto out;
}
memset(pi,0,sizeof(*pi));
error = __translate_unix_to_amiga_path_name(&path,&nti);
if(error != 0)
{
__set_errno(error);
goto out;
}
/* Check if the path name uses separator characters, which
indicate that the command should be located along a
relative or absolute path. */
found_path_separator = found_volume_separator = FALSE;
p = path;
while((c = (*p++)) != '\0')
{
if(c == '/')
found_path_separator = TRUE;
if(c == ':')
found_volume_separator = TRUE;
}
/* No relative or absolute path given? Try the resident command list. */
if(!found_path_separator && !found_volume_separator)
{
/* Try to find the command on the resident list */
pi->resident_command = find_resident_command(path);
if(pi->resident_command != NULL)
{
pi->program_name = strdup(path);
if(pi->program_name == NULL)
{
__set_errno(ENOMEM);
goto out;
}
}
}
/* No resident command found? Try the file system. */
if(pi->resident_command == NULL)
{
struct MsgPort * file_system;
struct DevProc * dvp = NULL;
BOOL done = FALSE;
LONG io_err;
/* Now for the simple stuff. Find a command or command script file
under the path name given. Handle multi-volume assignments, such as
referring to "C:", gracefully */
file_system = GetFileSysTask();
do
{
/* Give the user a chance to bail out. */
if(__check_abort_enabled && (SetSignal(0,0) & __break_signal_mask) != 0)
{
error = EAGAIN;
break;
}
if(found_volume_separator)
{
dvp = GetDeviceProc((STRPTR)path,dvp);
if(dvp != NULL)
{
SetFileSysTask(dvp->dvp_Port);
old_dir = CurrentDir(dvp->dvp_Lock);
}
}
/* First try: let's assume that that the file is
executable */
pi->segment_list = LoadSeg((STRPTR)path);
if(pi->segment_list != ZERO)
{
/* Also remember the name of the command */
pi->program_name = strdup(path);
if(pi->program_name != NULL)
done = TRUE;
else
error = ENOMEM;
}
io_err = IoErr();
/* If that didn't work and we might be dealing with a script
file, have a closer look at it. */
if(error == 0 && !done && (io_err == ERROR_OBJECT_NOT_FOUND || io_err == ERROR_OBJECT_WRONG_TYPE || io_err == ERROR_BAD_HUNK))
{
/* Could that be an ARexx or shell script? */
if(get_first_script_line((STRPTR)path,&script_line) == 0)
{
if(strncmp(script_line,"/*",2) == SAME)
{
/* That's an ARexx script */
pi->interpreter_name = strdup("RX");
if(pi->interpreter_name != NULL)
done = TRUE;
else
error = ENOMEM;
}
else if (strncmp(script_line,"#!",2) == SAME)
{
char * name;
char * args;
/* That's probably a shell script */
name = &script_line[2];
while((*name) != '\0' && isspace(*name))
name++;
/* Do we have a command name? */
if((*name) != '\0')
{
/* Find out if there are any script parameters */
args = name;
while((*args) != '\0' && !isspace(*args))
args++;
if((*args) != '\0')
{
(*args++) = '\0';
while((*args) != '\0' && isspace(*args))
args++;
}
/* Remember the parameters, if any */
if((*args) != '\0')
{
pi->interpreter_args = strdup(args);
if(pi->interpreter_args == NULL)
error = ENOMEM;
}
/* And remember the interpreter name. */
if(error == 0)
{
pi->interpreter_name = strdup(name);
if(pi->interpreter_name != NULL)
done = TRUE;
else
error = ENOMEM;
}
}
}
free(script_line);
script_line = NULL;
}
}
/* If that still didn't work, check if the file has
the "script" protection bit set. */
if(error == 0 && !done)
{
BPTR file_lock;
file_lock = Lock((STRPTR)path,SHARED_LOCK);
if(file_lock != ZERO)
{
D_S(struct FileInfoBlock,fib);
if(Examine(file_lock,fib))
{
if(fib->fib_Protection & FIBF_SCRIPT)
{
/* That's an AmigaDOS script */
pi->interpreter_name = strdup("Execute");
if(pi->interpreter_name != NULL)
done = TRUE;
else
error = ENOMEM;
}
}
else
{
error = __translate_io_error_to_errno(IoErr());
}
UnLock(file_lock);
}
}
/* If we found what we came for, also try to get a lock on
the command/script home directory, so that "PROGDIR:"
will work. */
if(done)
{
BPTR file_lock;
/* Remember where that file came from so that
"PROGDIR:" will work. */
file_lock = Lock((STRPTR)path,SHARED_LOCK);
if(file_lock != ZERO)
{
pi->home_dir = ParentDir(file_lock);
if(pi->home_dir == ZERO)
error = __translate_io_error_to_errno(IoErr());
UnLock(file_lock);
}
else
{
error = __translate_io_error_to_errno(IoErr());
}
}
if(dvp != NULL)
CurrentDir(old_dir);
}
while(!done && error == 0 && dvp != NULL && (dvp->dvp_Flags & DVPF_ASSIGN));
SetFileSysTask(file_system);
if(dvp != NULL)
FreeDeviceProc(dvp);
if(error == 0 && !done)
error = ENOENT;
if(error != 0)
{
__set_errno(error);
goto out;
}
}
(*result_ptr) = pi;
pi = NULL;
result = 0;
out:
if(script_line != NULL)
free(script_line);
if(pi != NULL)
free_program_info(pi);
__set_process_window(old_window_ptr);
return(result);
}
/****************************************************************************/
/* Scan the string, looking for characters which need to be
escape with a '*' if that string is to be quoted and the
contents should remain in the same form */
static size_t
count_extra_escape_chars(const char * string,size_t len)
{
size_t count = 0;
size_t i;
char c;
for(i = 0 ; i < len ; i++)
{
c = (*string++);
if(c == '\"' || c == '*' || c == '\n')
count++;
}
return(count);
}
/****************************************************************************/
/* Scan a string for characters which may require that the string
should be quoted */
STATIC BOOL
string_needs_quoting(const char * string,size_t len)
{
BOOL result = FALSE;
size_t i;
char c;
for(i = 0 ; i < len ; i++)
{
c = (*string++);
if(c == ' ' || ((unsigned char)c) == 0xA0 || c == '\t' || c == '\n' || c == '\"')
{
result = TRUE;
break;
}
}
return(result);
}
/****************************************************************************/
/* Figure out how many characters would go into a string composed of
individual arguments. This takes into account the lengths of
the individual argument strings, the separator characters, the
quote characters and any escape characters. */
static size_t
get_arg_string_length(char *const argv[])
{
size_t result = 0;
size_t i,len;
char * s;
/* The first argv[] element is skipped; it does not contain part of
the command line but holds the name of the program to be run. */
for(i = 1 ; argv[i] != NULL ; i++)
{
s = (char *)argv[i];
len = strlen(s);
if(len > 0)
{
if((*s) != '\"')
{
if(string_needs_quoting(s,len))
len += 1 + count_extra_escape_chars(s,len) + 1;
}
if(result == 0)
result = len;
else
result = result + 1 + len;
}
}
return(result);
}
/****************************************************************************/
/* Put together an argument string from a list of individual
components, quoting characters, escape characters and
separator characters. You're supposed to have enough memory
reserved for the whole string to fit */
static void
build_arg_string(char *const argv[],char * arg_string)
{
BOOL first_char = TRUE;
size_t i,j,len;
char * s;
/* The first argv[] element is skipped; it does not contain part of
the command line but holds the name of the program to be run. */
for(i = 1 ; argv[i] != NULL ; i++)
{
s = (char *)argv[i];
len = strlen(s);
if(len > 0)
{
if(first_char)
first_char = FALSE;
else
(*arg_string++) = ' ';
if((*s) != '\"' && string_needs_quoting(s,len))
{
(*arg_string++) = '\"';
for(j = 0 ; j < len ; j++)
{
if(s[j] == '\"' || s[j] == '*')
{
(*arg_string++) = '*';
(*arg_string++) = s[j];
}
else if (s[j] == '\n')
{
(*arg_string++) = '*';
(*arg_string++) = 'N';
}
else
{
(*arg_string++) = s[j];
}
}
(*arg_string++) = '\"';
}
else
{
memcpy(arg_string,s,len);
arg_string += len;
}
}
}
}
/****************************************************************************/
/* NOTE: This is not an execve() function which works like you might expect it
to do on a Unix-like system. Specifically, the command which will
be executed does not replace the currently running program. That
command will be executed first, and when it has returned the currently
running program will exit. Also, if you need to redirect the standard
input/output/error streams you will have to do this using the
equivalent AmigaDOS functions (Open, SelectInput(), SelectOutput()
and SelectErrorOutput()), restoring these streams before your program
exits. What this execve() function does is very similar to how the
built-in AmigaDOS shell works, but it is much more limited in what
it can do. */
int
execve(const char *path, char *const argv[], char *const envp[])
{
char old_program_name[256];
int result = -1;
struct program_info * pi;
char * arg_string = NULL;
size_t arg_string_len = 0;
size_t parameter_string_len;
BOOL success = FALSE;
BOOL clean_up_env = FALSE;
BPTR old_dir;
/* We begin by trying to find the command to execute */
if(find_command((char *)path,&pi) != 0)
goto out;
/* We'll need to know how much memory to reserve for the
parameters anyway */
parameter_string_len = get_arg_string_length(argv);
/* Do we have to use a script interpreter? */
if(pi->interpreter_name != NULL)
{
struct program_info * pi_interpreter;
size_t path_len = strlen(path);
/* Now try to find the command corresponding to the
interpreter given */
if(find_command(pi->interpreter_name,&pi_interpreter) != 0)
goto out;
/* We only try to resolve the name once. If this is still
not a command we can launch, we chicken out */
if(pi_interpreter->interpreter_name != NULL)
{
free_program_info(pi_interpreter);
goto out;
}
/* Just remember the arguments that need to be passed
to the interpreter */
pi_interpreter->interpreter_args = pi->interpreter_args;
pi->interpreter_args = NULL;
free_program_info(pi);
pi = pi_interpreter;
/* Reserve as much memory as is required for the
interpreter's parameters and the command's
arguments */
if(pi->interpreter_args != NULL)
{
size_t interpreter_args_len = strlen(pi->interpreter_args);
arg_string = malloc(interpreter_args_len + 1 + path_len + 1 + parameter_string_len + 1 + 1);
if(arg_string == NULL)
{
__set_errno(ENOMEM);
goto out;
}
memcpy(arg_string,pi->interpreter_args,interpreter_args_len);
arg_string_len = interpreter_args_len;
arg_string[arg_string_len++] = ' ';
memcpy(&arg_string[arg_string_len],path,path_len);
arg_string_len += path_len;
arg_string[arg_string_len++] = ' ';
}
else
{
arg_string = malloc(path_len + 1 + parameter_string_len + 1 + 1);
if(arg_string == NULL)
{
__set_errno(ENOMEM);
goto out;
}
memcpy(arg_string,path,path_len);
arg_string_len = path_len;
arg_string[arg_string_len++] = ' ';
}
}
else
{
arg_string = malloc(parameter_string_len + 1 + 1);
if(arg_string == NULL)
{
__set_errno(ENOMEM);
goto out;
}
}
/* Any command parameters to take care of? */
if(parameter_string_len > 0)
{
build_arg_string(argv,&arg_string[arg_string_len]);
arg_string_len += parameter_string_len;
}
/* Add the terminating new line character and a NUL,
to be nice... */
arg_string[arg_string_len++] = '\n';
arg_string[arg_string_len] = '\0';
/* Almost ready: prepare the environment data so that it can
be used by the command to be executed. */
if(envp != NULL)
{
if(__execve_environ_init(envp) != 0)
goto out;
clean_up_env = TRUE;
}
/* Change the shell's program name */
GetProgramName(old_program_name,sizeof(old_program_name));
SetProgramName(pi->program_name);
/* Change the command's home directory, so that "PROGDIR:"
can be used */
old_dir = SetProgramDir(pi->home_dir);
/* Reset the break signal before the program starts */
SetSignal(0,SIGBREAKF_CTRL_C);
/* Now try to run the program with the accumulated parameters */
result = RunCommand((pi->resident_command != NULL) ? pi->resident_command->seg_Seg : pi->segment_list,Cli()->cli_DefaultStack * sizeof(LONG),arg_string,arg_string_len);
/* Restore the home directory */
SetProgramDir(old_dir);
/* Restore the program name */
SetProgramName(old_program_name);
/* Did we launch the program? */
if(result == -1)
{
__set_errno(__translate_io_error_to_errno(IoErr()));
goto out;
}
/* Looks good, doesn't it? */
success = TRUE;
out:
/* Clean up... */
if(clean_up_env)
__execve_environ_exit(envp);
if(pi != NULL)
free_program_info(pi);
if(arg_string != NULL)
free(arg_string);
/* If things went well, we can actually quit now. */
if(success)
__execve_exit(result);
/* Just in case somebody wants to quit... */
__check_abort();
return(result);
}

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