StdLib: Fix some build problems and obscure bugs.

StdLib\
  BsdSocketLib\
    ns_print.c
      Use "%lu" format instead of "%Lu".  A capital 'L' specifies (long double) in print formats.
      Add a cast from char to (unsigned int) to match its sprintf format.
    res_debug.c
      Use "%lu" format instead of "%Lu".  A capital 'L' specifies (long double) in print formats.
  EfiSocketLib\
    Socket.c
      Update copyright & correct formatting
  Include\
    sys\
      EfiCdefs.h
        Update copyright date
        Change type of LONGN and ULONGN to INTN and UINTN, respectively.
      errno.h
        Update copyright date
        Add enum member '__ESUCCESS = 0'
      fcntl.h
        Update copyright date
        Improve comment for O_EXCL
      stat.h
        Update copyright date
        Reorder the S_* flags
        Put the S_* predicate macros in the same order as their flag definitions
        Add a function header comment to the stat() function declaration.
    errno.h
      Update copyright date
      Define new ESUCCESS error code
    wchar.h
      Update copyright date
      Correct the description of the Nptr parameter to the wcstol, wcstoll, wcstoul, and wcstoull functions.
    x86\float.h
      Update copyright date
      Define 'long double' limits for non-Microsoft compilers
  LibC\
    Containers\Queues\Fifo.c
      Rewrite to make more robust and secure (zeros out old data)
    StdLib\realpath.c
      Update copyright date
      Reformat descriptive comment for realpath()
      Add terminating CRLF

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by:  daryl.mcdaniel@intel.com
Reviewed-by:  Erik Bjorge <erik.c.bjorge@intel.com>
Reviewed-by:  Jaben Carsey <Jaben.carsey@intel.com>


git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16096 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
daryl.mcdaniel 2014-09-11 21:42:26 +00:00 committed by darylm503
parent 9fc9f4d8b4
commit 0164fc8e76
12 changed files with 829 additions and 816 deletions

File diff suppressed because it is too large Load Diff

View File

@ -536,7 +536,7 @@ p_option(u_long option) {
case RES_DNSRCH: return "dnsrch";
case RES_INSECURE1: return "insecure1";
case RES_INSECURE2: return "insecure2";
default: sprintf(nbuf, "?0x%Lx?", (u_long)option);
default: sprintf(nbuf, "?0x%lx?", (u_long)option);
return (nbuf);
}
}

View File

@ -5,10 +5,10 @@
* Bound - pSocket->PortList is not NULL
* Listen - AcceptWait event is not NULL
Copyright (c) 2011, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
Copyright (c) 2010 - 2014, 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
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
@ -19,26 +19,26 @@
<code><pre>
+-------------+ +-------------+ +-------------+
+---------------+ +-------------+ +-------------+
Service Lists | ::ESL_SERVICE |-->| ESL_SERVICE |-->| ESL_SERVICE |--> NULL (pNext)
+-------------+ +-------------+ +-------------+
+---------------+ +-------------+ +-------------+
^ | (pPortList) |
pUdp4List ^ | pTcp4List | |
| | | |
^ | | | |
pIp4List | | | | |
+---------------+ | |
| ::ESL_LAYER | ::mEslLayer | |
| ::ESL_LAYER | ::mEslLayer | |
+---------------+ | |
| (pSocketList) | |
Socket List V V V
+-------------+ +-------------+ +-------------+
| ::ESL_SOCKET |-->| ::ESL_PORT |-->| ESL_PORT |--> NULL (pLinkSocket)
+-------------+ +-------------+ +-------------+
+---------------+ +-------------+ +-------------+
| ::ESL_SOCKET |-->| ::ESL_PORT |-->| ESL_PORT |--> NULL (pLinkSocket)
+---------------+ +-------------+ +-------------+
| | |
| | V
V V NULL
+-------------+ +-------------+
+-------------+ +-------------+
| ESL_SOCKET |-->| ESL_PORT |--> NULL
+-------------+ +-------------+
| | | | | |
@ -53,9 +53,9 @@
| `---------------. | |
pTxOobPacketListHead | | | |
V V V V
+------------+ +------------+ +------------+ +------------+
+--------------+ +------------+ +------------+ +------------+
| ::ESL_PACKET | | ESL_PACKET | | ESL_PACKET | | ESL_PACKET |
+------------+ +------------+ +------------+ +------------+
+--------------+ +------------+ +------------+ +------------+
| | | |
V V V V
+------------+ +------------+ +------------+ +------------+
@ -154,7 +154,7 @@
::EslTcp4PortCloseOp.
</li>
<li>State: PORT_STATE_CLOSE_TX_DONE</li>
<li>Arc: ::EslSocketPortCloseComplete - Called when the close operation is
<li>Arc: ::EslSocketPortCloseComplete - Called when the close operation is
complete. After the transition to PORT_STATE_CLOSE_DONE,
this routine calls ::EslSocketRxCancel to abort the pending receive operations.
</li>
@ -220,13 +220,13 @@
pPort->pRxActive
|
V
+-------------+ +-------------+ +-------------+
+-------------+ +-------------+ +-------------+
Active | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
+-------------+ +-------------+ +-------------+
+-------------+ +-------------+ +-------------+
+-------------+ +-------------+ +-------------+
+-------------+ +-------------+ +-------------+
Free | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
+-------------+ +-------------+ +-------------+
+-------------+ +-------------+ +-------------+
^
|
pPort->pRxFree
@ -250,7 +250,7 @@
<code><pre>
+------------+ +------------+
+------------+ +------------+
High .----->| ESL_PACKET |-->| ESL_PACKET |--> NULL (pNext)
Priority | +------------+ +------------+
|
@ -260,14 +260,14 @@
+------------+
| pRxPacketListHead
Low |
Priority | +------------+ +------------+ +------------+
Priority | +------------+ +------------+ +------------+
`----->| ::ESL_PACKET |-->| ESL_PACKET |-->| ESL_PACKET |--> NULL
+------------+ +------------+ +------------+
+------------+ +------------+ +------------+
</pre></code>
::EslSocketRxStart connects an ::ESL_PACKET structure to the ::ESL_IO_MGMT structure
and then calls the network layer to start the receive operation. Upon
and then calls the network layer to start the receive operation. Upon
receive completion, ::EslSocketRxComplete breaks the connection between these
structrues and places the ESL_IO_MGMT structure onto the ESL_PORT::pRxFree list to
make token and event available for another receive operation. EslSocketRxComplete
@ -371,9 +371,9 @@
*ppQueueHead: pSocket->pRxPacketListHead or pSocket->pRxOobPacketListHead
|
V
+------------+ +------------+ +------------+
+------------+ +------------+ +------------+
Data | ESL_PACKET |-->| ESL_PACKET |-->| ESL_PACKET |--> NULL
+------------+ +------------+ +------------+
+------------+ +------------+ +------------+
^
|
*ppQueueTail: pSocket->pRxPacketListTail or pSocket->pRxOobPacketListTail
@ -414,13 +414,13 @@
pPort->pTxActive or pTxOobActive
|
V
+-------------+ +-------------+ +-------------+
+-------------+ +-------------+ +-------------+
Active | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
+-------------+ +-------------+ +-------------+
+-------------+ +-------------+ +-------------+
+-------------+ +-------------+ +-------------+
+-------------+ +-------------+ +-------------+
Free | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
+-------------+ +-------------+ +-------------+
+-------------+ +-------------+ +-------------+
^
|
pPort->pTxFree or pTxOobFree
@ -956,7 +956,7 @@ EslSocketAccept (
/**
Allocate and initialize a ESL_SOCKET structure.
This support function allocates an ::ESL_SOCKET structure
and installs a protocol on ChildHandle. If pChildHandle is a
pointer to NULL, then a new handle is created and returned in
@ -965,7 +965,7 @@ EslSocketAccept (
@param [in, out] pChildHandle Pointer to the handle of the child to create.
If it is NULL, then a new handle is created.
If it is a pointer to an existing UEFI handle,
If it is a pointer to an existing UEFI handle,
then the protocol is added to the existing UEFI
handle.
@param [in] DebugFlags Flags for debug messages
@ -976,7 +976,7 @@ EslSocketAccept (
@retval EFI_OUT_OF_RESOURCES There are not enough resources available to create
the child
@retval other The child handle was not created
**/
EFI_STATUS
EFIAPI
@ -1644,15 +1644,15 @@ EslSocketCloseStart (
connection with the specified remote system. This routine
is designed to be polled by the connect routine for completion
of the network connection.
@param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
@param [in] pSockAddr Network address of the remote system.
@param [in] SockAddrLength Length in bytes of the network address.
@param [out] pErrno Address to receive the errno value upon completion.
@retval EFI_SUCCESS The connection was successfully established.
@retval EFI_NOT_READY The connection is in progress, call this routine again.
@retval Others The connection attempt failed.
@ -1671,7 +1671,7 @@ EslSocketConnect (
ESL_SOCKET * pSocket;
EFI_STATUS Status;
EFI_TPL TplPrevious;
DEBUG (( DEBUG_CONNECT, "Entering SocketConnect\r\n" ));
//
@ -1964,7 +1964,7 @@ EslSocketCopyFragmentedBuffer (
handle.
@param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
@param [out] pErrno Address to receive the errno value upon completion.
@retval EFI_SUCCESS The socket resources were returned successfully.
@ -2126,7 +2126,7 @@ EslSocketFree (
address associated with the local host connection point.
@param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
@param [out] pAddress Network address to receive the local system address
@param [in,out] pAddressLength Length of the local network address structure
@ -2149,14 +2149,14 @@ EslSocketGetLocalAddress (
ESL_SOCKET * pSocket;
EFI_STATUS Status;
EFI_TPL TplPrevious;
DBG_ENTER ( );
//
// Assume success
//
Status = EFI_SUCCESS;
//
// Validate the socket
//
@ -2195,7 +2195,7 @@ EslSocketGetLocalAddress (
// Verify the address length
//
LengthInBytes = pSocket->pApi->AddressLength;
if (( LengthInBytes <= *pAddressLength )
if (( LengthInBytes <= *pAddressLength )
&& ( 255 >= LengthInBytes )) {
//
// Return the local address and address length
@ -2216,7 +2216,7 @@ EslSocketGetLocalAddress (
pSocket->errno = ENOTCONN;
Status = EFI_NOT_STARTED;
}
//
// Release the socket layer synchronization
//
@ -2236,7 +2236,7 @@ EslSocketGetLocalAddress (
pSocket->errno = EADDRNOTAVAIL;
}
}
//
// Return the operation status
//
@ -2264,7 +2264,7 @@ EslSocketGetLocalAddress (
address of the remote connection point.
@param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
@param [out] pAddress Network address to receive the remote system address
@param [in,out] pAddressLength Length of the remote network address structure
@ -2287,14 +2287,14 @@ EslSocketGetPeerAddress (
ESL_SOCKET * pSocket;
EFI_STATUS Status;
EFI_TPL TplPrevious;
DBG_ENTER ( );
//
// Assume success
//
Status = EFI_SUCCESS;
//
// Validate the socket
//
@ -2970,7 +2970,7 @@ EslSocketOptionGet (
pOptionData = (CONST UINT8 *)&pSocket->RxTimeout;
LengthInBytes = sizeof ( pSocket->RxTimeout );
break;
case SO_RCVBUF:
//
// Return the maximum receive buffer size
@ -2986,7 +2986,7 @@ EslSocketOptionGet (
pOptionData = (UINT8 *)&pSocket->bReUseAddr;
LengthInBytes = sizeof ( pSocket->bReUseAddr );
break;
case SO_SNDBUF:
//
// Return the maximum transmit buffer size
@ -3088,9 +3088,9 @@ EslSocketOptionSet (
UINT8 * pOptionData;
ESL_SOCKET * pSocket;
EFI_STATUS Status;
DBG_ENTER ( );
//
// Assume failure
//
@ -3149,7 +3149,7 @@ EslSocketOptionSet (
errno = ENOPROTOOPT;
Status = EFI_INVALID_PARAMETER;
break;
case SOL_SOCKET:
switch ( OptionName ) {
default:
@ -3462,13 +3462,13 @@ EslSocketPoll (
// Synchronize with the socket layer
//
RAISE_TPL ( TplPrevious, TPL_SOCKETS );
//
// Increase the network performance by extending the
// polling (idle) loop down into the LAN driver
//
EslSocketRxPoll ( pSocket );
//
// Release the socket layer synchronization
//
@ -3844,7 +3844,7 @@ EslSocketPortAllocate (
<li>::EslTcp4ConnectComplete - Connection failure and reducing the port list to a single port</li>
</ul>
See the \ref PortCloseStateMachine section.
@param [in] pPort Address of an ::ESL_PORT structure.
@retval EFI_SUCCESS The port is closed
@ -3865,7 +3865,7 @@ EslSocketPortClose (
CONST ESL_SOCKET_BINDING * pSocketBinding;
ESL_SOCKET * pSocket;
EFI_STATUS Status;
DBG_ENTER ( );
//
@ -4460,13 +4460,13 @@ EslSocketPortCloseTxDone (
::recv and ::read are layered on top of ::recvfrom.
@param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
@param [in] Flags Message control flags
@param [in] BufferLength Length of the the buffer
@param [in] pBuffer Address of a buffer to receive the data.
@param [in] pDataLength Number of received data bytes in the buffer.
@param [out] pAddress Network address to receive the remote system address
@ -4577,7 +4577,7 @@ EslSocketReceive (
pRemoteAddress->sa_family = pSocket->pApi->AddressFamily;
pRemoteAddress->sa_len = (UINT8)pSocket->pApi->AddressLength;
}
//
// Synchronize with the socket layer
//
@ -4789,7 +4789,7 @@ EslSocketReceive (
}
}
}
else {
//
@ -4915,13 +4915,13 @@ EslSocketRxComplete (
// pPort->pRxActive
// |
// V
// +-------------+ +-------------+ +-------------+
// +-------------+ +-------------+ +-------------+
// Active | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
// +-------------+ +-------------+ +-------------+
// +-------------+ +-------------+ +-------------+
//
// +-------------+ +-------------+ +-------------+
// +-------------+ +-------------+ +-------------+
// Free | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
// +-------------+ +-------------+ +-------------+
// +-------------+ +-------------+ +-------------+
// ^
// |
// pPort->pRxFree
@ -4955,13 +4955,13 @@ EslSocketRxComplete (
// pRxOobPacketListHead pRxOobPacketListTail
// | |
// V V
// +------------+ +------------+ +------------+
// +------------+ +------------+ +------------+
// Urgent Data | ESL_PACKET |-->| ESL_PACKET |-->| ESL_PACKET |--> NULL
// +------------+ +------------+ +------------+
// +------------+ +------------+ +------------+
//
// +------------+ +------------+ +------------+
// +------------+ +------------+ +------------+
// Normal Data | ESL_PACKET |-->| ESL_PACKET |-->| ESL_PACKET |--> NULL
// +------------+ +------------+ +------------+
// +------------+ +------------+ +------------+
// ^ ^
// | |
// pRxPacketListHead pRxPacketListTail
@ -5247,13 +5247,13 @@ EslSocketRxStart (
// Allocate the receive control structure
//
pPort->pRxFree = pIo->pNext;
//
// Mark this receive as pending
//
pIo->pNext = pPort->pRxActive;
pPort->pRxActive = pIo;
}
else {
DEBUG (( DEBUG_RX | DEBUG_INFO,
@ -5315,9 +5315,9 @@ EslSocketRxStart (
operations on the socket.
@param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
@param [in] How Which operations to stop
@param [out] pErrno Address to receive the errno value upon completion.
@retval EFI_SUCCESS - Socket operations successfully shutdown
@ -5335,9 +5335,9 @@ EslSocketShutdown (
ESL_SOCKET * pSocket;
EFI_STATUS Status;
EFI_TPL TplPrevious;
DBG_ENTER ( );
//
// Assume success
//
@ -5454,13 +5454,13 @@ EslSocketShutdown (
system. Note that ::send and ::write are layered on top of ::sendto.
@param [in] pSocketProtocol Address of an ::EFI_SOCKET_PROTOCOL structure.
@param [in] Flags Message control flags
@param [in] BufferLength Length of the the buffer
@param [in] pBuffer Address of a buffer containing the data to send
@param [in] pDataLength Address to receive the number of data bytes sent
@param [in] pAddress Network address of the remote system address
@ -5827,9 +5827,9 @@ EslSocketTxStart (
// *ppQueueHead: pSocket->pRxPacketListHead or pSocket->pRxOobPacketListHead
// |
// V
// +------------+ +------------+ +------------+
// +------------+ +------------+ +------------+
// Data | ESL_PACKET |-->| ESL_PACKET |-->| ESL_PACKET |--> NULL
// +------------+ +------------+ +------------+
// +------------+ +------------+ +------------+
// ^
// |
// *ppQueueTail: pSocket->pRxPacketListTail or pSocket->pRxOobPacketListTail
@ -5900,9 +5900,9 @@ EslSocketTxStart (
pIo->pPacket = pPacket;
//
// +-------------+ +-------------+ +-------------+
// +-------------+ +-------------+ +-------------+
// Free | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
// +-------------+ +-------------+ +-------------+
// +-------------+ +-------------+ +-------------+
// ^
// |
// *ppFree: pPort->pTxFree or pTxOobFree
@ -5911,14 +5911,14 @@ EslSocketTxStart (
// Remove the IO structure from the queue
//
*ppFree = pIo->pNext;
//
// *ppActive: pPort->pTxActive or pTxOobActive
// |
// V
// +-------------+ +-------------+ +-------------+
// +-------------+ +-------------+ +-------------+
// Active | ESL_IO_MGMT |-->| ESL_IO_MGMT |-->| ESL_IO_MGMT |--> NULL
// +-------------+ +-------------+ +-------------+
// +-------------+ +-------------+ +-------------+
//
//
// Mark this packet as active

View File

@ -26,7 +26,7 @@
All macro definitions in this list must begin with the letter 'E'
and be followed by a digit or an uppercase letter.
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2010 - 2014, 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
@ -46,6 +46,7 @@ extern RETURN_STATUS EFIerrno;
// Define error number in terms of the ENUM in <sys/errno.h>
#define ERESTART -1 /* restart syscall */
#define ESUCCESS __ESUCCESS /* No Problems */
#define EMINERRORVAL __EMINERRORVAL /* 1 The lowest valid error value */

View File

@ -22,7 +22,7 @@
This file and its contents are inspired by the <sys/cdefs.h> files in Berkeley
Unix. They have been re-implemented to be specific to the EFI environment.
Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2010 - 2014, 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
@ -360,8 +360,8 @@ typedef UINTN EFI_ULONG_T;
#if defined(__GNUC__)
#if __GNUC_PREREQ__(4,4)
/* GCC 4.4 or later */
typedef INT64 LONGN;
typedef UINT64 ULONGN;
typedef INTN LONGN;
typedef UINTN ULONGN;
#else
/* minGW gcc variant */
typedef INT32 LONGN;

View File

@ -7,7 +7,7 @@
directives. These default values are specified as an enum in order to ease
the maintenance of the values.
Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2011 - 2014, 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
@ -22,6 +22,7 @@
/* Define the error numbers, sequentially, beginning at 1. */
enum {
__ESUCCESS = 0, /* 0 For those rare times one needs to say all is OK */
__EMINERRORVAL = 1, /* The lowest valid error value */
__EPERM = __EMINERRORVAL, /* 1 Operation not permitted */
__ENOENT, /* 2 No such file or directory */

View File

@ -2,7 +2,7 @@
This file includes the definitions for open and fcntl described by POSIX
for <fcntl.h>; it also includes related kernel definitions.
Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2010 - 2014, 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 which
accompanies this distribution. The full text of the license may be found
@ -70,7 +70,7 @@
#define O_APPEND 0x00000008 ///< set append mode
#define O_CREAT 0x00000200 ///< create if nonexistent
#define O_TRUNC 0x00000400 ///< truncate to zero length
#define O_EXCL 0x00000800 ///< error if already exists
#define O_EXCL 0x00000800 ///< Grant EXCLusive access, or error if already exists and O_CREAT
#define O_DIRECTORY 0x00001000 ///< error if path is not a directory
#define O_NOCTTY 0x00002000 ///< Don't make this the controlling TTY

View File

@ -1,6 +1,6 @@
/** @file
Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2010 - 2014, 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
@ -119,21 +119,24 @@ struct stat {
#define S_EFISHIFT 20 // LS bit of the UEFI attributes
#define S_IFMT _S_IFMT
#define S_IFBLK _S_IFBLK
#define S_IFREG _S_IFREG
#define S_IFIFO _S_IFIFO
#define S_IFCHR _S_IFCHR
#define S_IFDIR _S_IFDIR
#define S_IFSOCK _S_IFSOCK
#define S_ISDIR(m) ((m & _S_IFMT) == _S_IFDIR) ///< directory
#define S_ISCHR(m) ((m & _S_IFMT) == _S_IFCHR) ///< char special
#define S_ISREG(m) ((m & _S_IFMT) == _S_IFREG) ///< regular file
#define S_ISBLK(m) ((m & _S_IFMT) == _S_IFBLK) ///< block special
#define S_ISSOCK(m) ((m & _S_IFMT) == _S_IFSOCK) ///< socket
#define S_IFMT _S_IFMT
#define S_IFIFO _S_IFIFO
#define S_IFCHR _S_IFCHR
#define S_IFDIR _S_IFDIR
#define S_IFBLK _S_IFBLK
#define S_IFREG _S_IFREG
#define S_IFSOCK _S_IFSOCK
#define S_ITTY _S_ITTY
#define S_IWTTY _S_IWTTY
#define S_ICONSOLE _S_ICONSOLE
#define S_ISFIFO(m) ((m & _S_IFMT) == _S_IFIFO) ///< fifo
#define S_ISCHR(m) ((m & _S_IFMT) == _S_IFCHR) ///< char special
#define S_ISDIR(m) ((m & _S_IFMT) == _S_IFDIR) ///< directory
#define S_ISBLK(m) ((m & _S_IFMT) == _S_IFBLK) ///< block special
#define S_ISREG(m) ((m & _S_IFMT) == _S_IFREG) ///< regular file
#define S_ISSOCK(m) ((m & _S_IFMT) == _S_IFSOCK) ///< socket
/* The following three macros have been changed to reflect
access permissions that better reflect the UEFI FAT file system.
@ -191,8 +194,18 @@ __BEGIN_DECLS
**/
int lstat (const char *, struct stat *);
/**
**/
/** Obtains information about the file pointed to by path.
Opens the file pointed to by path, calls _EFI_FileInfo with the file's handle,
then closes the file.
@param[in] path Path to the file to obtain information about.
@param[out] statbuf Buffer in which the file status is put.
@retval 0 Successful Completion.
@retval -1 An error has occurred and errno has been set to
identify the error.
**/
int stat (const char *, struct stat *);
/**

View File

@ -150,7 +150,7 @@
- WEOF might not be negative.
- mbstate_t objects are not intended to be inspected by programs.
Copyright (c) 2010 - 2012, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2010 - 2014, 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
@ -1089,7 +1089,7 @@ by the value of base, and a final wide string of one or more unrecognized wide
characters, including the terminating null wide character of the input wide string. Then,
they attempt to convert the subject sequence to an integer, and return the result.
@param[in] Nptr Pointer to the string to convert to a floating-point value.
@param[in] Nptr Pointer to the string to convert.
@param[in] EndPtr Optional pointer to an object in which to store a pointer
to the final wide string.
@param[in] Base Base, 0 to 36, of the value represented by the string

View File

@ -1,5 +1,5 @@
/** @file
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2010 - 2014, 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
@ -13,22 +13,22 @@
#ifndef _X86_FLOAT_H_
#define _X86_FLOAT_H_
#if 0 /* Force all compilers to have the same limits */
/* long double and double are the same in Microsoft compilers. */
/* long double and double are the same in Microsoft compilers.
In GCC long double is fully supported.
*/
#if !defined(_MSC_VER) /* Non-Microsoft compiler specifics. */
#define LDBL_MANT_DIG 64
#define LDBL_EPSILON 1.0842021724855044340E-19L
#define LDBL_DIG 18
#define LDBL_MIN_EXP (-16381)
#define LDBL_MIN 3.3621031431120935063E-4932L
#define LDBL_MANT_DIG 64
#define LDBL_EPSILON 1.0842021724855044340E-19L
#define LDBL_DIG 18
#define LDBL_MIN_EXP (-16381)
#define LDBL_MIN 3.3621031431120935063E-4932L
#define LDBL_MIN_10_EXP (-4931)
#define LDBL_MAX_EXP 16384
#define LDBL_MAX 1.1897314953572317650E+4932L
#define LDBL_MAX_EXP 16384
#define LDBL_MAX 1.1897314953572317650E+4932L
#define LDBL_MAX_10_EXP 4932
#define DECIMAL_DIG 21
#define DECIMAL_DIG 21
#endif // !defined(_MSC_VER)
#endif // if 0
#include <sys/float_ieee754.h>

View File

@ -15,7 +15,7 @@
One element of the FIFO is always reserved as the "terminator" element. Thus,
the capacity of a FIFO is actually NumElements-1.
Copyright (c) 2012, Intel Corporation. All rights reserved.<BR>
Copyright (c) 2012 - 2014, 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 which accompanies this
distribution. The full text of the license may be found at
@ -102,10 +102,10 @@ FIFO_FreeSpace (
WDex = Self->WriteIndex;
if(RDex <= WDex) {
Count = Self->NumElements - ((WDex - RDex) - 1);
Count = (Self->NumElements - (WDex - RDex)) - 1;
}
else {
Count = (RDex - WDex);
Count = (RDex - WDex)-1;
}
if(As == AsBytes) {
Count *= Self->ElementSize;
@ -221,32 +221,31 @@ FIFO_Enqueue (
assert(Self != NULL);
assert(pElement != NULL);
if(FIFO_IsFull(Self)) {
Count = 0;
if(FIFO_IsFull(Self)) { // FIFO is full so can't add to it
Count = 0; // Zero characters added
}
else {
Count = MIN(Count, Self->FreeSpace(Self, AsElements));
SizeOfElement = Self->ElementSize;
Windex = Self->WriteIndex;
else { // Otherwise, FIFO is not full...
Count = MIN(Count, Self->FreeSpace(Self, AsElements)); // Smaller of requested or available space
SizeOfElement = Self->ElementSize; // Size of Elements, in bytes
Windex = Self->WriteIndex; // Index of first writable slot in FIFO
ElemPtr = (uintptr_t)pElement;
ElemPtr = (uintptr_t)pElement; // Addr. of element to add, as an integer
QPtr = (uintptr_t)Self->Queue + (SizeOfElement * Windex); // Addr. in FIFO to write, as an integer
QPtr = (uintptr_t)Self->Queue + (SizeOfElement * Windex);
for(i = 0; i < Count; ++i) {
(void)CopyMem((void *)QPtr, (const void *)ElemPtr, SizeOfElement);
Windex = (UINT32)ModuloIncrement(Windex, Self->NumElements);
if(Windex == 0) { // If the index wrapped
QPtr = (uintptr_t)Self->Queue;
for(i = 0; i < Count; ++i) { // For Count elements...
(void)CopyMem((void *)QPtr, (const void *)ElemPtr, SizeOfElement); // Copy an element into the FIFO
Windex = (UINT32)ModuloIncrement(Windex, Self->NumElements); // Increment the Write index, wrap if necessary
if(Windex == 0) { // If the index wrapped
QPtr = (uintptr_t)Self->Queue; // Go to the beginning
}
else {
QPtr += SizeOfElement;
QPtr += SizeOfElement; // Otherwise, point to next in FIFO
}
ElemPtr += SizeOfElement;
ElemPtr += SizeOfElement; // And also point to next Element to add
}
(void)ZeroMem((void*)QPtr, SizeOfElement);
Self->WriteIndex = Windex;
Self->WriteIndex = Windex; // Finally, save the new Write Index
}
return Count;
return Count; // Number of elements added to FIFO
}
/** Read or copy elements from the FIFO.
@ -277,7 +276,6 @@ FIFO_Dequeue (
BOOLEAN Consume
)
{
UINTN ElemPtr;
UINTN QPtr;
UINT32 RDex;
UINT32 SizeOfElement;
@ -285,38 +283,40 @@ FIFO_Dequeue (
assert(Self != NULL);
assert(pElement != NULL);
assert(Count != 0);
if(FIFO_IsEmpty(Self)) {
Count = 0;
}
else {
RDex = Self->ReadIndex;
SizeOfElement = Self->ElementSize;
ElemPtr = (UINTN)pElement;
Count = MIN(Count, Self->Count(Self, AsElements));
RDex = Self->ReadIndex; // Get this FIFO's Read Index
SizeOfElement = Self->ElementSize; // Get size of this FIFO's elements
Count = MIN(Count, Self->Count(Self, AsElements)); // Lesser of requested or actual
QPtr = (UINTN)Self->Queue + (RDex * Self->ElementSize);
for(i = 0; i < Count; ++i) {
(void)CopyMem((void *)ElemPtr, (const void *)QPtr, Self->ElementSize);
RDex = (UINT32)ModuloIncrement(RDex, Self->NumElements);
if(RDex == 0) { // If the index wrapped
QPtr = (UINTN)Self->Queue;
QPtr = (UINTN)Self->Queue + (RDex * Self->ElementSize); // Point to Read location in FIFO
for(i = 0; i < Count; ++i) { // Iterate Count times...
(void)CopyMem(pElement, (const void *)QPtr, Self->ElementSize); // Copy element from FIFO to caller's buffer
RDex = (UINT32)ModuloIncrement(RDex, Self->NumElements); // Increment Read Index
if(RDex == 0) { // If the index wrapped
QPtr = (UINTN)Self->Queue; // Point back to beginning of data
}
else {
QPtr += Self->ElementSize;
else { // Otherwise
QPtr += Self->ElementSize; // Point to the next element in FIFO
}
ElemPtr += Self->ElementSize;
}
if(Consume) {
Self->ReadIndex = RDex;
pElement = (char*)pElement + Self->ElementSize; // Point to next element in caller's buffer
} // Iterate: for loop
if(Consume) { // If caller requests data consumption
Self->ReadIndex = RDex; // Set FIFO's Read Index to new Index
}
}
return Count;
return Count; // Return number of elements actually read
}
/** Read elements from the FIFO.
Read the specified number of elements from the FIFO, removing each element read.
The number of elements actually read from the FIFO is returned. This number can differ
from the Count requested if more elements are requested than are in the FIFO.
@param[in] Self Pointer to the FIFO instance.
@param[out] pElement Pointer to where to store the element read from the FIFO.
@param[in] Count Number of elements to dequeue.
@ -338,7 +338,7 @@ FIFO_Read (
/** Make a copy of the FIFO's data.
The contents of the FIFO is copied out and linearized without affecting the
FIFO contents.
FIFO contents. This function is idempotent.
@param[in] Self Pointer to the FIFO instance.
@param[out] pElement Pointer to where to store the elements copied from the FIFO.
@ -435,7 +435,7 @@ FIFO_Flush (
assert(Self != NULL);
NumInQ = FIFO_FreeSpace(Self, AsElements);
NumInQ = FIFO_NumInQueue(Self, AsElements);
if(NumToFlush >= NumInQ) {
Self->ReadIndex = 0;
Self->WriteIndex = 0;
@ -464,7 +464,7 @@ FIFO_Truncate (
assert(Self != NULL);
Remainder = Self->Count(Self, AsElements);
Remainder = FIFO_NumInQueue(Self, AsElements);
if(Remainder > 0) {
Self->WriteIndex = (UINT32)ModuloDecrement(Self->WriteIndex, Self->NumElements);
--Remainder;

View File

@ -1,7 +1,7 @@
/** @file
Implement the realpath function.
Copyright (c) 2011, Intel Corporation
Copyright (c) 2011 - 2014, Intel Corporation
All rights reserved. This program and the accompanying materials
are licensed and made available under the terms and conditions of the BSD License
which accompanies this distribution. The full text of the license may be found at
@ -9,24 +9,22 @@
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#include <LibConfig.h>
#include <Library/BaseLib.h>
#include <Library/PathLib.h>
#include <Library/MemoryAllocationLib.h>
#include <Library/PathLib.h>
#include <errno.h>
/**
The realpath() function shall derive, from the pathname pointed to by
file_name, an absolute pathname that names the same file, whose resolution
does not involve '.', '..', or symbolic links. The generated pathname shall
be stored as a null-terminated string, up to a maximum of {PATH_MAX} bytes,
in the buffer pointed to by resolved_name.
/** The realpath() function shall derive, from the pathname pointed to by
file_name, an absolute pathname that names the same file, whose resolution
does not involve '.', '..', or symbolic links.
If resolved_name is a null pointer, the behavior of realpath() is
implementation-defined.
The generated pathname shall be stored as a null-terminated string, up to a
maximum of {PATH_MAX} bytes, in the buffer pointed to by resolved_name.
If resolved_name is a null pointer, the behavior of realpath() is
implementation-defined.
@param[in] file_name The filename to convert.
@param[in,out] resolved_name The resultant name.
@ -36,7 +34,7 @@
**/
char *
realpath(
char *file_name,
char *file_name,
char *resolved_name
)
{
@ -54,4 +52,4 @@ realpath(
PathCleanUpDirectories(Temp);
UnicodeStrToAsciiStr(Temp, resolved_name);
return (resolved_name);
}
}