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

17 Commits

Author SHA1 Message Date
Olaf Barthel
48f67425c0 This commit was manufactured by cvs2svn to create tag 'V1_178'.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/tags/V1_178@14751 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-10-07 14:58:04 +00:00
Olaf Barthel
aa3ccda8de 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.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14750 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-10-07 14:58:03 +00:00
Thomas Frieden
8062f49f1c Fixes for compiler errors with soft-float
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14749 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-10-07 11:03:46 +00:00
Olaf Barthel
1310865c33 - Floating point support code generation was enabled for the entire PowerPC
library, and not just for "libm.a". Fixed.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14748 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-10-07 09:20:44 +00:00
Olaf Barthel
2ed76311fd - Updated the release notes file.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14747 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-10-02 15:59:40 +00:00
Olaf Barthel
3f19d52557 - Fixed the stack swapping function which, for reasons unknown, ceased to work.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14746 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-10-02 15:56:13 +00:00
Olaf Barthel
7038751f6b - Updated the .cvsignore file to ignore the _rev.i and _rev.s files.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14745 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-10-01 15:56:54 +00:00
Olaf Barthel
5d9e4c07a6 - 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.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14744 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-09-29 19:57:58 +00:00
Olaf Barthel
f49a45f6a8 - The socket exit code now calls the common stdio function which
flushes and shuts down all buffered and unbuffered files.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14743 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-09-29 17:03:57 +00:00
Olaf Barthel
fef99a0181 - Reversed the 'unsigned long' -> 'ULONG' change in the constructor
handling code. It is not necessary.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14742 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-09-29 16:54:54 +00:00
Olaf Barthel
17a0e794c5 - Added an OS4 specific build makefile.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14741 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-09-29 14:37:10 +00:00
Olaf Barthel
64f39b51ae - Modified the socket functions which now take parameters to constant
pointers.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14740 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-09-29 14:31:57 +00:00
Olaf Barthel
a7e0bc8e16 - Fixed fabs() for PowerPC soft-float support; previously, the function
definitions would clash.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14739 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-09-29 14:30:03 +00:00
Olaf Barthel
14595cc0a8 - unistd_timer.c was missing...
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14738 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-09-29 14:21:34 +00:00
Olaf Barthel
8555296691 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>.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14737 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-09-29 14:17:46 +00:00
Olaf Barthel
53bb602493 - Added usleep(), and created wrapper code that both sleep() and
usleep() can use.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14736 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-09-29 12:10:35 +00:00
Olaf Barthel
a048eadf09 - The timeval definition should work with OS 3.1 compatible header files again.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14735 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-09-29 10:15:57 +00:00
62 changed files with 767 additions and 655 deletions

View File

@@ -1,5 +1,5 @@
# #
# $Id: GNUmakefile.68k,v 1.9 2004-09-20 17:16:06 obarthel Exp $ # $Id: GNUmakefile.68k,v 1.11 2004-10-07 09:20:44 obarthel Exp $
# #
# :ts=8 # :ts=8
# #
@@ -40,7 +40,7 @@ endif
.c.o: .c.o:
@echo "Compiling $<" @echo "Compiling $<"
@$(CC) -c $(CFLAGS) -DIEEE_FLOATING_POINT_SUPPORT $< @$(CC) -c $(CFLAGS) $<
$(LIBC_OBJS)/%.o : %.c $(LIBC_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):c]" @echo "Compiling $< [$(TYPE):c]"
@@ -147,7 +147,6 @@ C_LIB = \
fcntl_get_default_file.o \ fcntl_get_default_file.o \
libgen_basename.o \ libgen_basename.o \
libgen_dirname.o \ libgen_dirname.o \
locale_data.o \
locale_init_exit.o \ locale_init_exit.o \
locale_localeconv.o \ locale_localeconv.o \
locale_setlocale.o \ locale_setlocale.o \
@@ -318,7 +317,6 @@ C_LIB = \
stdlib_udivsi4.o \ stdlib_udivsi4.o \
stdlib_umodsi3.o \ stdlib_umodsi3.o \
stdlib_unsetenv.o \ stdlib_unsetenv.o \
stdlib_usergroup.o \
stdlib_wildcard_expand.o \ stdlib_wildcard_expand.o \
strings_strcasecmp.o \ strings_strcasecmp.o \
strings_strncasecmp.o \ strings_strncasecmp.o \
@@ -364,9 +362,9 @@ C_LIB = \
time_time.o \ time_time.o \
unistd_access.o \ unistd_access.o \
unistd_chdir.o \ unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \ unistd_chown.o \
unistd_currentpathname.o \ unistd_currentpathname.o \
unistd_data.o \
unistd_dup.o \ unistd_dup.o \
unistd_dup2.o \ unistd_dup2.o \
unistd_fchown.o \ unistd_fchown.o \
@@ -384,8 +382,11 @@ C_LIB = \
unistd_realpath.o \ unistd_realpath.o \
unistd_sleep.o \ unistd_sleep.o \
unistd_symlink.o \ unistd_symlink.o \
unistd_timer.o \
unistd_time_delay.o \
unistd_truncate.o \ unistd_truncate.o \
unistd_unlink.o \ unistd_unlink.o \
unistd_usleep.o \
utime_utime.o utime_utime.o
UNIX_LIB = \ UNIX_LIB = \
@@ -424,6 +425,7 @@ UNIX_LIB = \
stdlib_system.o \ stdlib_system.o \
unistd_access.o \ unistd_access.o \
unistd_chdir.o \ unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \ unistd_chown.o \
unistd_getcwd.o \ unistd_getcwd.o \
unistd_lchown.o \ unistd_lchown.o \

View File

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

View File

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

View File

@@ -1 +1 @@
176 178

View File

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

View File

@@ -1 +1 @@
176 178

View File

@@ -1,6 +1,53 @@
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> - Added strtoll() and strtoull(), with further changes to <limits.h>
and <stdlib.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) c.lib 1.175 (10.9.2004)

View File

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

View File

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

View File

@@ -1 +1 @@
176 178

View File

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

View File

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

View File

@@ -1,45 +0,0 @@
/*
* $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.1.1.1 2004-07-26 16:30:35 obarthel Exp $ * $Id: locale_headers.h,v 1.2 2004-09-29 19:57:57 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -69,12 +69,12 @@
/****************************************************************************/ /****************************************************************************/
extern struct Locale * __default_locale; extern struct Locale * NOCOMMON __default_locale;
extern struct Locale * __locale_table[NUM_LOCALES]; extern struct Locale * NOCOMMON __locale_table[NUM_LOCALES];
/****************************************************************************/ /****************************************************************************/
extern char __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN]; extern char NOCOMMON __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];
/****************************************************************************/ /****************************************************************************/

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: locale_init_exit.c,v 1.1.1.1 2004-07-26 16:30:35 obarthel Exp $ * $Id: locale_init_exit.c,v 1.3 2004-09-29 19:57:57 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -41,6 +41,25 @@
/****************************************************************************/ /****************************************************************************/
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 void
__close_all_locales(void) __close_all_locales(void)
{ {
@@ -71,8 +90,7 @@ __close_all_locales(void)
/****************************************************************************/ /****************************************************************************/
void CLIB_DESTRUCTOR(__locale_exit)
__locale_exit(void)
{ {
ENTER(); ENTER();
@@ -107,8 +125,7 @@ __locale_exit(void)
/****************************************************************************/ /****************************************************************************/
int CLIB_CONSTRUCTOR(__locale_init)
__locale_init(void)
{ {
int i; int i;
@@ -145,5 +162,6 @@ __locale_init(void)
PROFILE_ON(); PROFILE_ON();
RETURN(OK); RETURN(OK);
return(OK);
CONSTRUCTOR_SUCCEED();
} }

View File

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

View File

@@ -1 +1 @@
176 178

View File

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

View File

@@ -1 +1 @@
176 178

View File

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

View File

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

View File

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

View File

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

View File

@@ -1 +1 @@
176 178

View File

@@ -1,11 +1,6 @@
c.lib 1.175 (10.9.2004) c.lib 1.178 (7.10.2004)
- The timeval definition in <sys/time.h> can now be used without - The OS4 version had floating point math support code enabled in all
having to include <exec/types.h> and <devices/timer.h>. Just libraries and not just "libm.a". Trying to link with, for example,
define the __USE_CLIB2_TIMEVAL preprocessor symbol. However, "libc.a" would bring up a number of unsatisfied symbol references
this is intended only for code which for certain reasons cannot which could be fixed only by linking against "libm.a", too.
include these header files. Don't use this approach if your
code may include <devices/timer.h> at some point.
- 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.8 2004-09-20 17:16:06 obarthel Exp $ # $Id: smakefile,v 1.10 2004-09-29 14:17:44 obarthel Exp $
# #
# :ts=8 # :ts=8
# #
@@ -171,7 +171,6 @@ LIBGEN_OBJ = \
libgen_dirname.o libgen_dirname.o
LOCALE_OBJ = \ LOCALE_OBJ = \
locale_data.o \
locale_init_exit.o \ locale_init_exit.o \
locale_localeconv.o \ locale_localeconv.o \
locale_setlocale.o locale_setlocale.o
@@ -474,9 +473,9 @@ TIME_OBJ = \
UNISTD_OBJ = \ UNISTD_OBJ = \
unistd_access.o \ unistd_access.o \
unistd_chdir.o \ unistd_chdir.o \
unistd_chdir_exit.o \
unistd_chown.o \ unistd_chown.o \
unistd_currentpathname.o \ unistd_currentpathname.o \
unistd_data.o \
unistd_dup.o \ unistd_dup.o \
unistd_dup2.o \ unistd_dup2.o \
unistd_fchown.o \ unistd_fchown.o \
@@ -497,12 +496,15 @@ UNISTD_OBJ = \
unistd_sleep.o \ unistd_sleep.o \
unistd_strip_double_slash.o \ unistd_strip_double_slash.o \
unistd_symlink.o \ unistd_symlink.o \
unistd_time_delay.o \
unistd_timer.o \
unistd_translatea2u.o \ unistd_translatea2u.o \
unistd_translaterel.o \ unistd_translaterel.o \
unistd_translateu2a.o \ unistd_translateu2a.o \
unistd_truncate.o \ unistd_truncate.o \
unistd_unix_path_semantics.o \ unistd_unix_path_semantics.o \
unistd_unlink.o unistd_unlink.o \
unistd_usleep.o
# \ # \
# unistd_wildcard_expand.o # unistd_wildcard_expand.o

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: socket_init_exit.c,v 1.2 2004-07-28 15:50:45 obarthel Exp $ * $Id: socket_init_exit.c,v 1.4 2004-09-29 17:03:57 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -84,16 +84,11 @@ 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); extern void __socket_hook_entry(struct Hook * hook,struct fd * fd,struct file_hook_message * message);
/****************************************************************************/ /****************************************************************************/
void CLIB_DESTRUCTOR(__socket_exit)
__socket_exit(void)
{ {
ENTER(); ENTER();
@@ -116,16 +111,7 @@ __socket_exit(void)
* does not happen, the stdio cleanup function will * does not happen, the stdio cleanup function will
* crash (with bells on). * crash (with bells on).
*/ */
if(__fd != NULL) __close_all_files();
{
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__) #if defined(__amigaos4__)
{ {

View File

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

View File

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

View File

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

View File

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

View File

@@ -1 +1 @@
176 178

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdlib_constructor_begin.c,v 1.1.1.1 2004-07-26 16:31:52 obarthel Exp $ * $Id: stdlib_constructor_begin.c,v 1.2 2004-09-29 19:57:57 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -42,80 +42,7 @@
/****************************************************************************/ /****************************************************************************/
#if defined(__amigaos4__) #if defined(__SASC)
/****************************************************************************/
/*
* 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)
/****************************************************************************/ /****************************************************************************/
@@ -201,9 +128,21 @@ _do_ctors(void)
ULONG nptrs = (ULONG)__CTOR_LIST__[0]; ULONG nptrs = (ULONG)__CTOR_LIST__[0];
ULONG i; ULONG i;
ENTER();
D(("there are %ld constructors to be called",nptrs));
/* Call all constructors in forward order */ /* Call all constructors in forward order */
for(i = 0 ; i < nptrs ; i++) for(i = 0 ; i < nptrs ; i++)
{
D(("calling constructor #%ld, 0x%08lx",i,__CTOR_LIST__[1+i]));
__CTOR_LIST__[1+i](); __CTOR_LIST__[1+i]();
}
SHOWMSG("all done.");
LEAVE();
} }
/****************************************************************************/ /****************************************************************************/
@@ -216,6 +155,10 @@ _do_dtors(void)
ULONG nptrs = (ULONG)__DTOR_LIST__[0]; ULONG nptrs = (ULONG)__DTOR_LIST__[0];
static ULONG i; static ULONG i;
ENTER();
D(("there are %ld destructors to be called",nptrs));
/* If one of the destructors drops into /* If one of the destructors drops into
* exit(), processing will continue with * exit(), processing will continue with
* the next following destructor. * the next following destructor.
@@ -224,7 +167,15 @@ _do_dtors(void)
/* Call all destructors in reverse order */ /* Call all destructors in reverse order */
while(i++ < nptrs) while(i++ < nptrs)
{
D(("calling destructor #%ld, 0x%08lx",i,__DTOR_LIST__[1+nptrs - i]));
__DTOR_LIST__[1+nptrs - i](); __DTOR_LIST__[1+nptrs - i]();
}
SHOWMSG("all done.");
LEAVE();
} }
/****************************************************************************/ /****************************************************************************/

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdlib_swapstack.c,v 1.1.1.1 2004-07-26 16:32:11 obarthel Exp $ * $Id: stdlib_swapstack.c,v 1.2 2004-10-02 15:56:13 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -94,51 +94,19 @@ ___swap_stack_and_call: \n\
/****************************************************************************/ /****************************************************************************/
__asm(" \n\ /* Swap the current stack configuration out, call a function provided,
\n\ swap the stack configuration back and return. */
.text \n\ int
.align 2 \n\ __swap_stack_and_call(struct StackSwapStruct * stk,APTR function)
\n\ {
.set MainInterface, 632 \n\ register int result;
.set IExec_StackSwap, 272 \n\
\n\ StackSwap(stk);
.globl SysBase \n\ result = ((int (*)(void))function)();
.globl __swap_stack_and_call \n\ StackSwap(stk);
\n\
__swap_stack_and_call: \n\ return(result);
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: stdlib_wildcard_expand.c,v 1.1.1.1 2004-07-26 16:32:13 obarthel Exp $ * $Id: stdlib_wildcard_expand.c,v 1.2 2004-09-29 14:17:44 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -39,7 +39,6 @@
UBYTE * WEAK __allocate_quote_vector(int num_parameters UNUSED); UBYTE * WEAK __allocate_quote_vector(int num_parameters UNUSED);
int WEAK __wildcard_expand_init(void); int WEAK __wildcard_expand_init(void);
void WEAK __wildcard_expand_exit(void);
/****************************************************************************/ /****************************************************************************/
@@ -56,10 +55,3 @@ __wildcard_expand_init(void)
{ {
return(0); return(0);
} }
/****************************************************************************/
void
__wildcard_expand_exit(void)
{
}

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: time_clock.c,v 1.1.1.1 2004-07-26 16:32:21 obarthel Exp $ * $Id: time_clock.c,v 1.2 2004-09-29 19:57:58 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -37,6 +37,22 @@
/****************************************************************************/ /****************************************************************************/
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_t
clock(void) clock(void)
{ {
@@ -57,8 +73,8 @@ clock(void)
minutes_now = now.ds_Days * 24 * 60 + now.ds_Minute; minutes_now = now.ds_Days * 24 * 60 + now.ds_Minute;
ticks_now = now.ds_Tick; ticks_now = now.ds_Tick;
minutes_start = __start_time.ds_Days * 24 * 60 + __start_time.ds_Minute; minutes_start = start_time.ds_Days * 24 * 60 + start_time.ds_Minute;
ticks_start = __start_time.ds_Tick; ticks_start = start_time.ds_Tick;
/* Subtract the start time from the current time. We start /* Subtract the start time from the current time. We start
* with the ticks. * with the ticks.

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: unistd_headers.h,v 1.1.1.1 2004-07-26 16:32:28 obarthel Exp $ * $Id: unistd_headers.h,v 1.3 2004-09-29 19:57:58 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -47,22 +47,29 @@ extern char __current_path_name[MAXPATHLEN];
/****************************************************************************/ /****************************************************************************/
/* Names of files and directories to delete when shutting down. */ /* Names of files and directories to delete when shutting down. */
extern struct MinList __unlink_list; extern struct MinList NOCOMMON __unlink_list;
/****************************************************************************/ /****************************************************************************/
/* Local timer I/O. */ /* Local timer I/O. */
extern struct MsgPort * __timer_port; extern struct MsgPort * NOCOMMON __timer_port;
extern struct timerequest * __timer_request; 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__ */
/****************************************************************************/ /****************************************************************************/
/* If the program's current directory was changed, here is where /* If the program's current directory was changed, here is where
* we find out about it. we find out about it. */
*/ extern BPTR NOCOMMON __original_current_directory;
extern BPTR __original_current_directory; extern BOOL NOCOMMON __current_directory_changed;
extern BOOL __current_directory_changed; extern BOOL NOCOMMON __unlock_current_directory;
extern BOOL __unlock_current_directory;
/****************************************************************************/ /****************************************************************************/
@@ -75,4 +82,8 @@ 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 */ #endif /* _UNISTD_HEADERS_H */

View File

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

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: unistd_sleep.c,v 1.2 2004-08-07 09:15:33 obarthel Exp $ * $Id: unistd_sleep.c,v 1.3 2004-09-29 12:10:29 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -44,132 +44,11 @@
unsigned int unsigned int
sleep(unsigned int seconds) sleep(unsigned int seconds)
{ {
static BOOL sleeping; unsigned int result;
unsigned int result = 0;
ENTER(); ENTER();
SHOWVALUE(seconds); result = __time_delay(seconds,0);
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);
return(result); return(result);

139
library/unistd_time_delay.c Normal file
View File

@@ -0,0 +1,139 @@
/*
* $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);
}

146
library/unistd_timer.c Normal file
View File

@@ -0,0 +1,146 @@
/*
* $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: stdlib_usergroup.c,v 1.1.1.1 2004-07-26 16:32:13 obarthel Exp $ * $Id: unistd_usleep.c,v 1.1 2004-09-29 12:10:29 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -31,21 +31,24 @@
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef _STDLIB_HEADERS_H #ifndef _UNISTD_HEADERS_H
#include "stdlib_headers.h" #include "unistd_headers.h"
#endif /* _STDLIB_HEADERS_H */ #endif /* _UNISTD_HEADERS_H */
/****************************************************************************/
/* The following is not part of the ISO 'C' (1994) standard. */
/****************************************************************************/ /****************************************************************************/
void void
__usergroup_exit(void) usleep(unsigned long microseconds)
{ {
} ENTER();
/****************************************************************************/ SHOWVALUE(microseconds);
int __time_delay(0,microseconds);
__usergroup_init(void)
{ LEAVE();
return(OK);
} }

View File

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

View File

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

View File

@@ -1 +1 @@
176 178

View File

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

View File

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

View File

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