Skip to content

Commit

Permalink
StdLib: Add isDirSep character classification macro and function. Imp…
Browse files Browse the repository at this point in the history
…lement several Posix functions and clean up EfiSysCall.h. Align file mode handling with UEFI file protocol flags.

Include/ctype.h:             Function declaration and Macro definition of isDirSep
Include/unistd.h:            Declarations added from EfiSysCall.h
Include/utime.h:             New file.  For the Posix utime() function.
Include/sys/_ctype.h:        Update character class bit maps.
Include/sys/EfiSysCall.h:    Move declarations to unistd.h
Include/sys/fcntl.h:         Improve comments.  Add UEFI-specific macros.
Include/sys/filio.h:         Remove declarations for unsupported file ioctls.
Include/sys/stat.h:          Fix flags.  Add macros and declarations.
Include/sys/time.h:          Add declarations for new functions Tm2Efi() and Time2Efi().
Include/sys/types.h:         Use EFI-specific instead of BSD-specific definitions for typedefs.
Include/sys/unistd.h:        Delete inappropriate content.  Guard macro definitions.

LibC/Locale/setlocale.c
LibC/Stdio/{fdopen.c, findfp.c, fopen.c, freopen.c, gettemp.c, makebuf.c, mktemp.c,
            remove.c, stdio.c, tempnam.c, tmpfile.c, tmpnam.c}
LibC/Time/{itimer.c, ZoneProc.c}
LibC/Uefi/SysCalls.c
LibC/Uefi/Devices/Console/daConsole.c
LibC/Uefi/Devices/UefiShell/daShell.c
PosixLib/Gen/readdir.c
                             Include unistd.h instead of EfiSysCall.h

LibC/Ctype/CClass.c:         Character classification function implementation for isDirSep.
LibC/Ctype/iCtype.c:         Update character classification and case conversion tables.
LibC/Time/TimeEfi.c:         Improve comments.  Implement new functions Tm2Efi() and Time2Efi().
LibC/Uefi/StubFunctions.c:   Add missing include.  Cosmetic changes to declarations.
LibC/Uefi/SysCalls.c:        Add support function for utime().
LibC/Uefi/Uefi.inf:          Add LibGen library class dependency.
LibC/Uefi/Xform.c:           Enhance Omode2EFI().
LibC/Uefi/Devices/UefiShell/daShell.c:    Enhance da_ShellMkdir.  Implement da_ShellIoctl to set file times.
PosixLib/Gen/access.c:       New file.  Implement the access() function.
PosixLib/Gen/dirname.c:      Enhance to use isDirSep and differentiate between the device, path, and filename components of UEFI Shell-style paths.
PosixLib/Gen/utime.c:        New file.  Implement the utime() function.
PosixLib/Gen/LibGen.inf:     Change MODULE_TYPE.  Add new files.

Signed-off-by: darylm503
Reviewed-by: geekboy15a
Reviewed-by: jljusten
Reviewed-by: Rahul Khana
Reviewed-by: leegrosenbaum


git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@12800 6f19259b-4bc3-4df7-8a09-765794883524
  • Loading branch information
darylm503 committed Nov 30, 2011
1 parent 8f04ca1 commit 0c1992f
Show file tree
Hide file tree
Showing 40 changed files with 1,019 additions and 423 deletions.
15 changes: 15 additions & 0 deletions StdLib/Include/ctype.h
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,20 @@ int isxdigit(int c);
**/
int isascii(int c);

/** Test whether a character is one of the characters used as a separator
between directory elements in a path.
Characters are '/', '\\'
This non-standard function is unique to this implementation.
@param[in] c The character to be tested.
@return Returns nonzero (true) if and only if the value of the parameter c
can be classified as specified in the description of the function.
**/
int isDirSep(int c);

/** The tolower function converts an uppercase letter to a corresponding
lowercase letter.
Expand Down Expand Up @@ -218,6 +232,7 @@ __END_DECLS
#define isspace(c) (__isCClass( (int)c, (_CW)))
#define isupper(c) (__isCClass( (int)c, (_CU)))
#define isxdigit(c) (__isCClass( (int)c, (_CD | _CX)))
#define isDirSep(c) (__isCClass( (int)c, (_C0)))
#define tolower(c) (__toLower((int)c))
#define toupper(c) (__toUpper((int)c))
#endif /* NO_CTYPE_MACROS */
Expand Down
148 changes: 52 additions & 96 deletions StdLib/Include/sys/EfiSysCall.h
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,6 @@
STDIN_FILENO 0 standard input file descriptor
STDOUT_FILENO 1 standard output file descriptor
STDERR_FILENO 2 standard error file descriptor
F_OK 0 test for existence of file
X_OK 0x01 test for execute or search permission
W_OK 0x02 test for write permission
R_OK 0x04 test for read permission
SEEK_SET 0 set file offset to offset
SEEK_CUR 1 set file offset to current plus offset
SEEK_END 2 set file offset to EOF plus offset
Expand Down Expand Up @@ -55,10 +51,6 @@
int DeleteOnClose (int fd); Mark an open file to be deleted when closed.
int FindFreeFD (int MinFd);
BOOLEAN ValidateFD (int fd, int IsOpen);
############### Functions added for compatibility.
char *getcwd (char *, size_t);
int chdir (const char *);
@endverbatim
Copyright (c) 2010 - 2011, Intel Corporation. All rights reserved.<BR>
Expand All @@ -82,12 +74,6 @@ struct stat; /* Structure declared in <sys/stat.h> */
#define STDOUT_FILENO 1 /**< standard output file descriptor */
#define STDERR_FILENO 2 /**< standard error file descriptor */

/* access function */
#define F_OK 0 /**< test for existence of file */
#define X_OK 0x01 /**< test for execute or search permission */
#define W_OK 0x02 /**< test for write permission */
#define R_OK 0x04 /**< test for read permission */

/* whence values for lseek(2)
Always ensure that these are consistent with <stdio.h> and <unistd.h>!
*/
Expand Down Expand Up @@ -238,142 +224,112 @@ __BEGIN_DECLS
- stdout: Standard Output (from the System Table)
- stderr: Standard Error Output (from the System Table)
@param[in] name
@param[in] oflags
@param[in] mode
@param[in] name Name of file to open.
@param[in] oflags Flags as defined in fcntl.h.
@param[in] mode Access mode to use if creating the file.
@return
@return Returns -1 on failure, otherwise the file descriptor for the open file.
**/
int open (const char *name, int oflags, int mode);

/**
@param[in]
/** Create a new file or rewrite an existing one.
The creat() function behaves as if it is implemented as follows:
@return
int creat(const char *path, mode_t mode)
{
return open(path, O_WRONLY|O_CREAT|O_TRUNC, mode);
}
@param[in] Path The name of the file to create.
@param[in] Mode Access mode (permissions) for the new file.
@return Returns -1 on failure, otherwise the file descriptor for the open file.
**/
int creat (const char *, mode_t);
int creat (const char *Path, mode_t Mode);

/** File control
/**
@param[in]
This function performs the operations described below and defined in <fcntl.h>.
@return
- F_DUPFD: Return the lowest numbered file descriptor available that is >= the third argument.
The new file descriptor refers to the same open file as Fd.
- F_SETFD: Set the file descriptor flags to the value specified by the third argument.
- F_GETFD: Get the file descriptor flags associated with Fd.
- F_SETFL: Set the file status flags based upon the value of the third argument.
- F_GETFL: Get the file status flags and access modes for file Fd.
@param[in] Fd File descriptor associated with the file to be controlled.
@param[in] Cmd Command to execute.
@param[in] ... Additional arguments, as needed by Cmd.
@return A -1 is returned to indicate failure, otherwise the value
returned is positive and depends upon Cmd as follows:
- F_DUPFD: A new file descriptor.
- F_SETFD: files previous file descriptor flags.
- F_GETFD: The files file descriptor flags.
- F_SETFL: The old status flags and access mode of the file.
- F_GETFL: The status flags and access mode of the file.
**/
int fcntl (int, int, ...);
int fcntl (int Fd, int Cmd, ...);
#endif // __FCNTL_SYSCALLS_DECLARED

/* These system calls are also declared in stat.h */
#ifndef __STAT_SYSCALLS_DECLARED
#define __STAT_SYSCALLS_DECLARED

/**
@param[in]
@return
**/
int mkdir (const char *, mode_t);

/**
@param[in]
@return
**/
int fstat (int, struct stat *);

/**
@param[in]
@return
**/
int lstat (const char *, struct stat *);

/**
@param[in]
@return
**/
int stat (const char *, struct stat *);

/**
@param[in]
@return
**/
int chmod (const char *, mode_t);
mode_t umask (mode_t cmask);

#endif // __STAT_SYSCALLS_DECLARED

// These are also declared in sys/types.h
#ifndef __OFF_T_SYSCALLS_DECLARED
#define __OFF_T_SYSCALLS_DECLARED

/**
@param[in]
@return
**/
off_t lseek (int, off_t, int);

/**
@param[in]
@return
**/
int truncate (const char *, off_t);

/**
@param[in]
@return
**/
int ftruncate (int, off_t); // IEEE Std 1003.1b-93
#endif /* __OFF_T_SYSCALLS_DECLARED */

/* EFI-specific Functions. */

/**
@param[in]
/** Mark an open file to be deleted when it is closed.
@param[in] fd File descriptor for the open file.
@return
@retval 0 The flag was set successfully.
@retval -1 An invalid fd was specified.
**/
int DeleteOnClose(int fd); /* Mark an open file to be deleted when closed. */
int DeleteOnClose(int fd);

/* Find and reserve a free File Descriptor.
/** Find and reserve a free File Descriptor.
Returns the first free File Descriptor greater than or equal to the,
already validated, fd specified by Minfd.
@return Returns -1 if there are no free FDs. Otherwise returns the
found fd.
*/
*/
int FindFreeFD (int MinFd);

/* Validate that fd refers to a valid file descriptor.
/** Validate that fd refers to a valid file descriptor.
IsOpen is interpreted as follows:
- Positive fd must be OPEN
- Zero fd must be CLOSED
- Negative fd may be OPEN or CLOSED
@retval TRUE fd is VALID
@retval FALSE fd is INVALID
*/
*/
BOOLEAN ValidateFD (int fd, int IsOpen);


/**
@param[in]
@return
**/
char *getcwd (char *, size_t);

/**
@param[in]
@return
**/
int chdir (const char *);

/* These system calls don't YET have EFI implementations. */
int access (const char *path, int amode);
int reboot (int, char *);
__END_DECLS

Expand Down
6 changes: 3 additions & 3 deletions StdLib/Include/sys/_ctype.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ extern int __isCClass( int _c, unsigned int mask); ///< Internal character c
__END_DECLS


/** Character Class bit masks.
@{
/** @{
Character Class bit masks.
**/
#define _CC 0x0001U ///< Control Characters
#define _CW 0x0002U ///< White Space
Expand All @@ -36,7 +36,7 @@ __END_DECLS
#define _CU 0x0010U ///< Uppercase Letter [A-Z]
#define _CL 0x0020U ///< Lowercase Letter [a-z]
#define _CX 0x0040U ///< Hexadecimal Digits [A-Fa-f]
#define _C0 0x0080U
#define _C0 0x0080U ///< Path Separator Characters, '/' and '\\'
#define _CS 0x0100U ///< Space Characters, ' ' in C locale
#define _CG 0x0200U ///< Graphic Characters
#define _CB 0x0400U ///< Blank Characters, ' ' and '\t' in C locale
Expand Down
15 changes: 10 additions & 5 deletions StdLib/Include/sys/fcntl.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,11 @@

#include <sys/stat.h>

/** File status flags used by open(2), fcntl(2).
/** @{
File status flags used by open(2), fcntl(2).
They are also used (indirectly) in the kernel file structure f_flags,
which is a superset of the open/fcntl flags.
Open/fcntl flags begin with O_; kernel-internal flags begin with F.
@{
**/
/* open-only flags */
#define O_RDONLY 0x00000000 ///< open for reading only
Expand All @@ -71,6 +71,11 @@
#define O_CREAT 0x00000200 ///< create if nonexistent
#define O_TRUNC 0x00000400 ///< truncate to zero length
#define O_EXCL 0x00000800 ///< error if already exists

/* UEFI-specific open-only flags. */
#define O_HIDDEN 0x00010000 ///< Hidden file attribute
#define O_SYSTEM 0x00020000 ///< System file attribute
#define O_ARCHIVE 0x00040000 ///< Archive file attribute
/// @}

//#define O_DIRECT 0x00080000 /* direct I/O hint */
Expand All @@ -81,7 +86,7 @@
* Constants used for fcntl(2)
*/

/** command values. @{ **/
/** @{ command values used for fcntl(2). **/
#define F_DUPFD 0 ///< duplicate file descriptor
#define F_GETFD 1 ///< get file descriptor flags
#define F_SETFD 2 ///< set file descriptor flags
Expand All @@ -99,13 +104,13 @@
/** file descriptor flags (F_GETFD, F_SETFD). **/
#define FD_CLOEXEC 1 ///< close-on-exec flag

/** record locking flags (F_GETLK, F_SETLK, F_SETLKW). @{ **/
/** @{ record locking flags (F_GETLK, F_SETLK, F_SETLKW). **/
#define F_RDLCK 1 ///< shared or read lock
#define F_UNLCK 2 ///< unlock
#define F_WRLCK 3 ///< exclusive or write lock
/// @}

/** Constants for fcntl's passed to the underlying fs - like ioctl's. @{ **/
/** @{ Constants for fcntl's passed to the underlying fs - like ioctl's. **/
#define F_PARAM_MASK 0xfff
#define F_PARAM_LEN(x) (((x) >> 16) & F_PARAM_MASK)
#define F_PARAM_MAX 4095
Expand Down
45 changes: 22 additions & 23 deletions StdLib/Include/sys/filio.h
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
/* $NetBSD: filio.h,v 1.10 2005/12/11 12:25:20 christos Exp $ */
/** @file
Copyright (c) 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.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
/*-
* Copyright (c) 1982, 1986, 1990, 1993, 1994
* The Regents of the University of California. All rights reserved.
* The Regents of the University of California. All rights reserved.
* (c) UNIX System Laboratories, Inc.
* All or some portions of this file are derived from material licensed
* to the University of California by American Telephone and Telegraph
Expand Down Expand Up @@ -33,30 +41,21 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* @(#)filio.h 8.1 (Berkeley) 3/28/94
* @(#)filio.h 8.1 (Berkeley) 3/28/94
NetBSD: filio.h,v 1.10 2005/12/11 12:25:20 christos Exp
*/

#ifndef _SYS_FILIO_H_
#define _SYS_FILIO_H_
#ifndef _SYS_FILIO_H_
#define _SYS_FILIO_H_

#include <sys/ioccom.h>

/* Generic file-descriptor ioctl's. */
#define FIOCLEX _IO('f', 1) /* set close on exec on fd */
#define FIONCLEX _IO('f', 2) /* remove close on exec */
#define FIONREAD _IOR('f', 127, int) /* get # bytes to read */
#define FIONBIO _IOW('f', 126, int) /* set/clear non-blocking i/o */
#define FIOASYNC _IOW('f', 125, int) /* set/clear async i/o */
#define FIOSETOWN _IOW('f', 124, int) /* set owner */
#define FIOGETOWN _IOR('f', 123, int) /* get owner */
#define OFIOGETBMAP _IOWR('f', 122, uint32_t) /* get underlying block no. */
#define FIOGETBMAP _IOWR('f', 122, daddr_t) /* get underlying block no. */
#define FIONWRITE _IOR('f', 121, int) /* get # bytes outstanding
* in send queue. */
#define FIONSPACE _IOR('f', 120, int) /* get space in send queue. */


/* Ugly symbol for compatibility with other operating systems */
#define FIBMAP FIOGETBMAP
typedef const struct timeval* ptimeval_t;

/* File-descriptor ioctl's. */

#define FIODLEX _IO ('f', 1) /* set Delete-on-Close */
#define FIONDLEX _IO ('f', 2) /* clear Delete-on-Close */
#define FIOSETIME _IOW ('f', 127, ptimeval_t) /* Set access and modification times */

#endif /* !_SYS_FILIO_H_ */
Loading

0 comments on commit 0c1992f

Please sign in to comment.