diff --git a/library/changes b/library/changes index 971f30a..c95dee5 100644 --- a/library/changes +++ b/library/changes @@ -9,6 +9,15 @@ - The "ptrdiff_t" definition in now defaults to type 'int' rather than 'long int'. +- The "char" limits in are now set up according to the current + compiler settings, which can either default to an unsigned or + signed definition. + +- Changed the rules again for the use of stderr/stdout redirection when + printing error messages. It is always safe to redirect them now and + no requester will appear unless you specifically set the value of the + "__no_standard_io" variable to TRUE in your program. + c.lib 1.185 (2.1.2005) diff --git a/library/include/limits.h b/library/include/limits.h index ab5a0c6..a9e2639 100644 --- a/library/include/limits.h +++ b/library/include/limits.h @@ -1,5 +1,5 @@ /* - * $Id: limits.h,v 1.4 2005-01-02 09:07:21 obarthel Exp $ + * $Id: limits.h,v 1.5 2005-01-09 09:40:33 obarthel Exp $ * * :ts=4 * @@ -36,24 +36,53 @@ /****************************************************************************/ -#define CHAR_BIT 8 -#define CHAR_MAX 127 -#define CHAR_MIN -128 -#define INT_MAX 2147483647L -#define INT_MIN (-2147483647L - 1) -#define LONG_MAX 2147483647L -#define LONG_MIN (-2147483647L - 1) -#define SCHAR_MAX 127 -#define SCHAR_MIN -128 -#define SHRT_MAX 32767 +#define CHAR_BIT 8 + +/****************************************************************************/ + +#define SCHAR_MIN -128 +#define SCHAR_MAX 127 +#define UCHAR_MAX 255 + +/****************************************************************************/ + +/* + * The following defines the range a 'char' can cover by checking a + * preprocessor symbol; we support both SAS/C and GCC here. + */ + +#if (defined(__GNUC__) && defined(__CHAR_UNSIGNED__)) || (defined(__SASC) && defined(_UNSCHAR)) + +#define CHAR_MIN 0 +#define CHAR_MAX 255 + +#else + +#define CHAR_MIN -128 +#define CHAR_MAX 127 + +#endif /* (__GNUC__ && __CHAR_UNSIGNED) || (__SASC && _UNSCHAR) */ + +/****************************************************************************/ + #define SHRT_MIN -32768 -#define UCHAR_MAX 255 -#define UINT_MAX 4294967295UL -#define ULONG_MAX 4294967295UL +#define SHRT_MAX 32767 #define USHRT_MAX 65535 /****************************************************************************/ +#define INT_MIN (-2147483647L - 1) +#define INT_MAX 2147483647L +#define UINT_MAX 4294967295UL + +/****************************************************************************/ + +#define LONG_MIN (-2147483647L - 1) +#define LONG_MAX 2147483647L +#define ULONG_MAX 4294967295UL + +/****************************************************************************/ + /* The following is not part of the ISO 'C' (1994) standard. */ /****************************************************************************/ diff --git a/library/stdlib_assertion_failure.c b/library/stdlib_assertion_failure.c index b2e20b9..3990a5f 100644 --- a/library/stdlib_assertion_failure.c +++ b/library/stdlib_assertion_failure.c @@ -1,5 +1,5 @@ /* - * $Id: stdlib_assertion_failure.c,v 1.5 2005-01-08 10:21:25 obarthel Exp $ + * $Id: stdlib_assertion_failure.c,v 1.6 2005-01-09 09:40:32 obarthel Exp $ * * :ts=4 * @@ -61,50 +61,7 @@ __assertion_failure( /* Don't drop into a recursion. */ if(been_here_before++ == 0) { - BOOL use_stderr = FALSE; - - /* Figure out if the assertion failure message can be printed - on the stderr stream. */ - if(__iob != NULL && NOT __no_standard_io) - { - struct iob * iob; - - iob = (struct iob *)stderr; - - if(iob != NULL && - FLAG_IS_SET(iob->iob_Flags,IOBF_IN_USE) && - FLAG_IS_SET(iob->iob_Flags,IOBF_WRITE)) - { - struct fd * fd; - - fd = __get_file_descriptor(iob->iob_Descriptor); - - if(fd != NULL && - FLAG_IS_SET(fd->fd_Flags,FDF_IN_USE) && - FLAG_IS_SET(fd->fd_Flags,FDF_WRITE) && - FLAG_IS_CLEAR(fd->fd_Flags,FDF_IS_SOCKET)) - { - struct FileHandle * fh = BADDR(fd->fd_DefaultFile); - - /* Check if this is really not redirected to "NIL:". */ - if(fh->fh_Type != NULL) - use_stderr = TRUE; - } - } - } - - if(use_stderr) - { - if(__program_name != NULL) - fprintf(stderr,"[%s] ",__program_name); - - fprintf(stderr, - "%s:%d: failed assertion '%s'\n", - file_name, - line_number, - expression); - } - else + if(__no_standard_io || __WBenchMsg != NULL) { #if defined(__amigaos4__) struct IntuitionIFace * IIntuition = NULL; @@ -150,6 +107,17 @@ __assertion_failure( CloseLibrary(IntuitionBase); } } + else + { + if(__program_name != NULL) + fprintf(stderr,"[%s] ",__program_name); + + fprintf(stderr, + "%s:%d: failed assertion '%s'\n", + file_name, + line_number, + expression); + } abort(); } diff --git a/library/stdlib_showerror.c b/library/stdlib_showerror.c index 18c6beb..e24e80f 100644 --- a/library/stdlib_showerror.c +++ b/library/stdlib_showerror.c @@ -1,5 +1,5 @@ /* - * $Id: stdlib_showerror.c,v 1.6 2005-01-08 10:21:25 obarthel Exp $ + * $Id: stdlib_showerror.c,v 1.7 2005-01-09 09:40:32 obarthel Exp $ * * :ts=4 * @@ -78,8 +78,6 @@ __show_error(const char * message) struct Library * IntuitionBase; struct Library * DOSBase; - struct FileHandle * fh; - BPTR output; PROFILE_OFF(); @@ -98,23 +96,11 @@ __show_error(const char * message) IIntuition = (struct IntuitionIFace *)GetInterface(IntuitionBase, "main", 1, 0); if (IIntuition == NULL) goto out; - - /* Try to print the error message on the default error output stream. */ - output = ErrorOutput(); - if(output == ZERO) - output = Output(); - } - #else - { - output = Output(); } #endif /* __amigaos4__ */ - /* This is for checking if the stream was redirected to "NIL:". */ - fh = BADDR(output); - /* If we can't hope to print the error message, show a requester instead. */ - if(__detach || __no_standard_io || __WBenchMsg != NULL || fh == NULL || fh->fh_Type == NULL) + if(__no_standard_io || __WBenchMsg != NULL) { if(IntuitionBase->lib_Version >= 37) { @@ -164,8 +150,31 @@ __show_error(const char * message) } else { - Write(output,(STRPTR)message,(LONG)strlen(message)); - Write(output,"\n",1); + BPTR output; + + #if defined(__amigaos4__) + { + /* Try to print the error message on the default error output stream. */ + output = ErrorOutput(); + if(output == ZERO) + output = Output(); + } + #else + { + struct Process * this_process = (struct Process *)FindTask(NULL); + + if(this_process->pr_CES != ZERO) + output = this_process->pr_CES; + else + output = Output(); + } + #endif /* __amigaos4__ */ + + if(output != ZERO) + { + Write(output,(STRPTR)message,(LONG)strlen(message)); + Write(output,"\n",1); + } } out: