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

4 Commits

Author SHA1 Message Date
Olaf Barthel
6af7dae39b This commit was manufactured by cvs2svn to create tag 'V1_183'.
git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/tags/V1_183@14770 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-11-13 12:55:40 +00:00
Olaf Barthel
e22a226640 c.lib 1.183 (13.11.2004)
- Cleaned up the OS4 build makefile, losing redundant libraries,
  adding more startup object code and ultimatively making the whole
  rebuild logic work again: if code changes and dependencies are
  set up correctly, it will now get rebuilt. Previously, such
  changes went unnoticed and you had to rebuild the entire library
  from scratch.

- Added stubs for CreatePort(), DeletePort(), CreateTask(), DeleteTask()
  and NewList() which have equivalents in exec.library V50 but for which
  it might be useful if ported code didn't have to reference these
  explicitly.

- mktemp() was broken in libunix.a with Unix path semantics enabled.
  This was because the name template was translated and translated
  back again, overwriting the translation buffer. This, funny enough,
  broke Samba's printing feature. Fixed by translating the name only
  before each test for "uniqueness" is made. The new code also handles
  empty "" templates gracefully, which was a problem with both the
  "standard" and the Unix path semantics flavour.

  Why is it that I find bugs like this always after having just
  released another library update?


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14769 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-11-13 12:55:39 +00:00
Olaf Barthel
3c1df9b1db - mktemp() was broken in libunix.a with Unix path semantics enabled.
This was because the name template was translated and translated
  back again, overwriting the translation buffer. This, funny enough,
  broke Samba's printing feature. Fixed by translating the name only
  before each test for "uniqueness" is made. The new code also handles
  empty "" templates gracefully, which was a problem with both the
  "standard" and the Unix path semantics flavour.

  Why is it that I find bugs like this always after having just
  released another library update?


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14768 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-11-10 17:45:40 +00:00
Olaf Barthel
655ea577d2 - Modified the amiga.lib Ext/StdIO functions to work well with
the updated system header files.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14767 87f5fb63-7c3d-0410-a384-fd976d0f7a62
2004-11-10 14:55:30 +00:00
29 changed files with 463 additions and 272 deletions

View File

@@ -1,5 +1,5 @@
# #
# $Id: GNUmakefile.68k,v 1.13 2004-10-26 16:25:03 obarthel Exp $ # $Id: GNUmakefile.68k,v 1.14 2004-11-13 12:55:39 obarthel Exp $
# #
# :ts=8 # :ts=8
# #
@@ -487,7 +487,6 @@ MATH_LIB = \
stdio_vasprintf.o \ stdio_vasprintf.o \
stdio_vfprintf.o \ stdio_vfprintf.o \
stdio_vfscanf.o \ stdio_vfscanf.o \
stdio_vfscanf.o \
stdio_vprintf.o \ stdio_vprintf.o \
stdio_vsnprintf.o \ stdio_vsnprintf.o \
stdio_vsprintf.o \ stdio_vsprintf.o \

View File

@@ -1,5 +1,5 @@
# #
# $Id: GNUmakefile.os4,v 1.12 2004-10-07 11:03:46 tfrieden Exp $ # $Id: GNUmakefile.os4,v 1.13 2004-11-13 12:55:39 obarthel Exp $
# #
# :ts=8 # :ts=8
# #
@@ -35,7 +35,6 @@ ifeq (,$(TYPE))
LIBC_OBJS = libc_objs LIBC_OBJS = libc_objs
LIBUNIX_OBJS = libunix_objs LIBUNIX_OBJS = libunix_objs
LIBM_OBJS = libm_objs LIBM_OBJS = libm_objs
LIBSTACK_OBJS = libstack_objs
LIBNET_OBJS = libnet_objs LIBNET_OBJS = libnet_objs
LIBDEBUG_OBJS = libdebug_objs LIBDEBUG_OBJS = libdebug_objs
LIBAMIGA_OBJS = libamiga_objs LIBAMIGA_OBJS = libamiga_objs
@@ -43,7 +42,6 @@ else
LIBC_OBJS = $(TYPE)/libc_objs LIBC_OBJS = $(TYPE)/libc_objs
LIBUNIX_OBJS = $(TYPE)/libunix_objs LIBUNIX_OBJS = $(TYPE)/libunix_objs
LIBM_OBJS = $(TYPE)/libm_objs LIBM_OBJS = $(TYPE)/libm_objs
LIBSTACK_OBJS = $(TYPE)/libstack_objs
LIBNET_OBJS = $(TYPE)/libnet_objs LIBNET_OBJS = $(TYPE)/libnet_objs
LIBDEBUG_OBJS = $(TYPE)/libdebug_objs LIBDEBUG_OBJS = $(TYPE)/libdebug_objs
LIBAMIGA_OBJS = $(TYPE)/libamiga_objs LIBAMIGA_OBJS = $(TYPE)/libamiga_objs
@@ -51,6 +49,7 @@ endif
############################################################################## ##############################################################################
# General build rules for all object files and the individual libraries
%.o : %.c %.o : %.c
@echo "Compiling $<" @echo "Compiling $<"
@$(CC) -c $(CFLAGS) $< @$(CC) -c $(CFLAGS) $<
@@ -67,10 +66,6 @@ $(LIBM_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):m]" @echo "Compiling $< [$(TYPE):m]"
@$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) $(FLOAT_TYPE) $< @$(CC) -o $(LIBM_OBJS)/$*.o -c $(CFLAGS) $(FLOAT_TYPE) $<
$(LIBSTACK_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):stack]"
@$(CC) -o $(LIBSTACK_OBJS)/$*.o -c $(CFLAGS) $<
$(LIBNET_OBJS)/%.o : %.c $(LIBNET_OBJS)/%.o : %.c
@echo "Compiling $< [$(TYPE):net]" @echo "Compiling $< [$(TYPE):net]"
@$(CC) -o $(LIBNET_OBJS)/$*.o -c $(CFLAGS) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT $< @$(CC) -o $(LIBNET_OBJS)/$*.o -c $(CFLAGS) -I$(NET_INCLUDE) -DSOCKET_SUPPORT -DUSERGROUP_SUPPORT $<
@@ -85,6 +80,7 @@ $(LIBAMIGA_OBJS)/%.o : %.c
############################################################################## ##############################################################################
# Build options for the individual libraries
ifeq (small_data,$(TYPE)) ifeq (small_data,$(TYPE))
CODE_TYPE := -msdata=sysv -DSMALL_DATA CODE_TYPE := -msdata=sysv -DSMALL_DATA
FLOAT_TYPE := -DPPC_FLOATING_POINT_SUPPORT FLOAT_TYPE := -DPPC_FLOATING_POINT_SUPPORT
@@ -95,7 +91,7 @@ CODE_TYPE := -msdata=data
FLOAT_TYPE := -DPPC_FLOATING_POINT_SUPPORT FLOAT_TYPE := -DPPC_FLOATING_POINT_SUPPORT
endif endif
ifeq (large_data_softfloat, $(TYPE)) ifeq (large_data_softfloat,$(TYPE))
CODE_TYPE := -msdata=data -msoft-float CODE_TYPE := -msdata=data -msoft-float
FLOAT_TYPE := FLOAT_TYPE :=
endif endif
@@ -115,6 +111,7 @@ CFLAGS = $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(CODE_TYPE) $(INCLUDES)
############################################################################## ##############################################################################
# All objects files which make up libc.a
C_LIB = \ C_LIB = \
c.lib_rev.o \ c.lib_rev.o \
ctype_isalnum.o \ ctype_isalnum.o \
@@ -134,9 +131,9 @@ C_LIB = \
ctype_table.o \ ctype_table.o \
dirent_closedir.o \ dirent_closedir.o \
dirent_data.o \ dirent_data.o \
dirent_rewinddir.o \
dirent_opendir.o \ dirent_opendir.o \
dirent_readdir.o \ dirent_readdir.o \
dirent_rewinddir.o \
errno_data.o \ errno_data.o \
fcntl_close.o \ fcntl_close.o \
fcntl_creat.o \ fcntl_creat.o \
@@ -255,39 +252,36 @@ C_LIB = \
stdlib_atol.o \ stdlib_atol.o \
stdlib_bsearch.o \ stdlib_bsearch.o \
stdlib_calloc.o \ stdlib_calloc.o \
stdlib_checkdetach.o \
stdlib_constructor.o \
stdlib_constructor_begin.o \
stdlib_constructor_end.o \
stdlib_data.o \ stdlib_data.o \
stdlib_default_pool_size.o \ stdlib_default_pool_size.o \
stdlib_default_puddle_size.o \ stdlib_default_puddle_size.o \
stdlib_destructor.o \ stdlib_destructor.o \
stdlib_detach.o \
stdlib_disablerequesters.o \ stdlib_disablerequesters.o \
stdlib_div.o \ stdlib_div.o \
stdlib_modsi3.o \
stdlib_divsi3.o \ stdlib_divsi3.o \
stdlib_divsi4.o \ stdlib_divsi4.o \
stdlib_umodsi3.o \ stdlib_dosbase.o \
stdlib_udivsi3.o \
stdlib_udivsi4.o \
stdlib_exit.o \ stdlib_exit.o \
stdlib_free.o \ stdlib_free.o \
stdlib_getdefstacksize.o \
stdlib_getenv.o \ stdlib_getenv.o \
stdlib_getsp.o \ stdlib_getsp.o \
stdlib_init_exit.o \ stdlib_init_exit.o \
stdlib_isresident.o \
stdlib_labs.o \ stdlib_labs.o \
stdlib_ldiv.o \ stdlib_ldiv.o \
stdlib_getdefstacksize.o \
stdlib_stackargbytes.o \
stdlib_stack_usage.o \
stdlib_checkdetach.o \
stdlib_detach.o \
stdlib_isresident.o \
stdlib_sysbase.o \
stdlib_dosbase.o \
stdlib_machine_test.o \ stdlib_machine_test.o \
stdlib_malloc.o \ stdlib_malloc.o \
stdlib_math.o \ stdlib_math.o \
stdlib_mkdtemp.o \ stdlib_mkdtemp.o \
stdlib_mkstemp.o \ stdlib_mkstemp.o \
stdlib_mktemp.o \ stdlib_mktemp.o \
stdlib_modsi3.o \
stdlib_mulsi3.o \ stdlib_mulsi3.o \
stdlib_never_free.o \ stdlib_never_free.o \
stdlib_putenv.o \ stdlib_putenv.o \
@@ -301,19 +295,25 @@ C_LIB = \
stdlib_showerror.o \ stdlib_showerror.o \
stdlib_socket.o \ stdlib_socket.o \
stdlib_srand.o \ stdlib_srand.o \
stdlib_stackargbytes.o \
stdlib_stackcheck.o \ stdlib_stackcheck.o \
stdlib_stackoverflow.o \ stdlib_stackoverflow.o \
stdlib_stacksafezone.o \ stdlib_stacksafezone.o \
stdlib_stacksize.o \ stdlib_stacksize.o \
stdlib_stack_usage.o \
stdlib_startup.o \ stdlib_startup.o \
stdlib_strtol.o \ stdlib_strtol.o \
stdlib_strtoul.o \ stdlib_strtoul.o \
stdlib_strtoll.o \ stdlib_strtoll.o \
stdlib_strtoull.o \ stdlib_strtoull.o \
stdlib_swapstack.o \ stdlib_swapstack.o \
stdlib_sysbase.o \
stdlib_system.o \ stdlib_system.o \
stdlib_termination_message.o \ stdlib_termination_message.o \
stdlib_threshold.o \ stdlib_threshold.o \
stdlib_udivsi3.o \
stdlib_udivsi4.o \
stdlib_umodsi3.o \
stdlib_unsetenv.o \ stdlib_unsetenv.o \
stdlib_wildcard_expand.o \ stdlib_wildcard_expand.o \
strings_strcasecmp.o \ strings_strcasecmp.o \
@@ -380,21 +380,21 @@ C_LIB = \
unistd_realpath.o \ unistd_realpath.o \
unistd_sleep.o \ unistd_sleep.o \
unistd_symlink.o \ unistd_symlink.o \
unistd_time_delay.o \
unistd_timer.o \ unistd_timer.o \
unistd_time_delay.o \
unistd_truncate.o \ unistd_truncate.o \
unistd_unlink.o \ unistd_unlink.o \
unistd_usleep.o \ unistd_usleep.o \
utime_utime.o utime_utime.o
# All objects files which make up libunix.a
UNIX_LIB = \ UNIX_LIB = \
unix.lib_rev.o \ unix.lib_rev.o \
dirent_closedir.o \ dirent_closedir.o \
dirent_data.o \ dirent_data.o \
dirent_rewinddir.o \
dirent_opendir.o \ dirent_opendir.o \
dirent_readdir.o \ dirent_readdir.o \
dirent_rewinddir.o \
fcntl_creat.o \ fcntl_creat.o \
fcntl_fcntl.o \ fcntl_fcntl.o \
fcntl_open.o \ fcntl_open.o \
@@ -408,12 +408,12 @@ UNIX_LIB = \
stat_rmdir.o \ stat_rmdir.o \
stat_stat.o \ stat_stat.o \
stdio_fdhookentry.o \ stdio_fdhookentry.o \
stdio_init_exit.o \
stdio_locksemaphorename.o \
stdio_openiob.o \
stdio_fflush.o \ stdio_fflush.o \
stdio_fopen.o \ stdio_fopen.o \
stdio_fopen.o \ stdio_fopen.o \
stdio_init_exit.o \
stdio_locksemaphorename.o \
stdio_openiob.o \
stdio_popen.o \ stdio_popen.o \
stdio_remove.o \ stdio_remove.o \
stdio_rename.o \ stdio_rename.o \
@@ -443,6 +443,7 @@ UNIX_LIB = \
unistd_wildcard_expand.o \ unistd_wildcard_expand.o \
utime_utime.o utime_utime.o
# All objects files which make up libm.a
MATH_LIB = \ MATH_LIB = \
math_acos.o \ math_acos.o \
math_asin.o \ math_asin.o \
@@ -492,7 +493,6 @@ MATH_LIB = \
stdio_vasprintf.o \ stdio_vasprintf.o \
stdio_vfprintf.o \ stdio_vfprintf.o \
stdio_vfscanf.o \ stdio_vfscanf.o \
stdio_vfscanf.o \
stdio_vprintf.o \ stdio_vprintf.o \
stdio_vsnprintf.o \ stdio_vsnprintf.o \
stdio_vsprintf.o \ stdio_vsprintf.o \
@@ -501,48 +501,7 @@ MATH_LIB = \
stdlib_strtod.o \ stdlib_strtod.o \
time_difftime.o time_difftime.o
MATH_LIB_IEEE = \ # All objects files which make up libnet.a
m.lib_rev.o \
$(MATH_LIB) \
math_adddf3.o \
math_addsf3.o \
math_divdf3.o \
math_divsf3.o \
math_eqdf2.o \
math_eqsf2.o \
math_extendsfdf2.o \
math_fixdfsi.o \
math_fixsfsi.o \
math_fixunsdfsi.o \
math_fixunssfsi.o \
math_floatsidf.o \
math_floatsisf.o \
math_gedf2.o \
math_gesf2.o \
math_gtdf2.o \
math_gtsf2.o \
math_ledf2.o \
math_lesf2.o \
math_ltdf2.o \
math_ltsf2.o \
math_muldf3.o \
math_mulsf3.o \
math_nedf2.o \
math_negdf2.o \
math_negsf2.o \
math_nesf2.o \
math_subdf3.o \
math_subsf3.o \
math_truncdfsf2.o
STACK_LIB = \
stack.lib_rev.o \
stdlib_setjmp.o \
stdlib_stackextension.o \
stdlib_stackminframe.o \
stdlib_stackoverflow.o \
stdlib_stacksafezone.o
NET_LIB = \ NET_LIB = \
net.lib_rev.o \ net.lib_rev.o \
socket_accept.o \ socket_accept.o \
@@ -586,6 +545,7 @@ NET_LIB = \
socket_socket.o \ socket_socket.o \
socket_hook_entry.o \ socket_hook_entry.o \
socket_hstrerror.o \ socket_hstrerror.o \
stat_umask.o \
usergroup_crypt.o \ usergroup_crypt.o \
usergroup_data.o \ usergroup_data.o \
usergroup_endgrent.o \ usergroup_endgrent.o \
@@ -614,13 +574,12 @@ NET_LIB = \
usergroup_setregid.o \ usergroup_setregid.o \
usergroup_setreuid.o \ usergroup_setreuid.o \
usergroup_setsid.o \ usergroup_setsid.o \
usergroup_setuid.o \ usergroup_setuid.o
stat_umask.o
# All objects files which make up libdebug.a
DEBUG_LIB = \ DEBUG_LIB = \
debug.lib_rev.o \ debug.lib_rev.o \
debug.o \ debug.o \
debug_level.o \
debug_cmpstrexec.o \ debug_cmpstrexec.o \
debug_kcmpstr.o \ debug_kcmpstr.o \
debug_kdofmt.o \ debug_kdofmt.o \
@@ -646,8 +605,10 @@ DEBUG_LIB = \
debug_kputstr1.o \ debug_kputstr1.o \
debug_kputstr2.o \ debug_kputstr2.o \
debug_kvprintf1.o \ debug_kvprintf1.o \
debug_kvprintf2.o debug_kvprintf2.o \
debug_level.o
# All objects files which make up libamiga.a
AMIGA_LIB = \ AMIGA_LIB = \
amiga.lib_rev.o \ amiga.lib_rev.o \
amiga_acrypt.o \ amiga_acrypt.o \
@@ -656,10 +617,17 @@ AMIGA_LIB = \
amiga_argarrayinit.o \ amiga_argarrayinit.o \
amiga_argint.o \ amiga_argint.o \
amiga_argstring.o \ amiga_argstring.o \
amiga_beginio.o \
amiga_callhooka.o \ amiga_callhooka.o \
amiga_coercemethod.o \ amiga_coercemethod.o \
amiga_createextio.o \
amiga_createport.o \
amiga_createstdio.o \ amiga_createstdio.o \
amiga_createtask.o \
amiga_deleteextio.o \
amiga_deleteport.o \
amiga_deletestdio.o \ amiga_deletestdio.o \
amiga_deletetask.o \
amiga_domethod.o \ amiga_domethod.o \
amiga_dosupermethod.o \ amiga_dosupermethod.o \
amiga_dotimer.o \ amiga_dotimer.o \
@@ -667,6 +635,7 @@ AMIGA_LIB = \
amiga_freeievents.o \ amiga_freeievents.o \
amiga_hotkey.o \ amiga_hotkey.o \
amiga_invertstring.o \ amiga_invertstring.o \
amiga_newlist.o \
amiga_rangerand.o \ amiga_rangerand.o \
amiga_remtof.o \ amiga_remtof.o \
amiga_setsuperattrs.o \ amiga_setsuperattrs.o \
@@ -675,46 +644,52 @@ AMIGA_LIB = \
############################################################################## ##############################################################################
LIBS := $(LIBC_OBJS)/libc.a $(LIBSTACK_OBJS)/libstack.a $(LIBUNIX_OBJS)/libunix.a \ # The libraries to be built, prefixed by the respective path names
$(LIBDEBUG_OBJS)/libdebug.a $(LIBAMIGA_OBJS)/libamiga.a \ LIBS := \
$(LIBM_OBJS)/libm.a $(LIBNET_OBJS)/libnet.a $(LIBC_OBJS)/libc.a \
$(LIBUNIX_OBJS)/libunix.a \
$(LIBDEBUG_OBJS)/libdebug.a \
$(LIBAMIGA_OBJS)/libamiga.a \
$(LIBM_OBJS)/libm.a \
$(LIBNET_OBJS)/libnet.a
############################################################################## ##############################################################################
# The startup object files to be built
STARTUPS := bcrt0.o bcrtbegin.o bcrtend.o crt0.o crtbegin.o crtend.o mainb.o mainnb.o
############################################################################## ##############################################################################
STARTUPS := crt0.o crtbegin.o crtend.o mainnb.o # This is the first target: it creates the necessary directories, then proceeds
# to build the startup object files and finally the libraries
##############################################################################
all: \ all: \
lib/crt0.o \ lib \
lib/crtbegin.o \ lib/soft-float \
lib/crtend.o \ lib/small-data \
lib/mainnb.o \ small_data \
lib/libm.a \ large_data \
lib/small-data/libm.a \ large_data_softfloat \
lib/bcrt0.o \ lib/bcrt0.o \
lib/bcrtbegin.o \ lib/bcrtbegin.o \
lib/bcrtend.o \ lib/bcrtend.o \
lib/soft-float/libc.a lib/crt0.o \
lib/crtbegin.o \
copy: lib/crtend.o \
$(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib lib/mainb.o \
lib/mainnb.o \
lib/libm.a \
lib/small-data/libm.a \
lib/soft-float/libm.a
############################################################################## ##############################################################################
# Delete all object files and libraries
clean: clean:
-$(DELETE) $(TYPE) $(STARTUPS) \ -$(DELETE) $(STARTUPS) lib small_data large_data large_data_softfloat
$(LIBC_OBJS) $(LIBUNIX_OBJS) $(LIBM_OBJS) $(LIBSTACK_OBJS) $(LIBNET_OBJS) $(LIBDEBUG_OBJS) $(LIBAMIGA_OBJS)
realclean:
$(MAKE) clean
-$(DELETE) lib small_data large_data large_data_softfloat
############################################################################## ##############################################################################
# Update the version numbers bound to the individual libraries
version: version:
cp c.lib_rev.rev amiga.lib_rev.rev cp c.lib_rev.rev amiga.lib_rev.rev
cp c.lib_rev.rev debug.lib_rev.rev cp c.lib_rev.rev debug.lib_rev.rev
@@ -734,43 +709,74 @@ version:
############################################################################## ##############################################################################
# Tag all files with a certain version number
cvs-tag: cvs-tag:
cvs -q tag V1_`cat c.lib_rev.rev` cvs -q tag V1_`cat c.lib_rev.rev`
############################################################################## ##############################################################################
kitchen_sink: $(TYPE) $(LIBS) $(STARTUPS) # This target first creates a directory to store the object files in, then
# proceeds to build the libraries from the code. It is invoked by the
############################################################################## # individual library build targets below.
all_libraries: $(TYPE) $(LIBS)
ifneq (,$(TYPE))
$(TYPE):
$(MAKEDIR) $@
endif
############################################################################## ##############################################################################
# These create the required subdirectories to store object files and
# libraries in
lib: lib:
-$(MAKEDIR) $@ -$(MAKEDIR) $@
lib/small-data: lib/small-data: lib
-$(MAKEDIR) $@ -$(MAKEDIR) $@
lib/soft-float: lib/soft-float: lib
-$(MAKEDIR) $@ -$(MAKEDIR) $@
lib/libm.a: lib small_data:
$(MAKE) TYPE=large_data kitchen_sink -$(MAKEDIR) $@
large_data:
-$(MAKEDIR) $@
large_data_softfloat:
-$(MAKEDIR) $@
##############################################################################
# Dependencies for libm.a (large data variant with hardware floating point code
# support): this actually ends up building all the libraries rather than just
# libm.a
lib/libm.a: large_data large_data/libm.a
large_data/libm.a:
$(MAKE) TYPE=large_data all_libraries
$(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib $(COPY) $(foreach file,$(LIBS),large_data/$(file)) lib
lib/small-data/libm.a: lib lib/small-data ##############################################################################
$(MAKE) TYPE=small_data kitchen_sink
$(COPY) $(foreach file,$(LIBS),small_data/$(file)) lib/small-data
lib/soft-float/libc.a: lib lib/soft-float # Dependencies for libm.a (large data variant with software floating point code
$(MAKE) TYPE=large_data_softfloat kitchen_sink # support): this actually ends up building all the libraries rather than just
# libm.a
lib/soft-float/libm.a: large_data_softfloat large_data_softfloat/libm.a
large_data_softfloat/libm.a:
$(MAKE) TYPE=large_data_softfloat all_libraries
$(COPY) $(foreach file,$(LIBS),large_data_softfloat/$(file)) lib/soft-float $(COPY) $(foreach file,$(LIBS),large_data_softfloat/$(file)) lib/soft-float
##############################################################################
# Dependencies for libm.a (small data variant): this actually ends up building all
# the libraries rather than just libm.a
lib/small-data/libm.a: small_data small_data/libm.a
small_data/libm.a:
$(MAKE) TYPE=small_data all_libraries
$(COPY) $(foreach file,$(LIBS),small_data/$(file)) lib/small-data
##############################################################################
# Rules to build and move the startup code
lib/crt0.o : lib crt0.o lib/crt0.o : lib crt0.o
$(COPY) crt0.o lib $(COPY) crt0.o lib
@@ -794,25 +800,38 @@ lib/bcrtbegin.o : lib bcrtbegin.o
lib/bcrtend.o : lib bcrtend.o lib/bcrtend.o : lib bcrtend.o
$(COPY) bcrtend.o lib $(COPY) bcrtend.o lib
############################################################################## ##############################################################################
$(LIBAMIGA_OBJS)/amiga_hookentry.o : amiga_hookentry.c # Individual dependencies which tell make to build the object files from
# 'C' source files rather than the assembly language source files of the
# same name (e.g. stdlib_getsp.c instead of stdlib_getsp.asm).
$(LIBC_OBJS)/stdlib_getsp.o : stdlib_getsp.c $(LIBC_OBJS)/stdlib_getsp.o : stdlib_getsp.c
$(LIBC_OBJS)/stdlib_swapstack.o : stdlib_swapstack.c $(LIBC_OBJS)/stdlib_swapstack.o : stdlib_swapstack.c
$(LIBC_OBJS)/stdlib_setjmp.o : stdlib_setjmp.c $(LIBC_OBJS)/stdlib_setjmp.o : stdlib_setjmp.c
$(LIBSTACK_OBJS)/stdlib_setjmp.o : stdlib_setjmp.c ##############################################################################
# Build rules for version information that goes into each library
$(LIBC_OBJS)/c.lib_rev.o : c.lib_rev.c c.lib_rev.h
$(LIBUNIX_OBJS)/unix.lib_rev.o : unix.lib_rev.c unix.lib_rev.h
$(LIBM_OBJS)/m.lib_rev.o : m.lib_rev.c m.lib_rev.h
$(LIBNET_OBJS)/net.lib_rev.o : net.lib_rev.c net.lib_rev.h
$(LIBDEBUG_OBJS)/debug.lib_rev.o : debug.lib_rev.c debug.lib_rev.h
$(LIBAMIGA_OBJS)/amiga.lib_rev.o : amiga.lib_rev.c amiga.lib_rev.h
############################################################################## ##############################################################################
$(LIBC_OBJS)/stdlib_stacksize.o : stdlib_stacksize.c stdlib_gcc_help.h # Build rules for the debug version of the library which has special
# memory allocation debugging code, controlled by the contents of
$(LIBC_OBJS)/stdlib_shell_escape.o : stdlib_shell_escape.c stdlib_gcc_help.h # the stdlib_mem_debug.h file.
$(LIBC_OBJS)/stdlib_alloca.o : stdlib_alloca.c stdlib_mem_debug.h $(LIBC_OBJS)/stdlib_alloca.o : stdlib_alloca.c stdlib_mem_debug.h
$(LIBC_OBJS)/stdlib_calloc.o : stdlib_calloc.c stdlib_mem_debug.h $(LIBC_OBJS)/stdlib_calloc.o : stdlib_calloc.c stdlib_mem_debug.h
@@ -829,6 +848,7 @@ $(LIBC_OBJS)/stdlib_red_black.o : stdlib_red_black.c stdlib_mem_debug.h
############################################################################## ##############################################################################
# Individual build rules for libc.a
$(LIBC_OBJS) : $(LIBC_OBJS) :
$(MAKEDIR) $@ $(MAKEDIR) $@
@@ -839,6 +859,7 @@ $(LIBC_OBJS)/libc.a : $(LIBC_OBJS) $(foreach file,$(C_LIB),$(LIBC_OBJS)/$(file))
############################################################################## ##############################################################################
# Individual build rules for libunix.a
$(LIBUNIX_OBJS) : $(LIBUNIX_OBJS) :
$(MAKEDIR) $@ $(MAKEDIR) $@
@@ -849,26 +870,18 @@ $(LIBUNIX_OBJS)/libunix.a : $(LIBUNIX_OBJS) $(foreach file,$(UNIX_LIB),$(LIBUNIX
############################################################################## ##############################################################################
# Individual build rules for libm.a
$(LIBM_OBJS) : $(LIBM_OBJS) :
$(MAKEDIR) $@ $(MAKEDIR) $@
$(LIBM_OBJS)/libm.a : $(LIBM_OBJS) $(foreach file,$(MATH_LIB_IEEE),$(LIBM_OBJS)/$(file)) $(LIBM_OBJS)/libm.a : $(LIBM_OBJS) $(foreach file,$(MATH_LIB),$(LIBM_OBJS)/$(file))
-$(DELETE) $@ -$(DELETE) $@
@$(AR) $@ $(foreach file,$(MATH_LIB_IEEE),$(LIBM_OBJS)/$(file)) @$(AR) $@ $(foreach file,$(MATH_LIB),$(LIBM_OBJS)/$(file))
$(RANLIB) $@
##############################################################################
$(LIBSTACK_OBJS) :
$(MAKEDIR) $@
$(LIBSTACK_OBJS)/libstack.a : $(LIBSTACK_OBJS) $(foreach file,$(STACK_LIB),$(LIBSTACK_OBJS)/$(file))
-$(DELETE) $@
@$(AR) $@ $(foreach file,$(STACK_LIB),$(LIBSTACK_OBJS)/$(file))
$(RANLIB) $@ $(RANLIB) $@
############################################################################## ##############################################################################
# Individual build rules for libnet.a
$(LIBNET_OBJS) : $(LIBNET_OBJS) :
$(MAKEDIR) $@ $(MAKEDIR) $@
@@ -879,6 +892,7 @@ $(LIBNET_OBJS)/libnet.a : $(LIBNET_OBJS) $(foreach file,$(NET_LIB),$(LIBNET_OBJS
############################################################################## ##############################################################################
# Individual build rules for libdebug.a
$(LIBDEBUG_OBJS) : $(LIBDEBUG_OBJS) :
$(MAKEDIR) $@ $(MAKEDIR) $@
@@ -889,6 +903,7 @@ $(LIBDEBUG_OBJS)/libdebug.a : $(LIBDEBUG_OBJS) $(foreach file,$(DEBUG_LIB),$(LIB
############################################################################## ##############################################################################
# Individual build rules for libamiga.a
$(LIBAMIGA_OBJS) : $(LIBAMIGA_OBJS) :
$(MAKEDIR) $@ $(MAKEDIR) $@
@@ -899,6 +914,7 @@ $(LIBAMIGA_OBJS)/libamiga.a : $(LIBAMIGA_OBJS) $(foreach file,$(AMIGA_LIB),$(LIB
############################################################################## ##############################################################################
# Individual build rules for the startup code.
crt0.o : crt0.S crt0.o : crt0.S
@echo "Assembling $<" @echo "Assembling $<"
@$(CC) -Wa,-mregnames -o crt0.o -c crt0.S @$(CC) -Wa,-mregnames -o crt0.o -c crt0.S
@@ -920,13 +936,3 @@ bcrtbegin.o : crtbegin.c
bcrtend.o : crtend.c bcrtend.o : crtend.c
$(CC) -o bcrtend.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA crtend.c $(CC) -o bcrtend.o -c $(WARNINGS) $(OPTIMIZE) $(DEBUG) $(OPTIONS) $(INCLUDES) -msdata=sysv -DSMALL_DATA crtend.c
##############################################################################
mkid:
# mkid -v #?.(c|h|asm|i) include/#?.(c|h|asm|i) include/sys/#?.(c|h|asm|i)
mkid *.[ch] include/*.h include/sys/*.h
update:
mkid -v -u

View File

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

View File

@@ -1 +1 @@
182 183

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: amiga_beginio.c,v 1.1.1.1 2004-07-26 16:30:17 obarthel Exp $ * $Id: amiga_beginio.c,v 1.2 2004-11-13 12:55:39 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -37,6 +37,14 @@
/****************************************************************************/ /****************************************************************************/
#include "debug.h"
/****************************************************************************/
#ifndef __PPC__
/****************************************************************************/
#if defined(__SASC) #if defined(__SASC)
VOID __begin_io(struct IORequest * ior); VOID __begin_io(struct IORequest * ior);
@@ -64,10 +72,6 @@ VOID __begin_io(struct IORequest * ior);
/****************************************************************************/ /****************************************************************************/
#include "debug.h"
/****************************************************************************/
VOID VOID
BeginIO(struct IORequest *ior) BeginIO(struct IORequest *ior)
{ {
@@ -82,3 +86,35 @@ BeginIO(struct IORequest *ior)
LEAVE(); LEAVE();
} }
/****************************************************************************/
#else
/****************************************************************************/
#include <proto/exec.h>
/****************************************************************************/
#if defined(BeginIO)
#undef BeginIO
#endif /* BeginIO */
/****************************************************************************/
VOID
BeginIO(struct IORequest *ior)
{
ENTER();
assert( ior != NULL && ior->io_Device != NULL );
IExec->BeginIO(ior);
LEAVE();
}
/****************************************************************************/
#endif /* __PPC__ */

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: amiga_createextio.c,v 1.1.1.1 2004-07-26 16:30:18 obarthel Exp $ * $Id: amiga_createextio.c,v 1.2 2004-11-10 14:55:30 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -44,6 +44,12 @@
/****************************************************************************/ /****************************************************************************/
#if defined(CreateExtIO)
#undef CreateExtIO
#endif /* CreateExtIO */
/****************************************************************************/
struct IORequest * struct IORequest *
CreateExtIO(CONST struct MsgPort * port, LONG io_size) CreateExtIO(CONST struct MsgPort * port, LONG io_size)
{ {

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: amiga_createport.c,v 1.1.1.1 2004-07-26 16:30:18 obarthel Exp $ * $Id: amiga_createport.c,v 1.2 2004-11-13 12:55:39 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -44,6 +44,12 @@
/****************************************************************************/ /****************************************************************************/
#if defined(CreatePort)
#undef CreatePort
#endif /* CreatePort */
/****************************************************************************/
struct MsgPort * struct MsgPort *
CreatePort(CONST_STRPTR name, LONG pri) CreatePort(CONST_STRPTR name, LONG pri)
{ {

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: amiga_createstdio.c,v 1.1.1.1 2004-07-26 16:30:18 obarthel Exp $ * $Id: amiga_createstdio.c,v 1.2 2004-11-10 14:55:30 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -44,6 +44,12 @@
/****************************************************************************/ /****************************************************************************/
#if defined(CreateStdIO)
#undef CreateStdIO
#endif /* CreateStdIO */
/****************************************************************************/
struct IOStdReq * struct IOStdReq *
CreateStdIO(CONST struct MsgPort * port) CreateStdIO(CONST struct MsgPort * port)
{ {

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: amiga_createtask.c,v 1.1.1.1 2004-07-26 16:30:18 obarthel Exp $ * $Id: amiga_createtask.c,v 1.2 2004-11-13 12:55:39 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -31,8 +31,6 @@
* POSSIBILITY OF SUCH DAMAGE. * POSSIBILITY OF SUCH DAMAGE.
*/ */
#ifndef __PPC__
/****************************************************************************/ /****************************************************************************/
#include <exec/libraries.h> #include <exec/libraries.h>
@@ -53,6 +51,10 @@
/****************************************************************************/ /****************************************************************************/
#ifndef __PPC__
/****************************************************************************/
/* /*
* Create a task with given name, priority, and stack size. * Create a task with given name, priority, and stack size.
* It will use the default exception and trap handlers for now. * It will use the default exception and trap handlers for now.
@@ -191,4 +193,44 @@ CreateTask(CONST_STRPTR name,LONG pri,CONST APTR init_pc,ULONG stack_size)
/****************************************************************************/ /****************************************************************************/
#else
/****************************************************************************/
#if defined(CreateTask)
#undef CreateTask
#endif /* CreateTask */
/****************************************************************************/
struct Task *
CreateTask(CONST_STRPTR name,LONG pri,CONST APTR init_pc,ULONG stack_size)
{
struct Task * result = NULL;
ENTER();
SHOWSTRING(name);
SHOWVALUE(pri);
SHOWPOINTER(init_pc);
SHOWVALUE(stack_size);
assert( name != NULL && (-128 <= pri && pri <= 127) && init_pc != NULL && stack_size > 0 );
if(name == NULL || pri < -128 || pri > 127 || init_pc == NULL || stack_size == 0)
{
SHOWMSG("invalid parameters");
goto out;
}
result = IExec->CreateTask(name,pri,init_pc,stack_size,NULL);
out:
RETURN(result);
return(result);
}
/****************************************************************************/
#endif /* __PPC__ */ #endif /* __PPC__ */

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: amiga_deleteextio.c,v 1.1.1.1 2004-07-26 16:30:18 obarthel Exp $ * $Id: amiga_deleteextio.c,v 1.2 2004-11-10 14:55:30 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -44,6 +44,12 @@
/****************************************************************************/ /****************************************************************************/
#if defined(DeleteExtIO)
#undef DeleteExtIO
#endif /* DeleteExtIO */
/****************************************************************************/
VOID VOID
DeleteExtIO(struct IORequest * io) DeleteExtIO(struct IORequest * io)
{ {

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: amiga_deleteport.c,v 1.1.1.1 2004-07-26 16:30:19 obarthel Exp $ * $Id: amiga_deleteport.c,v 1.2 2004-11-13 12:55:39 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -44,6 +44,12 @@
/****************************************************************************/ /****************************************************************************/
#if defined(DeletePort)
#undef DeletePort
#endif /* DeletePort */
/****************************************************************************/
VOID VOID
DeletePort(struct MsgPort * port) DeletePort(struct MsgPort * port)
{ {

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: amiga_deletestdio.c,v 1.1.1.1 2004-07-26 16:30:19 obarthel Exp $ * $Id: amiga_deletestdio.c,v 1.2 2004-11-10 14:55:30 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -44,6 +44,12 @@
/****************************************************************************/ /****************************************************************************/
#if defined(DeleteStdIO)
#undef DeleteStdIO
#endif /* DeleteStdIO */
/****************************************************************************/
VOID VOID
DeleteStdIO(struct IOStdReq * io) DeleteStdIO(struct IOStdReq * io)
{ {

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: amiga_deletetask.c,v 1.1.1.1 2004-07-26 16:30:19 obarthel Exp $ * $Id: amiga_deletetask.c,v 1.2 2004-11-13 12:55:39 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -41,8 +41,34 @@
/****************************************************************************/ /****************************************************************************/
#ifndef __PPC__
/****************************************************************************/
VOID VOID
DeleteTask(struct Task *tc) DeleteTask(struct Task *tc)
{ {
RemTask(tc); RemTask(tc);
} }
/****************************************************************************/
#else
/****************************************************************************/
#if defined(DeleteTask)
#undef DeleteTask
#endif /* DeleteTask */
/****************************************************************************/
VOID
DeleteTask(struct Task *tc)
{
IExec->DeleteTask(tc);
}
/****************************************************************************/
#endif /* __PPC__ */

View File

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

View File

@@ -1 +1 @@
182 183

View File

@@ -1,3 +1,29 @@
c.lib 1.183 (13.11.2004)
- Cleaned up the OS4 build makefile, losing redundant libraries,
adding more startup object code and ultimatively making the whole
rebuild logic work again: if code changes and dependencies are
set up correctly, it will now get rebuilt. Previously, such
changes went unnoticed and you had to rebuild the entire library
from scratch.
- Added stubs for CreatePort(), DeletePort(), CreateTask(), DeleteTask()
and NewList() which have equivalents in exec.library V50 but for which
it might be useful if ported code didn't have to reference these
explicitly.
- mktemp() was broken in libunix.a with Unix path semantics enabled.
This was because the name template was translated and translated
back again, overwriting the translation buffer. This, funny enough,
broke Samba's printing feature. Fixed by translating the name only
before each test for "uniqueness" is made. The new code also handles
empty "" templates gracefully, which was a problem with both the
"standard" and the Unix path semantics flavour.
Why is it that I find bugs like this always after having just
released another library update?
c.lib 1.182 (8.11.2004) c.lib 1.182 (8.11.2004)
- Changed the error abort condition for the %s conversion of the - Changed the error abort condition for the %s conversion of the

View File

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

View File

@@ -1 +1 @@
182 183

View File

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

View File

@@ -1 +1 @@
182 183

View File

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

View File

@@ -1 +1 @@
182 183

View File

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

View File

@@ -1 +1 @@
182 183

View File

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

View File

@@ -1 +1 @@
182 183

View File

@@ -1,5 +1,5 @@
/* /*
* $Id: stdlib_mktemp.c,v 1.2 2004-08-07 09:15:32 obarthel Exp $ * $Id: stdlib_mktemp.c,v 1.3 2004-11-10 17:45:40 obarthel Exp $
* *
* :ts=4 * :ts=4
* *
@@ -57,16 +57,19 @@ mktemp(char * name_template)
{ {
#if defined(UNIX_PATH_SEMANTICS) #if defined(UNIX_PATH_SEMANTICS)
struct name_translation_info name_template_nti; struct name_translation_info name_template_nti;
char * original_name_template = NULL;
#endif /* UNIX_PATH_SEMANTICS */ #endif /* UNIX_PATH_SEMANTICS */
char * test_name;
struct Process * this_process; struct Process * this_process;
APTR old_window_pointer; APTR old_window_pointer;
char * result = NULL; char * result = NULL;
int template_offset; size_t template_offset;
int template_len; size_t template_len;
size_t name_len;
size_t offset;
time_t now; time_t now;
ULONG pseudo_random_number;
BPTR lock; BPTR lock;
int i; size_t i;
ENTER(); ENTER();
@@ -74,6 +77,8 @@ mktemp(char * name_template)
assert(name_template != NULL); assert(name_template != NULL);
this_process = (struct Process *)FindTask(NULL);
#if defined(CHECK_FOR_NULL_POINTERS) #if defined(CHECK_FOR_NULL_POINTERS)
{ {
if(name_template == NULL) if(name_template == NULL)
@@ -89,43 +94,11 @@ mktemp(char * name_template)
if(__check_abort_enabled) if(__check_abort_enabled)
__check_abort(); __check_abort();
#if defined(UNIX_PATH_SEMANTICS)
{
if(__unix_path_semantics)
{
original_name_template = name_template;
if(__translate_unix_to_amiga_path_name((char const **)&name_template,&name_template_nti) != 0)
goto out;
if(name_template_nti.is_root)
{
errno = EACCES;
goto out;
}
}
}
#endif /* UNIX_PATH_SEMANTICS */
SHOWSTRING(name_template); SHOWSTRING(name_template);
template_offset = -1; /* So, how long is that name template? */
template_len = 0; name_len = strlen(name_template);
if(name_len == 0)
for(i = strlen(name_template)-1 ; i >= 0 ; i--)
{
if(name_template[i] == 'X')
{
template_offset = i;
template_len++;
}
else
{
break;
}
}
if(template_offset == -1)
{ {
SHOWMSG("invalid name template"); SHOWMSG("invalid name template");
@@ -133,23 +106,65 @@ mktemp(char * name_template)
goto out; goto out;
} }
this_process = (struct Process *)FindTask(NULL); /* Find out how many trailing 'X' characters there are in
the template. There should be at least 6. We also want
to know where to find the first 'X' and how many of the
'X' characters there are. */
template_offset = 0;
template_len = 0;
for(i = 0 ; i < name_len ; i++)
{
assert( name_len >= (i + 1) );
offset = name_len - (i + 1);
if(name_template[offset] != 'X')
break;
template_offset = offset;
template_len++;
}
SHOWVALUE(template_offset);
SHOWVALUE(template_len);
if(template_len == 0)
{
SHOWMSG("invalid name template");
errno = EINVAL;
goto out;
}
/* Generate a pseudo-random number from the current time and
the address of the current process. */
time(&now); time(&now);
now += (time_t)this_process; pseudo_random_number = (ULONG)now + (ULONG)this_process;
/* Fill the template 'X' characters with letters made up by
converting the pseudo-random number. */
for(i = 0 ; i < template_len ; i++) for(i = 0 ; i < template_len ; i++)
{ {
name_template[template_offset + i] = 'A' + (now % 26); name_template[template_offset + i] = 'A' + (pseudo_random_number % 26);
now = (now / 26); /* One more letter taken; if we run out of letters,
if(now == 0) cook up another pseudo-random number. */
pseudo_random_number = (pseudo_random_number / 26);
if(pseudo_random_number == 0)
{
time(&now); time(&now);
pseudo_random_number = (ULONG)now;
}
} }
SHOWSTRING(name_template);
old_window_pointer = this_process->pr_WindowPtr; old_window_pointer = this_process->pr_WindowPtr;
/* Now check if the name we picked is unique. If not, make another name. */
while(TRUE) while(TRUE)
{ {
if(__check_abort_enabled) if(__check_abort_enabled)
@@ -157,12 +172,32 @@ mktemp(char * name_template)
D(("checking '%s'",name_template)); D(("checking '%s'",name_template));
test_name = name_template;
/* If necessary, quickly translate the semantics of the file name
we cooked up above. */
#if defined(UNIX_PATH_SEMANTICS)
{
if(__unix_path_semantics)
{
if(__translate_unix_to_amiga_path_name((char const **)&test_name,&name_template_nti) != 0)
goto out;
if(name_template_nti.is_root)
{
errno = EACCES;
goto out;
}
}
}
#endif /* UNIX_PATH_SEMANTICS */
/* Turn off DOS error requesters. */ /* Turn off DOS error requesters. */
this_process->pr_WindowPtr = (APTR)-1; this_process->pr_WindowPtr = (APTR)-1;
/* Does this object exist already? */ /* Does this object exist already? */
PROFILE_OFF(); PROFILE_OFF();
lock = Lock(name_template,SHARED_LOCK); lock = Lock(test_name,SHARED_LOCK);
PROFILE_ON(); PROFILE_ON();
/* Restore DOS requesters. */ /* Restore DOS requesters. */
@@ -191,8 +226,7 @@ mktemp(char * name_template)
PROFILE_ON(); PROFILE_ON();
/* Change one letter; if that 'overflows', start /* Change one letter; if that 'overflows', start
* over with 'A' and move on to the next position. over with 'A' and move on to the next position. */
*/
for(i = 0 ; i < template_len ; i++) for(i = 0 ; i < template_len ; i++)
{ {
name_template[template_offset + i]++; name_template[template_offset + i]++;
@@ -205,20 +239,6 @@ mktemp(char * name_template)
SHOWSTRING(name_template); SHOWSTRING(name_template);
#if defined(UNIX_PATH_SEMANTICS)
{
if(__unix_path_semantics)
{
if(__translate_amiga_to_unix_path_name((char const **)&name_template,&name_template_nti) != 0)
goto out;
strcpy(original_name_template,name_template);
}
}
#endif /* UNIX_PATH_SEMANTICS */
SHOWSTRING(name_template);
out: out:
RETURN(result); RETURN(result);

View File

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

View File

@@ -1 +1 @@
182 183