Add Current working directory support to the library
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@10333 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@ -1,36 +1,36 @@
|
|||||||
/** @file
|
/** @file
|
||||||
File IO routines inspired by Streams with an EFI flavor
|
File IO routines inspired by Streams with an EFI flavor
|
||||||
|
|
||||||
Copyright (c) 2007, Intel Corporation<BR>
|
Copyright (c) 2007, Intel Corporation<BR>
|
||||||
Portions copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
Portions copyright (c) 2008-2009, Apple Inc. All rights reserved.
|
||||||
|
|
||||||
All rights reserved. This program and the accompanying materials
|
All rights reserved. This program and the accompanying materials
|
||||||
are licensed and made available under the terms and conditions of the BSD License
|
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
|
which 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.php
|
||||||
|
|
||||||
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||||||
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||||||
|
|
||||||
Basic support for opening files on different device types. The device string
|
Basic support for opening files on different device types. The device string
|
||||||
is in the form of DevType:Path. Current DevType is required as there is no
|
is in the form of DevType:Path. Current DevType is required as there is no
|
||||||
current mounted device concept of current working directory concept implement
|
current mounted device concept of current working directory concept implement
|
||||||
by this library.
|
by this library.
|
||||||
|
|
||||||
Device names are case insensative and only check the leading characters for
|
Device names are case insensative and only check the leading characters for
|
||||||
unique matches. Thus the following are all the same:
|
unique matches. Thus the following are all the same:
|
||||||
LoadFile0:
|
LoadFile0:
|
||||||
l0:
|
l0:
|
||||||
L0:
|
L0:
|
||||||
Lo0:
|
Lo0:
|
||||||
|
|
||||||
Supported Device Names:
|
Supported Device Names:
|
||||||
A0x1234:0x12 - A memory buffer starting at address 0x1234 for 0x12 bytes
|
A0x1234:0x12 - A memory buffer starting at address 0x1234 for 0x12 bytes
|
||||||
l1: - EFI LoadFile device one.
|
l1: - EFI LoadFile device one.
|
||||||
B0: - EFI BlockIo zero.
|
B0: - EFI BlockIo zero.
|
||||||
fs3: - EFI Simple File System device 3
|
fs3: - EFI Simple File System device 3
|
||||||
Fv2: - EFI Firmware VOlume device 2
|
Fv2: - EFI Firmware VOlume device 2
|
||||||
10.0.1.102: - TFTP service IP followed by the file name
|
10.0.1.102: - TFTP service IP followed by the file name
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include <PiDxe.h>
|
#include <PiDxe.h>
|
||||||
@ -89,12 +89,12 @@ UINTN mLoadFileCount = 0;
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Internal worker function to validate a File handle.
|
Internal worker function to validate a File handle.
|
||||||
|
|
||||||
@param File Open File Handle
|
@param File Open File Handle
|
||||||
|
|
||||||
@return TRUE File is valid
|
@return TRUE File is valid
|
||||||
@return FALSE File is not valid
|
@return FALSE File is not valid
|
||||||
|
|
||||||
|
|
||||||
**/
|
**/
|
||||||
@ -116,9 +116,9 @@ FileHandleValid (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Internal worker function. If Buffer is not NULL free it.
|
Internal worker function. If Buffer is not NULL free it.
|
||||||
|
|
||||||
@param Buffer Buffer to FreePool()
|
@param Buffer Buffer to FreePool()
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
@ -132,7 +132,7 @@ EblFreePool (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Update Device List Global Variables
|
Update Device List Global Variables
|
||||||
|
|
||||||
**/
|
**/
|
||||||
VOID
|
VOID
|
||||||
@ -206,17 +206,17 @@ EblUpdateDeviceLists (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
PathName is in the form <device name>:<path> for example fs1:\ or ROOT:\.
|
PathName is in the form <device name>:<path> for example fs1:\ or ROOT:\.
|
||||||
Return TRUE if the <devce name> prefix of PathName matches a file system
|
Return TRUE if the <devce name> prefix of PathName matches a file system
|
||||||
Volume Name. MatchIndex is the array index in mFsInfo[] of the match,
|
Volume Name. MatchIndex is the array index in mFsInfo[] of the match,
|
||||||
and it can be used with mFs[] to find the handle that needs to be opened
|
and it can be used with mFs[] to find the handle that needs to be opened
|
||||||
|
|
||||||
@param PathName PathName to check
|
@param PathName PathName to check
|
||||||
@param FileStart Index of the first character of the <path>
|
@param FileStart Index of the first character of the <path>
|
||||||
@param MatchIndex Index in mFsInfo[] that matches
|
@param MatchIndex Index in mFsInfo[] that matches
|
||||||
|
|
||||||
@return TRUE PathName matches a Volume Label and MatchIndex is valid
|
@return TRUE PathName matches a Volume Label and MatchIndex is valid
|
||||||
@return FALSE PathName does not match a Volume Label MatchIndex undefined
|
@return FALSE PathName does not match a Volume Label MatchIndex undefined
|
||||||
|
|
||||||
**/
|
**/
|
||||||
BOOLEAN
|
BOOLEAN
|
||||||
@ -261,11 +261,11 @@ EblMatchVolumeName (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Return the number of devices of the current type active in the system
|
Return the number of devices of the current type active in the system
|
||||||
|
|
||||||
@param Type Device type to check
|
@param Type Device type to check
|
||||||
|
|
||||||
@return 0 Invalid type
|
@return 0 Invalid type
|
||||||
|
|
||||||
**/
|
**/
|
||||||
UINTN
|
UINTN
|
||||||
@ -324,13 +324,13 @@ ConvertIpStringToEfiIp (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Internal work function to extract a device number from a string skipping
|
Internal work function to extract a device number from a string skipping
|
||||||
text. Easy way to extract numbers from strings like blk7:.
|
text. Easy way to extract numbers from strings like blk7:.
|
||||||
|
|
||||||
@param Str String to extract device number form
|
@param Str String to extract device number form
|
||||||
|
|
||||||
@return -1 Device string is not valid
|
@return -1 Device string is not valid
|
||||||
@return Device #
|
@return Device #
|
||||||
|
|
||||||
**/
|
**/
|
||||||
UINTN
|
UINTN
|
||||||
@ -356,10 +356,10 @@ EblConvertDevStringToNumber (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Internal work function to fill in EFI_OPEN_FILE information for the Fs and BlkIo
|
Internal work function to fill in EFI_OPEN_FILE information for the Fs and BlkIo
|
||||||
|
|
||||||
@param File Open file handle
|
@param File Open file handle
|
||||||
@param FileName Name of file after device stripped off
|
@param FileName Name of file after device stripped off
|
||||||
|
|
||||||
|
|
||||||
**/
|
**/
|
||||||
@ -492,10 +492,10 @@ CompareGuidToString (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Internal work function to fill in EFI_OPEN_FILE information for the FV
|
Internal work function to fill in EFI_OPEN_FILE information for the FV
|
||||||
|
|
||||||
@param File Open file handle
|
@param File Open file handle
|
||||||
@param FileName Name of file after device stripped off
|
@param FileName Name of file after device stripped off
|
||||||
|
|
||||||
|
|
||||||
**/
|
**/
|
||||||
@ -606,7 +606,7 @@ EblFvFileDevicePath (
|
|||||||
Status = File->Fv->ReadSection (
|
Status = File->Fv->ReadSection (
|
||||||
File->Fv,
|
File->Fv,
|
||||||
&File->FvNameGuid,
|
&File->FvNameGuid,
|
||||||
OpenMode,
|
(EFI_SECTION_TYPE)OpenMode,
|
||||||
0,
|
0,
|
||||||
&Section,
|
&Section,
|
||||||
&File->Size,
|
&File->Size,
|
||||||
@ -631,22 +631,22 @@ EblFvFileDevicePath (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Open a device named by PathName. The PathName includes a device name and
|
Open a device named by PathName. The PathName includes a device name and
|
||||||
path seperated by a :. See file header for more details on the PathName
|
path seperated by a :. See file header for more details on the PathName
|
||||||
syntax. There is no checking to prevent a file from being opened more than
|
syntax. There is no checking to prevent a file from being opened more than
|
||||||
one type.
|
one type.
|
||||||
|
|
||||||
SectionType is only used to open an FV. Each file in an FV contains multiple
|
SectionType is only used to open an FV. Each file in an FV contains multiple
|
||||||
secitons and only the SectionType section is opened.
|
secitons and only the SectionType section is opened.
|
||||||
|
|
||||||
For any file that is opened with EfiOpen() must be closed with EfiClose().
|
For any file that is opened with EfiOpen() must be closed with EfiClose().
|
||||||
|
|
||||||
@param PathName Path to parse to open
|
@param PathName Path to parse to open
|
||||||
@param OpenMode Same as EFI_FILE.Open()
|
@param OpenMode Same as EFI_FILE.Open()
|
||||||
@param SectionType Section in FV to open.
|
@param SectionType Section in FV to open.
|
||||||
|
|
||||||
@return NULL Open failed
|
@return NULL Open failed
|
||||||
@return Valid EFI_OPEN_FILE handle
|
@return Valid EFI_OPEN_FILE handle
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_OPEN_FILE *
|
EFI_OPEN_FILE *
|
||||||
@ -782,7 +782,7 @@ EfiOpen (
|
|||||||
if (PathName[Index] == ':') {
|
if (PathName[Index] == ':') {
|
||||||
// Support fv0:\DxeCore:0x10
|
// Support fv0:\DxeCore:0x10
|
||||||
// This means open the PE32 Section of the file
|
// This means open the PE32 Section of the file
|
||||||
ModifiedSectionType = AsciiStrHexToUintn (&PathName[Index + 1]);
|
ModifiedSectionType = (EFI_SECTION_TYPE)AsciiStrHexToUintn (&PathName[Index + 1]);
|
||||||
PathName[Index] = '\0';
|
PathName[Index] = '\0';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1000,13 +1000,13 @@ Exit:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Use DeviceType and Index to form a valid PathName and try and open it.
|
Use DeviceType and Index to form a valid PathName and try and open it.
|
||||||
|
|
||||||
@param DeviceType Device type to open
|
@param DeviceType Device type to open
|
||||||
@param Index Device Index to use. Zero relative.
|
@param Index Device Index to use. Zero relative.
|
||||||
|
|
||||||
@return NULL Open failed
|
@return NULL Open failed
|
||||||
@return Valid EFI_OPEN_FILE handle
|
@return Valid EFI_OPEN_FILE handle
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_OPEN_FILE *
|
EFI_OPEN_FILE *
|
||||||
@ -1045,13 +1045,13 @@ EfiDeviceOpenByType (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Close a file handle opened by EfiOpen() and free all resources allocated by
|
Close a file handle opened by EfiOpen() and free all resources allocated by
|
||||||
EfiOpen().
|
EfiOpen().
|
||||||
|
|
||||||
@param Stream Open File Handle
|
@param Stream Open File Handle
|
||||||
|
|
||||||
@return EFI_INVALID_PARAMETER Stream is not an Open File
|
@return EFI_INVALID_PARAMETER Stream is not an Open File
|
||||||
@return EFI_SUCCESS Steam closed
|
@return EFI_SUCCESS Steam closed
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -1109,13 +1109,13 @@ EfiClose (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Return the size of the file represented by Stream. Also return the current
|
Return the size of the file represented by Stream. Also return the current
|
||||||
Seek position. Opening a file will enable a valid file size to be returned.
|
Seek position. Opening a file will enable a valid file size to be returned.
|
||||||
LoadFile is an exception as a load file size is set to zero.
|
LoadFile is an exception as a load file size is set to zero.
|
||||||
|
|
||||||
@param Stream Open File Handle
|
@param Stream Open File Handle
|
||||||
|
|
||||||
@return 0 Stream is not an Open File or a valid LoadFile handle
|
@return 0 Stream is not an Open File or a valid LoadFile handle
|
||||||
|
|
||||||
**/
|
**/
|
||||||
UINTN
|
UINTN
|
||||||
@ -1172,24 +1172,24 @@ EfiTell (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Seek to the Offset locaiton in the file. LoadFile and FV device types do
|
Seek to the Offset locaiton in the file. LoadFile and FV device types do
|
||||||
not support EfiSeek(). It is not possible to grow the file size using
|
not support EfiSeek(). It is not possible to grow the file size using
|
||||||
EfiSeek().
|
EfiSeek().
|
||||||
|
|
||||||
SeekType defines how use Offset to calculate the new file position:
|
SeekType defines how use Offset to calculate the new file position:
|
||||||
EfiSeekStart : Position = Offset
|
EfiSeekStart : Position = Offset
|
||||||
EfiSeekCurrent: Position is Offset bytes from the current position
|
EfiSeekCurrent: Position is Offset bytes from the current position
|
||||||
EfiSeekEnd : Only supported if Offset is zero to seek to end of file.
|
EfiSeekEnd : Only supported if Offset is zero to seek to end of file.
|
||||||
|
|
||||||
@param Stream Open File Handle
|
@param Stream Open File Handle
|
||||||
@param Offset Offset to seek too.
|
@param Offset Offset to seek too.
|
||||||
@param SeekType Type of seek to perform
|
@param SeekType Type of seek to perform
|
||||||
|
|
||||||
|
|
||||||
@return EFI_INVALID_PARAMETER Stream is not an Open File
|
@return EFI_INVALID_PARAMETER Stream is not an Open File
|
||||||
@return EFI_UNSUPPORTED LoadFile and FV doe not support Seek
|
@return EFI_UNSUPPORTED LoadFile and FV doe not support Seek
|
||||||
@return EFI_NOT_FOUND Seek past the end of the file.
|
@return EFI_NOT_FOUND Seek past the end of the file.
|
||||||
@return EFI_SUCCESS Steam closed
|
@return EFI_SUCCESS Steam closed
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -1297,19 +1297,19 @@ CacheTftpFile (
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Read BufferSize bytes from the current locaiton in the file. For load file,
|
Read BufferSize bytes from the current locaiton in the file. For load file,
|
||||||
FV, and TFTP case you must read the entire file.
|
FV, and TFTP case you must read the entire file.
|
||||||
|
|
||||||
@param Stream Open File Handle
|
@param Stream Open File Handle
|
||||||
@param Buffer Caller allocated buffer.
|
@param Buffer Caller allocated buffer.
|
||||||
@param BufferSize Size of buffer in bytes.
|
@param BufferSize Size of buffer in bytes.
|
||||||
|
|
||||||
|
|
||||||
@return EFI_SUCCESS Stream is not an Open File
|
@return EFI_SUCCESS Stream is not an Open File
|
||||||
@return EFI_END_OF_FILE Tried to read past the end of the file
|
@return EFI_END_OF_FILE Tried to read past the end of the file
|
||||||
@return EFI_INVALID_PARAMETER Stream is not an open file handle
|
@return EFI_INVALID_PARAMETER Stream is not an open file handle
|
||||||
@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
|
@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
|
||||||
@return "other" Error returned from device read
|
@return "other" Error returned from device read
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -1425,22 +1425,22 @@ EfiRead (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Read the entire file into a buffer. This routine allocates the buffer and
|
Read the entire file into a buffer. This routine allocates the buffer and
|
||||||
returns it to the user full of the read data.
|
returns it to the user full of the read data.
|
||||||
|
|
||||||
This is very useful for load flie where it's hard to know how big the buffer
|
This is very useful for load flie where it's hard to know how big the buffer
|
||||||
must be.
|
must be.
|
||||||
|
|
||||||
@param Stream Open File Handle
|
@param Stream Open File Handle
|
||||||
@param Buffer Pointer to buffer to return.
|
@param Buffer Pointer to buffer to return.
|
||||||
@param BufferSize Pointer to Size of buffer return..
|
@param BufferSize Pointer to Size of buffer return..
|
||||||
|
|
||||||
|
|
||||||
@return EFI_SUCCESS Stream is not an Open File
|
@return EFI_SUCCESS Stream is not an Open File
|
||||||
@return EFI_END_OF_FILE Tried to read past the end of the file
|
@return EFI_END_OF_FILE Tried to read past the end of the file
|
||||||
@return EFI_INVALID_PARAMETER Stream is not an open file handle
|
@return EFI_INVALID_PARAMETER Stream is not an open file handle
|
||||||
@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
|
@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
|
||||||
@return "other" Error returned from device read
|
@return "other" Error returned from device read
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -1468,18 +1468,18 @@ EfiReadAllocatePool (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Write data back to the file. For TFTP case you must write the entire file.
|
Write data back to the file. For TFTP case you must write the entire file.
|
||||||
|
|
||||||
@param Stream Open File Handle
|
@param Stream Open File Handle
|
||||||
@param Buffer Pointer to buffer to return.
|
@param Buffer Pointer to buffer to return.
|
||||||
@param BufferSize Pointer to Size of buffer return..
|
@param BufferSize Pointer to Size of buffer return..
|
||||||
|
|
||||||
|
|
||||||
@return EFI_SUCCESS Stream is not an Open File
|
@return EFI_SUCCESS Stream is not an Open File
|
||||||
@return EFI_END_OF_FILE Tried to read past the end of the file
|
@return EFI_END_OF_FILE Tried to read past the end of the file
|
||||||
@return EFI_INVALID_PARAMETER Stream is not an open file handle
|
@return EFI_INVALID_PARAMETER Stream is not an open file handle
|
||||||
@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
|
@return EFI_BUFFER_TOO_SMALL Buffer is not big enough to do the read
|
||||||
@return "other" Error returned from device write
|
@return "other" Error returned from device write
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -1589,14 +1589,14 @@ EfiWrite (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Given Cwd expand Path to remove .. and replace them with real
|
Given Cwd expand Path to remove .. and replace them with real
|
||||||
directory names.
|
directory names.
|
||||||
|
|
||||||
@param Cwd Current Working Directory
|
@param Cwd Current Working Directory
|
||||||
@param Path Path to expand
|
@param Path Path to expand
|
||||||
|
|
||||||
@return NULL Cwd or Path are not valid
|
@return NULL Cwd or Path are not valid
|
||||||
@return 'other' Path with .. expanded
|
@return 'other' Path with .. expanded
|
||||||
|
|
||||||
**/
|
**/
|
||||||
CHAR8 *
|
CHAR8 *
|
||||||
@ -1666,14 +1666,14 @@ ExpandPath (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Set the Curent Working Directory (CWD). If a call is made to EfiOpen () and
|
Set the Curent Working Directory (CWD). If a call is made to EfiOpen () and
|
||||||
the path does not contain a device name, The CWD is prepended to the path.
|
the path does not contain a device name, The CWD is prepended to the path.
|
||||||
|
|
||||||
@param Cwd Current Working Directory to set
|
@param Cwd Current Working Directory to set
|
||||||
|
|
||||||
|
|
||||||
@return EFI_SUCCESS CWD is set
|
@return EFI_SUCCESS CWD is set
|
||||||
@return EFI_INVALID_PARAMETER Cwd is not a valid device:path
|
@return EFI_INVALID_PARAMETER Cwd is not a valid device:path
|
||||||
|
|
||||||
**/
|
**/
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -1729,13 +1729,6 @@ EfiSetCwd (
|
|||||||
if (gCwd == NULL) {
|
if (gCwd == NULL) {
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
}
|
}
|
||||||
AsciiStrCpy (gCwd, File->DeviceName);
|
|
||||||
if (File->FileName == NULL) {
|
|
||||||
AsciiStrCat (gCwd, ":\\");
|
|
||||||
} else {
|
|
||||||
AsciiStrCat (gCwd, ":");
|
|
||||||
AsciiStrCat (gCwd, File->FileName);
|
|
||||||
}
|
|
||||||
|
|
||||||
EfiClose (File);
|
EfiClose (File);
|
||||||
if (Path != Cwd) {
|
if (Path != Cwd) {
|
||||||
@ -1746,17 +1739,17 @@ EfiSetCwd (
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Set the Curent Working Directory (CWD). If a call is made to EfiOpen () and
|
Set the Curent Working Directory (CWD). If a call is made to EfiOpen () and
|
||||||
the path does not contain a device name, The CWD is prepended to the path.
|
the path does not contain a device name, The CWD is prepended to the path.
|
||||||
The CWD buffer is only valid until a new call is made to EfiSetCwd(). After
|
The CWD buffer is only valid until a new call is made to EfiSetCwd(). After
|
||||||
a call to EfiSetCwd() it is not legal to use the pointer returned by
|
a call to EfiSetCwd() it is not legal to use the pointer returned by
|
||||||
this funciton.
|
this funciton.
|
||||||
|
|
||||||
@param Cwd Current Working Directory
|
@param Cwd Current Working Directory
|
||||||
|
|
||||||
|
|
||||||
@return "" No CWD set
|
@return "" No CWD set
|
||||||
@return 'other' Returns buffer that contains CWD.
|
@return 'other' Returns buffer that contains CWD.
|
||||||
|
|
||||||
**/
|
**/
|
||||||
CHAR8 *
|
CHAR8 *
|
||||||
|
Reference in New Issue
Block a user