mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
Compare commits
1 Commits
BEFORE_CON
...
V1_188
| Author | SHA1 | Date | |
|---|---|---|---|
| 1efe5fde4d |
@ -1,5 +1,5 @@
|
||||
#
|
||||
# $Id: GNUmakefile.68k,v 1.40 2005-03-11 09:37:27 obarthel Exp $
|
||||
# $Id: GNUmakefile.68k,v 1.26 2005-02-07 10:52:16 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
@ -77,28 +77,23 @@ $(LIBAMIGA_OBJS)/%.o : %.c
|
||||
##############################################################################
|
||||
|
||||
ifeq (small_data_020,$(TYPE))
|
||||
CODE_TYPE := -m68020-60
|
||||
CODE_FLAGS := -fbaserel -DSMALL_DATA -DM68020
|
||||
CODE_TYPE := -fbaserel -DSMALL_DATA -m68020-60 -DM68020
|
||||
endif
|
||||
|
||||
ifeq (small_data,$(TYPE))
|
||||
CODE_TYPE := -m68000
|
||||
CODE_FLAGS := -fbaserel -DSMALL_DATA
|
||||
CODE_TYPE := -fbaserel -DSMALL_DATA -m68000
|
||||
endif
|
||||
|
||||
ifeq (small_data32,$(TYPE))
|
||||
CODE_TYPE := -m68020-60
|
||||
CODE_FLAGS := -fbaserel32 -DSMALL_DATA32 -DM68020
|
||||
CODE_TYPE := -fbaserel32 -DSMALL_DATA32 -m68020-60 -DM68020
|
||||
endif
|
||||
|
||||
ifeq (large_data_020,$(TYPE))
|
||||
CODE_TYPE := -m68020-60
|
||||
CODE_FLAGS := -DM68020
|
||||
CODE_TYPE := -m68020-60 -DM68020
|
||||
endif
|
||||
|
||||
ifeq (large_data,$(TYPE))
|
||||
CODE_TYPE := -m68000
|
||||
CODE_FLAGS :=
|
||||
CODE_TYPE := -m68000
|
||||
endif
|
||||
|
||||
##############################################################################
|
||||
@ -117,7 +112,7 @@ INCLUDES = -Iinclude -I. -Inetinclude
|
||||
#OPTIMIZE = -O2 -fomit-frame-pointer
|
||||
#DEBUG = -g2
|
||||
|
||||
CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_FLAGS) $(CODE_TYPE) $(INCLUDES)
|
||||
CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDES)
|
||||
|
||||
##############################################################################
|
||||
|
||||
@ -135,30 +130,27 @@ C_LIB = \
|
||||
ctype_isspace.o \
|
||||
ctype_isupper.o \
|
||||
ctype_isxdigit.o \
|
||||
ctype_table.o \
|
||||
ctype_tolower.o \
|
||||
ctype_toupper.o \
|
||||
ctype_table.o \
|
||||
dirent_closedir.o \
|
||||
dirent_data.o \
|
||||
dirent_rewinddir.o \
|
||||
dirent_opendir.o \
|
||||
dirent_readdir.o \
|
||||
dirent_rewinddir.o \
|
||||
errno_data.o \
|
||||
fcntl_close.o \
|
||||
fcntl_creat.o \
|
||||
fcntl_fcntl.o \
|
||||
fcntl_get_default_file.o \
|
||||
fcntl_lock.o \
|
||||
fcntl_lseek.o \
|
||||
fcntl_open.o \
|
||||
fcntl_read.o \
|
||||
fcntl_write.o \
|
||||
ftw_ftw.o \
|
||||
ftw_nftw.o \
|
||||
fcntl_get_default_file.o \
|
||||
libgen_basename.o \
|
||||
libgen_dirname.o \
|
||||
locale_init_exit.o \
|
||||
locale_localeconv.o \
|
||||
locale_open_locale.o \
|
||||
locale_setlocale.o \
|
||||
mount_convertinfo.o \
|
||||
mount_fstatfs.o \
|
||||
@ -176,6 +168,7 @@ C_LIB = \
|
||||
signal_sigsetmask.o \
|
||||
stat_chmod.o \
|
||||
stat_convertfileinfo.o \
|
||||
stat_data.o \
|
||||
stat_fchmod.o \
|
||||
stat_fstat.o \
|
||||
stat_lstat.o \
|
||||
@ -185,22 +178,21 @@ C_LIB = \
|
||||
stat_umask.o \
|
||||
stdio_asprintf.o \
|
||||
stdio_clearerr.o \
|
||||
stdio_data.o \
|
||||
stdio_dropiobreadbuffer.o \
|
||||
stdio_duplicate_fd.o \
|
||||
stdio_examine_fh.o \
|
||||
stdio_fclose.o \
|
||||
stdio_fdhookentry.o \
|
||||
stdio_feof.o \
|
||||
stdio_ferror.o \
|
||||
stdio_fflush.o \
|
||||
stdio_flush.o \
|
||||
stdio_fgetc.o \
|
||||
stdio_fgetpos.o \
|
||||
stdio_fgets.o \
|
||||
stdio_filliobreadbuffer.o \
|
||||
stdio_findvacantfdentry.o \
|
||||
stdio_findvacantiobentry.o \
|
||||
stdio_flockfile.o \
|
||||
stdio_flush.o \
|
||||
stdio_flushiobwritebuffer.o \
|
||||
stdio_fopen.o \
|
||||
stdio_fprintf.o \
|
||||
@ -212,38 +204,27 @@ C_LIB = \
|
||||
stdio_fseek.o \
|
||||
stdio_fsetpos.o \
|
||||
stdio_ftell.o \
|
||||
stdio_ftrylockfile.o \
|
||||
stdio_funlockfile.o \
|
||||
stdio_fwrite.o \
|
||||
stdio_getc.o \
|
||||
stdio_getc_unlocked.o \
|
||||
stdio_getchar.o \
|
||||
stdio_getchar_unlocked.o \
|
||||
stdio_gets.o \
|
||||
stdio_get_file_descriptor.o \
|
||||
stdio_gets.o \
|
||||
stdio_growfdtable.o \
|
||||
stdio_growiobtable.o \
|
||||
stdio_grow_file.o \
|
||||
stdio_initializefd.o \
|
||||
stdio_initializeiob.o \
|
||||
stdio_init_exit.o \
|
||||
stdio_file_init.o \
|
||||
stdio_iobhookentry.o \
|
||||
stdio_lock.o \
|
||||
stdio_locksemaphorename.o \
|
||||
stdio_nostdio.o \
|
||||
stdio_openiob.o \
|
||||
stdio_parent_of_fh.o \
|
||||
stdio_perror.o \
|
||||
stdio_popen.o \
|
||||
stdio_printf.o \
|
||||
stdio_putc.o \
|
||||
stdio_putc_unlocked.o \
|
||||
stdio_putchar.o \
|
||||
stdio_putchar_unlocked.o \
|
||||
stdio_puts.o \
|
||||
stdio_remove.o \
|
||||
stdio_remove_fd_alias.o \
|
||||
stdio_rename.o \
|
||||
stdio_rewind.o \
|
||||
stdio_scanf.o \
|
||||
@ -257,7 +238,6 @@ C_LIB = \
|
||||
stdio_tmpnam.o \
|
||||
stdio_translateioerror.o \
|
||||
stdio_ungetc.o \
|
||||
stdio_unlockfile.o \
|
||||
stdio_vasprintf.o \
|
||||
stdio_vasprintf_hook_entry.o \
|
||||
stdio_vfprintf.o \
|
||||
@ -274,12 +254,13 @@ C_LIB = \
|
||||
stdlib_atexit.o \
|
||||
stdlib_atoi.o \
|
||||
stdlib_atol.o \
|
||||
stdlib_atoll.o \
|
||||
stdlib_bsearch.o \
|
||||
stdlib_calloc.o \
|
||||
stdlib_checkdetach.o \
|
||||
stdlib_constructor.o \
|
||||
stdlib_constructor_begin.o \
|
||||
stdlib_constructor_end.o \
|
||||
stdlib_data.o \
|
||||
stdlib_default_pool_size.o \
|
||||
stdlib_default_puddle_size.o \
|
||||
stdlib_destructor.o \
|
||||
@ -291,10 +272,10 @@ C_LIB = \
|
||||
stdlib_dosbase.o \
|
||||
stdlib_exit.o \
|
||||
stdlib_free.o \
|
||||
stdlib_get_errno.o \
|
||||
stdlib_getdefstacksize.o \
|
||||
stdlib_getenv.o \
|
||||
stdlib_getsp.o \
|
||||
stdlib_get_errno.o \
|
||||
stdlib_init_exit.o \
|
||||
stdlib_isresident.o \
|
||||
stdlib_labs.o \
|
||||
@ -315,13 +296,11 @@ C_LIB = \
|
||||
stdlib_putenv.o \
|
||||
stdlib_qsort.o \
|
||||
stdlib_rand.o \
|
||||
stdlib_rand_r.o \
|
||||
stdlib_realloc.o \
|
||||
stdlib_red_black.o \
|
||||
stdlib_semaphore.o \
|
||||
stdlib_setenv.o \
|
||||
stdlib_setjmp.o \
|
||||
stdlib_set_errno.o \
|
||||
stdlib_setjmp.o \
|
||||
stdlib_set_process_window.o \
|
||||
stdlib_shell_escape.o \
|
||||
stdlib_showerror.o \
|
||||
@ -333,11 +312,10 @@ C_LIB = \
|
||||
stdlib_stacksafezone.o \
|
||||
stdlib_stacksize.o \
|
||||
stdlib_stack_usage.o \
|
||||
stdlib_arg.o \
|
||||
stdlib_stdio_window_spec.o \
|
||||
stdlib_startup.o \
|
||||
stdlib_strtol.o \
|
||||
stdlib_strtoll.o \
|
||||
stdlib_strtoul.o \
|
||||
stdlib_strtoll.o \
|
||||
stdlib_strtoull.o \
|
||||
stdlib_swapstack.o \
|
||||
stdlib_sysbase.o \
|
||||
@ -349,7 +327,7 @@ C_LIB = \
|
||||
stdlib_umodsi3.o \
|
||||
stdlib_unsetenv.o \
|
||||
stdlib_wildcard_expand.o \
|
||||
strings_ffs.o \
|
||||
stdlib_stdio_window_spec.o \
|
||||
strings_strcasecmp.o \
|
||||
strings_strncasecmp.o \
|
||||
string_bcmp.o \
|
||||
@ -427,18 +405,17 @@ C_LIB = \
|
||||
unistd_realpath.o \
|
||||
unistd_sleep.o \
|
||||
unistd_symlink.o \
|
||||
unistd_sync_fd.o \
|
||||
unistd_timer.o \
|
||||
unistd_time_delay.o \
|
||||
unistd_truncate.o \
|
||||
unistd_unlink.o \
|
||||
unistd_usleep.o \
|
||||
utime_utime.o \
|
||||
utsname_uname.o
|
||||
utime_utime.o
|
||||
|
||||
UNIX_LIB = \
|
||||
unix.lib_rev.o \
|
||||
dirent_closedir.o \
|
||||
dirent_data.o \
|
||||
dirent_rewinddir.o \
|
||||
dirent_opendir.o \
|
||||
dirent_readdir.o \
|
||||
@ -458,11 +435,9 @@ UNIX_LIB = \
|
||||
stdio_fflush.o \
|
||||
stdio_fopen.o \
|
||||
stdio_init_exit.o \
|
||||
stdio_file_init.o \
|
||||
stdio_locksemaphorename.o \
|
||||
stdio_openiob.o \
|
||||
stdio_popen.o \
|
||||
stdio_record_locking.o \
|
||||
stdio_remove.o \
|
||||
stdio_rename.o \
|
||||
stdlib_mkdtemp.o \
|
||||
@ -498,6 +473,7 @@ MATH_LIB = \
|
||||
math_ceil.o \
|
||||
math_cos.o \
|
||||
math_cosh.o \
|
||||
math_data.o \
|
||||
math_exp.o \
|
||||
math_fabs.o \
|
||||
math_floor.o \
|
||||
@ -537,12 +513,12 @@ MATH_LIB = \
|
||||
stdio_vsnprintf.o \
|
||||
stdio_vsprintf.o \
|
||||
stdlib_atof.o \
|
||||
stdlib_machine_test.o \
|
||||
stdlib_strtod.o \
|
||||
time_difftime.o
|
||||
|
||||
MATH_LIB_881 = \
|
||||
m881.lib_rev.o \
|
||||
stdlib_machine_test.o \
|
||||
$(MATH_LIB)
|
||||
|
||||
MATH_LIB_IEEE = \
|
||||
@ -592,6 +568,7 @@ NET_LIB = \
|
||||
socket_accept.o \
|
||||
socket_bind.o \
|
||||
socket_connect.o \
|
||||
socket_data.o \
|
||||
socket_gethostbyaddr.o \
|
||||
socket_gethostbyname.o \
|
||||
socket_gethostid.o \
|
||||
@ -658,8 +635,7 @@ NET_LIB = \
|
||||
usergroup_setregid.o \
|
||||
usergroup_setreuid.o \
|
||||
usergroup_setsid.o \
|
||||
usergroup_setuid.o \
|
||||
utsname_uname.o
|
||||
usergroup_setuid.o
|
||||
|
||||
DEBUG_LIB = \
|
||||
debug.lib_rev.o \
|
||||
@ -749,7 +725,7 @@ LIBS_020 := $(LIBM881_OBJS)/libm881.a $(LIBS_68K)
|
||||
##############################################################################
|
||||
|
||||
# The 881 math library won't build in plain 68k mode
|
||||
ifneq (,$(findstring 68020,$(CODE_FLAGS)))
|
||||
ifneq (,$(findstring 68020,$(CODE_TYPE)))
|
||||
LIBS := $(LIBS_020)
|
||||
else
|
||||
LIBS := $(LIBS_68K)
|
||||
@ -846,47 +822,47 @@ lib/libm020 : lib
|
||||
|
||||
lib/libb/libm020/libm.a: lib lib/libb/libm020
|
||||
$(MAKE) TYPE=small_data_020 kitchen_sink
|
||||
@$(COPY) $(foreach file,$(LIBS_020),small_data_020/$(file)) lib/libb/libm020
|
||||
$(COPY) $(foreach file,$(LIBS_020),small_data_020/$(file)) lib/libb/libm020
|
||||
|
||||
lib/libb/libm.a: lib lib/libb
|
||||
$(MAKE) TYPE=small_data kitchen_sink
|
||||
@$(COPY) $(foreach file,$(LIBS_68K),small_data/$(file)) lib/libb
|
||||
$(COPY) $(foreach file,$(LIBS_68K),small_data/$(file)) lib/libb
|
||||
|
||||
lib/libb32/libm020/libm.a: lib lib/libb32 lib/libb32/libm020
|
||||
$(MAKE) TYPE=small_data32 kitchen_sink
|
||||
@$(COPY) $(foreach file,$(LIBS_020),small_data32/$(file)) lib/libb32/libm020
|
||||
$(COPY) $(foreach file,$(LIBS_020),small_data32/$(file)) lib/libb32/libm020
|
||||
|
||||
lib/libm020/libm.a: lib lib/libm020
|
||||
$(MAKE) TYPE=large_data_020 kitchen_sink
|
||||
@$(COPY) $(foreach file,$(LIBS_020),large_data_020/$(file)) lib/libm020
|
||||
$(COPY) $(foreach file,$(LIBS_020),large_data_020/$(file)) lib/libm020
|
||||
|
||||
lib/libm.a: lib
|
||||
$(MAKE) TYPE=large_data kitchen_sink
|
||||
@$(COPY) $(foreach file,$(LIBS_68K),large_data/$(file)) lib
|
||||
$(COPY) $(foreach file,$(LIBS_68K),large_data/$(file)) lib
|
||||
|
||||
lib/nrcrt0.o : lib nrcrt0.o
|
||||
@$(COPY) nrcrt0.o lib
|
||||
$(COPY) nrcrt0.o lib
|
||||
|
||||
lib/nbcrt0.o : lib nbcrt0.o
|
||||
@$(COPY) nbcrt0.o lib
|
||||
$(COPY) nbcrt0.o lib
|
||||
|
||||
lib/ncrt0.o : lib ncrt0.o
|
||||
@$(COPY) ncrt0.o lib
|
||||
$(COPY) ncrt0.o lib
|
||||
|
||||
lib/n32bcrt0.o : lib nb32crt0.o
|
||||
@$(COPY) nb32crt0.o lib
|
||||
$(COPY) nb32crt0.o lib
|
||||
|
||||
lib/n32rcrt0.o : lib nr32crt0.o
|
||||
@$(COPY) nr32crt0.o lib
|
||||
$(COPY) nr32crt0.o lib
|
||||
|
||||
lib/mainnb.o : lib mainnb.o
|
||||
@$(COPY) mainnb.o lib
|
||||
$(COPY) mainnb.o lib
|
||||
|
||||
lib/mainb.o : lib mainb.o
|
||||
@$(COPY) mainb.o lib
|
||||
$(COPY) mainb.o lib
|
||||
|
||||
lib/mainb32.o : lib mainb32.o
|
||||
@$(COPY) mainb32.o lib
|
||||
$(COPY) mainb32.o lib
|
||||
|
||||
##############################################################################
|
||||
|
||||
@ -940,27 +916,6 @@ $(LIBC_OBJS)/stdlib_red_black.o : stdlib_red_black.c stdlib_mem_debug.h
|
||||
|
||||
##############################################################################
|
||||
|
||||
# The -fbaserel32 option requires the CPU type to be 68010/68020, too.
|
||||
ifneq (,$(findstring fbaserel32,$(CODE_FLAGS)))
|
||||
LOCAL_CODE_FLAGS := $(CODE_FLAGS) $(CODE_TYPE)
|
||||
else
|
||||
LOCAL_CODE_FLAGS := $(CODE_FLAGS)
|
||||
endif
|
||||
|
||||
$(LIBC_OBJS)/stdlib_machine_test.o : stdlib_machine_test.c
|
||||
@echo "Compiling $< [$(TYPE):c]"
|
||||
@$(CC) -o $(LIBC_OBJS)/stdlib_machine_test.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) $(INCLUDES) $<
|
||||
|
||||
$(LIBM881_OBJS)/stdlib_machine_test.o : stdlib_machine_test.c
|
||||
@echo "Compiling $< [$(TYPE):c]"
|
||||
@$(CC) -o $(LIBM881_OBJS)/stdlib_machine_test.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) $(INCLUDES) -DM68881_FLOATING_POINT_SUPPORT $<
|
||||
|
||||
$(LIBC_OBJS)/stdlib_showerror.o : stdlib_showerror.c
|
||||
@echo "Compiling $< [$(TYPE):c]"
|
||||
@$(CC) -o $(LIBC_OBJS)/stdlib_showerror.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(LOCAL_CODE_FLAGS) $(INCLUDES) $<
|
||||
|
||||
##############################################################################
|
||||
|
||||
$(LIBC_OBJS)/stdlib_alloca_debug.o : stdlib_alloca.c
|
||||
@echo "Compiling $< [$(TYPE):c debug]"
|
||||
@$(CC) -o $(LIBC_OBJS)/stdlib_alloca_debug.o -c $(CFLAGS) -D__USE_MEM_TREES -D__MEM_DEBUG stdlib_alloca.c
|
||||
@ -1088,56 +1043,25 @@ $(LIBAMIGA_OBJS)/libamiga.a : $(LIBAMIGA_OBJS) $(foreach file,$(AMIGA_LIB),$(LIB
|
||||
##############################################################################
|
||||
|
||||
nrcrt0.o : nrcrt0.S
|
||||
@echo "Assembling $< [resident]"
|
||||
@$(CC) -traditional -o $@ -c nrcrt0.S
|
||||
$(CC) -traditional -o $@ -c nrcrt0.S
|
||||
|
||||
nr32crt0.o : nrcrt0.S
|
||||
@echo "Assembling $< [resident32]"
|
||||
@$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c nrcrt0.S
|
||||
$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c nrcrt0.S
|
||||
|
||||
nbcrt0.o : ncrt0.S
|
||||
@echo "Assembling $< [small_data]"
|
||||
@$(CC) -traditional -DSMALL_DATA -o $@ -c ncrt0.S
|
||||
$(CC) -traditional -DSMALL_DATA -o $@ -c ncrt0.S
|
||||
|
||||
nb32crt0.o : ncrt0.S
|
||||
@echo "Assembling $< [small_data32]"
|
||||
@$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c ncrt0.S
|
||||
$(CC) -traditional -m68020 -DSMALL_DATA32 -o $@ -c ncrt0.S
|
||||
|
||||
ncrt0.o : ncrt0.S
|
||||
@echo "Assembling $< [large_data]"
|
||||
@$(CC) -traditional -o $@ -c ncrt0.S
|
||||
$(CC) -traditional -o $@ -c ncrt0.S
|
||||
|
||||
mainb32.o : stdlib_main.c
|
||||
@echo "Compiling $< [small_data32]"
|
||||
@$(CC) -o mainb32.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel32 -DSMALL_DATA32 -m68020-60 -DM68020 stdlib_main.c
|
||||
$(CC) -o mainb32.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel32 -DSMALL_DATA32 -m68020-60 -DM68020 stdlib_main.c
|
||||
|
||||
mainb.o : stdlib_main.c
|
||||
@echo "Compiling $< [small_data]"
|
||||
@$(CC) -o mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel -DSMALL_DATA -m68000 stdlib_main.c
|
||||
$(CC) -o mainb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -fbaserel -DSMALL_DATA -m68000 stdlib_main.c
|
||||
|
||||
mainnb.o : stdlib_main.c
|
||||
@echo "Compiling $< [large_data]"
|
||||
@$(CC) -o mainnb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -m68000 stdlib_main.c
|
||||
|
||||
##############################################################################
|
||||
|
||||
CONSTRUCTOR_FILES = \
|
||||
amiga_rexxvars.c \
|
||||
dirent_closedir.c \
|
||||
locale_init_exit.c \
|
||||
math_init_exit.c \
|
||||
socket_init_exit.c \
|
||||
stdio_file_init.c \
|
||||
stdio_init_exit.c \
|
||||
stdlib_alloca.c \
|
||||
stdlib_setenv.c \
|
||||
stdlib_stackextension.c \
|
||||
time_clock.c \
|
||||
unistd_chdir_exit.c \
|
||||
unistd_init_exit.c \
|
||||
unistd_timer.c \
|
||||
unistd_wildcard_expand.c \
|
||||
usergroup_init_exit.c
|
||||
|
||||
touch_constructor_files:
|
||||
touch $(CONSTRUCTOR_FILES)
|
||||
$(CC) -o mainnb.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -m68000 stdlib_main.c
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# $Id: GNUmakefile.os4,v 1.41 2005-03-11 09:37:28 obarthel Exp $
|
||||
# $Id: GNUmakefile.os4,v 1.26 2005-02-07 10:52:16 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
@ -111,7 +111,7 @@ WARNINGS = \
|
||||
# -Wconversion -Wshadow
|
||||
|
||||
INCLUDES = -Iinclude -I. -I$(SDK_INCLUDE)
|
||||
OPTIONS = -D__THREAD_SAFE -DNDEBUG -DUSE_64_BIT_INTS -D__USE_INLINE__ -Wa,-mregnames
|
||||
OPTIONS = -DNDEBUG -DUSE_64_BIT_INTS -D__USE_INLINE__ -Wa,-mregnames
|
||||
OPTIMIZE = -O -fomit-frame-pointer -funroll-loops
|
||||
#DEBUG = -g
|
||||
|
||||
@ -134,30 +134,27 @@ C_LIB = \
|
||||
ctype_isspace.o \
|
||||
ctype_isupper.o \
|
||||
ctype_isxdigit.o \
|
||||
ctype_table.o \
|
||||
ctype_tolower.o \
|
||||
ctype_toupper.o \
|
||||
ctype_table.o \
|
||||
dirent_closedir.o \
|
||||
dirent_data.o \
|
||||
dirent_rewinddir.o \
|
||||
dirent_opendir.o \
|
||||
dirent_readdir.o \
|
||||
dirent_rewinddir.o \
|
||||
errno_data.o \
|
||||
fcntl_close.o \
|
||||
fcntl_creat.o \
|
||||
fcntl_fcntl.o \
|
||||
fcntl_get_default_file.o \
|
||||
fcntl_lock.o \
|
||||
fcntl_lseek.o \
|
||||
fcntl_open.o \
|
||||
fcntl_read.o \
|
||||
fcntl_write.o \
|
||||
ftw_ftw.o \
|
||||
ftw_nftw.o \
|
||||
fcntl_get_default_file.o \
|
||||
libgen_basename.o \
|
||||
libgen_dirname.o \
|
||||
locale_init_exit.o \
|
||||
locale_localeconv.o \
|
||||
locale_open_locale.o \
|
||||
locale_setlocale.o \
|
||||
mount_convertinfo.o \
|
||||
mount_fstatfs.o \
|
||||
@ -175,6 +172,7 @@ C_LIB = \
|
||||
signal_sigsetmask.o \
|
||||
stat_chmod.o \
|
||||
stat_convertfileinfo.o \
|
||||
stat_data.o \
|
||||
stat_fchmod.o \
|
||||
stat_fstat.o \
|
||||
stat_lstat.o \
|
||||
@ -184,22 +182,21 @@ C_LIB = \
|
||||
stat_umask.o \
|
||||
stdio_asprintf.o \
|
||||
stdio_clearerr.o \
|
||||
stdio_data.o \
|
||||
stdio_dropiobreadbuffer.o \
|
||||
stdio_duplicate_fd.o \
|
||||
stdio_examine_fh.o \
|
||||
stdio_fclose.o \
|
||||
stdio_fdhookentry.o \
|
||||
stdio_feof.o \
|
||||
stdio_ferror.o \
|
||||
stdio_fflush.o \
|
||||
stdio_flush.o \
|
||||
stdio_fgetc.o \
|
||||
stdio_fgetpos.o \
|
||||
stdio_fgets.o \
|
||||
stdio_filliobreadbuffer.o \
|
||||
stdio_findvacantfdentry.o \
|
||||
stdio_findvacantiobentry.o \
|
||||
stdio_flockfile.o \
|
||||
stdio_flush.o \
|
||||
stdio_flushiobwritebuffer.o \
|
||||
stdio_fopen.o \
|
||||
stdio_fprintf.o \
|
||||
@ -211,38 +208,27 @@ C_LIB = \
|
||||
stdio_fseek.o \
|
||||
stdio_fsetpos.o \
|
||||
stdio_ftell.o \
|
||||
stdio_ftrylockfile.o \
|
||||
stdio_funlockfile.o \
|
||||
stdio_fwrite.o \
|
||||
stdio_getc.o \
|
||||
stdio_getc_unlocked.o \
|
||||
stdio_getchar.o \
|
||||
stdio_getchar_unlocked.o \
|
||||
stdio_gets.o \
|
||||
stdio_get_file_descriptor.o \
|
||||
stdio_gets.o \
|
||||
stdio_growfdtable.o \
|
||||
stdio_growiobtable.o \
|
||||
stdio_grow_file.o \
|
||||
stdio_initializefd.o \
|
||||
stdio_initializeiob.o \
|
||||
stdio_init_exit.o \
|
||||
stdio_file_init.o \
|
||||
stdio_iobhookentry.o \
|
||||
stdio_lock.o \
|
||||
stdio_locksemaphorename.o \
|
||||
stdio_nostdio.o \
|
||||
stdio_openiob.o \
|
||||
stdio_parent_of_fh.o \
|
||||
stdio_perror.o \
|
||||
stdio_popen.o \
|
||||
stdio_printf.o \
|
||||
stdio_putc.o \
|
||||
stdio_putc_unlocked.o \
|
||||
stdio_putchar.o \
|
||||
stdio_putchar_unlocked.o \
|
||||
stdio_puts.o \
|
||||
stdio_remove.o \
|
||||
stdio_remove_fd_alias.o \
|
||||
stdio_rename.o \
|
||||
stdio_rewind.o \
|
||||
stdio_scanf.o \
|
||||
@ -256,7 +242,6 @@ C_LIB = \
|
||||
stdio_tmpnam.o \
|
||||
stdio_translateioerror.o \
|
||||
stdio_ungetc.o \
|
||||
stdio_unlockfile.o \
|
||||
stdio_vasprintf.o \
|
||||
stdio_vasprintf_hook_entry.o \
|
||||
stdio_vfprintf.o \
|
||||
@ -273,12 +258,13 @@ C_LIB = \
|
||||
stdlib_atexit.o \
|
||||
stdlib_atoi.o \
|
||||
stdlib_atol.o \
|
||||
stdlib_atoll.o \
|
||||
stdlib_bsearch.o \
|
||||
stdlib_calloc.o \
|
||||
stdlib_checkdetach.o \
|
||||
stdlib_constructor.o \
|
||||
stdlib_constructor_begin.o \
|
||||
stdlib_constructor_end.o \
|
||||
stdlib_data.o \
|
||||
stdlib_default_pool_size.o \
|
||||
stdlib_default_puddle_size.o \
|
||||
stdlib_destructor.o \
|
||||
@ -291,9 +277,9 @@ C_LIB = \
|
||||
stdlib_exit.o \
|
||||
stdlib_free.o \
|
||||
stdlib_getdefstacksize.o \
|
||||
stdlib_get_errno.o \
|
||||
stdlib_getenv.o \
|
||||
stdlib_getsp.o \
|
||||
stdlib_get_errno.o \
|
||||
stdlib_init_exit.o \
|
||||
stdlib_isresident.o \
|
||||
stdlib_labs.o \
|
||||
@ -314,13 +300,11 @@ C_LIB = \
|
||||
stdlib_putenv.o \
|
||||
stdlib_qsort.o \
|
||||
stdlib_rand.o \
|
||||
stdlib_rand_r.o \
|
||||
stdlib_realloc.o \
|
||||
stdlib_red_black.o \
|
||||
stdlib_semaphore.o \
|
||||
stdlib_set_errno.o \
|
||||
stdlib_setenv.o \
|
||||
stdlib_setjmp.o \
|
||||
stdlib_set_errno.o \
|
||||
stdlib_set_process_window.o \
|
||||
stdlib_shell_escape.o \
|
||||
stdlib_showerror.o \
|
||||
@ -332,11 +316,10 @@ C_LIB = \
|
||||
stdlib_stacksafezone.o \
|
||||
stdlib_stacksize.o \
|
||||
stdlib_stack_usage.o \
|
||||
stdlib_arg.o \
|
||||
stdlib_stdio_window_spec.o \
|
||||
stdlib_startup.o \
|
||||
stdlib_strtol.o \
|
||||
stdlib_strtoll.o \
|
||||
stdlib_strtoul.o \
|
||||
stdlib_strtoll.o \
|
||||
stdlib_strtoull.o \
|
||||
stdlib_swapstack.o \
|
||||
stdlib_sysbase.o \
|
||||
@ -348,7 +331,7 @@ C_LIB = \
|
||||
stdlib_umodsi3.o \
|
||||
stdlib_unsetenv.o \
|
||||
stdlib_wildcard_expand.o \
|
||||
strings_ffs.o \
|
||||
stdlib_stdio_window_spec.o \
|
||||
strings_strcasecmp.o \
|
||||
strings_strncasecmp.o \
|
||||
string_bcmp.o \
|
||||
@ -426,19 +409,18 @@ C_LIB = \
|
||||
unistd_realpath.o \
|
||||
unistd_sleep.o \
|
||||
unistd_symlink.o \
|
||||
unistd_sync_fd.o \
|
||||
unistd_timer.o \
|
||||
unistd_time_delay.o \
|
||||
unistd_truncate.o \
|
||||
unistd_unlink.o \
|
||||
unistd_usleep.o \
|
||||
utime_utime.o \
|
||||
utsname_uname.o
|
||||
utime_utime.o
|
||||
|
||||
# All objects files which make up libunix.a
|
||||
UNIX_LIB = \
|
||||
unix.lib_rev.o \
|
||||
dirent_closedir.o \
|
||||
dirent_data.o \
|
||||
dirent_rewinddir.o \
|
||||
dirent_opendir.o \
|
||||
dirent_readdir.o \
|
||||
@ -457,12 +439,10 @@ UNIX_LIB = \
|
||||
stdio_fdhookentry.o \
|
||||
stdio_fflush.o \
|
||||
stdio_fopen.o \
|
||||
stdio_file_init.o \
|
||||
stdio_init_exit.o \
|
||||
stdio_locksemaphorename.o \
|
||||
stdio_openiob.o \
|
||||
stdio_popen.o \
|
||||
stdio_record_locking.o \
|
||||
stdio_remove.o \
|
||||
stdio_rename.o \
|
||||
stdlib_mkdtemp.o \
|
||||
@ -499,6 +479,7 @@ MATH_LIB = \
|
||||
math_ceil.o \
|
||||
math_cos.o \
|
||||
math_cosh.o \
|
||||
math_data.o \
|
||||
math_exp.o \
|
||||
math_fabs.o \
|
||||
math_floor.o \
|
||||
@ -554,6 +535,7 @@ NET_LIB = \
|
||||
socket_accept.o \
|
||||
socket_bind.o \
|
||||
socket_connect.o \
|
||||
socket_data.o \
|
||||
socket_gethostbyaddr.o \
|
||||
socket_gethostbyname.o \
|
||||
socket_gethostid.o \
|
||||
@ -620,8 +602,7 @@ NET_LIB = \
|
||||
usergroup_setregid.o \
|
||||
usergroup_setreuid.o \
|
||||
usergroup_setsid.o \
|
||||
usergroup_setuid.o \
|
||||
utsname_uname.o
|
||||
usergroup_setuid.o
|
||||
|
||||
# All objects files which make up libdebug.a
|
||||
DEBUG_LIB = \
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 189
|
||||
#define DATE "5.3.2005"
|
||||
#define VERS "amiga.lib 1.189"
|
||||
#define VSTRING "amiga.lib 1.189 (5.3.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: amiga.lib 1.189 (5.3.2005)"
|
||||
#define REVISION 188
|
||||
#define DATE "7.2.2005"
|
||||
#define VERS "amiga.lib 1.188"
|
||||
#define VSTRING "amiga.lib 1.188 (7.2.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: amiga.lib 1.188 (7.2.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
189
|
||||
188
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_addtof.c,v 1.3 2005-02-25 10:14:20 obarthel Exp $
|
||||
* $Id: amiga_addtof.c,v 1.2 2005-01-02 09:07:06 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -57,7 +57,7 @@ typedef LONG (* CFUNC)(APTR arg);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC LONG INTERRUPT ASM
|
||||
static LONG INTERRUPT ASM
|
||||
call_routine(REG(a1,struct Isrvstr *i))
|
||||
{
|
||||
CFUNC p = (CFUNC)i->ccode;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_dotimer.c,v 1.3 2005-03-06 09:00:16 obarthel Exp $
|
||||
* $Id: amiga_dotimer.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -58,37 +58,18 @@ DoTimer(struct timeval *tv,LONG unit,LONG command)
|
||||
|
||||
assert( tv != NULL );
|
||||
|
||||
#if defined(__amigaos4__)
|
||||
mp = AllocVec(sizeof(*mp),MEMF_ANY|MEMF_PUBLIC|MEMF_CLEAR);
|
||||
if(mp == NULL)
|
||||
{
|
||||
mp = AllocSysObjectTags(ASOT_PORT,
|
||||
ASOPORT_Action, PA_SIGNAL,
|
||||
ASOPORT_Signal, SIGB_SINGLE,
|
||||
ASOPORT_Target, FindTask(NULL),
|
||||
TAG_DONE);
|
||||
|
||||
if(mp == NULL)
|
||||
{
|
||||
error = IOERR_OPENFAIL;
|
||||
goto out;
|
||||
}
|
||||
error = IOERR_OPENFAIL;
|
||||
goto out;
|
||||
}
|
||||
#else
|
||||
{
|
||||
mp = AllocVec(sizeof(*mp),MEMF_ANY|MEMF_PUBLIC|MEMF_CLEAR);
|
||||
if(mp == NULL)
|
||||
{
|
||||
error = IOERR_OPENFAIL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
mp->mp_Node.ln_Type = NT_MSGPORT;
|
||||
mp->mp_Flags = PA_SIGNAL;
|
||||
mp->mp_SigBit = SIGB_SINGLE;
|
||||
mp->mp_SigTask = FindTask(NULL);
|
||||
|
||||
NewList(&mp->mp_MsgList);
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
mp->mp_Node.ln_Type = NT_MSGPORT;
|
||||
mp->mp_Flags = PA_SIGNAL;
|
||||
mp->mp_SigBit = SIGB_SINGLE;
|
||||
mp->mp_SigTask = FindTask(NULL);
|
||||
NewList(&mp->mp_MsgList);
|
||||
|
||||
tr = (struct timerequest *)CreateIORequest(mp,sizeof(*tr));
|
||||
if(tr == NULL)
|
||||
@ -126,16 +107,7 @@ DoTimer(struct timeval *tv,LONG unit,LONG command)
|
||||
DeleteIORequest((struct IORequest *)tr);
|
||||
}
|
||||
|
||||
#if defined(__amigaos4__)
|
||||
{
|
||||
if(mp != NULL)
|
||||
FreeSysObject(ASOT_PORT,mp);
|
||||
}
|
||||
#else
|
||||
{
|
||||
FreeVec(mp);
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
FreeVec(mp);
|
||||
|
||||
return(error);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_invertstring.c,v 1.3 2005-02-25 10:14:20 obarthel Exp $
|
||||
* $Id: amiga_invertstring.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -49,7 +49,7 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC int
|
||||
static int
|
||||
do_escape(int cc)
|
||||
{
|
||||
int result;
|
||||
@ -91,7 +91,7 @@ do_escape(int cc)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC ULONG
|
||||
static ULONG
|
||||
do_angle(STRPTR * strp, struct InputEvent *ie)
|
||||
{
|
||||
ULONG result;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: amiga_setsuperattrs.c,v 1.4 2005-02-25 10:14:20 obarthel Exp $
|
||||
* $Id: amiga_setsuperattrs.c,v 1.3 2005-01-09 10:10:41 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -46,7 +46,7 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC ULONG
|
||||
static ULONG
|
||||
SetSuperAttrsA(Class * cl,Object * obj,struct TagItem * tags)
|
||||
{
|
||||
ULONG result = 0;
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 189
|
||||
#define DATE "5.3.2005"
|
||||
#define VERS "c.lib 1.189"
|
||||
#define VSTRING "c.lib 1.189 (5.3.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: c.lib 1.189 (5.3.2005)"
|
||||
#define REVISION 188
|
||||
#define DATE "7.2.2005"
|
||||
#define VERS "c.lib 1.188"
|
||||
#define VSTRING "c.lib 1.188 (7.2.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: c.lib 1.188 (7.2.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
189
|
||||
188
|
||||
|
||||
179
library/changes
179
library/changes
@ -1,182 +1,3 @@
|
||||
- DoTimer() now calls AllocSysObject() rather than making up
|
||||
a MsgPort locally.
|
||||
|
||||
- The record locking semaphore code now builds a semaphore to add
|
||||
before it tries to find the public one in memory. That way, the
|
||||
code can spend less time in Forbid() state and, heaven forbid,
|
||||
refrain from allocating memory while in that state.
|
||||
|
||||
- Split the general stdio initialization/cleanup code from the
|
||||
initialization of the stdin/stdout/stderr streams.
|
||||
|
||||
- Moved the Workbench console stream initialization into the
|
||||
initialization code for the stdin/stdout/stderr streams and
|
||||
out of the program parameter setup.
|
||||
|
||||
- The current program name is now set up in the stdlib
|
||||
initialization function.
|
||||
|
||||
- Simplified the machine test code; moved the FPU check into
|
||||
the math initialization code.
|
||||
|
||||
- Added more safety checks to verify that file descriptor
|
||||
file handles are valid.
|
||||
|
||||
- Made the file descriptor checks in the fsync() and fdatasync()
|
||||
functions more robust.
|
||||
|
||||
- Cleaned up the 68k build makefile, so that the CPU and FPU
|
||||
tests and the error message display can run safely even
|
||||
on plain 68000 machines. This won't work for the 32 bit small
|
||||
data model, which implies 68020 code, but so there...
|
||||
|
||||
- Moved the CPU/FPU type tests into the respective linker
|
||||
libraries.
|
||||
|
||||
- Moved the data declarations out of math_data.c, stat_data.c,
|
||||
socket_data.c, dirent_data.c and stdio_data.c and into the
|
||||
code that initializes them.
|
||||
|
||||
- Moved a few __delete_semaphore() calls into conditional compilation
|
||||
sections where they should have been in the first place.
|
||||
|
||||
- Thanks to J<>rg Strohmayer, the GCC library build now manages to
|
||||
invoke the library's constructor/destructor functions in a
|
||||
very particular order. That way, you can use constructor/destructor
|
||||
functions in your own code and not have them clash with the library's
|
||||
own functions.
|
||||
|
||||
- Reimplemented the constructor/destructor invocation code for GCC.
|
||||
Both the 68k and PowerPC platform now invoke them in the same order
|
||||
and the 68k code uses the designated invocation priorities. The
|
||||
PowerPC destructor function now sets up the exit() jmp_buf before
|
||||
the destructor functions are called.
|
||||
|
||||
- Added S_IREAD, S_IWRITE and S_IEXEC aliases to <sys/stat.h>.
|
||||
|
||||
- Moved data out of stdlib_data.c and into the code that references
|
||||
or initializes it.
|
||||
|
||||
- The stdlib constructor now performs the CPU/FPU compatibility test.
|
||||
|
||||
- Introduced new constructor types and changed the overall priority
|
||||
order.
|
||||
|
||||
|
||||
c.lib 1.189 (5.3.2005)
|
||||
|
||||
- Rewrote the __translate_unix_to_amiga_path_name() function to
|
||||
translate patterns such as "foo/bar/../../baz" properly, and to
|
||||
use strlen() a lot less.
|
||||
|
||||
- Major, major changes! Moved most of the monolithic code out of
|
||||
the file descriptor hook and into the respective functions,
|
||||
such as dup2(), fchmod(), fchown(), fcntl(), fdatasync(), fstatfs(),
|
||||
fsync(), ftruncate() and lseek(). Code which is not strictly
|
||||
required will no longer find its way into your programs if you
|
||||
link with the updated library.
|
||||
|
||||
NOTE: these changes require that the entire library is rebuilt!
|
||||
|
||||
- The buffered and unbuffered file hook code is now invoked through
|
||||
function pointers alone. The utility.library/CallHookPkt mechanism
|
||||
is no longer required.
|
||||
|
||||
- Moved the entire lseek() code relevant for files into the hook
|
||||
function.
|
||||
|
||||
- Simplified the close() function which now just calls into the
|
||||
hook code to perform whatever is necessary. The hook code is
|
||||
responsible for cleaning up after aliases, etc. This change in
|
||||
turn made it possible to greatly simplify the hook code for
|
||||
buffered files which now bypasses close/read/write/lseek and
|
||||
directly invokes the hook code for unbuffered files.
|
||||
|
||||
- Added various floating point constants to <math.h>, courtesy
|
||||
of Henning Nielsen Lund. Thank you very much!
|
||||
|
||||
- When using the wildcard expansion code for command line
|
||||
parameters (which is by default linked in with libunix.a),
|
||||
regular expressions can no longer prompt dos.library requesters
|
||||
to appear. However, to be on the safe side, if you are expecting
|
||||
to pass regular expressions on the command line, do not use
|
||||
the wildcard expansion code such as by overriding the library
|
||||
symbols with dummy functions such as are used in the file
|
||||
"stdlib_wildcard_expand.c".
|
||||
|
||||
- Added a new variable '__open_locale'<27>which can be used to
|
||||
restrict all library functions to use the "C" language locale
|
||||
rather than the current system locale settings. In addition
|
||||
to that, two new functions __locale_exit() and __locale_init()
|
||||
can be used to close and (re-)open the system locale at a
|
||||
later time.
|
||||
|
||||
- Local ("static") functions are now identified by the STATIC
|
||||
qualifier. This was done in preparation for changes that will
|
||||
deal with global and local data and the issue of thread safety.
|
||||
|
||||
- Added stdio thread locking functions flockfile(), funlockfile(),
|
||||
and ftrylockfile().
|
||||
|
||||
- Modified the internal FILE structure to allow for thread locking.
|
||||
Note that this again requires that the library is rebuilt!
|
||||
|
||||
- Added or modified macros for getc_unlocked(), getchar_unlocked(),
|
||||
putc_unlocked() and putchar_unlocked().
|
||||
|
||||
- Added rand_r().
|
||||
|
||||
- Added flockfile()/funlockfile() wrappers around all stdio
|
||||
functions.
|
||||
|
||||
- Added more semaphore locking around the basic stdio, memory, locale
|
||||
and dirent data operations. That should do it! While the library is
|
||||
not reentrant (this is not ixemul.library) it should be thread-safe
|
||||
now. Thread-safe in the sense of POSIX 1003.1c-1995.
|
||||
|
||||
- The thread-safety code is now subject to conditional compilation.
|
||||
Both the library and the user code need to be rebuilt with the
|
||||
preprocessor symbol __THREAD_SAFE defined to get thread-safe
|
||||
code.
|
||||
|
||||
- Extended the thread-safety locking to the file descriptors.
|
||||
|
||||
NOTE: these changes require that the entire library is rebuilt!
|
||||
|
||||
- The translation of Unix to Amiga path names now silently accepts
|
||||
absolute Amiga path names passed to it and will use them without
|
||||
changing them.
|
||||
|
||||
- Added atoll(), ffs(), ftw(), nftw(), lstat() and uname() code
|
||||
contributed by Peter Bengtsson. Thank you very much!
|
||||
|
||||
- Reworked the code that handles quoting for the wildcard expansion
|
||||
routine. We no longer allocate memory and then modify it, but
|
||||
call a function for each quoted parameter which does whatever is
|
||||
necessary.
|
||||
|
||||
- The shell command parameter parser now considers the non-breaking
|
||||
space character (ISO code 160) to be a blank space character, too.
|
||||
|
||||
- Moved the signal semaphore allocation/initialization/deallocation
|
||||
into a dedicated module. This also has the advantage that it's
|
||||
harder to break code by accidentally forgetting to call
|
||||
InitSemaphore() after having allocated the memory for it.
|
||||
|
||||
- Rewrote the code that allocates the file descriptor and file
|
||||
buffer tables so that all the memory allocations are in one
|
||||
place and it's possible to specify exactly how many table
|
||||
entries are required at a time.
|
||||
|
||||
- Creation and initialization of semaphores now uses the AmigaOS4
|
||||
specific functions for this purpose, if available.
|
||||
|
||||
- In the thread-safe variant, the library now tries to allow
|
||||
multiple concurrent callers to use the socket functions. Note
|
||||
that this works only with the Roadshow TCP/IP stack, and the
|
||||
results with other TCP/IP stacks are rather unpredictable.
|
||||
|
||||
|
||||
c.lib 1.188 (7.2.2005)
|
||||
|
||||
- Folded duplicate code in "stdio_init_exit.c" into a common function.
|
||||
|
||||
@ -1,15 +1,11 @@
|
||||
/*
|
||||
* $Id: crtbegin.c,v 1.8 2005-03-10 13:30:11 obarthel Exp $
|
||||
* $Id: crtbegin.c,v 1.3 2004-09-29 16:54:54 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Handles global constructors and destructors for the OS4 GCC build.
|
||||
* Handles global constructors and destructors.
|
||||
*/
|
||||
|
||||
#if defined(__amigaos4__)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <exec/types.h>
|
||||
|
||||
/****************************************************************************/
|
||||
@ -19,28 +15,118 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#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__(( used, section(".ctors"), aligned(sizeof(void (*)(void))) ));
|
||||
static void (*__DTOR_LIST__[1]) (void) __attribute__(( used, section(".dtors"), aligned(sizeof(void (*)(void))) ));
|
||||
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)
|
||||
{
|
||||
ULONG i = (ULONG)__DTOR_LIST__[0];
|
||||
void (**pFuncPtr)(void);
|
||||
|
||||
if (i == ~0UL)
|
||||
{
|
||||
/* Find the end of the destructors list */
|
||||
i = 1;
|
||||
|
||||
while (__DTOR_LIST__[i] != NULL)
|
||||
i++;
|
||||
|
||||
/* We're at the NULL entry now. Go back by one */
|
||||
i--;
|
||||
}
|
||||
|
||||
/* Call all destructors in reverse order */
|
||||
pFuncPtr = __DTOR_LIST__ + i;
|
||||
while (i-- > 0)
|
||||
(**pFuncPtr--)();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#else
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
typedef void (*func_ptr)(void);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
static void
|
||||
_do_ctors(void)
|
||||
{
|
||||
extern func_ptr __CTOR_LIST__[];
|
||||
ULONG nptrs = (ULONG)__CTOR_LIST__[0];
|
||||
ULONG i;
|
||||
|
||||
for(i = nptrs ; i > 0 ; i--)
|
||||
__CTOR_LIST__[i]();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
static void
|
||||
_do_dtors(void)
|
||||
{
|
||||
extern func_ptr __DTOR_LIST__[];
|
||||
extern jmp_buf __exit_jmp_buf;
|
||||
ULONG nptrs = (ULONG)__DTOR_LIST__[0];
|
||||
static ULONG i;
|
||||
|
||||
/* If one of the destructors drops into
|
||||
* exit(), processing will continue with
|
||||
* the next following destructor.
|
||||
*/
|
||||
(void)setjmp(__exit_jmp_buf);
|
||||
|
||||
while(i++ < nptrs)
|
||||
__DTOR_LIST__[i]();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /*__amigaos4__ */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* FIXME: Do we need to put these in .init/.fini sections? */
|
||||
|
||||
//void _init(void) __attribute__((section(".init")));
|
||||
//void _fini(void) __attribute__((section(".fini")));
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
_init(void)
|
||||
{
|
||||
int num_ctors,i;
|
||||
int j;
|
||||
|
||||
for(i = 1, num_ctors = 0 ; __CTOR_LIST__[i] != NULL ; i++)
|
||||
num_ctors++;
|
||||
|
||||
for(j = 0 ; j < num_ctors ; j++)
|
||||
__CTOR_LIST__[num_ctors - j]();
|
||||
_do_ctors();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
@ -48,23 +134,5 @@ _init(void)
|
||||
void
|
||||
_fini(void)
|
||||
{
|
||||
extern jmp_buf __exit_jmp_buf;
|
||||
|
||||
int num_dtors,i;
|
||||
static int j;
|
||||
|
||||
/* If one of the destructors drops into
|
||||
exit(), processing will continue with
|
||||
the next following destructor. */
|
||||
(void)setjmp(__exit_jmp_buf);
|
||||
|
||||
for(i = 1, num_dtors = 0 ; __DTOR_LIST__[i] != NULL ; i++)
|
||||
num_dtors++;
|
||||
|
||||
while(j++ < num_dtors)
|
||||
__DTOR_LIST__[j]();
|
||||
_do_dtors();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /*__amigaos4__ */
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: crtend.c,v 1.2 2005-03-09 21:07:25 obarthel Exp $
|
||||
* $Id: crtend.c,v 1.1.1.1 2004-07-26 16:30:22 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -10,10 +10,9 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
static void (*__CTOR_LIST__[1]) (void) __attribute__((used, section(".ctors"), aligned(sizeof(void (*)(void))) ));
|
||||
static void (*__DTOR_LIST__[1]) (void) __attribute__((used, section(".dtors"), aligned(sizeof(void (*)(void))) ));
|
||||
static volatile void (*__CTOR_LIST__[1]) (void) __attribute__((used,section(".ctors"))) = { (void *)0 };
|
||||
static volatile void (*__DTOR_LIST__[1]) (void) __attribute__((used,section(".dtors"))) = { (void *)0 };
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /*__amigaos4__ */
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_isalnum.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_isalnum.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -49,8 +49,6 @@ isalnum(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -62,7 +60,5 @@ isalnum(int c)
|
||||
result = isalpha(c) || isdigit(c);
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_isalpha.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_isalpha.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -47,8 +47,6 @@ isalpha(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -61,7 +59,5 @@ isalpha(int c)
|
||||
('A' <= c && c <= 'Z'));
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_iscntrl.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_iscntrl.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -47,8 +47,6 @@ iscntrl(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -60,7 +58,5 @@ iscntrl(int c)
|
||||
result = (('\0' <= c && c < ' ') || (c == 127));
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_isdigit.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_isdigit.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -47,8 +47,6 @@ isdigit(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -60,7 +58,5 @@ isdigit(int c)
|
||||
result = ('0' <= c && c <= '9');
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_isgraph.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_isgraph.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -47,8 +47,6 @@ isgraph(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -60,7 +58,5 @@ isgraph(int c)
|
||||
result = (' ' < c && c < 127);
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_islower.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_islower.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -47,8 +47,6 @@ islower(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -60,7 +58,5 @@ islower(int c)
|
||||
result = ('a' <= c && c <= 'z');
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_isprint.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_isprint.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -47,8 +47,6 @@ isprint(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -60,7 +58,5 @@ isprint(int c)
|
||||
result = (' ' <= c && c <= '~');
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_ispunct.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_ispunct.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -47,8 +47,6 @@ ispunct(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -63,7 +61,5 @@ ispunct(int c)
|
||||
('{' <= c && c <= '~'));
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_isspace.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_isspace.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -47,8 +47,6 @@ isspace(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -65,7 +63,5 @@ isspace(int c)
|
||||
c == ' ');
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_isupper.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_isupper.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -47,8 +47,6 @@ isupper(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -60,7 +58,5 @@ isupper(int c)
|
||||
result = ('A' <= c && c <= 'Z');
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_isxdigit.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_isxdigit.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -47,8 +47,6 @@ isxdigit(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -62,7 +60,5 @@ isxdigit(int c)
|
||||
('A' <= c && c <= 'F'));
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_tolower.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_tolower.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -43,8 +43,6 @@ tolower(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -56,7 +54,5 @@ tolower(int c)
|
||||
result = ('A' <= c && c <= 'Z') ? (c + ('a' - 'A')) : c;
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ctype_toupper.c,v 1.3 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: ctype_toupper.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -43,8 +43,6 @@ toupper(int c)
|
||||
DECLARE_LOCALEBASE();
|
||||
int result;
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__locale_table[LC_CTYPE] != NULL)
|
||||
{
|
||||
assert( LocaleBase != NULL );
|
||||
@ -56,7 +54,5 @@ toupper(int c)
|
||||
result = ('a' <= c && c <= 'z') ? (c - ('a' - 'A')) : c;
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: debug.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: debug.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=8
|
||||
*
|
||||
@ -133,7 +133,7 @@ _POPDEBUGLEVEL(void)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC VOID
|
||||
static void
|
||||
_INDENT(void)
|
||||
{
|
||||
if(program_name_len > 0)
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 189
|
||||
#define DATE "5.3.2005"
|
||||
#define VERS "debug.lib 1.189"
|
||||
#define VSTRING "debug.lib 1.189 (5.3.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: debug.lib 1.189 (5.3.2005)"
|
||||
#define REVISION 188
|
||||
#define DATE "7.2.2005"
|
||||
#define VERS "debug.lib 1.188"
|
||||
#define VSTRING "debug.lib 1.188 (7.2.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: debug.lib 1.188 (7.2.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
189
|
||||
188
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: debug_kputfmt.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: debug_kputfmt.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -43,7 +43,7 @@
|
||||
parameter table is provided, pick up the parameters and store them in
|
||||
the table. The table layout follows the format string and can include
|
||||
both 16 and 32 bit data. */
|
||||
STATIC size_t
|
||||
static size_t
|
||||
process_var_args(char *format_string,va_list argument_list,unsigned short * table)
|
||||
{
|
||||
size_t num_args = 0;
|
||||
@ -150,7 +150,7 @@ process_var_args(char *format_string,va_list argument_list,unsigned short * tabl
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC VOID ASM
|
||||
static VOID ASM
|
||||
raw_put_char(REG(d0,UBYTE c))
|
||||
{
|
||||
kputc(c);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: dirent_closedir.c,v 1.8 2005-03-09 10:48:59 obarthel Exp $
|
||||
* $Id: dirent_closedir.c,v 1.5 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -47,97 +47,11 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Directories being scanned whose locks need to be freed when shutting down. */
|
||||
struct MinList NOCOMMON __directory_list;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
static struct SignalSemaphore * dirent_lock;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
__dirent_lock(void)
|
||||
{
|
||||
if(dirent_lock != NULL)
|
||||
ObtainSemaphore(dirent_lock);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
__dirent_unlock(void)
|
||||
{
|
||||
if(dirent_lock != NULL)
|
||||
ReleaseSemaphore(dirent_lock);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
CLIB_CONSTRUCTOR(__dirent_init)
|
||||
{
|
||||
BOOL success = FALSE;
|
||||
|
||||
ENTER();
|
||||
|
||||
NewList((struct List *)&__directory_list);
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
{
|
||||
dirent_lock = __create_semaphore();
|
||||
if(dirent_lock == NULL)
|
||||
goto out;
|
||||
}
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
success = TRUE;
|
||||
|
||||
out:
|
||||
|
||||
RETURN(success);
|
||||
|
||||
if(success)
|
||||
CONSTRUCTOR_SUCCEED();
|
||||
else
|
||||
CONSTRUCTOR_FAIL();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
CLIB_DESTRUCTOR(__dirent_exit)
|
||||
{
|
||||
ENTER();
|
||||
|
||||
if(__directory_list.mlh_Head != NULL)
|
||||
{
|
||||
while(NOT IsListEmpty((struct List *)&__directory_list))
|
||||
closedir((DIR *)__directory_list.mlh_Head);
|
||||
}
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
{
|
||||
__delete_semaphore(dirent_lock);
|
||||
dirent_lock = NULL;
|
||||
}
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
LEAVE();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
closedir(DIR * directory_pointer)
|
||||
{
|
||||
struct DirectoryHandle * dh;
|
||||
struct Node * node;
|
||||
int result = -1;
|
||||
|
||||
ENTER();
|
||||
@ -147,8 +61,6 @@ closedir(DIR * directory_pointer)
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
|
||||
__dirent_lock();
|
||||
|
||||
if(directory_pointer == NULL)
|
||||
{
|
||||
__set_errno(EBADF);
|
||||
@ -184,8 +96,6 @@ closedir(DIR * directory_pointer)
|
||||
|
||||
#if defined(UNIX_PATH_SEMANTICS)
|
||||
{
|
||||
struct Node * node;
|
||||
|
||||
while((node = RemHead((struct List *)&dh->dh_VolumeList)) != NULL)
|
||||
free(node);
|
||||
}
|
||||
@ -201,8 +111,6 @@ closedir(DIR * directory_pointer)
|
||||
|
||||
out:
|
||||
|
||||
__dirent_unlock();
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdio_putchar_unlocked.c,v 1.1 2005-02-27 18:09:11 obarthel Exp $
|
||||
* $Id: dirent_data.c,v 1.5 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -31,42 +31,38 @@
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _STDLIB_NULL_POINTER_CHECK_H
|
||||
#include "stdlib_null_pointer_check.h"
|
||||
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
|
||||
#ifndef _DIRENT_HEADERS_H
|
||||
#include "dirent_headers.h"
|
||||
#endif /* _DIRENT_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef _STDIO_HEADERS_H
|
||||
#include "stdio_headers.h"
|
||||
#endif /* _STDIO_HEADERS_H */
|
||||
/* Directories being scanned whose locks need to be freed when shutting down. */
|
||||
struct MinList NOCOMMON __directory_list;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#undef putchar_unlocked
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
putchar_unlocked(int c)
|
||||
CLIB_CONSTRUCTOR(__dirent_init)
|
||||
{
|
||||
int result = -1;
|
||||
ENTER();
|
||||
|
||||
assert( stdout != NULL );
|
||||
NewList((struct List *)&__directory_list);
|
||||
|
||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||
{
|
||||
if(stdout == NULL)
|
||||
{
|
||||
__set_errno(EFAULT);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||
|
||||
result = __putc_unlocked(c,stdout);
|
||||
|
||||
out:
|
||||
|
||||
return(result);
|
||||
RETURN(OK);
|
||||
CONSTRUCTOR_SUCCEED();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
CLIB_DESTRUCTOR(__dirent_exit)
|
||||
{
|
||||
ENTER();
|
||||
|
||||
if(__directory_list.mlh_Head != NULL)
|
||||
{
|
||||
while(NOT IsListEmpty((struct List *)&__directory_list))
|
||||
closedir((DIR *)__directory_list.mlh_Head);
|
||||
}
|
||||
|
||||
LEAVE();
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: dirent_headers.h,v 1.7 2005-02-28 10:07:30 obarthel Exp $
|
||||
* $Id: dirent_headers.h,v 1.5 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -73,26 +73,4 @@ extern struct MinList NOCOMMON __directory_list;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern void __dirent_lock(void);
|
||||
extern void __dirent_unlock(void);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#else
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define __dirent_lock() ((void)0)
|
||||
#define __dirent_unlock() ((void)0)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _DIRENT_HEADERS_H */
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: dirent_opendir.c,v 1.8 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: dirent_opendir.c,v 1.5 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -57,7 +57,7 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC struct Node *
|
||||
static struct Node *
|
||||
find_by_name(struct List * list,const char * name)
|
||||
{
|
||||
struct Node * result = NULL;
|
||||
@ -89,6 +89,7 @@ opendir(const char * path_name)
|
||||
#endif /* UNIX_PATH_SEMANTICS */
|
||||
struct DirectoryHandle * dh = NULL;
|
||||
DIR * result = NULL;
|
||||
struct Node * node;
|
||||
|
||||
ENTER();
|
||||
|
||||
@ -122,8 +123,6 @@ opendir(const char * path_name)
|
||||
|
||||
#if defined(UNIX_PATH_SEMANTICS)
|
||||
{
|
||||
struct Node * node;
|
||||
|
||||
NewList((struct List *)&dh->dh_VolumeList);
|
||||
|
||||
if(__unix_path_semantics)
|
||||
@ -244,12 +243,8 @@ opendir(const char * path_name)
|
||||
|
||||
assert( __directory_list.mlh_Head != NULL );
|
||||
|
||||
__dirent_lock();
|
||||
|
||||
AddTail((struct List *)&__directory_list,(struct Node *)dh);
|
||||
|
||||
__dirent_unlock();
|
||||
|
||||
result = (DIR *)dh;
|
||||
dh = NULL;
|
||||
|
||||
@ -261,8 +256,6 @@ opendir(const char * path_name)
|
||||
|
||||
#if defined(UNIX_PATH_SEMANTICS)
|
||||
{
|
||||
struct Node * node;
|
||||
|
||||
while((node = RemHead((struct List *)&dh->dh_VolumeList)) != NULL)
|
||||
free(node);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fcntl_close.c,v 1.10 2005-02-20 15:46:52 obarthel Exp $
|
||||
* $Id: fcntl_close.c,v 1.8 2005-02-04 08:49:10 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -42,16 +42,23 @@
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
close(int file_descriptor)
|
||||
__close(int file_descriptor,int * error_ptr)
|
||||
{
|
||||
struct file_action_message fam;
|
||||
DECLARE_UTILITYBASE();
|
||||
|
||||
struct file_hook_message message;
|
||||
struct fd * fd;
|
||||
int result = -1;
|
||||
BOOL no_close;
|
||||
BOOL is_alias;
|
||||
|
||||
ENTER();
|
||||
|
||||
SHOWVALUE(file_descriptor);
|
||||
|
||||
assert( UtilityBase != NULL );
|
||||
|
||||
assert( error_ptr != NULL );
|
||||
assert( file_descriptor >= 0 && file_descriptor < __num_fd );
|
||||
assert( __fd[file_descriptor] != NULL );
|
||||
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
|
||||
@ -62,24 +69,121 @@ close(int file_descriptor)
|
||||
fd = __get_file_descriptor(file_descriptor);
|
||||
if(fd == NULL)
|
||||
{
|
||||
__set_errno(EBADF);
|
||||
goto out;
|
||||
}
|
||||
|
||||
fam.fam_Action = file_action_close;
|
||||
|
||||
assert( fd->fd_Action != NULL );
|
||||
|
||||
if((*fd->fd_Action)(fd,&fam) < 0)
|
||||
{
|
||||
__set_errno(fam.fam_Error);
|
||||
(*error_ptr) = EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
result = 0;
|
||||
|
||||
SHOWMSG("last customer; cleaning up");
|
||||
|
||||
if(fd->fd_Original != NULL) /* this is an alias */
|
||||
{
|
||||
struct fd * list_fd;
|
||||
|
||||
SHOWMSG("taking out the alias");
|
||||
|
||||
assert( fd->fd_Original != fd );
|
||||
assert( fd->fd_Original->fd_Original == NULL );
|
||||
|
||||
/* Remove this alias from the list. */
|
||||
for(list_fd = fd->fd_Original ;
|
||||
list_fd != NULL ;
|
||||
list_fd = list_fd->fd_NextLink)
|
||||
{
|
||||
if(list_fd->fd_NextLink == fd)
|
||||
{
|
||||
list_fd->fd_NextLink = fd->fd_NextLink;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
no_close = TRUE;
|
||||
is_alias = TRUE;
|
||||
}
|
||||
else if (fd->fd_NextLink != NULL) /* this one has aliases attached; it is the 'original' resource */
|
||||
{
|
||||
struct fd * first_alias;
|
||||
struct fd * list_fd;
|
||||
|
||||
SHOWMSG("closing original descriptor; migrating it to first alias");
|
||||
|
||||
/* The first link now becomes the original resource */
|
||||
first_alias = fd->fd_NextLink;
|
||||
first_alias->fd_Original = NULL;
|
||||
|
||||
/* The resources are migrated to the first link. */
|
||||
for(list_fd = first_alias->fd_NextLink ;
|
||||
list_fd != NULL ;
|
||||
list_fd = list_fd->fd_NextLink)
|
||||
{
|
||||
list_fd->fd_Original = first_alias;
|
||||
}
|
||||
|
||||
no_close = TRUE;
|
||||
is_alias = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
no_close = FLAG_IS_SET(fd->fd_Flags,FDF_NO_CLOSE);
|
||||
is_alias = FALSE;
|
||||
}
|
||||
|
||||
/* Reset the console to regular buffered/unbuffered input. We don't do this
|
||||
for aliases and their like since the original stream is still in use. */
|
||||
if(NOT is_alias)
|
||||
{
|
||||
if(FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING))
|
||||
{
|
||||
SHOWMSG("resetting non-blocking access mode");
|
||||
|
||||
message.action = file_hook_action_set_blocking;
|
||||
message.arg = TRUE;
|
||||
|
||||
assert( fd->fd_Hook != NULL );
|
||||
|
||||
CallHookPkt(fd->fd_Hook,fd,&message);
|
||||
}
|
||||
}
|
||||
|
||||
(*error_ptr) = OK;
|
||||
|
||||
if(NOT no_close && NOT is_alias)
|
||||
{
|
||||
SHOWMSG("shutting down");
|
||||
|
||||
message.action = file_hook_action_close;
|
||||
|
||||
assert( fd->fd_Hook != NULL );
|
||||
|
||||
CallHookPkt(fd->fd_Hook,fd,&message);
|
||||
|
||||
result = message.result;
|
||||
|
||||
(*error_ptr) = message.error;
|
||||
}
|
||||
|
||||
memset(fd,0,sizeof(*fd));
|
||||
|
||||
out:
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
close(int file_descriptor)
|
||||
{
|
||||
int result;
|
||||
int error;
|
||||
|
||||
ENTER();
|
||||
|
||||
result = __close(file_descriptor,&error);
|
||||
__set_errno(error);
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fcntl_fcntl.c,v 1.12 2005-03-04 09:07:09 obarthel Exp $
|
||||
* $Id: fcntl_fcntl.c,v 1.6 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -44,13 +44,12 @@
|
||||
int
|
||||
fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
{
|
||||
struct file_action_message fam;
|
||||
DECLARE_UTILITYBASE();
|
||||
struct file_hook_message message;
|
||||
struct flock * l;
|
||||
int vacant_slot;
|
||||
int result = -1;
|
||||
struct fd * fd = NULL;
|
||||
struct fd * fd;
|
||||
va_list arg;
|
||||
int error;
|
||||
int flags;
|
||||
int fdbase;
|
||||
int i;
|
||||
@ -60,6 +59,8 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
SHOWVALUE(file_descriptor);
|
||||
SHOWVALUE(cmd);
|
||||
|
||||
assert( UtilityBase != NULL );
|
||||
|
||||
assert( file_descriptor >= 0 && file_descriptor < __num_fd );
|
||||
assert( __fd[file_descriptor] != NULL );
|
||||
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
|
||||
@ -74,8 +75,6 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
goto out;
|
||||
}
|
||||
|
||||
__fd_lock(fd);
|
||||
|
||||
switch(cmd)
|
||||
{
|
||||
case F_GETLK:
|
||||
@ -84,21 +83,16 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
|
||||
SHOWMSG("cmd=F_GETLK/F_SETLK/F_SETLKW");
|
||||
|
||||
if(FLAG_IS_SET(fd->fd_Flags,FDF_IS_SOCKET))
|
||||
{
|
||||
__set_errno(EINVAL);
|
||||
goto out;
|
||||
}
|
||||
|
||||
va_start(arg,cmd);
|
||||
|
||||
l = va_arg(arg,struct flock *);
|
||||
va_end(arg);
|
||||
|
||||
assert( l != NULL );
|
||||
|
||||
if(l->l_type < F_RDLCK || l->l_type > F_WRLCK)
|
||||
{
|
||||
SHOWMSG("invalid flock type");
|
||||
va_end(arg);
|
||||
|
||||
__set_errno(EINVAL);
|
||||
break;
|
||||
@ -107,18 +101,24 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
if(l->l_whence < SEEK_SET || l->l_whence > SEEK_END)
|
||||
{
|
||||
SHOWMSG("invalid flock offset");
|
||||
va_end(arg);
|
||||
|
||||
__set_errno(EINVAL);
|
||||
break;
|
||||
}
|
||||
|
||||
if(__handle_record_locking(cmd,l,fd,&error) < 0)
|
||||
{
|
||||
__set_errno(error);
|
||||
goto out;
|
||||
}
|
||||
message.action = file_hook_action_lock_record;
|
||||
message.lock = l;
|
||||
message.command = cmd;
|
||||
|
||||
result = 0;
|
||||
assert( fd->fd_Hook != NULL );
|
||||
|
||||
CallHookPkt(fd->fd_Hook,fd,&message);
|
||||
|
||||
result = message.result;
|
||||
__set_errno(message.error);
|
||||
|
||||
va_end(arg);
|
||||
|
||||
break;
|
||||
|
||||
@ -126,11 +126,7 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
|
||||
SHOWMSG("cmd=F_GETFL");
|
||||
|
||||
if(FLAG_IS_SET(fd->fd_Flags,FDF_IS_SOCKET))
|
||||
{
|
||||
__set_errno(EINVAL);
|
||||
goto out;
|
||||
}
|
||||
result = 0;
|
||||
|
||||
if(FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING))
|
||||
SET_FLAG(result,O_NONBLOCK);
|
||||
@ -138,36 +134,34 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
if(FLAG_IS_SET(fd->fd_Flags,FDF_ASYNC_IO))
|
||||
SET_FLAG(result,O_ASYNC);
|
||||
|
||||
result = 0;
|
||||
|
||||
break;
|
||||
|
||||
case F_SETFL:
|
||||
|
||||
SHOWMSG("cmd=F_SETFL");
|
||||
|
||||
if(FLAG_IS_SET(fd->fd_Flags,FDF_IS_SOCKET))
|
||||
{
|
||||
__set_errno(EINVAL);
|
||||
goto out;
|
||||
}
|
||||
result = 0;
|
||||
|
||||
va_start(arg,cmd);
|
||||
|
||||
flags = va_arg(arg,int);
|
||||
va_end(arg);
|
||||
|
||||
if((FLAG_IS_SET(flags,O_NONBLOCK) && FLAG_IS_CLEAR(fd->fd_Flags,FDF_NON_BLOCKING)) ||
|
||||
(FLAG_IS_CLEAR(flags,O_NONBLOCK) && FLAG_IS_SET(fd->fd_Flags,FDF_NON_BLOCKING)))
|
||||
{
|
||||
fam.fam_Action = file_action_set_blocking;
|
||||
fam.fam_Arg = FLAG_IS_CLEAR(flags,O_NONBLOCK);
|
||||
message.action = file_hook_action_set_blocking;
|
||||
message.arg = FLAG_IS_CLEAR(flags,O_NONBLOCK);
|
||||
|
||||
assert( fd->fd_Action != NULL );
|
||||
assert( fd->fd_Hook != NULL );
|
||||
|
||||
if((*fd->fd_Action)(fd,&fam) < 0)
|
||||
CallHookPkt(fd->fd_Hook,fd,&message);
|
||||
|
||||
result = message.result;
|
||||
if(result < 0)
|
||||
{
|
||||
__set_errno(fam.fam_Error);
|
||||
__set_errno(message.error);
|
||||
|
||||
va_end(arg);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -180,15 +174,19 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
if((FLAG_IS_SET(flags,O_ASYNC) && FLAG_IS_CLEAR(fd->fd_Flags,FDF_ASYNC_IO)) ||
|
||||
(FLAG_IS_CLEAR(flags,O_ASYNC) && FLAG_IS_SET(fd->fd_Flags,FDF_ASYNC_IO)))
|
||||
{
|
||||
fam.fam_Action = file_action_set_async;
|
||||
fam.fam_Arg = FLAG_IS_SET(flags,O_ASYNC);
|
||||
message.action = file_hook_action_set_async;
|
||||
message.arg = FLAG_IS_SET(flags,O_ASYNC);
|
||||
|
||||
assert( fd->fd_Action != NULL );
|
||||
assert( fd->fd_Hook != NULL );
|
||||
|
||||
if((*fd->fd_Action)(fd,&fam) < 0)
|
||||
CallHookPkt(fd->fd_Hook,fd,&message);
|
||||
|
||||
result = message.result;
|
||||
if(result < 0)
|
||||
{
|
||||
__set_errno(fam.fam_Error);
|
||||
__set_errno(message.error);
|
||||
|
||||
va_end(arg);
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -198,63 +196,70 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
CLEAR_FLAG(fd->fd_Flags,FDF_ASYNC_IO);
|
||||
}
|
||||
|
||||
result = 0;
|
||||
va_end(arg);
|
||||
|
||||
break;
|
||||
|
||||
case F_DUPFD:
|
||||
|
||||
SHOWMSG("cmd=F_DUPFD");
|
||||
|
||||
|
||||
va_start(arg, cmd);
|
||||
fdbase = va_arg(arg, int);
|
||||
va_end(arg);
|
||||
|
||||
|
||||
if(fdbase < 0)
|
||||
{
|
||||
__set_errno(EINVAL);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Make sure that we have the required number of file
|
||||
descriptors available. */
|
||||
if(__grow_fd_table(fdbase + 1) < 0)
|
||||
goto out;
|
||||
|
||||
vacant_slot = -1;
|
||||
|
||||
/* Guaranteed to have enough here */
|
||||
do
|
||||
|
||||
/* Check if we have that many fd's already */
|
||||
while(fdbase >= __num_fd)
|
||||
{
|
||||
__stdio_unlock();
|
||||
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
|
||||
__stdio_lock();
|
||||
/* No; enlarge it */
|
||||
if(__grow_fd_table() < 0)
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Guaranteed to have enough here */
|
||||
while(TRUE)
|
||||
{
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
|
||||
for(i = fdbase ; i < __num_fd ; i++)
|
||||
{
|
||||
if(FLAG_IS_CLEAR(__fd[i]->fd_Flags,FDF_IN_USE))
|
||||
{
|
||||
vacant_slot = i;
|
||||
break;
|
||||
/* Got a file descriptor, duplicate it */
|
||||
message.action = file_hook_action_duplicate_fd;
|
||||
message.duplicate_fd = __fd[i];
|
||||
|
||||
assert( fd->fd_Hook != NULL );
|
||||
|
||||
CallHookPkt(fd->fd_Hook,fd,&message);
|
||||
|
||||
/* If it worked, leave */
|
||||
if (message.result == 0)
|
||||
{
|
||||
result = i;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Didn't really find any, grow the table further */
|
||||
if(vacant_slot < 0 && __grow_fd_table(0) < 0)
|
||||
if (__grow_fd_table() < 0)
|
||||
goto out;
|
||||
}
|
||||
while(vacant_slot < 0);
|
||||
|
||||
/* Got a file descriptor, duplicate it */
|
||||
__duplicate_fd(__fd[vacant_slot],fd);
|
||||
|
||||
result = vacant_slot;
|
||||
|
||||
break;
|
||||
|
||||
__set_errno(EMFILE);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
SHOWMSG("something else");
|
||||
@ -265,8 +270,6 @@ fcntl(int file_descriptor, int cmd, ... /* int arg */ )
|
||||
|
||||
out:
|
||||
|
||||
__fd_unlock(fd);
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fcntl_lseek.c,v 1.7 2005-02-20 15:46:52 obarthel Exp $
|
||||
* $Id: fcntl_lseek.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -42,11 +42,11 @@
|
||||
/****************************************************************************/
|
||||
|
||||
off_t
|
||||
lseek(int file_descriptor, off_t offset, int mode)
|
||||
__lseek(int file_descriptor, off_t offset, int mode, int * error_ptr)
|
||||
{
|
||||
struct file_action_message fam;
|
||||
DECLARE_UTILITYBASE();
|
||||
struct file_hook_message message;
|
||||
off_t result = -1;
|
||||
off_t position;
|
||||
struct fd * fd;
|
||||
|
||||
ENTER();
|
||||
@ -55,6 +55,9 @@ lseek(int file_descriptor, off_t offset, int mode)
|
||||
SHOWVALUE(offset);
|
||||
SHOWVALUE(mode);
|
||||
|
||||
assert( UtilityBase != NULL );
|
||||
|
||||
assert( error_ptr != NULL );
|
||||
assert( file_descriptor >= 0 && file_descriptor < __num_fd );
|
||||
assert( __fd[file_descriptor] != NULL );
|
||||
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
|
||||
@ -65,7 +68,7 @@ lseek(int file_descriptor, off_t offset, int mode)
|
||||
fd = __get_file_descriptor(file_descriptor);
|
||||
if(fd == NULL)
|
||||
{
|
||||
__set_errno(EBADF);
|
||||
(*error_ptr) = EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -73,27 +76,52 @@ lseek(int file_descriptor, off_t offset, int mode)
|
||||
{
|
||||
SHOWMSG("seek mode is invalid");
|
||||
|
||||
__set_errno(EINVAL);
|
||||
(*error_ptr) = EINVAL;
|
||||
goto out;
|
||||
}
|
||||
|
||||
fam.fam_Action = file_action_seek;
|
||||
fam.fam_Offset = offset;
|
||||
fam.fam_Mode = mode;
|
||||
SHOWMSG("calling the hook");
|
||||
|
||||
assert( fd->fd_Action != NULL );
|
||||
|
||||
position = (*fd->fd_Action)(fd,&fam);
|
||||
if(position < 0)
|
||||
#if defined(UNIX_PATH_SEMANTICS)
|
||||
{
|
||||
__set_errno(fam.fam_Error);
|
||||
goto out;
|
||||
message.action = file_hook_action_seek_and_extend;
|
||||
}
|
||||
#else
|
||||
{
|
||||
message.action = file_hook_action_seek;
|
||||
}
|
||||
#endif /* UNIX_PATH_SEMANTICS */
|
||||
|
||||
result = position;
|
||||
message.position = offset;
|
||||
message.mode = mode;
|
||||
|
||||
assert( fd->fd_Hook != NULL );
|
||||
|
||||
CallHookPkt(fd->fd_Hook,fd,&message);
|
||||
|
||||
(*error_ptr) = message.error;
|
||||
|
||||
result = message.result;
|
||||
|
||||
out:
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
off_t
|
||||
lseek(int file_descriptor, off_t offset, int mode)
|
||||
{
|
||||
off_t result;
|
||||
int error;
|
||||
|
||||
ENTER();
|
||||
|
||||
result = __lseek(file_descriptor,offset,mode,&error);
|
||||
__set_errno(error);
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fcntl_open.c,v 1.14 2005-03-04 09:07:09 obarthel Exp $
|
||||
* $Id: fcntl_open.c,v 1.8 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -56,7 +56,7 @@
|
||||
/* This is used in place of ChangeMode() in order to work around a bug in
|
||||
dos.library V40 and below: a "NIL:" file handle will crash the
|
||||
caller of the ChangeMode() function. */
|
||||
STATIC LONG
|
||||
static LONG
|
||||
safe_change_mode(LONG type,BPTR file_handle,LONG mode)
|
||||
{
|
||||
LONG result = DOSFALSE;
|
||||
@ -94,7 +94,6 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
|
||||
struct name_translation_info path_name_nti;
|
||||
#endif /* UNIX_PATH_SEMANTICS */
|
||||
D_S(struct FileInfoBlock,fib);
|
||||
struct SignalSemaphore * fd_lock;
|
||||
LONG is_file_system = FALSE;
|
||||
LONG open_mode;
|
||||
BPTR lock = ZERO;
|
||||
@ -118,8 +117,6 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
|
||||
__stdio_lock();
|
||||
|
||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||
{
|
||||
if(path_name == NULL)
|
||||
@ -144,7 +141,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
|
||||
fd_slot_number = __find_vacant_fd_entry();
|
||||
if(fd_slot_number < 0)
|
||||
{
|
||||
if(__grow_fd_table(0) < 0)
|
||||
if(__grow_fd_table() < 0)
|
||||
{
|
||||
SHOWMSG("couldn't find a vacant file descriptor, and couldn't allocate one either");
|
||||
goto out;
|
||||
@ -329,24 +326,9 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
|
||||
goto out;
|
||||
}
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
{
|
||||
fd_lock = __create_semaphore();
|
||||
if(fd_lock == NULL)
|
||||
{
|
||||
__set_errno(ENOMEM);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
#else
|
||||
{
|
||||
fd_lock = NULL;
|
||||
}
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
fd = __fd[fd_slot_number];
|
||||
|
||||
__initialize_fd(fd,__fd_hook_entry,handle,0,fd_lock);
|
||||
__initialize_fd(fd,(HOOKFUNC)__fd_hook_entry,handle,0);
|
||||
|
||||
/* Figure out if this stream is attached to a console. */
|
||||
PROFILE_OFF();
|
||||
@ -361,7 +343,7 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
|
||||
{
|
||||
SHOWMSG("enabling non-blocking mode");
|
||||
|
||||
if(SetMode(handle,DOSTRUE)) /* single character mode */
|
||||
if(SetMode(handle,1)) /* single character mode */
|
||||
SET_FLAG(fd->fd_Flags,FDF_NON_BLOCKING);
|
||||
}
|
||||
}
|
||||
@ -467,8 +449,6 @@ open(const char *path_name, int open_flag, ... /* mode_t mode */ )
|
||||
|
||||
UnLock(lock);
|
||||
|
||||
__stdio_unlock();
|
||||
|
||||
PROFILE_ON();
|
||||
|
||||
RETURN(result);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fcntl_read.c,v 1.7 2005-02-28 10:07:30 obarthel Exp $
|
||||
* $Id: fcntl_read.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -48,11 +48,11 @@
|
||||
/****************************************************************************/
|
||||
|
||||
ssize_t
|
||||
read(int file_descriptor, void * buffer, size_t num_bytes)
|
||||
__read(int file_descriptor, void * buffer, size_t num_bytes, int * error_ptr)
|
||||
{
|
||||
ssize_t num_bytes_read;
|
||||
ssize_t result = -1;
|
||||
DECLARE_UTILITYBASE();
|
||||
struct fd * fd;
|
||||
off_t result = -1;
|
||||
|
||||
ENTER();
|
||||
|
||||
@ -60,11 +60,10 @@ read(int file_descriptor, void * buffer, size_t num_bytes)
|
||||
SHOWPOINTER(buffer);
|
||||
SHOWVALUE(num_bytes);
|
||||
|
||||
assert( error_ptr != NULL );
|
||||
assert( buffer != NULL );
|
||||
assert( (int)num_bytes >= 0);
|
||||
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
assert( UtilityBase != NULL );
|
||||
|
||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||
{
|
||||
@ -72,7 +71,7 @@ read(int file_descriptor, void * buffer, size_t num_bytes)
|
||||
{
|
||||
SHOWMSG("invalid buffer");
|
||||
|
||||
__set_errno(EFAULT);
|
||||
(*error_ptr) = EFAULT;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
@ -82,10 +81,13 @@ read(int file_descriptor, void * buffer, size_t num_bytes)
|
||||
assert( __fd[file_descriptor] != NULL );
|
||||
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
|
||||
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
|
||||
fd = __get_file_descriptor(file_descriptor);
|
||||
if(fd == NULL)
|
||||
{
|
||||
__set_errno(EBADF);
|
||||
(*error_ptr) = EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -93,38 +95,54 @@ read(int file_descriptor, void * buffer, size_t num_bytes)
|
||||
{
|
||||
SHOWMSG("this descriptor is not read-enabled");
|
||||
|
||||
__set_errno(EBADF);
|
||||
(*error_ptr) = EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if(num_bytes > 0)
|
||||
{
|
||||
struct file_action_message fam;
|
||||
struct file_hook_message message;
|
||||
|
||||
SHOWMSG("calling the hook");
|
||||
|
||||
fam.fam_Action = file_action_read;
|
||||
fam.fam_Data = buffer;
|
||||
fam.fam_Size = num_bytes;
|
||||
message.action = file_hook_action_read;
|
||||
message.data = buffer;
|
||||
message.size = num_bytes;
|
||||
|
||||
assert( fd->fd_Action != NULL );
|
||||
assert( fd->fd_Hook != NULL );
|
||||
|
||||
num_bytes_read = (*fd->fd_Action)(fd,&fam);
|
||||
if(num_bytes_read < 0)
|
||||
{
|
||||
__set_errno(fam.fam_Error);
|
||||
goto out;
|
||||
}
|
||||
CallHookPkt(fd->fd_Hook,fd,&message);
|
||||
|
||||
(*error_ptr) = message.error;
|
||||
|
||||
result = message.result;
|
||||
}
|
||||
else
|
||||
{
|
||||
num_bytes_read = 0;
|
||||
}
|
||||
(*error_ptr) = 0;
|
||||
|
||||
result = num_bytes_read;
|
||||
result = 0;
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
ssize_t
|
||||
read(int file_descriptor, void * buffer, size_t num_bytes)
|
||||
{
|
||||
ssize_t result;
|
||||
int error;
|
||||
|
||||
ENTER();
|
||||
|
||||
result = __read(file_descriptor,buffer,num_bytes,&error);
|
||||
__set_errno(error);
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fcntl_write.c,v 1.7 2005-02-28 10:07:30 obarthel Exp $
|
||||
* $Id: fcntl_write.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -48,11 +48,11 @@
|
||||
/****************************************************************************/
|
||||
|
||||
ssize_t
|
||||
write(int file_descriptor, const void * buffer, size_t num_bytes)
|
||||
__write(int file_descriptor, const void * buffer, size_t num_bytes, int * error_ptr)
|
||||
{
|
||||
ssize_t num_bytes_written;
|
||||
ssize_t result = -1;
|
||||
DECLARE_UTILITYBASE();
|
||||
struct fd * fd;
|
||||
off_t result = -1;
|
||||
|
||||
ENTER();
|
||||
|
||||
@ -60,11 +60,10 @@ write(int file_descriptor, const void * buffer, size_t num_bytes)
|
||||
SHOWPOINTER(buffer);
|
||||
SHOWVALUE(num_bytes);
|
||||
|
||||
assert( error_ptr != NULL );
|
||||
assert( buffer != NULL );
|
||||
assert( (int)num_bytes >= 0 );
|
||||
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
assert( UtilityBase != NULL );
|
||||
|
||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||
{
|
||||
@ -72,7 +71,7 @@ write(int file_descriptor, const void * buffer, size_t num_bytes)
|
||||
{
|
||||
SHOWMSG("invalid buffer address");
|
||||
|
||||
__set_errno(EFAULT);
|
||||
(*error_ptr) = EFAULT;
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
@ -82,10 +81,13 @@ write(int file_descriptor, const void * buffer, size_t num_bytes)
|
||||
assert( __fd[file_descriptor] != NULL );
|
||||
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
|
||||
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
|
||||
fd = __get_file_descriptor(file_descriptor);
|
||||
if(fd == NULL)
|
||||
{
|
||||
__set_errno(EBADF);
|
||||
(*error_ptr) = EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
@ -93,38 +95,54 @@ write(int file_descriptor, const void * buffer, size_t num_bytes)
|
||||
{
|
||||
SHOWMSG("file descriptor is not write-enabled");
|
||||
|
||||
__set_errno(EBADF);
|
||||
(*error_ptr) = EBADF;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if(num_bytes > 0)
|
||||
{
|
||||
struct file_action_message fam;
|
||||
struct file_hook_message message;
|
||||
|
||||
SHOWMSG("calling the hook");
|
||||
|
||||
fam.fam_Action = file_action_write;
|
||||
fam.fam_Data = (void *)buffer;
|
||||
fam.fam_Size = num_bytes;
|
||||
message.action = file_hook_action_write;
|
||||
message.data = (void *)buffer;
|
||||
message.size = num_bytes;
|
||||
|
||||
assert( fd->fd_Action != NULL );
|
||||
assert( fd->fd_Hook != NULL );
|
||||
|
||||
num_bytes_written = (*fd->fd_Action)(fd,&fam);
|
||||
if(num_bytes_written < 0)
|
||||
{
|
||||
__set_errno(fam.fam_Error);
|
||||
goto out;
|
||||
}
|
||||
CallHookPkt(fd->fd_Hook,fd,&message);
|
||||
|
||||
(*error_ptr) = message.error;
|
||||
|
||||
result = message.result;
|
||||
}
|
||||
else
|
||||
{
|
||||
num_bytes_written = 0;
|
||||
}
|
||||
(*error_ptr) = 0;
|
||||
|
||||
result = num_bytes_written;
|
||||
result = 0;
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
ssize_t
|
||||
write(int file_descriptor, const void * buffer, size_t num_bytes)
|
||||
{
|
||||
ssize_t result;
|
||||
int error;
|
||||
|
||||
ENTER();
|
||||
|
||||
result = __write(file_descriptor,buffer,num_bytes,&error);
|
||||
__set_errno(error);
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,240 +0,0 @@
|
||||
/*
|
||||
* $Id: ftw_ftw.c,v 1.2 2005-03-03 10:59:17 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2005 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.
|
||||
*/
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* This ftw() implementation builds heavily on existing functionality and could certainly
|
||||
* be made more efficient (e.g. by combining walk & stat using ExAll()/ExNext()) but this
|
||||
* way the Unix pathname translation is free.
|
||||
*/
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <dirent.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/stat.h>
|
||||
#include <ftw.h>
|
||||
#include <errno.h>
|
||||
#include <dos.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef _DEBUG_H
|
||||
#include "debug.h"
|
||||
#endif /* _DEBUG_H */
|
||||
|
||||
#ifndef _FTW_HEADERS_H
|
||||
#include "ftw_headers.h"
|
||||
#endif /* _FTW_HEADERS_H */
|
||||
|
||||
#ifndef _STDLIB_PROTOS_H
|
||||
#include "stdlib_protos.h" /* get/set errno. */
|
||||
#endif /* _STDLIB_PROTOS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
static int
|
||||
walk(const char *path,int (*func)(const char *,const struct stat *,int),int depth,int level)
|
||||
{
|
||||
int result = 0;
|
||||
DIR *dp;
|
||||
struct dirent *de;
|
||||
struct stat st;
|
||||
char *next_name;
|
||||
int type;
|
||||
int old_length;
|
||||
int errtmp;
|
||||
|
||||
ENTER();
|
||||
|
||||
SHOWSTRING(path);
|
||||
SHOWPOINTER(func);
|
||||
SHOWVALUE(depth);
|
||||
SHOWVALUE(level);
|
||||
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
|
||||
if(level > depth)
|
||||
goto out;
|
||||
|
||||
if(stat(path,&st) == OK)
|
||||
{
|
||||
if (S_ISDIR(st.st_mode))
|
||||
{
|
||||
if(FLAG_IS_SET(st.st_mode,S_IRUSR))
|
||||
type = FTW_D; /* Directory */
|
||||
else
|
||||
type = FTW_DNR; /* Directory No Read-permission */
|
||||
}
|
||||
else if (S_ISREG(st.st_mode))
|
||||
{
|
||||
type = FTW_F; /* File */
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Skip */
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
type = FTW_NS; /* No Stat */
|
||||
}
|
||||
|
||||
result = (*func)(path,&st,type);
|
||||
if(result != 0)
|
||||
goto out;
|
||||
|
||||
if(type == FTW_D)
|
||||
{
|
||||
dp = opendir(path); /* Also takes care of Unix->Amiga pathname conversion. */
|
||||
if(dp == NULL)
|
||||
{
|
||||
result = -1; /* Pass errno from opendir() */
|
||||
goto out;
|
||||
}
|
||||
|
||||
old_length = strlen(path);
|
||||
|
||||
next_name = malloc(old_length + NAME_MAX + 2); /* Allocate new for each recursive step to handle extremely long path names. */
|
||||
if(next_name == NULL)
|
||||
{
|
||||
__set_errno(ENOMEM);
|
||||
|
||||
result = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
strcpy(next_name,path);
|
||||
|
||||
if(old_length > 0 && next_name[old_length - 1] != ':' && next_name[old_length-1] != '/')
|
||||
next_name[old_length++] = '/';
|
||||
|
||||
while((result == 0) && (de = readdir(dp)) != NULL)
|
||||
{
|
||||
strlcpy(&next_name[old_length],de->d_name,NAME_MAX + 2);
|
||||
|
||||
result = walk(next_name,func,depth,level+1);
|
||||
}
|
||||
|
||||
errtmp = __get_errno();
|
||||
|
||||
closedir(dp);
|
||||
free(next_name);
|
||||
|
||||
__set_errno(errtmp);
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
int
|
||||
ftw(const char *path,int (*func)(const char *,const struct stat *,int),int depth)
|
||||
{
|
||||
int result = -1;
|
||||
char *base;
|
||||
int len;
|
||||
|
||||
ENTER();
|
||||
|
||||
SHOWSTRING(path);
|
||||
SHOWPOINTER(func);
|
||||
SHOWVALUE(depth);
|
||||
|
||||
if(path == NULL)
|
||||
{
|
||||
SHOWMSG("NULL pathname to ftw().");
|
||||
|
||||
__set_errno(EFAULT);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if(func == NULL)
|
||||
{
|
||||
SHOWMSG("No function supplied.");
|
||||
|
||||
__set_errno(EFAULT);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if(depth < 0)
|
||||
{
|
||||
SHOWMSG("Invalid depth.\n");
|
||||
|
||||
__set_errno(EINVAL);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Make sure the path never ends with '/' unless used to indicate parent directory. */
|
||||
len = strlen(path);
|
||||
if(len > 1 && path[len - 1] == '/' && path[len - 2] != '/')
|
||||
{
|
||||
int error;
|
||||
|
||||
base = strdup(path);
|
||||
if(base == NULL)
|
||||
{
|
||||
__set_errno(ENOMEM);
|
||||
goto out;
|
||||
}
|
||||
|
||||
base[len - 1] = '\0';
|
||||
|
||||
result = walk(base,func,depth,0);
|
||||
|
||||
error = __get_errno();
|
||||
|
||||
free(base);
|
||||
|
||||
__set_errno(error);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = walk(path,func,depth,0);
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
@ -1,336 +0,0 @@
|
||||
/*
|
||||
* $Id: ftw_nftw.c,v 1.2 2005-03-03 10:59:17 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2005 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.
|
||||
*/
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* This nftw() implementation builds heavily on existing functionality and could certainly
|
||||
* be made more efficient.
|
||||
*/
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <dirent.h>
|
||||
#include <unistd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/stat.h>
|
||||
#include <ftw.h>
|
||||
#include <errno.h>
|
||||
#include <dos.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef _DEBUG_H
|
||||
#include "debug.h"
|
||||
#endif /* _DEBUG_H */
|
||||
|
||||
#ifndef _FTW_HEADERS_H
|
||||
#include "ftw_headers.h"
|
||||
#endif /* _FTW_HEADERS_H */
|
||||
|
||||
#ifndef _STDLIB_PROTOS_H
|
||||
#include "stdlib_protos.h" /* get/set errno. */
|
||||
#endif /* _STDLIB_PROTOS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
static int
|
||||
walk(const char *path,int (*func)(const char *,const struct stat *,int,struct FTW *),const int depth,int level,const int flags,const int base,int * const prune)
|
||||
{
|
||||
int result = 0;
|
||||
DIR *dp;
|
||||
struct dirent *de;
|
||||
struct stat st;
|
||||
char *next_name;
|
||||
char *old_cwd = 0;
|
||||
int type;
|
||||
int old_length;
|
||||
int errtmp;
|
||||
struct FTW extra_info;
|
||||
int stat_result;
|
||||
|
||||
ENTER();
|
||||
|
||||
SHOWSTRING(path);
|
||||
SHOWPOINTER(func);
|
||||
SHOWVALUE(depth);
|
||||
SHOWVALUE(level);
|
||||
SHOWVALUE(flags);
|
||||
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
|
||||
if(level > depth)
|
||||
goto out;
|
||||
|
||||
if(FLAG_IS_SET(flags,FTW_PHYS))
|
||||
stat_result = lstat(path,&st);
|
||||
else
|
||||
stat_result = stat(path,&st);
|
||||
|
||||
if(stat_result == OK)
|
||||
{
|
||||
if (S_ISLNK(st.st_mode)) /* Should only be possible if lstat() is used. */
|
||||
{
|
||||
type = FTW_SL;
|
||||
}
|
||||
else if (S_ISDIR(st.st_mode))
|
||||
{
|
||||
if(FLAG_IS_SET(st.st_mode,S_IRUSR))
|
||||
type = FTW_D; /* Directory */
|
||||
else
|
||||
type = FTW_DNR; /* Directory No Read-permission */
|
||||
}
|
||||
else if (S_ISREG(st.st_mode))
|
||||
{
|
||||
type = FTW_F; /* File */
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Skip */
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if(FLAG_IS_CLEAR(flags,FTW_PHYS) && lstat(path,&st) == OK)
|
||||
type = FTW_SLN; /* Broken link. */
|
||||
else
|
||||
type = FTW_NS; /* No Stat */
|
||||
}
|
||||
|
||||
extra_info.quit = 0;
|
||||
extra_info.base = base;
|
||||
extra_info.level = level;
|
||||
|
||||
if(type == FTW_D)
|
||||
{
|
||||
old_length = strlen(path);
|
||||
|
||||
if(FLAG_IS_CLEAR(flags,FTW_DEPTH))
|
||||
result = (*func)(path,&st,type,&extra_info);
|
||||
|
||||
if(extra_info.quit == 0)
|
||||
{
|
||||
dp = opendir(path); /* Also takes care of Unix->Amiga pathname conversion. */
|
||||
if(dp == NULL)
|
||||
{
|
||||
result = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
if(FLAG_IS_SET(flags,FTW_CHDIR)) /* Change to directory before traversing. */
|
||||
{
|
||||
old_cwd = malloc(old_length + NAME_MAX);
|
||||
if(old_cwd == NULL)
|
||||
{
|
||||
__set_errno(ENOMEM);
|
||||
|
||||
result = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
getcwd(old_cwd,old_length + NAME_MAX);
|
||||
chdir(path);
|
||||
}
|
||||
|
||||
next_name = malloc(old_length + NAME_MAX + 2); /* Allocate new for each recursive step to handle extremely long path names. */
|
||||
if(next_name == NULL)
|
||||
{
|
||||
__set_errno(ENOMEM);
|
||||
|
||||
result = -1;
|
||||
goto out;
|
||||
}
|
||||
|
||||
strcpy(next_name,path);
|
||||
if(old_length > 0 && next_name[old_length - 1] != ':' && next_name[old_length - 1] != '/')
|
||||
next_name[old_length++] = '/';
|
||||
|
||||
while((result == 0) && (de = readdir(dp)) != NULL)
|
||||
{
|
||||
strlcpy(&next_name[old_length],de->d_name,NAME_MAX + 2);
|
||||
|
||||
result = walk(next_name,func,depth,level + 1,flags,old_length,prune);
|
||||
if((*prune) != 0)
|
||||
{
|
||||
(*prune) = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
errtmp = __get_errno();
|
||||
|
||||
closedir(dp);
|
||||
|
||||
__set_errno(errtmp);
|
||||
|
||||
free(next_name);
|
||||
|
||||
if((result == 0) && FLAG_IS_SET(flags,FTW_DEPTH))
|
||||
result = (*func)(path,&st,FTW_DP,&extra_info);
|
||||
}
|
||||
|
||||
if(extra_info.quit == FTW_PRUNE) /* Abort traversal of current directory. */
|
||||
(*prune) = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
result = (*func)(path,&st,type,&extra_info);
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
if(old_cwd != NULL)
|
||||
{
|
||||
errtmp = __get_errno();
|
||||
|
||||
chdir(old_cwd); /* Restore (pop) old directory. */
|
||||
free(old_cwd);
|
||||
|
||||
__set_errno(errtmp);
|
||||
}
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
/****************************************************************/
|
||||
|
||||
static int
|
||||
index_of_end_part(const char *path)
|
||||
{
|
||||
int result = 0;
|
||||
int i;
|
||||
|
||||
i = strlen(path) - 1;
|
||||
while(i-- > 0)
|
||||
{
|
||||
if(path[i] == '/' || path[i] == ':')
|
||||
{
|
||||
result = i + 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return(result);
|
||||
}
|
||||
|
||||
/****************************************************************/
|
||||
|
||||
int
|
||||
nftw(const char *path,int (*func)(const char *,const struct stat *,int,struct FTW *),int depth,int flags)
|
||||
{
|
||||
char *base;
|
||||
int len;
|
||||
int base_index;
|
||||
int prune = 0;
|
||||
int result = -1;
|
||||
|
||||
ENTER();
|
||||
|
||||
SHOWSTRING(path);
|
||||
SHOWPOINTER(func);
|
||||
SHOWVALUE(depth);
|
||||
SHOWVALUE(flags);
|
||||
|
||||
if(path == NULL)
|
||||
{
|
||||
SHOWMSG("NULL pathname to nftw().");
|
||||
__set_errno(EFAULT);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if(func == NULL)
|
||||
{
|
||||
SHOWMSG("No function supplied.");
|
||||
__set_errno(EFAULT);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if(depth < 0)
|
||||
{
|
||||
SHOWMSG("Invalid depth.\n");
|
||||
__set_errno(EINVAL);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if((flags & ~FTW_ALL_FLAGS) != 0)
|
||||
{
|
||||
SHOWMSG("Bogus flags.");
|
||||
|
||||
__set_errno(EINVAL);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Make sure the path never ends with '/' unless used to indicate parent directory. */
|
||||
|
||||
len = strlen(path);
|
||||
if(len > 1 && path[len - 1] == '/' && path[len - 2] != '/')
|
||||
{
|
||||
int error;
|
||||
|
||||
base = strdup(path);
|
||||
if(base == NULL)
|
||||
{
|
||||
__set_errno(ENOMEM);
|
||||
goto out;
|
||||
}
|
||||
|
||||
base[len - 1] = '\0';
|
||||
|
||||
base_index = index_of_end_part(base);
|
||||
|
||||
result = walk(base,func,depth,0,flags,base_index,&prune);
|
||||
|
||||
error = __get_errno();
|
||||
free(base);
|
||||
__set_errno(error);
|
||||
}
|
||||
else
|
||||
{
|
||||
base_index = index_of_end_part(path);
|
||||
|
||||
result = walk(path,func,depth,0,flags,base_index,&prune);
|
||||
}
|
||||
|
||||
out:
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: dos.h,v 1.9 2005-03-06 09:04:44 obarthel Exp $
|
||||
* $Id: dos.h,v 1.7 2005-02-03 17:33:54 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -272,32 +272,6 @@ extern unsigned int (* __get_default_stack_size)(void);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* This library falls back onto locale.library to perform string collation
|
||||
* in strcoll(), character conversion in toupper() and various other
|
||||
* functions. This may not your intention. To restrict the library to use
|
||||
* only the "C" language locale, declare the following variable in your
|
||||
* code and set it to FALSE, so that it overrides the default settings.
|
||||
* The variable value is checked during program startup and, if set to
|
||||
* TRUE, has the effect of opening locale.library and obtaining the
|
||||
* default locale.
|
||||
*/
|
||||
extern BOOL __open_locale;
|
||||
|
||||
/*
|
||||
* Two functions control how this library uses the locale.library API to
|
||||
* perform string collation, character and time conversion, etc.
|
||||
*
|
||||
* __locale_init() opens locale.library and attempts to open the default
|
||||
* locale. If it succeeds, it will return 0 and -1 otherwise.
|
||||
*
|
||||
* __locale_exit() releases the default locale and closes locale.library.
|
||||
*/
|
||||
extern int __locale_init(void);
|
||||
extern void __locale_exit(void);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* If linked with -lunix, Unix path names are translated to Amiga path
|
||||
* names (and the other way round). If you wish to disable this, set the
|
||||
|
||||
@ -1,102 +0,0 @@
|
||||
/*
|
||||
* $Id: ftw.h,v 1.1 2005-03-02 12:57:56 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2005 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 _FTW_H
|
||||
#define _FTW_H
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <sys/stat.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Values passed to the user function (argument #3). */
|
||||
enum
|
||||
{
|
||||
FTW_F, /* Regular file. */
|
||||
FTW_D, /* Directory. */
|
||||
FTW_DP, /* Directory, already visited. (nftw() only) */
|
||||
FTW_SL, /* Symlink. (nftw() only) */
|
||||
FTW_SLN, /* Broken Symlink. (does not point to an existing file, nftw() only) */
|
||||
FTW_DNR, /* Directory which can not be read (e.g. not enough permissions) */
|
||||
FTW_NS /* Stat failed. */
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Flags for FTW.quit */
|
||||
#define FTW_SKD (1L<<0) /* Skip directory. */
|
||||
#define FTW_PRUNE (1L<<1) /* Prune traversal. (skip up) */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Flags for nftw() */
|
||||
#define FTW_PHYS (1L<<0)
|
||||
#define FTW_MOUNT (1L<<1) /* Currently unsupported. */
|
||||
#define FTW_DEPTH (1L<<2)
|
||||
#define FTW_CHDIR (1L<<3)
|
||||
#define FTW_ALL_FLAGS (0x0000000f)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct FTW
|
||||
{
|
||||
int quit; /* Flags passed out from the user function to ftw()/nftw() */
|
||||
int base; /* Index of current item from start of string. e.g. 4 for "foo/bar" */
|
||||
int level; /* Current depth. (counted from 0) */
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern int ftw(const char *path,int (*func)(const char *,const struct stat *,int),int depth);
|
||||
extern int nftw(const char *path,int (*func)(const char *,const struct stat *,int,struct FTW *),int depth,int flags);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _FTW_H */
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math.h,v 1.6 2005-02-25 10:14:22 obarthel Exp $
|
||||
* $Id: math.h,v 1.5 2005-01-02 09:07:21 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -85,22 +85,6 @@ extern double tanh(double x);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define M_E 2.7182818284590452354
|
||||
#define M_LOG2E 1.4426950408889634074
|
||||
#define M_LOG10E 0.43429448190325182765
|
||||
#define M_LN2 0.69314718055994530942
|
||||
#define M_LN10 2.30258509299404568402
|
||||
#define M_PI 3.14159265358979323846
|
||||
#define M_PI_2 1.57079632679489661923
|
||||
#define M_PI_4 0.78539816339744830962
|
||||
#define M_1_PI 0.31830988618379067154
|
||||
#define M_2_PI 0.63661977236758134308
|
||||
#define M_2_SQRTPI 1.12837916709551257390
|
||||
#define M_SQRT2 1.41421356237309504880
|
||||
#define M_SQRT1_2 0.70710678118654752440
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern double rint(double x);
|
||||
extern float rintf(float x);
|
||||
extern int isinf(double x);
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdio.h,v 1.9 2005-03-06 09:04:44 obarthel Exp $
|
||||
* $Id: stdio.h,v 1.5 2005-01-02 09:07:21 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -249,11 +249,20 @@ extern char *tmpnam(char *buf);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* A special buffer flush routine which returns the last character written
|
||||
* in case of success and EOF in case of failure. This is used by the
|
||||
* putc() macro defined below.
|
||||
*/
|
||||
extern int __flush(FILE *stream);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* fgetc() implemented as a "simple" macro; note that fgetc() does much more than
|
||||
* can be conveniently expressed as a macro!
|
||||
*/
|
||||
#define __getc_unlocked(f) \
|
||||
#define getc(f) \
|
||||
(((((FILE *)(f))->flags & (__FILE_IN_USE|__FILE_READABLE|__FILE_EOF)) == (__FILE_IN_USE|__FILE_READABLE) && \
|
||||
(((FILE *)(f))->flags & __FILE_BUFFER_MASK) != _IONBF && \
|
||||
((FILE *)(f))->position < ((FILE *)(f))->num_read_bytes) ? \
|
||||
@ -266,7 +275,7 @@ extern char *tmpnam(char *buf);
|
||||
* fputc() implemented as a "simple" macro; note that fputc() does much more than
|
||||
* can be conveniently expressed as a macro!
|
||||
*/
|
||||
#define __putc_unlocked(c,f) \
|
||||
#define putc(c,f) \
|
||||
(((((FILE *)(f))->flags & (__FILE_IN_USE|__FILE_WRITABLE)) == (__FILE_IN_USE|__FILE_WRITABLE) && \
|
||||
(((FILE *)(f))->flags & __FILE_BUFFER_MASK) != _IONBF && \
|
||||
(((FILE *)(f))->num_write_bytes < ((FILE *)(f))->size)) ? \
|
||||
@ -279,25 +288,6 @@ extern char *tmpnam(char *buf);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
|
||||
#define getc(f) (flockfile(f), __unlockfile((f),__getc_unlocked(f)))
|
||||
#define putc(c,f) (flockfile(f), __unlockfile((f),__putc_unlocked((c),(f))))
|
||||
|
||||
#else
|
||||
|
||||
#define getc(f) __getc_unlocked(f)
|
||||
#define putc(c,f) __putc_unlocked((c),(f))
|
||||
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define getchar() getc(stdin)
|
||||
#define putchar(c) putc((c),stdout)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* If requested, reimplement some of the file I/O routines as macros.
|
||||
*/
|
||||
@ -306,6 +296,8 @@ extern char *tmpnam(char *buf);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define getchar() getc(stdin)
|
||||
#define putchar(c) putc((c),stdout)
|
||||
#define clearerr(file) ((void)((file)->flags &= ~(__FILE_EOF|__FILE_ERROR)))
|
||||
#define feof(file) (((file)->flags & __FILE_EOF) != 0)
|
||||
#define ferror(file) (((file)->flags & __FILE_ERROR) != 0)
|
||||
@ -324,38 +316,6 @@ extern char *tmpnam(char *buf);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* A special buffer flush routine which returns the last character written
|
||||
* in case of success and EOF in case of failure. This is used by the
|
||||
* __putc_unlocked() macro defined above.
|
||||
*/
|
||||
extern int __flush(FILE *stream);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/*
|
||||
* A special function which returns the input character. This is used by
|
||||
* the __getc_unlocked() macro defined above.
|
||||
*/
|
||||
extern int __unlockfile(FILE *stream,int c);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern int getc_unlocked(FILE *stream);
|
||||
extern int getchar_unlocked(void);
|
||||
extern int putc_unlocked(int c,FILE *stream);
|
||||
extern int putchar_unlocked(int c);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define getc_unlocked(f) __getc_unlocked(f)
|
||||
#define putc_unlocked(c,f) __putc_unlocked((c),(f))
|
||||
|
||||
#define getchar_unlocked() __getc_unlocked(stdin)
|
||||
#define putchar_unlocked(c) __putc_unlocked((c),stdout)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern FILE * fdopen(int file_descriptor, const char * type);
|
||||
extern int fileno(FILE * file);
|
||||
extern int asprintf(char **ret, const char *format, ...);
|
||||
@ -366,30 +326,6 @@ extern FILE * popen(const char *command, const char *type);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern void flockfile(FILE * file);
|
||||
extern void funlockfile(FILE * file);
|
||||
extern int ftrylockfile(FILE * file);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#else
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define flockfile(file) ((void)0)
|
||||
#define funlockfile(file) ((void)0)
|
||||
#define ftrylockfile(file) (0)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern int vasprintf(char **ret,const char *format,va_list arg);
|
||||
|
||||
#ifdef __MEM_DEBUG
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stdlib.h,v 1.8 2005-03-02 12:57:56 obarthel Exp $
|
||||
* $Id: stdlib.h,v 1.6 2005-01-30 09:48:06 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -149,16 +149,11 @@ extern long atol(const char *str);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern int rand_r(unsigned int * seed);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* These functions are unavailable under SAS/C for lack of a
|
||||
/* These two functions are unavailable under SAS/C for lack of a
|
||||
"long long" data type. */
|
||||
#if ! defined(__SASC)
|
||||
extern long long strtoll(const char *str, char **ptr, int base);
|
||||
extern unsigned long long strtoull(const char *str, char **ptr, int base);
|
||||
extern long long atoll(const char *str);
|
||||
#endif /* __SASC */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: strings.h,v 1.4 2005-03-02 12:57:56 obarthel Exp $
|
||||
* $Id: strings.h,v 1.3 2005-01-02 09:07:21 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -52,10 +52,9 @@ extern "C" {
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* These come from 4.4BSD. */
|
||||
/* These two come from 4.4BSD. */
|
||||
extern int strcasecmp(const char *s1, const char *s2);
|
||||
extern int strncasecmp(const char *s1, const char *s2, size_t len);
|
||||
extern int ffs(int i);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: stat.h,v 1.4 2005-03-10 11:40:57 obarthel Exp $
|
||||
* $Id: stat.h,v 1.3 2005-01-02 09:07:21 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -79,15 +79,6 @@ extern "C" {
|
||||
#define S_IWOTH 0000002 /* W for other */
|
||||
#define S_IXOTH 0000001 /* X for other */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Aliases for the owner RWX mask. */
|
||||
#define S_IREAD S_IRUSR
|
||||
#define S_IWRITE S_IWUSR
|
||||
#define S_IEXEC S_IXUSR
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define S_IFMT 0170000 /* type of file */
|
||||
#define S_IFIFO 0010000 /* named pipe (fifo) */
|
||||
#define S_IFDIR 0040000 /* directory */
|
||||
@ -96,8 +87,6 @@ extern "C" {
|
||||
#define S_IFLNK 0120000 /* symbolic link */
|
||||
#define S_IFSOCK 0140000 /* socket */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) /* directory */
|
||||
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) /* regular file */
|
||||
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) /* symbolic link */
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: types.h,v 1.4 2005-02-20 15:46:57 obarthel Exp $
|
||||
* $Id: types.h,v 1.3 2005-01-02 09:07:21 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -53,7 +53,7 @@ typedef unsigned int gid_t;
|
||||
typedef unsigned int ino_t;
|
||||
typedef unsigned int mode_t;
|
||||
typedef unsigned int nlink_t;
|
||||
typedef long int off_t;
|
||||
typedef int off_t;
|
||||
typedef int pid_t;
|
||||
typedef unsigned int rlim_t;
|
||||
typedef int ssize_t;
|
||||
|
||||
@ -1,74 +0,0 @@
|
||||
/*
|
||||
* $Id: utsname.h,v 1.1 2005-03-02 12:57:56 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
* Portable ISO 'C' (1994) runtime library for the Amiga computer
|
||||
* Copyright (c) 2002-2005 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 _SYS_UTSNAME_H
|
||||
#define _SYS_UTSNAME_H
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* The following is not part of the ISO 'C' (1994) standard. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define SYS_NMLN 32
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
struct utsname
|
||||
{
|
||||
char sysname[SYS_NMLN]; /* OS Name ("AmigaOS") */
|
||||
char nodename[SYS_NMLN]; /* Usually Hostname, but there appears to be no standard. */
|
||||
char release[SYS_NMLN]; /* Release e.g. "51.1" (The Version of version.library) */
|
||||
char version[SYS_NMLN]; /* Version e.h. "4.0" (OS Version) */
|
||||
char machine[SYS_NMLN]; /* Machine e.g. "m68k" or "ppc" */
|
||||
};
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern int uname(struct utsname *);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif /* __cplusplus */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _SYS_UTSNAME_H */
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: locale_headers.h,v 1.6 2005-02-28 10:07:30 obarthel Exp $
|
||||
* $Id: locale_headers.h,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -78,28 +78,6 @@ extern char NOCOMMON __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern void __locale_lock(void);
|
||||
extern void __locale_unlock(void);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#else
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define __locale_lock() ((void)0)
|
||||
#define __locale_unlock() ((void)0)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
extern void __close_all_locales(void);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: locale_init_exit.c,v 1.8 2005-03-03 14:20:55 obarthel Exp $
|
||||
* $Id: locale_init_exit.c,v 1.4 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -63,8 +63,6 @@ char NOCOMMON __locale_name_table[NUM_LOCALES][MAX_LOCALE_NAME_LEN];
|
||||
void
|
||||
__close_all_locales(void)
|
||||
{
|
||||
__locale_lock();
|
||||
|
||||
if(__LocaleBase != NULL)
|
||||
{
|
||||
DECLARE_LOCALEBASE();
|
||||
@ -88,19 +86,14 @@ __close_all_locales(void)
|
||||
CloseLocale(__locale_table[LC_ALL]);
|
||||
__locale_table[LC_ALL] = NULL;
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
__locale_exit(void)
|
||||
CLIB_DESTRUCTOR(__locale_exit)
|
||||
{
|
||||
ENTER();
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(__LocaleBase != NULL)
|
||||
{
|
||||
DECLARE_LOCALEBASE();
|
||||
@ -127,140 +120,48 @@ __locale_exit(void)
|
||||
__LocaleBase = NULL;
|
||||
}
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
LEAVE();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
int
|
||||
__locale_init(void)
|
||||
CLIB_CONSTRUCTOR(__locale_init)
|
||||
{
|
||||
int result = -1;
|
||||
int i;
|
||||
|
||||
ENTER();
|
||||
|
||||
for(i = 0 ; i < NUM_LOCALES ; i++)
|
||||
strcpy(__locale_name_table[i],"C");
|
||||
|
||||
PROFILE_OFF();
|
||||
|
||||
__locale_lock();
|
||||
__LocaleBase = OpenLibrary("locale.library",38);
|
||||
|
||||
if(__LocaleBase == NULL)
|
||||
#if defined(__amigaos4__)
|
||||
{
|
||||
__LocaleBase = OpenLibrary("locale.library",38);
|
||||
|
||||
#if defined(__amigaos4__)
|
||||
if (__LocaleBase != NULL)
|
||||
{
|
||||
if (__LocaleBase != NULL)
|
||||
__ILocale = (struct LocaleIFace *)GetInterface(__LocaleBase, "main", 1, 0);
|
||||
if(__ILocale == NULL)
|
||||
{
|
||||
__ILocale = (struct LocaleIFace *)GetInterface(__LocaleBase, "main", 1, 0);
|
||||
if(__ILocale == NULL)
|
||||
{
|
||||
CloseLibrary(__LocaleBase);
|
||||
__LocaleBase = NULL;
|
||||
}
|
||||
CloseLibrary(__LocaleBase);
|
||||
__LocaleBase = NULL;
|
||||
}
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
}
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
if(__LocaleBase != NULL && __default_locale == NULL)
|
||||
if(__LocaleBase != NULL)
|
||||
{
|
||||
DECLARE_LOCALEBASE();
|
||||
|
||||
__default_locale = OpenLocale(NULL);
|
||||
}
|
||||
|
||||
if(__default_locale != NULL)
|
||||
result = 0;
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
PROFILE_ON();
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
static struct SignalSemaphore * locale_lock;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
__locale_lock(void)
|
||||
{
|
||||
if(locale_lock != NULL)
|
||||
ObtainSemaphore(locale_lock);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
__locale_unlock(void)
|
||||
{
|
||||
if(locale_lock != NULL)
|
||||
ReleaseSemaphore(locale_lock);
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
CLIB_DESTRUCTOR(__locale_exit_destructor)
|
||||
{
|
||||
ENTER();
|
||||
|
||||
__locale_exit();
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
{
|
||||
__delete_semaphore(locale_lock);
|
||||
locale_lock = NULL;
|
||||
}
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
LEAVE();
|
||||
}
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
CLIB_CONSTRUCTOR(__locale_init_constructor)
|
||||
{
|
||||
BOOL success = FALSE;
|
||||
int i;
|
||||
|
||||
ENTER();
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
{
|
||||
locale_lock = __create_semaphore();
|
||||
if(locale_lock == NULL)
|
||||
goto out;
|
||||
}
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
for(i = 0 ; i < NUM_LOCALES ; i++)
|
||||
strcpy(__locale_name_table[i],"C");
|
||||
|
||||
if(__open_locale)
|
||||
__locale_init();
|
||||
|
||||
success = TRUE;
|
||||
|
||||
out:
|
||||
|
||||
RETURN(success);
|
||||
|
||||
if(success)
|
||||
CONSTRUCTOR_SUCCEED();
|
||||
else
|
||||
CONSTRUCTOR_FAIL();
|
||||
RETURN(OK);
|
||||
|
||||
CONSTRUCTOR_SUCCEED();
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: locale_localeconv.c,v 1.4 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: locale_localeconv.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -41,18 +41,12 @@ struct lconv *
|
||||
localeconv(void)
|
||||
{
|
||||
static struct lconv loc;
|
||||
|
||||
struct Locale * numeric_locale;
|
||||
struct Locale * monetary_locale;
|
||||
struct Locale * numeric_locale = __locale_table[LC_NUMERIC];
|
||||
struct Locale * monetary_locale = __locale_table[LC_MONETARY];
|
||||
struct lconv * result;
|
||||
|
||||
ENTER();
|
||||
|
||||
__locale_lock();
|
||||
|
||||
numeric_locale = __locale_table[LC_NUMERIC];
|
||||
monetary_locale = __locale_table[LC_MONETARY];
|
||||
|
||||
/* This makes up the current locale settings from the various
|
||||
* components in use.
|
||||
*/
|
||||
@ -77,8 +71,6 @@ localeconv(void)
|
||||
|
||||
result = &loc;
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: locale_setlocale.c,v 1.4 2005-02-27 21:58:21 obarthel Exp $
|
||||
* $Id: locale_setlocale.c,v 1.3 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -52,8 +52,6 @@ setlocale(int category, const char *locale)
|
||||
else
|
||||
SHOWSTRING(locale);
|
||||
|
||||
__locale_lock();
|
||||
|
||||
if(category < LC_ALL || category > LC_TIME)
|
||||
{
|
||||
SHOWMSG("invalid category");
|
||||
@ -157,8 +155,6 @@ setlocale(int category, const char *locale)
|
||||
|
||||
out:
|
||||
|
||||
__locale_unlock();
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 189
|
||||
#define DATE "5.3.2005"
|
||||
#define VERS "m.lib 1.189"
|
||||
#define VSTRING "m.lib 1.189 (5.3.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: m.lib 1.189 (5.3.2005)"
|
||||
#define REVISION 188
|
||||
#define DATE "7.2.2005"
|
||||
#define VERS "m.lib 1.188"
|
||||
#define VSTRING "m.lib 1.188 (7.2.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: m.lib 1.188 (7.2.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
189
|
||||
188
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 189
|
||||
#define DATE "5.3.2005"
|
||||
#define VERS "m881.lib 1.189"
|
||||
#define VSTRING "m881.lib 1.189 (5.3.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: m881.lib 1.189 (5.3.2005)"
|
||||
#define REVISION 188
|
||||
#define DATE "7.2.2005"
|
||||
#define VERS "m881.lib 1.188"
|
||||
#define VSTRING "m881.lib 1.188 (7.2.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: m881.lib 1.188 (7.2.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
189
|
||||
188
|
||||
|
||||
204
library/macros.h
204
library/macros.h
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: macros.h,v 1.15 2005-03-11 11:35:31 obarthel Exp $
|
||||
* $Id: macros.h,v 1.8 2005-01-30 09:37:59 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -54,6 +54,12 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef ZERO
|
||||
#define ZERO ((BPTR)NULL)
|
||||
#endif /* ZERO */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#define NUM_ENTRIES(t) (sizeof(t) / sizeof(t[0]))
|
||||
|
||||
/****************************************************************************/
|
||||
@ -69,157 +75,17 @@
|
||||
/****************************************************************************/
|
||||
|
||||
/* Macro to get longword-aligned stack space for a structure
|
||||
Uses ANSI token catenation to form a name for the char array
|
||||
based on the variable name, then creates an appropriately
|
||||
typed pointer to point to the first longword boundary in the
|
||||
char array allocated. */
|
||||
* Uses ANSI token catenation to form a name for the char array
|
||||
* based on the variable name, then creates an appropriately
|
||||
* typed pointer to point to the first longword boundary in the
|
||||
* char array allocated.
|
||||
*/
|
||||
#define D_S(type, name) \
|
||||
char a_##name[sizeof(type)+3]; \
|
||||
type *name = (type *)((LONG)(a_##name+3) & ~3)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* BCPL style "NULL"; this should be in <dos/dos.h>. */
|
||||
#ifndef ZERO
|
||||
#define ZERO ((BPTR)NULL)
|
||||
#endif /* ZERO */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Constructor and destructor functions, as used by the library for data
|
||||
initialization and cleanup. These particular functions are invoked by
|
||||
the startup code before and after the main() function is/was called.
|
||||
How this works is very compiler specific. We support three flavours
|
||||
below. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __SASC
|
||||
|
||||
#define CONSTRUCTOR(name,pri) \
|
||||
int __stdargs _STI_##pri##_##name(void); \
|
||||
int __stdargs _STI_##pri##_##name(void)
|
||||
|
||||
#define DESTRUCTOR(name,pri) \
|
||||
int __stdargs _STD_##pri##_##name(void); \
|
||||
int __stdargs _STD_##pri##_##name(void)
|
||||
|
||||
#define CONSTRUCTOR_SUCCEED() \
|
||||
return(0)
|
||||
|
||||
#define CONSTRUCTOR_FAIL() \
|
||||
return(1)
|
||||
|
||||
#endif /* __SASC */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __GNUC__
|
||||
|
||||
#if defined(__amigaos4__)
|
||||
|
||||
#define CONSTRUCTOR(name,pri) \
|
||||
STATIC VOID __attribute__((used)) name##_ctor(VOID); \
|
||||
STATIC VOID (*__##name##_ctor)(VOID) __attribute__((used,section(".ctors._" #pri))) = name##_ctor; \
|
||||
STATIC VOID name##_ctor(VOID)
|
||||
|
||||
#define DESTRUCTOR(name,pri) \
|
||||
STATIC VOID __attribute__((used)) name##_dtor(VOID); \
|
||||
STATIC VOID (*__##name##_dtor)(VOID) __attribute__((used,section(".dtors._" #pri))) = name##_dtor; \
|
||||
STATIC VOID name##_dtor(VOID)
|
||||
|
||||
#else
|
||||
|
||||
#define CONSTRUCTOR(name,pri) \
|
||||
STATIC VOID __attribute__((constructor)) __ctor##pri##_##name##(VOID); \
|
||||
STATIC void __ctor##pri##_##name##(VOID)
|
||||
|
||||
#define DESTRUCTOR(name,pri) \
|
||||
STATIC VOID __attribute__((destructor)) __dtor##pri##_##name##(VOID); \
|
||||
STATIC VOID __dtor##pri##_##name##(VOID)
|
||||
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
#define CONSTRUCTOR_SUCCEED() \
|
||||
return
|
||||
|
||||
#define CONSTRUCTOR_FAIL() \
|
||||
exit(RETURN_FAIL)
|
||||
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* These macros are for declaring functions to serve as constructors or
|
||||
destructors. In which order these should be invoked is defined by the
|
||||
priority, which is a number in the range 0-999. User-supplied
|
||||
constructor/destructor functions should have priority 0. That way,
|
||||
the user-supplied constructors will be invoked after the library
|
||||
constructors and the user-supplied destructors before the library
|
||||
destructors. */
|
||||
|
||||
#define STDLIB_CONSTRUCTOR(name) CONSTRUCTOR(name, 100)
|
||||
#define STDLIB_DESTRUCTOR(name) DESTRUCTOR(name, 100)
|
||||
|
||||
#define STK_CONSTRUCTOR(name) CONSTRUCTOR(name, 110)
|
||||
#define STK_DESTRUCTOR(name) DESTRUCTOR(name, 110)
|
||||
|
||||
#define STDIO_CONSTRUCTOR(name) CONSTRUCTOR(name, 120)
|
||||
#define STDIO_DESTRUCTOR(name) DESTRUCTOR(name, 120)
|
||||
|
||||
#define FILE_CONSTRUCTOR(name) CONSTRUCTOR(name, 130)
|
||||
#define FILE_DESTRUCTOR(name) DESTRUCTOR(name, 130)
|
||||
|
||||
#define MATH_CONSTRUCTOR(name) CONSTRUCTOR(name, 140)
|
||||
#define MATH_DESTRUCTOR(name) DESTRUCTOR(name, 140)
|
||||
|
||||
#define SOCKET_CONSTRUCTOR(name) CONSTRUCTOR(name, 150)
|
||||
#define SOCKET_DESTRUCTOR(name) DESTRUCTOR(name, 150)
|
||||
|
||||
#define ARG_CONSTRUCTOR(name) CONSTRUCTOR(name, 160)
|
||||
#define ARG_DESTRUCTOR(name) DESTRUCTOR(name, 160)
|
||||
|
||||
#define CLIB_CONSTRUCTOR(name) CONSTRUCTOR(name, 170)
|
||||
#define CLIB_DESTRUCTOR(name) DESTRUCTOR(name, 170)
|
||||
|
||||
#define PROFILE_CONSTRUCTOR(name) CONSTRUCTOR(name, 180)
|
||||
#define PROFILE_DESTRUCTOR(name) DESTRUCTOR(name, 180)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Magic macros for code profiling, SAS/C style. Normally, you would find
|
||||
these in <sprof.h>, which is SAS/C-specific. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __SASC
|
||||
extern void ASM _PROLOG(REG(a0,char *));
|
||||
extern void ASM _EPILOG(REG(a0,char *));
|
||||
|
||||
#if _PROFILE
|
||||
#define PROFILE_OFF() _PROLOG(0L)
|
||||
#define PROFILE_ON() _EPILOG(0L)
|
||||
#else
|
||||
#define PROFILE_OFF() ((void)0)
|
||||
#define PROFILE_ON() ((void)0)
|
||||
#endif /* _PROFILE */
|
||||
#endif /* __SASC */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define PROFILE_OFF() ((void)0)
|
||||
#define PROFILE_ON() ((void)0)
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
/* Special data and function attributes; for OS4 most, if not all of them
|
||||
are in a file called <amiga_compiler.h> which is pulled in by the
|
||||
<exec/types.h> header file. */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef AMIGA_COMPILER_H
|
||||
|
||||
#ifdef __SASC
|
||||
@ -270,7 +136,7 @@ extern void ASM _EPILOG(REG(a0,char *));
|
||||
#define WEAK __attribute__((weak))
|
||||
#else
|
||||
#define WEAK /* WEAK */
|
||||
#endif /* __GNUC__ */
|
||||
#endif
|
||||
#endif /* WEAK */
|
||||
|
||||
/****************************************************************************/
|
||||
@ -278,20 +144,52 @@ extern void ASM _EPILOG(REG(a0,char *));
|
||||
#ifndef UNUSED
|
||||
#ifdef __GNUC__
|
||||
#define UNUSED __attribute__((unused))
|
||||
#define NOCOMMON __attribute__((nocommon))
|
||||
#else
|
||||
#define UNUSED /* UNUSED */
|
||||
#endif /* __GNUC__ */
|
||||
#define NOCOMMON /* NOCOMMON */
|
||||
#endif
|
||||
#endif /* UNUSED */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef NOCOMMON
|
||||
#ifdef __SASC
|
||||
#define CLIB_CONSTRUCTOR(name) int __stdargs _STI_500_##name(void)
|
||||
#define CLIB_DESTRUCTOR(name) void __stdargs _STD_500_##name(void)
|
||||
#define PROFILE_CONSTRUCTOR(name) int __stdargs _STI_150_##name(void)
|
||||
#define PROFILE_DESTRUCTOR(name) void __stdargs _STD_150_##name(void)
|
||||
#define CONSTRUCTOR_SUCCEED() return(0)
|
||||
#define CONSTRUCTOR_FAIL() return(1)
|
||||
#endif /* __SASC */
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define NOCOMMON __attribute__((nocommon))
|
||||
#else
|
||||
#define NOCOMMON /* NOCOMMON */
|
||||
#define CLIB_CONSTRUCTOR(name) static void __attribute__((constructor)) name##_ctor(void)
|
||||
#define CLIB_DESTRUCTOR(name) static void __attribute__((destructor)) name##_dtor(void)
|
||||
#define PROFILE_CONSTRUCTOR(name) static void __attribute__((constructor)) name##_ctor(void)
|
||||
#define PROFILE_DESTRUCTOR(name) static void __attribute__((destructor)) name##_dtor(void)
|
||||
#define CONSTRUCTOR_SUCCEED() return
|
||||
#define CONSTRUCTOR_FAIL() exit(RETURN_FAIL) /* ZZZ not a nice thing to do; fix the constructor invocation code! */
|
||||
#endif /* __GNUC__ */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#ifdef __SASC
|
||||
extern void ASM _PROLOG(REG(a0,char *));
|
||||
extern void ASM _EPILOG(REG(a0,char *));
|
||||
|
||||
#if _PROFILE
|
||||
#define PROFILE_OFF() _PROLOG(0L)
|
||||
#define PROFILE_ON() _EPILOG(0L)
|
||||
#else
|
||||
#define PROFILE_OFF() ((void)0)
|
||||
#define PROFILE_ON() ((void)0)
|
||||
#endif /* _PROFILE */
|
||||
#endif /* __SASC */
|
||||
|
||||
#ifdef __GNUC__
|
||||
#define PROFILE_OFF() ((void)0)
|
||||
#define PROFILE_ON() ((void)0)
|
||||
#endif /* __GNUC__ */
|
||||
#endif /* NOCOMMON */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_acos.c,v 1.5 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_acos.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___acos:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__acos(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __acos(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__acos(double x)
|
||||
{
|
||||
double result;
|
||||
@ -153,7 +153,7 @@ qS2 = 2.02094576023350569471e+00, /* 0x40002AE5, 0x9C598AC8 */
|
||||
qS3 = -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */
|
||||
qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__acos(double x)
|
||||
{
|
||||
double z,p,q,r,w,s,c,df;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_asin.c,v 1.5 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_asin.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___asin:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__asin(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __asin(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__asin(double x)
|
||||
{
|
||||
double result;
|
||||
@ -156,7 +156,7 @@ qS3 = -6.88283971605453293030e-01, /* 0xBFE6066C, 0x1B8D0159 */
|
||||
qS4 = 7.70381505559019352791e-02; /* 0x3FB3B8C5, 0xB12E9282 */
|
||||
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__asin(double x)
|
||||
{
|
||||
double t,w,p,q,c,r,s;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_atan.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_atan.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___atan:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__atan(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __atan(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__atan(double x)
|
||||
{
|
||||
double result;
|
||||
@ -169,7 +169,7 @@ static const double
|
||||
one = 1.0,
|
||||
huge = 1.0e300;
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__atan(double x)
|
||||
{
|
||||
double w,s1,s2,z;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_atan2.c,v 1.6 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_atan2.c,v 1.5 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -62,7 +62,7 @@ extern double __atan(double x);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__atan2(double y,double x)
|
||||
{
|
||||
const double pi = 3.14159265358979323846;
|
||||
@ -122,7 +122,7 @@ __atan2(double y,double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__atan(double x)
|
||||
{
|
||||
double result;
|
||||
@ -134,7 +134,7 @@ __atan(double x)
|
||||
return(result);
|
||||
}
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__atan2(double y,double x)
|
||||
{
|
||||
double pi,pi_over_2;
|
||||
@ -209,7 +209,7 @@ pi_o_2 = 1.5707963267948965580E+00, /* 0x3FF921FB, 0x54442D18 */
|
||||
pi = 3.1415926535897931160E+00, /* 0x400921FB, 0x54442D18 */
|
||||
pi_lo = 1.2246467991473531772E-16; /* 0x3CA1A626, 0x33145C07 */
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__atan2(double y,double x)
|
||||
{
|
||||
double z;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_ceil.c,v 1.4 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_ceil.c,v 1.3 2005-01-26 09:24:38 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___ceil:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__ceil(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __ceil(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__ceil(double x)
|
||||
{
|
||||
int rounding_mode, round_up;
|
||||
@ -152,7 +152,7 @@ __ceil(double x)
|
||||
|
||||
static const double huge = 1.0e300;
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__ceil(double x)
|
||||
{
|
||||
int i0,i1,j0;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_cos.c,v 1.4 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_cos.c,v 1.3 2005-01-26 09:24:38 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___cos:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__cos(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __cos(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__cos(double x)
|
||||
{
|
||||
double result;
|
||||
@ -137,7 +137,7 @@ __cos(double x)
|
||||
|
||||
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__cos(double x)
|
||||
{
|
||||
double y[2],z=0.0;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_cosh.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_cosh.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___cosh:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__cosh(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __cosh(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__cosh(double x)
|
||||
{
|
||||
double result;
|
||||
@ -139,7 +139,7 @@ __cosh(double x)
|
||||
|
||||
static const double one = 1.0, half=0.5, huge = 1.0e300;
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__cosh(double x)
|
||||
{
|
||||
double t,w;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: ftw_headers.h,v 1.1 2005-03-02 12:57:53 obarthel Exp $
|
||||
* $Id: math_data.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -31,17 +31,20 @@
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _FTW_HEADERS_H
|
||||
#define _FTW_HEADERS_H
|
||||
#ifndef _MATH_HEADERS_H
|
||||
#include "math_headers.h"
|
||||
#endif /* _MATH_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <sys/stat.h>
|
||||
#if defined(IEEE_FLOATING_POINT_SUPPORT)
|
||||
|
||||
struct Library * MathIeeeSingBasBase;
|
||||
struct Library * MathIeeeDoubBasBase;
|
||||
struct Library * MathIeeeDoubTransBase;
|
||||
|
||||
#endif /* IEEE_FLOATING_POINT_SUPPORT */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include "macros.h"
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* _FTW_HEADERS_H */
|
||||
double __huge_val;
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_exp.c,v 1.4 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_exp.c,v 1.3 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___exp:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__exp(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __exp(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__exp(double x)
|
||||
{
|
||||
double result;
|
||||
@ -155,7 +155,7 @@ P3 = 6.61375632143793436117e-05, /* 0x3F11566A, 0xAF25DE2C */
|
||||
P4 = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */
|
||||
P5 = 4.13813679705723846039e-08; /* 0x3E663769, 0x72BEA4D0 */
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__exp(double x)
|
||||
{
|
||||
double y,hi,lo,c,t;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_fabs.c,v 1.6 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_fabs.c,v 1.5 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -88,7 +88,7 @@ ___fabs:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__fabs(double x)
|
||||
{
|
||||
double result;
|
||||
@ -110,7 +110,7 @@ __fabs(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__fabs(double x)
|
||||
{
|
||||
double result;
|
||||
@ -134,7 +134,7 @@ __fabs(double x)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__fabs(double x)
|
||||
{
|
||||
double res;
|
||||
@ -153,7 +153,7 @@ __fabs(double x)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__fabs(double x)
|
||||
{
|
||||
double res;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_floor.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_floor.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___floor:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__floor(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __floor(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__floor(double x)
|
||||
{
|
||||
int rounding_mode, round_down;
|
||||
@ -153,7 +153,7 @@ __floor(double x)
|
||||
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
||||
|
||||
static const double huge = 1.0e300;
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__floor(double x)
|
||||
{
|
||||
int i0,i1,j0;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_fmod.c,v 1.5 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_fmod.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -54,7 +54,7 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__fmod(double x,double y)
|
||||
{
|
||||
double q,p,result;
|
||||
@ -79,7 +79,7 @@ __fmod(double x,double y)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__fmod(double x,double y)
|
||||
{
|
||||
double result;
|
||||
@ -102,7 +102,7 @@ static const double
|
||||
one = 1.0,
|
||||
Zero[] = {0.0, -0.0,};
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__fmod(double x,double y)
|
||||
{
|
||||
int n,hx,hy,hz,ix,iy,sx,i;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_frexp.c,v 1.4 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_frexp.c,v 1.3 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -58,7 +58,7 @@
|
||||
|
||||
#if defined(IEEE_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__frexp(double x,int * nptr)
|
||||
{
|
||||
int int_exponent = 0;
|
||||
@ -106,7 +106,7 @@ __frexp(double x,int * nptr)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__frexp(double x,int * nptr)
|
||||
{
|
||||
double float_exponent;
|
||||
@ -146,7 +146,7 @@ __frexp(double x,int * nptr)
|
||||
static const double
|
||||
two54 = 1.80143985094819840000e+16; /* 0x43500000, 0x00000000 */
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__frexp(double x,int * eptr)
|
||||
{
|
||||
int hx, ix, lx;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_hypot.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_hypot.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -52,7 +52,7 @@
|
||||
|
||||
#if defined(IEEE_FLOATING_POINT_SUPPORT) || defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__hypot(double x,double y)
|
||||
{
|
||||
double yx;
|
||||
@ -85,7 +85,7 @@ __hypot(double x,double y)
|
||||
|
||||
static const double one = 1.0;
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__hypot(double x,double y)
|
||||
{
|
||||
int n0;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_init_exit.c,v 1.10 2005-03-09 10:48:59 obarthel Exp $
|
||||
* $Id: math_init_exit.c,v 1.7 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -41,10 +41,6 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <exec/execbase.h>
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#include <proto/exec.h>
|
||||
|
||||
/****************************************************************************/
|
||||
@ -57,20 +53,6 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(IEEE_FLOATING_POINT_SUPPORT)
|
||||
|
||||
struct Library * MathIeeeSingBasBase;
|
||||
struct Library * MathIeeeDoubBasBase;
|
||||
struct Library * MathIeeeDoubTransBase;
|
||||
|
||||
#endif /* IEEE_FLOATING_POINT_SUPPORT */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
double __huge_val;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
CLIB_DESTRUCTOR(__math_exit)
|
||||
{
|
||||
ENTER();
|
||||
@ -131,8 +113,8 @@ __math_init(void)
|
||||
{
|
||||
char message[60];
|
||||
|
||||
strlcpy(message,failed_library,sizeof(message));
|
||||
strlcat(message," could not be opened.",sizeof(message));
|
||||
strcpy(message,failed_library);
|
||||
strcat(message," could not be opened.");
|
||||
|
||||
__show_error(message);
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_kernel_rem_pio2.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_kernel_rem_pio2.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -69,7 +69,7 @@ one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */
|
||||
two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */
|
||||
twon24 = 5.96046447753906250000e-08; /* 0x3E700000, 0x00000000 */
|
||||
|
||||
INLINE STATIC int kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec, const int *ipio2)
|
||||
INLINE static int __kernel_rem_pio2(double *x, double *y, int e0, int nx, int prec, const int *ipio2)
|
||||
{
|
||||
int jz,jx,jv,jp,jk,carry,n,iq[20],i,j,k,m,q0,ih;
|
||||
double z,fw,f[20],fq[20],q[20];
|
||||
@ -341,7 +341,7 @@ int __rem_pio2(double x, double *y)
|
||||
tx[2] = z;
|
||||
nx = 3;
|
||||
while(tx[nx-1]==zero) nx--; /* skip zero term */
|
||||
n = kernel_rem_pio2(tx,y,e0,nx,2,two_over_pi);
|
||||
n = __kernel_rem_pio2(tx,y,e0,nx,2,two_over_pi);
|
||||
if(hx<0) {y[0] = -y[0]; y[1] = -y[1]; return -n;}
|
||||
return n;
|
||||
}
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_kernel_scalbn.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_kernel_scalbn.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -50,7 +50,7 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC double copysign(double x, double y)
|
||||
INLINE static double copysign(double x, double y)
|
||||
{
|
||||
unsigned int hx,hy;
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_ldexp.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_ldexp.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -66,7 +66,7 @@ union dtol
|
||||
long ival[2];
|
||||
};
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__ldexp(double x,int n)
|
||||
{
|
||||
union dtol number;
|
||||
@ -96,7 +96,7 @@ __ldexp(double x,int n)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__ldexp(double x,int n)
|
||||
{
|
||||
double result;
|
||||
@ -129,7 +129,7 @@ union dtol
|
||||
long ival[2];
|
||||
};
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__ldexp(double x,int n)
|
||||
{
|
||||
union dtol number;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_log.c,v 1.6 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_log.c,v 1.5 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___log:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__log(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __log(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__log(double x)
|
||||
{
|
||||
double result;
|
||||
@ -150,7 +150,7 @@ Lg6 = 1.531383769920937332e-01, /* 3FC39A09 D078C69F */
|
||||
Lg7 = 1.479819860511658591e-01, /* 3FC2F112 DF3E5244 */
|
||||
zero = 0.0;
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__log(double x)
|
||||
{
|
||||
double hfsq,f,s,z,R,w,t1,t2,dk;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_log10.c,v 1.5 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_log10.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___log10:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__log10(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __log10(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__log10(double x)
|
||||
{
|
||||
double result;
|
||||
@ -144,7 +144,7 @@ log10_2hi = 3.01029995663611771306e-01, /* 0x3FD34413, 0x509F6000 */
|
||||
log10_2lo = 3.69423907715893078616e-13, /* 0x3D59FEF3, 0x11F12B36 */
|
||||
zero = 0.0;
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__log10(double x)
|
||||
{
|
||||
double y,z;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_logb.c,v 1.5 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_logb.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -54,7 +54,7 @@
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__logb(double x)
|
||||
{
|
||||
double result;
|
||||
@ -70,7 +70,7 @@ __logb(double x)
|
||||
|
||||
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__logb(double x)
|
||||
{
|
||||
unsigned int lx,ix;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_modf.c,v 1.5 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_modf.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -58,7 +58,7 @@
|
||||
|
||||
#if defined(IEEE_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__modf(double x,double *nptr)
|
||||
{
|
||||
double int_n;
|
||||
@ -88,7 +88,7 @@ __modf(double x,double *nptr)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__modf(double x,double *nptr)
|
||||
{
|
||||
double result;
|
||||
@ -111,7 +111,7 @@ __modf(double x,double *nptr)
|
||||
|
||||
#if defined(__PPC__)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__modf(double x,double *nptr)
|
||||
{
|
||||
double int_n;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_pow.c,v 1.6 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_pow.c,v 1.5 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -98,7 +98,7 @@ ___pow:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__pow(double x,double y)
|
||||
{
|
||||
double result;
|
||||
@ -121,7 +121,7 @@ __pow(double x,double y)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__exp(double x)
|
||||
{
|
||||
double result;
|
||||
@ -133,7 +133,7 @@ __exp(double x)
|
||||
return(result);
|
||||
}
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__log(double x)
|
||||
{
|
||||
double result;
|
||||
@ -145,7 +145,7 @@ __log(double x)
|
||||
return(result);
|
||||
}
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__pow(double x,double y)
|
||||
{
|
||||
double result;
|
||||
@ -208,7 +208,7 @@ ivln2 = 1.44269504088896338700e+00, /* 0x3FF71547, 0x652B82FE =1/ln2 */
|
||||
ivln2_h = 1.44269502162933349609e+00, /* 0x3FF71547, 0x60000000 =24b 1/ln2*/
|
||||
ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__pow(double x,double y)
|
||||
{
|
||||
double z,ax,z_h,z_l,p_h,p_l;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_sin.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_sin.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___sin:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__sin(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __sin(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__sin(double x)
|
||||
{
|
||||
double result;
|
||||
@ -137,7 +137,7 @@ __sin(double x)
|
||||
|
||||
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__sin(double x)
|
||||
{
|
||||
double y[2],z=0.0;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_sinh.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_sinh.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___sinh:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__sinh(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __sinh(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__sinh(double x)
|
||||
{
|
||||
double result;
|
||||
@ -139,7 +139,7 @@ __sinh(double x)
|
||||
|
||||
static const double one = 1.0, shuge = 1.0e307;
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__sinh(double x)
|
||||
{
|
||||
double t,w,h;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_sqrt.c,v 1.6 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_sqrt.c,v 1.5 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___sqrt:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__sqrt(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __sqrt(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__sqrt(double x)
|
||||
{
|
||||
double result;
|
||||
@ -139,7 +139,7 @@ __sqrt(double x)
|
||||
|
||||
static const double one = 1.0, tiny=1.0e-300;
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__sqrt(double x)
|
||||
{
|
||||
double z;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_tan.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_tan.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___tan:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__tan(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __tan(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__tan(double x)
|
||||
{
|
||||
double result;
|
||||
@ -137,7 +137,7 @@ __tan(double x)
|
||||
|
||||
#if defined(PPC_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__tan(double x)
|
||||
{
|
||||
double y[2],z=0.0;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: math_tanh.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: math_tanh.c,v 1.2 2005-01-02 09:07:07 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -97,7 +97,7 @@ ___tanh:
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__tanh(double x)
|
||||
{
|
||||
double result;
|
||||
@ -119,7 +119,7 @@ __tanh(double x)
|
||||
|
||||
#if defined(M68881_FLOATING_POINT_SUPPORT)
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__tanh(double x)
|
||||
{
|
||||
double result;
|
||||
@ -139,7 +139,7 @@ __tanh(double x)
|
||||
|
||||
static const double one=1.0, two=2.0, tiny = 1.0e-300;
|
||||
|
||||
INLINE STATIC const double
|
||||
INLINE static const double
|
||||
__tanh(double x)
|
||||
{
|
||||
double t,z;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: mount_fstatfs.c,v 1.9 2005-03-07 11:16:43 obarthel Exp $
|
||||
* $Id: mount_fstatfs.c,v 1.4 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -50,11 +50,11 @@
|
||||
int
|
||||
fstatfs(int file_descriptor, struct statfs *buf)
|
||||
{
|
||||
DECLARE_UTILITYBASE();
|
||||
struct file_hook_message message;
|
||||
D_S(struct InfoData,id);
|
||||
BPTR parent_dir = ZERO;
|
||||
int result = -1;
|
||||
struct fd * fd = NULL;
|
||||
LONG success;
|
||||
struct fd * fd;
|
||||
|
||||
ENTER();
|
||||
|
||||
@ -62,9 +62,7 @@ fstatfs(int file_descriptor, struct statfs *buf)
|
||||
SHOWPOINTER(buf);
|
||||
|
||||
assert( buf != NULL );
|
||||
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
assert( UtilityBase != NULL );
|
||||
|
||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||
{
|
||||
@ -82,6 +80,9 @@ fstatfs(int file_descriptor, struct statfs *buf)
|
||||
assert( __fd[file_descriptor] != NULL );
|
||||
assert( FLAG_IS_SET(__fd[file_descriptor]->fd_Flags,FDF_IN_USE) );
|
||||
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
|
||||
fd = __get_file_descriptor(file_descriptor);
|
||||
if(fd == NULL)
|
||||
{
|
||||
@ -89,54 +90,26 @@ fstatfs(int file_descriptor, struct statfs *buf)
|
||||
goto out;
|
||||
}
|
||||
|
||||
__fd_lock(fd);
|
||||
SHOWMSG("calling the hook");
|
||||
|
||||
if(FLAG_IS_SET(fd->fd_Flags,FDF_IS_SOCKET))
|
||||
message.action = file_hook_action_info;
|
||||
message.info_data = id;
|
||||
|
||||
assert( fd->fd_Hook != NULL );
|
||||
|
||||
CallHookPkt(fd->fd_Hook,fd,&message);
|
||||
|
||||
result = message.result;
|
||||
if(result != 0)
|
||||
{
|
||||
__set_errno(EINVAL);
|
||||
goto out;
|
||||
}
|
||||
|
||||
if(fd->fd_DefaultFile == ZERO)
|
||||
{
|
||||
__set_errno(EBADF);
|
||||
goto out;
|
||||
}
|
||||
|
||||
PROFILE_OFF();
|
||||
parent_dir = __safe_parent_of_file_handle(fd->fd_DefaultFile);
|
||||
PROFILE_ON();
|
||||
|
||||
if(parent_dir == ZERO)
|
||||
{
|
||||
SHOWMSG("couldn't find parent directory");
|
||||
|
||||
__set_errno(__translate_io_error_to_errno(IoErr()));
|
||||
goto out;
|
||||
}
|
||||
|
||||
PROFILE_OFF();
|
||||
success = Info(parent_dir,id);
|
||||
PROFILE_ON();
|
||||
|
||||
if(NO success)
|
||||
{
|
||||
SHOWMSG("couldn't get info on drive");
|
||||
|
||||
__set_errno(__translate_io_error_to_errno(IoErr()));
|
||||
__set_errno(message.error);
|
||||
goto out;
|
||||
}
|
||||
|
||||
__convert_info_to_statfs(id,buf);
|
||||
|
||||
result = 0;
|
||||
|
||||
out:
|
||||
|
||||
__fd_unlock(fd);
|
||||
|
||||
UnLock(parent_dir);
|
||||
|
||||
RETURN(result);
|
||||
return(result);
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
#define VERSION 1
|
||||
#define REVISION 189
|
||||
#define DATE "5.3.2005"
|
||||
#define VERS "net.lib 1.189"
|
||||
#define VSTRING "net.lib 1.189 (5.3.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: net.lib 1.189 (5.3.2005)"
|
||||
#define REVISION 188
|
||||
#define DATE "7.2.2005"
|
||||
#define VERS "net.lib 1.188"
|
||||
#define VSTRING "net.lib 1.188 (7.2.2005)\r\n"
|
||||
#define VERSTAG "\0$VER: net.lib 1.188 (7.2.2005)"
|
||||
|
||||
@ -1 +1 @@
|
||||
189
|
||||
188
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: sas_profile.c,v 1.3 2005-02-25 10:14:21 obarthel Exp $
|
||||
* $Id: sas_profile.c,v 1.1.1.1 2004-07-26 16:31:04 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -77,11 +77,11 @@ static BOOL initialized;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC int send_profiler_message(ULONG clock_value, char *id, ULONG flags);
|
||||
STATIC ULONG get_current_time(void);
|
||||
STATIC void update_overhead(void);
|
||||
STATIC void __profile_init(void);
|
||||
STATIC void __profile_exit(void);
|
||||
static int send_profiler_message(ULONG clock_value, char *id, ULONG flags);
|
||||
static ULONG get_current_time(void);
|
||||
static void update_overhead(void);
|
||||
static void __profile_init(void);
|
||||
static void __profile_exit(void);
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
@ -90,7 +90,7 @@ void ASM _EPILOG(REG(a0, char *id));
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC int
|
||||
static int
|
||||
send_profiler_message(ULONG clock_value,char * id,ULONG flags)
|
||||
{
|
||||
extern long __builtin_getreg(int);
|
||||
@ -133,7 +133,7 @@ send_profiler_message(ULONG clock_value,char * id,ULONG flags)
|
||||
PutMsg(profiler_port,(struct Message *)spm);
|
||||
WaitPort(reply_port);
|
||||
|
||||
result = 0;
|
||||
result = OK;
|
||||
|
||||
out:
|
||||
|
||||
@ -142,7 +142,7 @@ send_profiler_message(ULONG clock_value,char * id,ULONG flags)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC ULONG
|
||||
static ULONG
|
||||
get_current_time(void)
|
||||
{
|
||||
ULONG result;
|
||||
@ -156,7 +156,7 @@ get_current_time(void)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC void
|
||||
static void
|
||||
update_overhead(void)
|
||||
{
|
||||
struct EClockVal ev;
|
||||
@ -192,7 +192,7 @@ _EPILOG(REG(a0,char * id))
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC VOID
|
||||
static void
|
||||
__profile_init(void)
|
||||
{
|
||||
struct SPROFMSG * spm;
|
||||
@ -258,7 +258,7 @@ __profile_init(void)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
STATIC VOID
|
||||
static void
|
||||
__profile_exit(void)
|
||||
{
|
||||
if(initialized)
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
#
|
||||
# $Id: smakefile,v 1.32 2005-03-11 09:37:29 obarthel Exp $
|
||||
_#
|
||||
# $Id: smakefile,v 1.20 2005-02-04 15:03:10 obarthel Exp $
|
||||
#
|
||||
# :ts=8
|
||||
#
|
||||
@ -28,7 +28,7 @@ INCLUDE_DIR = V:include
|
||||
#DEBUG = debug=line noopt define=CHECK_FOR_NULL_POINTERS
|
||||
#DEBUG = debug=line
|
||||
#DEBUG = debug=line define=NDEBUG
|
||||
DEBUG = debug=sf noopt define=DEBUG
|
||||
DEBUG = debug=sf noopt
|
||||
#DEBUG = debug=sf noopt define=CHECK_FOR_NULL_POINTERS
|
||||
#PROFILE = profile
|
||||
DATA = data=faronly
|
||||
@ -36,7 +36,7 @@ INCLUDE_DIR = V:include
|
||||
CPU = cpu=060
|
||||
MATH = define=IEEE_FLOATING_POINT_SUPPORT math=IEEE
|
||||
SUPPORT = define=UNIX_PATH_SEMANTICS define=SOCKET_SUPPORT define=USERGROUP_SUPPORT \
|
||||
define=__C_MACROS__ define=__THREAD_SAFE
|
||||
define=__C_MACROS__
|
||||
|
||||
##############################################################################
|
||||
|
||||
@ -149,6 +149,7 @@ DEBUG_OBJ = \
|
||||
|
||||
DIRENT_OBJ = \
|
||||
dirent_closedir.o \
|
||||
dirent_data.o \
|
||||
dirent_opendir.o \
|
||||
dirent_readdir.o \
|
||||
dirent_rewinddir.o
|
||||
@ -160,7 +161,6 @@ FCNTL_OBJ = \
|
||||
fcntl_close.o \
|
||||
fcntl_creat.o \
|
||||
fcntl_fcntl.o \
|
||||
fcntl_lock.o \
|
||||
fcntl_lseek.o \
|
||||
fcntl_open.o \
|
||||
fcntl_read.o \
|
||||
@ -174,7 +174,6 @@ LIBGEN_OBJ = \
|
||||
LOCALE_OBJ = \
|
||||
locale_init_exit.o \
|
||||
locale_localeconv.o \
|
||||
locale_open_locale.o \
|
||||
locale_setlocale.o
|
||||
|
||||
MATH_OBJ = \
|
||||
@ -185,6 +184,7 @@ MATH_OBJ = \
|
||||
math_ceil.o \
|
||||
math_cos.o \
|
||||
math_cosh.o \
|
||||
math_data.o \
|
||||
math_exp.o \
|
||||
math_fabs.o \
|
||||
math_floor.o \
|
||||
@ -231,6 +231,7 @@ SOCKET_OBJ = \
|
||||
socket_accept.o \
|
||||
socket_bind.o \
|
||||
socket_connect.o \
|
||||
socket_data.o \
|
||||
socket_gethostbyaddr.o \
|
||||
socket_gethostbyname.o \
|
||||
socket_gethostid.o \
|
||||
@ -272,6 +273,7 @@ SOCKET_OBJ = \
|
||||
STAT_OBJ = \
|
||||
stat_chmod.o \
|
||||
stat_convertfileinfo.o \
|
||||
stat_data.o \
|
||||
stat_fchmod.o \
|
||||
stat_fstat.o \
|
||||
stat_lstat.o \
|
||||
@ -283,22 +285,21 @@ STAT_OBJ = \
|
||||
STDIO_OBJ = \
|
||||
stdio_asprintf.o \
|
||||
stdio_clearerr.o \
|
||||
stdio_data.o \
|
||||
stdio_dropiobreadbuffer.o \
|
||||
stdio_duplicate_fd.o \
|
||||
stdio_examine_fh.o \
|
||||
stdio_fclose.o \
|
||||
stdio_fdhookentry.o \
|
||||
stdio_feof.o \
|
||||
stdio_ferror.o \
|
||||
stdio_fflush.o \
|
||||
stdio_flush.o \
|
||||
stdio_fgetc.o \
|
||||
stdio_fgetpos.o \
|
||||
stdio_fgets.o \
|
||||
stdio_filliobreadbuffer.o \
|
||||
stdio_findvacantfdentry.o \
|
||||
stdio_findvacantiobentry.o \
|
||||
stdio_flockfile.o \
|
||||
stdio_flush.o \
|
||||
stdio_flushiobwritebuffer.o \
|
||||
stdio_fopen.o \
|
||||
stdio_fprintf.o \
|
||||
@ -310,39 +311,27 @@ STDIO_OBJ = \
|
||||
stdio_fseek.o \
|
||||
stdio_fsetpos.o \
|
||||
stdio_ftell.o \
|
||||
stdio_ftrylockfile.o \
|
||||
stdio_funlockfile.o \
|
||||
stdio_fwrite.o \
|
||||
stdio_getc.o \
|
||||
stdio_getc_unlocked.o \
|
||||
stdio_getchar.o \
|
||||
stdio_getchar_unlocked.o \
|
||||
stdio_gets.o \
|
||||
stdio_get_file_descriptor.o \
|
||||
stdio_gets.o \
|
||||
stdio_growfdtable.o \
|
||||
stdio_growiobtable.o \
|
||||
stdio_grow_file.o \
|
||||
stdio_initializefd.o \
|
||||
stdio_initializeiob.o \
|
||||
stdio_file_init.o \
|
||||
stdio_init_exit.o \
|
||||
stdio_iobhookentry.o \
|
||||
stdio_lock.o \
|
||||
stdio_locksemaphorename.o \
|
||||
stdio_nostdio.o \
|
||||
stdio_openiob.o \
|
||||
stdio_parent_of_fh.o \
|
||||
stdio_perror.o \
|
||||
stdio_popen.o \
|
||||
stdio_printf.o \
|
||||
stdio_putc.o \
|
||||
stdio_putc_unlocked.o \
|
||||
stdio_putchar.o \
|
||||
stdio_putchar_unlocked.o \
|
||||
stdio_puts.o \
|
||||
stdio_record_locking.o \
|
||||
stdio_remove.o \
|
||||
stdio_remove_fd_alias.o \
|
||||
stdio_rename.o \
|
||||
stdio_rewind.o \
|
||||
stdio_scanf.o \
|
||||
@ -356,7 +345,6 @@ STDIO_OBJ = \
|
||||
stdio_tmpnam.o \
|
||||
stdio_translateioerror.o \
|
||||
stdio_ungetc.o \
|
||||
stdio_unlockfile.o \
|
||||
stdio_vasprintf.o \
|
||||
stdio_vasprintf_hook_entry.o \
|
||||
stdio_vfprintf.o \
|
||||
@ -376,12 +364,13 @@ STDLIB_OBJ = \
|
||||
stdlib_atof.o \
|
||||
stdlib_atoi.o \
|
||||
stdlib_atol.o \
|
||||
stdlib_atoll.o \
|
||||
stdlib_bsearch.o \
|
||||
stdlib_calloc.o \
|
||||
stdlib_checkdetach.o \
|
||||
stdlib_constructor_begin.o \
|
||||
stdlib_constructor.o \
|
||||
stdlib_constructor_end.o \
|
||||
stdlib_data.o \
|
||||
stdlib_default_pool_size.o \
|
||||
stdlib_default_puddle_size.o \
|
||||
stdlib_destructor.o \
|
||||
@ -389,7 +378,6 @@ STDLIB_OBJ = \
|
||||
stdlib_dosbase.o \
|
||||
stdlib_get_errno.o \
|
||||
stdlib_set_errno.o \
|
||||
stdlib_semaphore.o \
|
||||
stdlib_sysbase.o \
|
||||
stdlib_termination_message.o \
|
||||
stdlib_threshold.o \
|
||||
@ -418,7 +406,6 @@ STDLIB_OBJ = \
|
||||
stdlib_putenv.o \
|
||||
stdlib_qsort.o \
|
||||
stdlib_rand.o \
|
||||
stdlib_rand_r.o \
|
||||
stdlib_realloc.o \
|
||||
stdlib_red_black.o \
|
||||
stdlib_setenv.o \
|
||||
@ -433,7 +420,7 @@ STDLIB_OBJ = \
|
||||
stdlib_stacksafezone.o \
|
||||
stdlib_stacksize.o \
|
||||
stdlib_stack_usage.o \
|
||||
stdlib_arg.o \
|
||||
stdlib_startup.o \
|
||||
stdlib_strtod.o \
|
||||
stdlib_strtol.o \
|
||||
stdlib_strtoul.o \
|
||||
@ -479,7 +466,6 @@ STRING_OBJ = \
|
||||
string_strxfrm.o
|
||||
|
||||
STRINGS_OBJ = \
|
||||
strings_ffs.o \
|
||||
strings_strcasecmp.o \
|
||||
strings_strncasecmp.o
|
||||
|
||||
@ -507,8 +493,6 @@ TIME_OBJ = \
|
||||
time_weekday.o
|
||||
|
||||
UNISTD_OBJ = \
|
||||
ftw_ftw.o \
|
||||
ftw_nftw.o \
|
||||
unistd_access.o \
|
||||
unistd_chdir.o \
|
||||
unistd_chdir_exit.o \
|
||||
@ -536,7 +520,6 @@ UNISTD_OBJ = \
|
||||
unistd_sleep.o \
|
||||
unistd_strip_double_slash.o \
|
||||
unistd_symlink.o \
|
||||
unistd_sync_fd.o \
|
||||
unistd_time_delay.o \
|
||||
unistd_timer.o \
|
||||
unistd_translatea2u.o \
|
||||
@ -545,8 +528,7 @@ UNISTD_OBJ = \
|
||||
unistd_truncate.o \
|
||||
unistd_unix_path_semantics.o \
|
||||
unistd_unlink.o \
|
||||
unistd_usleep.o \
|
||||
utsname_uname.o
|
||||
unistd_usleep.o
|
||||
# \
|
||||
# unistd_wildcard_expand.o
|
||||
|
||||
@ -651,6 +633,8 @@ stdlib_swapstack.o : stdlib_swapstack.asm
|
||||
|
||||
stdio_fdhookentry.o : stdio_fdhookentry.c stdlib_mem_debug.h
|
||||
|
||||
stdlib_data.o : stdlib_data.c stdlib_mem_debug.h
|
||||
|
||||
stdio_openiob.o : stdio_openiob.c stdlib_mem_debug.h
|
||||
|
||||
stdlib_alloca.o : stdlib_alloca.c stdlib_mem_debug.h
|
||||
@ -693,7 +677,7 @@ stdlib_atexit.o : stdlib_atexit.c stdlib_mem_debug.h
|
||||
|
||||
stdlib_setenv.o : stdlib_setenv.c stdlib_mem_debug.h
|
||||
|
||||
stdlib_arg.o : stdlib_arg.c stdlib_mem_debug.h
|
||||
stdlib_startup.o : stdlib_startup.c stdlib_mem_debug.h
|
||||
|
||||
stdlib_system.o : stdlib_system.c stdlib_mem_debug.h
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: socket_accept.c,v 1.10 2005-03-09 12:06:10 obarthel Exp $
|
||||
* $Id: socket_accept.c,v 1.3 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -50,8 +50,7 @@
|
||||
int
|
||||
accept(int sockfd,struct sockaddr *cliaddr,int *addrlen)
|
||||
{
|
||||
struct SignalSemaphore * lock = NULL;
|
||||
struct fd * fd = NULL;
|
||||
struct fd * fd;
|
||||
struct fd * new_fd;
|
||||
int new_fd_slot_number;
|
||||
int result = -1;
|
||||
@ -66,8 +65,6 @@ accept(int sockfd,struct sockaddr *cliaddr,int *addrlen)
|
||||
assert( cliaddr != NULL && addrlen != NULL );
|
||||
assert(__SocketBase != NULL);
|
||||
|
||||
__stdio_lock();
|
||||
|
||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||
{
|
||||
if(cliaddr == NULL || addrlen == NULL)
|
||||
@ -85,16 +82,14 @@ accept(int sockfd,struct sockaddr *cliaddr,int *addrlen)
|
||||
assert( FLAG_IS_SET(__fd[sockfd]->fd_Flags,FDF_IN_USE) );
|
||||
assert( FLAG_IS_SET(__fd[sockfd]->fd_Flags,FDF_IS_SOCKET) );
|
||||
|
||||
fd = __get_file_descriptor_socket(sockfd);
|
||||
fd = __get_socket_descriptor(sockfd);
|
||||
if(fd == NULL)
|
||||
goto out;
|
||||
|
||||
__fd_lock(fd);
|
||||
|
||||
new_fd_slot_number = __find_vacant_fd_entry();
|
||||
if(new_fd_slot_number < 0)
|
||||
{
|
||||
if(__grow_fd_table(0) < 0)
|
||||
if(__grow_fd_table() < 0)
|
||||
{
|
||||
SHOWMSG("couldn't find a vacant fd slot and no memory to create one");
|
||||
goto out;
|
||||
@ -104,17 +99,6 @@ accept(int sockfd,struct sockaddr *cliaddr,int *addrlen)
|
||||
assert( new_fd_slot_number >= 0 );
|
||||
}
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
{
|
||||
lock = __create_semaphore();
|
||||
if(lock == NULL)
|
||||
{
|
||||
__set_errno(ENOMEM);
|
||||
goto out;
|
||||
}
|
||||
}
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
PROFILE_OFF();
|
||||
new_socket_fd = __accept((LONG)fd->fd_DefaultFile,cliaddr,(LONG *)addrlen);
|
||||
PROFILE_ON();
|
||||
@ -127,24 +111,12 @@ accept(int sockfd,struct sockaddr *cliaddr,int *addrlen)
|
||||
|
||||
new_fd = __fd[new_fd_slot_number];
|
||||
|
||||
__initialize_fd(new_fd,__socket_hook_entry,(BPTR)new_socket_fd,FDF_IN_USE | FDF_IS_SOCKET | FDF_READ | FDF_WRITE,lock);
|
||||
|
||||
lock = NULL;
|
||||
__initialize_fd(new_fd,(HOOKFUNC)__socket_hook_entry,(BPTR)new_socket_fd,FDF_IN_USE | FDF_IS_SOCKET | FDF_READ | FDF_WRITE);
|
||||
|
||||
result = new_fd_slot_number;
|
||||
|
||||
out:
|
||||
|
||||
__fd_unlock(fd);
|
||||
|
||||
__stdio_unlock();
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
{
|
||||
__delete_semaphore(lock);
|
||||
}
|
||||
#endif /* __THREAD_SAFE */
|
||||
|
||||
if(__check_abort_enabled)
|
||||
__check_abort();
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: socket_bind.c,v 1.4 2005-02-18 18:53:16 obarthel Exp $
|
||||
* $Id: socket_bind.c,v 1.3 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -79,7 +79,7 @@ bind(int sockfd,struct sockaddr *name,int namelen)
|
||||
assert( FLAG_IS_SET(__fd[sockfd]->fd_Flags,FDF_IN_USE) );
|
||||
assert( FLAG_IS_SET(__fd[sockfd]->fd_Flags,FDF_IS_SOCKET) );
|
||||
|
||||
fd = __get_file_descriptor_socket(sockfd);
|
||||
fd = __get_socket_descriptor(sockfd);
|
||||
if(fd == NULL)
|
||||
goto out;
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: socket_connect.c,v 1.4 2005-02-18 18:53:16 obarthel Exp $
|
||||
* $Id: socket_connect.c,v 1.3 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -79,7 +79,7 @@ connect(int sockfd,struct sockaddr *name,int namelen)
|
||||
assert( FLAG_IS_SET(__fd[sockfd]->fd_Flags,FDF_IN_USE) );
|
||||
assert( FLAG_IS_SET(__fd[sockfd]->fd_Flags,FDF_IS_SOCKET) );
|
||||
|
||||
fd = __get_file_descriptor_socket(sockfd);
|
||||
fd = __get_socket_descriptor(sockfd);
|
||||
if(fd == NULL)
|
||||
goto out;
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: fcntl_lock.c,v 1.1 2005-02-28 13:22:53 obarthel Exp $
|
||||
* $Id: socket_data.c,v 1.4 2005-01-02 09:07:08 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -31,32 +31,28 @@
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef _STDIO_HEADERS_H
|
||||
#include "stdio_headers.h"
|
||||
#endif /* _STDIO_HEADERS_H */
|
||||
#if defined(SOCKET_SUPPORT)
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#if defined(__THREAD_SAFE)
|
||||
#ifndef _SOCKET_HEADERS_H
|
||||
#include "socket_headers.h"
|
||||
#endif /* _SOCKET_HEADERS_H */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
__fd_lock(struct fd * fd)
|
||||
{
|
||||
if(fd != NULL && fd->fd_Lock != NULL)
|
||||
ObtainSemaphore(fd->fd_Lock);
|
||||
}
|
||||
struct Library * __SocketBase;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
void
|
||||
__fd_unlock(struct fd * fd)
|
||||
{
|
||||
if(fd != NULL && fd->fd_Lock != NULL)
|
||||
ReleaseSemaphore(fd->fd_Lock);
|
||||
}
|
||||
#if defined(__amigaos4__)
|
||||
struct SocketIFace *__ISocket;
|
||||
#endif /* __amigaos4__ */
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* __THREAD_SAFE */
|
||||
int h_errno;
|
||||
|
||||
/****************************************************************************/
|
||||
|
||||
#endif /* SOCKET_SUPPORT */
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: socket_get_descriptor.c,v 1.4 2005-02-18 18:53:16 obarthel Exp $
|
||||
* $Id: socket_get_descriptor.c,v 1.3 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -42,7 +42,7 @@
|
||||
/****************************************************************************/
|
||||
|
||||
struct fd *
|
||||
__get_file_descriptor_socket(int socket_descriptor)
|
||||
__get_socket_descriptor(int socket_descriptor)
|
||||
{
|
||||
struct fd * result = NULL;
|
||||
struct fd * fd;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: socket_getpeername.c,v 1.4 2005-02-18 18:53:16 obarthel Exp $
|
||||
* $Id: socket_getpeername.c,v 1.3 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -79,7 +79,7 @@ getpeername(int sockfd,struct sockaddr *name,int *namelen)
|
||||
assert( FLAG_IS_SET(__fd[sockfd]->fd_Flags,FDF_IN_USE) );
|
||||
assert( FLAG_IS_SET(__fd[sockfd]->fd_Flags,FDF_IS_SOCKET) );
|
||||
|
||||
fd = __get_file_descriptor_socket(sockfd);
|
||||
fd = __get_socket_descriptor(sockfd);
|
||||
if(fd == NULL)
|
||||
goto out;
|
||||
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* $Id: socket_getsockname.c,v 1.4 2005-02-18 18:53:16 obarthel Exp $
|
||||
* $Id: socket_getsockname.c,v 1.3 2005-02-03 16:56:15 obarthel Exp $
|
||||
*
|
||||
* :ts=4
|
||||
*
|
||||
@ -79,7 +79,7 @@ getsockname(int sockfd,struct sockaddr *name,int *namelen)
|
||||
assert( FLAG_IS_SET(__fd[sockfd]->fd_Flags,FDF_IN_USE) );
|
||||
assert( FLAG_IS_SET(__fd[sockfd]->fd_Flags,FDF_IS_SOCKET) );
|
||||
|
||||
fd = __get_file_descriptor_socket(sockfd);
|
||||
fd = __get_socket_descriptor(sockfd);
|
||||
if(fd == NULL)
|
||||
goto out;
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user