mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
Compare commits
48 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| c02665938f | |||
| 1e2863c5b8 | |||
| e1da3dadfb | |||
| b51c79577e | |||
| 975f949aa1 | |||
| 5f14118d73 | |||
| b874ff71de | |||
| 397013922c | |||
| 85c36839d5 | |||
| 196d37b28a | |||
| e8086be768 | |||
| 82dd474e3b | |||
| 58f36203b1 | |||
| 425f899302 | |||
| febe89c61b | |||
| 3e50be491b | |||
| dfc7f310d6 | |||
| a6a9352a00 | |||
| eb1d784c0d | |||
| d1092099d0 | |||
| bc621bed9c | |||
| 60eebbe732 | |||
| 345995000a | |||
| ef18bf5f3e | |||
| 6f3b3b6d28 | |||
| 846eebc66c | |||
| 75d47ccdad | |||
| 456123fe7f | |||
| 5733c99ba1 | |||
| 391e7e39ad | |||
| f5f0e17e78 | |||
| f6f0082a0e | |||
| c84b1fc1ff | |||
| e35307a7e3 | |||
| 911114c286 | |||
| 9e998ca108 | |||
| 99695dec0b | |||
| 0ec7094877 | |||
| a471e73adf | |||
| c76bf8e20b | |||
| 309bbd8c8c | |||
| d6e5769bc5 | |||
| 976b6ae7e1 | |||
| 8af96cb6cb | |||
| febe690623 | |||
| e36ebff16e | |||
| 6a1fd36b3a | |||
| feebeb6751 |
@ -1,14 +0,0 @@
|
||||
---
|
||||
engines:
|
||||
duplication:
|
||||
enabled: false
|
||||
fixme:
|
||||
enabled: true
|
||||
markdownlint:
|
||||
enabled: true
|
||||
ratings:
|
||||
paths:
|
||||
- "**.c"
|
||||
- "**.h"
|
||||
- "**.l"
|
||||
- "**.md"
|
||||
54
.github/workflows/ci.yml
vendored
Normal file
54
.github/workflows/ci.yml
vendored
Normal file
@ -0,0 +1,54 @@
|
||||
name: CI
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-20.04
|
||||
timeout-minutes: 480
|
||||
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
platform: [os4, os3]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
|
||||
- name: setup dependencies
|
||||
run: |
|
||||
sudo dpkg --add-architecture i386
|
||||
sudo apt-get update -y -qq || true
|
||||
sudo apt-get -qq install libc6:i386
|
||||
sudo ln -s /usr/lib/x86_64-linux-gnu/libmpfr.so.6 /usr/lib/x86_64-linux-gnu/libmpfr.so.4
|
||||
|
||||
- name: setup env
|
||||
run : |
|
||||
echo "GITHUB_SHA7=$(echo ${GITHUB_SHA::7})" >>$GITHUB_ENV
|
||||
|
||||
- name: install adtools build env
|
||||
run: |
|
||||
DOWNLOAD_PATH=https://github.com/adtools/adtools/releases/download/20170213
|
||||
curl -L ${DOWNLOAD_PATH}/adtools-utils.tar.bz2 | sudo tar xj -C /
|
||||
if [[ ${{ matrix.platform }} =~ os3 ]]; then curl -L ${DOWNLOAD_PATH}/adtools-m68k-amigaos.tar.bz2 | sudo tar xj -C / ; fi
|
||||
if [[ ${{ matrix.platform }} =~ os4 ]]; then curl -L ${DOWNLOAD_PATH}/adtools-ppc-amigaos.tar.bz2 | sudo tar xj -C / ; fi
|
||||
if [[ ${{ matrix.platform }} =~ mos ]]; then curl -L ${DOWNLOAD_PATH}/adtools-ppc-morphos.tar.bz2 | sudo tar xj -C / ; fi
|
||||
if [[ ${{ matrix.platform }} =~ aros-ppc ]]; then curl -L ${DOWNLOAD_PATH}/adtools-ppc-aros.tar.bz2 | sudo tar xj -C / ; fi
|
||||
if [[ ${{ matrix.platform }} =~ aros-i386 ]]; then curl -L ${DOWNLOAD_PATH}/adtools-i386-aros.tar.bz2 | sudo tar xj -C / ; fi
|
||||
if [[ ${{ matrix.platform }} =~ aros-x86_64 ]]; then curl -L ${DOWNLOAD_PATH}/adtools-x86_64-aros.tar.bz2 | sudo tar xj -C / ; fi
|
||||
|
||||
- name: cleanup old action artifacts
|
||||
run: .github/workflows/purge_artifacts.sh ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
#- name: remote debug tmate session
|
||||
# uses: mxschmitt/action-tmate@v1
|
||||
# if: matrix.platform == 'os4'
|
||||
|
||||
- name: build [${{ matrix.platform }}]
|
||||
timeout-minutes: 480
|
||||
run: |
|
||||
export PATH=/usr/local/amiga/bin:/opt/m68k-amigaos/bin:/opt/ppc-amigaos/bin:/opt/ppc-morphos/bin:${PATH}
|
||||
if [[ ${{ matrix.platform }} =~ os4 ]]; then make -C library -j1 -f GNUmakefile.os4 OS=os4 ; fi
|
||||
if [[ ${{ matrix.platform }} =~ os3 ]]; then make -C library -j1 -f GNUmakefile.68k OS=os3 ; fi
|
||||
55
.github/workflows/purge_artifacts.sh
vendored
Executable file
55
.github/workflows/purge_artifacts.sh
vendored
Executable file
@ -0,0 +1,55 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# Customize those three lines with your repository and credentials:
|
||||
REPO=https://api.github.com/repos/${GITHUB_REPOSITORY}
|
||||
GITHUB_USER=${GITHUB_REPOSITORY%%/*}
|
||||
GITHUB_TOKEN=${1}
|
||||
|
||||
# Number of most recent versions to keep for each artifact:
|
||||
KEEP=4
|
||||
|
||||
# A shortcut to call GitHub API.
|
||||
ghapi() { curl --silent --location --user $GITHUB_USER:$GITHUB_TOKEN "$@"; }
|
||||
|
||||
# A temporary file which receives HTTP response headers.
|
||||
TMPFILE=/tmp/tmp.$$
|
||||
|
||||
# An associative array, key: artifact name, value: number of artifacts of that name.
|
||||
declare -A ARTCOUNT
|
||||
|
||||
# Process all artifacts on this repository, loop on returned "pages".
|
||||
URL=$REPO/actions/artifacts
|
||||
while [[ -n "$URL" ]]; do
|
||||
|
||||
# Get current page, get response headers in a temporary file.
|
||||
JSON=$(ghapi --dump-header $TMPFILE "$URL")
|
||||
|
||||
# Get URL of next page. Will be empty if we are at the last page.
|
||||
URL=$(grep '^Link:' "$TMPFILE" | tr ',' '\n' | grep 'rel="next"' | head -1 | sed -e 's/.*<//' -e 's/>.*//')
|
||||
rm -f ${TMPFILE}
|
||||
|
||||
# Number of artifacts on this page:
|
||||
COUNT=$(( $(jq <<<$JSON -r '.artifacts | length') ))
|
||||
|
||||
# Loop on all artifacts on this page.
|
||||
for ((i=0; $i < $COUNT; i++)); do
|
||||
|
||||
# Get name of artifact and count instances of this name.
|
||||
STR=$(jq <<<$JSON -r ".artifacts[$i].name?")
|
||||
name=${STR%%-*}-${STR##*-}
|
||||
ARTCOUNT[$name]=$(( $(( ${ARTCOUNT[$name]} )) + 1))
|
||||
|
||||
printf "Found '%s' #%d, " $STR ${ARTCOUNT[$name]}
|
||||
# Check if we must delete this one.
|
||||
if [[ ${ARTCOUNT[$name]} -gt $KEEP ]]; then
|
||||
id=$(jq <<<$JSON -r ".artifacts[$i].id?")
|
||||
size=$(( $(jq <<<$JSON -r ".artifacts[$i].size_in_bytes?") ))
|
||||
printf "deleting %d bytes\n" $size
|
||||
ghapi -X DELETE $REPO/actions/artifacts/$id
|
||||
else
|
||||
printf "OK\n"
|
||||
fi
|
||||
done
|
||||
done
|
||||
|
||||
exit 0
|
||||
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,3 +2,4 @@
|
||||
*.a
|
||||
/library/compiler.log
|
||||
/library/netinclude
|
||||
*.map
|
||||
|
||||
36
.travis.yml
36
.travis.yml
@ -1,36 +0,0 @@
|
||||
sudo: required
|
||||
dist: trusty
|
||||
|
||||
language: c
|
||||
|
||||
# download and install our required cross compilers
|
||||
install:
|
||||
# Make sure we can install i386 packages as some adtools binaries
|
||||
# requires i386 libraries being installed to work in the 64bit env
|
||||
# of Travis
|
||||
- sudo dpkg --add-architecture i386
|
||||
- sudo apt-get -qq update || true
|
||||
- sudo apt-get -qq install libc6:i386
|
||||
# Install all adtools related stuff we need
|
||||
- curl -L https://dl.bintray.com/jens-maus/adtools/adtools-utils.tar.bz2 | sudo tar xj -C /
|
||||
- if [[ ${BUILD} =~ os3|release ]]; then curl -L https://dl.bintray.com/jens-maus/adtools/adtools-m68k-amigaos.tar.bz2 | sudo tar xj -C / ; fi
|
||||
- if [[ ${BUILD} =~ os4|release ]]; then curl -L https://dl.bintray.com/jens-maus/adtools/adtools-ppc-amigaos.tar.bz2 | sudo tar xj -C / ; fi
|
||||
- if [[ ${BUILD} =~ mos|release ]]; then curl -L https://dl.bintray.com/jens-maus/adtools/adtools-ppc-morphos.tar.bz2 | sudo tar xj -C / ; fi
|
||||
- if [[ ${BUILD} =~ aros-ppc|release ]]; then curl -L https://dl.bintray.com/jens-maus/adtools/adtools-ppc-aros.tar.bz2 | sudo tar xj -C / ; fi
|
||||
- if [[ ${BUILD} =~ aros-i386|release ]]; then curl -L https://dl.bintray.com/jens-maus/adtools/adtools-i386-aros.tar.bz2 | sudo tar xj -C / ; fi
|
||||
- if [[ ${BUILD} =~ aros-x86_64|release ]]; then curl -L https://dl.bintray.com/jens-maus/adtools/adtools-x86_64-aros.tar.bz2 | sudo tar xj -C / ; fi
|
||||
- if [[ ${BUILD} =~ mingw32|release ]]; then sudo apt-get -qq install binutils-mingw-w64-i686 gcc-mingw-w64-i686 ; fi
|
||||
|
||||
# set the PATH variable to the directories the cross compilers are installed.
|
||||
before_script:
|
||||
- export PATH=/usr/local/amiga/bin:/opt/m68k-amigaos/bin:/opt/ppc-amigaos/bin:/opt/ppc-morphos/bin:${PATH}
|
||||
|
||||
# specify a list of variables to test (here we test the build for our supported
|
||||
# list of operating systems).
|
||||
env:
|
||||
- BUILD="-f GNUmakefile.68k OS=os3"
|
||||
- BUILD="-f GNUmakefile.os4 OS=os4"
|
||||
|
||||
# the build command to execute for each test
|
||||
script:
|
||||
- make -C library -j1 ${BUILD}
|
||||
@ -1,9 +1,7 @@
|
||||
# clib2 – An ISO 'C' (1994) compliant runtime library for AmigaOS
|
||||
|
||||
[](https://travis-ci.org/adtools/clib2)
|
||||
[](https://codeclimate.com/github/adtools/clib2)
|
||||
[](https://github.com/adtools/clib2/actions)
|
||||
[](https://opensource.org/licenses/BSD-3-Clause)
|
||||
[](https://github.com/adtools/clib2/issues)
|
||||
|
||||
## What is this?
|
||||
|
||||
|
||||
@ -449,6 +449,7 @@ C_LIB = \
|
||||
time_numbertostring.o \
|
||||
time_strftime.o \
|
||||
time_time.o \
|
||||
time_tzset.o \
|
||||
time_weekday.o \
|
||||
uio_readv.o \
|
||||
uio_writev.o \
|
||||
|
||||
@ -29,7 +29,11 @@ RANLIB := ppc-amigaos-ranlib
|
||||
COPY := cp -p
|
||||
DELETE := rm -rf
|
||||
MAKEDIR := mkdir -p
|
||||
LOG_COMMAND := 2>&1 | tee -a compiler.log
|
||||
# Enabling the LOG_COMMAND has the consequence that a rule will not
|
||||
# fail on an error because only the exit status from the tee command
|
||||
# will be considered
|
||||
#LOG_COMMAND := 2>&1 | tee -a compiler.log
|
||||
LOG_COMMAND :=
|
||||
# You may need to request a specific compiler version in order to
|
||||
# build the baserel versions of the library. At this time of
|
||||
# writing (2008-11-06) GCC 4.0.4 and below support the -mbaserel
|
||||
@ -54,13 +58,13 @@ LOG_COMMAND := 2>&1 | tee -a compiler.log
|
||||
|
||||
WARNINGS := \
|
||||
-Wall -W -Wpointer-arith -Wsign-compare -Wmissing-prototypes \
|
||||
-Wundef -Wbad-function-cast -Wmissing-declarations -Wunused -Wwrite-strings \
|
||||
-Wno-deprecated-declarations \
|
||||
-Wundef -Wmissing-declarations -Wunused -Wwrite-strings \
|
||||
-Wno-deprecated-declarations -Wno-unused-label \
|
||||
|
||||
# -Wconversion -Wshadow
|
||||
# -Wconversion -Wshadow -Wbad-function-cast
|
||||
|
||||
INCLUDES := -Iinclude -I. -I$(SDK_INCLUDE)
|
||||
OPTIONS := -DUSE_64_BIT_INTS -D__USE_INLINE__ -Wa,-mregnames -fno-common -std=gnu99 -mcrt=clib2
|
||||
OPTIONS := -DUSE_64_BIT_INTS -D__USE_INLINE__ -Wa,-mregnames -fno-builtin -fno-common -std=c99 -nostdlib
|
||||
OPTIMIZE := -DNDEBUG -O3
|
||||
|
||||
#DEBUG := -ggdb
|
||||
@ -160,6 +164,10 @@ cvs-tag:
|
||||
|
||||
# General build rules for all object files and the individual libraries
|
||||
|
||||
lib/crtbegin.o : CFLAGS += -fno-aggressive-loop-optimizations
|
||||
lib/crtbegin.o : crtbegin.c
|
||||
@$(COMPILE)
|
||||
|
||||
lib/%.o : AFLAGS += $(LARGEDATA)
|
||||
lib/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
@ -171,6 +179,11 @@ lib/small-data/%.o : AFLAGS += $(SMALLDATA)
|
||||
lib/small-data/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
lib/small-data/crtbegin.o : CFLAGS += $(SMALLDATA) -fno-aggressive-loop-optimizations
|
||||
lib/small-data/crtbegin.o : crtbegin.c
|
||||
@$(COMPILE)
|
||||
|
||||
lib/small-data/%.o : CFLAGS += $(SMALLDATA)
|
||||
lib/small-data/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
@ -178,6 +191,11 @@ lib/soft-float/%.o : AFLAGS += $(SOFTFLOAT)
|
||||
lib/soft-float/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
lib/soft-float/crtbegin.o : CFLAGS += $(SOFTFLOAT) -fno-aggressive-loop-optimizations
|
||||
lib/soft-float/crtbegin.o : crtbegin.c
|
||||
@$(COMPILE)
|
||||
|
||||
lib/soft-float/%.o : CFLAGS += $(SOFTFLOAT)
|
||||
lib/soft-float/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
@ -185,6 +203,11 @@ lib/baserel/%.o : AFLAGS += $(BASEREL)
|
||||
lib/baserel/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
lib/baserel/crtbegin.o : CFLAGS += $(BASEREL) -fno-aggressive-loop-optimizations
|
||||
lib/baserel/crtbegin.o : crtbegin.c
|
||||
@$(COMPILE)
|
||||
|
||||
lib/baserel/%.o : CFLAGS += $(BASEREL)
|
||||
lib/baserel/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
@ -192,6 +215,11 @@ lib.threadsafe/%.o : AFLAGS += $(LARGEDATA) $(THREADSAFE)
|
||||
lib.threadsafe/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
lib.threadsafe/crtbegin.o : CFLAGS += $(THREADSAFE) $(LARGEDATA) -fno-aggressive-loop-optimizations
|
||||
lib.threadsafe/crtbegin.o : crtbegin.c
|
||||
@$(COMPILE)
|
||||
|
||||
lib.threadsafe/%.o : CFLAGS += $(THREADSAFE) $(LARGEDATA)
|
||||
lib.threadsafe/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
@ -199,6 +227,11 @@ lib.threadsafe/small-data/%.o : AFLAGS += $(SMALLDATA) $(THREADSAFE)
|
||||
lib.threadsafe/small-data/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
lib.threadsafe/small-data/crtbegin.o : CFLAGS += $(THREADSAFE) $(SMALLDATA) -fno-aggressive-loop-optimizations
|
||||
lib.threadsafe/small-data/crtbegin.o : crtbegin.c
|
||||
@$(COMPILE)
|
||||
|
||||
lib.threadsafe/small-data/%.o : CFLAGS += $(THREADSAFE) $(SMALLDATA)
|
||||
lib.threadsafe/small-data/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
@ -206,6 +239,11 @@ lib.threadsafe/soft-float/%.o : AFLAGS += $(SOFTFLOAT) $(THREADSAFE)
|
||||
lib.threadsafe/soft-float/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
lib.threadsafe/soft-float/crtbegin.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT) -fno-aggressive-loop-optimizations
|
||||
lib.threadsafe/soft-float/crtbegin.o : crtbegin.c
|
||||
@$(COMPILE)
|
||||
|
||||
lib.threadsafe/soft-float/%.o : CFLAGS += $(THREADSAFE) $(SOFTFLOAT)
|
||||
lib.threadsafe/soft-float/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
@ -213,6 +251,11 @@ lib.threadsafe/baserel/%.o : AFLAGS += $(BASEREL) $(THREADSAFE)
|
||||
lib.threadsafe/baserel/%.o : %.S
|
||||
@$(ASSEMBLE)
|
||||
|
||||
lib.threadsafe/baserel/crtbegin.o : CFLAGS += $(THREADSAFE) $(BASEREL) -fno-aggressive-loop-optimizations
|
||||
lib.threadsafe/baserel/crtbegin.o : crtbegin.c
|
||||
@$(COMPILE)
|
||||
|
||||
lib.threadsafe/baserel/%.o : CFLAGS += $(THREADSAFE) $(BASEREL)
|
||||
lib.threadsafe/baserel/%.o : %.c
|
||||
@$(COMPILE)
|
||||
|
||||
@ -231,7 +274,7 @@ $(CC) $(AFLAGS) -o $@ -c $< $(LOG_COMMAND)
|
||||
endef
|
||||
|
||||
define MAKELIB
|
||||
-$(MAKEDIR) $@
|
||||
-$(MAKEDIR) $(@D)
|
||||
$(DELETE) $@
|
||||
echo "Making $@"
|
||||
$(AR) $@ $^ $(LOG_COMMAND)
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 214
|
||||
#define DATE "27.4.2017"
|
||||
#define VERS "amiga.lib 1.214"
|
||||
#define VSTRING "amiga.lib 1.214 (27.4.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: amiga.lib 1.214 (27.4.2017)"
|
||||
#define REVISION 215
|
||||
#define DATE "26.6.2017"
|
||||
#define VERS "amiga.lib 1.215"
|
||||
#define VSTRING "amiga.lib 1.215 (26.6.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: amiga.lib 1.215 (26.6.2017)"
|
||||
|
||||
@ -1 +1 @@
|
||||
214
|
||||
215
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 214
|
||||
#define DATE "27.4.2017"
|
||||
#define VERS "c.lib 1.214"
|
||||
#define VSTRING "c.lib 1.214 (27.4.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: c.lib 1.214 (27.4.2017)"
|
||||
#define REVISION 215
|
||||
#define DATE "26.6.2017"
|
||||
#define VERS "c.lib 1.215"
|
||||
#define VSTRING "c.lib 1.215 (26.6.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: c.lib 1.215 (26.6.2017)"
|
||||
|
||||
@ -1 +1 @@
|
||||
214
|
||||
215
|
||||
|
||||
@ -1,3 +1,20 @@
|
||||
c.lib 1.216 (xxx)
|
||||
|
||||
- Add some wchar and multbyte-string related functions to allow gcc
|
||||
building a libstdc++ library with wide char support. For now, the
|
||||
functions are mostly stub ones only. They can be implemented on
|
||||
demand.
|
||||
|
||||
|
||||
c.lib 1.215 (26.6.2017)
|
||||
|
||||
- Added -fno-aggressive-loop-optimizations option when building crtbegin.c
|
||||
to work around constructor/destructor hack with GCC 5.4.0 on AmigaOS 4.
|
||||
|
||||
- Added -fno-builtin option to fix conflicts with builtin memset()
|
||||
with GCC 5.4.0 on AmigaOS 4.
|
||||
|
||||
|
||||
c.lib 1.214 (27.4.2017)
|
||||
|
||||
- Added integer overflow test to calloc().
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: crtbegin.c,v 1.13 2010-08-21 11:37:03 obarthel Exp $
|
||||
* crtbegin.c
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -48,7 +48,12 @@
|
||||
* Dummy constructor and destructor array. The linker script will put these at the
|
||||
* very beginning of section ".ctors" and ".dtors". crtend.o contains a similar entry
|
||||
* with a NULL pointer entry and is put at the end of the sections. This way, the init
|
||||
* code can find the global constructor/destructor pointers
|
||||
* code can find the global constructor/destructor pointers.
|
||||
*
|
||||
* WARNING:
|
||||
* This hack does not work correctly with GCC 5 and higher. The optimizer
|
||||
* will see a one element array and act appropriately. The current workaround
|
||||
* is to use -fno-aggressive-loop-optimizations when compiling this file.
|
||||
*/
|
||||
static void (*__CTOR_LIST__[1]) (void) __attribute__(( used, section(".ctors"), aligned(sizeof(void (*)(void))) ));
|
||||
static void (*__DTOR_LIST__[1]) (void) __attribute__(( used, section(".dtors"), aligned(sizeof(void (*)(void))) ));
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 214
|
||||
#define DATE "27.4.2017"
|
||||
#define VERS "debug.lib 1.214"
|
||||
#define VSTRING "debug.lib 1.214 (27.4.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: debug.lib 1.214 (27.4.2017)"
|
||||
#define REVISION 215
|
||||
#define DATE "26.6.2017"
|
||||
#define VERS "debug.lib 1.215"
|
||||
#define VSTRING "debug.lib 1.215 (26.6.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: debug.lib 1.215 (26.6.2017)"
|
||||
|
||||
@ -1 +1 @@
|
||||
214
|
||||
215
|
||||
|
||||
@ -125,7 +125,7 @@ CLIB_DESTRUCTOR(dirent_exit)
|
||||
|
||||
if(__directory_list.mlh_Head != NULL)
|
||||
{
|
||||
while(NOT IsListEmpty((struct List *)&__directory_list))
|
||||
while(NOT IsMinListEmpty(&__directory_list))
|
||||
closedir((DIR *)__directory_list.mlh_Head);
|
||||
}
|
||||
|
||||
|
||||
@ -196,7 +196,7 @@ opendir(const char * path_name)
|
||||
UnLockDosList(LDF_VOLUMES|LDF_READ);
|
||||
|
||||
/* Bail out if we cannot present anything. */
|
||||
if(IsListEmpty((struct List *)&dh->dh_VolumeList))
|
||||
if(IsMinListEmpty(&dh->dh_VolumeList))
|
||||
{
|
||||
__set_errno(ENOMEM);
|
||||
goto out;
|
||||
|
||||
@ -93,7 +93,7 @@ readdir(DIR * directory_pointer)
|
||||
|
||||
assert( (((ULONG)name) & 3) == 0 );
|
||||
|
||||
if(dh->dh_VolumeNode == NULL && NOT IsListEmpty((struct List *)&dh->dh_VolumeList))
|
||||
if(dh->dh_VolumeNode == NULL && NOT IsMinListEmpty(&dh->dh_VolumeList))
|
||||
dh->dh_VolumeNode = (struct Node *)dh->dh_VolumeList.mlh_Head;
|
||||
|
||||
strcpy(name,"\1:"); /* BSTR for ":" */
|
||||
|
||||
@ -359,7 +359,7 @@ extern unsigned int (* __get_default_stack_size)(void);
|
||||
/*
|
||||
* This library falls back onto locale.library to perform string collation
|
||||
* in strcoll(), character conversion in toupper() and various other
|
||||
* functions. This may not your intention. To restrict the library to use
|
||||
* functions. This may not be your intention. To restrict the library to use
|
||||
* only the "C" language locale, declare the following variable in your
|
||||
* code and set it to FALSE, so that it overrides the default settings.
|
||||
* The variable value is checked during program startup and, if set to
|
||||
|
||||
@ -166,6 +166,8 @@ extern int errno;
|
||||
|
||||
#define EILSEQ 85 /* Encoding error detected */
|
||||
|
||||
#define ENOTSUP 86 /* Not supported */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@ -59,6 +59,10 @@ extern "C" {
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
typedef void *locale_t;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct lconv
|
||||
{
|
||||
char * decimal_point; /* Decimal point character (non-monetary). */
|
||||
|
||||
@ -61,7 +61,11 @@ extern "C" {
|
||||
|
||||
typedef int ptrdiff_t;
|
||||
typedef unsigned int size_t;
|
||||
|
||||
/* wchar_t is a built-in type in C++ */
|
||||
#ifndef __cplusplus
|
||||
typedef unsigned short wchar_t;
|
||||
#endif
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
@ -47,6 +47,10 @@
|
||||
#include <stddef.h>
|
||||
#endif /* _STDDEF_H */
|
||||
|
||||
#ifndef _SYS_CLIB2_STDC_H
|
||||
#include <sys/clib2_stdc.h>
|
||||
#endif /* _SYS_CLIB2_STDC_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -447,6 +451,11 @@ extern lldiv_t lldiv(long long n,long long d);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern int mbtowc(wchar_t *restrict pwc, const char *restrict s, size_t n);
|
||||
extern int wctomb(char *s, wchar_t wchar);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* __GNUC__ || (__STDC_VERSION__ && __STDC_VERSION__ >= 199901L) */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@ -62,6 +62,7 @@ extern int strcmp(const char *s1, const char * s2);
|
||||
extern int strncmp(const char *s1, const char *s2, size_t n);
|
||||
extern char *strcpy(char *dest, const char *src);
|
||||
extern char *strncpy(char *dest, const char *src, size_t n);
|
||||
extern size_t strnlen(const char *s, size_t maxlen);
|
||||
extern size_t strlen(const char *s);
|
||||
extern char *strchr(const char *s, int c);
|
||||
extern char *strrchr(const char *s, int c);
|
||||
|
||||
73
library/include/sys/param.h
Normal file
73
library/include/sys/param.h
Normal file
@ -0,0 +1,73 @@
|
||||
/*
|
||||
* $Id: $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2017 by Olaf Barthel <obarthel (at) gmx.net>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
*****************************************************************************
|
||||
*
|
||||
* Documentation and source code for this library, and the most recent library
|
||||
* build are available from <https://github.com/adtools/clib2>.
|
||||
*
|
||||
*****************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef _SYS_PARAM_H
|
||||
#define _SYS_PARAM_H
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef _UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif /* _UNISTD_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define MIN(a,b) (((a)<(b))?(a):(b))
|
||||
#define MAX(a,b) (((a)>(b))?(a):(b))
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _SYS_MOUNT_H */
|
||||
@ -106,10 +106,24 @@ extern size_t strftime(char *s, size_t maxsize, const char *format,
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Timespec declaration */
|
||||
struct timespec
|
||||
{
|
||||
time_t tv_secs;
|
||||
long tv_nsec;
|
||||
};
|
||||
|
||||
#ifndef tv_sec
|
||||
#define tv_sec tv_secs
|
||||
#endif /* tv_sec */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern char * asctime_r(const struct tm *tm,char * buffer);
|
||||
extern char * ctime_r(const time_t *tptr,char * buffer);
|
||||
extern struct tm * gmtime_r(const time_t *t,struct tm * tm_ptr);
|
||||
extern struct tm * localtime_r(const time_t *t,struct tm * tm_ptr);
|
||||
extern void tzset(void);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
@ -43,6 +43,10 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef _SYS_CLIB2_STDC_H
|
||||
#include <sys/clib2_stdc.h>
|
||||
#endif /* _SYS_CLIB2_STDC_H */
|
||||
|
||||
#ifndef _STDDEF_H
|
||||
#include <stddef.h>
|
||||
#endif /* _STDDEF_H */
|
||||
@ -59,6 +63,14 @@
|
||||
#include <time.h>
|
||||
#endif /* _TIME_H */
|
||||
|
||||
#ifndef _LOCALE_H
|
||||
#include <locale.h>
|
||||
#endif /* _LOCALE_H */
|
||||
|
||||
#ifndef _STDINT_H
|
||||
#include <stdint.h>
|
||||
#endif
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
@ -68,8 +80,6 @@ extern "C" {
|
||||
/****************************************************************************/
|
||||
|
||||
#define WEOF (-1)
|
||||
#define WCHAR_MAX 65535
|
||||
#define WCHAR_MIN 0
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@ -81,7 +91,6 @@ typedef long mbstate_t;
|
||||
extern wint_t btowc(int c);
|
||||
extern int wctob(wint_t c);
|
||||
extern int mbsinit(const mbstate_t *ps);
|
||||
extern size_t mbrlen(wchar_t *pwc, const char * s, size_t n, mbstate_t *ps);
|
||||
extern size_t wcrtomb(char *s, wchar_t wc, mbstate_t *ps);
|
||||
extern size_t mbsrtowcs(wchar_t *pwcs, const char **src, size_t n, mbstate_t *ps);
|
||||
extern size_t wcsrtombs(char *s, const wchar_t **src, size_t n, mbstate_t *ps);
|
||||
@ -161,7 +170,7 @@ extern int swprintf(wchar_t *s, const wchar_t *format, ...);
|
||||
|
||||
extern int vfwprintf(FILE *stream,const wchar_t *format,va_list arg);
|
||||
extern int vwprintf(const wchar_t *format,va_list arg);
|
||||
extern int vswprintf(char *s, const wchar_t *format,va_list arg);
|
||||
extern int vswprintf(wchar_t *s, size_t maxlen, const wchar_t *format, va_list arg);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@ -174,16 +183,24 @@ extern size_t wcsftime(wchar_t *s, size_t maxsize, const wchar_t *format, const
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
|
||||
#if (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || defined(__cplusplus)
|
||||
|
||||
extern size_t mbrlen(const char *restrict s, size_t n, mbstate_t *restrict ps);
|
||||
extern size_t mbrtowc(wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps);
|
||||
extern int mbsinit(const mbstate_t *ps);
|
||||
extern size_t mbsnrtowcs(wchar_t *restrict dst, const char **restrict src, size_t nmc, size_t len, mbstate_t *restrict ps);
|
||||
extern size_t mbsrtowcs(wchar_t *restrict dst, const char **restrict src, size_t len, mbstate_t *restrict ps);
|
||||
|
||||
extern size_t wcrtomb(char *restrict s, wchar_t wc, mbstate_t *restrict ps);
|
||||
extern int wcscoll(const wchar_t *ws1, const wchar_t *ws2);
|
||||
extern int wcscoll_l(const wchar_t *ws1, const wchar_t *ws2, locale_t loc);
|
||||
extern size_t wcscspn(const wchar_t *s, const wchar_t *c);
|
||||
extern size_t wcsnrtombs(char *restrict dst, const wchar_t **restrict src, size_t nwc, size_t len, mbstate_t *restrict ps);
|
||||
extern wchar_t * wcsrchr(const wchar_t *ws, wchar_t wc);
|
||||
extern size_t wcsrtombs(char *restrict dst, const wchar_t **restrict src, size_t len, mbstate_t *restrict ps);
|
||||
extern long long wcstoll(const wchar_t *str, wchar_t **ptr, int base);
|
||||
extern unsigned long long wcstoull(const wchar_t *str, wchar_t **ptr, int base);
|
||||
|
||||
extern size_t mbrtowc_l(wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps, locale_t loc);
|
||||
extern int wcscoll_l(const wchar_t *ws1, const wchar_t *ws2, locale_t loc);
|
||||
extern size_t wcscspn(const wchar_t *ws1, const wchar_t *ws2);
|
||||
extern wchar_t * wcsrchr(const wchar_t *ws, wchar_t wc);
|
||||
|
||||
#endif /* __STDC_VERSION__ && __STDC_VERSION__ >= 199901L */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@ -234,6 +234,7 @@ C_LIB := \
|
||||
stdlib_main_stub.o \
|
||||
stdlib_malloc.o \
|
||||
stdlib_math.o \
|
||||
stdlib_mbtowc.o \
|
||||
stdlib_mkdtemp.o \
|
||||
stdlib_mkstemp.o \
|
||||
stdlib_mktemp.o \
|
||||
@ -310,6 +311,7 @@ C_LIB := \
|
||||
string_strncat.o \
|
||||
string_strncmp.o \
|
||||
string_strncpy.o \
|
||||
string_strnlen.o \
|
||||
string_strpbrk.o \
|
||||
string_strrchr.o \
|
||||
string_strspn.o \
|
||||
@ -336,6 +338,7 @@ C_LIB := \
|
||||
time_numbertostring.o \
|
||||
time_strftime.o \
|
||||
time_time.o \
|
||||
time_tzset.o \
|
||||
time_weekday.o \
|
||||
uio_readv.o \
|
||||
uio_writev.o \
|
||||
@ -372,7 +375,79 @@ C_LIB := \
|
||||
unistd_unlink.o \
|
||||
unistd_usleep.o \
|
||||
utime_utime.o \
|
||||
utsname_uname.o
|
||||
utsname_uname.o \
|
||||
wchar_btowc.o \
|
||||
wchar_fgetwc.o \
|
||||
wchar_fgetws.o \
|
||||
wchar_fputwc.o \
|
||||
wchar_fputws.o \
|
||||
wchar_fwide.o \
|
||||
wchar_fwprintf.o \
|
||||
wchar_fwscanf.o \
|
||||
wchar_getwc.o \
|
||||
wchar_getwchar.o \
|
||||
wchar_mbrlen.o \
|
||||
wchar_mbrtowc.o \
|
||||
wchar_mbsinit.o \
|
||||
wchar_mbsrtowcs.o \
|
||||
wchar_putwc.o \
|
||||
wchar_putwchar.o \
|
||||
wchar_swprintf.o \
|
||||
wchar_swscanf.o \
|
||||
wchar_ungetwc.o \
|
||||
wchar_vfwprintf.o \
|
||||
wchar_vswprintf.o \
|
||||
wchar_vwprintf.o \
|
||||
wchar_wcrtomb.o \
|
||||
wchar_wcscat.o \
|
||||
wchar_wcschr.o \
|
||||
wchar_wcscmp.o \
|
||||
wchar_wcscoll.o \
|
||||
wchar_wcscpy.o \
|
||||
wchar_wcscspn.o \
|
||||
wchar_wcsftime.o \
|
||||
wchar_wcslen.o \
|
||||
wchar_wcsncat.o \
|
||||
wchar_wcsncmp.o \
|
||||
wchar_wcsncpy.o \
|
||||
wchar_wscoll.o \
|
||||
wchar_wcspbrk.o \
|
||||
wchar_wcsrtombs.o \
|
||||
wchar_wcsspn.o \
|
||||
wchar_wcstod.o \
|
||||
wchar_wcstok.o \
|
||||
wchar_wcstol.o \
|
||||
wchar_wcstoll.o \
|
||||
wchar_wcstoul.o \
|
||||
wchar_wcstoull.o \
|
||||
wchar_wcsxfrm.o \
|
||||
wchar_wctob.o \
|
||||
wchar_wmemchr.o \
|
||||
wchar_wmemcmp.o \
|
||||
wchar_wmemcpy.o \
|
||||
wchar_wmemmove.o \
|
||||
wchar_wmemset.o \
|
||||
wchar_wprintf.o \
|
||||
wchar_wscanf.o \
|
||||
wchar_wscoll.o \
|
||||
wctype_iswalnum.o \
|
||||
wctype_iswalpha.o \
|
||||
wctype_iswblank.o \
|
||||
wctype_iswcntrl.o \
|
||||
wctype_iswctype.o \
|
||||
wctype_iswdigit.o \
|
||||
wctype_iswgraph.o \
|
||||
wctype_iswlower.o \
|
||||
wctype_iswprint.o \
|
||||
wctype_iswpunc.o \
|
||||
wctype_iswspace.o \
|
||||
wctype_iswupper.o \
|
||||
wctype_iswxdigit.o \
|
||||
wctype_towctrans.o \
|
||||
wctype_towlower.o \
|
||||
wctype_towupper.o \
|
||||
wctype_wctrans.o \
|
||||
wctype_wctype.o
|
||||
|
||||
##############################################################################
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 214
|
||||
#define DATE "27.4.2017"
|
||||
#define VERS "m.lib 1.214"
|
||||
#define VSTRING "m.lib 1.214 (27.4.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: m.lib 1.214 (27.4.2017)"
|
||||
#define REVISION 215
|
||||
#define DATE "26.6.2017"
|
||||
#define VERS "m.lib 1.215"
|
||||
#define VSTRING "m.lib 1.215 (26.6.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: m.lib 1.215 (26.6.2017)"
|
||||
|
||||
@ -1 +1 @@
|
||||
214
|
||||
215
|
||||
|
||||
@ -93,6 +93,13 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef IsMinListEmpty
|
||||
#define IsMinListEmpty(ml) \
|
||||
((struct MinList *)((ml)->mlh_TailPred) == (struct MinList *)(ml))
|
||||
#endif
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef AMIGA_COMPILER_H
|
||||
|
||||
#ifdef __SASC
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 214
|
||||
#define DATE "27.4.2017"
|
||||
#define VERS "net.lib 1.214"
|
||||
#define VSTRING "net.lib 1.214 (27.4.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: net.lib 1.214 (27.4.2017)"
|
||||
#define REVISION 215
|
||||
#define DATE "26.6.2017"
|
||||
#define VERS "net.lib 1.215"
|
||||
#define VSTRING "net.lib 1.215 (26.6.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: net.lib 1.215 (26.6.2017)"
|
||||
|
||||
@ -1 +1 @@
|
||||
214
|
||||
215
|
||||
|
||||
@ -136,7 +136,7 @@ profil(unsigned short *buffer, size_t bufSize, size_t offset, unsigned int scale
|
||||
ProfileData.CounterStart = GetCounterStart();
|
||||
|
||||
/* Set interrupt vector */
|
||||
CounterInt.is_Code = (void (*)())CounterIntFn;
|
||||
CounterInt.is_Code = (void (*)(void))CounterIntFn;
|
||||
CounterInt.is_Data = &ProfileData;
|
||||
IPM->SetInterruptVector(1, &CounterInt);
|
||||
|
||||
|
||||
@ -327,7 +327,7 @@ remove_locked_region_node(struct FileLockSemaphore * fls,struct fd * fd,LONG sta
|
||||
/* Check if there are any locked regions left.
|
||||
* If not, mark the entire file as unlocked.
|
||||
*/
|
||||
if(IsListEmpty((struct List *)&which_lock->fln_LockedRegionList))
|
||||
if(IsMinListEmpty(&which_lock->fln_LockedRegionList))
|
||||
{
|
||||
SHOWMSG("no more regions are locked; removing the file lock node");
|
||||
|
||||
@ -705,7 +705,7 @@ cleanup_locked_records(struct fd * fd)
|
||||
}
|
||||
}
|
||||
|
||||
if(IsListEmpty((struct List *)&which_lock->fln_LockedRegionList))
|
||||
if(IsMinListEmpty(&which_lock->fln_LockedRegionList))
|
||||
{
|
||||
SHOWMSG("no more regions are locked; removing the file lock node");
|
||||
|
||||
|
||||
@ -94,7 +94,7 @@ alloca_cleanup(const char * file,int line)
|
||||
NewList((struct List *)&alloca_memory_list);
|
||||
|
||||
/* Is this worth cleaning up? */
|
||||
if(NOT IsListEmpty((struct List *)&alloca_memory_list))
|
||||
if(NOT IsMinListEmpty(&alloca_memory_list))
|
||||
{
|
||||
struct MemoryContextNode * mcn_prev;
|
||||
struct MemoryContextNode * mcn;
|
||||
@ -120,7 +120,7 @@ alloca_cleanup(const char * file,int line)
|
||||
|
||||
/* Drop the cleanup callback if there's nothing to be cleaned
|
||||
up any more. */
|
||||
if(IsListEmpty((struct List *)&alloca_memory_list))
|
||||
if(IsMinListEmpty(&alloca_memory_list))
|
||||
__alloca_cleanup = NULL;
|
||||
}
|
||||
|
||||
|
||||
@ -59,13 +59,25 @@ __calloc(size_t num_elements,size_t element_size,const char * file,int line)
|
||||
}
|
||||
#endif /* __MEM_DEBUG */
|
||||
|
||||
/* This might overflow. */
|
||||
total_size = num_elements * element_size;
|
||||
|
||||
result = __malloc(total_size,file,line);
|
||||
if(result != NULL)
|
||||
memset(result,0,total_size);
|
||||
|
||||
/* No arithmetic overflow? */
|
||||
if(total_size >= num_elements)
|
||||
{
|
||||
result = __malloc(total_size,file,line);
|
||||
if(result != NULL)
|
||||
memset(result,0,total_size);
|
||||
else
|
||||
SHOWMSG("memory allocation failure");
|
||||
}
|
||||
/* Multiplying the number and size of elements overflows
|
||||
* the size_t range.
|
||||
*/
|
||||
else
|
||||
SHOWMSG("memory allocation failure");
|
||||
{
|
||||
D(("calloc(num_elements=%ld, element_size=%ld) overflow"));
|
||||
}
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -75,14 +75,15 @@ struct MinList NOCOMMON __memory_list;
|
||||
/****************************************************************************/
|
||||
|
||||
void *
|
||||
__allocate_memory(size_t size,BOOL never_free,const char * UNUSED debug_file_name,int UNUSED debug_line_number)
|
||||
__allocate_memory(size_t size,BOOL never_free,const char *debug_file_name UNUSED,int debug_line_number UNUSED)
|
||||
{
|
||||
struct MemoryNode * mn;
|
||||
size_t allocation_size;
|
||||
void * result = NULL;
|
||||
size_t original_size;
|
||||
|
||||
#if defined(UNIX_PATH_SEMANTICS)
|
||||
size_t original_size;
|
||||
|
||||
{
|
||||
original_size = size;
|
||||
|
||||
@ -417,7 +418,7 @@ STDLIB_DESTRUCTOR(stdlib_memory_exit)
|
||||
|
||||
if(__memory_list.mlh_Head != NULL)
|
||||
{
|
||||
while(NOT IsListEmpty((struct List *)&__memory_list))
|
||||
while(NOT IsMinListEmpty(&__memory_list))
|
||||
{
|
||||
((struct MemoryNode *)__memory_list.mlh_Head)->mn_AlreadyFree = FALSE;
|
||||
|
||||
@ -453,12 +454,12 @@ STDLIB_DESTRUCTOR(stdlib_memory_exit)
|
||||
{
|
||||
#ifdef __MEM_DEBUG
|
||||
{
|
||||
while(NOT IsListEmpty((struct List *)&__memory_list))
|
||||
while(NOT IsMinListEmpty(&__memory_list))
|
||||
__free_memory_node((struct MemoryNode *)__memory_list.mlh_Head,__FILE__,__LINE__);
|
||||
}
|
||||
#else
|
||||
{
|
||||
while(NOT IsListEmpty((struct List *)&__memory_list))
|
||||
while(NOT IsMinListEmpty(&__memory_list))
|
||||
__free_memory_node((struct MemoryNode *)__memory_list.mlh_Head,NULL,0);
|
||||
}
|
||||
#endif /* __MEM_DEBUG */
|
||||
@ -478,12 +479,12 @@ STDLIB_DESTRUCTOR(stdlib_memory_exit)
|
||||
{
|
||||
#ifdef __MEM_DEBUG
|
||||
{
|
||||
while(NOT IsListEmpty((struct List *)&__memory_list))
|
||||
while(NOT IsMinListEmpty(&__memory_list))
|
||||
__free_memory_node((struct MemoryNode *)__memory_list.mlh_Head,__FILE__,__LINE__);
|
||||
}
|
||||
#else
|
||||
{
|
||||
while(NOT IsListEmpty((struct List *)&__memory_list))
|
||||
while(NOT IsMinListEmpty(&__memory_list))
|
||||
__free_memory_node((struct MemoryNode *)__memory_list.mlh_Head,NULL,0);
|
||||
}
|
||||
#endif /* __MEM_DEBUG */
|
||||
|
||||
@ -37,9 +37,13 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
|
||||
|
||||
int
|
||||
mbtowc(wchar_t *pwc, const char *s, size_t n)
|
||||
mbtowc(wchar_t *restrict pwc, const char *restrict s, size_t n)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(-1);
|
||||
errno = EILSEQ;
|
||||
return -1;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@ -41,7 +41,7 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
static const char * error_table[EILSEQ - EPERM + 1] =
|
||||
static const char * error_table[ENOTSUP - EPERM + 1] =
|
||||
{
|
||||
"Operation not permitted",
|
||||
"No such file or directory",
|
||||
@ -127,7 +127,8 @@ static const char * error_table[EILSEQ - EPERM + 1] =
|
||||
"Identifier removed",
|
||||
"No message of the desired type.",
|
||||
"Value too large to be stored in data type.",
|
||||
"Encoding error detected"
|
||||
"Encoding error detected",
|
||||
"Not supported"
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
@ -139,7 +140,7 @@ strerror_r(int number,char * buffer,size_t buffer_size)
|
||||
const char * str;
|
||||
size_t len;
|
||||
|
||||
if(number < EPERM || number > EILSEQ)
|
||||
if(number < EPERM || number > ENOTSUP)
|
||||
{
|
||||
__set_errno(EINVAL);
|
||||
goto out;
|
||||
|
||||
75
library/string_strnlen.c
Normal file
75
library/string_strnlen.c
Normal file
@ -0,0 +1,75 @@
|
||||
/*
|
||||
* $Id: string_strlen.c,v 1.4 2006-01-08 12:04:27 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _STDLIB_NULL_POINTER_CHECK_H
|
||||
#include "stdlib_null_pointer_check.h"
|
||||
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef _STRING_HEADERS_H
|
||||
#include "string_headers.h"
|
||||
#endif /* _STRING_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
size_t
|
||||
strnlen(const char *s, size_t maxlen)
|
||||
{
|
||||
const char * start = s;
|
||||
size_t result = 0;
|
||||
|
||||
assert( s != NULL );
|
||||
|
||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||
{
|
||||
if(s == NULL)
|
||||
{
|
||||
__set_errno(EFAULT);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||
|
||||
while((maxlen != 0) && ((*s) != '\0'))
|
||||
{
|
||||
s++;
|
||||
maxlen--;
|
||||
}
|
||||
|
||||
result = (size_t)(s - start);
|
||||
|
||||
out:
|
||||
|
||||
return(result);
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: time_mktime.c,v 1.10 2006-01-08 12:04:27 obarthel Exp $
|
||||
* $Id: time_mktime.c,v 1.11 2015-06-26 11:22:00 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -52,9 +52,10 @@ mktime(struct tm *tm)
|
||||
{
|
||||
DECLARE_UTILITYBASE();
|
||||
struct ClockData clock_data;
|
||||
ULONG seconds, delta;
|
||||
ULONG seconds;
|
||||
time_t result = (time_t)-1;
|
||||
int max_month_days;
|
||||
LONG combined_seconds;
|
||||
int month, year;
|
||||
|
||||
ENTER();
|
||||
|
||||
@ -73,116 +74,63 @@ mktime(struct tm *tm)
|
||||
}
|
||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||
|
||||
/* The month must be valid. */
|
||||
if(tm->tm_mon < 0 || tm->tm_mon > 11)
|
||||
/* Normalize the year and month. */
|
||||
year = tm->tm_year + 1900;
|
||||
month = tm->tm_mon + 1;
|
||||
|
||||
if(month < 0 || month > 12)
|
||||
{
|
||||
SHOWVALUE(tm->tm_mon);
|
||||
SHOWMSG("invalid month");
|
||||
goto out;
|
||||
int y;
|
||||
|
||||
y = month / 12;
|
||||
|
||||
month -= y * 12;
|
||||
year += y;
|
||||
}
|
||||
|
||||
/* The day of the month must be valid. */
|
||||
if(tm->tm_mday < 1 || tm->tm_mday > 31)
|
||||
if(month < 1)
|
||||
{
|
||||
SHOWVALUE(tm->tm_mday);
|
||||
SHOWMSG("invalid day of month");
|
||||
goto out;
|
||||
month += 12;
|
||||
year -= 1;
|
||||
}
|
||||
|
||||
/* The year must be valid. */
|
||||
if(tm->tm_year < 78)
|
||||
/* The year must be valid. Amiga time begins with January 1st, 1978. */
|
||||
if(year < 1978)
|
||||
{
|
||||
SHOWVALUE(tm->tm_year);
|
||||
SHOWVALUE(year);
|
||||
SHOWMSG("invalid year");
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Is this the month of February? */
|
||||
if(tm->tm_mon == 1)
|
||||
{
|
||||
int year;
|
||||
|
||||
/* We need to have the full year number for the
|
||||
leap year calculation below. */
|
||||
year = tm->tm_year + 1900;
|
||||
|
||||
/* Now for the famous leap year calculation rules... In
|
||||
the given year, how many days are there in the month
|
||||
of February? */
|
||||
if((year % 4) != 0)
|
||||
max_month_days = 28;
|
||||
else if ((year % 400) == 0)
|
||||
max_month_days = 29;
|
||||
else if ((year % 100) == 0)
|
||||
max_month_days = 28;
|
||||
else
|
||||
max_month_days = 29;
|
||||
}
|
||||
else
|
||||
{
|
||||
static const char days_per_month[12] =
|
||||
{
|
||||
31, 0,31,
|
||||
30,31,30,
|
||||
31,31,30,
|
||||
31,30,31
|
||||
};
|
||||
|
||||
max_month_days = days_per_month[tm->tm_mon];
|
||||
}
|
||||
|
||||
/* The day of the month must be valid. */
|
||||
if(tm->tm_mday < 0 || tm->tm_mday > max_month_days)
|
||||
{
|
||||
SHOWVALUE(tm->tm_mday);
|
||||
SHOWMSG("invalid day of month");
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* The hour must be valid. */
|
||||
if(tm->tm_hour < 0 || tm->tm_hour > 23)
|
||||
{
|
||||
SHOWVALUE(tm->tm_hour);
|
||||
SHOWMSG("invalid hour");
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* The minute must be valid. */
|
||||
if(tm->tm_min < 0 || tm->tm_min > 59)
|
||||
{
|
||||
SHOWVALUE(tm->tm_min);
|
||||
SHOWMSG("invalid minute");
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Note: the number of seconds can be larger than 59
|
||||
in order to account for leap seconds. */
|
||||
if(tm->tm_sec < 0 || tm->tm_sec > 60)
|
||||
{
|
||||
SHOWVALUE(tm->tm_sec);
|
||||
SHOWMSG("invalid seconds");
|
||||
goto out;
|
||||
}
|
||||
|
||||
clock_data.sec = (tm->tm_sec > 59) ? 59 : tm->tm_sec;
|
||||
clock_data.min = tm->tm_min;
|
||||
clock_data.hour = tm->tm_hour;
|
||||
clock_data.mday = tm->tm_mday;
|
||||
clock_data.month = tm->tm_mon + 1;
|
||||
clock_data.year = tm->tm_year + 1900;
|
||||
|
||||
seconds = Date2Amiga(&clock_data) + (tm->tm_sec - 59);
|
||||
|
||||
/* The AmigaOS "epoch" starts with January 1st, 1978, which was
|
||||
a Sunday. */
|
||||
tm->tm_wday = (seconds / (24 * 60 * 60)) % 7;
|
||||
|
||||
/* Convert the first day of the month in the given year
|
||||
into the corresponding number of seconds. */
|
||||
memset(&clock_data, 0, sizeof(clock_data));
|
||||
|
||||
clock_data.mday = 1;
|
||||
clock_data.month = 1;
|
||||
clock_data.month = month;
|
||||
clock_data.year = year;
|
||||
|
||||
delta = Date2Amiga(&clock_data);
|
||||
seconds = Date2Amiga(&clock_data);
|
||||
|
||||
tm->tm_yday = (seconds - delta) / (24 * 60 * 60);
|
||||
/* Put the combined number of seconds involved together,
|
||||
covering the seconds/minutes/hours of the day as well
|
||||
as the number of days of the month. This will be added
|
||||
to the number of seconds for the date. */
|
||||
combined_seconds = tm->tm_sec + 60 * (tm->tm_min + 60 * (tm->tm_hour + 24 * (tm->tm_mday-1)));
|
||||
|
||||
/* If the combined number of seconds is negative, adding it
|
||||
* to the number of seconds for the date should not produce
|
||||
* a negative value.
|
||||
*/
|
||||
if(combined_seconds < 0 && seconds < (ULONG)(-combined_seconds))
|
||||
{
|
||||
SHOWVALUE(seconds);
|
||||
SHOWVALUE(combined_seconds);
|
||||
SHOWMSG("invalid combined number of seconds");
|
||||
goto out;
|
||||
}
|
||||
|
||||
seconds += combined_seconds;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
@ -193,10 +141,13 @@ mktime(struct tm *tm)
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
/* Finally, adjust for the difference between the Unix and the
|
||||
/* Adjust for the difference between the Unix and the
|
||||
AmigaOS epochs, which differ by 8 years. */
|
||||
result = seconds + UNIX_TIME_OFFSET;
|
||||
|
||||
/* Finally, normalize the provided time and date information. */
|
||||
localtime_r(&result, tm);
|
||||
|
||||
out:
|
||||
|
||||
RETURN(result);
|
||||
|
||||
48
library/time_tzset.c
Normal file
48
library/time_tzset.c
Normal file
@ -0,0 +1,48 @@
|
||||
/*
|
||||
* $Id: $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2017 by Olaf Barthel <obarthel (at) gmx.net>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _TIME_HEADERS_H
|
||||
#include "time_headers.h"
|
||||
#endif /* _TIME_HEADERS_H */
|
||||
|
||||
#ifndef _LOCALE_HEADERS_H
|
||||
#include "locale_headers.h"
|
||||
#endif /* _LOCALE_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
tzset(void)
|
||||
{
|
||||
/* For now, do nothing. */
|
||||
}
|
||||
@ -69,7 +69,7 @@ CLIB_DESTRUCTOR(unistd_exit)
|
||||
|
||||
PROFILE_OFF();
|
||||
|
||||
if(__unlink_list.mlh_Head != NULL && NOT IsListEmpty((struct List *)&__unlink_list))
|
||||
if(__unlink_list.mlh_Head != NULL && NOT IsMinListEmpty(&__unlink_list))
|
||||
{
|
||||
struct UnlinkNode * uln;
|
||||
BPTR old_dir;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: unistd_translateu2a.c,v 1.12 2010-08-20 15:33:36 obarthel Exp $
|
||||
* $Id: unistd_translateu2a.c,v 1.13 2015-06-26 11:22:00 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -477,7 +477,10 @@ __translate_unix_to_amiga_path_name(char const ** name_ptr,struct name_translati
|
||||
for(i = j = 0 ; i < len ; i++)
|
||||
{
|
||||
if(i < len - 3 && name[i] == '/' && name[i + 1] == '.' && name[i + 2] == '.' && name[i + 3] == '/')
|
||||
i += 2;
|
||||
{
|
||||
replace[j++] = '/';
|
||||
i += 3;
|
||||
}
|
||||
|
||||
replace[j++] = name[i];
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 214
|
||||
#define DATE "27.4.2017"
|
||||
#define VERS "unix.lib 1.214"
|
||||
#define VSTRING "unix.lib 1.214 (27.4.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: unix.lib 1.214 (27.4.2017)"
|
||||
#define REVISION 215
|
||||
#define DATE "26.6.2017"
|
||||
#define VERS "unix.lib 1.215"
|
||||
#define VSTRING "unix.lib 1.215 (26.6.2017)\r\n"
|
||||
#define VERSTAG "\0$VER: unix.lib 1.215 (26.6.2017)"
|
||||
|
||||
@ -1 +1 @@
|
||||
214
|
||||
215
|
||||
|
||||
@ -37,9 +37,12 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
|
||||
size_t
|
||||
mbrlen(wchar_t *pwc, const char * s, size_t n, mbstate_t *ps)
|
||||
mbrlen(const char *restrict s, size_t n, mbstate_t *restrict ps)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
}
|
||||
#endif /* __STDC_VERSION__ && __STDC_VERSION__ >= 199901L */
|
||||
|
||||
|
||||
64
library/wchar_mbrtowc.c
Normal file
64
library/wchar_mbrtowc.c
Normal file
@ -0,0 +1,64 @@
|
||||
/*
|
||||
* $Id: wchar_mbrlen.c,v 1.3 2006-01-08 12:04:27 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _WCHAR_HEADERS_H
|
||||
#include "wchar_headers.h"
|
||||
#endif /* _WCHAR_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Mostly non-working stub based on bionic */
|
||||
|
||||
#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)
|
||||
size_t
|
||||
mbrtowc(wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)
|
||||
{
|
||||
if (s == NULL)
|
||||
{
|
||||
s = "";
|
||||
pwc = NULL;
|
||||
}
|
||||
|
||||
if (n == 0)
|
||||
{
|
||||
if (pwc)
|
||||
*pwc = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (pwc)
|
||||
*pwc = *s;
|
||||
|
||||
return (*s != 0);
|
||||
}
|
||||
#endif /* __STDC_VERSION__ && __STDC_VERSION__ >= 199901L */
|
||||
@ -40,6 +40,5 @@
|
||||
int
|
||||
mbsinit(const mbstate_t *ps)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return !ps || !*(unsigned *)ps;
|
||||
}
|
||||
|
||||
@ -38,7 +38,7 @@
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
vswprintf(char *s, const wchar_t *format,va_list arg)
|
||||
vswprintf(wchar_t *s, size_t maxlen, const wchar_t *format, va_list arg)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
|
||||
@ -35,11 +35,13 @@
|
||||
#include "wchar_headers.h"
|
||||
#endif /* _WCHAR_HEADERS_H */
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
wchar_t *
|
||||
wcscat(wchar_t *dest, const wchar_t *src)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(NULL);
|
||||
wcscpy(dest + wcslen(dest), src);
|
||||
return dest;
|
||||
}
|
||||
|
||||
@ -37,9 +37,12 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
wchar_t *
|
||||
wcschr(const wchar_t *s, wchar_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(NULL);
|
||||
if (!c) return (wchar_t *)s + wcslen(s);
|
||||
for (; *s && *s != c; s++);
|
||||
return *s ? (wchar_t *)s : 0;
|
||||
}
|
||||
|
||||
@ -40,6 +40,6 @@
|
||||
int
|
||||
wcscmp(const wchar_t *s1, const wchar_t * s2)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
for (; *s1==*s2 && *s1 && *s2; s1++, s2++);
|
||||
return *s1 - *s2;
|
||||
}
|
||||
|
||||
45
library/wchar_wcscoll.c
Normal file
45
library/wchar_wcscoll.c
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* $Id: wchar_wscoll.c,v 1.3 2006-01-08 12:04:27 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _WCHAR_HEADERS_H
|
||||
#include "wchar_headers.h"
|
||||
#endif /* _WCHAR_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
wcscoll(const wchar_t *ws1, const wchar_t *ws2)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
}
|
||||
@ -40,6 +40,7 @@
|
||||
wchar_t *
|
||||
wcscpy(wchar_t *dest, const wchar_t *src)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(NULL);
|
||||
wchar_t *a = dest;
|
||||
while ((*dest++ = *src++));
|
||||
return a;
|
||||
}
|
||||
|
||||
50
library/wchar_wcscspn.c
Normal file
50
library/wchar_wcscspn.c
Normal file
@ -0,0 +1,50 @@
|
||||
/*
|
||||
* $Id: wchar_wcsspn.c,v 1.3 2006-01-08 12:04:27 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _WCHAR_HEADERS_H
|
||||
#include "wchar_headers.h"
|
||||
#endif /* _WCHAR_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
size_t
|
||||
wcscspn(const wchar_t *s, const wchar_t *c)
|
||||
{
|
||||
const wchar_t *a;
|
||||
if (!c[0]) return wcslen(s);
|
||||
if (!c[1]) return (s=wcschr(a=s, *c)) ? (size_t)(s-a) : wcslen(a);
|
||||
for (a=s; *s && !wcschr(c, *s); s++);
|
||||
return s-a;
|
||||
}
|
||||
@ -37,9 +37,12 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
size_t
|
||||
wcslen(const wchar_t *s)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
const wchar_t *a;
|
||||
for (a=s; *s; s++);
|
||||
return s-a;
|
||||
}
|
||||
|
||||
@ -37,9 +37,14 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
wchar_t *
|
||||
wcsncat(wchar_t *dest, const wchar_t *src, size_t n)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(NULL);
|
||||
wchar_t *a = dest;
|
||||
dest += wcslen(dest);
|
||||
while (n && *src) n--, *dest++ = *src++;
|
||||
*dest++ = 0;
|
||||
return a;
|
||||
}
|
||||
|
||||
@ -37,9 +37,11 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
int
|
||||
wcsncmp(const wchar_t *s1, const wchar_t *s2, size_t n)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
for (; n && *s1==*s2 && *s1 && *s2; n--, s1++, s2++);
|
||||
return n ? *s1 - *s2 : 0;
|
||||
}
|
||||
|
||||
@ -37,9 +37,13 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
wchar_t *
|
||||
wcsncpy(wchar_t *dest, const wchar_t *src, size_t n)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(NULL);
|
||||
wchar_t *a = dest;
|
||||
while (n && *src) n--, *dest++ = *src++;
|
||||
wmemset(dest, 0, n);
|
||||
return a;
|
||||
}
|
||||
|
||||
@ -37,7 +37,7 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
wchar_t
|
||||
wchar_t *
|
||||
wcspbrk(const wchar_t *s, const wchar_t *set)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
|
||||
45
library/wchar_wctob.c
Normal file
45
library/wchar_wctob.c
Normal file
@ -0,0 +1,45 @@
|
||||
/*
|
||||
* $Id: wchar_wmemchr.c,v 1.3 2006-01-08 12:04:27 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2015 by Olaf Barthel <obarthel (at) gmx.net>
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Neither the name of Olaf Barthel nor the names of contributors
|
||||
* may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _WCHAR_HEADERS_H
|
||||
#include "wchar_headers.h"
|
||||
#endif /* _WCHAR_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
wctob(wint_t c)
|
||||
{
|
||||
if (c < 128U) return c;
|
||||
return EOF;
|
||||
}
|
||||
@ -37,9 +37,11 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
wchar_t *
|
||||
wmemchr(const wchar_t *ptr, wchar_t val, size_t len)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(NULL);
|
||||
for (; len && *ptr != val; len--, ptr++);
|
||||
return len ? (wchar_t *)ptr : 0;
|
||||
}
|
||||
|
||||
@ -37,9 +37,11 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
int
|
||||
wmemcmp(const wchar_t *ptr1, const wchar_t *ptr2, size_t len)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
for (; len && *ptr1==*ptr2; len--, ptr1++, ptr2++);
|
||||
return len ? *ptr1-*ptr2 : 0;
|
||||
}
|
||||
|
||||
@ -37,9 +37,12 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
wchar_t *
|
||||
wmemcpy(wchar_t *dest, const wchar_t *src, size_t len)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(NULL);
|
||||
wchar_t *a = dest;
|
||||
while (len--) *dest++ = *src++;
|
||||
return a;
|
||||
}
|
||||
|
||||
@ -37,9 +37,15 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
wchar_t *
|
||||
wmemmove(wchar_t *dest, const wchar_t * src, size_t len)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(NULL);
|
||||
wchar_t *d0 = dest;
|
||||
if ((size_t)(dest-src) < len)
|
||||
while (len--) dest[len] = src[len];
|
||||
else
|
||||
while (len--) *dest++ = *src++;
|
||||
return d0;
|
||||
}
|
||||
|
||||
@ -37,9 +37,12 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
wchar_t *
|
||||
wmemset(wchar_t *ptr, int val, size_t len)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(NULL);
|
||||
wchar_t *ret = ptr;
|
||||
while (len--) *ptr++ = val;
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -37,9 +37,10 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
int
|
||||
iswalnum(wint_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return iswdigit(c) || iswalpha(c);
|
||||
}
|
||||
|
||||
@ -35,11 +35,12 @@
|
||||
#include <wctype.h>
|
||||
#endif /* _WCTYPE_HEADERS_H */
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
iswalpha(wint_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return isalpha(c);
|
||||
}
|
||||
|
||||
@ -35,11 +35,14 @@
|
||||
#include <wctype.h>
|
||||
#endif /* _WCTYPE_HEADERS_H */
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Implementation based on musl */
|
||||
|
||||
int
|
||||
iswblank(wint_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return isblank(c);
|
||||
}
|
||||
|
||||
@ -35,11 +35,12 @@
|
||||
#include <wctype.h>
|
||||
#endif /* _WCTYPE_HEADERS_H */
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
iswcntrl(wint_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return iscntrl(c);
|
||||
}
|
||||
|
||||
@ -35,11 +35,12 @@
|
||||
#include <wctype.h>
|
||||
#endif /* _WCTYPE_HEADERS_H */
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
iswdigit(wint_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return isdigit(c);
|
||||
}
|
||||
|
||||
@ -35,11 +35,12 @@
|
||||
#include <wctype.h>
|
||||
#endif /* _WCTYPE_HEADERS_H */
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
iswgraph(wint_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return isgraph(c);
|
||||
}
|
||||
|
||||
@ -35,11 +35,12 @@
|
||||
#include <wctype.h>
|
||||
#endif /* _WCTYPE_HEADERS_H */
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
iswlower(wint_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return islower(c);
|
||||
}
|
||||
|
||||
@ -35,11 +35,12 @@
|
||||
#include <wctype.h>
|
||||
#endif /* _WCTYPE_HEADERS_H */
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
iswpunc(wint_t c)
|
||||
iswpunct(wint_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return ispunct(c);
|
||||
}
|
||||
|
||||
@ -35,11 +35,12 @@
|
||||
#include <wctype.h>
|
||||
#endif /* _WCTYPE_HEADERS_H */
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
iswspace(wint_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return isspace(c);
|
||||
}
|
||||
|
||||
@ -35,11 +35,12 @@
|
||||
#include <wctype.h>
|
||||
#endif /* _WCTYPE_HEADERS_H */
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
iswupper(wint_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return isupper(c);
|
||||
}
|
||||
|
||||
@ -35,11 +35,12 @@
|
||||
#include <wctype.h>
|
||||
#endif /* _WCTYPE_HEADERS_H */
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
iswxdigit(wint_t c)
|
||||
{
|
||||
/* ZZZ unimplemented */
|
||||
return(0);
|
||||
return isxdigit(c);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user