Add device abstraction code for the UEFI Console and UEFI Shell-based file systems.

Make argv use narrow characters instead of wide characters.
Add setenv functionality.
Add poll() system call.
Change signal names into macros – required for standards compliance.  The enums were renamed and moved to sys/signal.h and the new macros reference the enums.
Added SIGBREAK, which is required for Python.
Modify stdio functions to fail cleanly when called with a NULL File Pointer argument.
Added <sys/cdefs.h> that just includes <sys/EfiCdefs.h>.  By adding this wrapper, we improve compatibility with *nix files which assume <sys/cdefs> exists.
Add <netdb.h>
Added macros for bcopy(), bcmp() and strsep().
Modify the clock() function so that it does not hang when running under an emulation environment such as NT32.
Move TM structure specific macros from the private tzfile.h into <time.h>
Add strncasecmp function.
Add strptime function.
Add gettimeofday function.
Add getcwd function.


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@11908 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
darylm503
2011-06-28 02:34:10 +00:00
parent b00771f50a
commit 53e1e5c647
98 changed files with 5175 additions and 1409 deletions

View File

@@ -6,11 +6,11 @@
- exit(int status)
- _Exit(int status)
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
This program and the accompanying materials are licensed and made available under
the terms and conditions of the BSD License that accompanies this distribution.
The full text of the license may be found at
http://opensource.org/licenses/bsd-license.php.
http://opensource.org/licenses/bsd-license.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
@@ -92,30 +92,27 @@ atexit(void (*handler)(void))
void
exit(int status)
{
int i = gMD->num_atexit;
void (*CleanUp)(void); // Pointer to Cleanup Function
int i;
if(gMD != NULL) {
CleanUp = gMD->cleanup; // Preserve the pointer to the Cleanup Function
// Call all registered atexit functions in reverse order
i = gMD->num_atexit;
if( i > 0) {
do {
(gMD->atexit_handler[--i])();
} while( i > 0);
}
if (gMD->cleanup != NULL) {
gMD->cleanup();
if (CleanUp != NULL) {
CleanUp();
}
}
_Exit(status);
}
typedef
EFI_STATUS
(EFIAPI *ExitFuncPtr)(
IN EFI_HANDLE ImageHandle,
IN EFI_STATUS ExitStatus,
IN UINTN ExitDataSize,
IN CHAR16 *ExitData OPTIONAL
) __noreturn;
/** The _Exit function causes normal program termination to occur and control
to be returned to the host environment.
@@ -133,16 +130,16 @@ void
_Exit(int status)
{
RETURN_STATUS ExitVal = (RETURN_STATUS)status;
ExitFuncPtr ExitFunc;
if( ExitVal == EXIT_FAILURE) {
ExitVal = RETURN_ABORTED;
}
ExitFunc = (ExitFuncPtr)gBS->Exit;
if(gMD->FinalCleanup != NULL) {
gMD->FinalCleanup(); // gMD does not exist when this returns.
}
//gBS->Exit(gImageHandle, ExitVal, 0, NULL); /* abort() */
ExitFunc(gImageHandle, ExitVal, 0, NULL); /* abort() */
gBS->Exit(gImageHandle, ExitVal, 0, NULL); /* abort() */
}
/** If string is a null pointer, the system function determines whether the
@@ -206,3 +203,98 @@ char *getenv(const char *name)
return retval;
}
/**
Add or update a variable in the environment list
@param name Address of a zero terminated name string
@param value Address of a zero terminated value string
@param rewrite TRUE allows overwriting existing values
@retval Returns 0 upon success
@retval Returns -1 upon failure, sets errno with more information
Errors
EINVAL - name is NULL or points to a zero length string
EALREADY - name already set and rewrite set to FALSE
ENODEV - Unable to set non-volatile version of environment variable
ENOMEM - Unable to set volatile version of environment variable
ENOTSUP - Variable storage not supported
**/
int
setenv (
register const char * name,
register const char * value,
int rewrite
)
{
CONST CHAR16 * HostName;
int retval;
EFI_STATUS Status;
CHAR16 * UName;
CHAR16 * UValue;
//
// Assume failure
//
retval = -1;
//
// Validate the inputs
//
errno = EINVAL;
if (( NULL != name ) && ( 0 != *name )) {
//
// Get the storage locations for the unicode strings
//
UName = &gMD->UString[0];
UValue = &gMD->UString2[0];
//
// Convert the strings
//
AsciiStrToUnicodeStr ( name, UName );
AsciiStrToUnicodeStr ( value, UValue );
//
// Determine if the string is already present
//
errno = EALREADY;
HostName = ShellGetEnvironmentVariable ( UName );
if ( rewrite || ( NULL == HostName )) {
//
// Support systems that don't have non-volatile memory
//
errno = ENOMEM;
Status = ShellSetEnvironmentVariable ( UName, UValue, TRUE );
if ( EFI_ERROR ( Status )) {
if ( EFI_UNSUPPORTED == Status ) {
errno = ENOTSUP;
}
}
else {
//
// Permanently set the environment variable
//
errno = ENODEV;
Status = ShellSetEnvironmentVariable ( UName, UValue, FALSE );
if ( !EFI_ERROR ( Status )) {
//
// Success
//
errno = 0;
retval = 0;
}
}
}
}
//
// Return the operation status
//
return retval;
}