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

- The "char" limits in <limits.h> 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.


git-svn-id: file:///Users/olsen/Code/migration-svn-zu-git/logical-line-staging/clib2/trunk@14792 87f5fb63-7c3d-0410-a384-fd976d0f7a62
This commit is contained in:
Olaf Barthel
2005-01-09 09:40:33 +00:00
parent f519aafaca
commit e571888f4f
4 changed files with 92 additions and 77 deletions

View File

@ -9,6 +9,15 @@
- The "ptrdiff_t" definition in <stddef.h> now defaults to type 'int' rather
than 'long int'.
- The "char" limits in <limits.h> 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)

View File

@ -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. */
/****************************************************************************/

View File

@ -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();
}

View File

@ -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: