mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
Compare commits
46 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2ff45ab6ba | ||
|
|
828e36f2d7 | ||
|
|
502d1aaab7 | ||
|
|
d6e18a9266 | ||
|
|
3fe72eaa44 | ||
|
|
3541b011a6 | ||
|
|
7b903355a7 | ||
|
|
36c33073a5 | ||
|
|
fba16b67fd | ||
|
|
5c29f84a0d | ||
|
|
aa3240972a | ||
|
|
8aeb5072ab | ||
|
|
42dba39aef | ||
|
|
927407de1b | ||
|
|
f3dcdfe1ce | ||
|
|
ead90dee0d | ||
|
|
1721b10610 | ||
|
|
05ef0d30bc | ||
|
|
3a7ac52248 | ||
|
|
2c81be592c | ||
|
|
e158a3fe18 | ||
|
|
40d64e1413 | ||
|
|
62d0c2dc81 | ||
|
|
940b8295c0 | ||
|
|
a91cb96b1b | ||
|
|
864a0e703e | ||
|
|
5828c6cdab | ||
|
|
cdfe0dad6f | ||
|
|
85122893ff | ||
|
|
9caa5b7ec4 | ||
|
|
6cf4cc5b4a | ||
|
|
42acda07f3 | ||
|
|
8633c3a77b | ||
|
|
5f42fb06f9 | ||
|
|
4e1c4967e6 | ||
|
|
2d48db0ce0 | ||
|
|
e2cadc9ea5 | ||
|
|
bde4d37a64 | ||
|
|
c3d55e94ec | ||
|
|
a1dc5e8e6e | ||
|
|
75a85db1a7 | ||
|
|
d4528b2862 | ||
|
|
b043a1ac1f | ||
|
|
83543472f1 | ||
|
|
601caa5708 | ||
|
|
2cf92a6395 |
@@ -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 '#'
|
|
||||||
@@ -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".
|
|
||||||
@@ -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
|
|
||||||
@@ -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'
|
|
||||||
@@ -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.
|
|
||||||
@@ -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
|
|
||||||
@@ -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.
|
|
||||||
@@ -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
|
|
||||||
@@ -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".
|
|
||||||
@@ -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".
|
|
||||||
@@ -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.
|
|
||||||
@@ -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>
|
|
||||||
@@ -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>
|
|
||||||
@@ -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><math-68881.h></tt> file written by Matthew Self <tt>(self [at] bayes.arc.nasa.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><workbench/startup.h></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><stddef.h></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><dos/dos.h></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><dos/dos.h></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 > 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><unistd.h></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><dos.h></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.han.de</p>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
@@ -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*}
|
|
||||||
}}}}}}
|
|
||||||
|
|
||||||
@@ -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
@@ -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)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
200
|
201
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
200
|
201
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|
||||||
|
|||||||
@@ -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)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
200
|
201
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
99
library/include/sys/resource.h
Normal file
99
library/include/sys/resource.h
Normal 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 */
|
||||||
@@ -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 */
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
84
library/include/sys/systeminfo.h
Normal file
84
library/include/sys/systeminfo.h
Normal 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 */
|
||||||
82
library/include/sys/timeb.h
Normal file
82
library/include/sys/timeb.h
Normal 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
73
library/include/ulimit.h
Normal 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 */
|
||||||
@@ -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
127
library/libamiga.gmk
Executable 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
436
library/libc.gmk
Executable 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
125
library/libdebug.gmk
Executable 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)
|
||||||
@@ -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 *)"/";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
265
library/libm.gmk
Executable 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
174
library/libnet.gmk
Executable 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
132
library/libprofile.gmk
Executable 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
200
library/libunix.gmk
Executable 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)
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
200
|
201
|
||||||
|
|||||||
@@ -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)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
200
|
201
|
||||||
|
|||||||
@@ -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) */
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
200
|
201
|
||||||
|
|||||||
131
library/resource_getrlimit.c
Normal file
131
library/resource_getrlimit.c
Normal 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);
|
||||||
|
}
|
||||||
83
library/resource_setrlimit.c
Normal file
83
library/resource_setrlimit.c
Normal 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);
|
||||||
|
}
|
||||||
@@ -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)
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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)"
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
200
|
201
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|||||||
@@ -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 );
|
||||||
|
|||||||
@@ -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. */
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
40
library/stdlib_expand_wildcard.c
Normal file
40
library/stdlib_expand_wildcard.c
Normal 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;
|
||||||
40
library/stdlib_expand_wildcard_check.c
Normal file
40
library/stdlib_expand_wildcard_check.c
Normal 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);
|
||||||
@@ -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;
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
164
library/string_strerror_r.c
Normal 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);
|
||||||
|
}
|
||||||
214
library/systeminfo_sysinfo.c
Normal file
214
library/systeminfo_sysinfo.c
Normal 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);
|
||||||
|
}
|
||||||
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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
78
library/timeb_ftime.c
Normal 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
94
library/ulimit_ulimit.c
Normal 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);
|
||||||
|
}
|
||||||
266
library/unistd_common_pathconf.c
Normal file
266
library/unistd_common_pathconf.c
Normal 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
40
library/unistd_def_path.c
Normal 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:.";
|
||||||
40
library/unistd_def_path_delimiter.c
Normal file
40
library/unistd_def_path_delimiter.c
Normal 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
40
library/unistd_environ.c
Normal 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
98
library/unistd_execl.c
Normal 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
104
library/unistd_execle.c
Normal 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
98
library/unistd_execlp.c
Normal 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
52
library/unistd_execv.c
Normal 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
844
library/unistd_execve.c
Normal 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
Reference in New Issue
Block a user