forked from Imagelibrary/rtems
Added functions to access the errno of the native system when using the
newlib C library. Fixed bug where length did not take into account amount added for alignment requirements.
This commit is contained in:
42
c/src/exec/libcsupport/src/hosterr.c
Normal file
42
c/src/exec/libcsupport/src/hosterr.c
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Routines to access a host errno
|
||||
*
|
||||
* COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
* All rights assigned to U.S. Government, 1994.
|
||||
*
|
||||
* This material may be reproduced by or for the U.S. Government pursuant
|
||||
* to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
* notice must appear in all copies of this file and its derivatives.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <rtems.h>
|
||||
#include <errno.h>
|
||||
|
||||
int host_errno(void);
|
||||
|
||||
/*
|
||||
* copy host errno, if any to thread aware errno, if any
|
||||
*/
|
||||
|
||||
void fix_syscall_errno(void)
|
||||
{
|
||||
errno = host_errno();
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the host system errno, if any
|
||||
* When using newlib (or possibly other libc's) on top of UNIX
|
||||
* the errno returned by system calls may be unavailable due
|
||||
* to trickery of making errno thread aware.
|
||||
* This provides a kludge of getting at it.
|
||||
*/
|
||||
|
||||
#undef errno
|
||||
extern int errno;
|
||||
int host_errno(void)
|
||||
{
|
||||
return errno;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ void RTEMS_Malloc_Initialize(
|
||||
{
|
||||
rtems_status_code status;
|
||||
void *starting_address;
|
||||
rtems_unsigned32 old_address;
|
||||
rtems_unsigned32 u32_address;
|
||||
|
||||
/*
|
||||
@@ -73,8 +74,14 @@ void RTEMS_Malloc_Initialize(
|
||||
}
|
||||
|
||||
if (u32_address & (CPU_ALIGNMENT-1)) {
|
||||
old_address = u32_address;
|
||||
u32_address = (u32_address + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
|
||||
/* XXX: if we do any alignment .. then length should be shortened */
|
||||
|
||||
/*
|
||||
* Adjust the length by whatever we aligned by
|
||||
*/
|
||||
|
||||
length -= u32_address - old_address;
|
||||
}
|
||||
|
||||
starting_address = (void *)u32_address;
|
||||
|
||||
42
c/src/lib/libc/hosterr.c
Normal file
42
c/src/lib/libc/hosterr.c
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Routines to access a host errno
|
||||
*
|
||||
* COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
* All rights assigned to U.S. Government, 1994.
|
||||
*
|
||||
* This material may be reproduced by or for the U.S. Government pursuant
|
||||
* to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
* notice must appear in all copies of this file and its derivatives.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <rtems.h>
|
||||
#include <errno.h>
|
||||
|
||||
int host_errno(void);
|
||||
|
||||
/*
|
||||
* copy host errno, if any to thread aware errno, if any
|
||||
*/
|
||||
|
||||
void fix_syscall_errno(void)
|
||||
{
|
||||
errno = host_errno();
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the host system errno, if any
|
||||
* When using newlib (or possibly other libc's) on top of UNIX
|
||||
* the errno returned by system calls may be unavailable due
|
||||
* to trickery of making errno thread aware.
|
||||
* This provides a kludge of getting at it.
|
||||
*/
|
||||
|
||||
#undef errno
|
||||
extern int errno;
|
||||
int host_errno(void)
|
||||
{
|
||||
return errno;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ void RTEMS_Malloc_Initialize(
|
||||
{
|
||||
rtems_status_code status;
|
||||
void *starting_address;
|
||||
rtems_unsigned32 old_address;
|
||||
rtems_unsigned32 u32_address;
|
||||
|
||||
/*
|
||||
@@ -73,8 +74,14 @@ void RTEMS_Malloc_Initialize(
|
||||
}
|
||||
|
||||
if (u32_address & (CPU_ALIGNMENT-1)) {
|
||||
old_address = u32_address;
|
||||
u32_address = (u32_address + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
|
||||
/* XXX: if we do any alignment .. then length should be shortened */
|
||||
|
||||
/*
|
||||
* Adjust the length by whatever we aligned by
|
||||
*/
|
||||
|
||||
length -= u32_address - old_address;
|
||||
}
|
||||
|
||||
starting_address = (void *)u32_address;
|
||||
|
||||
42
cpukit/libcsupport/src/hosterr.c
Normal file
42
cpukit/libcsupport/src/hosterr.c
Normal file
@@ -0,0 +1,42 @@
|
||||
/*
|
||||
* Routines to access a host errno
|
||||
*
|
||||
* COPYRIGHT (c) 1989, 1990, 1991, 1992, 1993, 1994.
|
||||
* On-Line Applications Research Corporation (OAR).
|
||||
* All rights assigned to U.S. Government, 1994.
|
||||
*
|
||||
* This material may be reproduced by or for the U.S. Government pursuant
|
||||
* to the copyright license under the clause at DFARS 252.227-7013. This
|
||||
* notice must appear in all copies of this file and its derivatives.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <rtems.h>
|
||||
#include <errno.h>
|
||||
|
||||
int host_errno(void);
|
||||
|
||||
/*
|
||||
* copy host errno, if any to thread aware errno, if any
|
||||
*/
|
||||
|
||||
void fix_syscall_errno(void)
|
||||
{
|
||||
errno = host_errno();
|
||||
}
|
||||
|
||||
/*
|
||||
* Get the host system errno, if any
|
||||
* When using newlib (or possibly other libc's) on top of UNIX
|
||||
* the errno returned by system calls may be unavailable due
|
||||
* to trickery of making errno thread aware.
|
||||
* This provides a kludge of getting at it.
|
||||
*/
|
||||
|
||||
#undef errno
|
||||
extern int errno;
|
||||
int host_errno(void)
|
||||
{
|
||||
return errno;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,7 @@ void RTEMS_Malloc_Initialize(
|
||||
{
|
||||
rtems_status_code status;
|
||||
void *starting_address;
|
||||
rtems_unsigned32 old_address;
|
||||
rtems_unsigned32 u32_address;
|
||||
|
||||
/*
|
||||
@@ -73,8 +74,14 @@ void RTEMS_Malloc_Initialize(
|
||||
}
|
||||
|
||||
if (u32_address & (CPU_ALIGNMENT-1)) {
|
||||
old_address = u32_address;
|
||||
u32_address = (u32_address + CPU_ALIGNMENT) & ~(CPU_ALIGNMENT-1);
|
||||
/* XXX: if we do any alignment .. then length should be shortened */
|
||||
|
||||
/*
|
||||
* Adjust the length by whatever we aligned by
|
||||
*/
|
||||
|
||||
length -= u32_address - old_address;
|
||||
}
|
||||
|
||||
starting_address = (void *)u32_address;
|
||||
|
||||
Reference in New Issue
Block a user