/** @file
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.
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
**/
#ifndef _UNISTD_H_
#define _UNISTD_H_
//#include <machine/ansi.h>
//#include <machine/int_types.h>
//#include <sys/featuretest.h>
//#include <sys/types.h>
#include <sys/unistd.h>
#include <sys/EfiSysCall.h>
#define F_ULOCK 0
#define F_LOCK 1
#define F_TLOCK 2
#define F_TEST 3
/* 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 */
__BEGIN_DECLS
int dup(int);
int rename(const char *, const char *);
/* Functions implemented for compatibility. */
int getopt(int, char * const [], const char *);
extern char *optarg; /* getopt(3) external variables */
extern int optind;
pid_t getpgrp(void);
pid_t tcgetpgrp(int);
char *getpass(const char *);
int usleep(useconds_t);
unsigned int sleep(unsigned int);
char *basename(char *path);
#ifndef GETCWD_DECLARED
/** Gets the current working directory.
The getcwd() function shall place an absolute pathname of the current
working directory in the array pointed to by buf, and return buf. The
pathname copied to the array shall contain no components that are
symbolic links. The size argument is the size in bytes of the character
array pointed to by the buf argument.
@param[in,out] Buf The buffer to fill.
@param[in] BufSize The number of bytes in buffer.
@retval NULL The function failed.
@retval NULL Buf was NULL.
@retval NULL Size was 0.
@return buf The function completed successfully. See errno for info.
**/
char *getcwd(char *Buf, size_t BufSize);
#define GETCWD_DECLARED
#endif
#ifndef CHDIR_DECLARED
/** Change the current working directory.
The chdir() function shall cause the directory named by the pathname
pointed to by the path argument to become the current working directory;
that is, the starting point for path searches for pathnames not beginning
with '/'.
@param[in] Path The new path to set.
@todo Add non-shell CWD changing.
**/
int chdir(const char *Path);
#define CHDIR_DECLARED
#endif
/** Determine accessibility of a file.
The access() function checks the file, named by the pathname pointed to by
the Path argument, for accessibility according to the bit pattern contained
in Mode.
The value of Mode is either the bitwise-inclusive OR of the access
permissions to be checked (R_OK, W_OK, X_OK) or the existence test (F_OK).
If Path ends in '/' or '\\', the target must be a directory, otherwise it doesn't matter.
A file is executable if it is NOT a directory and it ends in ".efi".
@param[in] Path Path or name of the file to be checked.
@param[in] Mode Access permissions to check for.
@retval 0 Successful completion.
@retval -1 File is not accessible with the given Mode. The error condition
is indicated by errno. Values of errno specific to the access
function include: EACCES, ENOENT, ENOTDIR, ENAMETOOLONG
**/
int access(const char *Path, int Mode);
pid_t getpid(void);
// Networking
long gethostid(void);
int gethostname(char *, size_t);
int getdomainname(char *, size_t);
int setdomainname(const char *, size_t);
int sethostid(long);
int sethostname(const char *, size_t);
/* Stub functions implemented for porting ease.
These functions always fail or return NULL.
*/
__aconst char *getlogin(void);
pid_t fork(void);
uid_t getuid(void);
// For Future implementation
ssize_t pread(int, void *, size_t, off_t);
ssize_t pwrite(int, const void *, size_t, off_t);
int syscall(int, ...);
#if 0 // The following functions are not implemented
__dead void _exit(int) __attribute__((__noreturn__));
unsigned int alarm(unsigned int);
int chown(const char *, uid_t, gid_t);
size_t confstr(int, char *, size_t);
int execl(const char *, const char *, ...);
int execle(const char *, const char *, ...);
int execlp(const char *, const char *, ...);
int execv(const char *, char * const *);
int execve(const char *, char * const *, char * const *);
int execvp(const char *, char * const *);
long fpathconf(int, int);
gid_t getegid(void);
uid_t geteuid(void);
gid_t getgid(void);
int getgroups(int, gid_t []);
pid_t getppid(void);
int link(const char *, const char *);
long pathconf(const char *, int);
int pause(void);
int pipe(int *);
int setgid(gid_t);
int setpgid(pid_t, pid_t);
pid_t setsid(void);
int setuid(uid_t);
long sysconf(int);
int tcsetpgrp(int, pid_t);
__aconst char *ttyname(int);
extern int opterr;
extern int optopt;
extern int optreset;
extern char *suboptarg;
int setegid(gid_t);
int seteuid(uid_t);
int fdatasync(int);
int fsync(int);
int ttyname_r(int, char *, size_t);
int chroot(const char *);
int nice(int);
__aconst char *crypt(const char *, const char *);
int encrypt(char *, int);
pid_t getsid(pid_t);
#ifndef intptr_t
typedef __intptr_t intptr_t;
#define intptr_t __intptr_t
#endif
int brk(void *);
int fchdir(int);
int fchown(int, uid_t, gid_t);
int getdtablesize(void);
__pure int getpagesize(void); /* legacy */
pid_t getpgid(pid_t);
int lchown(const char *, uid_t, gid_t);
int lockf(int, int, off_t);
ssize_t readlink(const char * __restrict, char * __restrict, size_t);
void *sbrk(intptr_t);
int setregid(gid_t, gid_t);
int setreuid(uid_t, uid_t);
void swab(const void *, void *, size_t);
int symlink(const char *, const char *);
void sync(void);
useconds_t ualarm(useconds_t, useconds_t);
pid_t vfork(void) __RENAME(__vfork14);
/*
* Implementation-defined extensions
*/
int acct(const char *);
int closefrom(int);
int des_cipher(const char *, char *, long, int);
int des_setkey(const char *);
void endusershell(void);
int exect(const char *, char * const *, char * const *);
int fchroot(int);
int fsync_range(int, int, off_t, off_t);
int getgrouplist(const char *, gid_t, gid_t *, int *);
int getgroupmembership(const char *, gid_t, gid_t *, int, int *);
mode_t getmode(const void *, mode_t);
int getsubopt(char **, char * const *, char **);
__aconst char *getusershell(void);
int initgroups(const char *, gid_t);
int iruserok(uint32_t, int, const char *, const char *);
int issetugid(void);
int nfssvc(int, void *);
int profil(char *, size_t, u_long, u_int);
void psignal(unsigned int, const char *);
int rcmd(char **, int, const char *, const char *, const char *, int *);
int revoke(const char *);
int rresvport(int *);
int ruserok(const char *, int, const char *, const char *);
int setgroups(int, const gid_t *);
int setlogin(const char *);
void *setmode(const char *);
int setrgid(gid_t);
int setruid(uid_t);
void setusershell(void);
void strmode(mode_t, char *);
__aconst char *strsignal(int);
int swapctl(int, void *, int);
quad_t __syscall(quad_t, ...);
int undelete(const char *);
int rcmd_af(char **, int, const char *, const char *, const char *, int *, int);
int rresvport_af(int *, int);
int iruserok_sa(const void *, int, int, const char *, const char *);
#endif /* Unimplemented functions. */
__END_DECLS
#endif /* !_UNISTD_H_ */