mirror of
https://github.com/adtools/clib2.git
synced 2025-12-08 14:59:05 +00:00
- 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. git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14841 87f5fb63-7c3d-0410-a384-fd976d0f7a62
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# $Id: GNUmakefile.68k,v 1.29 2005-02-25 10:14:20 obarthel Exp $
|
# $Id: GNUmakefile.68k,v 1.30 2005-02-27 18:09:07 obarthel Exp $
|
||||||
#
|
#
|
||||||
# :ts=8
|
# :ts=8
|
||||||
#
|
#
|
||||||
@@ -130,23 +130,23 @@ C_LIB = \
|
|||||||
ctype_isspace.o \
|
ctype_isspace.o \
|
||||||
ctype_isupper.o \
|
ctype_isupper.o \
|
||||||
ctype_isxdigit.o \
|
ctype_isxdigit.o \
|
||||||
|
ctype_table.o \
|
||||||
ctype_tolower.o \
|
ctype_tolower.o \
|
||||||
ctype_toupper.o \
|
ctype_toupper.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 \
|
||||||
fcntl_fcntl.o \
|
fcntl_fcntl.o \
|
||||||
|
fcntl_get_default_file.o \
|
||||||
fcntl_lseek.o \
|
fcntl_lseek.o \
|
||||||
fcntl_open.o \
|
fcntl_open.o \
|
||||||
fcntl_read.o \
|
fcntl_read.o \
|
||||||
fcntl_write.o \
|
fcntl_write.o \
|
||||||
fcntl_get_default_file.o \
|
|
||||||
libgen_basename.o \
|
libgen_basename.o \
|
||||||
libgen_dirname.o \
|
libgen_dirname.o \
|
||||||
locale_init_exit.o \
|
locale_init_exit.o \
|
||||||
@@ -188,13 +188,14 @@ C_LIB = \
|
|||||||
stdio_feof.o \
|
stdio_feof.o \
|
||||||
stdio_ferror.o \
|
stdio_ferror.o \
|
||||||
stdio_fflush.o \
|
stdio_fflush.o \
|
||||||
stdio_flush.o \
|
|
||||||
stdio_fgetc.o \
|
stdio_fgetc.o \
|
||||||
stdio_fgetpos.o \
|
stdio_fgetpos.o \
|
||||||
stdio_fgets.o \
|
stdio_fgets.o \
|
||||||
stdio_filliobreadbuffer.o \
|
stdio_filliobreadbuffer.o \
|
||||||
stdio_findvacantfdentry.o \
|
stdio_findvacantfdentry.o \
|
||||||
stdio_findvacantiobentry.o \
|
stdio_findvacantiobentry.o \
|
||||||
|
stdio_flockfile.o \
|
||||||
|
stdio_flush.o \
|
||||||
stdio_flushiobwritebuffer.o \
|
stdio_flushiobwritebuffer.o \
|
||||||
stdio_fopen.o \
|
stdio_fopen.o \
|
||||||
stdio_fprintf.o \
|
stdio_fprintf.o \
|
||||||
@@ -206,11 +207,15 @@ C_LIB = \
|
|||||||
stdio_fseek.o \
|
stdio_fseek.o \
|
||||||
stdio_fsetpos.o \
|
stdio_fsetpos.o \
|
||||||
stdio_ftell.o \
|
stdio_ftell.o \
|
||||||
|
stdio_ftrylockfile.o \
|
||||||
|
stdio_funlockfile.o \
|
||||||
stdio_fwrite.o \
|
stdio_fwrite.o \
|
||||||
stdio_getc.o \
|
stdio_getc.o \
|
||||||
|
stdio_getc_unlocked.o \
|
||||||
stdio_getchar.o \
|
stdio_getchar.o \
|
||||||
stdio_get_file_descriptor.o \
|
stdio_getchar_unlocked.o \
|
||||||
stdio_gets.o \
|
stdio_gets.o \
|
||||||
|
stdio_get_file_descriptor.o \
|
||||||
stdio_growfdtable.o \
|
stdio_growfdtable.o \
|
||||||
stdio_growiobtable.o \
|
stdio_growiobtable.o \
|
||||||
stdio_grow_file.o \
|
stdio_grow_file.o \
|
||||||
@@ -226,7 +231,9 @@ C_LIB = \
|
|||||||
stdio_popen.o \
|
stdio_popen.o \
|
||||||
stdio_printf.o \
|
stdio_printf.o \
|
||||||
stdio_putc.o \
|
stdio_putc.o \
|
||||||
|
stdio_putc_unlocked.o \
|
||||||
stdio_putchar.o \
|
stdio_putchar.o \
|
||||||
|
stdio_putchar_unlocked.o \
|
||||||
stdio_puts.o \
|
stdio_puts.o \
|
||||||
stdio_remove.o \
|
stdio_remove.o \
|
||||||
stdio_remove_fd_alias.o \
|
stdio_remove_fd_alias.o \
|
||||||
@@ -243,6 +250,7 @@ C_LIB = \
|
|||||||
stdio_tmpnam.o \
|
stdio_tmpnam.o \
|
||||||
stdio_translateioerror.o \
|
stdio_translateioerror.o \
|
||||||
stdio_ungetc.o \
|
stdio_ungetc.o \
|
||||||
|
stdio_unlockfile.o \
|
||||||
stdio_vasprintf.o \
|
stdio_vasprintf.o \
|
||||||
stdio_vasprintf_hook_entry.o \
|
stdio_vasprintf_hook_entry.o \
|
||||||
stdio_vfprintf.o \
|
stdio_vfprintf.o \
|
||||||
@@ -277,10 +285,10 @@ C_LIB = \
|
|||||||
stdlib_dosbase.o \
|
stdlib_dosbase.o \
|
||||||
stdlib_exit.o \
|
stdlib_exit.o \
|
||||||
stdlib_free.o \
|
stdlib_free.o \
|
||||||
stdlib_get_errno.o \
|
|
||||||
stdlib_getdefstacksize.o \
|
stdlib_getdefstacksize.o \
|
||||||
stdlib_getenv.o \
|
stdlib_getenv.o \
|
||||||
stdlib_getsp.o \
|
stdlib_getsp.o \
|
||||||
|
stdlib_get_errno.o \
|
||||||
stdlib_init_exit.o \
|
stdlib_init_exit.o \
|
||||||
stdlib_isresident.o \
|
stdlib_isresident.o \
|
||||||
stdlib_labs.o \
|
stdlib_labs.o \
|
||||||
@@ -301,11 +309,12 @@ C_LIB = \
|
|||||||
stdlib_putenv.o \
|
stdlib_putenv.o \
|
||||||
stdlib_qsort.o \
|
stdlib_qsort.o \
|
||||||
stdlib_rand.o \
|
stdlib_rand.o \
|
||||||
|
stdlib_rand_r.o \
|
||||||
stdlib_realloc.o \
|
stdlib_realloc.o \
|
||||||
stdlib_red_black.o \
|
stdlib_red_black.o \
|
||||||
stdlib_setenv.o \
|
stdlib_setenv.o \
|
||||||
stdlib_set_errno.o \
|
|
||||||
stdlib_setjmp.o \
|
stdlib_setjmp.o \
|
||||||
|
stdlib_set_errno.o \
|
||||||
stdlib_set_process_window.o \
|
stdlib_set_process_window.o \
|
||||||
stdlib_shell_escape.o \
|
stdlib_shell_escape.o \
|
||||||
stdlib_showerror.o \
|
stdlib_showerror.o \
|
||||||
@@ -318,9 +327,10 @@ C_LIB = \
|
|||||||
stdlib_stacksize.o \
|
stdlib_stacksize.o \
|
||||||
stdlib_stack_usage.o \
|
stdlib_stack_usage.o \
|
||||||
stdlib_startup.o \
|
stdlib_startup.o \
|
||||||
|
stdlib_stdio_window_spec.o \
|
||||||
stdlib_strtol.o \
|
stdlib_strtol.o \
|
||||||
stdlib_strtoul.o \
|
|
||||||
stdlib_strtoll.o \
|
stdlib_strtoll.o \
|
||||||
|
stdlib_strtoul.o \
|
||||||
stdlib_strtoull.o \
|
stdlib_strtoull.o \
|
||||||
stdlib_swapstack.o \
|
stdlib_swapstack.o \
|
||||||
stdlib_sysbase.o \
|
stdlib_sysbase.o \
|
||||||
@@ -332,7 +342,6 @@ C_LIB = \
|
|||||||
stdlib_umodsi3.o \
|
stdlib_umodsi3.o \
|
||||||
stdlib_unsetenv.o \
|
stdlib_unsetenv.o \
|
||||||
stdlib_wildcard_expand.o \
|
stdlib_wildcard_expand.o \
|
||||||
stdlib_stdio_window_spec.o \
|
|
||||||
strings_strcasecmp.o \
|
strings_strcasecmp.o \
|
||||||
strings_strncasecmp.o \
|
strings_strncasecmp.o \
|
||||||
string_bcmp.o \
|
string_bcmp.o \
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
#
|
#
|
||||||
# $Id: GNUmakefile.os4,v 1.29 2005-02-25 10:14:20 obarthel Exp $
|
# $Id: GNUmakefile.os4,v 1.30 2005-02-27 18:09:10 obarthel Exp $
|
||||||
#
|
#
|
||||||
# :ts=8
|
# :ts=8
|
||||||
#
|
#
|
||||||
@@ -134,23 +134,23 @@ C_LIB = \
|
|||||||
ctype_isspace.o \
|
ctype_isspace.o \
|
||||||
ctype_isupper.o \
|
ctype_isupper.o \
|
||||||
ctype_isxdigit.o \
|
ctype_isxdigit.o \
|
||||||
|
ctype_table.o \
|
||||||
ctype_tolower.o \
|
ctype_tolower.o \
|
||||||
ctype_toupper.o \
|
ctype_toupper.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 \
|
||||||
fcntl_fcntl.o \
|
fcntl_fcntl.o \
|
||||||
|
fcntl_get_default_file.o \
|
||||||
fcntl_lseek.o \
|
fcntl_lseek.o \
|
||||||
fcntl_open.o \
|
fcntl_open.o \
|
||||||
fcntl_read.o \
|
fcntl_read.o \
|
||||||
fcntl_write.o \
|
fcntl_write.o \
|
||||||
fcntl_get_default_file.o \
|
|
||||||
libgen_basename.o \
|
libgen_basename.o \
|
||||||
libgen_dirname.o \
|
libgen_dirname.o \
|
||||||
locale_init_exit.o \
|
locale_init_exit.o \
|
||||||
@@ -192,13 +192,14 @@ C_LIB = \
|
|||||||
stdio_feof.o \
|
stdio_feof.o \
|
||||||
stdio_ferror.o \
|
stdio_ferror.o \
|
||||||
stdio_fflush.o \
|
stdio_fflush.o \
|
||||||
stdio_flush.o \
|
|
||||||
stdio_fgetc.o \
|
stdio_fgetc.o \
|
||||||
stdio_fgetpos.o \
|
stdio_fgetpos.o \
|
||||||
stdio_fgets.o \
|
stdio_fgets.o \
|
||||||
stdio_filliobreadbuffer.o \
|
stdio_filliobreadbuffer.o \
|
||||||
stdio_findvacantfdentry.o \
|
stdio_findvacantfdentry.o \
|
||||||
stdio_findvacantiobentry.o \
|
stdio_findvacantiobentry.o \
|
||||||
|
stdio_flockfile.o \
|
||||||
|
stdio_flush.o \
|
||||||
stdio_flushiobwritebuffer.o \
|
stdio_flushiobwritebuffer.o \
|
||||||
stdio_fopen.o \
|
stdio_fopen.o \
|
||||||
stdio_fprintf.o \
|
stdio_fprintf.o \
|
||||||
@@ -210,11 +211,15 @@ C_LIB = \
|
|||||||
stdio_fseek.o \
|
stdio_fseek.o \
|
||||||
stdio_fsetpos.o \
|
stdio_fsetpos.o \
|
||||||
stdio_ftell.o \
|
stdio_ftell.o \
|
||||||
|
stdio_ftrylockfile.o \
|
||||||
|
stdio_funlockfile.o \
|
||||||
stdio_fwrite.o \
|
stdio_fwrite.o \
|
||||||
stdio_getc.o \
|
stdio_getc.o \
|
||||||
|
stdio_getc_unlocked.o \
|
||||||
stdio_getchar.o \
|
stdio_getchar.o \
|
||||||
stdio_get_file_descriptor.o \
|
stdio_getchar_unlocked.o \
|
||||||
stdio_gets.o \
|
stdio_gets.o \
|
||||||
|
stdio_get_file_descriptor.o \
|
||||||
stdio_growfdtable.o \
|
stdio_growfdtable.o \
|
||||||
stdio_growiobtable.o \
|
stdio_growiobtable.o \
|
||||||
stdio_grow_file.o \
|
stdio_grow_file.o \
|
||||||
@@ -230,7 +235,9 @@ C_LIB = \
|
|||||||
stdio_popen.o \
|
stdio_popen.o \
|
||||||
stdio_printf.o \
|
stdio_printf.o \
|
||||||
stdio_putc.o \
|
stdio_putc.o \
|
||||||
|
stdio_putc_unlocked.o \
|
||||||
stdio_putchar.o \
|
stdio_putchar.o \
|
||||||
|
stdio_putchar_unlocked.o \
|
||||||
stdio_puts.o \
|
stdio_puts.o \
|
||||||
stdio_remove.o \
|
stdio_remove.o \
|
||||||
stdio_remove_fd_alias.o \
|
stdio_remove_fd_alias.o \
|
||||||
@@ -247,6 +254,7 @@ C_LIB = \
|
|||||||
stdio_tmpnam.o \
|
stdio_tmpnam.o \
|
||||||
stdio_translateioerror.o \
|
stdio_translateioerror.o \
|
||||||
stdio_ungetc.o \
|
stdio_ungetc.o \
|
||||||
|
stdio_unlockfile.o \
|
||||||
stdio_vasprintf.o \
|
stdio_vasprintf.o \
|
||||||
stdio_vasprintf_hook_entry.o \
|
stdio_vasprintf_hook_entry.o \
|
||||||
stdio_vfprintf.o \
|
stdio_vfprintf.o \
|
||||||
@@ -282,9 +290,9 @@ C_LIB = \
|
|||||||
stdlib_exit.o \
|
stdlib_exit.o \
|
||||||
stdlib_free.o \
|
stdlib_free.o \
|
||||||
stdlib_getdefstacksize.o \
|
stdlib_getdefstacksize.o \
|
||||||
stdlib_get_errno.o \
|
|
||||||
stdlib_getenv.o \
|
stdlib_getenv.o \
|
||||||
stdlib_getsp.o \
|
stdlib_getsp.o \
|
||||||
|
stdlib_get_errno.o \
|
||||||
stdlib_init_exit.o \
|
stdlib_init_exit.o \
|
||||||
stdlib_isresident.o \
|
stdlib_isresident.o \
|
||||||
stdlib_labs.o \
|
stdlib_labs.o \
|
||||||
@@ -305,11 +313,12 @@ C_LIB = \
|
|||||||
stdlib_putenv.o \
|
stdlib_putenv.o \
|
||||||
stdlib_qsort.o \
|
stdlib_qsort.o \
|
||||||
stdlib_rand.o \
|
stdlib_rand.o \
|
||||||
|
stdlib_rand_r.o \
|
||||||
stdlib_realloc.o \
|
stdlib_realloc.o \
|
||||||
stdlib_red_black.o \
|
stdlib_red_black.o \
|
||||||
stdlib_set_errno.o \
|
|
||||||
stdlib_setenv.o \
|
stdlib_setenv.o \
|
||||||
stdlib_setjmp.o \
|
stdlib_setjmp.o \
|
||||||
|
stdlib_set_errno.o \
|
||||||
stdlib_set_process_window.o \
|
stdlib_set_process_window.o \
|
||||||
stdlib_shell_escape.o \
|
stdlib_shell_escape.o \
|
||||||
stdlib_showerror.o \
|
stdlib_showerror.o \
|
||||||
@@ -322,9 +331,10 @@ C_LIB = \
|
|||||||
stdlib_stacksize.o \
|
stdlib_stacksize.o \
|
||||||
stdlib_stack_usage.o \
|
stdlib_stack_usage.o \
|
||||||
stdlib_startup.o \
|
stdlib_startup.o \
|
||||||
|
stdlib_stdio_window_spec.o \
|
||||||
stdlib_strtol.o \
|
stdlib_strtol.o \
|
||||||
stdlib_strtoul.o \
|
|
||||||
stdlib_strtoll.o \
|
stdlib_strtoll.o \
|
||||||
|
stdlib_strtoul.o \
|
||||||
stdlib_strtoull.o \
|
stdlib_strtoull.o \
|
||||||
stdlib_swapstack.o \
|
stdlib_swapstack.o \
|
||||||
stdlib_sysbase.o \
|
stdlib_sysbase.o \
|
||||||
@@ -336,7 +346,6 @@ C_LIB = \
|
|||||||
stdlib_umodsi3.o \
|
stdlib_umodsi3.o \
|
||||||
stdlib_unsetenv.o \
|
stdlib_unsetenv.o \
|
||||||
stdlib_wildcard_expand.o \
|
stdlib_wildcard_expand.o \
|
||||||
stdlib_stdio_window_spec.o \
|
|
||||||
strings_strcasecmp.o \
|
strings_strcasecmp.o \
|
||||||
strings_strncasecmp.o \
|
strings_strncasecmp.o \
|
||||||
string_bcmp.o \
|
string_bcmp.o \
|
||||||
|
|||||||
@@ -48,6 +48,20 @@
|
|||||||
qualifier. This was done in preparation for changes that will
|
qualifier. This was done in preparation for changes that will
|
||||||
deal with global and local data and the issue of thread safety.
|
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.
|
||||||
|
|
||||||
|
|
||||||
c.lib 1.188 (7.2.2005)
|
c.lib 1.188 (7.2.2005)
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio.h,v 1.5 2005-01-02 09:07:21 obarthel Exp $
|
* $Id: stdio.h,v 1.6 2005-02-27 18:09:12 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -200,6 +200,21 @@ extern int putchar(int c);
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
/* The following four functions are not part of ISO 'C' (1994). */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
/* ISO 'C' (1994) functions continue below. */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
extern char *fgets(char *s,int n,FILE *stream);
|
extern char *fgets(char *s,int n,FILE *stream);
|
||||||
extern char *gets(char *s);
|
extern char *gets(char *s);
|
||||||
|
|
||||||
@@ -252,30 +267,40 @@ extern char *tmpnam(char *buf);
|
|||||||
/*
|
/*
|
||||||
* A special buffer flush routine which returns the last character written
|
* 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
|
* in case of success and EOF in case of failure. This is used by the
|
||||||
* putc() macro defined below.
|
* putc_unlocked() macro defined below.
|
||||||
*/
|
*/
|
||||||
extern int __flush(FILE *stream);
|
extern int __flush(FILE *stream);
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A special function which returns the input character. This is used by
|
||||||
|
* the getc() macro defined below.
|
||||||
|
*/
|
||||||
|
extern int __unlockfile(FILE *stream,int c);
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fgetc() implemented as a "simple" macro; note that fgetc() does much more than
|
* fgetc() implemented as a "simple" macro; note that fgetc() does much more than
|
||||||
* can be conveniently expressed as a macro!
|
* can be conveniently expressed as a macro!
|
||||||
*/
|
*/
|
||||||
#define getc(f) \
|
#define __getc_unlocked(f) \
|
||||||
(((((FILE *)(f))->flags & (__FILE_IN_USE|__FILE_READABLE|__FILE_EOF)) == (__FILE_IN_USE|__FILE_READABLE) && \
|
(((((FILE *)(f))->flags & (__FILE_IN_USE|__FILE_READABLE|__FILE_EOF)) == (__FILE_IN_USE|__FILE_READABLE) && \
|
||||||
(((FILE *)(f))->flags & __FILE_BUFFER_MASK) != _IONBF && \
|
(((FILE *)(f))->flags & __FILE_BUFFER_MASK) != _IONBF && \
|
||||||
((FILE *)(f))->position < ((FILE *)(f))->num_read_bytes) ? \
|
((FILE *)(f))->position < ((FILE *)(f))->num_read_bytes) ? \
|
||||||
((FILE *)(f))->buffer[((FILE *)(f))->position++] : \
|
((FILE *)(f))->buffer[((FILE *)(f))->position++] : \
|
||||||
fgetc(f))
|
fgetc(f))
|
||||||
|
|
||||||
|
#define getc_unlocked(f)
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fputc() implemented as a "simple" macro; note that fputc() does much more than
|
* fputc() implemented as a "simple" macro; note that fputc() does much more than
|
||||||
* can be conveniently expressed as a macro!
|
* can be conveniently expressed as a macro!
|
||||||
*/
|
*/
|
||||||
#define putc(c,f) \
|
#define __putc_unlocked(c,f) \
|
||||||
(((((FILE *)(f))->flags & (__FILE_IN_USE|__FILE_WRITABLE)) == (__FILE_IN_USE|__FILE_WRITABLE) && \
|
(((((FILE *)(f))->flags & (__FILE_IN_USE|__FILE_WRITABLE)) == (__FILE_IN_USE|__FILE_WRITABLE) && \
|
||||||
(((FILE *)(f))->flags & __FILE_BUFFER_MASK) != _IONBF && \
|
(((FILE *)(f))->flags & __FILE_BUFFER_MASK) != _IONBF && \
|
||||||
(((FILE *)(f))->num_write_bytes < ((FILE *)(f))->size)) ? \
|
(((FILE *)(f))->num_write_bytes < ((FILE *)(f))->size)) ? \
|
||||||
@@ -286,6 +311,20 @@ extern int __flush(FILE *stream);
|
|||||||
(((FILE *)(f))->buffer[((FILE *)(f))->num_write_bytes-1]))) : \
|
(((FILE *)(f))->buffer[((FILE *)(f))->num_write_bytes-1]))) : \
|
||||||
fputc((c),(f)))
|
fputc((c),(f)))
|
||||||
|
|
||||||
|
#define putc_unlocked(c,f) __putc((c),(f))
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#define getchar_unlocked() __getc_unlocked(stdin)
|
||||||
|
#define putchar_unlocked(c) __putc_unlocked((c),stdout)
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#define getc(f) (flockfile(f), __unlockfile((f),__getc_unlocked(f)))
|
||||||
|
#define putc(c,f) (flockfile(f), __unlockfile((f),__putc_unlocked((c),(f))))
|
||||||
|
#define getchar() getc(stdin)
|
||||||
|
#define putchar(c) putc((c),stdout)
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -296,8 +335,6 @@ extern int __flush(FILE *stream);
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
#define getchar() getc(stdin)
|
|
||||||
#define putchar(c) putc((c),stdout)
|
|
||||||
#define clearerr(file) ((void)((file)->flags &= ~(__FILE_EOF|__FILE_ERROR)))
|
#define clearerr(file) ((void)((file)->flags &= ~(__FILE_EOF|__FILE_ERROR)))
|
||||||
#define feof(file) (((file)->flags & __FILE_EOF) != 0)
|
#define feof(file) (((file)->flags & __FILE_EOF) != 0)
|
||||||
#define ferror(file) (((file)->flags & __FILE_ERROR) != 0)
|
#define ferror(file) (((file)->flags & __FILE_ERROR) != 0)
|
||||||
@@ -326,6 +363,12 @@ extern FILE * popen(const char *command, const char *type);
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
extern void flockfile(FILE * file);
|
||||||
|
extern void funlockfile(FILE * file);
|
||||||
|
extern int ftrylockfile(FILE * file);
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
extern int vasprintf(char **ret,const char *format,va_list arg);
|
extern int vasprintf(char **ret,const char *format,va_list arg);
|
||||||
|
|
||||||
#ifdef __MEM_DEBUG
|
#ifdef __MEM_DEBUG
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdlib.h,v 1.6 2005-01-30 09:48:06 obarthel Exp $
|
* $Id: stdlib.h,v 1.7 2005-02-27 18:09:12 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -149,6 +149,10 @@ extern long atol(const char *str);
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
extern int rand_r(unsigned int * seed);
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
/* These two 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. */
|
"long long" data type. */
|
||||||
#if ! defined(__SASC)
|
#if ! defined(__SASC)
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
_#
|
_#
|
||||||
# $Id: smakefile,v 1.23 2005-02-25 10:14:21 obarthel Exp $
|
# $Id: smakefile,v 1.24 2005-02-27 18:09:10 obarthel Exp $
|
||||||
#
|
#
|
||||||
# :ts=8
|
# :ts=8
|
||||||
#
|
#
|
||||||
@@ -292,18 +292,17 @@ STDIO_OBJ = \
|
|||||||
stdio_examine_fh.o \
|
stdio_examine_fh.o \
|
||||||
stdio_fclose.o \
|
stdio_fclose.o \
|
||||||
stdio_fdhookentry.o \
|
stdio_fdhookentry.o \
|
||||||
stdio_record_locking.o \
|
|
||||||
stdio_remove_fd_alias.o \
|
|
||||||
stdio_feof.o \
|
stdio_feof.o \
|
||||||
stdio_ferror.o \
|
stdio_ferror.o \
|
||||||
stdio_fflush.o \
|
stdio_fflush.o \
|
||||||
stdio_flush.o \
|
|
||||||
stdio_fgetc.o \
|
stdio_fgetc.o \
|
||||||
stdio_fgetpos.o \
|
stdio_fgetpos.o \
|
||||||
stdio_fgets.o \
|
stdio_fgets.o \
|
||||||
stdio_filliobreadbuffer.o \
|
stdio_filliobreadbuffer.o \
|
||||||
stdio_findvacantfdentry.o \
|
stdio_findvacantfdentry.o \
|
||||||
stdio_findvacantiobentry.o \
|
stdio_findvacantiobentry.o \
|
||||||
|
stdio_flockfile.o \
|
||||||
|
stdio_flush.o \
|
||||||
stdio_flushiobwritebuffer.o \
|
stdio_flushiobwritebuffer.o \
|
||||||
stdio_fopen.o \
|
stdio_fopen.o \
|
||||||
stdio_fprintf.o \
|
stdio_fprintf.o \
|
||||||
@@ -315,11 +314,15 @@ STDIO_OBJ = \
|
|||||||
stdio_fseek.o \
|
stdio_fseek.o \
|
||||||
stdio_fsetpos.o \
|
stdio_fsetpos.o \
|
||||||
stdio_ftell.o \
|
stdio_ftell.o \
|
||||||
|
stdio_ftrylockfile.o \
|
||||||
|
stdio_funlockfile.o \
|
||||||
stdio_fwrite.o \
|
stdio_fwrite.o \
|
||||||
stdio_getc.o \
|
stdio_getc.o \
|
||||||
|
stdio_getc_unlocked.o \
|
||||||
stdio_getchar.o \
|
stdio_getchar.o \
|
||||||
stdio_get_file_descriptor.o \
|
stdio_getchar_unlocked.o \
|
||||||
stdio_gets.o \
|
stdio_gets.o \
|
||||||
|
stdio_get_file_descriptor.o \
|
||||||
stdio_growfdtable.o \
|
stdio_growfdtable.o \
|
||||||
stdio_growiobtable.o \
|
stdio_growiobtable.o \
|
||||||
stdio_grow_file.o \
|
stdio_grow_file.o \
|
||||||
@@ -335,9 +338,13 @@ STDIO_OBJ = \
|
|||||||
stdio_popen.o \
|
stdio_popen.o \
|
||||||
stdio_printf.o \
|
stdio_printf.o \
|
||||||
stdio_putc.o \
|
stdio_putc.o \
|
||||||
|
stdio_putc_unlocked.o \
|
||||||
stdio_putchar.o \
|
stdio_putchar.o \
|
||||||
|
stdio_putchar_unlocked.o \
|
||||||
stdio_puts.o \
|
stdio_puts.o \
|
||||||
|
stdio_record_locking.o \
|
||||||
stdio_remove.o \
|
stdio_remove.o \
|
||||||
|
stdio_remove_fd_alias.o \
|
||||||
stdio_rename.o \
|
stdio_rename.o \
|
||||||
stdio_rewind.o \
|
stdio_rewind.o \
|
||||||
stdio_scanf.o \
|
stdio_scanf.o \
|
||||||
@@ -351,6 +358,7 @@ STDIO_OBJ = \
|
|||||||
stdio_tmpnam.o \
|
stdio_tmpnam.o \
|
||||||
stdio_translateioerror.o \
|
stdio_translateioerror.o \
|
||||||
stdio_ungetc.o \
|
stdio_ungetc.o \
|
||||||
|
stdio_unlockfile.o \
|
||||||
stdio_vasprintf.o \
|
stdio_vasprintf.o \
|
||||||
stdio_vasprintf_hook_entry.o \
|
stdio_vasprintf_hook_entry.o \
|
||||||
stdio_vfprintf.o \
|
stdio_vfprintf.o \
|
||||||
@@ -412,6 +420,7 @@ STDLIB_OBJ = \
|
|||||||
stdlib_putenv.o \
|
stdlib_putenv.o \
|
||||||
stdlib_qsort.o \
|
stdlib_qsort.o \
|
||||||
stdlib_rand.o \
|
stdlib_rand.o \
|
||||||
|
stdlib_rand_r.o \
|
||||||
stdlib_realloc.o \
|
stdlib_realloc.o \
|
||||||
stdlib_red_black.o \
|
stdlib_red_black.o \
|
||||||
stdlib_setenv.o \
|
stdlib_setenv.o \
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_clearerr.c,v 1.3 2005-02-03 16:56:15 obarthel Exp $
|
* $Id: stdio_clearerr.c,v 1.4 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -58,6 +58,9 @@ clearerr(FILE *stream)
|
|||||||
|
|
||||||
assert( stream != NULL );
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL)
|
if(stream == NULL)
|
||||||
@@ -68,14 +71,15 @@ clearerr(FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(file) );
|
assert( __is_valid_iob(file) );
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
CLEAR_FLAG(file->iob_Flags,IOBF_ERROR);
|
CLEAR_FLAG(file->iob_Flags,IOBF_ERROR);
|
||||||
CLEAR_FLAG(file->iob_Flags,IOBF_EOF_REACHED);
|
CLEAR_FLAG(file->iob_Flags,IOBF_EOF_REACHED);
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
LEAVE();
|
LEAVE();
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fclose.c,v 1.5 2005-02-21 10:21:44 obarthel Exp $
|
* $Id: stdio_fclose.c,v 1.6 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -62,6 +62,8 @@ fclose(FILE *stream)
|
|||||||
|
|
||||||
assert( stream != NULL );
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
assert( file->iob_Lock == NULL || file->iob_Lock->ss_Owner == NULL );
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL)
|
if(stream == NULL)
|
||||||
@@ -139,6 +141,9 @@ fclose(FILE *stream)
|
|||||||
if(file->iob_CustomBuffer != NULL)
|
if(file->iob_CustomBuffer != NULL)
|
||||||
free(file->iob_CustomBuffer);
|
free(file->iob_CustomBuffer);
|
||||||
|
|
||||||
|
/* Free the lock semaphore now. */
|
||||||
|
FreeVec(file->iob_Lock);
|
||||||
|
|
||||||
memset(file,0,sizeof(*file));
|
memset(file,0,sizeof(*file));
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_feof.c,v 1.3 2005-02-03 16:56:16 obarthel Exp $
|
* $Id: stdio_feof.c,v 1.4 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -59,6 +59,9 @@ feof(FILE *stream)
|
|||||||
|
|
||||||
assert( stream != NULL );
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL)
|
if(stream == NULL)
|
||||||
@@ -74,14 +77,15 @@ feof(FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(file) );
|
assert( __is_valid_iob(file) );
|
||||||
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
result = FLAG_IS_SET(file->iob_Flags,IOBF_EOF_REACHED);
|
result = FLAG_IS_SET(file->iob_Flags,IOBF_EOF_REACHED);
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_ferror.c,v 1.3 2005-02-03 16:56:16 obarthel Exp $
|
* $Id: stdio_ferror.c,v 1.4 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -59,6 +59,9 @@ ferror(FILE *stream)
|
|||||||
|
|
||||||
assert( stream != NULL );
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL)
|
if(stream == NULL)
|
||||||
@@ -74,13 +77,14 @@ ferror(FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(file) );
|
assert( __is_valid_iob(file) );
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
result = FLAG_IS_SET(file->iob_Flags,IOBF_ERROR);
|
result = FLAG_IS_SET(file->iob_Flags,IOBF_ERROR);
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fflush.c,v 1.4 2005-02-21 10:21:48 obarthel Exp $
|
* $Id: stdio_fflush.c,v 1.5 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -55,6 +55,8 @@ fflush(FILE *stream)
|
|||||||
if(__check_abort_enabled)
|
if(__check_abort_enabled)
|
||||||
__check_abort();
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(UNIX_PATH_SEMANTICS)
|
#if defined(UNIX_PATH_SEMANTICS)
|
||||||
{
|
{
|
||||||
/* Flush a particular stream? */
|
/* Flush a particular stream? */
|
||||||
@@ -114,6 +116,8 @@ fflush(FILE *stream)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fgetc.c,v 1.4 2005-02-21 10:21:48 obarthel Exp $
|
* $Id: stdio_fgetc.c,v 1.5 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -95,9 +95,6 @@ __fgetc_check(FILE * stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
assert( file->iob_BufferSize > 0 );
|
assert( file->iob_BufferSize > 0 );
|
||||||
|
|
||||||
@@ -138,6 +135,11 @@ fgetc(FILE *stream)
|
|||||||
|
|
||||||
assert( stream != NULL );
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL)
|
if(stream == NULL)
|
||||||
@@ -155,5 +157,7 @@ fgetc(FILE *stream)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fgetpos.c,v 1.3 2005-02-03 16:56:16 obarthel Exp $
|
* $Id: stdio_fgetpos.c,v 1.4 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -56,6 +56,11 @@ fgetpos(FILE *stream, fpos_t *pos)
|
|||||||
|
|
||||||
assert( stream != NULL && pos != NULL );
|
assert( stream != NULL && pos != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL || pos == NULL)
|
if(stream == NULL || pos == NULL)
|
||||||
@@ -68,9 +73,6 @@ fgetpos(FILE *stream, fpos_t *pos)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
position = ftell(stream);
|
position = ftell(stream);
|
||||||
if(position == -1)
|
if(position == -1)
|
||||||
{
|
{
|
||||||
@@ -85,6 +87,8 @@ fgetpos(FILE *stream, fpos_t *pos)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fgets.c,v 1.4 2005-02-21 10:21:48 obarthel Exp $
|
* $Id: stdio_fgets.c,v 1.5 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -57,6 +57,11 @@ fgets(char *s,int n,FILE *stream)
|
|||||||
|
|
||||||
assert( s != NULL && stream != NULL );
|
assert( s != NULL && stream != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(s == NULL || stream == NULL)
|
if(s == NULL || stream == NULL)
|
||||||
@@ -70,9 +75,6 @@ fgets(char *s,int n,FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
if(n <= 0)
|
if(n <= 0)
|
||||||
{
|
{
|
||||||
SHOWMSG("no work to be done");
|
SHOWMSG("no work to be done");
|
||||||
@@ -130,6 +132,8 @@ fgets(char *s,int n,FILE *stream)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
89
library/stdio_flockfile.c
Normal file
89
library/stdio_flockfile.c
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* $Id: stdio_flockfile.c,v 1.1 2005-02-27 18:09:10 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 _STDLIB_NULL_POINTER_CHECK_H
|
||||||
|
#include "stdlib_null_pointer_check.h"
|
||||||
|
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _STDIO_HEADERS_H
|
||||||
|
#include "stdio_headers.h"
|
||||||
|
#endif /* _STDIO_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
void
|
||||||
|
flockfile(FILE *stream)
|
||||||
|
{
|
||||||
|
struct iob * file = (struct iob *)stream;
|
||||||
|
|
||||||
|
ENTER();
|
||||||
|
|
||||||
|
SHOWPOINTER(stream);
|
||||||
|
|
||||||
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
|
{
|
||||||
|
if(stream == NULL)
|
||||||
|
{
|
||||||
|
SHOWMSG("invalid stream parameter");
|
||||||
|
|
||||||
|
__set_errno(EFAULT);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
assert( __is_valid_iob(file) );
|
||||||
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
|
|
||||||
|
if(FLAG_IS_CLEAR(file->iob_Flags,IOBF_IN_USE))
|
||||||
|
{
|
||||||
|
SHOWMSG("this file is not even in use");
|
||||||
|
|
||||||
|
__set_errno(EBADF);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(file->iob_Lock != NULL)
|
||||||
|
ObtainSemaphore(file->iob_Lock);
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
LEAVE();
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_flush.c,v 1.3 2005-02-03 16:56:16 obarthel Exp $
|
* $Id: stdio_flush.c,v 1.4 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -62,6 +62,11 @@ __flush(FILE *stream)
|
|||||||
|
|
||||||
assert( stream != NULL );
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL)
|
if(stream == NULL)
|
||||||
@@ -74,9 +79,6 @@ __flush(FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(iob) );
|
assert( __is_valid_iob(iob) );
|
||||||
assert( iob->iob_BufferWriteBytes > 0 );
|
assert( iob->iob_BufferWriteBytes > 0 );
|
||||||
assert( iob->iob_BufferSize > 0 );
|
assert( iob->iob_BufferSize > 0 );
|
||||||
@@ -95,6 +97,8 @@ __flush(FILE *stream)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fopen.c,v 1.3 2005-02-03 16:56:16 obarthel Exp $
|
* $Id: stdio_fopen.c,v 1.4 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -56,6 +56,9 @@ fopen(const char *filename, const char *mode)
|
|||||||
|
|
||||||
assert( filename != NULL && mode != NULL );
|
assert( filename != NULL && mode != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(filename == NULL || mode == NULL)
|
if(filename == NULL || mode == NULL)
|
||||||
@@ -68,9 +71,6 @@ fopen(const char *filename, const char *mode)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
slot_number = __find_vacant_iob_entry();
|
slot_number = __find_vacant_iob_entry();
|
||||||
if(slot_number < 0)
|
if(slot_number < 0)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fprintf.c,v 1.3 2005-02-03 16:56:16 obarthel Exp $
|
* $Id: stdio_fprintf.c,v 1.4 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -56,6 +56,11 @@ fprintf(FILE *stream,const char *format,...)
|
|||||||
|
|
||||||
assert( stream != NULL && format != NULL );
|
assert( stream != NULL && format != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL || format == NULL)
|
if(stream == NULL || format == NULL)
|
||||||
@@ -66,15 +71,14 @@ fprintf(FILE *stream,const char *format,...)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
va_start(arg,format);
|
va_start(arg,format);
|
||||||
result = vfprintf(stream,format,arg);
|
result = vfprintf(stream,format,arg);
|
||||||
va_end(arg);
|
va_end(arg);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fputc.c,v 1.4 2005-02-21 10:21:48 obarthel Exp $
|
* $Id: stdio_fputc.c,v 1.5 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -61,9 +61,6 @@ __fputc_check(FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(file) );
|
assert( __is_valid_iob(file) );
|
||||||
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
assert( file->iob_BufferSize > 0 );
|
assert( file->iob_BufferSize > 0 );
|
||||||
@@ -148,8 +145,13 @@ fputc(int c,FILE *stream)
|
|||||||
|
|
||||||
assert( stream != NULL );
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
if(__fputc_check(stream) < 0)
|
if(__fputc_check(stream) < 0)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
@@ -157,5 +159,7 @@ fputc(int c,FILE *stream)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fputs.c,v 1.4 2005-02-21 10:21:49 obarthel Exp $
|
* $Id: stdio_fputs.c,v 1.5 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -58,6 +58,9 @@ fputs(const char *s, FILE *stream)
|
|||||||
|
|
||||||
assert( s != NULL && stream != NULL );
|
assert( s != NULL && stream != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(s == NULL || stream == NULL)
|
if(s == NULL || stream == NULL)
|
||||||
@@ -68,8 +71,7 @@ fputs(const char *s, FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
flockfile(stream);
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(file) );
|
assert( __is_valid_iob(file) );
|
||||||
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
@@ -105,6 +107,8 @@ fputs(const char *s, FILE *stream)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fread.c,v 1.4 2005-02-21 10:21:49 obarthel Exp $
|
* $Id: stdio_fread.c,v 1.5 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -59,6 +59,11 @@ fread(void *ptr,size_t element_size,size_t count,FILE *stream)
|
|||||||
assert( ptr != NULL && stream != NULL );
|
assert( ptr != NULL && stream != NULL );
|
||||||
assert( (int)element_size >= 0 && (int)count >= 0 );
|
assert( (int)element_size >= 0 && (int)count >= 0 );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(ptr == NULL || stream == NULL)
|
if(ptr == NULL || stream == NULL)
|
||||||
@@ -71,9 +76,6 @@ fread(void *ptr,size_t element_size,size_t count,FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(file) );
|
assert( __is_valid_iob(file) );
|
||||||
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
assert( file->iob_BufferSize > 0 );
|
assert( file->iob_BufferSize > 0 );
|
||||||
@@ -141,6 +143,8 @@ fread(void *ptr,size_t element_size,size_t count,FILE *stream)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fscanf.c,v 1.3 2005-02-03 16:56:16 obarthel Exp $
|
* $Id: stdio_fscanf.c,v 1.4 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -56,6 +56,11 @@ fscanf(FILE *stream, const char *format, ...)
|
|||||||
|
|
||||||
assert(stream != NULL && format != NULL);
|
assert(stream != NULL && format != NULL);
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL || format == NULL)
|
if(stream == NULL || format == NULL)
|
||||||
@@ -68,15 +73,14 @@ fscanf(FILE *stream, const char *format, ...)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
va_start(arg,format);
|
va_start(arg,format);
|
||||||
result = __vfscanf(stream,format,arg);
|
result = __vfscanf(stream,format,arg);
|
||||||
va_end(arg);
|
va_end(arg);
|
||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fseek.c,v 1.6 2005-02-21 10:21:49 obarthel Exp $
|
* $Id: stdio_fseek.c,v 1.7 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -57,6 +57,11 @@ fseek(FILE *stream, long int offset, int wherefrom)
|
|||||||
|
|
||||||
assert(stream != NULL);
|
assert(stream != NULL);
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL)
|
if(stream == NULL)
|
||||||
@@ -69,9 +74,6 @@ fseek(FILE *stream, long int offset, int wherefrom)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(file) );
|
assert( __is_valid_iob(file) );
|
||||||
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
assert( file->iob_BufferSize > 0 );
|
assert( file->iob_BufferSize > 0 );
|
||||||
@@ -188,6 +190,8 @@ fseek(FILE *stream, long int offset, int wherefrom)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fsetpos.c,v 1.4 2005-02-21 10:21:49 obarthel Exp $
|
* $Id: stdio_fsetpos.c,v 1.5 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -55,6 +55,11 @@ fsetpos(FILE *stream, fpos_t *pos)
|
|||||||
|
|
||||||
assert( stream != NULL && pos != NULL );
|
assert( stream != NULL && pos != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL || pos == NULL)
|
if(stream == NULL || pos == NULL)
|
||||||
@@ -67,9 +72,6 @@ fsetpos(FILE *stream, fpos_t *pos)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
if(fseek(stream,(long int)(*pos),SEEK_SET) != 0)
|
if(fseek(stream,(long int)(*pos),SEEK_SET) != 0)
|
||||||
{
|
{
|
||||||
SHOWMSG("fseek failed");
|
SHOWMSG("fseek failed");
|
||||||
@@ -80,6 +82,8 @@ fsetpos(FILE *stream, fpos_t *pos)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_ftell.c,v 1.6 2005-02-21 10:21:49 obarthel Exp $
|
* $Id: stdio_ftell.c,v 1.7 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -53,6 +53,11 @@ ftell(FILE *stream)
|
|||||||
|
|
||||||
assert( stream != NULL );
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL)
|
if(stream == NULL)
|
||||||
@@ -63,9 +68,6 @@ ftell(FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(file) );
|
assert( __is_valid_iob(file) );
|
||||||
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
assert( file->iob_BufferSize > 0 );
|
assert( file->iob_BufferSize > 0 );
|
||||||
@@ -123,5 +125,7 @@ ftell(FILE *stream)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
93
library/stdio_ftrylockfile.c
Normal file
93
library/stdio_ftrylockfile.c
Normal file
@@ -0,0 +1,93 @@
|
|||||||
|
/*
|
||||||
|
* $Id: stdio_ftrylockfile.c,v 1.1 2005-02-27 18:09:10 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 _STDLIB_NULL_POINTER_CHECK_H
|
||||||
|
#include "stdlib_null_pointer_check.h"
|
||||||
|
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _STDIO_HEADERS_H
|
||||||
|
#include "stdio_headers.h"
|
||||||
|
#endif /* _STDIO_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
int
|
||||||
|
ftrylockfile(FILE *stream)
|
||||||
|
{
|
||||||
|
struct iob * file = (struct iob *)stream;
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
ENTER();
|
||||||
|
|
||||||
|
SHOWPOINTER(stream);
|
||||||
|
|
||||||
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
|
{
|
||||||
|
if(stream == NULL)
|
||||||
|
{
|
||||||
|
SHOWMSG("invalid stream parameter");
|
||||||
|
|
||||||
|
__set_errno(EFAULT);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
assert( __is_valid_iob(file) );
|
||||||
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
|
|
||||||
|
if(FLAG_IS_CLEAR(file->iob_Flags,IOBF_IN_USE))
|
||||||
|
{
|
||||||
|
SHOWMSG("this file is not even in use");
|
||||||
|
|
||||||
|
__set_errno(EBADF);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(file->iob_Lock != NULL && CANNOT AttemptSemaphore(file->iob_Lock))
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
result = 0;
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
RETURN(result);
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
89
library/stdio_funlockfile.c
Normal file
89
library/stdio_funlockfile.c
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* $Id: stdio_funlockfile.c,v 1.1 2005-02-27 18:09:10 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 _STDLIB_NULL_POINTER_CHECK_H
|
||||||
|
#include "stdlib_null_pointer_check.h"
|
||||||
|
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _STDIO_HEADERS_H
|
||||||
|
#include "stdio_headers.h"
|
||||||
|
#endif /* _STDIO_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
void
|
||||||
|
funlockfile(FILE *stream)
|
||||||
|
{
|
||||||
|
struct iob * file = (struct iob *)stream;
|
||||||
|
|
||||||
|
ENTER();
|
||||||
|
|
||||||
|
SHOWPOINTER(stream);
|
||||||
|
|
||||||
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
|
{
|
||||||
|
if(stream == NULL)
|
||||||
|
{
|
||||||
|
SHOWMSG("invalid stream parameter");
|
||||||
|
|
||||||
|
__set_errno(EFAULT);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
assert( __is_valid_iob(file) );
|
||||||
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
|
|
||||||
|
if(FLAG_IS_CLEAR(file->iob_Flags,IOBF_IN_USE))
|
||||||
|
{
|
||||||
|
SHOWMSG("this file is not even in use");
|
||||||
|
|
||||||
|
__set_errno(EBADF);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(file->iob_Lock != NULL)
|
||||||
|
ReleaseSemaphore(file->iob_Lock);
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
LEAVE();
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_fwrite.c,v 1.5 2005-02-21 10:21:49 obarthel Exp $
|
* $Id: stdio_fwrite.c,v 1.6 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -59,6 +59,11 @@ fwrite(const void *ptr,size_t element_size,size_t count,FILE *stream)
|
|||||||
assert( ptr != NULL && stream != NULL );
|
assert( ptr != NULL && stream != NULL );
|
||||||
assert( (int)element_size >= 0 && (int)count >= 0 );
|
assert( (int)element_size >= 0 && (int)count >= 0 );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(ptr == NULL || stream == NULL)
|
if(ptr == NULL || stream == NULL)
|
||||||
@@ -71,9 +76,6 @@ fwrite(const void *ptr,size_t element_size,size_t count,FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(file) );
|
assert( __is_valid_iob(file) );
|
||||||
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
assert( file->iob_BufferSize > 0 );
|
assert( file->iob_BufferSize > 0 );
|
||||||
@@ -156,6 +158,8 @@ fwrite(const void *ptr,size_t element_size,size_t count,FILE *stream)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
72
library/stdio_getc_unlocked.c
Normal file
72
library/stdio_getc_unlocked.c
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* $Id: stdio_getc_unlocked.c,v 1.1 2005-02-27 18:09:10 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 _STDLIB_NULL_POINTER_CHECK_H
|
||||||
|
#include "stdlib_null_pointer_check.h"
|
||||||
|
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _STDIO_HEADERS_H
|
||||||
|
#include "stdio_headers.h"
|
||||||
|
#endif /* _STDIO_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#undef getc_unlocked
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
int
|
||||||
|
getc_unlocked(FILE *stream)
|
||||||
|
{
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
|
{
|
||||||
|
if(stream == NULL)
|
||||||
|
{
|
||||||
|
__set_errno(EFAULT);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
|
result = __getc_unlocked(stream);
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
72
library/stdio_getchar_unlocked.c
Normal file
72
library/stdio_getchar_unlocked.c
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* $Id: stdio_getchar_unlocked.c,v 1.1 2005-02-27 18:09:10 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 _STDLIB_NULL_POINTER_CHECK_H
|
||||||
|
#include "stdlib_null_pointer_check.h"
|
||||||
|
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _STDIO_HEADERS_H
|
||||||
|
#include "stdio_headers.h"
|
||||||
|
#endif /* _STDIO_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#undef getchar_unlocked
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
int
|
||||||
|
getchar_unlocked(void)
|
||||||
|
{
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
assert( stdin != NULL );
|
||||||
|
|
||||||
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
|
{
|
||||||
|
if(stdin == NULL)
|
||||||
|
{
|
||||||
|
__set_errno(EFAULT);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
|
result = __getc_unlocked(stdin);
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_gets.c,v 1.4 2005-02-21 10:21:49 obarthel Exp $
|
* $Id: stdio_gets.c,v 1.5 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -55,6 +55,11 @@ gets(char *s)
|
|||||||
|
|
||||||
assert( s != NULL && stdin != NULL );
|
assert( s != NULL && stdin != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stdin);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(s == NULL || stdin == NULL)
|
if(s == NULL || stdin == NULL)
|
||||||
@@ -69,9 +74,6 @@ gets(char *s)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
/* Take care of the checks and data structure changes that
|
/* Take care of the checks and data structure changes that
|
||||||
* need to be handled only once for this stream.
|
* need to be handled only once for this stream.
|
||||||
*/
|
*/
|
||||||
@@ -118,6 +120,8 @@ gets(char *s)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stdin);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_headers.h,v 1.15 2005-02-20 15:46:52 obarthel Exp $
|
* $Id: stdio_headers.h,v 1.16 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -262,6 +262,8 @@ struct iob
|
|||||||
|
|
||||||
UBYTE iob_SingleByte; /* Fall-back buffer for 'unbuffered'
|
UBYTE iob_SingleByte; /* Fall-back buffer for 'unbuffered'
|
||||||
files */
|
files */
|
||||||
|
|
||||||
|
struct SignalSemaphore * iob_Lock; /* For thread locking */
|
||||||
};
|
};
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_init_exit.c,v 1.17 2005-02-20 13:19:40 obarthel Exp $
|
* $Id: stdio_init_exit.c,v 1.18 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -111,6 +111,7 @@ __stdio_init(void)
|
|||||||
{
|
{
|
||||||
const int num_standard_files = (STDERR_FILENO-STDIN_FILENO+1);
|
const int num_standard_files = (STDERR_FILENO-STDIN_FILENO+1);
|
||||||
|
|
||||||
|
struct SignalSemaphore * lock;
|
||||||
BPTR default_file;
|
BPTR default_file;
|
||||||
ULONG fd_flags,iob_flags;
|
ULONG fd_flags,iob_flags;
|
||||||
int result = ERROR;
|
int result = ERROR;
|
||||||
@@ -187,6 +188,14 @@ __stdio_init(void)
|
|||||||
if(buffer == NULL)
|
if(buffer == NULL)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
/* Allocate memory for an arbitration mechanism, then
|
||||||
|
initialize it. */
|
||||||
|
lock = AllocVec(sizeof(*lock),MEMF_ANY|MEMF_PUBLIC);
|
||||||
|
if(lock == NULL)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
InitSemaphore(lock);
|
||||||
|
|
||||||
/* Check if this stream is attached to a console window. */
|
/* Check if this stream is attached to a console window. */
|
||||||
if(default_file != ZERO)
|
if(default_file != ZERO)
|
||||||
{
|
{
|
||||||
@@ -208,7 +217,8 @@ __stdio_init(void)
|
|||||||
aligned_buffer,BUFSIZ,
|
aligned_buffer,BUFSIZ,
|
||||||
i,
|
i,
|
||||||
i,
|
i,
|
||||||
iob_flags);
|
iob_flags,
|
||||||
|
lock);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If the program was launched from Workbench, we continue by
|
/* If the program was launched from Workbench, we continue by
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_initializeiob.c,v 1.3 2005-02-20 13:19:40 obarthel Exp $
|
* $Id: stdio_initializeiob.c,v 1.4 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -46,7 +46,8 @@ __initialize_iob(
|
|||||||
int buffer_size,
|
int buffer_size,
|
||||||
int file_descriptor,
|
int file_descriptor,
|
||||||
int slot_number,
|
int slot_number,
|
||||||
ULONG flags)
|
ULONG flags,
|
||||||
|
struct SignalSemaphore * lock)
|
||||||
{
|
{
|
||||||
assert( iob != NULL && action_function != NULL );
|
assert( iob != NULL && action_function != NULL );
|
||||||
|
|
||||||
@@ -59,4 +60,5 @@ __initialize_iob(
|
|||||||
iob->iob_SlotNumber = slot_number;
|
iob->iob_SlotNumber = slot_number;
|
||||||
iob->iob_Flags = flags;
|
iob->iob_Flags = flags;
|
||||||
iob->iob_Action = action_function;
|
iob->iob_Action = action_function;
|
||||||
|
iob->iob_Lock = lock;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_openiob.c,v 1.7 2005-02-20 13:19:40 obarthel Exp $
|
* $Id: stdio_openiob.c,v 1.8 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -46,6 +46,7 @@
|
|||||||
int
|
int
|
||||||
__open_iob(const char *filename, const char *mode, int file_descriptor, int slot_number)
|
__open_iob(const char *filename, const char *mode, int file_descriptor, int slot_number)
|
||||||
{
|
{
|
||||||
|
struct SignalSemaphore * lock;
|
||||||
ULONG file_flags;
|
ULONG file_flags;
|
||||||
int result = -1;
|
int result = -1;
|
||||||
int open_mode;
|
int open_mode;
|
||||||
@@ -162,6 +163,14 @@ __open_iob(const char *filename, const char *mode, int file_descriptor, int slot
|
|||||||
CLEAR_FLAG(fd->fd_Flags,FDF_APPEND);
|
CLEAR_FLAG(fd->fd_Flags,FDF_APPEND);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Allocate memory for an arbitration mechanism, then
|
||||||
|
initialize it. */
|
||||||
|
lock = AllocVec(sizeof(*lock),MEMF_ANY|MEMF_PUBLIC);
|
||||||
|
if(lock == NULL)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
InitSemaphore(lock);
|
||||||
|
|
||||||
/* Figure out the buffered file access mode by looking at the open mode. */
|
/* Figure out the buffered file access mode by looking at the open mode. */
|
||||||
file_flags = IOBF_IN_USE | IOBF_NO_NUL;
|
file_flags = IOBF_IN_USE | IOBF_NO_NUL;
|
||||||
|
|
||||||
@@ -176,7 +185,8 @@ __open_iob(const char *filename, const char *mode, int file_descriptor, int slot
|
|||||||
aligned_buffer,BUFSIZ,
|
aligned_buffer,BUFSIZ,
|
||||||
file_descriptor,
|
file_descriptor,
|
||||||
slot_number,
|
slot_number,
|
||||||
file_flags);
|
file_flags,
|
||||||
|
lock);
|
||||||
|
|
||||||
buffer = NULL;
|
buffer = NULL;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_protos.h,v 1.7 2005-02-20 13:19:40 obarthel Exp $
|
* $Id: stdio_protos.h,v 1.8 2005-02-27 18:09:10 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -103,7 +103,7 @@ extern int __find_vacant_fd_entry(void);
|
|||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
/* stdio_initializeiob.c */
|
/* stdio_initializeiob.c */
|
||||||
extern void __initialize_iob(struct iob * iob,file_action_iob_t action_function,STRPTR custom_buffer,STRPTR buffer,int buffer_size,int file_descriptor,int slot_number,ULONG flags);
|
extern void __initialize_iob(struct iob * iob,file_action_iob_t action_function,STRPTR custom_buffer,STRPTR buffer,int buffer_size,int file_descriptor,int slot_number,ULONG flags,struct SignalSemaphore * lock);
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
72
library/stdio_putc_unlocked.c
Normal file
72
library/stdio_putc_unlocked.c
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* $Id: stdio_putc_unlocked.c,v 1.1 2005-02-27 18:09:10 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 _STDLIB_NULL_POINTER_CHECK_H
|
||||||
|
#include "stdlib_null_pointer_check.h"
|
||||||
|
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _STDIO_HEADERS_H
|
||||||
|
#include "stdio_headers.h"
|
||||||
|
#endif /* _STDIO_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#undef putc_unlocked
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
int
|
||||||
|
putc_unlocked(int c,FILE *stream)
|
||||||
|
{
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
|
{
|
||||||
|
if(stream == NULL)
|
||||||
|
{
|
||||||
|
__set_errno(EFAULT);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
|
result = __putc_unlocked(c,stream);
|
||||||
|
|
||||||
|
out:
|
||||||
|
|
||||||
|
return(result);
|
||||||
|
}
|
||||||
72
library/stdio_putchar_unlocked.c
Normal file
72
library/stdio_putchar_unlocked.c
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
/*
|
||||||
|
* $Id: stdio_putchar_unlocked.c,v 1.1 2005-02-27 18:09:11 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 _STDLIB_NULL_POINTER_CHECK_H
|
||||||
|
#include "stdlib_null_pointer_check.h"
|
||||||
|
#endif /* _STDLIB_NULL_POINTER_CHECK_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#ifndef _STDIO_HEADERS_H
|
||||||
|
#include "stdio_headers.h"
|
||||||
|
#endif /* _STDIO_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
#undef putchar_unlocked
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
int
|
||||||
|
putchar_unlocked(int c)
|
||||||
|
{
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
assert( stdout != NULL );
|
||||||
|
|
||||||
|
#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);
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_puts.c,v 1.5 2005-02-21 10:22:00 obarthel Exp $
|
* $Id: stdio_puts.c,v 1.6 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -57,6 +57,11 @@ puts(const char *s)
|
|||||||
|
|
||||||
assert( s != NULL );
|
assert( s != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stdout);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(s == NULL)
|
if(s == NULL)
|
||||||
@@ -67,9 +72,6 @@ puts(const char *s)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(file) );
|
assert( __is_valid_iob(file) );
|
||||||
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
assert( file->iob_BufferSize > 0 );
|
assert( file->iob_BufferSize > 0 );
|
||||||
@@ -107,6 +109,8 @@ puts(const char *s)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
funlockfile(stdout);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_rewind.c,v 1.2 2005-01-02 09:07:08 obarthel Exp $
|
* $Id: stdio_rewind.c,v 1.3 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -45,7 +45,11 @@ rewind(FILE *stream)
|
|||||||
if(__check_abort_enabled)
|
if(__check_abort_enabled)
|
||||||
__check_abort();
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
clearerr(stream);
|
clearerr(stream);
|
||||||
|
|
||||||
fseek(stream,0,SEEK_SET);
|
fseek(stream,0,SEEK_SET);
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_setbuf.c,v 1.3 2005-02-03 16:56:16 obarthel Exp $
|
* $Id: stdio_setbuf.c,v 1.4 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -53,6 +53,9 @@ setbuf(FILE *stream,char *buf)
|
|||||||
|
|
||||||
assert(stream != NULL);
|
assert(stream != NULL);
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL)
|
if(stream == NULL)
|
||||||
@@ -65,9 +68,6 @@ setbuf(FILE *stream,char *buf)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
if(buf == NULL)
|
if(buf == NULL)
|
||||||
setvbuf(stream,NULL,IOBF_BUFFER_MODE_NONE,0);
|
setvbuf(stream,NULL,IOBF_BUFFER_MODE_NONE,0);
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_setvbuf.c,v 1.5 2005-02-21 10:22:00 obarthel Exp $
|
* $Id: stdio_setvbuf.c,v 1.6 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -65,6 +65,11 @@ setvbuf(FILE *stream,char *buf,int bufmode,size_t size)
|
|||||||
|
|
||||||
assert( stream != NULL );
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL)
|
if(stream == NULL)
|
||||||
@@ -77,9 +82,6 @@ setvbuf(FILE *stream,char *buf,int bufmode,size_t size)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
if(bufmode < IOBF_BUFFER_MODE_FULL ||
|
if(bufmode < IOBF_BUFFER_MODE_FULL ||
|
||||||
bufmode > IOBF_BUFFER_MODE_NONE)
|
bufmode > IOBF_BUFFER_MODE_NONE)
|
||||||
{
|
{
|
||||||
@@ -188,6 +190,8 @@ setvbuf(FILE *stream,char *buf,int bufmode,size_t size)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
if(new_buffer != NULL)
|
if(new_buffer != NULL)
|
||||||
free(new_buffer);
|
free(new_buffer);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_sscanf.c,v 1.4 2005-02-20 13:19:40 obarthel Exp $
|
* $Id: stdio_sscanf.c,v 1.5 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -78,7 +78,8 @@ sscanf(const char *s,const char *format, ...)
|
|||||||
local_buffer,sizeof(local_buffer),
|
local_buffer,sizeof(local_buffer),
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
IOBF_IN_USE | IOBF_READ | IOBF_BUFFER_MODE_FULL | IOBF_INTERNAL);
|
IOBF_IN_USE | IOBF_READ | IOBF_BUFFER_MODE_FULL | IOBF_INTERNAL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
string_iob.iob_String = (STRPTR)s;
|
string_iob.iob_String = (STRPTR)s;
|
||||||
string_iob.iob_StringLength = strlen(s);
|
string_iob.iob_StringLength = strlen(s);
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_ungetc.c,v 1.4 2005-02-21 10:22:01 obarthel Exp $
|
* $Id: stdio_ungetc.c,v 1.5 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -51,6 +51,11 @@ ungetc(int c,FILE *stream)
|
|||||||
|
|
||||||
assert( stream != NULL );
|
assert( stream != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL)
|
if(stream == NULL)
|
||||||
@@ -63,9 +68,6 @@ ungetc(int c,FILE *stream)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(file) );
|
assert( __is_valid_iob(file) );
|
||||||
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(file->iob_Flags,IOBF_IN_USE) );
|
||||||
assert( file->iob_BufferSize > 0 );
|
assert( file->iob_BufferSize > 0 );
|
||||||
@@ -140,5 +142,7 @@ ungetc(int c,FILE *stream)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
46
library/stdio_unlockfile.c
Normal file
46
library/stdio_unlockfile.c
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* $Id: stdio_unlockfile.c,v 1.1 2005-02-27 18:09:11 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 _STDIO_HEADERS_H
|
||||||
|
#include "stdio_headers.h"
|
||||||
|
#endif /* _STDIO_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
int
|
||||||
|
__unlockfile(FILE *stream,int c)
|
||||||
|
{
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
|
return(c);
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_vasprintf.c,v 1.7 2005-02-20 13:19:40 obarthel Exp $
|
* $Id: stdio_vasprintf.c,v 1.8 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -93,7 +93,8 @@ __vasprintf(const char *file,int line,char **ret,const char *format,va_list arg)
|
|||||||
local_buffer,sizeof(local_buffer),
|
local_buffer,sizeof(local_buffer),
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
IOBF_IN_USE | IOBF_WRITE | IOBF_BUFFER_MODE_NONE | IOBF_INTERNAL);
|
IOBF_IN_USE | IOBF_WRITE | IOBF_BUFFER_MODE_NONE | IOBF_INTERNAL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
string_iob.iob_String = NULL;
|
string_iob.iob_String = NULL;
|
||||||
string_iob.iob_StringSize = 0;
|
string_iob.iob_StringSize = 0;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_vfprintf.c,v 1.11 2005-02-25 10:14:21 obarthel Exp $
|
* $Id: stdio_vfprintf.c,v 1.12 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -151,6 +151,11 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
|
|
||||||
assert( stream != NULL && format != NULL && arg != NULL );
|
assert( stream != NULL && format != NULL && arg != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL || format == NULL)
|
if(stream == NULL || format == NULL)
|
||||||
@@ -1512,6 +1517,8 @@ vfprintf(FILE * stream,const char * format, va_list arg)
|
|||||||
result = EOF;
|
result = EOF;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_vfscanf.c,v 1.9 2005-02-21 10:22:01 obarthel Exp $
|
* $Id: stdio_vfscanf.c,v 1.10 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -88,6 +88,11 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
|
|
||||||
assert( stream != NULL && format != NULL );
|
assert( stream != NULL && format != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(stream);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(stream == NULL || format == NULL)
|
if(stream == NULL || format == NULL)
|
||||||
@@ -1572,6 +1577,8 @@ __vfscanf(FILE *stream, const char *format, va_list arg)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(stream);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_vsnprintf.c,v 1.5 2005-02-20 13:19:40 obarthel Exp $
|
* $Id: stdio_vsnprintf.c,v 1.6 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -83,7 +83,8 @@ vsnprintf(char *buffer,size_t size,const char *format,va_list arg)
|
|||||||
local_buffer,sizeof(local_buffer),
|
local_buffer,sizeof(local_buffer),
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
IOBF_IN_USE | IOBF_WRITE | IOBF_NO_NUL | IOBF_BUFFER_MODE_NONE | IOBF_INTERNAL);
|
IOBF_IN_USE | IOBF_WRITE | IOBF_NO_NUL | IOBF_BUFFER_MODE_NONE | IOBF_INTERNAL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
/* Store up to 'size-1' characters in the output buffer. This
|
/* Store up to 'size-1' characters in the output buffer. This
|
||||||
does not include the terminating NUL character, which we
|
does not include the terminating NUL character, which we
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdio_vsprintf.c,v 1.4 2005-02-20 13:19:40 obarthel Exp $
|
* $Id: stdio_vsprintf.c,v 1.5 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -70,7 +70,8 @@ vsprintf(char *s,const char *format,va_list arg)
|
|||||||
buffer,sizeof(buffer),
|
buffer,sizeof(buffer),
|
||||||
-1,
|
-1,
|
||||||
-1,
|
-1,
|
||||||
IOBF_IN_USE | IOBF_WRITE | IOBF_BUFFER_MODE_NONE | IOBF_INTERNAL);
|
IOBF_IN_USE | IOBF_WRITE | IOBF_BUFFER_MODE_NONE | IOBF_INTERNAL,
|
||||||
|
NULL);
|
||||||
|
|
||||||
string_iob.iob_String = (STRPTR)s;
|
string_iob.iob_String = (STRPTR)s;
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdlib_headers.h,v 1.8 2005-02-25 10:14:21 obarthel Exp $
|
* $Id: stdlib_headers.h,v 1.9 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -194,7 +194,7 @@ struct MemoryTree
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
extern unsigned NOCOMMON __random_seed;
|
extern unsigned int NOCOMMON __random_seed;
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdlib_rand.c,v 1.3 2005-01-02 09:07:18 obarthel Exp $
|
* $Id: stdlib_rand.c,v 1.4 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -37,34 +37,16 @@
|
|||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
/* Parameters of a pseudo-random-number generator from Knuth's
|
unsigned int __random_seed = 1;
|
||||||
* "The Art of Computer Programming, Volume 2: Seminumerical
|
|
||||||
* Algorithms" (3rd edition), pp. 185-186.
|
|
||||||
*/
|
|
||||||
#define MM 2147483647 /* a Mersenne prime */
|
|
||||||
#define AA 48271 /* this does well in the spectral test */
|
|
||||||
#define QQ 44488 /* (long)(MM/AA) */
|
|
||||||
#define RR 3399 /* MM % AA; it is important that RR < QQ */
|
|
||||||
|
|
||||||
/****************************************************************************/
|
|
||||||
|
|
||||||
/* NOTE: for Knuth's algorithm below the seed must not be zero. */
|
|
||||||
unsigned __random_seed = 1;
|
|
||||||
|
|
||||||
/****************************************************************************/
|
/****************************************************************************/
|
||||||
|
|
||||||
int
|
int
|
||||||
rand(void)
|
rand(void)
|
||||||
{
|
{
|
||||||
int X;
|
int result;
|
||||||
|
|
||||||
X = (int)__random_seed;
|
result = rand_r(&__random_seed);
|
||||||
|
|
||||||
X = AA * (X % QQ) - RR * (long)(X / QQ);
|
return(result);
|
||||||
if(X < 0)
|
|
||||||
X += MM;
|
|
||||||
|
|
||||||
__random_seed = (unsigned)X;
|
|
||||||
|
|
||||||
return(X);
|
|
||||||
}
|
}
|
||||||
|
|||||||
67
library/stdlib_rand_r.c
Normal file
67
library/stdlib_rand_r.c
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
/*
|
||||||
|
* $Id: stdlib_rand_r.c,v 1.1 2005-02-27 18:09:11 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 _STDLIB_HEADERS_H
|
||||||
|
#include "stdlib_headers.h"
|
||||||
|
#endif /* _STDLIB_HEADERS_H */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
/* Parameters of a pseudo-random-number generator from Knuth's
|
||||||
|
"The Art of Computer Programming, Volume 2: Seminumerical Algorithms"
|
||||||
|
(3rd edition), pp. 185-186. */
|
||||||
|
|
||||||
|
#define MM 2147483647 /* a Mersenne prime */
|
||||||
|
#define AA 48271 /* this does well in the spectral test */
|
||||||
|
#define QQ 44488 /* (long)(MM/AA) */
|
||||||
|
#define RR 3399 /* MM % AA; it is important that RR < QQ */
|
||||||
|
|
||||||
|
/****************************************************************************/
|
||||||
|
|
||||||
|
int
|
||||||
|
rand_r(unsigned int * seed)
|
||||||
|
{
|
||||||
|
int X;
|
||||||
|
|
||||||
|
X = (int)((*seed) & 0x7fffffff);
|
||||||
|
if(X == 0)
|
||||||
|
X = 1; /* NOTE: for Knuth's algorithm the seed must not be zero. */
|
||||||
|
|
||||||
|
X = AA * (X % QQ) - RR * (long)(X / QQ);
|
||||||
|
if(X < 0)
|
||||||
|
X += MM;
|
||||||
|
|
||||||
|
(*seed) = (unsigned int)X;
|
||||||
|
|
||||||
|
return(X);
|
||||||
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: stdlib_srand.c,v 1.2 2005-01-02 09:07:18 obarthel Exp $
|
* $Id: stdlib_srand.c,v 1.3 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -40,6 +40,5 @@
|
|||||||
void
|
void
|
||||||
srand(unsigned seed)
|
srand(unsigned seed)
|
||||||
{
|
{
|
||||||
/* We have to make sure that the seed is never zero. */
|
__random_seed = seed;
|
||||||
__random_seed = (seed & 0x7FFFFFFF) | 1;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* $Id: unistd_fileno.c,v 1.4 2005-02-03 16:56:17 obarthel Exp $
|
* $Id: unistd_fileno.c,v 1.5 2005-02-27 18:09:11 obarthel Exp $
|
||||||
*
|
*
|
||||||
* :ts=4
|
* :ts=4
|
||||||
*
|
*
|
||||||
@@ -59,6 +59,11 @@ fileno(FILE * file)
|
|||||||
|
|
||||||
assert( file != NULL );
|
assert( file != NULL );
|
||||||
|
|
||||||
|
if(__check_abort_enabled)
|
||||||
|
__check_abort();
|
||||||
|
|
||||||
|
flockfile(file);
|
||||||
|
|
||||||
#if defined(CHECK_FOR_NULL_POINTERS)
|
#if defined(CHECK_FOR_NULL_POINTERS)
|
||||||
{
|
{
|
||||||
if(file == NULL)
|
if(file == NULL)
|
||||||
@@ -71,9 +76,6 @@ fileno(FILE * file)
|
|||||||
}
|
}
|
||||||
#endif /* CHECK_FOR_NULL_POINTERS */
|
#endif /* CHECK_FOR_NULL_POINTERS */
|
||||||
|
|
||||||
if(__check_abort_enabled)
|
|
||||||
__check_abort();
|
|
||||||
|
|
||||||
assert( __is_valid_iob(iob) );
|
assert( __is_valid_iob(iob) );
|
||||||
assert( FLAG_IS_SET(iob->iob_Flags,IOBF_IN_USE) );
|
assert( FLAG_IS_SET(iob->iob_Flags,IOBF_IN_USE) );
|
||||||
|
|
||||||
@@ -91,6 +93,8 @@ fileno(FILE * file)
|
|||||||
|
|
||||||
out:
|
out:
|
||||||
|
|
||||||
|
funlockfile(file);
|
||||||
|
|
||||||
RETURN(result);
|
RETURN(result);
|
||||||
return(result);
|
return(result);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user