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

1 Commits

Author SHA1 Message Date
Olaf Barthel
c10f9dca91 This commit was manufactured by cvs2svn to create tag 'V1_176'.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/tags/V1_176@14734 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-09-27 15:11:21 +00:00
68 changed files with 789 additions and 924 deletions

View File

@@ -1,5 +1,5 @@
#
# $Id: GNUmakefile.68k,v 1.13 2004-10-26 16:25:03 obarthel Exp $
# $Id: GNUmakefile.68k,v 1.9 2004-09-20 17:16:06 obarthel Exp $
#
# :ts=8
#
@@ -9,7 +9,7 @@
CC = gcc
AR = ar -q
RANLIB = ranlib
COPY = copy clone buf=0
COPY = copy clone
DELETE = delete all quiet
MAKEDIR = makedir
MAKE = make -f GNUmakefile.68k
@@ -40,7 +40,7 @@ endif
.c.o:
@echo "Compiling $<"
@$(CC) -c $(CFLAGS) $<
@$(CC) -c $(CFLAGS) -DIEEE_FLOATING_POINT_SUPPORT $<
$(LIBC_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):c]"
@@ -147,6 +147,7 @@ C_LIB = \
fcntl_get_default_file.o \
libgen_basename.o \
libgen_dirname.o \
locale_data.o \
locale_init_exit.o \
locale_localeconv.o \
locale_setlocale.o \
@@ -317,6 +318,7 @@ C_LIB = \
stdlib_udivsi4.o \
stdlib_umodsi3.o \
stdlib_unsetenv.o \
stdlib_usergroup.o \
stdlib_wildcard_expand.o \
strings_strcasecmp.o \
strings_strncasecmp.o \
@@ -362,9 +364,9 @@ C_LIB = \
time_time.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_currentpathname.o \
unistd_data.o \
unistd_dup.o \
unistd_dup2.o \
unistd_fchown.o \
@@ -382,11 +384,8 @@ C_LIB = \
unistd_realpath.o \
unistd_sleep.o \
unistd_symlink.o \
unistd_timer.o \
unistd_time_delay.o \
unistd_truncate.o \
unistd_unlink.o \
unistd_usleep.o \
utime_utime.o
UNIX_LIB = \
@@ -425,7 +424,6 @@ UNIX_LIB = \
stdlib_system.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_getcwd.o \
unistd_lchown.o \
@@ -688,6 +686,7 @@ LIBS_68K := $(LIBC_OBJS)/libc.a $(LIBSTACK_OBJS)/libstack.a $(LIBUNIX_OBJS)/libu
$(LIBNET_OBJS)/libnet.a $(LIBDEBUG_OBJS)/libdebug.a $(LIBAMIGA_OBJS)/libamiga.a \
$(LIBM_OBJS)/libm.a
LIBS_020 := $(LIBM881_OBJS)/libm881.a $(LIBS_68K)
#LIBS_020 := $(LIBS_68K)
##############################################################################
@@ -713,8 +712,8 @@ all: \
lib/mainnb.o \
lib/mainb.o \
lib/mainb32.o \
lib/libm020/libm.a \
lib/libm.a \
lib/libm020/libm.a \
lib/libb/libm.a \
lib/libb/libm020/libm.a \
lib/libb32/libm020/libm.a

View File

@@ -1,5 +1,5 @@
#
# $Id: GNUmakefile.os4,v 1.12 2004-10-07 11:03:46 tfrieden Exp $
# $Id: GNUmakefile.os4,v 1.8 2004-09-27 15:04:51 tfrieden Exp $
#
# :ts=8
#
@@ -53,7 +53,7 @@ endif
%.o : %.c
@echo "Compiling $<"
@$(CC) -c $(CFLAGS) $<
@$(CC) -c $(CFLAGS) -DPPC_FLOATING_POINT_SUPPORT $<
$(LIBC_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):c]"
@@ -65,7 +65,7 @@ $(LIBUNIX_OBJS)/%.o : %.c
$(LIBM_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):m]"
@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) $(FLOAT_TYPE) $<
@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) $<
$(LIBSTACK_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):stack]"
@@ -86,18 +86,15 @@ $(LIBAMIGA_OBJS)/%.o : %.c
##############################################################################
ifeq (small_data,$(TYPE))
CODE_TYPE := -msdata=sysv -DSMALL_DATA
FLOAT_TYPE := -DPPC_FLOATING_POINT_SUPPORT
CODE_TYPE := -msdata=sysv -DSMALL_DATA -DPPC_FLOATING_POINT_SUPPORT
endif
ifeq (large_data,$(TYPE))
CODE_TYPE := -msdata=data
FLOAT_TYPE := -DPPC_FLOATING_POINT_SUPPORT
CODE_TYPE := -msdata=data -DPPC_FLOATING_POINT_SUPPORT
endif
ifeq (large_data_softfloat, $(TYPE))
CODE_TYPE := -msdata=data -msoft-float
FLOAT_TYPE :=
endif
##############################################################################
@@ -108,7 +105,7 @@ WARNINGS = \
INCLUDES = -Iinclude -I. -I$(SDK_INCLUDE)
OPTIONS = -DNDEBUG -DUSE_64_BIT_INTS -fno-builtin -D__USE_INLINE__ -Wa,-mregnames
OPTIMIZE = -O -fomit-frame-pointer -funroll-loops
OPTIMIZE = -O3 -fomit-frame-pointer -funroll-loops
#DEBUG = -g
CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDES)
@@ -148,6 +145,7 @@ C_LIB = \
fcntl_get_default_file.o \
libgen_basename.o \
libgen_dirname.o \
locale_data.o \
locale_init_exit.o \
locale_localeconv.o \
locale_setlocale.o \
@@ -315,6 +313,7 @@ C_LIB = \
stdlib_termination_message.o \
stdlib_threshold.o \
stdlib_unsetenv.o \
stdlib_usergroup.o \
stdlib_wildcard_expand.o \
strings_strcasecmp.o \
strings_strncasecmp.o \
@@ -360,9 +359,9 @@ C_LIB = \
time_time.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_currentpathname.o \
unistd_data.o \
unistd_dup.o \
unistd_dup2.o \
unistd_fchown.o \
@@ -380,11 +379,8 @@ C_LIB = \
unistd_realpath.o \
unistd_sleep.o \
unistd_symlink.o \
unistd_time_delay.o \
unistd_timer.o \
unistd_truncate.o \
unistd_unlink.o \
unistd_usleep.o \
utime_utime.o
@@ -424,7 +420,6 @@ UNIX_LIB = \
stdlib_system.o \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_getcwd.o \
unistd_lchown.o \
@@ -711,7 +706,7 @@ clean:
realclean:
$(MAKE) clean
-$(DELETE) lib small_data large_data large_data_softfloat
-$(DELETE) lib small_data large_data
##############################################################################

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 182
#define DATE "8.11.2004"
#define VERS "amiga.lib 1.182"
#define VSTRING "amiga.lib 1.182 (8.11.2004)\r\n"
#define VERSTAG "\0$VER: amiga.lib 1.182 (8.11.2004)"
#define REVISION 176
#define DATE "27.9.2004"
#define VERS "amiga.lib 1.176"
#define VSTRING "amiga.lib 1.176 (27.9.2004)\r\n"
#define VERSTAG "\0$VER: amiga.lib 1.176 (27.9.2004)"

View File

@@ -1 +1 @@
182
176

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 182
#define DATE "8.11.2004"
#define VERS "c.lib 1.182"
#define VSTRING "c.lib 1.182 (8.11.2004)\r\n"
#define VERSTAG "\0$VER: c.lib 1.182 (8.11.2004)"
#define REVISION 176
#define DATE "27.9.2004"
#define VERS "c.lib 1.176"
#define VSTRING "c.lib 1.176 (27.9.2004)\r\n"
#define VERSTAG "\0$VER: c.lib 1.176 (27.9.2004)"

View File

@@ -1 +1 @@
182
176

View File

@@ -1,101 +1,6 @@
c.lib 1.182 (8.11.2004)
- Changed the error abort condition for the %s conversion of the
scanf() family. It now matches the abort conditions for all other
conversions and no longer ignores whether any other parameters were
converted before. This was a quirk in the older implementation.
- The scanf() family now accepts %E and %G in place of %f and %X in
place of %x.
- Simplified the common code that fopen(), freopen() and fdopen()
share and which has to figure out by looking at a file access
mode specification which parameters should be used.
- Dropped error detection in the scanf() family. The EOF has to be
good enough. Also, ungetc() failure still leads to error handling.
c.lib 1.181 (26.10.2004)
- The scanf() family now always returns the number of assignments made
unless an error occured or an EOF was hit during conversion before the
first assignment could be made.
- strtok() did not terminate properly if the last token in the string
did not end with a separator character but with a '\0' byte. Fixed.
- The directory scanning functions opendir/closedir did not get the global
directory data tracking data structure initialized which later led to
Enforcer hits and maybe trashed memory. Fixed.
c.lib 1.180 (23.10.2004)
- The printf() family now produces no output at all for %e, %f and %g if the
floating point support code is disabled. Previously, a minimum field width
specification could take effect, printing a series of 0 or blank space
characters where no output should have been produced.
c.lib 1.179 (22.10.2004)
- The scanf() family no longer assumes that a leading '0' indicates that the
following digits form an octal number if the conversion type has been
specified as already '%x' already.
c.lib 1.178 (7.10.2004)
- The OS4 version had floating point math support code enabled in all
libraries and not just "libm.a". Fixed.
c.lib 1.177 (29.9.2004)
- Moved the locale initialization/cleanup code into constructors
and destructors.
- The socket cleanup function is now a destructor.
- The math cleanup function is now a destructor.
- The wildcard cleanup function is now a destructor.
- The stdio cleanup function is now a destructor.
- The stack extension cleanup function is now a destructor.
- The code that cleans up after the program's current directory
was changed is now a destructor function.
- Moved the initialization/cleanup code for unlink() into constructors
and destructors.
- Moved the initialization/cleanup code for usergroup.library into
constructors and destructors.
- Added usleep(), and created wrapper code that both sleep() and
usleep() can use.
- Added strtoll() and strtoull(), with further changes to <limits.h>
and <stdlib.h>.
- The socket exit code now calls the common stdio function which
flushes and shuts down all buffered and unbuffered files.
- Fixed the stack swapping function which, for reasons unknown, ceased
to work...
- The start time used by clock() is now initialized by a constructor
function.
- NOTE THAT ALL THE CHANGES WITH REGARD TO USE OF DESTRUCTOR AND
CONSTRUCTOR FUNCTIONS REQUIRE A COMPLETE REBUILD OF THE LIBRARY! IF
YOU DO NOT DO THIS, THE CONSTRUCTOR/DESTRUCTOR FUNCTIONS MAY NOT
GET CALLED.
c.lib 1.175 (10.9.2004)

View File

@@ -1,5 +1,5 @@
/*
* $Id: crtbegin.c,v 1.3 2004-09-29 16:54:54 obarthel Exp $
* $Id: crtbegin.c,v 1.1.1.1 2004-07-26 16:30:22 obarthel Exp $
*
* :ts=4
*

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 182
#define DATE "8.11.2004"
#define VERS "debug.lib 1.182"
#define VSTRING "debug.lib 1.182 (8.11.2004)\r\n"
#define VERSTAG "\0$VER: debug.lib 1.182 (8.11.2004)"
#define REVISION 176
#define DATE "27.9.2004"
#define VERS "debug.lib 1.176"
#define VSTRING "debug.lib 1.176 (27.9.2004)\r\n"
#define VERSTAG "\0$VER: debug.lib 1.176 (27.9.2004)"

View File

@@ -1 +1 @@
182
176

View File

@@ -1,5 +1,5 @@
/*
* $Id: dirent_data.c,v 1.4 2004-10-24 20:03:42 obarthel Exp $
* $Id: dirent_data.c,v 1.3 2004-08-07 10:24:04 obarthel Exp $
*
* :ts=4
*
@@ -38,7 +38,7 @@
/****************************************************************************/
/* Directories being scanned whose locks need to be freed when shutting down. */
struct MinList NOCOMMON __directory_list;
struct MinList __directory_list;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: dirent_headers.h,v 1.2 2004-10-24 20:03:42 obarthel Exp $
* $Id: dirent_headers.h,v 1.1.1.1 2004-07-26 16:30:30 obarthel Exp $
*
* :ts=4
*
@@ -42,12 +42,6 @@
/****************************************************************************/
#ifndef _MACROS_H
#include "macros.h"
#endif /* _MACROS_H */
/****************************************************************************/
struct DirectoryHandle
{
struct MinNode dh_MinNode;
@@ -62,7 +56,7 @@ struct DirectoryHandle
/****************************************************************************/
extern struct MinList NOCOMMON __directory_list;
extern struct MinList __directory_list;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: time.h,v 1.7 2004-09-29 10:15:57 obarthel Exp $
* $Id: time.h,v 1.6 2004-09-10 07:39:20 obarthel Exp $
*
* :ts=4
*
@@ -77,9 +77,6 @@ extern "C" {
#include <devices/timer.h>
#endif /* DEVICES_TIMER_H */
/* Assume that the 'struct timeval' definition is now in place. */
#define __TIMEVAL_ALREADY_DEFINED
/****************************************************************************/
#endif /* INCLUDE_VERSION */

View File

@@ -1,5 +1,5 @@
/*
* $Id: unistd.h,v 1.6 2004-09-29 14:17:46 obarthel Exp $
* $Id: unistd.h,v 1.4 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -52,13 +52,6 @@ extern "C" {
/****************************************************************************/
/* Endianness: we assume a big endian memory layout (for 68k and PowerPC). */
#define LITTLE_ENDIAN 1234
#define BIG_ENDIAN 4321
#define BYTE_ORDER BIG_ENDIAN
/****************************************************************************/
#define STDIN_FILENO 0
#define STDOUT_FILENO 1
#define STDERR_FILENO 2
@@ -94,7 +87,6 @@ extern int symlink(const char * actual_path, const char * symbolic_path);
extern int readlink(const char * path_name, char * buffer, int buffer_size);
extern int chdir(const char * path_name);
extern unsigned int sleep(unsigned int seconds);
extern void usleep(unsigned long microseconds);
extern int getopt(int argc, char * argv[], char *opts);
extern pid_t getpid(void);
extern char *realpath(const char *file_name, char *resolved_name);
@@ -208,32 +200,28 @@ extern int h_errno;
/****************************************************************************/
typedef int socklen_t;
/****************************************************************************/
extern int accept(int sockfd,struct sockaddr *cliaddr,socklen_t *addrlen);
extern int accept(int sockfd,struct sockaddr *cliaddr,int *addrlen);
extern int bind(int sockfd,struct sockaddr *name,int namelen);
extern int connect(int sockfd,struct sockaddr *name,socklen_t namelen);
extern struct hostent * gethostbyaddr(const char *addr, socklen_t len, int type);
extern int connect(int sockfd,struct sockaddr *name,int namelen);
extern struct hostent * gethostbyaddr(const char *addr, int len, int type);
extern struct hostent * gethostbyname(const char *name);
extern int gethostname(const char *name, int namelen);
extern struct netent * getnetbyname(const char *name);
extern int getpeername(int sockfd,struct sockaddr *name,socklen_t *namelen);
extern int getsockname(int sockfd,struct sockaddr *name,socklen_t *namelen);
extern int getsockopt(int sockfd,int level,int optname,void *optval,socklen_t *optlen);
extern int getpeername(int sockfd,struct sockaddr *name,int *namelen);
extern int getsockname(int sockfd,struct sockaddr *name,int *namelen);
extern int getsockopt(int sockfd,int level,int optname,void *optval,int *optlen);
extern unsigned long inet_addr(const char *addr);
extern char * inet_ntoa(struct in_addr in);
extern int ioctl(int fd,unsigned long request, ... /* char *arg */);
extern int listen(int sockfd,int backlog);
extern int recv(int fd,void *buff,size_t nbytes,int flags);
extern int recvfrom(int sockfd,void *buff,int len,int flags,struct sockaddr *from,socklen_t *fromlen);
extern int recvfrom(int sockfd,void *buff,int len,int flags,struct sockaddr *from,int *fromlen);
extern int recvmsg(int socket,struct msghdr *msg,int flags);
extern int select(int num_fds,fd_set *read_fds,fd_set *write_fds,fd_set *except_fds,struct timeval *timeout);
extern int send(int fd,const void *buff,size_t nbytes,int flags);
extern int send(int fd,void *buff,size_t nbytes,int flags);
extern int sendmsg(int socket,struct msghdr *msg,int flags);
extern int sendto(int sockfd,const void *buff,int len,int flags,struct sockaddr *to,socklen_t tolen);
extern int setsockopt(int sockfd,int level,int optname,const void *optval,socklen_t optlen);
extern int sendto(int sockfd,void *buff,int len,int flags,struct sockaddr *to,int tolen);
extern int setsockopt(int sockfd,int level,int optname,void *optval,int optlen);
extern int shutdown(int socket, int how);
extern int socket(int domain,int type,int protocol);
extern long gethostid(void);

45
library/locale_data.c Normal file
View File

@@ -0,0 +1,45 @@
/*
* $Id: locale_data.c,v 1.1.1.1 2004-07-26 16:30:35 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2004 by Olaf Barthel <olsen@sourcery.han.de>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Neither the name of Olaf Barthel nor the names of contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _LOCALE_HEADERS_H
#include "locale_headers.h"
#endif /* _LOCALE_HEADERS_H */
/****************************************************************************/
struct Locale * __default_locale;
struct Locale * __locale_table[NUM_LOCALES];
/****************************************************************************/
char __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];

View File

@@ -1,5 +1,5 @@
/*
* $Id: locale_headers.h,v 1.2 2004-09-29 19:57:57 obarthel Exp $
* $Id: locale_headers.h,v 1.1.1.1 2004-07-26 16:30:35 obarthel Exp $
*
* :ts=4
*
@@ -69,12 +69,12 @@
/****************************************************************************/
extern struct Locale * NOCOMMON __default_locale;
extern struct Locale * NOCOMMON __locale_table[NUM_LOCALES];
extern struct Locale * __default_locale;
extern struct Locale * __locale_table[NUM_LOCALES];
/****************************************************************************/
extern char NOCOMMON __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];
extern char __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: locale_init_exit.c,v 1.3 2004-09-29 19:57:57 obarthel Exp $
* $Id: locale_init_exit.c,v 1.1.1.1 2004-07-26 16:30:35 obarthel Exp $
*
* :ts=4
*
@@ -41,25 +41,6 @@
/****************************************************************************/
struct Library * NOCOMMON __LocaleBase;
/****************************************************************************/
#if defined(__amigaos4__)
struct LocaleIFace * NOCOMMON __ILocale;
#endif /* __amigaos4__ */
/****************************************************************************/
struct Locale * NOCOMMON __default_locale;
struct Locale * NOCOMMON __locale_table[NUM_LOCALES];
/****************************************************************************/
char NOCOMMON __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];
/****************************************************************************/
void
__close_all_locales(void)
{
@@ -90,7 +71,8 @@ __close_all_locales(void)
/****************************************************************************/
CLIB_DESTRUCTOR(__locale_exit)
void
__locale_exit(void)
{
ENTER();
@@ -125,7 +107,8 @@ CLIB_DESTRUCTOR(__locale_exit)
/****************************************************************************/
CLIB_CONSTRUCTOR(__locale_init)
int
__locale_init(void)
{
int i;
@@ -162,6 +145,5 @@ CLIB_CONSTRUCTOR(__locale_init)
PROFILE_ON();
RETURN(OK);
CONSTRUCTOR_SUCCEED();
return(OK);
}

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 182
#define DATE "8.11.2004"
#define VERS "m.lib 1.182"
#define VSTRING "m.lib 1.182 (8.11.2004)\r\n"
#define VERSTAG "\0$VER: m.lib 1.182 (8.11.2004)"
#define REVISION 176
#define DATE "27.9.2004"
#define VERS "m.lib 1.176"
#define VSTRING "m.lib 1.176 (27.9.2004)\r\n"
#define VERSTAG "\0$VER: m.lib 1.176 (27.9.2004)"

View File

@@ -1 +1 @@
182
176

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 182
#define DATE "8.11.2004"
#define VERS "m881.lib 1.182"
#define VSTRING "m881.lib 1.182 (8.11.2004)\r\n"
#define VERSTAG "\0$VER: m881.lib 1.182 (8.11.2004)"
#define REVISION 176
#define DATE "27.9.2004"
#define VERS "m881.lib 1.176"
#define VSTRING "m881.lib 1.176 (27.9.2004)\r\n"
#define VERSTAG "\0$VER: m881.lib 1.176 (27.9.2004)"

View File

@@ -1 +1 @@
182
176

View File

@@ -1,5 +1,5 @@
/*
* $Id: macros.h,v 1.2 2004-09-29 19:57:57 obarthel Exp $
* $Id: macros.h,v 1.1.1.1 2004-07-26 16:30:36 obarthel Exp $
*
* :ts=4
*
@@ -148,10 +148,8 @@
#ifndef UNUSED
#ifdef __GNUC__
#define UNUSED __attribute__((unused))
#define NOCOMMON __attribute__((nocommon))
#else
#define UNUSED /* UNUSED */
#define NOCOMMON /* NOCOMMON */
#endif
#endif /* UNUSED */

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_fabs.c,v 1.4 2004-09-29 14:30:03 obarthel Exp $
* $Id: math_fabs.c,v 1.2 2004-09-27 15:06:16 tfrieden Exp $
*
* :ts=4
*
@@ -126,14 +126,8 @@ __fabs(double x)
/****************************************************************************/
#if defined(__PPC__)
/****************************************************************************/
#if defined(PPC_FLOATING_POINT_SUPPORT)
/****************************************************************************/
INLINE static const double
__fabs(double x)
{
@@ -147,35 +141,21 @@ __fabs(double x)
}
/****************************************************************************/
#else
/****************************************************************************/
INLINE static const double
__fabs(double x)
{
double res;
if(x < 0)
res = (-x);
if (x > 0)
return x;
else
res = x;
return res;
return -x;
}
/****************************************************************************/
#endif /* PPC_FLOATING_POINT_SUPPORT */
/****************************************************************************/
#endif /* __PPC__ */
/****************************************************************************/
double
fabs(double x)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: math_init_exit.c,v 1.5 2004-09-29 19:57:57 obarthel Exp $
* $Id: math_init_exit.c,v 1.3 2004-08-21 18:57:40 obarthel Exp $
*
* :ts=4
*
@@ -53,10 +53,9 @@
/****************************************************************************/
CLIB_DESTRUCTOR(__math_exit)
void
__math_exit(void)
{
ENTER();
#if defined(IEEE_FLOATING_POINT_SUPPORT)
{
if(MathIeeeSingBasBase != NULL)
@@ -78,8 +77,6 @@ CLIB_DESTRUCTOR(__math_exit)
}
}
#endif /* IEEE_FLOATING_POINT_SUPPORT */
LEAVE();
}
/****************************************************************************/

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 182
#define DATE "8.11.2004"
#define VERS "net.lib 1.182"
#define VSTRING "net.lib 1.182 (8.11.2004)\r\n"
#define VERSTAG "\0$VER: net.lib 1.182 (8.11.2004)"
#define REVISION 176
#define DATE "27.9.2004"
#define VERS "net.lib 1.176"
#define VSTRING "net.lib 1.176 (27.9.2004)\r\n"
#define VERSTAG "\0$VER: net.lib 1.176 (27.9.2004)"

View File

@@ -1 +1 @@
182
176

View File

@@ -1,10 +1,11 @@
c.lib 1.180 (23.10.2004)
c.lib 1.175 (10.9.2004)
- The printf() family now produces no output at all for floating point
numbers (%e, %f and %g) if the floating point support code is disabled.
In previous versions of the library some output (series of 0 or blank
space characters) could still be produced.
- The timeval definition in <sys/time.h> can now be used without
having to include <exec/types.h> and <devices/timer.h>. Just
define the __USE_CLIB2_TIMEVAL preprocessor symbol. However,
this is intended only for code which for certain reasons cannot
include these header files. Don't use this approach if your
code may include <devices/timer.h> at some point.
- The scanf() family no longer ignores a conversion request of
type '%x' (hexadecimal) and treats the number to be processed
as in octal notation if that number begins with the digit 0.
- The sprintf() function family did not properly terminate the
output string if the format string itself was empty. Fixed.

View File

@@ -1,5 +1,5 @@
#
# $Id: smakefile,v 1.10 2004-09-29 14:17:44 obarthel Exp $
# $Id: smakefile,v 1.8 2004-09-20 17:16:06 obarthel Exp $
#
# :ts=8
#
@@ -171,6 +171,7 @@ LIBGEN_OBJ = \
libgen_dirname.o
LOCALE_OBJ = \
locale_data.o \
locale_init_exit.o \
locale_localeconv.o \
locale_setlocale.o
@@ -473,9 +474,9 @@ TIME_OBJ = \
UNISTD_OBJ = \
unistd_access.o \
unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \
unistd_currentpathname.o \
unistd_data.o \
unistd_dup.o \
unistd_dup2.o \
unistd_fchown.o \
@@ -496,15 +497,12 @@ UNISTD_OBJ = \
unistd_sleep.o \
unistd_strip_double_slash.o \
unistd_symlink.o \
unistd_time_delay.o \
unistd_timer.o \
unistd_translatea2u.o \
unistd_translaterel.o \
unistd_translateu2a.o \
unistd_truncate.o \
unistd_unix_path_semantics.o \
unistd_unlink.o \
unistd_usleep.o
unistd_unlink.o
# \
# unistd_wildcard_expand.o

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_init_exit.c,v 1.4 2004-09-29 17:03:57 obarthel Exp $
* $Id: socket_init_exit.c,v 1.2 2004-07-28 15:50:45 obarthel Exp $
*
* :ts=4
*
@@ -84,11 +84,16 @@ extern BOOL __is_daemon;
/****************************************************************************/
extern void __show_error(const char * message);
/****************************************************************************/
extern void __socket_hook_entry(struct Hook * hook,struct fd * fd,struct file_hook_message * message);
/****************************************************************************/
CLIB_DESTRUCTOR(__socket_exit)
void
__socket_exit(void)
{
ENTER();
@@ -111,7 +116,16 @@ CLIB_DESTRUCTOR(__socket_exit)
* does not happen, the stdio cleanup function will
* crash (with bells on).
*/
__close_all_files();
if(__fd != NULL)
{
int i;
for(i = 0 ; i < __num_fd ; i++)
{
if(FLAG_IS_SET(__fd[i]->fd_Flags,FDF_IS_SOCKET) && FLAG_IS_SET(__fd[i]->fd_Flags,FDF_IN_USE))
close(i);
}
}
#if defined(__amigaos4__)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_send.c,v 1.2 2004-09-29 14:31:57 obarthel Exp $
* $Id: socket_send.c,v 1.1.1.1 2004-07-26 16:31:19 obarthel Exp $
*
* :ts=4
*
@@ -48,7 +48,7 @@
/****************************************************************************/
int
send(int sockfd,const void *buff,size_t nbytes,int flags)
send(int sockfd,void *buff,size_t nbytes,int flags)
{
struct fd * fd;
int result = -1;

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_sendto.c,v 1.2 2004-09-29 14:31:57 obarthel Exp $
* $Id: socket_sendto.c,v 1.1.1.1 2004-07-26 16:31:20 obarthel Exp $
*
* :ts=4
*
@@ -48,7 +48,7 @@
/****************************************************************************/
int
sendto(int sockfd,const void *buff,int len,int flags,struct sockaddr *to,int tolen)
sendto(int sockfd,void *buff,int len,int flags,struct sockaddr *to,int tolen)
{
struct fd * fd;
int result = -1;

View File

@@ -1,5 +1,5 @@
/*
* $Id: socket_setsockopt.c,v 1.2 2004-09-29 14:31:57 obarthel Exp $
* $Id: socket_setsockopt.c,v 1.1.1.1 2004-07-26 16:31:20 obarthel Exp $
*
* :ts=4
*
@@ -48,7 +48,7 @@
/****************************************************************************/
int
setsockopt(int sockfd,int level,int optname,const void *optval,int optlen)
setsockopt(int sockfd,int level,int optname,void *optval,int optlen)
{
struct fd * fd;
int result = -1;

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 182
#define DATE "8.11.2004"
#define VERS "stack.lib 1.182"
#define VSTRING "stack.lib 1.182 (8.11.2004)\r\n"
#define VERSTAG "\0$VER: stack.lib 1.182 (8.11.2004)"
#define REVISION 176
#define DATE "27.9.2004"
#define VERS "stack.lib 1.176"
#define VSTRING "stack.lib 1.176 (27.9.2004)\r\n"
#define VERSTAG "\0$VER: stack.lib 1.176 (27.9.2004)"

View File

@@ -1 +1 @@
182
176

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_init_exit.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdio_init_exit.c,v 1.1.1.1 2004-07-26 16:31:36 obarthel Exp $
*
* :ts=4
*
@@ -52,7 +52,7 @@
/****************************************************************************/
void
__close_all_files(void)
__stdio_exit(void)
{
int i;
@@ -60,7 +60,7 @@ __close_all_files(void)
__check_abort_enabled = FALSE;
if(__iob != NULL && __num_iob > 0)
if(__iob != NULL)
{
for(i = 0 ; i < __num_iob ; i++)
{
@@ -72,7 +72,7 @@ __close_all_files(void)
__iob = NULL;
}
if(__fd != NULL && __num_fd > 0)
if(__fd != NULL)
{
for(i = 0 ; i < __num_fd ; i++)
{
@@ -89,17 +89,6 @@ __close_all_files(void)
/****************************************************************************/
CLIB_DESTRUCTOR(__stdio_exit)
{
ENTER();
__close_all_files();
LEAVE();
}
/****************************************************************************/
int
__stdio_init(void)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_openiob.c,v 1.3 2004-11-03 15:39:04 obarthel Exp $
* $Id: stdio_openiob.c,v 1.1.1.1 2004-07-26 16:31:37 obarthel Exp $
*
* :ts=4
*
@@ -48,7 +48,9 @@ __open_iob(const char *filename, const char *mode, int file_descriptor, int slot
{
ULONG file_flags;
int result = -1;
char actual_mode[8];
int open_mode;
size_t mode_len,len,i;
struct fd * fd = NULL;
STRPTR buffer = NULL;
STRPTR aligned_buffer;
@@ -84,49 +86,78 @@ __open_iob(const char *filename, const char *mode, int file_descriptor, int slot
}
}
/* The first character selects the access mode: read, write or append. */
switch(mode[0])
/* Options can follow the mode string, separated by a comma.
* We don't support any of those.
*/
len = mode_len = strlen(mode);
for(i = 0 ; i < len ; i++)
{
case 'r':
if(mode[i] == ',')
{
mode_len = i;
break;
}
}
SHOWMSG("read mode");
/* Keep only the first few letters of the mode string. */
if(mode_len > sizeof(actual_mode)-1)
mode_len = sizeof(actual_mode)-1;
memmove(actual_mode,mode,mode_len);
actual_mode[mode_len] = '\0';
SHOWSTRING(actual_mode);
if(strcmp(actual_mode,"r") == SAME || strcmp(actual_mode,"rb") == SAME)
{
SHOWMSG("read-only");
open_mode = O_RDONLY;
break;
case 'w':
SHOWMSG("write mode");
file_flags = IOBF_READ;
}
else if (strcmp(actual_mode,"w") == SAME || strcmp(actual_mode,"wb") == SAME)
{
SHOWMSG("write-only");
open_mode = O_WRONLY | O_CREAT | O_TRUNC;
break;
case 'a':
SHOWMSG("append mode");
file_flags = IOBF_WRITE;
}
else if (strcmp(actual_mode,"a") == SAME || strcmp(actual_mode,"ab") == SAME)
{
SHOWMSG("write-only; append");
open_mode = O_WRONLY | O_CREAT | O_APPEND;
break;
file_flags = IOBF_WRITE;
}
else if (strcmp(actual_mode,"r+") == SAME || strcmp(actual_mode,"rb+") == SAME || strcmp(actual_mode,"r+b") == SAME)
{
SHOWMSG("read/write; don't overwrite");
default:
open_mode = O_RDWR;
file_flags = IOBF_READ | IOBF_WRITE;
}
else if (strcmp(actual_mode,"w+") == SAME || strcmp(actual_mode,"wb+") == SAME || strcmp(actual_mode,"w+b") == SAME)
{
SHOWMSG("read/write; overwrite");
D(("unsupported file open mode '%lc'",mode[0]));
open_mode = O_RDWR | O_CREAT | O_TRUNC;
file_flags = IOBF_READ | IOBF_WRITE;
}
else if (strcmp(actual_mode,"a+") == SAME || strcmp(actual_mode,"ab+") == SAME || strcmp(actual_mode,"a+b") == SAME)
{
SHOWMSG("read/write; append; don't overwrite");
open_mode = O_RDWR | O_CREAT | O_APPEND;
file_flags = IOBF_READ | IOBF_WRITE;
}
else
{
SHOWMSG("unsupported file open mode");
errno = EINVAL;
goto out;
}
/* If the second or third character is a '+', switch to read/write mode. */
if((mode[1] == '+') || (mode[1] != '\0' && mode[2] == '+'))
{
SHOWMSG("read/write access");
CLEAR_FLAG(open_mode,O_RDONLY);
CLEAR_FLAG(open_mode,O_WRONLY);
SET_FLAG(open_mode,O_RDWR);
}
SHOWMSG("allocating file buffer");
/* Allocate a little more memory than necessary. */
@@ -162,21 +193,12 @@ __open_iob(const char *filename, const char *mode, int file_descriptor, int slot
CLEAR_FLAG(fd->fd_Flags,FDF_APPEND);
}
/* Figure out the buffered file access mode by looking at the open mode. */
file_flags = IOBF_IN_USE | IOBF_NO_NUL;
if(FLAG_IS_SET(open_mode,O_RDONLY) || FLAG_IS_SET(open_mode,O_RDWR))
SET_FLAG(file_flags,IOBF_READ);
if(FLAG_IS_SET(open_mode,O_WRONLY) || FLAG_IS_SET(open_mode,O_RDWR))
SET_FLAG(file_flags,IOBF_WRITE);
__initialize_iob(file,(HOOKFUNC)__iob_hook_entry,
buffer,
aligned_buffer,BUFSIZ,
file_descriptor,
slot_number,
file_flags);
IOBF_IN_USE | file_flags | IOBF_NO_NUL);
buffer = NULL;

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_protos.h,v 1.3 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdio_protos.h,v 1.2 2004-08-08 10:55:57 obarthel Exp $
*
* :ts=4
*
@@ -65,11 +65,6 @@ struct fd;
/****************************************************************************/
/* stdio_init_exit.c */
void __close_all_files(void);
/****************************************************************************/
/* stdio_translateioerror.c */
extern void __translate_io_error_to_errno(LONG io_error,int * errno_ptr);
extern void __translate_access_io_error_to_errno(LONG io_error,int * errno_ptr);

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_vfprintf.c,v 1.6 2004-10-23 16:38:18 obarthel Exp $
* $Id: stdio_vfprintf.c,v 1.5 2004-09-10 07:39:19 obarthel Exp $
*
* :ts=4
*
@@ -979,8 +979,15 @@ vfprintf(FILE * stream,const char * format, va_list arg)
else
(void)va_arg(arg, double);
minimum_field_width = 0;
format_flags = 0;
#ifndef NDEBUG
{
output_buffer = "*FLOATING POINT NUMBER*";
output_len = strlen(output_buffer);
}
#endif /* NDEBUG */
CLEAR_FLAG(format_flags,FORMATF_ProduceSign);
CLEAR_FLAG(format_flags,FORMATF_ProduceSpace);
}
#endif /* FLOATING_POINT_SUPPORT */
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdio_vfscanf.c,v 1.6 2004-11-08 17:57:52 obarthel Exp $
* $Id: stdio_vfscanf.c,v 1.2 2004-08-08 10:55:57 obarthel Exp $
*
* :ts=4
*
@@ -105,12 +105,24 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
if(isspace(c))
{
BOOL finished = FALSE;
/* Skip all blank spaces in the stream. */
format++;
while((c = __getc(stream)) != EOF)
while(TRUE)
{
if(isspace(c))
c = __getc(stream);
if(c == EOF)
{
/* Hit the end of the stream. Due to an error? */
if(num_conversions == 0 || ferror(stream))
goto out;
finished = TRUE;
break;
}
else if (isspace(c))
{
total_num_chars_read++;
}
@@ -127,17 +139,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
}
if(c == EOF)
{
SHOWMSG("end of file");
/* Hit the end of the stream? */
if(num_conversions == 0)
goto out;
/* Finished... */
if(finished)
break;
}
/* Resume scanning. */
continue;
@@ -156,8 +159,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
{
SHOWMSG("end of file");
/* Hit the end of the stream. */
if(num_conversions == 0)
/* Hit the end of the stream. Due to an error? */
if(num_conversions == 0 || ferror(stream))
goto out;
break;
@@ -302,11 +305,9 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
break;
/* It's a floating point number. */
case 'e':
case 'E':
case 'f':
case 'e':
case 'g':
case 'G':
conversion_type = 'f';
format++;
@@ -320,7 +321,6 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
case 's': /* string */
case 'u': /* unsigned integer */
case 'x': /* unsigned integer in hexadecimal format */
case 'X': /* unsigned integer in hexadecimal format */
case '%': /* the % character */
case '[': /* a range of characters */
@@ -339,9 +339,21 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
conversion_type != 'n' &&
conversion_type != '[')
{
while((c = __getc(stream)) != EOF)
BOOL finished = FALSE;
while(TRUE)
{
if(isspace(c))
c = __getc(stream);
if(c == EOF)
{
/* Hit the end of the stream. Due to an error? */
if(num_conversions == 0 || ferror(stream))
goto out;
finished = TRUE;
break;
}
else if (isspace(c))
{
total_num_chars_read++;
}
@@ -357,6 +369,9 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
break;
}
}
if(finished)
break;
}
num_chars_processed = 0;
@@ -413,8 +428,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
c = __getc(stream);
if(c == EOF)
{
/* Bail out if we hit the end of the stream. */
if(num_conversions == 0)
/* Bail out if we hit the end of the stream or an error occured. */
if(num_conversions == 0 || ferror(stream))
goto out;
break;
@@ -594,7 +609,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
maximum_field_width--;
}
if(c == EOF && num_chars_processed == 0 && num_conversions == 0)
if(c == EOF && ((num_chars_processed == 0 && num_conversions == 0) || ferror(stream)))
goto out;
}
@@ -1001,10 +1016,6 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
}
/* Chose a base according to the conversion to be
expected. For the 'x' and 'i' we examine the
incoming data rather than commit ourselves to
a peculiar data format now. */
if(conversion_type == 'd' || conversion_type == 'u')
base = 10;
else if (conversion_type == 'o')
@@ -1049,11 +1060,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
* '0x' prefix or just a zero.
*/
c = __getc(stream);
/* This takes care of the '0x' prefix for hexadecimal
numbers ('%x') and also picks the right type of
data for the '%i' type. */
if ((c == 'x' || c == 'X') && (conversion_type == 'x' || conversion_type == 'i'))
if (c == 'x' || c == 'X')
{
/* It's the hex prefix. */
base = 16;
@@ -1068,7 +1075,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
if(maximum_field_width > 0)
maximum_field_width--;
}
else if (isdigit(c) && (conversion_type == 'i')) /* This could be the octal prefix for the '%i' format. */
else if (isdigit(c))
{
/* The preceding '0' was part of the
octal prefix. So we don't really know
@@ -1185,7 +1192,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
}
if(c == EOF && num_chars_processed == 0 && num_conversions == 0)
if(c == EOF && ((num_chars_processed == 0 && num_conversions == 0) || ferror(stream)))
goto out;
}
@@ -1291,8 +1298,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
/* The conversion is considered to have failed if an EOF was
encountered before any non-whitespace characters could be
converted. */
if(c == EOF && num_chars_processed == 0 && num_conversions == 0)
converted. We also bail out if we hit an error. */
if(c == EOF && (num_chars_processed == 0 || ferror(stream)))
goto out;
}
@@ -1415,8 +1422,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
{
SHOWMSG("end of file");
/* Hit the end of the stream. */
if(num_conversions == 0)
/* Hit the end of the stream. Due to an error? */
if(num_conversions == 0 || ferror(stream))
goto out;
break;
@@ -1548,7 +1555,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
maximum_field_width--;
}
if(c == EOF && num_chars_processed == 0 && num_conversions == 0)
if(c == EOF && ((num_chars_processed == 0 && num_conversions == 0) || ferror(stream)))
goto out;
}
@@ -1562,6 +1569,7 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
}
}
if(num_conversions > 0)
result = num_assignments;
out:

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_constructor_begin.c,v 1.2 2004-09-29 19:57:57 obarthel Exp $
* $Id: stdlib_constructor_begin.c,v 1.1.1.1 2004-07-26 16:31:52 obarthel Exp $
*
* :ts=4
*
@@ -42,7 +42,80 @@
/****************************************************************************/
#if defined(__SASC)
#if defined(__amigaos4__)
/****************************************************************************/
/*
* Dummy constructor and destructor array. The linker script will put these at the
* very beginning of section ".ctors" and ".dtors". crtend.o contains a similar entry
* with a NULL pointer entry and is put at the end of the sections. This way, the init
* code can find the global constructor/destructor pointers
*/
static void (*__CTOR_LIST__[1]) (void) __attribute__((section(".ctors"))) = { (void *)-1 };
static void (*__DTOR_LIST__[1]) (void) __attribute__((section(".dtors"))) = { (void *)-1 };
/****************************************************************************/
static void
_do_ctors(void)
{
void (**pFuncPtr)(void);
/* Skip the first entry in the list (it's -1 anyway) */
pFuncPtr = __CTOR_LIST__ + 1;
/* Call all constructors in forward order */
while (*pFuncPtr != NULL)
(**pFuncPtr++)();
}
/****************************************************************************/
static void
_do_dtors(void)
{
static ULONG i = ~0UL;
void (**pFuncPtr)(void);
if(i == ~0UL)
{
ULONG j = (ULONG)__DTOR_LIST__[0];
if(j == ~0UL)
{
/* Find the end of the destructors list. */
j = 1;
while(__DTOR_LIST__[j] != NULL)
j++;
/* We're at the NULL entry now. Go back by one. */
j--;
}
i = j;
}
/* If one of the destructors drops into
* exit(), processing will continue with
* the next following destructor.
*/
(void)setjmp(__exit_jmp_buf);
/* Call all destructors in reverse order. */
pFuncPtr = &__DTOR_LIST__[i];
while(i > 0)
{
i--;
(**pFuncPtr--)();
}
}
/****************************************************************************/
#elif defined(__SASC)
/****************************************************************************/
@@ -128,23 +201,11 @@ _do_ctors(void)
ULONG nptrs = (ULONG)__CTOR_LIST__[0];
ULONG i;
ENTER();
D(("there are %ld constructors to be called",nptrs));
/* Call all constructors in forward order */
for(i = 0 ; i < nptrs ; i++)
{
D(("calling constructor #%ld, 0x%08lx",i,__CTOR_LIST__[1+i]));
__CTOR_LIST__[1+i]();
}
SHOWMSG("all done.");
LEAVE();
}
/****************************************************************************/
static void
@@ -155,10 +216,6 @@ _do_dtors(void)
ULONG nptrs = (ULONG)__DTOR_LIST__[0];
static ULONG i;
ENTER();
D(("there are %ld destructors to be called",nptrs));
/* If one of the destructors drops into
* exit(), processing will continue with
* the next following destructor.
@@ -167,17 +224,9 @@ _do_dtors(void)
/* Call all destructors in reverse order */
while(i++ < nptrs)
{
D(("calling destructor #%ld, 0x%08lx",i,__DTOR_LIST__[1+nptrs - i]));
__DTOR_LIST__[1+nptrs - i]();
}
SHOWMSG("all done.");
LEAVE();
}
/****************************************************************************/
#endif /*__amigaos4__ */

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_data.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdlib_data.c,v 1.1.1.1 2004-07-26 16:31:53 obarthel Exp $
*
* :ts=4
*
@@ -85,11 +85,15 @@ ULONG __stk_extensions;
/****************************************************************************/
struct Library * __UtilityBase;
struct Library * __LocaleBase;
/****************************************************************************/
#if defined(__amigaos4__)
struct UtilityIFace * __IUtility;
struct LocaleIFace * __ILocale;
#endif /* __amigaos4__ */
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_locale_utility.h,v 1.2 2004-09-29 19:57:58 obarthel Exp $
* $Id: stdlib_locale_utility.h,v 1.1.1.1 2004-07-26 16:31:57 obarthel Exp $
*
* :ts=4
*
@@ -49,14 +49,8 @@
/****************************************************************************/
#ifndef _MACROS_H
#include "macros.h"
#endif /* _MACROS_H */
/****************************************************************************/
extern struct Library * NOCOMMON __UtilityBase;
extern struct Library * NOCOMMON __LocaleBase;
extern struct Library * __UtilityBase;
extern struct Library * __LocaleBase;
/****************************************************************************/
@@ -64,8 +58,8 @@ extern struct Library * NOCOMMON __LocaleBase;
/****************************************************************************/
extern struct UtilityIFace NOCOMMON * __IUtility;
extern struct LocaleIFace NOCOMMON * __ILocale;
extern struct UtilityIFace * __IUtility;
extern struct LocaleIFace * __ILocale;
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_main.c,v 1.5 2004-10-02 15:56:13 obarthel Exp $
* $Id: stdlib_main.c,v 1.2 2004-09-18 09:03:30 obarthel Exp $
*
* :ts=4
*
@@ -122,7 +122,10 @@ call_main(void)
__stdio_init,
__machine_test,
__math_init,
__locale_init,
__unistd_init,
__socket_init,
__usergroup_init,
__wildcard_expand_init,
NULL
@@ -135,6 +138,15 @@ call_main(void)
*/
static exit_func_ptr exit_functions[] =
{
__wildcard_expand_exit,
__usergroup_exit,
__socket_exit,
__unistd_exit,
__locale_exit,
__math_exit,
__stdio_exit,
__startup_exit,
__stk_exit,
__stdlib_exit,
NULL
@@ -142,32 +154,19 @@ call_main(void)
static size_t i;
ENTER();
/* This plants the return buffer for _exit(). */
if(setjmp(__exit_jmp_buf) != 0)
goto out;
SHOWMSG("calling init functions");
for(i = 0 ; init_functions[i] != NULL ; i++)
{
D(("calling init function #%ld",i));
if((*init_functions[i])() != OK)
{
SHOWMSG("that didn't work");
goto out;
}
}
SHOWMSG("now invoking the constructors");
/* Go through the constructor list */
_init();
SHOWMSG("done.");
/* If the SAS/C profiling code is set up for printing function
call chains, switch it on now. */
#if defined(__USE_SAS_PROFILING_FOR_MONITORING)
@@ -196,8 +195,6 @@ call_main(void)
*/
if(__stack_overflow)
{
SHOWMSG("we have a stack overflow");
/* Dump whatever is waiting to be written to the
* standard I/O streams, and make sure that no
* break signal is about to make things any more
@@ -220,15 +217,9 @@ call_main(void)
/* If necessary, print stack size usage information. */
__stack_usage_exit();
SHOWMSG("invoking the destructors");
/* Go through the destructor list */
_fini();
SHOWMSG("done.");
SHOWMSG("calling the exit functions");
/* Any of the following cleanup routines may call
* _exit() by way of abort() or through a hook
* function. Which is why we redirect the exit
@@ -236,13 +227,10 @@ call_main(void)
*/
for(i = 0 ; exit_functions[i] != NULL ; i++)
{
D(("calling exit function #%ld",i));
if(setjmp(__exit_jmp_buf) == 0)
(*exit_functions[i])();
}
RETURN(__exit_value);
return(__exit_value);
}
@@ -373,6 +361,9 @@ _main(void)
}
#endif /* __amigaos4__ */
/* Remember when this program was started. */
DateStamp(&__start_time);
/* If a callback was provided which can fill us in on which
* minimum stack size should be used, invoke it now and
* store its result in the global __stack_size variable.
@@ -415,36 +406,37 @@ _main(void)
{
struct StackSwapStruct * stk;
unsigned int stack_size;
APTR new_stack;
ULONG lower,upper;
/* Make the stack size a multiple of 32 bytes. */
stack_size = 32 + ((__stack_size + 31UL) & ~31UL);
/* Make the stack size a multiple of 16 bytes. */
stack_size = (__stack_size + 15UL) & ~15UL;
/* Allocate the stack swapping data structure
and the stack space separately. */
stk = AllocVec(sizeof(*stk),MEMF_PUBLIC|MEMF_ANY);
/* We allocate a little more memory so that we can align
the stack to a 128 bit boundary. The extra 20 bytes are
to mimic the Task stack setup in dos.library/CreateProc. */
stk = AllocVec(sizeof(*stk) + 15 + 20 + stack_size,MEMF_PUBLIC|MEMF_ANY);
if(stk == NULL)
goto out;
new_stack = AllocMem(stack_size,MEMF_PUBLIC|MEMF_ANY);
if(new_stack == NULL)
{
FreeVec(stk);
goto out;
}
/* Align the lower stack bound to a 128 bit boundary, then
fix up the upper bound, which is guaranteed to be on
a 128 bit boundary, too, on account of the stack size
having being rounded to that boundary. */
lower = (((ULONG)(stk+1)) + 15UL) & ~15UL;
upper = lower + stack_size;
/* Fill in the lower and upper bounds, then take care of
the stack pointer itself. */
stk->stk_Lower = new_stack;
stk->stk_Upper = (ULONG)(new_stack) + stack_size;
stk->stk_Pointer = (APTR)(stk->stk_Upper - 32);
the stack pointer itself. This layout mimics the process
creation code in dos.library. */
stk->stk_Lower = (APTR)lower;
stk->stk_Upper = upper - 4;
stk->stk_Pointer = (APTR)(upper - 20);
/* If necessary, set up for stack size usage measurement. */
__stack_usage_init(stk);
return_code = __swap_stack_and_call(stk,(APTR)call_main);
FreeMem(new_stack, stack_size);
FreeVec(stk);
}
else

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_math.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdlib_math.c,v 1.1.1.1 2004-07-26 16:31:59 obarthel Exp $
*
* :ts=4
*
@@ -41,6 +41,13 @@
/****************************************************************************/
void
__math_exit(void)
{
}
/****************************************************************************/
int
__math_init(void)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_protos.h,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdlib_protos.h,v 1.1.1.1 2004-07-26 16:32:02 obarthel Exp $
*
* :ts=4
*
@@ -60,6 +60,7 @@ struct MemoryTree;
/* math_init_exit.c */
extern int __math_init(void);
extern void __math_exit(void);
/****************************************************************************/
@@ -68,8 +69,15 @@ extern int __machine_test(void);
/****************************************************************************/
/* locale_init_exit.c */
extern int __locale_init(void);
extern void __locale_exit(void);
/****************************************************************************/
/* stdio_init_exit.c */
extern int __stdio_init(void);
extern void __stdio_exit(void);
/****************************************************************************/
@@ -79,6 +87,18 @@ extern void __stdlib_exit(void);
/****************************************************************************/
/* unistd_init_exit.c */
extern int __unistd_init(void);
extern void __unistd_exit(void);
/****************************************************************************/
/* dirent_init_exit.c */
extern int __dirent_init(void);
extern void __dirent_exit(void);
/****************************************************************************/
/* stdlib_atexit.c */
extern void __exit_trap_trigger(void);
@@ -86,6 +106,13 @@ extern void __exit_trap_trigger(void);
/* socket_init_exit.c */
extern int __socket_init(void);
extern void __socket_exit(void);
/****************************************************************************/
/* usergroup_init_exit.c */
extern int __usergroup_init(void);
extern void __usergroup_exit(void);
/****************************************************************************/
@@ -107,11 +134,13 @@ extern unsigned long __get_sp(void);
/* stdlib_wildcard_expand.c */
extern UBYTE * __allocate_quote_vector(int num_parameters);
extern int __wildcard_expand_init(void);
extern void __wildcard_expand_exit(void);
/****************************************************************************/
/* stdlib_stackextension.c */
extern int __stk_init(void);
extern void __stk_exit(void);
/****************************************************************************/
@@ -134,6 +163,7 @@ void _fini(void);
/* stdlib_startup.c */
extern int __startup_init(void);
extern void __startup_exit(void);
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_socket.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdlib_socket.c,v 1.1.1.1 2004-07-26 16:32:06 obarthel Exp $
*
* :ts=4
*
@@ -37,6 +37,13 @@
/****************************************************************************/
void
__socket_exit(void)
{
}
/****************************************************************************/
int
__socket_init(void)
{

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_stackcheck.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdlib_stackcheck.c,v 1.1.1.1 2004-07-26 16:32:07 obarthel Exp $
*
* :ts=4
*
@@ -123,3 +123,8 @@ __stk_init(void)
return(OK);
}
void
__stk_exit(void)
{
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_stackextension.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdlib_stackextension.c,v 1.1.1.1 2004-07-26 16:32:08 obarthel Exp $
*
* :ts=4
*
@@ -294,7 +294,8 @@ __stk_init(void)
/****************************************************************************/
/* Free all spare stackframes */
CLIB_DESTRUCTOR(__stk_exit)
void
__stk_exit(void)
{
ENTER();

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_startup.c,v 1.3 2004-09-29 19:57:58 obarthel Exp $
* $Id: stdlib_startup.c,v 1.1.1.1 2004-07-26 16:32:10 obarthel Exp $
*
* :ts=4
*
@@ -421,10 +421,9 @@ __startup_init(void)
/****************************************************************************/
CLIB_DESTRUCTOR(__startup_exit)
void
__startup_exit(void)
{
ENTER();
PROFILE_OFF();
/* Now clean up after the streams set up for the Workbench
@@ -462,6 +461,4 @@ CLIB_DESTRUCTOR(__startup_exit)
}
PROFILE_ON();
LEAVE();
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_swapstack.c,v 1.2 2004-10-02 15:56:13 obarthel Exp $
* $Id: stdlib_swapstack.c,v 1.1.1.1 2004-07-26 16:32:11 obarthel Exp $
*
* :ts=4
*
@@ -94,19 +94,51 @@ ___swap_stack_and_call: \n\
/****************************************************************************/
/* Swap the current stack configuration out, call a function provided,
swap the stack configuration back and return. */
int
__swap_stack_and_call(struct StackSwapStruct * stk,APTR function)
{
register int result;
StackSwap(stk);
result = ((int (*)(void))function)();
StackSwap(stk);
return(result);
}
__asm(" \n\
\n\
.text \n\
.align 2 \n\
\n\
.set MainInterface, 632 \n\
.set IExec_StackSwap, 272 \n\
\n\
.globl SysBase \n\
.globl __swap_stack_and_call \n\
\n\
__swap_stack_and_call: \n\
stwu r1, -32(r1) # Make a stack frame \n\
mflr r0 \n\
stw r0, 36(r1) \n\
stmw r29, 8(r1) # Get us three GPRs \n\
# r29 will store IExec \n\
mr r4, r31 # Backup ptr to function to call \n\
mr r3, r30 # Backup ptr to StackSwapStruct \n\
\n\
lis r3, SysBase@ha # Retrieve sysbase pointer \n\
lwz r3, SysBase@l(r3) \n\
lwz r29, MainInterface(r3) # Get IExec \n\
\n\
addi r3, r29, IExec_StackSwap # StackSwap entry \n\
mr r4, r30 # StackSwap struct in r4 \n\
mtlr r3 \n\
blrl # IExec->StackSwap(r4) \n\
\n\
mtlr r31 # Call payload \n\
blrl \n\
\n\
addi r3, r29, IExec_StackSwap # Revert to old stack \n\
mr r4, r30 \n\
mtlr r3 \n\
blrl \n\
\n\
lmw r29, 8(r1) # Restore registers \n\
lwz r0, 36(r1) \n\
mtlr r0 \n\
addi r1, r1, 32 # Clean up stack \n\
\n\
blr \n\
\n\
");
/****************************************************************************/

View File

@@ -1,5 +1,5 @@
/*
* $Id: unistd_usleep.c,v 1.1 2004-09-29 12:10:29 obarthel Exp $
* $Id: stdlib_usergroup.c,v 1.1.1.1 2004-07-26 16:32:13 obarthel Exp $
*
* :ts=4
*
@@ -31,24 +31,21 @@
* 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. */
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
void
usleep(unsigned long microseconds)
__usergroup_exit(void)
{
ENTER();
SHOWVALUE(microseconds);
__time_delay(0,microseconds);
LEAVE();
}
/****************************************************************************/
int
__usergroup_init(void)
{
return(OK);
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: stdlib_wildcard_expand.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* $Id: stdlib_wildcard_expand.c,v 1.1.1.1 2004-07-26 16:32:13 obarthel Exp $
*
* :ts=4
*
@@ -39,6 +39,7 @@
UBYTE * WEAK __allocate_quote_vector(int num_parameters UNUSED);
int WEAK __wildcard_expand_init(void);
void WEAK __wildcard_expand_exit(void);
/****************************************************************************/
@@ -55,3 +56,10 @@ __wildcard_expand_init(void)
{
return(0);
}
/****************************************************************************/
void
__wildcard_expand_exit(void)
{
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: string_strtok.c,v 1.2 2004-10-25 19:53:15 obarthel Exp $
* $Id: string_strtok.c,v 1.1.1.1 2004-07-26 16:32:20 obarthel Exp $
*
* :ts=4
*
@@ -89,12 +89,9 @@ strtok(char *str, const char *separator_set)
goto out;
/* This is where the search can resume later. */
last = &str[size];
/* If we didn't hit the end of the string already,
skip the separator. */
if((*last) != '\0')
last++;
last = &str[size+1];
if((*last) == '\0')
last = NULL;
/* This is the token we found; make sure that
it looks like a valid string. */

View File

@@ -1,5 +1,5 @@
/*
* $Id: time_clock.c,v 1.2 2004-09-29 19:57:58 obarthel Exp $
* $Id: time_clock.c,v 1.1.1.1 2004-07-26 16:32:21 obarthel Exp $
*
* :ts=4
*
@@ -37,22 +37,6 @@
/****************************************************************************/
static struct DateStamp start_time;
/****************************************************************************/
CLIB_CONSTRUCTOR(init_start_time)
{
/* Remember when this program was started. */
DateStamp(&start_time);
RETURN(OK);
CONSTRUCTOR_SUCCEED();
}
/****************************************************************************/
clock_t
clock(void)
{
@@ -73,8 +57,8 @@ clock(void)
minutes_now = now.ds_Days * 24 * 60 + now.ds_Minute;
ticks_now = now.ds_Tick;
minutes_start = start_time.ds_Days * 24 * 60 + start_time.ds_Minute;
ticks_start = start_time.ds_Tick;
minutes_start = __start_time.ds_Days * 24 * 60 + __start_time.ds_Minute;
ticks_start = __start_time.ds_Tick;
/* Subtract the start time from the current time. We start
* with the ticks.

View File

@@ -1,5 +1,5 @@
/*
* $Id: time_data.c,v 1.2 2004-09-29 19:57:58 obarthel Exp $
* $Id: time_data.c,v 1.1.1.1 2004-07-26 16:32:22 obarthel Exp $
*
* :ts=4
*
@@ -37,6 +37,10 @@
/****************************************************************************/
struct DateStamp __start_time;
/****************************************************************************/
const char * const __abbreviated_week_day_names[7] =
{
"Sun",

View File

@@ -1,5 +1,5 @@
/*
* $Id: time_headers.h,v 1.2 2004-09-29 19:57:58 obarthel Exp $
* $Id: time_headers.h,v 1.1.1.1 2004-07-26 16:32:23 obarthel Exp $
*
* :ts=4
*
@@ -84,6 +84,10 @@
/****************************************************************************/
extern struct DateStamp __start_time;
/****************************************************************************/
extern const char * const __abbreviated_week_day_names[7];
extern const char * const __week_day_names[7];
extern const char * const __abbreviated_month_names[12];

View File

@@ -1,5 +1,5 @@
/*
* $Id: unistd_chdir_exit.c,v 1.2 2004-09-29 19:57:58 obarthel Exp $
* $Id: unistd_data.c,v 1.2 2004-08-07 09:15:32 obarthel Exp $
*
* :ts=4
*
@@ -41,34 +41,20 @@
/****************************************************************************/
/* If the program's current directory was changed, here is where
we find out about it. */
BPTR NOCOMMON __original_current_directory;
BOOL NOCOMMON __current_directory_changed;
BOOL NOCOMMON __unlock_current_directory;
/* Names of files and directories to delete when shutting down. */
struct MinList __unlink_list;
/****************************************************************************/
CLIB_DESTRUCTOR(__chdir_exit)
{
ENTER();
/* Local timer I/O. */
struct MsgPort * __timer_port;
struct timerequest * __timer_request;
if(__current_directory_changed)
{
BPTR old_dir;
/****************************************************************************/
old_dir = CurrentDir(__original_current_directory);
__original_current_directory = ZERO;
if(__unlock_current_directory)
{
UnLock(old_dir);
__unlock_current_directory = FALSE;
}
__current_directory_changed = FALSE;
}
LEAVE();
}
/* If the program's current directory was changed, here is where
* we find out about it.
*/
BPTR __original_current_directory;
BOOL __current_directory_changed;
BOOL __unlock_current_directory;

View File

@@ -1,5 +1,5 @@
/*
* $Id: unistd_headers.h,v 1.3 2004-09-29 19:57:58 obarthel Exp $
* $Id: unistd_headers.h,v 1.1.1.1 2004-07-26 16:32:28 obarthel Exp $
*
* :ts=4
*
@@ -47,29 +47,22 @@ extern char __current_path_name[MAXPATHLEN];
/****************************************************************************/
/* Names of files and directories to delete when shutting down. */
extern struct MinList NOCOMMON __unlink_list;
extern struct MinList __unlink_list;
/****************************************************************************/
/* Local timer I/O. */
extern struct MsgPort * NOCOMMON __timer_port;
extern struct timerequest * NOCOMMON __timer_request;
extern BOOL NOCOMMON __timer_busy;
extern struct Library * NOCOMMON __TimerBase;
/****************************************************************************/
#if defined(__amigaos4__)
extern struct TimerIFace * NOCOMMON __ITimer;
#endif /* __amigaos4__ */
extern struct MsgPort * __timer_port;
extern struct timerequest * __timer_request;
/****************************************************************************/
/* If the program's current directory was changed, here is where
we find out about it. */
extern BPTR NOCOMMON __original_current_directory;
extern BOOL NOCOMMON __current_directory_changed;
extern BOOL NOCOMMON __unlock_current_directory;
* we find out about it.
*/
extern BPTR __original_current_directory;
extern BOOL __current_directory_changed;
extern BOOL __unlock_current_directory;
/****************************************************************************/
@@ -82,8 +75,4 @@ extern void __strip_double_slash(char * file_name,int len);
/****************************************************************************/
extern unsigned int __time_delay(unsigned long seconds,unsigned long microseconds);
/****************************************************************************/
#endif /* _UNISTD_HEADERS_H */

View File

@@ -1,5 +1,5 @@
/*
* $Id: unistd_init_exit.c,v 1.6 2004-09-29 19:57:58 obarthel Exp $
* $Id: unistd_init_exit.c,v 1.3 2004-08-07 10:24:04 obarthel Exp $
*
* :ts=4
*
@@ -41,25 +41,21 @@
/****************************************************************************/
/* Names of files and directories to delete when shutting down. */
struct MinList NOCOMMON __unlink_list;
/****************************************************************************/
CLIB_CONSTRUCTOR(__unistd_init)
int
__unistd_init(void)
{
ENTER();
NewList((struct List *)&__unlink_list);
RETURN(OK);
CONSTRUCTOR_SUCCEED();
return(OK);
}
/****************************************************************************/
CLIB_DESTRUCTOR(__unistd_exit)
void
__unistd_exit(void)
{
ENTER();
@@ -70,9 +66,6 @@ CLIB_DESTRUCTOR(__unistd_exit)
struct UnlinkNode * uln;
BPTR old_dir;
/* Close all the files that still might be open. */
__close_all_files();
while((uln = (struct UnlinkNode *)RemHead((struct List *)&__unlink_list)))
{
old_dir = CurrentDir(uln->uln_Lock);
@@ -87,6 +80,38 @@ CLIB_DESTRUCTOR(__unistd_exit)
}
}
if(__timer_request != NULL)
{
if(__timer_request->tr_node.io_Device != NULL)
CloseDevice((struct IORequest *)__timer_request);
DeleteIORequest((struct IORequest *)__timer_request);
__timer_request = NULL;
}
if(__timer_port != NULL)
{
DeleteMsgPort(__timer_port);
__timer_port = NULL;
}
if(__current_directory_changed)
{
BPTR old_dir;
old_dir = CurrentDir(__original_current_directory);
__original_current_directory = ZERO;
if(__unlock_current_directory)
{
UnLock(old_dir);
__unlock_current_directory = FALSE;
}
__current_directory_changed = FALSE;
}
PROFILE_ON();
LEAVE();

View File

@@ -1,5 +1,5 @@
/*
* $Id: unistd_sleep.c,v 1.3 2004-09-29 12:10:29 obarthel Exp $
* $Id: unistd_sleep.c,v 1.2 2004-08-07 09:15:33 obarthel Exp $
*
* :ts=4
*
@@ -44,11 +44,132 @@
unsigned int
sleep(unsigned int seconds)
{
unsigned int result;
static BOOL sleeping;
unsigned int result = 0;
ENTER();
result = __time_delay(seconds,0);
SHOWVALUE(seconds);
if(__check_abort_enabled)
__check_abort();
if(seconds > 0)
{
if(NOT sleeping)
{
BOOL timer_open;
sleeping = TRUE;
if(__timer_request == NULL)
{
timer_open = FALSE;
SHOWMSG("trying to open the timer");
PROFILE_OFF();
__timer_port = CreateMsgPort();
if(__timer_port != NULL)
{
__timer_request = (struct timerequest *)CreateIORequest(__timer_port,sizeof(*__timer_request));
if(__timer_request != NULL)
{
if(OpenDevice(TIMERNAME,UNIT_VBLANK,(struct IORequest *)__timer_request,0) == 0)
timer_open = TRUE;
}
}
if(NOT timer_open)
{
SHOWMSG("that didn't work");
DeleteIORequest((struct IORequest *)__timer_request);
__timer_request = NULL;
DeleteMsgPort(__timer_port);
__timer_port = NULL;
}
PROFILE_ON();
}
else
{
timer_open = TRUE;
}
if(timer_open)
{
ULONG signals_to_wait_for;
ULONG seconds_then;
ULONG timer_signal;
struct DateStamp ds;
ULONG signals;
__timer_request->tr_node.io_Command = TR_ADDREQUEST;
__timer_request->tr_time.tv_secs = seconds;
__timer_request->tr_time.tv_micro = 0;
timer_signal = (1UL << __timer_port->mp_SigBit);
signals_to_wait_for = timer_signal;
SetSignal(0,signals_to_wait_for);
if(__check_abort_enabled)
SET_FLAG(signals_to_wait_for,SIGBREAKF_CTRL_C);
PROFILE_OFF();
DateStamp(&ds);
PROFILE_ON();
seconds_then = (ds.ds_Days * 24 * 60 + ds.ds_Minute) * 60 + ds.ds_Tick / TICKS_PER_SECOND;
SendIO((struct IORequest *)__timer_request);
while(TRUE)
{
PROFILE_OFF();
signals = Wait(signals_to_wait_for);
PROFILE_ON();
if(FLAG_IS_SET(signals,SIGBREAKF_CTRL_C))
{
ULONG seconds_now;
if(CheckIO((struct IORequest *)__timer_request))
AbortIO((struct IORequest *)__timer_request);
WaitIO((struct IORequest *)__timer_request);
SetSignal(SIGBREAKF_CTRL_C,SIGBREAKF_CTRL_C);
__check_abort();
PROFILE_OFF();
DateStamp(&ds);
PROFILE_ON();
seconds_now = (ds.ds_Days * 24 * 60 + ds.ds_Minute) * 60 + ds.ds_Tick / TICKS_PER_SECOND;
seconds_now -= seconds_then;
if(seconds_now < seconds)
result = (seconds - seconds_now);
break;
}
if(FLAG_IS_SET(signals,timer_signal))
{
WaitIO((struct IORequest *)__timer_request);
break;
}
}
}
sleeping = FALSE;
}
}
RETURN(result);
return(result);

View File

@@ -1,139 +0,0 @@
/*
* $Id: unistd_time_delay.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2004 by Olaf Barthel <olsen@sourcery.han.de>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Neither the name of Olaf Barthel nor the names of contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _UNISTD_HEADERS_H
#include "unistd_headers.h"
#endif /* _UNISTD_HEADERS_H */
/****************************************************************************/
#include <proto/timer.h>
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
unsigned int
__time_delay(unsigned long seconds,unsigned long microseconds)
{
unsigned int result = 0;
ENTER();
SHOWVALUE(seconds);
if(__check_abort_enabled)
__check_abort();
if((seconds > 0 || microseconds > 0) && NOT __timer_busy)
{
struct Library * TimerBase = __TimerBase;
#if defined(__amigaos4__)
struct TimerIFace * ITimer = __ITimer;
#endif /* __amigaos4__ */
ULONG signals_to_wait_for;
ULONG seconds_then;
ULONG timer_signal;
struct timeval tv;
ULONG signals;
__timer_busy = TRUE;
__timer_request->tr_node.io_Command = TR_ADDREQUEST;
__timer_request->tr_time.tv_secs = seconds;
__timer_request->tr_time.tv_micro = microseconds;
timer_signal = (1UL << __timer_port->mp_SigBit);
signals_to_wait_for = timer_signal;
SetSignal(0,signals_to_wait_for);
if(__check_abort_enabled)
SET_FLAG(signals_to_wait_for,SIGBREAKF_CTRL_C);
PROFILE_OFF();
GetSysTime(&tv);
PROFILE_ON();
seconds_then = tv.tv_secs + seconds;
SendIO((struct IORequest *)__timer_request);
while(TRUE)
{
PROFILE_OFF();
signals = Wait(signals_to_wait_for);
PROFILE_ON();
if(FLAG_IS_SET(signals,SIGBREAKF_CTRL_C))
{
ULONG seconds_now;
if(CheckIO((struct IORequest *)__timer_request))
AbortIO((struct IORequest *)__timer_request);
WaitIO((struct IORequest *)__timer_request);
SetSignal(SIGBREAKF_CTRL_C,SIGBREAKF_CTRL_C);
__check_abort();
/* Now figure out how many seconds have elapsed and
how many would still remain. */
PROFILE_OFF();
GetSysTime(&tv);
PROFILE_ON();
seconds_now = tv.tv_secs;
if(seconds_now < seconds_then)
result = seconds_then - seconds_now;
break;
}
if(FLAG_IS_SET(signals,timer_signal))
{
WaitIO((struct IORequest *)__timer_request);
break;
}
}
__timer_busy = FALSE;
}
RETURN(result);
return(result);
}

View File

@@ -1,146 +0,0 @@
/*
* $Id: unistd_timer.c,v 1.2 2004-09-29 19:57:58 obarthel Exp $
*
* :ts=4
*
* Portable ISO 'C' (1994) runtime library for the Amiga computer
* Copyright (c) 2002-2004 by Olaf Barthel <olsen@sourcery.han.de>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Neither the name of Olaf Barthel nor the names of contributors
* may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _UNISTD_HEADERS_H
#include "unistd_headers.h"
#endif /* _UNISTD_HEADERS_H */
#ifndef _STDLIB_HEADERS_H
#include "stdlib_headers.h"
#endif /* _STDLIB_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/
/* Local timer I/O. */
struct MsgPort * NOCOMMON __timer_port;
struct timerequest * NOCOMMON __timer_request;
BOOL NOCOMMON __timer_busy;
struct Library * NOCOMMON __TimerBase;
/****************************************************************************/
#if defined(__amigaos4__)
struct TimerIFace * NOCOMMON __ITimer;
#endif /* __amigaos4__ */
/****************************************************************************/
CLIB_CONSTRUCTOR(__timer_init)
{
BOOL success = FALSE;
ENTER();
__timer_port = CreateMsgPort();
if(__timer_port == NULL)
{
__show_error("The timer message port could not be created.");
goto out;
}
__timer_request = (struct timerequest *)CreateIORequest(__timer_port,sizeof(*__timer_request));
if(__timer_request == NULL)
{
__show_error("The timer I/O request could not be created.");
goto out;
}
if(OpenDevice(TIMERNAME,UNIT_VBLANK,(struct IORequest *)__timer_request,0) != OK)
{
__show_error("The timer could not be opened.");
goto out;
}
__TimerBase = (struct Library *)__timer_request->tr_node.io_Device;
#if defined(__amigaos4__)
{
__ITimer = (struct TimerIFace *)GetInterface(__TimerBase, "main", 1, 0);
if(__ITimer == NULL)
{
__show_error("The timer interface could not be obtained.");
goto out;
}
}
#endif /* __amigaos4__ */
success = TRUE;
out:
RETURN(success);
if(success)
CONSTRUCTOR_SUCCEED();
else
CONSTRUCTOR_FAIL();
}
/****************************************************************************/
CLIB_DESTRUCTOR(__timer_exit)
{
ENTER();
#if defined(__amigaos4__)
{
if(__ITimer != NULL)
DropInterface((struct Interface *)__ITimer);
__ITimer = NULL;
}
#endif /* __amigaos4__ */
__TimerBase = NULL;
if(__timer_request != NULL)
{
if(__timer_request->tr_node.io_Device != NULL)
CloseDevice((struct IORequest *)__timer_request);
DeleteIORequest((struct IORequest *)__timer_request);
__timer_request = NULL;
}
if(__timer_port != NULL)
{
DeleteMsgPort(__timer_port);
__timer_port = NULL;
}
LEAVE();
}

View File

@@ -1,5 +1,5 @@
/*
* $Id: unistd_wildcard_expand.c,v 1.3 2004-09-29 19:57:58 obarthel Exp $
* $Id: unistd_wildcard_expand.c,v 1.1.1.1 2004-07-26 16:32:33 obarthel Exp $
*
* :ts=4
*
@@ -74,17 +74,16 @@ static struct AnchorPath * anchor;
/****************************************************************************/
CLIB_DESTRUCTOR(__wildcard_expand_exit)
void
__wildcard_expand_exit(void)
{
ENTER();
if(anchor != NULL)
{
MatchEnd(anchor);
free(anchor);
anchor = NULL;
}
LEAVE();
}
/****************************************************************************/

View File

@@ -1,6 +1,6 @@
#define VERSION 1
#define REVISION 182
#define DATE "8.11.2004"
#define VERS "unix.lib 1.182"
#define VSTRING "unix.lib 1.182 (8.11.2004)\r\n"
#define VERSTAG "\0$VER: unix.lib 1.182 (8.11.2004)"
#define REVISION 176
#define DATE "27.9.2004"
#define VERS "unix.lib 1.176"
#define VSTRING "unix.lib 1.176 (27.9.2004)\r\n"
#define VERSTAG "\0$VER: unix.lib 1.176 (27.9.2004)"

View File

@@ -1 +1 @@
182
176

View File

@@ -1,5 +1,5 @@
/*
* $Id: usergroup_data.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* $Id: usergroup_data.c,v 1.1.1.1 2004-07-26 16:32:34 obarthel Exp $
*
* :ts=4
*
@@ -41,6 +41,18 @@
/****************************************************************************/
struct Library * __UserGroupBase;
/****************************************************************************/
#if defined(__amigaos4__)
struct UserGroupIFace *__IUserGroup;
#endif /* __amigaos4__ */
/****************************************************************************/
int __root_uid;
int __root_gid;
int __root_euid;

View File

@@ -1,5 +1,5 @@
/*
* $Id: usergroup_headers.h,v 1.3 2004-09-29 19:57:58 obarthel Exp $
* $Id: usergroup_headers.h,v 1.2 2004-09-16 08:45:03 obarthel Exp $
*
* :ts=4
*
@@ -42,13 +42,13 @@
/****************************************************************************/
extern struct Library * NOCOMMON __UserGroupBase;
extern struct Library * __UserGroupBase;
/****************************************************************************/
#if defined(__amigaos4__)
extern struct UserGroupIFace * NOCOMMON __IUserGroup;
extern struct UserGroupIFace *__IUserGroup;
#endif /* __amigaos4__ */

View File

@@ -1,5 +1,5 @@
/*
* $Id: usergroup_init_exit.c,v 1.3 2004-09-29 19:57:58 obarthel Exp $
* $Id: usergroup_init_exit.c,v 1.1.1.1 2004-07-26 16:32:38 obarthel Exp $
*
* :ts=4
*
@@ -54,17 +54,12 @@ extern char * __program_name;
/****************************************************************************/
struct Library * NOCOMMON __UserGroupBase;
extern void __show_error(const char * message);
/****************************************************************************/
#if defined(__amigaos4__)
struct UserGroupIFace * NOCOMMON __IUserGroup;
#endif /* __amigaos4__ */
/****************************************************************************/
CLIB_DESTRUCTOR(__usergroup_exit)
void
__usergroup_exit(void)
{
ENTER();
@@ -89,7 +84,8 @@ CLIB_DESTRUCTOR(__usergroup_exit)
/****************************************************************************/
CLIB_CONSTRUCTOR(__usergroup_init)
int
__usergroup_init(void)
{
struct TagItem tags[2];
int result = ERROR;
@@ -143,11 +139,7 @@ CLIB_CONSTRUCTOR(__usergroup_init)
PROFILE_ON();
RETURN(result);
if(result == OK)
CONSTRUCTOR_SUCCEED();
else
CONSTRUCTOR_FAIL();
return(result);
}
/****************************************************************************/