Compare commits

..

1 Commits

Author SHA1 Message Date
The ReactOS Team
eeff2a1e2c This commit was manufactured by cvs2svn to create tag 'krnl0019'.
svn path=/tags/krnl0019/; revision=2645
2002-02-24 13:10:37 +00:00
12844 changed files with 598090 additions and 3436763 deletions

View File

@@ -0,0 +1,33 @@
# $Id: Makefile,v 1.1 2002/01/20 21:22:29 ea Exp $
#
# Tu run it in Win32 console mode, undefine __SUBSYSTEM_WINDOWS__
# and pass "console" in the ld's --subsystem option.
#
#
PATH_TO_TOP=../../../..
PATH_TO_PSX_TOP=../..
TARGET_NAME=sh
CFLAGS=-D__SUBSYSTEM_WINDOWS__
OBJECTS=$(TARGET_NAME).o
LIBRARIES=\
$(PATH_TO_PSX_TOP)/lib/crt0w32.o \
$(PATH_TO_PSX_TOP)/lib/psxdll/psxdll.a
$(TARGET_NAME): $(OBJECTS) $(LIBRARIES)
$(CC) \
$(CFLAGS) \
$(OBJECTS) \
$(LIBRARIES)\
-o $@ \
-Wl,--subsystem,windows\
-nostartfiles \
-nostdlib
include $(PATH_TO_TOP)/rules.mak
# EOF

60
posix/apps/baresh/sh.c Normal file
View File

@@ -0,0 +1,60 @@
/* $Id: sh.c,v 1.1 2002/01/20 21:22:29 ea Exp $
*
* baresh - Bare Shell for the PSX subsystem.
* Copyright (c) 2002 Emanuele Aliberti
* License: GNU GPL v2
*/
#include <stdio.h>
#include <sys/types.h>
#include <dirent.h>
#define INPUT_BUFFER_SIZE 128
int run=1;
void cmd_exit(char*buf)
{
run=0;
}
void cmd_pwd(char * buf)
{
char pwd[1024];
getcwd(pwd,sizeof pwd);
printf("%s\n",pwd);
}
void cmd_ls(char*buf)
{
char pwd[1024];
DIR * dir;
struct dirent * entry;
getcwd(pwd,sizeof pwd);
dir=opendir(pwd);
while (NULL!=(entry=readdir(dir)))
{
printf("%s\n",entry->d_name);
}
closedir(dir);
}
int main(int argc,char*argv[])
{
char buf[INPUT_BUFFER_SIZE];
while (run)
{
printf("# ");
if (gets(buf))
{
if (!strcmp("exit",buf)) cmd_exit(buf);
else if (!strcmp("pwd",buf)) cmd_pwd(buf);
else if (!strcmp("ls",buf)) cmd_ls(buf);
else printf("%s: unknown command\n",argv[0]);
}
}
return 0;
}
/* EOF */

74
posix/include/aio.h Normal file
View File

@@ -0,0 +1,74 @@
/* $Id: aio.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* aio.h
*
* asynchronous input and output (REALTIME). Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __AIO_H_INCLUDED__
#define __AIO_H_INCLUDED__
/* INCLUDES */
#include <fcntl.h>
#include <signal.h>
#include <sys/types.h>
#include <time.h>
/* OBJECTS */
/* TYPES */
typedef struct _tag_aiocb
{
int aio_fildes; /* file descriptor */
off_t aio_offset; /* file offset */
volatile void* aio_buf; /* location of buffer */
size_t aio_nbytes; /* length of transfer */
int aio_reqprio; /* request priority offset */
struct sigevent aio_sigevent; /* signal number and value */
int aio_lio_opcode; /* operation to be performed */
} aiocb;
/* CONSTANTS */
#define AIO_CANCELED 0
#define AIO_NOTCANCELED 1
#define AIO_ALLDONE 2
#define LIO_WAIT 0
#define LIO_NOWAIT 1
#define LIO_READ 2
#define LIO_WRITE 3
#define LIO_NOP 4
/* PROTOTYPES */
int aio_cancel(int, struct aiocb *);
int aio_error(const struct aiocb *);
int aio_fsync(int, struct aiocb *);
int aio_read(struct aiocb *);
ssize_t aio_return(struct aiocb *);
int aio_suspend(const struct aiocb *const[], int, const struct timespec *);
int aio_write(struct aiocb *);
int lio_listio(int, struct aiocb *const[], int, struct sigevent *);
/* MACROS */
#endif /* __AIO_H_INCLUDED__ */
/* EOF */

56
posix/include/arpa/inet.h Normal file
View File

@@ -0,0 +1,56 @@
/* $Id: inet.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* arpa/inet.h
*
* definitions for internet operations. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __ARPA_INET_H_INCLUDED__
#define __ARPA_INET_H_INCLUDED__
/* INCLUDES */
#include <netinet/in.h>
#include <inttypes.h>
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
uint32_t htonl(uint32_t hostlong);
uint16_t htons(uint16_t hostshort);
uint32_t ntohl(uint32_t netlong);
uint16_t ntohs(uint16_t netshort);
in_addr_t inet_addr(const char *cp);
in_addr_t inet_lnaof(struct in_addr in);
struct in_addr inet_makeaddr(in_addr_t net, in_addr_t lna);
in_addr_t inet_netof(struct in_addr in);
in_addr_t inet_network(const char *cp);
char *inet_ntoa(struct in_addr in);
/* MACROS */
#endif /* __ARPA_INET_H_INCLUDED__ */
/* EOF */

65
posix/include/assert.h Normal file
View File

@@ -0,0 +1,65 @@
/* $Id: assert.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* assert.h
*
* verify program assertion. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __ASSERT_H_INCLUDED__
#define __ASSERT_H_INCLUDED__
/* types */
/* constants */
/* prototypes */
/* macros */
#ifdef NDEBUG
#define assert(ignore) ((void) 0)
#else /* !NDEBUG */
#define assert(expression) \
#ifdef __PSXDLL__
/* headers for internal usage by psxdll.dll and ReactOS */
#include <psxdll/stdio.h>
#include <psxdll/stdlib.h>
#else /* ! __PSXDLL__ */
/* standard POSIX headers */
#include <stdio.h>
#include <stdlib.h>
#endif
if(!(expression)) \
{ \
fputs("__FILE__, line __LINE__: assertion \"expression\" failed\n", stderr); \
abort(); \
}
#endif /* NDEBUG */
#endif /* __ASSERT_H_INCLUDED__ */
/* EOF */

63
posix/include/cpio.h Normal file
View File

@@ -0,0 +1,63 @@
/* $Id: cpio.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* cpio.h
*
* cpio archive values. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __CPIO_H_INCLUDED__
#define __CPIO_H_INCLUDED__
/* INCLUDES */
/* TYPES */
/* CONSTANTS */
#define C_IRUSR (0000400) /* read by owner */
#define C_IWUSR (0000200) /* write by owner */
#define C_IXUSR (0000100) /* execute by owner */
#define C_IRGRP (0000040) /* read by group */
#define C_IWGRP (0000020) /* write by group */
#define C_IXGRP (0000010) /* execute by group */
#define C_IROTH (0000004) /* read by others */
#define C_IWOTH (0000002) /* write by others */
#define C_IXOTH (0000001) /* execute by others */
#define C_ISUID (0004000) /* set user ID */
#define C_ISGID (0002000) /* set group ID */
#define C_ISVTX (0001000) /* on directories, restricted deletion flag */
#define C_ISDIR (0040000) /* directory */
#define C_ISFIFO (0010000) /* FIFO */
#define C_ISREG (0100000) /* regular file */
#define C_ISBLK (0060000) /* block special */
#define C_ISCHR (0020000) /* character special */
#define C_ISCTG (0110000) /* reserved */
#define C_ISLNK (0120000) /* symbolic link */
#define C_ISSOCK (0140000) /* socket */
#define MAGIC "070707"
/* PROTOTYPES */
/* MACROS */
#endif /* __CPIO_H_INCLUDED__ */
/* EOF */

61
posix/include/ctype.h Normal file
View File

@@ -0,0 +1,61 @@
/* $Id: ctype.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* ctype.h
*
* character types. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __CTYPE_H_INCLUDED__
#define __CTYPE_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
int isalnum(int);
int isalpha(int);
int isascii(int);
int iscntrl(int);
int isdigit(int);
int isgraph(int);
int islower(int);
int isprint(int);
int ispunct(int);
int isspace(int);
int isupper(int);
int isxdigit(int);
int toascii(int);
int tolower(int);
int toupper(int);
/* MACROS */
/* FIXME: the standard isn't clear about these */
#define _toupper(c) (toupper(c))
#define _tolower(c) (tolower(c))
#endif /* __CTYPE_H_INCLUDED__ */
/* EOF */

70
posix/include/dirent.h Normal file
View File

@@ -0,0 +1,70 @@
/* $Id: dirent.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* dirent.h
*
* format of directory entries. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __DIRENT_H_INCLUDED__
#define __DIRENT_H_INCLUDED__
/* INCLUDES */
#include <sys/types.h>
#include <stddef.h>
/* TYPES */
typedef void DIR;
struct dirent
{
ino_t d_ino; /* file serial number */
char *d_name; /* name of entry */
};
/* for Unicode filenames */
struct _Wdirent
{
ino_t d_ino; /* file serial number */
wchar_t *d_name; /* name of entry */
};
/* CONSTANTS */
/* PROTOTYPES */
int closedir(DIR *);
DIR *opendir(const char *);
struct dirent *readdir(DIR *);
int readdir_r(DIR *, struct dirent *, struct dirent **);
void rewinddir(DIR *);
void seekdir(DIR *, long int);
long int telldir(DIR *);
/* for Unicode filenames */
DIR *_Wopendir(const wchar_t *);
struct _Wdirent *_Wreaddir(DIR *);
int _Wreaddir_r(DIR *, struct _Wdirent *, struct _Wdirent **);
/* MACROS */
#endif /* __DIRENT_H_INCLUDED__ */
/* EOF */

58
posix/include/dlfcn.h Normal file
View File

@@ -0,0 +1,58 @@
/* $Id: dlfcn.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* dlfcn.h
*
* dynamic linking. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __DLFCN_H_INCLUDED__
#define __DLFCN_H_INCLUDED__
/* INCLUDES */
/* TYPES */
/* CONSTANTS */
#define RTLD_LAZY (0x00000000) /* Relocations are performed at an \
implementation-dependent time. */
#define RTLD_NOW (0x00000001) /* Relocations are performed when \
the object is loaded. */
#define RTLD_GLOBAL (0x00000010) /* All symbols are available for \
relocation processing of other \
modules. */
#define RTLD_LOCAL (0x00000020) /* All symbols are not made available \
for relocation processing by other \
modules. */
#define RTLD_NEXT ((void *)(-1))
/* PROTOTYPES */
void *dlopen(const char *, int);
void *dlsym(void *, const char *);
int dlclose(void *);
char *dlerror(void);
/* MACROS */
#endif /* __DLFCN_H_INCLUDED__ */
/* EOF */

123
posix/include/errno.h Normal file
View File

@@ -0,0 +1,123 @@
/* $Id: errno.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* errno.h
*
* system error numbers. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __ERRNO_H_INCLUDED__
#define __ERRNO_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
#define E2BIG ( 1) /* Argument list too long. */
#define EACCES ( 2) /* Permission denied. */
#define EADDRINUSE ( 3) /* Address in use. */
#define EADDRNOTAVAIL ( 4) /* Address not available. */
#define EAFNOSUPPORT ( 5) /* Address family not supported. */
#define EAGAIN ( 6) /* Resource unavailable, try again */
#define EALREADY ( 7) /* Connection already in progress. */
#define EBADF ( 8) /* Bad file descriptor. */
#define EBADMSG ( 9) /* Bad message. */
#define EBUSY (10) /* Device or resource busy. */
#define ECANCELED (11) /* Operation canceled. */
#define ECHILD (12) /* No child processes. */
#define ECONNABORTED (13) /* Connection aborted. */
#define ECONNREFUSED (14) /* Connection refused. */
#define ECONNRESET (15) /* Connection reset. */
#define EDEADLK (16) /* Resource deadlock would occur. */
#define EDESTADDRREQ (17) /* Destination address required. */
#define EDOM (18) /* Mathematics argument out of domain of function. */
#define EDQUOT (19) /* Reserved. */
#define EEXIST (20) /* File exists. */
#define EFAULT (21) /* Bad address. */
#define EFBIG (22) /* File too large. */
#define EHOSTUNREACH (23) /* Host is unreachable. */
#define EIDRM (24) /* Identifier removed. */
#define EILSEQ (25) /* Illegal byte sequence. */
#define EINPROGRESS (26) /* Operation in progress. */
#define EINTR (27) /* Interrupted function. */
#define EINVAL (28) /* Invalid argument. */
#define EIO (29) /* I/O error. */
#define EISCONN (30) /* Socket is connected. */
#define EISDIR (31) /* Is a directory. */
#define ELOOP (32) /* Too many levels of symbolic links. */
#define EMFILE (33) /* Too many open files. */
#define EMLINK (34) /* Too many links. */
#define EMSGSIZE (35) /* Message too large. */
#define EMULTIHOP (36) /* Reserved. */
#define ENAMETOOLONG (37) /* Filename too long. */
#define ENETDOWN (38) /* Network is down. */
#define ENETUNREACH (39) /* Network unreachable. */
#define ENFILE (40) /* Too many files open in system. */
#define ENOBUFS (41) /* No buffer space available. */
#define ENODATA (42) /* No message is available on the STREAM head read queue. */
#define ENODEV (43) /* No such device. */
#define ENOENT (44) /* No such file or directory. */
#define ENOEXEC (45) /* Executable file format error. */
#define ENOLCK (46) /* No locks available. */
#define ENOLINK (47) /* Reserved. */
#define ENOMEM (48) /* Not enough space. */
#define ENOMSG (49) /* No message of the desired type. */
#define ENOPROTOOPT (50) /* Protocol not available. */
#define ENOSPC (51) /* No space left on device. */
#define ENOSR (52) /* No STREAM resources. */
#define ENOSTR (53) /* Not a STREAM. */
#define ENOSYS (54) /* Function not supported. */
#define ENOTCONN (55) /* The socket is not connected. */
#define ENOTDIR (56) /* Not a directory. */
#define ENOTEMPTY (57) /* Directory not empty. */
#define ENOTSOCK (58) /* Not a socket. */
#define ENOTSUP (59) /* Not supported. */
#define ENOTTY (60) /* Inappropriate I/O control operation. */
#define ENXIO (61) /* No such device or address. */
#define EOPNOTSUPP (62) /* Operation not supported on socket. */
#define EOVERFLOW (63) /* Value too large to be stored in data type. */
#define EPERM (64) /* Operation not permitted. */
#define EPIPE (65) /* Broken pipe. */
#define EPROTO (66) /* Protocol error. */
#define EPROTONOSUPPORT (67) /* Protocol not supported. */
#define EPROTOTYPE (68) /* Socket type not supported. */
#define ERANGE (69) /* Result too large. */
#define EROFS (70) /* Read-only file system. */
#define ESPIPE (71) /* Invalid seek. */
#define ESRCH (72) /* No such process. */
#define ESTALE (73) /* Reserved. */
#define ETIME (74) /* Streamioctl()timeout. */
#define ETIMEDOUT (75) /* Connection timed out. */
#define ETXTBSY (76) /* Text file busy. */
#define EWOULDBLOCK (77) /* Operation would block */
#define EXDEV (78) /* Cross-device link. */
/* PROTOTYPES */
int * __PdxGetThreadErrNum(void); /* returns a pointer to the current thread's errno */
/* MACROS */
#define errno (*__PdxGetThreadErrNum())
#endif /* __ERRNO_H_INCLUDED__ */
/* EOF */

149
posix/include/fcntl.h Normal file
View File

@@ -0,0 +1,149 @@
/* $Id: fcntl.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* fcntl.h
*
* file control options. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __FCNTL_H_INCLUDED__
#define __FCNTL_H_INCLUDED__
/* INCLUDES */
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
/* OBJECTS */
/* TYPES */
/*
the structure flock describes a file lock
*/
struct flock
{
short l_type; /* type of lock; F_RDLCK, F_WRLCK, F_UNLCK */
short l_whence; /* flag for starting offset */
off_t l_start; /* relative offset in bytes */
off_t l_len; /* size; if 0 then until EOF */
pid_t l_pid; /* process ID of the process holding the lock;
returned with F_GETLK */
};
/* CONSTANTS */
/*
values for cmd used by fcntl()
*/
enum __fcntl_cmd
{
F_DUPFD, /* duplicate file descriptor */
F_GETFD, /* get file descriptor flags */
F_SETFD, /* set file descriptor flags */
F_GETFL, /* get file status flags and file access modes */
F_SETFL, /* Set file status flags */
F_GETLK, /* get record locking information */
F_SETLK, /* set record locking information */
F_SETLKW, /* set record locking information; wait if blocked */
/* ReactOS-specific */
F_NEWFD, /* create new file descriptor */
F_DELFD, /* delete file descriptor */
F_GETALL, /* get a copy of the internal descriptor object */
F_SETALL, /* initialize internal descriptor object */
F_GETXP, /* get file descriptor extra data pointer */
F_SETXP, /* set file descriptor extra data pointer */
F_GETXS, /* get file descriptor extra data size */
F_SETXS, /* set file descriptor extra data size */
F_GETFH, /* get file handle */
F_SETFH /* set file handle */
};
/*
file descriptor flags used for fcntl()
*/
/* Close the file descriptor upon execution of an exec family function. */
#define FD_CLOEXEC (0x00000001)
/*
values for l_type used for record locking with fcntl()
*/
/* Shared or read lock. */
#define F_RDLCK (1)
/* Unlock. */
#define F_UNLCK (2)
/* Exclusive or write lock. */
#define F_WRLCK (3)
/*
file flags used for open()
*/
/* Create file if it does not exist. */
#define O_CREAT (0x00000001)
/* Exclusive use flag. */
#define O_EXCL (0x00000002)
/* Do not assign controlling terminal. */
#define O_NOCTTY (0x00000004)
/* Truncate flag. */
#define O_TRUNC (0x00000008)
/* ReactOS-specific */
/* File must be a directory */
#define _O_DIRFILE (0x00000010)
/*
file status flags used for open() and fcntl()
*/
/* Set append mode. */
#define O_APPEND (0x00000100)
/* Write according to synchronised I/O data integrity completion. */
#define O_DSYNC (0x00000200)
/* Non-blocking mode. */
#define O_NONBLOCK (0x00000400)
/* Synchronised read I/O operations. */
#define O_RSYNC (0x00000800)
/* Write according to synchronised I/O file integrity completion. */
#define O_SYNC (0x00001000)
/*
file access modes used for open() and fcntl()
*/
/* Open for reading only. */
#define O_RDONLY (0x01000000)
/* Open for reading and writing. */
#define O_RDWR (0x02000000)
/* Open for writing only. */
#define O_WRONLY (0x04000000)
/*
mask for use with file access modes
*/
#define O_ACCMODE (O_RDONLY | O_RDWR | O_WRONLY)
/* PROTOTYPES */
int creat(const char *, mode_t);
int fcntl(int, int, ...);
int open(const char *, int, ...);
int _Wcreat(const wchar_t *, mode_t);
int _Wopen(const wchar_t *, int, ...);
/* MACROS */
#endif /* __FCNTL_H_INCLUDED__ */
/* EOF */

93
posix/include/fmtmsg.h Normal file
View File

@@ -0,0 +1,93 @@
/* $Id: fmtmsg.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* fmtmsg.h
*
* message display structures. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __FMTMSG_H_INCLUDED__
#define __FMTMSG_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* Major Classifications */
/* NOTE: these are unique values, not flags. Their bits can overlap, but
cannot overlap with those of other categories */
#define MM_HARD (0x00000001) /* Source of the condition is hardware. */
#define MM_SOFT (0x00000002) /* Source of the condition is software. */
#define MM_FIRM (0x00000003) /* Source of the condition is firmware. */
/* Message Source Subclassifications */
/* NOTE: these are unique values, not flags. Their bits can overlap, but
cannot overlap with those of other categories */
#define MM_APPL (0x00000010) /* Condition detected by application. */
#define MM_UTIL (0x00000020) /* Condition detected by utility. */
#define MM_OPSYS (0x00000030) /* Condition detected by operating system. */
/* Status Subclassifications */
/* NOTE: these are unique values, not flags. Their bits can overlap, but
cannot overlap with those of other categories */
#define MM_RECOVER (0x00000100) /* Recoverable error. */
#define MM_NRECOV (0x00000200) /* Non-recoverable error. */
/* Display Subclassifications */
/* NOTE: these, unlike other classification constants, are flags. Their
bits must be distinct */
#define MM_PRINT (0x00001000) /* Display message on standard error. */
#define MM_CONSOLE (0x00002000) /* Display message on system console. */
/* Identifiers for the levels of severity */
#define MM_NOSEV (0) /* No severity level provided for the message. */
#define MM_INFO (1) /* Informative message. */
#define MM_WARNING (2) /* Application has detected unusual non-error \
condition. */
#define MM_ERROR (3) /* Application has encountered a non-fatal fault. */
#define MM_HALT (4) /* Error causing application to halt. */
/* Null values and identifiers */
#define MM_NULLLBL ((char *)0) /* Null label */
#define MM_NULLSEV (0) /* Null severity */
#define MM_NULLMC (0L) /* Null class */
#define MM_NULLTXT ((char *)0) /* Null text */
#define MM_NULLACT ((char *)0) /* Null action */
#define MM_NULLTAG ((char *)0) /* Null tag */
/* Return values */
#define MM_OK ( 0) /* The function succeeded. */
#define MM_NOTOK (-1) /* The function failed completely. */
#define MM_NOMSG (-2) /* The function was unable to generate a message on \
standard error, but otherwise succeeded. */
#define MM_NOCON (-3) /* The function was unable to generate a console \
message, but otherwise succeeded. */
/* PROTOTYPES */
int fmtmsg(long, const char*, int, const char*, const char*, const char*);
/* MACROS */
#endif /* __FMTMSG_H_INCLUDED__ */
/* EOF */

66
posix/include/fnmatch.h Normal file
View File

@@ -0,0 +1,66 @@
/* $Id: fnmatch.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* fnmatch.h
*
* filename-matching types. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __FNMATCH_H_INCLUDED__
#define __FNMATCH_H_INCLUDED__
/* INCLUDES */
#ifdef __PSXDLL__
/* headers for internal usage by psxdll.dll and ReactOS */
#else /* ! __PSXDLL__ */
/* standard POSIX headers */
#endif
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* Flags */
#define FNM_PATHNAME (0x00000001) /* Slash in string only matches slash \
in pattern. */
#define FNM_PERIOD (0x00000002) /* Leading period in string must be \
exactly matched by period in \
pattern. */
#define FNM_NOESCAPE (0x00000004) /* Disable backslash escaping. */
/* Return values */
#define FNM_NOMATCH (1) /* The string does not match the specified \
pattern. */
#define FNM_NOSYS (2) /* The implementation does not support this \
function. */
/* PROTOTYPES */
int fnmatch(const char *, const char *, int);
/* MACROS */
#endif /* __FNMATCH_H_INCLUDED__ */
/* EOF */

73
posix/include/ftw.h Normal file
View File

@@ -0,0 +1,73 @@
/* $Id: ftw.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* ftw.h
*
* file tree traversal. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __FTW_H_INCLUDED__
#define __FTW_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
struct FTW
{
int base;
int level;
};
/* CONSTANTS */
/* Values of the third argument to the application-supplied function
that is passed as the second argument to ftw() and nftw() */
#define FTW_F (1) /* File. */
#define FTW_D (2) /* Directory. */
#define FTW_DNR (3) /* Directory without read permission. */
#define FTW_DP (4) /* Directory with subdirectories visited. */
#define FTW_NS (5) /* Unknown type, stat() failed. */
#define FTW_SL (6) /* Symbolic link. */
#define FTW_SLN (7) /* Symbolic link that names a non-existent file. */
/* Values of the fourth argument to nftw() */
#define FTW_PHYS (0x00000001) /* Physical walk, does not follow symbolic \
links. Otherwise, nftw() will follow \
links but will not walk down any path \
that crosses itself. */
#define FTW_MOUNT (0x00000002) /* The walk will not cross a mount point. */
#define FTW_DEPTH (0x00000004) /* All subdirectories will be visited before \
the directory itself. */
#define FTW_CHDIR (0x00000008) /* The walk will change to each directory \
before reading it. */
/* PROTOTYPES */
int ftw(const char *,
int (*)(const char *, const struct stat *, int), int);
int nftw(const char *, int (*)
(const char *, const struct stat *, int, struct FTW*),
int, int);
/* MACROS */
#endif /* __FTW_H_INCLUDED__ */
/* EOF */

73
posix/include/glob.h Normal file
View File

@@ -0,0 +1,73 @@
/* $Id: glob.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* glob.h
*
* pathname pattern-matching types. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __GLOB_H_INCLUDED__
#define __GLOB_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
typedef struct __tagglob_t
{
size_t gl_pathc; /* count of paths matched by pattern */
char **gl_pathv; /* pointer to a list of matched pathnames */
size_t gl_offs; /* slots to reserve at the beginning of gl_pathv */
} glob_t;
/* CONSTANTS */
/* Values for the flags argument */
#define GLOB_APPEND (0x00000001) /* Append generated pathnames to \
those previously obtained. */
#define GLOB_DOOFFS (0x00000002) /* Specify how many null pointers to \
add to the beginning of */
#define GLOB_ERR (0x00000004) /* Cause glob() to return on error. */
#define GLOB_MARK (0x00000008) /* Each pathname that is a directory \
that matches pattern has a slash \
appended. */
#define GLOB_NOCHECK (0x00000010) /* If pattern does not match any pathname, \
then return a list consisting of only \
pattern. */
#define GLOB_NOESCAPE (0x00000020) /* Disable backslash escaping. */
#define GLOB_NOSORT (0x00000040) /* Do not sort the pathnames returned. */
/* Error return values */
#define GLOB_ABORTED (-1) /* The scan was stopped because GLOB_ERR was set \
or errfunc returned non-zero. */
#define GLOB_NOMATCH (-2) /* The pattern does not match any existing pathname, \
and GLOB_NOCHECK was not set in flags. */
#define GLOB_NOSPACE (-3) /* An attempt to allocate memory failed. */
#define GLOB_NOSYS (-4) /* The implementation does not support this function. */
/* PROTOTYPES */
int glob(const char *, int, int (*)(const char *, int), glob_t *);
void globfree (glob_t *);
/* MACROS */
#endif /* __GLOB_H_INCLUDED__ */
/* EOF */

59
posix/include/grp.h Normal file
View File

@@ -0,0 +1,59 @@
/* $Id: grp.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* grp.h
*
* group structure. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __GRP_H_INCLUDED__
#define __GRP_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
struct group
{
char *gr_name; /* the name of the group */
gid_t gr_gid; /* numerical group ID */
char **gr_mem; /* pointer to a null-terminated array of character
pointers to member names */
};
/* CONSTANTS */
/* PROTOTYPES */
struct group *getgrgid(gid_t);
struct group *getgrnam(const char *);
int getgrgid_r(gid_t, struct group *, char *,
size_t, struct group **);
int getgrnam_r(const char *, struct group *, char *,
size_t , struct group **);
struct group *getgrent(void);
void endgrent(void);
void setgrent(void);
/* MACROS */
#endif /* __GRP_H_INCLUDED__ */
/* EOF */

47
posix/include/iconv.h Normal file
View File

@@ -0,0 +1,47 @@
/* $Id: iconv.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* iconv.h
*
* codeset conversion facility. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __ICONV_H_INCLUDED__
#define __ICONV_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
typedef (void *) iconv_t;
/* CONSTANTS */
/* PROTOTYPES */
iconv_t iconv_open(const char *, const char *);
size_t iconv(iconv_t, char **, size_t *, char **, size_t *);
int iconv_close(iconv_t);
/* MACROS */
#endif /* __ICONV_H_INCLUDED__ */
/* EOF */

60
posix/include/inttypes.h Normal file
View File

@@ -0,0 +1,60 @@
/* $Id: inttypes.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* inttypes.h
*
* fixed size integral types. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __INTTYPES_H_INCLUDED__
#define __INTTYPES_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* signed */
typedef signed char int8_t; /* 8-bit signed integral type. */
typedef signed short int int16_t; /* 16-bit signed integral type. */
typedef signed long int int32_t; /* 32-bit signed integral type. */
typedef signed long long int64_t; /* 64-bit signed integral type. */
/* unsigned */
typedef unsigned char uint8_t; /* 8-bit unsigned integral type. */
typedef unsigned short int uint16_t; /* 16-bit unsigned integral type. */
typedef unsigned long int uint32_t; /* 32-bit unsigned integral type. */
typedef unsigned long long uint64_t; /* 64-bit unsigned integral type. */
/* pointer-sized */
typedef signed long int intptr_t; /* Signed integral type large enough
to hold any pointer. */
typedef unsigned long int uintptr_t; /* Unsigned integral type large
enough to hold any pointer. */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __INTTYPES_H_INCLUDED__ */
/* EOF */

54
posix/include/iso646.h Normal file
View File

@@ -0,0 +1,54 @@
/* $Id: iso646.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* iso646.h
*
* alternative spellings. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __ISO646_H_INCLUDED__
#define __ISO646_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#define and &&
#define and_eq &=
#define bitand &
#define bitor |
#define compl ~
#define not !
#define not_eq !=
#define or ||
#define or_eq |=
#define xor ^
#define xor_eq ^=
#endif /* __ISO646_H_INCLUDED__ */
/* EOF */

52
posix/include/libgen.h Normal file
View File

@@ -0,0 +1,52 @@
/* $Id: libgen.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* libgen.h
*
* definitions for pattern matching functions. Conforming to the Single
* UNIX(r) Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __LIBGEN_H_INCLUDED__
#define __LIBGEN_H_INCLUDED__
/* INCLUDES */
#include <stddef.h>
/* OBJECTS */
extern char *__loc1; /* LEGACY */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
char *basename(char *);
char *dirname(char *);
char *regcmp(const char *, ...); /* LEGACY */
char *regex(const char *, const char *, ...); /* LEGACY */
wchar_t *_Wbasename(wchar_t *);
wchar_t *_Wdirname(wchar_t *);
/* MACROS */
#endif /* __LIBGEN_H_INCLUDED__ */
/* EOF */

45
posix/include/limits.h Normal file
View File

@@ -0,0 +1,45 @@
/* $Id: limits.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* limits.h
*
* implementation-dependent constants. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __LIMITS_H_INCLUDED__
#define __LIMITS_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* TODO */
#define OPEN_MAX (256)
/* PROTOTYPES */
/* MACROS */
#endif /* __LIMITS_H_INCLUDED__ */
/* EOF */

65
posix/include/math.h Normal file
View File

@@ -0,0 +1,65 @@
/* $Id: math.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* math.h
*
* mathematical declarations. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __MATH_H_INCLUDED__
#define __MATH_H_INCLUDED__
/* INCLUDES */
#ifdef __PSXDLL__
/* headers for internal usage by psxdll.dll and ReactOS */
#else /* ! __PSXDLL__ */
/* standard POSIX headers */
#endif
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
#define M_E ((double) 2.7182818285) /* Value of e */
#define M_LOG2E ((double) 1.4426950419) /* Value of log2(e) */
#define M_LOG10E ((double) 0.4342944819) /* Value of log10(e) */
#define M_LN2 ((double)-0.6931471806) /* Value of loge2 */
#define M_LN10 ((double) 2.3025850929) /* Value of loge10 */
#define M_PI ((double) 3.1415926536) /* Value of Pi */
#define M_PI_2 ((double) 1.5707963268) /* Value of Pi/2 */
#define M_PI_4 ((double) 0.7853981634) /* Value of Pi/4 */
#define M_1_PI ((double) 0.3183098862) /* Value of 1/Pi */
#define M_2_PI ((double) 0.6366197724) /* Value of 2/Pi */
#define M_2_SQRTPI ((double) 1.1283791671) /* Value of 2/Sqrt(Pi) */
#define M_SQRT2 ((double) 1.4142135624) /* Value of Sqrt(2) */
#define M_SQRT1_2 ((double) 0.7071067812) /* Value of Sqrt(1/2) */
/* PROTOTYPES */
/* MACROS */
#endif /* __MATH_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,43 @@
/* $Id: in.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* netinet/in.h
*
* Internet Protocol family. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __NETINET_IN_H_INCLUDED__
#define __NETINET_IN_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __NETINET_IN_H_INCLUDED__ */
/* EOF */

146
posix/include/psx/debug.h Normal file
View File

@@ -0,0 +1,146 @@
/* $Id: debug.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* psx/debug.h
*
* debugging utilities
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PSX_DEBUG_H_INCLUDED__
#define __PSX_DEBUG_H_INCLUDED__
/* INCLUDES */
#ifdef __PSX_DEBUG_TO_STDERR__
#include <stdio.h>
#else /* !defined(__PSX_DEBUG_TO_STDERR__) */
#include <ddk/ntddk.h>
#endif /* defined(__PSX_DEBUG_TO_STDERR__) */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#define __PSX_MODULE__ "psxdll.dll"
#ifndef NDEBUG
#ifdef __PSX_DEBUG_TO_STDERR__
#if 0
#define DEBUGOUT(MODULE,TYPE,ARGS...) \
do{ \
fprintf(stderr,"%s:%s:%s:%d:%s():\n\t",(MODULE),(TYPE),__FILE__,__LINE__,__FUNCTION__); \
fprintf(stderr,ARGS); \
fprintf("\n"); \
} \
while(0)
#endif
#define DEBUGOUT(MODULE,TYPE,ARGS...) \
do{ \
printf("%s:%s:%s:%d:%s():\n\t",(MODULE),(TYPE),__FILE__,__LINE__,__FUNCTION__); \
printf(ARGS); \
printf("\n"); \
} \
while(0)
#else /* !defined(__PSX_DEBUG_TO_STDERR__) */
#define DEBUGOUT(MODULE,TYPE,ARGS...) \
do{ \
DbgPrint("%s:%s:%s:%d:%s():\n\t",(MODULE),(TYPE),__FILE__,__LINE__,__FUNCTION__); \
DbgPrint(ARGS); \
DbgPrint("\n"); \
} \
while(0)
#endif /* defined(__PSX_DEBUG_TO_STDERR__) */
#define DEBUGOUTIF(CONDITION,MODULE,TYPE,ARGS...) \
if((CONDITION)) \
{ \
DEBUGOUT((MODULE),(TYPE),ARGS); \
}
#else /* defined(NDEBUG) */
#define DEBUGOUTIF(c,m,t,args...)
#define DEBUGOUT(m,t,args...)
#endif /* !defined(NDEBUG) */
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_HINTS__)
#define HINT(args...) DEBUGOUT(__PSX_MODULE__,"HINT",args)
#define HINTIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"HINT",args)
#else
#define HINT(args...)
#define HINTIF(c,args...)
#endif
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_INFOS__)
#define INFO(args...) DEBUGOUT(__PSX_MODULE__,"INFO",args)
#define INFOIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"INFO",args)
#else
#define INFO(args...)
#define INFOIF(c,args...)
#endif
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_WARNS__)
#define WARN(args...) DEBUGOUT(__PSX_MODULE__,"WARN",args)
#define WARNIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"WARN",args)
#else
#define WARN(args...)
#define WARNIF(c,args...)
#endif
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_ERRS__)
#define ERR(args...) DEBUGOUT(__PSX_MODULE__,"ERR",args)
#define ERRIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"ERR",args)
#else
#define ERR(args...)
#define ERRIF(c,args...)
#endif
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_TODOS__)
#define TODO(args...) DEBUGOUT(__PSX_MODULE__,"TODO",args)
#define TODOIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"TODO",args)
#else
#define TODO(args...)
#define TODOIF(c,args...)
#endif
#if defined(__PSX_DEBUG_WANT_ALL__) || defined(__PSX_DEBUG_WANT_FIXMES__)
#define FIXME(args...) DEBUGOUT(__PSX_MODULE__,"FIXME",args)
#define FIXMEIF(c,args...) DEBUGOUTIF((c),__PSX_MODULE__,"FIXME",args)
#else
#define FIXME(args...)
#define FIXMEIF(c,args...)
#endif
#endif /* __PSX_DEBUG_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,57 @@
/* $Id: dirent.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* psx/dirent.h
*
* internal dirent.h
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PSX_DIRENT_H_INCLUDED__
#define __PSX_DIRENT_H_INCLUDED__
/* INCLUDES */
#include <ddk/ntddk.h>
#include <dirent.h>
#include <psx/safeobj.h>
/* OBJECTS */
/* TYPES */
struct __internal_DIR
{
__magic_t signature; /* signature to verify object's validity across calls */
union __any_dirent{
struct dirent de_ansi;
struct _Wdirent de_unicode;
} ent; /* storage for return buffer of readdir() */
int fildes; /* file descriptor of the directory */
FILE_DIRECTORY_INFORMATION info; /* directory entry information */
WCHAR name[MAX_PATH]; /* filename buffer */
};
/* CONSTANTS */
#define __IDIR_MAGIC MAGIC('I', 'D', 'I', 'R')
/* PROTOTYPES */
/* MACROS */
#endif /* __PSX_DIRENT_H_INCLUDED__ */
/* EOF */

53
posix/include/psx/dlfcn.h Normal file
View File

@@ -0,0 +1,53 @@
/* $Id: dlfcn.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* psx/dlfcn.h
*
* internal dlfcn.h
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PSX_DLFCN_H_INCLUDED__
#define __PSX_DLFCN_H_INCLUDED__
/* INCLUDES */
#include <psx/errno.h>
/* OBJECTS */
/* TYPES */
/* internal representation for loaded DLLs */
/* TODO: get rid of this. The handle should be enough, with a proper PE loader */
struct __dlobj
{
int global; /* if non-zero, all the other fields have no meaning */
void *handle; /* pointer to the module mapping */
};
/* CONSTANTS */
/* PROTOTYPES */
void __dl_set_last_error(int);
/* MACROS */
#define __dl_get_reloc_flag(m) ((m) & (RTLD_LAZY | RTLD_NOW))
#define __dl_get_scope_flag(m) ((m) & (RTLD_GLOBAL | RTLD_LOCAL))
#endif /* __PSX_DLFCN_H_INCLUDED__ */
/* EOF */

45
posix/include/psx/errno.h Normal file
View File

@@ -0,0 +1,45 @@
/* $Id: errno.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* psx/errno.h
*
* internal errno.h
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PSX_ERRNO_H_INCLUDED__
#define __PSX_ERRNO_H_INCLUDED__
/* INCLUDES */
#include <errno.h>
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#define __status_to_errno(s) (s)
#define __set_errno_from_status(s) (errno = __status_to_errno((s)))
#endif /* __PSX_ERRNO_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,72 @@
/* $Id: fdtable.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* psx/fdtable.h
*
* POSIX+ subsystem file descriptor table data structure
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PSX_FDTABLE_H_INCLUDED__
#define __PSX_FDTABLE_H_INCLUDED__
/* INCLUDES */
#include <limits.h>
#include <inttypes.h>
#include <psx/safeobj.h>
/* OBJECTS */
/* TYPES */
typedef struct __tagfildes_t
{
void *FileHandle;
int OpenFlags;
int FdFlags;
size_t ExtraDataSize;
void *ExtraData;
} __fildes_t;
typedef struct __tagfdtable_t
{
__magic_t Signature;
int32_t LowestUnusedFileNo;
int32_t UsedDescriptors;
int32_t AllocatedDescriptors;
uint32_t DescriptorsBitmap[OPEN_MAX / 32];
__fildes_t *Descriptors;
} __fdtable_t;
/* CONSTANTS */
/* PROTOTYPES */
int __fdtable_init(__fdtable_t *);
int __fdtable_free(__fdtable_t *);
int __fdtable_entry_isavail(__fdtable_t *, int);
int __fdtable_entry_nextavail(__fdtable_t *, int);
int __fdtable_entry_add(__fdtable_t *, int, __fildes_t *, __fildes_t **);
int __fdtable_entry_remove(__fdtable_t *, int);
__fildes_t *__fdtable_entry_get(__fdtable_t *, int);
/* MACROS */
#define __FDTABLE_MAGIC MAGIC('F', 'D', 'T', 'B')
#endif /* __PSX_FDTABLE_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,45 @@
/* $Id: interlock.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* psx/interlock.h
*
* inter-locked increment/decrement
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PSX_INTERLOCK_H_INCLUDED__
#define __PSX_INTERLOCK_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
int __interlock_inc(int *);
int __interlock_dec(int *);
int __interlock_add(int *, int);
/* MACROS */
#endif /* __PSX_INTERLOCK_H_INCLUDED__ */
/* EOF */

112
posix/include/psx/path.h Normal file
View File

@@ -0,0 +1,112 @@
/* $Id: path.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* psx/path.h
*
* POSIX+ subsystem path functions
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PSX_PATH_H_INCLUDED__
#define __PSX_PATH_H_INCLUDED__
/* INCLUDES */
#include <ddk/ntddk.h>
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
BOOLEAN
__PdxPosixPathGetNextComponent_U
(
IN UNICODE_STRING PathName,
IN OUT PUNICODE_STRING PathComponent,
OUT PBOOLEAN TrailingDelimiter OPTIONAL
);
BOOLEAN
__PdxPosixPathResolve_U
(
IN UNICODE_STRING PathName,
OUT PUNICODE_STRING ResolvedPathName,
IN WCHAR PathDelimiter OPTIONAL
);
BOOLEAN
__PdxPosixPathGetNextComponent_A
(
IN ANSI_STRING PathName,
IN OUT PANSI_STRING PathComponent,
OUT PBOOLEAN TrailingDelimiter OPTIONAL
);
BOOLEAN
__PdxPosixPathResolve_A
(
IN ANSI_STRING PathName,
OUT PANSI_STRING ResolvedPathName,
IN CHAR PathDelimiter OPTIONAL
);
BOOLEAN
__PdxPosixPathNameToNtPathName
(
IN PWCHAR PosixPath,
OUT PUNICODE_STRING NativePath,
IN PUNICODE_STRING CurDir OPTIONAL,
IN PUNICODE_STRING RootDir OPTIONAL
);
/* MACROS */
/* returns non-zero if the argument is a path delimiter */
#define IS_CHAR_DELIMITER_U(WCH) (((WCH) == L'/') || ((WCH) == L'\\'))
#define IS_CHAR_DELIMITER_A(CH) (((CH) == '/') || ((CH) == '\\'))
/* returns non-zero if the argument is an empty path component */
#define IS_COMPONENT_EMPTY_U(WCOMPONENT) (WCOMPONENT.Length == 0)
#define IS_COMPONENT_EMPTY_A(COMPONENT) (COMPONENT.Length == 0)
/* returns non-zero if the argument is "." */
#define IS_COMPONENT_DOT_U(WCOMPONENT) \
((WCOMPONENT.Length == sizeof(WCHAR)) && (WCOMPONENT.Buffer[0] == L'.'))
#define IS_COMPONENT_DOT_A(COMPONENT) \
((COMPONENT.Length == 1) && (COMPONENT.Buffer[0] == '.'))
/* returns non-zero if the argument is ".." */
#define IS_COMPONENT_DOTDOT_U(WCOMPONENT) \
( \
(WCOMPONENT.Length == (sizeof(WCHAR) * 2)) && \
(WCOMPONENT.Buffer[0] == L'.') && \
(WCOMPONENT.Buffer[1] == L'.') \
)
#define IS_COMPONENT_DOTDOT_A(COMPONENT) \
( \
(COMPONENT.Length == 2) && \
(COMPONENT.Buffer[0] == '.') && \
(COMPONENT.Buffer[1] == '.') \
)
#endif /* __PSX_PATH_H_INCLUDED__ */
/* EOF */

71
posix/include/psx/pdata.h Normal file
View File

@@ -0,0 +1,71 @@
/* $Id: pdata.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* psx/pdata.h
*
* POSIX+ subsystem process environment data structure
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PSX_PDATA_H_INCLUDED__
#define __PSX_PDATA_H_INCLUDED__
/* INCLUDES */
#include <ddk/ntddk.h>
#include <ntdll/rtl.h>
#include <limits.h>
#include <psx/fdtable.h>
/* OBJECTS */
/* TYPES */
typedef struct __tagPDX_PDATA
{
UNICODE_STRING NativePathBuffer;
UNICODE_STRING CurDir;
UNICODE_STRING RootPath;
HANDLE RootHandle;
__fdtable_t *FdTable;
} __PDX_PDATA, * __PPDX_PDATA;
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#define __PdxAcquirePdataLock() (RtlAcquirePebLock())
#define __PdxReleasePdataLock() (RtlReleasePebLock())
#define __PdxSetProcessData()(PPDATA) ((void)((NtCurrentPeb()->SubSystemData) = (PPDATA)))
#define __PdxGetProcessData() ((__PPDX_PDATA)(&(NtCurrentPeb()->SubSystemData)))
#define __PdxGetNativePathBuffer() ((PUNICODE_STRING)(&(__PdxGetProcessData()->NativePathBuffer)))
#define __PdxGetCurDir() ((PUNICODE_STRING)(&(__PdxGetProcessData()->CurDir)))
#define __PdxGetRootPath() ((PUNICODE_STRING)(&(__PdxGetProcessData()->RootPath)))
#define __PdxGetRootHandle() ((HANDLE)(__PdxGetProcessData()->RootHandle))
#define __PdxGetFdTable() ((__fdtable_t *)(__PdxGetProcessData()->FdTable))
#define __PdxSetNativePathBuffer(BUF) ((void)((__PdxGetProcessData()->NativePathBuffer) = (BUF)))
#define __PdxSetCurDir(CURDIR) ((void)((__PdxGetProcessData()->CurDir) = (CURDIR)))
#define __PdxSetRootPath(ROOTPATH) ((void)((__PdxGetProcessData()->RootPath) = (ROOTPATH)))
#define __PdxSetRootHandle(ROOTHANDLE) ((void)((__PdxGetProcessData()->RootHandle) = (ROOTHANDLE)))
#define __PdxSetFdTable(FDTABLE) ((void)((__PdxGetProcessData()->FdTable) = (FDTABLE)))
#endif /* __PSX_PDATA_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,61 @@
/* $Id: pthread.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* psx/pthread.h
*
* internal pthread.h
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PSX_PTHREAD_H_INCLUDED__
#define __PSX_PTHREAD_H_INCLUDED__
/* INCLUDES */
#include <psx/safeobj.h>
/* OBJECTS */
/* TYPES */
struct __mutexattr
{
__magic_t signature;
int pshared;
int protocol;
int type;
};
struct __mutex
{
__magic_t signature;
void * handle;
int protocol;
int type;
};
/* CONSTANTS */
#define __PTHREAD_MUTEX_MAGIC (MAGIC('P', 'T', 'M', 'X'))
#define __PTHREAD_MUTEX_ATTR_MAGIC (MAGIC('P', 'T', 'M', 'A'))
/* PROTOTYPES */
/* MACROS */
#endif /* __PSX_PTHREAD_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,59 @@
/* $Id: safeobj.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* psx/safeobj.h
*
* types and definitions for safe checking of user-provided objects
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PSX_SAFEOBJ_H_INCLUDED__
#define __PSX_SAFEOBJ_H_INCLUDED__
/* INCLUDES */
#include <inttypes.h>
/* OBJECTS */
/* TYPES */
typedef uint32_t __magic_t;
/* CONSTANTS */
/* PROTOTYPES */
int __safeobj_validate(void *, __magic_t);
/* MACROS */
/* builds a magic number from 4 characters */
#define MAGIC(a,b,c,d) ( \
(((uint32_t)(uint8_t)(a)) << 24) | \
(((uint32_t)(uint8_t)(b)) << 16) | \
(((uint32_t)(uint8_t)(c)) << 8) | \
(((uint32_t)(uint8_t)(d)) << 0) \
)
/* retrieves a comma-separated list of the 4 characters in a magic number */
#define MAGIC_DECOMPOSE(m) \
((uint8_t)(m >> 24)), \
((uint8_t)(m >> 16)), \
((uint8_t)(m >> 8)), \
((uint8_t)(m >> 0))
#endif /* __PSX_SAFEOBJ_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,51 @@
/* $Id: stdlib.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* psx/stdlib.h
*
* internal stdlib.h
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PSX_STDLIB_H_INCLUDED__
#define __PSX_STDLIB_H_INCLUDED__
/* INCLUDES */
#include <ddk/ntddk.h>
#include <ntos/heap.h>
#include <stdlib.h>
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
/* FIXME? Windows NT's ntdll doesn't export RtlGetProcessHeap() */
#define RtlGetProcessHeap() ((HANDLE)NtCurrentPeb()->ProcessHeap)
#define __malloc(SIZE) (RtlAllocateHeap(RtlGetProcessHeap(), 0, (SIZE)))
#define __realloc(PTR,SIZE) (RtlReAllocateHeap(RtlGetProcessHeap(), 0, (PTR), (SIZE)))
#define __free(PTR) (RtlFreeHeap(RtlGetProcessHeap(), 0, (PTR)))
#endif /* __PSX_STDLIB_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,83 @@
/* $Id: template.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
How to create a new header file from this template:
- copy the template in the new file (never edit this file directly, unless
that's what you want)
- search for the string "EDITME" in the file, and follow the instructions
- remove this comment block, all blocks containing DELETEME, and all EDITME
instructions
- save your file, and Have Fun! (TM)
*/
/* $ Id $ (EDITME: replace "$ Id $" with "$Id: template.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $")
*/
/*
* psx/template.h (EDITME: replace with the real name of the header)
*
* template for POSIX headers (EDITME: replace this line with the real file
* description)
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by John Doe <john.doe@mail.com> (EDITME: your name and e-mail go
* here)
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
/*
Tags are used to prevent double inclusion of C header files. This
technique should be documented in all good C manuals
How to generate an unique tag for your header:
- uppercase the name of the header, where "name" is the filename and
the optional relative path (e.g. "stdio.h", "sys/types.h")
- replace all non-alphanumeric characters in the obtained name with an
underscore character ("_")
- prepend a double underscore ("__"), and append the string "_INCLUDED__"
- replace all occurrences of "__PSX_TEMPLATE_H_INCLUDED__" in this file
with your tag
Example tags:
sys/types.h -> SYS/TYPES.H -> SYS_TYPES_H -> __SYS_TYPES_H_INCLUDED__
iso646.h -> ISO646.H -> ISO646_H -> __ISO646_H_INCLUDED__
(REMOVEME)
*/
#ifndef __PSX_TEMPLATE_H_INCLUDED__ /* EDITME: replace macro with unique tag */
#define __PSX_TEMPLATE_H_INCLUDED__ /* EDITME: replace macro with unique tag */
/*
Explanation of the sections:
INCLUDES #include directives should be grouped here
OBJECTS declare global variables here
TYPES types, structures and unions here
CONSTANTS symbolic constants (simple #define's), enums, constants
PROTOTYPES ANSI C function prototypes
MACROS parametrized macros
(REMOVEME)
*/
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __PSX_TEMPLATE_H_INCLUDED__ */ /* EDITME: replace macro with unique tag */
/* EOF */

141
posix/include/pthread.h Normal file
View File

@@ -0,0 +1,141 @@
/* $Id: pthread.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* pthread.h
*
* threads. Conforming to the Single UNIX(r) Specification Version 2,
* System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PTHREAD_H_INCLUDED__
#define __PTHREAD_H_INCLUDED__
/* INCLUDES */
#include <sched.h>
#include <time.h>
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
#define PTHREAD_MUTEX_NORMAL (1)
#define PTHREAD_MUTEX_ERRORCHECK (2)
#define PTHREAD_MUTEX_RECURSIVE (3)
#define PTHREAD_MUTEX_DEFAULT (PTHREAD_MUTEX_NORMAL)
#define PTHREAD_PROCESS_PRIVATE (1)
#define PTHREAD_PROCESS_SHARED (2)
#define PTHREAD_PRIO_NONE (1)
/* PROTOTYPES */
int pthread_attr_destroy(pthread_attr_t *);
int pthread_attr_getdetachstate(const pthread_attr_t *, int *);
int pthread_attr_getguardsize(const pthread_attr_t *, size_t *);
int pthread_attr_getinheritsched(const pthread_attr_t *, int *);
int pthread_attr_getschedparam(const pthread_attr_t *,
struct sched_param *);
int pthread_attr_getschedpolicy(const pthread_attr_t *, int *);
int pthread_attr_getscope(const pthread_attr_t *, int *);
int pthread_attr_getstackaddr(const pthread_attr_t *, void **);
int pthread_attr_getstacksize(const pthread_attr_t *, size_t *);
int pthread_attr_init(pthread_attr_t *);
int pthread_attr_setdetachstate(pthread_attr_t *, int);
int pthread_attr_setguardsize(pthread_attr_t *, size_t);
int pthread_attr_setinheritsched(pthread_attr_t *, int);
int pthread_attr_setschedparam(pthread_attr_t *,
const struct sched_param *);
int pthread_attr_setschedpolicy(pthread_attr_t *, int);
int pthread_attr_setscope(pthread_attr_t *, int);
int pthread_attr_setstackaddr(pthread_attr_t *, void *);
int pthread_attr_setstacksize(pthread_attr_t *, size_t);
int pthread_cancel(pthread_t);
void pthread_cleanup_push(void (*)(void *), void *);
void pthread_cleanup_pop(int);
int pthread_cond_broadcast(pthread_cond_t *);
int pthread_cond_destroy(pthread_cond_t *);
int pthread_cond_init(pthread_cond_t *, const pthread_condattr_t *);
int pthread_cond_signal(pthread_cond_t *);
int pthread_cond_timedwait(pthread_cond_t *,
pthread_mutex_t *, const struct timespec *);
int pthread_cond_wait(pthread_cond_t *, pthread_mutex_t *);
int pthread_condattr_destroy(pthread_condattr_t *);
int pthread_condattr_getpshared(const pthread_condattr_t *, int *);
int pthread_condattr_init(pthread_condattr_t *);
int pthread_condattr_setpshared(pthread_condattr_t *, int);
int pthread_create(pthread_t *, const pthread_attr_t *,
void *(*)(void *), void *);
int pthread_detach(pthread_t);
int pthread_equal(pthread_t, pthread_t);
void pthread_exit(void *);
int pthread_getconcurrency(void);
int pthread_getschedparam(pthread_t, int *, struct sched_param *);
void *pthread_getspecific(pthread_key_t);
int pthread_join(pthread_t, void **);
int pthread_key_create(pthread_key_t *, void (*)(void *));
int pthread_key_delete(pthread_key_t);
int pthread_mutex_destroy(pthread_mutex_t *);
int pthread_mutex_getprioceiling(const pthread_mutex_t *, int *);
int pthread_mutex_init(pthread_mutex_t *, const pthread_mutexattr_t *);
int pthread_mutex_lock(pthread_mutex_t *);
int pthread_mutex_setprioceiling(pthread_mutex_t *, int, int *);
int pthread_mutex_trylock(pthread_mutex_t *);
int pthread_mutex_unlock(pthread_mutex_t *);
int pthread_mutexattr_destroy(pthread_mutexattr_t *);
int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *,
int *);
int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *, int *);
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *, int *);
int pthread_mutexattr_gettype(const pthread_mutexattr_t *, int *);
int pthread_mutexattr_init(pthread_mutexattr_t *);
int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *, int);
int pthread_mutexattr_setprotocol(pthread_mutexattr_t *, int);
int pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);
int pthread_mutexattr_settype(pthread_mutexattr_t *, int);
int pthread_once(pthread_once_t *, void (*)(void));
int pthread_rwlock_destroy(pthread_rwlock_t *);
int pthread_rwlock_init(pthread_rwlock_t *,
const pthread_rwlockattr_t *);
int pthread_rwlock_rdlock(pthread_rwlock_t *);
int pthread_rwlock_tryrdlock(pthread_rwlock_t *);
int pthread_rwlock_trywrlock(pthread_rwlock_t *);
int pthread_rwlock_unlock(pthread_rwlock_t *);
int pthread_rwlock_wrlock(pthread_rwlock_t *);
int pthread_rwlockattr_destroy(pthread_rwlockattr_t *);
int pthread_rwlockattr_getpshared(const pthread_rwlockattr_t *,
int *);
int pthread_rwlockattr_init(pthread_rwlockattr_t *);
int pthread_rwlockattr_setpshared(pthread_rwlockattr_t *, int);
pthread_t
pthread_self(void);
int pthread_setcancelstate(int, int *);
int pthread_setcanceltype(int, int *);
int pthread_setconcurrency(int);
int pthread_setschedparam(pthread_t, int ,
const struct sched_param *);
int pthread_setspecific(pthread_key_t, const void *);
void pthread_testcancel(void);
/* MACROS */
#endif /* __PTHREAD_H_INCLUDED__ */
/* EOF */

60
posix/include/pwd.h Normal file
View File

@@ -0,0 +1,60 @@
/* $Id: pwd.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* pwd.h
*
* password structure. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __PWD_H_INCLUDED__
#define __PWD_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
struct passwd
{
char *pw_name; /* user's login name */
uid_t pw_uid; /* numerical user ID */
gid_t pw_gid; /* numerical group ID */
char *pw_dir; /* initial working directory */
char *pw_shell; /* program to use as shell */
};
/* CONSTANTS */
/* PROTOTYPES */
struct passwd *getpwnam(const char *);
struct passwd *getpwuid(uid_t);
int getpwnam_r(const char *, struct passwd *, char *,
size_t, struct passwd **);
int getpwuid_r(uid_t, struct passwd *, char *,
size_t, struct passwd **);
void endpwent(void);
struct passwd *getpwent(void);
void setpwent(void);
/* MACROS */
#endif /* __PWD_H_INCLUDED__ */
/* EOF */

62
posix/include/sched.h Normal file
View File

@@ -0,0 +1,62 @@
/* $Id: sched.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* sched.h
*
* execution scheduling (REALTIME). Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SCHED_H_INCLUDED__
#define __SCHED_H_INCLUDED__
/* INCLUDES */
#include <time.h>
/* OBJECTS */
/* TYPES */
struct sched_param
{
int sched_priority; /* process execution scheduling priority */
};
/* CONSTANTS */
/* First in-first out (FIFO) scheduling policy */
#define SCHED_FIFO (1)
/* Round robin scheduling policy */
#define SCHED_RR (2)
/* Another scheduling policy */
#define SCHED_OTHER (3)
/* PROTOTYPES */
int sched_get_priority_max(int);
int sched_get_priority_min(int);
int sched_getparam(pid_t, struct sched_param *);
int sched_getscheduler(pid_t);
int sched_rr_get_interval(pid_t, struct timespec *);
int sched_setparam(pid_t, const struct sched_param *);
int sched_setscheduler(pid_t, int, const struct sched_param *);
int sched_yield(void);
/* MACROS */
#endif /* __SCHED_H_INCLUDED__ */
/* EOF */

359
posix/include/signal.h Normal file
View File

@@ -0,0 +1,359 @@
/* $Id: signal.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* signal.h
*
* signals. Conforming to the Single UNIX(r) Specification Version 2,
* System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SIGNAL_H_INCLUDED__
#define __SIGNAL_H_INCLUDED__
/* INCLUDES */
#include <time.h>
#include <sys/types.h>
/* OBJECTS */
/* TYPES */
/* pre-declaration of time.h types to suppress warnings caused by circular
dependencies */
struct timespec;
typedef int sig_atomic_t; /* Integral type of an object that can be
accessed as an atomic entity, even in the
presence of asynchronous interrupts */ /* FIXME? */
typedef struct __tagsigset_t
{
int _dummy;
} sigset_t; /* Integral or structure type of an object used to represent
sets of signals. */ /* TODO */
union sigval
{
int sival_int; /* integer signal value */
void* sival_ptr; /* pointer signal value */
};
struct sigevent
{
int sigev_notify; /* notification type */
int sigev_signo; /* signal number */
union sigval sigev_value; /* signal value */
void (* sigev_notify_function)(union sigval); /* notification function */
pthread_attr_t * sigev_notify_attributes; /* notification attributes */
};
typedef struct __tagsiginfo_t
{
int si_signo; /* signal number */
int si_errno; /* if non-zero, an errno value associated with
this signal, as defined in <errno.h> */
int si_code; /* signal code */
pid_t si_pid; /* sending process ID */
uid_t si_uid; /* real user ID of sending process */
void *si_addr; /* address of faulting instruction */
int si_status; /* exit value or signal */
long si_band; /* band event for SIGPOLL */
union sigval si_value; /* signal value */
} siginfo_t;
struct sigaction
{
void (* sa_handler)(int); /* what to do on receipt of signal */
sigset_t sa_mask; /* set of signals to be blocked during
execution of the signal handling
function */
int sa_flags; /* special flags */
void (* sa_sigaction)(int, siginfo_t *, void *);
/* pointer to signal handler function
or one of the macros SIG_IGN or SIG_DFL */
};
typedef struct __tagstack_t
{
void *ss_sp; /* stack base or pointer */
size_t ss_size; /* stack size */
int ss_flags; /* flags */
} stack_t;
struct sigstack
{
int ss_onstack; /* non-zero when signal stack is in use */
void *ss_sp; /* signal stack pointer */
};
/* CONSTANTS */
/* Request for default signal handling. */
#define SIG_DFL ((void (*)(int))(0))
/* Return value from signal() in case of error. */
#define SIG_ERR ((void (*)(int))(1))
/* Request that signal be held. */
#define SIG_HOLD ((void (*)(int))(2))
/* Request that signal be ignored. */
#define SIG_IGN ((void (*)(int))(3))
/* No asynchronous notification will be delivered when the event of
interest occurs. */
#define SIGEV_NONE (0)
/* A queued signal, with an application-defined value, will be generated
when the event of interest occurs. */
#define SIGEV_SIGNAL (1)
/* A notification function will be called to perform notification. */
#define SIGEV_THREAD (2)
/* TODO: realtime features not supported yet */
#define SIGRTMIN (-1)
#define SIGRTMAX (-1)
/* Process abort signal. */
#define SIGABRT ( 1)
/* Alarm clock. */
#define SIGALRM ( 2)
/* Erroneous arithmetic operation. */
#define SIGFPE ( 3)
/* Hangup. */
#define SIGHUP ( 4)
/* Illegal instruction. */
#define SIGILL ( 5)
/* Terminal interrupt signal. */
#define SIGINT ( 6)
/* Kill (cannot be caught or ignored). */
#define SIGKILL ( 7)
/* Write on a pipe with no one to read it. */
#define SIGPIPE ( 8)
/* Terminal quit signal. */
#define SIGQUIT ( 9)
/* Invalid memory reference. */
#define SIGSEGV (10)
/* Termination signal. */
#define SIGTERM (11)
/* User-defined signal 1. */
#define SIGUSR1 (12)
/* User-defined signal 2. */
#define SIGUSR2 (13)
/* Child process terminated or stopped. */
#define SIGCHLD (14)
/* Continue executing, if stopped. */
#define SIGCONT (15)
/* Stop executing (cannot be caught or ignored). */
#define SIGSTOP (16)
/* Terminal stop signal. */
#define SIGTSTP (17)
/* Background process attempting read. */
#define SIGTTIN (18)
/* Background process attempting write. */
#define SIGTTOU (19)
/* Access to an undefined portion of a memory object. */
#define SIGBUS (20)
/* Pollable event. */
#define SIGPOLL (21)
/* Profiling timer expired. */
#define SIGPROF (22)
/* Bad system call. */
#define SIGSYS (23)
/* Trace/breakpoint trap. */
#define SIGTRAP (24)
/* High bandwidth data is available at a socket. */
#define SIGURG (25)
/* Virtual timer expired. */
#define SIGVTALRM (26)
/* CPU time limit exceeded. */
#define SIGXCPU (27)
/* File size limit exceeded. */
#define SIGXFSZ (28)
/* FIXME: the following constants need to be reviewed */
/* Do not generate SIGCHLD when children stop. */
#define SA_NOCLDSTOP (0x00000001)
/* The resulting set is the union of the current set and the signal set
pointed to by the argument set. */
#define SA_ONSTACK (0x00000002)
/* Causes signal dispositions to be set to SIG_DFL on entry to signal
handlers. */
#define SA_RESETHAND (0x00000004)
/* Causes certain functions to become restartable. */
#define SA_RESTART (0x00000008)
/* Causes extra information to be passed to signal handlers at the time
of receipt of a signal. */
#define SA_SIGINFO (0x00000010)
/* Causes implementations not to create zombie processes on child death. */
#define SA_NOCLDWAIT (0x00000020)
/* Causes signal not to be automatically blocked on entry to signal
handler. */
#define SA_NODEFER (0x00000040)
/* FIXME: the following constants need to be reviewed */
/* The resulting set is the intersection of the current set and the
complement of the signal set pointed to by the argument set. */
#define SIG_BLOCK (1)
/* The resulting set is the signal set pointed to by the argument
set. */
#define SIG_UNBLOCK (2)
/* Causes signal delivery to occur on an alternate stack. */
#define SIG_SETMASK (3)
/* FIXME: the following constants need to be reviewed */
/* Process is executing on an alternate signal stack. */
#define SS_ONSTACK (1)
/* Alternate signal stack is disabled. */
#define SS_DISABLE (2)
/* Minimum stack size for a signal handler. */ /* FIXME */
#define MINSIGSTKSZ (0)
/* Default size in bytes for the alternate signal stack. */ /* FIXME */
#define SIGSTKSZ (0)
/*
signal-specific reasons why the signal was generated
*/
/* SIGILL */
/* illegal opcode */
#define ILL_ILLOPC (1)
/* illegal operand */
#define ILL_ILLOPN (2)
/* illegal addressing mode */
#define ILL_ILLADR (3)
/* illegal trap */
#define ILL_ILLTRP (4)
/* privileged opcode */
#define ILL_PRVOPC (5)
/* privileged register */
#define ILL_PRVREG (6)
/* coprocessor error */
#define ILL_COPROC (7)
/* internal stack error */
#define ILL_BADSTK (8)
/* SIGFPE */
/* integer divide by zero */
#define FPE_INTDIV
/* integer overflow */
#define FPE_INTOVF
/* floating point divide by zero */
#define FPE_FLTDIV
/* floating point overflow */
#define FPE_FLTOVF
/* floating point underflow */
#define FPE_FLTUND
/* floating point inexact result */
#define FPE_FLTRES
/* invalid floating point operation */
#define FPE_FLTINV
/* subscript out of range */
#define FPE_FLTSUB
/* SIGSEGV */
/* address not mapped to object */
#define SEGV_MAPERR
/* invalid permissions for mapped object */
#define SEGV_ACCERR
/* SIGBUS */
/* invalid address alignment */
#define BUS_ADRALN
/* non-existent physical address */
#define BUS_ADRERR
/* object specific hardware error */
#define BUS_OBJERR
/* SIGTRAP */
/* process breakpoint */
#define TRAP_BRKPT
/* process trace trap */
#define TRAP_TRACE
/* SIGCHLD */
/* child has exited */
#define CLD_EXITED
/* child has terminated abnormally and did not create a core file */
#define CLD_KILLED
/* child has terminated abnormally and created a core file */
#define CLD_DUMPED
/* traced child has trapped */
#define CLD_TRAPPED
/* child has stopped */
#define CLD_STOPPED
/* stopped child has continued */
#define CLD_CONTINUED
/* SIGPOLL */
/* data input available */
#define POLL_IN
/* output buffers available */
#define POLL_OUT
/* input message available */
#define POLL_MSG
/* I/O error */
#define POLL_ERR
/* high priority input available */
#define POLL_PRI
/* device disconnected */
#define POLL_HUP
/* signal sent by kill() */
#define SI_USER
/* signal sent by the sigqueue() */
#define SI_QUEUE
/* signal generated by expiration of a timer set by timer_settime() */
#define SI_TIMER
/* signal generated by completion of an asynchronous I/O request */
#define SI_ASYNCIO
/* signal generated by arrival of a message on an empty message queue */
#define SI_MESGQ
/* PROTOTYPES */
void (*bsd_signal(int, void (*)(int)))(int);
int kill(pid_t, int);
int killpg(pid_t, int);
int pthread_kill(pthread_t, int);
int pthread_sigmask(int, const sigset_t *, sigset_t *);
int raise(int);
int sigaction(int, const struct sigaction *, struct sigaction *);
int sigaddset(sigset_t *, int);
int sigaltstack(const stack_t *, stack_t *);
int sigdelset(sigset_t *, int);
int sigemptyset(sigset_t *);
int sigfillset(sigset_t *);
int sighold(int);
int sigignore(int);
int siginterrupt(int, int);
int sigismember(const sigset_t *, int);
void (*signal(int, void (*)(int)))(int);
int sigpause(int);
int sigpending(sigset_t *);
int sigprocmask(int, const sigset_t *, sigset_t *);
int sigqueue(pid_t, int, const union sigval);
int sigrelse(int);
void (*sigset(int, void (*)(int)))(int);
int sigstack(struct sigstack *ss,
struct sigstack *oss); /* LEGACY */
int sigsuspend(const sigset_t *);
int sigtimedwait(const sigset_t *, siginfo_t *,
const struct timespec *);
int sigwait(const sigset_t *set, int *sig);
int sigwaitinfo(const sigset_t *, siginfo_t *);
/* MACROS */
#endif /* __SIGNAL_H_INCLUDED__ */
/* EOF */

57
posix/include/stdarg.h Normal file
View File

@@ -0,0 +1,57 @@
/* $Id: stdarg.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* stdarg.h
*
* handle variable argument list. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __STDARG_H_INCLUDED__
#define __STDARG_H_INCLUDED__
/* OBJECTS */
/* TYPES */
typedef char* va_list;
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
/* taken from mingw's stdarg.h */
/* Amount of space required in an argument list (ie. the stack) for an
argument of type t. */
#define __va_argsiz(t) \
(((sizeof(t) + sizeof(int) - 1) / sizeof(int)) * sizeof(int))
#define va_start(ap, pN) \
((ap) = ((va_list) (&pN) + __va_argsiz(pN)))
#define va_end(ap) ((void)0)
#define va_arg(ap, t) \
(((ap) = (ap) + __va_argsiz(t)), \
*((t*) (void*) ((ap) - __va_argsiz(t))))
#endif /* __STDARG_H_INCLUDED__ */
/* EOF */

50
posix/include/stddef.h Normal file
View File

@@ -0,0 +1,50 @@
/* $Id: stddef.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* stddef.h
*
* standard type definitions. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __STDDEF_H_INCLUDED__
#define __STDDEF_H_INCLUDED__
/* INCLUDES */
#include <sys/types.h>
/* OBJECTS */
/* TYPES */
typedef signed long int ptrdiff_t;
typedef unsigned short int wchar_t;
/* CONSTANTS */
#ifndef NULL
#define NULL ((void *)(0)) /* Null pointer constant. */
#endif
/* PROTOTYPES */
/* MACROS */
#define offsetof(t,m) ((size_t) &((t *)0)->m)
#endif /* __STDDEF_H_INCLUDED__ */
/* EOF */

165
posix/include/stdio.h Normal file
View File

@@ -0,0 +1,165 @@
/* $Id: stdio.h,v 1.2 2002/02/20 09:17:54 hyperion Exp $
*/
/*
* stdio.h
*
* standard buffered input/output. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __STDIO_H_INCLUDED__
#define __STDIO_H_INCLUDED__
/* INCLUDES */
#include <stddef.h>
#include <stdarg.h>
#include <unistd.h>
#include <sys/types.h>
/* OBJECTS */
extern char *optarg;
extern int opterr;
extern int optind; /* LEGACY */
extern int optopt;
/* TYPES */
typedef struct __tagFILE
{
int _dummy;
} FILE;
typedef struct __tagfpos_t
{
int _dummy;
} fpos_t;
/* CONSTANTS */
/* Size of <stdio.h> buffers. */
#define BUFSIZ (0x10000)
/* Maximum size in bytes of the longest filename string that the implementation
guarantees can be opened. */
#define FILENAME_MAX (255)
/* Number of streams which the implementation guarantees can be open
simultaneously. The value will be at least eight. */
#define FOPEN_MAX (8)
/* Input/output fully buffered. */
#define _IOFBF (1)
/* Input/output line buffered. */
#define _IOLBF (2)
/* Input/output unbuffered. */
#define _IONBF (3)
/* Maximum size of character array to hold ctermid() output. */
#define L_ctermid (255)
/* Maximum size of character array to hold cuserid() output. (LEGACY) */
#define L_cuserid (255)
/* Maximum size of character array to hold tmpnam() output. */
#define L_tmpnam (255)
/* Minimum number of unique filenames generated by tmpnam(). Maximum number
of times an application can call tmpnam() reliably. The value of TMP_MAX
will be at least 10,000. */
#define TMP_MAX (0xFFFF)
/* End-of-file return value. */
#define EOF (-1)
/* default directory prefix for tempnam() */
#define P_tmpdir "/tmp/"
/* Standard error output stream. */
#define stderr ((FILE *)STDERR_FILENO)
/* Standard input stream. */
#define stdin ((FILE *)STDIN_FILENO)
/* Standard output stream. */
#define stdout ((FILE *)STDOUT_FILENO)
/* PROTOTYPES */
void clearerr(FILE *);
char *ctermid(char *);
char *cuserid(char *); /* LEGACY */
int fclose(FILE *);
FILE *fdopen(int, const char *);
int feof(FILE *);
int ferror(FILE *);
int fflush(FILE *);
int fgetc(FILE *);
int fgetpos(FILE *, fpos_t *);
char *fgets(char *, int, FILE *);
int fileno(FILE *);
void flockfile(FILE *);
FILE *fopen(const char *, const char *);
int fprintf(FILE *, const char *, ...);
int fputc(int, FILE *);
int fputs(const char *, FILE *);
size_t fread(void *, size_t, size_t, FILE *);
FILE *freopen(const char *, const char *, FILE *);
int fscanf(FILE *, const char *, ...);
int fseek(FILE *, long int, int);
int fseeko(FILE *, off_t, int);
int fsetpos(FILE *, const fpos_t *);
long int ftell(FILE *);
off_t ftello(FILE *);
int ftrylockfile(FILE *);
void funlockfile(FILE *);
size_t fwrite(const void *, size_t, size_t, FILE *);
int getc(FILE *);
int getchar(void);
int getc_unlocked(FILE *);
int getchar_unlocked(void);
int getopt(int, char * const[], const char *); /* LEGACY */
char *gets(char *);
int getw(FILE *);
int pclose(FILE *);
void perror(const char *);
FILE *popen(const char *, const char *);
int printf(const char *, ...);
int putc(int, FILE *);
int putchar(int);
int putc_unlocked(int, FILE *);
int putchar_unlocked(int);
int puts(const char *);
int putw(int, FILE *);
int remove(const char *);
int rename(const char *, const char *);
void rewind(FILE *);
int scanf(const char *, ...);
void setbuf(FILE *, char *);
int setvbuf(FILE *, char *, int, size_t);
int snprintf(char *, size_t, const char *, ...);
int sprintf(char *, const char *, ...);
int sscanf(const char *, const char *, int, ...);
char *tempnam(const char *, const char *);
FILE *tmpfile(void);
char *tmpnam(char *);
int ungetc(int, FILE *);
int vfprintf(FILE *, const char *, va_list);
int vprintf(const char *, va_list);
int vsnprintf(char *, size_t, const char *, va_list);
int vsprintf(char *, const char *, va_list);
/* MACROS */
#endif /* __STDIO_H_INCLUDED__ */
/* EOF */

130
posix/include/stdlib.h Normal file
View File

@@ -0,0 +1,130 @@
/* $Id: stdlib.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* stdlib.h
*
* standard library definitions. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __STDLIB_H_INCLUDED__
#define __STDLIB_H_INCLUDED__
/* INCLUDES */
#include <stddef.h>
#include <limits.h>
#include <math.h>
#include <sys/wait.h>
/* OBJECTS */
/* TYPES */
typedef struct __tagdiv_t
{
int quot; /* quotient */
int rem; /* remainder */
} div_t;
typedef struct __tagldiv_t
{
long int quot; /* quotient */
long int rem; /* remainder */
} ldiv_t;
/* CONSTANTS */
#define EXIT_FAILURE (-1) /* Unsuccessful termination for exit(), evaluates \
to a non-zero value. */
#define EXIT_SUCCESS (0) /* Successful termination for exit(), evaluates to 0. */
/* FIXME */
#define RAND_MAX (32767) /* Maximum value returned by rand(), at least 32,767. */
/* FIXME */
#define MB_CUR_MAX (1) /* Integer expression whose value is the maximum number \
of bytes in a character specified by the current \
locale. */
/* PROTOTYPES */
long a64l(const char *);
void abort(void);
int abs(int);
int atexit(void (*)(void));
double atof(const char *);
int atoi(const char *);
long int atol(const char *);
void *bsearch(const void *, const void *, size_t, size_t,
int (*)(const void *, const void *));
void *calloc(size_t, size_t);
div_t div(int, int);
double drand48(void);
char *ecvt(double, int, int *, int *);
double erand48(unsigned short int[3]);
void exit(int);
char *fcvt (double, int, int *, int *);
void free(void *);
char *gcvt(double, int, char *);
char *getenv(const char *);
int getsubopt(char **, char *const *, char **);
int grantpt(int);
char *initstate(unsigned int, char *, size_t);
long int jrand48(unsigned short int[3]);
char *l64a(long);
long int labs(long int);
void lcong48(unsigned short int[7]);
ldiv_t ldiv(long int, long int);
long int lrand48(void);
void *malloc(size_t);
int mblen(const char *, size_t);
size_t mbstowcs(wchar_t *, const char *, size_t);
int mbtowc(wchar_t *, const char *, size_t);
char *mktemp(char *);
int mkstemp(char *);
long int mrand48(void);
long int nrand48(unsigned short int [3]);
char *ptsname(int);
int putenv(char *);
void qsort(void *, size_t, size_t, int (*)(const void *,
const void *));
int rand(void);
int rand_r(unsigned int *);
long random(void);
void *realloc(void *, size_t);
char *realpath(const char *, char *);
unsigned short int seed48(unsigned short int[3]);
void setkey(const char *);
char *setstate(const char *);
void srand(unsigned int);
void srand48(long int);
void srandom(unsigned);
double strtod(const char *, char **);
long int strtol(const char *, char **, int);
unsigned long int
strtoul(const char *, char **, int);
int system(const char *);
int ttyslot(void); /* LEGACY */
int unlockpt(int);
void *valloc(size_t); /* LEGACY */
size_t wcstombs(char *, const wchar_t *, size_t);
int wctomb(char *, wchar_t);
/* MACROS */
#endif /* __STDLIB_H_INCLUDED__ */
/* EOF */

69
posix/include/string.h Normal file
View File

@@ -0,0 +1,69 @@
/* $Id: string.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* string.h
*
* string operations. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __STRING_H_INCLUDED__ /* replace with the appropriate tag */
#define __STRING_H_INCLUDED__ /* replace with the appropriate tag */
/* INCLUDES */
#include <stddef.h>
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
void *memccpy(void *, const void *, int, size_t);
void *memchr(const void *, int, size_t);
int memcmp(const void *, const void *, size_t);
void *memcpy(void *, const void *, size_t);
void *memmove(void *, const void *, size_t);
void *memset(void *, int, size_t);
char *strcat(char *, const char *);
char *strchr(const char *, int);
int strcmp(const char *, const char *);
int strcoll(const char *, const char *);
char *strcpy(char *, const char *);
size_t strcspn(const char *, const char *);
char *strdup(const char *);
char *strerror(int);
size_t strlen(const char *);
char *strncat(char *, const char *, size_t);
int strncmp(const char *, const char *, size_t);
char *strncpy(char *, const char *, size_t);
char *strpbrk(const char *, const char *);
char *strrchr(const char *, int);
size_t strspn(const char *, const char *);
char *strstr(const char *, const char *);
char *strtok(char *, const char *);
char *strtok_r(char *, const char *, char **);
size_t strxfrm(char *, const char *, size_t);
/* MACROS */
#endif /* __STRING_H_INCLUDED__ */ /* replace with the appropriate tag */
/* EOF */

43
posix/include/sys/ipc.h Normal file
View File

@@ -0,0 +1,43 @@
/* $Id: ipc.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/ipc.h
*
* interprocess communication access structure. Conforming to the Single
* UNIX(r) Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_IPC_H_INCLUDED__
#define __SYS_IPC_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_IPC_H_INCLUDED__ */
/* EOF */

43
posix/include/sys/mman.h Normal file
View File

@@ -0,0 +1,43 @@
/* $Id: mman.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/mman.h
*
* memory management declarations. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_SOCKET_H_INCLUDED__
#define __SYS_SOCKET_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_SOCKET_H_INCLUDED__ */
/* EOF */

43
posix/include/sys/msg.h Normal file
View File

@@ -0,0 +1,43 @@
/* $Id: msg.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/msg.h
*
* message queue structures. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_SOCKET_H_INCLUDED__
#define __SYS_SOCKET_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_SOCKET_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,43 @@
/* $Id: resource.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/resource.h
*
* definitions for XSI resource operations. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_RESOURCE_H_INCLUDED__
#define __SYS_RESOURCE_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_RESOURCE_H_INCLUDED__ */
/* EOF */

43
posix/include/sys/sem.h Normal file
View File

@@ -0,0 +1,43 @@
/* $Id: sem.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/sem.h
*
* semaphore facility. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_SEM_H_INCLUDED__
#define __SYS_SEM_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_SEM_H_INCLUDED__ */
/* EOF */

43
posix/include/sys/shm.h Normal file
View File

@@ -0,0 +1,43 @@
/* $Id: shm.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/shm.h
*
* shared memory facility. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_SHM_H_INCLUDED__
#define __SYS_SHM_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_SHM_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,43 @@
/* $Id: socket.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/socket.h
*
* Internet Protocol family. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_SOCKET_H_INCLUDED__
#define __SYS_SOCKET_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_SOCKET_H_INCLUDED__ */
/* EOF */

122
posix/include/sys/stat.h Normal file
View File

@@ -0,0 +1,122 @@
/* $Id: stat.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/stat.h
*
* data returned by the stat() function. Conforming to the Single
* UNIX(r) Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_STAT_H_INCLUDED__
#define __SYS_STAT_H_INCLUDED__
/* INCLUDES */
#include <sys/types.h>
/* OBJECTS */
/* TYPES */
struct stat
{
dev_t st_dev; /* ID of device containing file */
ino_t st_ino; /* file serial number */
mode_t st_mode; /* mode of file (see below) */
nlink_t st_nlink; /* number of links to the file */
uid_t st_uid; /* user ID of file */
gid_t st_gid; /* group ID of file */
dev_t st_rdev; /* device ID (if file is character or block special) */
off_t st_size; /* file size in bytes (if file is a regular file) */
time_t st_atime; /* time of last access */
time_t st_mtime; /* time of last data modification */
time_t st_ctime; /* time of last status change */
blksize_t st_blksize; /* a filesystem-specific preferred I/O block size for
this object. In some filesystem types, this may
vary from file to file */
blkcnt_t st_blocks; /* number of blocks allocated for this object */
};
/* CONSTANTS */
/*
file type
*/
#define S_IFBLK (1) /* block special */
#define S_IFCHR (2) /* character special */
#define S_IFIFO (3) /* FIFO special */
#define S_IFREG (4) /* regular */
#define S_IFDIR (5) /* directory */
#define S_IFLNK (6) /* symbolic link */
/* type of file */
#define S_IFMT (S_IFBLK | S_IFCHR | S_IFIFO | S_IFREG | S_IFDIR | S_IFLNK)
/*
file mode bits
*/
#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) /* read, write, execute/search by owner */
#define S_IRUSR (0x00000001) /* read permission, owner */
#define S_IWUSR (0x00000002) /* write permission, owner */
#define S_IXUSR (0x00000004) /* execute/search permission, owner */
#define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) /* read, write, execute/search by group */
#define S_IRGRP (0x00000010) /* read permission, group */
#define S_IWGRP (0x00000020) /* write permission, group */
#define S_IXGRP (0x00000040) /* execute/search permission, group */
#define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) /* read, write, execute/search by others */
#define S_IROTH (0x00000100) /* read permission, others */
#define S_IWOTH (0x00000200) /* write permission, others */
#define S_IXOTH (0x00000400) /* execute/search permission, others */
#define S_ISUID (0x00001000) /* set-user-ID on execution */
#define S_ISGID (0x00002000) /* set-group-ID on execution */
#define S_ISVTX (0x00004000) /* on directories, restricted deletion flag */
/*
the following macros will test whether a file is of the specified type
*/
#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
/* shared memory, semaphores and message queues are unlikely to be ever
implemented as files */
#define S_TYPEISMQ(buf) (0) /* Test for a message queue */
#define S_TYPEISSEM(buf) (0) /* Test for a semaphore */
#define S_TYPEISSHM(buf) (0) /* Test for a shared memory object */
/* PROTOTYPES */
int chmod(const char *, mode_t);
int fchmod(int, mode_t);
int fstat(int, struct stat *);
int lstat(const char *, struct stat *);
int mkdir(const char *, mode_t);
int mkfifo(const char *, mode_t);
int mknod(const char *, mode_t, dev_t);
int stat(const char *, struct stat *);
mode_t umask(mode_t);
/* MACROS */
#endif /* __SYS_STAT_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,43 @@
/* $Id: statvfs.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/statvfs.h
*
* VFS Filesystem information structure. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_STATVFS_H_INCLUDED__
#define __SYS_STATVFS_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_STATVFS_H_INCLUDED__ */
/* EOF */

43
posix/include/sys/time.h Normal file
View File

@@ -0,0 +1,43 @@
/* $Id: time.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/time.h
*
* time types. Conforming to the Single UNIX(r) Specification Version 2,
* System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_TIME_H_INCLUDED__
#define __SYS_TIME_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_TIME_H_INCLUDED__ */
/* EOF */

43
posix/include/sys/timeb.h Normal file
View File

@@ -0,0 +1,43 @@
/* $Id: timeb.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/timeb.h
*
* additional definitions for date and time. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_TIMEB_H_INCLUDED__
#define __SYS_TIMEB_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_TIMEB_H_INCLUDED__ */
/* EOF */

43
posix/include/sys/times.h Normal file
View File

@@ -0,0 +1,43 @@
/* $Id: times.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/times.h
*
* file access and modification times structure. Conforming to the Single
* UNIX(r) Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_TIMES_H_INCLUDED__
#define __SYS_TIMES_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_TIMES_H_INCLUDED__ */
/* EOF */

83
posix/include/sys/types.h Normal file
View File

@@ -0,0 +1,83 @@
/* $Id: types.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/types.h
*
* data types. Conforming to the Single UNIX(r) Specification Version 2,
* System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_TYPES_H_INCLUDED__
#define __SYS_TYPES_H_INCLUDED__
/* INCLUDES */
#include <inttypes.h>
/* OBJECTS */
/* TYPES */
/* FIXME: all these types need to be checked */
typedef unsigned long int blkcnt_t; /* Used for file block counts */
typedef unsigned long int blksize_t; /* Used for block sizes */
typedef long long clock_t; /* Used for system times in clock ticks or CLOCKS_PER_SEC */
typedef int clockid_t; /* Used for clock ID type in the clock and timer functions. */
typedef int dev_t; /* Used for device IDs. */
typedef long long fsblkcnt_t; /* Used for file system block counts */
typedef long long fsfilcnt_t; /* Used for file system file counts */
typedef int gid_t; /* Used for group IDs. */
typedef int id_t; /* Used as a general identifier; can be used to contain at least a
pid_t, uid_t or a gid_t. */
typedef uint64_t ino_t; /* Used for file serial numbers. */
typedef int key_t; /* Used for interprocess communication. */
typedef int mode_t; /* Used for some file attributes. */
typedef int nlink_t; /* Used for link counts. */
typedef int64_t off_t; /* Used for file sizes. */
typedef unsigned long int pid_t; /* Used for process IDs and process group IDs. */
/* pthread types */
typedef void * pthread_cond_t; /* Used for condition variables. */
typedef void * pthread_condattr_t; /* Used to identify a condition attribute object. */
typedef void * pthread_key_t; /* Used for thread-specific data keys. */
typedef void * pthread_attr_t; /* Used to identify a thread attribute object. */
typedef void * pthread_mutex_t;
typedef void * pthread_mutexattr_t;
typedef void * pthread_once_t; /* Used for dynamic package initialisation. */
typedef void * pthread_rwlock_t; /* Used for read-write locks. */
typedef void * pthread_rwlockattr_t; /* Used for read-write lock attributes. */
typedef unsigned long int pthread_t; /* Used to identify a thread. */
typedef unsigned long int size_t; /* Used for sizes of objects. */
typedef long int ssize_t; /* Used for a count of bytes or an error indication. */
typedef long long suseconds_t; /* Used for time in microseconds */
typedef unsigned long int time_t; /* Used for time in seconds. */
typedef void * timer_t; /* Used for timer ID returned by timer_create(). */
typedef int uid_t; /* Used for user IDs. */
typedef unsigned long long useconds_t; /* Used for time in microseconds. */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_TYPES_H_INCLUDED__ */
/* EOF */

43
posix/include/sys/uio.h Normal file
View File

@@ -0,0 +1,43 @@
/* $Id: uio.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/uio.h
*
* definitions for vector I/O operations. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_UIO_H_INCLUDED__
#define __SYS_UIO_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_UIO_H_INCLUDED__ */
/* EOF */

43
posix/include/sys/un.h Normal file
View File

@@ -0,0 +1,43 @@
/* $Id: un.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/un.h
*
* declarations for definitions for UNIX-domain sockets. Conforming to the
* Single UNIX(r) Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_UN_H_INCLUDED__
#define __SYS_UN_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_UN_H_INCLUDED__ */
/* EOF */

View File

@@ -0,0 +1,54 @@
/* $Id: utsname.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/utsname.h
*
* system name structure. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_UTSNAME_H_INCLUDED__
#define __SYS_UTSNAME_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
struct utsname
{
char sysname[255]; /* name of this implementation of the operating system */
char nodename[255]; /* name of this node within an implementation-dependent
communications network */
char release[255]; /* current release level of this implementation */
char version[255]; /* current version level of this release */
char machine[255]; /* name of the hardware type on which the system is
running */
};
/* CONSTANTS */
/* PROTOTYPES */
int uname(struct utsname *);
/* MACROS */
#endif /* __SYS_UTSNAME_H_INCLUDED__ */
/* EOF */

43
posix/include/sys/wait.h Normal file
View File

@@ -0,0 +1,43 @@
/* $Id: wait.h,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* sys/wait.h
*
* declarations for waiting. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __SYS_WAIT_H_INCLUDED__
#define __SYS_WAIT_H_INCLUDED__
/* INCLUDES */
/* OBJECTS */
/* TYPES */
/* CONSTANTS */
/* PROTOTYPES */
/* MACROS */
#endif /* __SYS_WAIT_H_INCLUDED__ */
/* EOF */

114
posix/include/time.h Normal file
View File

@@ -0,0 +1,114 @@
/* $Id: time.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* time.h
*
* time types. Conforming to the Single UNIX(r) Specification Version 2,
* System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __TIME_H_INCLUDED__
#define __TIME_H_INCLUDED__
/* INCLUDES */
#include <signal.h>
#include <sys/types.h>
/* OBJECTS */
//extern static int getdate_err; /* FIXME */
extern int daylight;
extern long int timezone;
extern char *tzname[];
/* TYPES */
/* pre-declaration of signal.h types to suppress warnings caused by circular
dependencies */
struct sigevent;
struct tm
{
int tm_sec; /* seconds [0,61] */
int tm_min; /* minutes [0,59] */
int tm_hour; /* hour [0,23] */
int tm_mday; /* day of month [1,31] */
int tm_mon; /* month of year [0,11] */
int tm_year; /* years since 1900 */
int tm_wday; /* day of week [0,6] (Sunday = 0) */
int tm_yday; /* day of year [0,365] */
int tm_isdst; /* daylight savings flag */
};
struct timespec
{
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
struct itimerspec
{
struct timespec it_interval; /* timer period */
struct timespec it_value; /* timer expiration */
};
/* CONSTANTS */
/* FIXME: all the constants are wrong */
/* Number of clock ticks per second returned by the times() function (LEGACY). */
#define CLK_TCK (1)
/* A number used to convert the value returned by the clock() function into
seconds. */
#define CLOCKS_PER_SEC (1)
/* The identifier of the systemwide realtime clock. */
#define CLOCK_REALTIME (0)
/* Flag indicating time is absolute with respect to the clock associated with a
timer. */
#define TIMER_ABSTIME (1)
/* PROTOTYPES */
char *asctime(const struct tm *);
char *asctime_r(const struct tm *, char *);
clock_t clock(void);
int clock_getres(clockid_t, struct timespec *);
int clock_gettime(clockid_t, struct timespec *);
int clock_settime(clockid_t, const struct timespec *);
char *ctime(const time_t *);
char *ctime_r(const time_t *, char *);
double difftime(time_t, time_t);
struct tm *getdate(const char *);
struct tm *gmtime(const time_t *);
struct tm *gmtime_r(const time_t *, struct tm *);
struct tm *localtime(const time_t *);
struct tm *localtime_r(const time_t *, struct tm *);
time_t mktime(struct tm *);
int nanosleep(const struct timespec *, struct timespec *);
size_t strftime(char *, size_t, const char *, const struct tm *);
char *strptime(const char *, const char *, struct tm *);
time_t time(time_t *);
int timer_create(clockid_t, struct sigevent *, timer_t *);
int timer_delete(timer_t);
int timer_gettime(timer_t, struct itimerspec *);
int timer_getoverrun(timer_t);
int timer_settime(timer_t, int, const struct itimerspec *,
struct itimerspec *);
void tzset(void);
/* MACROS */
#endif /* __TIME_H_INCLUDED__ */ /* replace with the appropriate tag */
/* EOF */

62
posix/include/ucontext.h Normal file
View File

@@ -0,0 +1,62 @@
/* $Id: ucontext.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* ucontext.h
*
* user context. Conforming to the Single UNIX(r) Specification Version 2,
* System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __UCONTEXT_H_INCLUDED__
#define __UCONTEXT_H_INCLUDED__
/* INCLUDES */
#include <signal.h>
/* OBJECTS */
/* TYPES */
typedef void * mcontext_t;
typedef struct __tagucontext_t ucontext_t;
struct __tagucontext_t
{
ucontext_t *uc_link; /* pointer to the context that will be resumed
when this context returns */
sigset_t uc_sigmask; /* the set of signals that are blocked when this
context is active */
stack_t uc_stack; /* the stack used by this context */
mcontext_t uc_mcontext; /* a machine-specific representation of the saved
context */
};
/* CONSTANTS */
/* PROTOTYPES */
int getcontext(ucontext_t *);
int setcontext(const ucontext_t *);
void makecontext(ucontext_t *, (void *)(), int, ...);
int swapcontext(ucontext_t *, const ucontext_t *);
/* MACROS */
#endif /* __UCONTEXT_H_INCLUDED__ */
/* EOF */

492
posix/include/unistd.h Normal file
View File

@@ -0,0 +1,492 @@
/* $Id: unistd.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* unistd.h
*
* standard symbolic constants and types. Conforming to the Single UNIX(r)
* Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __UNISTD_H_INCLUDED__
#define __UNISTD_H_INCLUDED__
/* INCLUDES */
#include <sys/types.h>
#include <stdio.h>
#include <inttypes.h>
/* OBJECTS */
extern char *optarg;
extern int optind, opterr, optopt;
/* TYPES */
/* CONSTANTS */
/* FIXME: set these constants appropriately */
/* Integer value indicating version of the ISO<53>POSIX-1 standard (C
language binding). */
#define _POSIX_VERSION (0)
/* Integer value indicating version of the ISO POSIX-2 standard
(Commands). */
#define _POSIX2_VERSION (0)
/* Integer value indicating version of the ISO POSIX-2 standard (C
language binding). */
#define _POSIX2_C_VERSION (0)
/* Integer value indicating version of the X/Open Portability Guide to
which the implementation conforms. */
#define _XOPEN_VERSION (500)
/* The version of the XCU specification to which the implementation
conforms */
/* TODO: set to an appropriate value when commands and utilities will
be available */
#define _XOPEN_XCU_VERSION (-1)
#if _XOPEN_XCU_VERSION != -1
#error TODO: define these constants
#define _POSIX2_C_BIND
#define _POSIX2_C_VERSION
#define _POSIX2_CHAR_TERM
#define _POSIX2_LOCALEDEF
#define _POSIX2_UPE
#define _POSIX2_VERSION
#endif
#if 0
/* TODO: check for conformance to the following specs */
#define _XOPEN_XPG2
#define _XOPEN_XPG3
#define _XOPEN_XPG4
#define _XOPEN_UNIX
#endif
#if 0
/* TODO: don't forget these features */
/* The use of chown() is restricted to a process with appropriate
privileges, and to changing the group ID of a file only to the
effective group ID of the process or to one of its supplementary
group IDs. */
#define _POSIX_CHOWN_RESTRICTED
/* Terminal special characters defined in <termios.h> can be disabled
using this character value. */
#define _POSIX_VDISABLE
/* Each process has a saved set-user-ID and a saved set-group-ID. */
#define _POSIX_SAVED_IDS
/* Implementation supports job control. */
#define _POSIX_JOB_CONTROL
#endif
/* Pathname components longer than {NAME_MAX} generate an error. */
#define _POSIX_NO_TRUNC (1)
/* The implementation supports the threads option. */
#define _POSIX_THREADS (1)
/* FIXME: none of the following is strictly true yet */
/* The implementation supports the thread stack address attribute
option. */ /* FIXME: not currently implemented. Should be trivial */
#define _POSIX_THREAD_ATTR_STACKADDR (1)
/* The implementation supports the thread stack size attribute
option. */ /* FIXME: not currently implemented. Should be trivial */
#define _POSIX_THREAD_ATTR_STACKSIZE (1)
/* The implementation supports the process-shared synchronisation
option. */ /* FIXME? not sure */
#define _POSIX_THREAD_PROCESS_SHARED (1)
/* The implementation supports the thread-safe functions option. */
/* FIXME: fix errno (currently not thread-safe) */
#define _POSIX_THREAD_SAFE_FUNCTIONS (1)
/*
<20>Constants for Options and Feature Groups
*/
/* Implementation supports the C Language Binding option. This will
always have a value other than -1. */
#define _POSIX2_C_BIND (1)
/* Implementation supports the C Language Development Utilities
option. */ /* FIXME: please change this when C compiler and
utilities are ported */
#define _POSIX2_C_DEV (-1)
/* Implementation supports at least one terminal type. */ /* FIXME:
please change this when terminal emulation is complete */
#define _POSIX2_CHAR_TERM (-1)
/* Implementation supports the FORTRAN Development Utilities option. */
/* FIXME: please change this when Fortran compiler and utilities are
ported */
#define _POSIX2_FORT_DEV (-1)
/* Implementation supports the FORTRAN Run-time Utilities option. */
/* FIXME: please change this when Fortran runtimes are ported */
#define _POSIX2_FORT_RUN (-1)
/* Implementation supports the creation of locales by the localedef
utility. */ /* FIXME: please change this when locales are ready */
#define _POSIX2_LOCALEDEF (-1)
/* Implementation supports the Software Development Utilities option. */
/* FIXME? */
#define _POSIX2_SW_DEV (-1)
/* The implementation supports the User Portability Utilities option. */
/* FIXME? */
#define _POSIX2_UPE (-1)
/* The implementation supports the X/Open Encryption Feature Group. */
/* FIXME: please change this when encryption is ready */
#define _XOPEN_CRYPT (-1)
/* The implementation supports the Issue 4, Version 2 Enhanced
Internationalisation Feature Group. This is always set to a value
other than -1. */ /* TODO: high priority. Support for this feature is
needed for a conforming implementation */
#define _XOPEN_ENH_I18N (-1)
/* The implementation supports the Legacy Feature Group. */
#define _XOPEN_LEGACY (1)
/* The implementation supports the X/Open Realtime Feature Group. */
/* FIXME? unlikely to be ever supported */
#define _XOPEN_REALTIME (-1)
/* The implementation supports the X/Open Realtime Threads Feature
Group. */ /* FIXME? really unlikely to be ever supported */
#define _XOPEN_REALTIME_THREADS (-1)
/* The implementation supports the Issue 4, Version 2 Shared Memory
Feature Group. This is always set to a value other than -1. */ /* TODO:
high priority. Support for this feature is needed for a conforming
implementation */
#define _XOPEN_SHM (-1)
/* Implementation provides a C-language compilation environment with
32-bit int, long, pointer and off_t types. */
#define _XBS5_ILP32_OFF32 (1)
/* Implementation provides a C-language compilation environment with
32-bit int, long and pointer types and an off_t type using at
least 64 bits. */ /* FIXME? check the off_t type */
#define _XBS5_ILP32_OFFBIG (1)
/* Implementation provides a C-language compilation environment with
32-bit int and 64-bit long, pointer and off_t types. */ /* FIXME: on
some architectures this may be true */
#define _XBS5_LP64_OFF64 (-1)
/* Implementation provides a C-language compilation environment with
an int type using at least 32 bits and long, pointer and off_t
types using at least 64 bits. */ /* FIXME: on some architectures
this may be true */
#define _XBS5_LPBIG_OFFBIG (-1)
/* Implementation supports the File Synchronisation option. */
/* TODO: high priority. Implement this */
#define _POSIX_FSYNC
/* Implementation supports the Memory Mapped Files option. */
/* TODO: high priority. Implement this */
#define _POSIX_MAPPED_FILES
/* Implementation supports the Memory Protection option. */
/* TODO: high priority. Implement this */
#define _POSIX_MEMORY_PROTECTION
#if 0
/* Implementation supports the Prioritized Input and Output option. */
/* FIXME? unlikely to be ever supported */
#define _POSIX_PRIORITIZED_IO
#endif
/* FIXME: these should be implemented */
/* Asynchronous input or output operations may be performed for the
associated file. */
#define _POSIX_ASYNC_IO (-1)
/* Prioritized input or output operations may be performed for the
associated file. */
#define _POSIX_PRIO_IO (-1)
/* Synchronised input or output operations may be performed for the
associated file. */
#define _POSIX_SYNC_IO (-1)
/*
null pointer
*/
#ifndef NULL
/* NULL seems to be defined pretty much everywhere - we prevent
redefinition */
#define NULL ((void *)(0))
#endif
/*
constants for the access() function
*/
/* Test for read permission. */
#define R_OK (0x00000001)
/* Test for write permission. */
#define W_OK (0x00000002)
/* Test for execute (search) permission. */
#define X_OK (0x00000004)
/* Test for existence of file. */
#define F_OK (0)
/*
constants for the confstr() function
*/
#define _CS_PATH (1)
#define _CS_XBS5_ILP32_OFF32_CFLAGS (2)
#define _CS_XBS5_ILP32_OFF32_LDFLAGS (3)
#define _CS_XBS5_ILP32_OFF32_LIBS (4)
#define _CS_XBS5_ILP32_OFF32_LINTFLAGS (5)
#define _CS_XBS5_ILP32_OFFBIG_CFLAGS (6)
#define _CS_XBS5_ILP32_OFFBIG_LDFLAGS (7)
#define _CS_XBS5_ILP32_OFFBIG_LIBS (8)
#define _CS_XBS5_ILP32_OFFBIG_LINTFLAGS (9)
#define _CS_XBS5_LP64_OFF64_CFLAGS (10)
#define _CS_XBS5_LP64_OFF64_LDFLAGS (11)
#define _CS_XBS5_LP64_OFF64_LIBS (12)
#define _CS_XBS5_LP64_OFF64_LINTFLAGS (13)
#define _CS_XBS5_LPBIG_OFFBIG_CFLAGS (14)
#define _CS_XBS5_LPBIG_OFFBIG_LDFLAGS (15)
#define _CS_XBS5_LPBIG_OFFBIG_LIBS (16)
#define _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS (17)
/*
constants for the lseek() and fcntl() functions
*/
#define SEEK_SET (1) /* Set file offset to offset. */
#define SEEK_CUR (2) /* Set file offset to current plus offset. */
#define SEEK_END (3) /* Set file offset to EOF plus offset. */
/*
constants for sysconf()
*/
#define _SC_2_C_BIND (1)
#define _SC_2_C_DEV (2)
#define _SC_2_C_VERSION (3)
#define _SC_2_FORT_DEV (4)
#define _SC_2_FORT_RUN (5)
#define _SC_2_LOCALEDEF (6)
#define _SC_2_SW_DEV (7)
#define _SC_2_UPE (8)
#define _SC_2_VERSION (9)
#define _SC_ARG_MAX (10)
#define _SC_AIO_LISTIO_MAX (11)
#define _SC_AIO_MAX (12)
#define _SC_AIO_PRIO_DELTA_MAX (13)
#define _SC_ASYNCHRONOUS_IO (14)
#define _SC_ATEXIT_MAX (15)
#define _SC_BC_BASE_MAX (16)
#define _SC_BC_DIM_MAX (17)
#define _SC_BC_SCALE_MAX (18)
#define _SC_BC_STRING_MAX (19)
#define _SC_CHILD_MAX (20)
#define _SC_CLK_TCK (21)
#define _SC_COLL_WEIGHTS_MAX (22)
#define _SC_DELAYTIMER_MAX (23)
#define _SC_EXPR_NEST_MAX (24)
#define _SC_FSYNC (25)
#define _SC_GETGR_R_SIZE_MAX (26)
#define _SC_GETPW_R_SIZE_MAX (27)
#define _SC_IOV_MAX (28)
#define _SC_JOB_CONTROL (29)
#define _SC_LINE_MAX (30)
#define _SC_LOGIN_NAME_MAX (31)
#define _SC_MAPPED_FILES (32)
#define _SC_MEMLOCK (33)
#define _SC_MEMLOCK_RANGE (34)
#define _SC_MEMORY_PROTECTION (35)
#define _SC_MESSAGE_PASSING (36)
#define _SC_MQ_OPEN_MAX (37)
#define _SC_MQ_PRIO_MAX (38)
#define _SC_NGROUPS_MAX (39)
#define _SC_OPEN_MAX (40)
#define _SC_PAGE_SIZE (41)
#define _SC_PASS_MAX (42) /* LEGACY */
#define _SC_PRIORITIZED_IO (43)
#define _SC_PRIORITY_SCHEDULING (44)
#define _SC_RE_DUP_MAX (45)
#define _SC_REALTIME_SIGNALS (46)
#define _SC_RTSIG_MAX (47)
#define _SC_SAVED_IDS (48)
#define _SC_SEMAPHORES (49)
#define _SC_SEM_NSEMS_MAX (50)
#define _SC_SEM_VALUE_MAX (51)
#define _SC_SHARED_MEMORY_OBJECTS (52)
#define _SC_SIGQUEUE_MAX (53)
#define _SC_STREAM_MAX (54)
#define _SC_SYNCHRONIZED_IO (55)
#define _SC_THREADS (56)
#define _SC_THREAD_ATTR_STACKADDR (57)
#define _SC_THREAD_ATTR_STACKSIZE (58)
#define _SC_THREAD_DESTRUCTOR_ITERATIONS (59)
#define _SC_THREAD_KEYS_MAX (60)
#define _SC_THREAD_PRIORITY_SCHEDULING (61)
#define _SC_THREAD_PRIO_INHERIT (62)
#define _SC_THREAD_PRIO_PROTECT (63)
#define _SC_THREAD_PROCESS_SHARED (64)
#define _SC_THREAD_SAFE_FUNCTIONS (65)
#define _SC_THREAD_STACK_MIN (66)
#define _SC_THREAD_THREADS_MAX (67)
#define _SC_TIMERS (68)
#define _SC_TIMER_MAX (69)
#define _SC_TTY_NAME_MAX (70)
#define _SC_TZNAME_MAX (71)
#define _SC_VERSION (72)
#define _SC_XOPEN_VERSION (73)
#define _SC_XOPEN_CRYPT (74)
#define _SC_XOPEN_ENH_I18N (75)
#define _SC_XOPEN_SHM (76)
#define _SC_XOPEN_UNIX (77)
#define _SC_XOPEN_XCU_VERSION (78)
#define _SC_XOPEN_LEGACY (79)
#define _SC_XOPEN_REALTIME (80)
#define _SC_XOPEN_REALTIME_THREADS (81)
#define _SC_XBS5_ILP32_OFF32 (82)
#define _SC_XBS5_ILP32_OFFBIG (83)
#define _SC_XBS5_LP64_OFF64 (84)
#define _SC_XBS5_LPBIG_OFFBIG (85)
#define _SC_PAGESIZE _SC_PAGE_SIZE
/* possible values for the function argument to the lockf() function */
/* Lock a section for exclusive use. */
#define F_LOCK (1)
/* Unlock locked sections. */
#define F_ULOCK (2)
/* Test section for locks by other processes. */
#define F_TEST (3)
/* Test and lock a section for exclusive use. */
#define F_TLOCK (4)
/* File number of stdin. It is 0. */
#define STDIN_FILENO (0)
/* File number of stdout. It is 1. */
#define STDOUT_FILENO (1)
/* File number of stderr. It is 2. */
#define STDERR_FILENO (2)
/* PROTOTYPES */
int access(const char *, int);
unsigned int alarm(unsigned int);
int brk(void *);
int chdir(const char *);
int chroot(const char *); /* LEGACY */
int chown(const char *, uid_t, gid_t);
int close(int);
size_t confstr(int, char *, size_t);
char *crypt(const char *, const char *);
char *ctermid(char *);
char *cuserid(char *s); /* LEGACY */
int dup(int);
int dup2(int, int);
void encrypt(char[64], int);
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 []);
void _exit(int);
int fchown(int, uid_t, gid_t);
int fchdir(int);
int fdatasync(int);
pid_t fork(void);
long int fpathconf(int, int);
int fsync(int);
int ftruncate(int, off_t);
char *getcwd(char *, size_t);
int getdtablesize(void); /* LEGACY */
gid_t getegid(void);
uid_t geteuid(void);
gid_t getgid(void);
int getgroups(int, gid_t []);
long gethostid(void);
char *getlogin(void);
int getlogin_r(char *, size_t);
int getopt(int, char * const [], const char *);
int getpagesize(void); /* LEGACY */
char *getpass(const char *); /* LEGACY */
pid_t getpgid(pid_t);
pid_t getpgrp(void);
pid_t getpid(void);
pid_t getppid(void);
pid_t getsid(pid_t);
uid_t getuid(void);
char *getwd(char *);
int isatty(int);
int lchown(const char *, uid_t, gid_t);
int link(const char *, const char *);
int lockf(int, int, off_t);
off_t lseek(int, off_t, int);
int nice(int);
long int pathconf(const char *, int);
int pause(void);
int pipe(int [2]);
ssize_t pread(int, void *, size_t, off_t);
int pthread_atfork(void (*)(void), void (*)(void),
void(*)(void));
ssize_t pwrite(int, const void *, size_t, off_t);
ssize_t read(int, void *, size_t);
int readlink(const char *, char *, size_t);
int rmdir(const char *);
void *sbrk(intptr_t);
int setgid(gid_t);
int setpgid(pid_t, pid_t);
pid_t setpgrp(void);
int setregid(gid_t, gid_t);
int setreuid(uid_t, uid_t);
pid_t setsid(void);
int setuid(uid_t);
unsigned int sleep(unsigned int);
void swab(const void *, void *, ssize_t);
int symlink(const char *, const char *);
void sync(void);
long int sysconf(int);
pid_t tcgetpgrp(int);
int tcsetpgrp(int, pid_t);
int truncate(const char *, off_t);
char *ttyname(int);
int ttyname_r(int, char *, size_t);
useconds_t ualarm(useconds_t, useconds_t);
int unlink(const char *);
int usleep(useconds_t);
pid_t vfork(void);
ssize_t write(int, const void *, size_t);
/* MACROS */
#endif /* __UNISTD_H_INCLUDED__ */
/* EOF */

50
posix/include/utime.h Normal file
View File

@@ -0,0 +1,50 @@
/* $Id: utime.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* utime.h
*
* access and modification times structure. Conforming to the Single
* UNIX(r) Specification Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __UTIME_H_INCLUDED__
#define __UTIME_H_INCLUDED__
/* INCLUDES */
#include <sys/types.h>
/* OBJECTS */
/* TYPES */
struct utimbuf
{
time_t actime; /* access time */
time_t modtime; /* modification time */
};
/* CONSTANTS */
/* PROTOTYPES */
int utime(const char *, const struct utimbuf *);
/* MACROS */
#endif /* __UTIME_H_INCLUDED__ */
/* EOF */

139
posix/include/wchar.h Normal file
View File

@@ -0,0 +1,139 @@
/* $Id: wchar.h,v 1.2 2002/02/20 09:17:55 hyperion Exp $
*/
/*
* wchar.h
*
* wide-character types. Conforming to the Single UNIX(r) Specification
* Version 2, System Interface & Headers Issue 5
*
* This file is part of the ReactOS Operating System.
*
* Contributors:
* Created by KJK::Hyperion <noog@libero.it>
*
* THIS SOFTWARE IS NOT COPYRIGHTED
*
* This source code is offered for use in the public domain. You may
* use, modify or distribute it freely.
*
* This code is distributed in the hope that it will be useful but
* WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
* DISCLAMED. This includes but is not limited to warranties of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
*/
#ifndef __WCHAR_H_INCLUDED__
#define __WCHAR_H_INCLUDED__
/* INCLUDES */
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
#include <time.h>
/* OBJECTS */
/* TYPES */
typedef wchar_t wint_t; /* An integral type capable of storing any valid
value of wchar_t, or WEOF */
typedef long int wctype_t; /* A scalar type of a data object that can hold
values which represent locale-specific
character classification. */
typedef void * mbstate_t; /* An object type other than an array type that
can hold the conversion state information
necessary to convert between sequences of
(possibly multibyte) characters and
wide-characters */
/* CONSTANTS */
/* PROTOTYPES */
wint_t btowc(int);
int fwprintf(FILE *, const wchar_t *, ...);
int fwscanf(FILE *, const wchar_t *, ...);
int iswalnum(wint_t);
int iswalpha(wint_t);
int iswcntrl(wint_t);
int iswdigit(wint_t);
int iswgraph(wint_t);
int iswlower(wint_t);
int iswprint(wint_t);
int iswpunct(wint_t);
int iswspace(wint_t);
int iswupper(wint_t);
int iswxdigit(wint_t);
int iswctype(wint_t, wctype_t);
wint_t fgetwc(FILE *);
wchar_t *fgetws(wchar_t *, int, FILE *);
wint_t fputwc(wchar_t, FILE *);
int fputws(const wchar_t *, FILE *);
int fwide(FILE *, int);
wint_t getwc(FILE *);
wint_t getwchar(void);
int mbsinit(const mbstate_t *);
size_t mbrlen(const char *, size_t, mbstate_t *);
size_t mbrtowc(wchar_t *, const char *, size_t,
mbstate_t *);
size_t mbsrtowcs(wchar_t *, const char **, size_t,
mbstate_t *);
wint_t putwc(wchar_t, FILE *);
wint_t putwchar(wchar_t);
int swprintf(wchar_t *, size_t, const wchar_t *, ...);
int swscanf(const wchar_t *, const wchar_t *, ...);
wint_t towlower(wint_t);
wint_t towupper(wint_t);
wint_t ungetwc(wint_t, FILE *);
int vfwprintf(FILE *, const wchar_t *, va_list);
int vwprintf(const wchar_t *, va_list);
int vswprintf(wchar_t *, size_t, const wchar_t *,
va_list);
size_t wcrtomb(char *, wchar_t, mbstate_t *);
wchar_t *wcscat(wchar_t *, const wchar_t *);
wchar_t *wcschr(const wchar_t *, wchar_t);
int wcscmp(const wchar_t *, const wchar_t *);
int wcscoll(const wchar_t *, const wchar_t *);
wchar_t *wcscpy(wchar_t *, const wchar_t *);
size_t wcscspn(const wchar_t *, const wchar_t *);
size_t wcsftime(wchar_t *, size_t, const wchar_t *,
const struct tm *);
size_t wcslen(const wchar_t *);
wchar_t *wcsncat(wchar_t *, const wchar_t *, size_t);
int wcsncmp(const wchar_t *, const wchar_t *, size_t);
wchar_t *wcsncpy(wchar_t *, const wchar_t *, size_t);
wchar_t *wcspbrk(const wchar_t *, const wchar_t *);
wchar_t *wcsrchr(const wchar_t *, wchar_t);
size_t wcsrtombs(char *, const wchar_t **, size_t,
mbstate_t *);
size_t wcsspn(const wchar_t *, const wchar_t *);
wchar_t *wcsstr(const wchar_t *, const wchar_t *);
double wcstod(const wchar_t *, wchar_t **);
wchar_t *wcstok(wchar_t *, const wchar_t *, wchar_t **);
long int wcstol(const wchar_t *, wchar_t **, int);
unsigned long int wcstoul(const wchar_t *, wchar_t **, int);
wchar_t *wcswcs(const wchar_t *, const wchar_t *);
int wcswidth(const wchar_t *, size_t);
size_t wcsxfrm(wchar_t *, const wchar_t *, size_t);
int wctob(wint_t);
wctype_t wctype(const char *);
int wcwidth(wchar_t);
wchar_t *wmemchr(const wchar_t *, wchar_t, size_t);
int wmemcmp(const wchar_t *, const wchar_t *, size_t);
wchar_t *wmemcpy(wchar_t *, const wchar_t *, size_t);
wchar_t *wmemmove(wchar_t *, const wchar_t *, size_t);
wchar_t *wmemset(wchar_t *, wchar_t, size_t);
int wprintf(const wchar_t *, ...);
int wscanf(const wchar_t *, ...);
/* MACROS */
#define WCHAR_MAX (0xFFFF)
#define WCHAR_MIN (0x0000)
/* FIXME? */
#define WEOF (0xFFFF)
#endif /* __WCHAR_H_INCLUDED__ */
/* EOF */

46
posix/lib/crt0w32.c Normal file
View File

@@ -0,0 +1,46 @@
/* $Id: crt0w32.c,v 1.1 2002/01/20 21:24:49 ea Exp $
*
* PROJECT : ReactOS / POSIX+ personality
* FILE : subsys/psx/lib/cr0w32.c
* DESCRIPTION: startup code for POSIX+ applications.
* DATE : 2002-01-18
* AUTHOR : Emanuele Aliberti <ea@iol.it>
*/
extern void __stdcall __PdxInitializeData(int*,char***);
extern int main (int,char**,char**);
extern void exit(int);
/* ANSI ENVIRONMENT */
char **_environ = (char**) 0;
int errno = 0;
#ifdef __SUBSYSTEM_WINDOWS__
void WinMainCRTStartup (void)
#else
void mainCRTStartup (void)
#endif
{
char * argv[2] = {"none", 0};
/* TODO: parse the command line */
exit(main(1,argv,0));
}
void __main ()
{
/*
* Store in PSXDLL.DLL two well known global symbols
* references.
*/
__PdxInitializeData (& errno, & _environ); /* PSXDLL.__PdxInitializeData */
/* CRT initialization. */
#ifdef __SUBSYSTEM_WINDOWS__
WinMainCRTStartup ();
#else
mainCRTStartup ();
#endif
}
/* EOF */

117
posix/lib/psxdll/Makefile Normal file
View File

@@ -0,0 +1,117 @@
# $Id: Makefile,v 1.2 2002/02/20 09:17:56 hyperion Exp $
PATH_TO_TOP = ../../../..
TARGET_TYPE = dynlink
TARGET_NAME = psxdll
TARGET_LFLAGS = -nostartfiles
TARGET_SDKLIBS = ntdll.a
TARGET_BASE = 0x68EB0000
TARGET_ENTRY = _DllMain@12
TARGET_CFLAGS = -W -nostdinc -nostdlib -fno-builtin -I$(PATH_TO_TOP)/subsys/psx/include -D__PSXDLL__ -D__PSX_DEBUG_WANT_ALL__
TARGET_OBJECTS = $(TARGET_NAME).o
TARGET_CLEAN = $(OBJECTS)
include $(PATH_TO_TOP)/rules.mak
include $(TOOLS_PATH)/helper.mk
OBJECTS_MISC = \
misc/main.o \
misc/interlock.o \
misc/safeobj.o \
misc/path.o \
misc/fdtable.o
OBJECTS_DIRENT = \
dirent/opendir.o \
dirent/readdir.o \
dirent/closedir.o
OBJECTS_DLFCN = \
dlfcn/dlopen.o \
dlfcn/dlclose.o \
dlfcn/dlsym.o \
dlfcn/dlerror.o
OBJECTS_ERRNO = \
errno/errno.o
OBJECTS_FCNTL = \
fcntl/open.o \
fcntl/fcntl.o
OBJECTS_LIBGEN = \
libgen/basename.o
OBJECTS_SCHED = \
sched/yield.o
OBJECTS_SIGNAL = \
pthread/kill.o \
signal/raise.o
OBJECTS_STDLIB = \
stdlib/abort.o \
stdlib/malloc.o \
stdlib/exit.o
OBJECTS_STRING = \
string/strdup.o \
string/strerror.o
OBJECTS_PTHREAD = \
pthread/create.o \
pthread/exit.o \
pthread/join.o \
pthread/mutex.o \
pthread/self.o
OBJECTS_SYS_UTSNAME = \
sys/utsname/uname.o
OBJECTS_UNISTD = \
unistd/close.o \
unistd/dup.o \
unistd/getcwd.o \
unistd/getpid.o \
unistd/getppid.o
OBJECTS = \
$(OBJECTS_MISC) \
$(OBJECTS_DIRENT) \
$(OBJECTS_DLFCN) \
$(OBJECTS_ERRNO) \
$(OBJECTS_FCNTL) \
$(OBJECTS_LIBGEN) \
$(OBJECTS_SCHED) \
$(OBJECTS_SIGNAL) \
$(OBJECTS_STDLIB) \
$(OBJECTS_STRING) \
$(OBJECTS_PTHREAD) \
$(OBJECTS_SYS_UTSNAME) \
$(OBJECTS_UNISTD)
DEP_OBJECTS = $(OBJECTS)
include $(TOOLS_PATH)/depend.mk
$(TARGET_NAME).o: $(OBJECTS)
$(LD) -r $(OBJECTS) -o $(TARGET_NAME).o
DTFLAGS = -k -l $@
$(TARGET_NAME).a: $(TARGET_NAME).def
$(DLLTOOL) \
$(DTFLAGS) \
-D $(TARGET_NAME).dll \
-d $(TARGET_NAME).def
# EOF

View File

@@ -0,0 +1,36 @@
/* $Id: closedir.c,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/dirent/closedir.c
* PURPOSE: Close a directory stream
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 01/02/2002: Created
* 13/02/2002: KJK::Hyperion: modified to use file descriptors
*/
#include <dirent.h>
#include <unistd.h>
#include <errno.h>
#include <sys/types.h>
#include <psx/dirent.h>
#include <psx/safeobj.h>
int closedir(DIR *dirp)
{
/* check the "magic" signature */
if(!__safeobj_validate(dirp, __IDIR_MAGIC))
{
errno = EBADF;
return (-1);
}
/* this will close the handle, deallocate the internal object and
invalidate the descriptor */
return (close(((struct __internal_DIR *)dirp)->fildes));
}
/* EOF */

View File

@@ -0,0 +1,100 @@
/* $Id: opendir.c,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/dirent/opendir.c
* PURPOSE: Open a directory
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 27/01/2002: Created
* 13/02/2002: KJK::Hyperion: modified to use file descriptors
*/
#include <sys/types.h>
#include <fcntl.h>
#include <dirent.h>
#include <wchar.h>
#include <errno.h>
#include <psx/debug.h>
#include <psx/stdlib.h>
#include <psx/dirent.h>
#include <psx/safeobj.h>
DIR *opendir(const char *dirname)
{
ANSI_STRING strDirName;
UNICODE_STRING wstrDirName;
DIR *pdData;
RtlInitAnsiString(&strDirName, (PCSZ)dirname);
RtlAnsiStringToUnicodeString(&wstrDirName, &strDirName, TRUE);
pdData = (DIR *)_Wopendir(wstrDirName.Buffer);
RtlFreeUnicodeString(&wstrDirName);
return (pdData);
}
DIR *_Wopendir(const wchar_t *dirname)
{
struct __internal_DIR *pidData;
int nFileNo;
/* allocate internal object */
pidData = __malloc(sizeof(*pidData));
/* allocation failed */
if(pidData == 0)
{
errno = ENOMEM;
return (0);
}
/* open the directory */
nFileNo = _Wopen(dirname, O_RDONLY | _O_DIRFILE);
/* failure */
if(nFileNo < 0)
{
__free(pidData);
return (0);
}
/* directory file descriptors must be closed on exec() */
if(fcntl(nFileNo, F_SETFD, FD_CLOEXEC) == -1)
WARN
(
"couldn't set FD_CLOEXEC flag on file number %u, errno %u",
nFileNo,
errno
);
/* associate the internal data to the file descriptor */
if(fcntl(nFileNo, F_SETXP, pidData) == -1)
WARN
(
"couldn't associate the object at 0x%X to the file number %u, errno %u",
pidData,
nFileNo,
errno
);
if(fcntl(nFileNo, F_SETXS, sizeof(*pidData)) == -1)
WARN
(
"couldn't set the extra data size of the file number %u, errno %u",
nFileNo,
errno
);
pidData->signature = __IDIR_MAGIC;
/* success */
return ((DIR *)pidData);
}
/* EOF */

View File

@@ -0,0 +1,214 @@
/* $Id: readdir.c,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/dirent/readdir.c
* PURPOSE: Read directory
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 27/01/2002: Created
* 13/02/2002: KJK::Hyperion: modified to use file descriptors
*/
#include <sys/types.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stddef.h>
#include <dirent.h>
#include <psx/dirent.h>
#include <psx/debug.h>
#include <psx/errno.h>
#include <psx/safeobj.h>
#include <ddk/ntddk.h>
struct dirent *readdir(DIR *dirp)
{
struct _Wdirent *lpwdReturn;
struct __internal_DIR *pidData;
ANSI_STRING strFileName;
UNICODE_STRING wstrFileName;
NTSTATUS nErrCode;
/* call Unicode function */
lpwdReturn = _Wreaddir(dirp);
/* failure */
if(lpwdReturn == 0)
return (0);
/* get the internal data object */
pidData = ((struct __internal_DIR *)dirp);
/* create NT Unicode string from the Unicode dirent's buffer */
RtlInitUnicodeString(&wstrFileName, pidData->ent.de_unicode.d_name);
/* HACK: make the ANSI string point to the same buffer where the Unicode string is stored */
strFileName.Buffer = (PCSZ)&pidData->info.FileName[0];
strFileName.Length = 0;
strFileName.MaximumLength = MAX_PATH;
/* convert the filename to ANSI */
nErrCode = RtlUnicodeStringToAnsiString(&strFileName, &wstrFileName, FALSE);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
errno = __status_to_errno(nErrCode);
return (0);
}
/* make the ANSI dirent filename point to the ANSI buffer */
pidData->ent.de_ansi.d_name = strFileName.Buffer;
/* null-terminate the ANSI name */
pidData->ent.de_ansi.d_name[strFileName.Length] = 0;
/* success */
return (&(pidData->ent.de_ansi));
}
int readdir_r(DIR *dirp, struct dirent *entry, struct dirent **result)
{
errno = ENOSYS;
return (0);
}
struct _Wdirent *_Wreaddir(DIR *dirp)
{
HANDLE hFile;
HANDLE hDir;
OBJECT_ATTRIBUTES oaFileAttribs;
UNICODE_STRING wstrFileName;
FILE_INTERNAL_INFORMATION fiiInfo;
IO_STATUS_BLOCK isbStatus;
NTSTATUS nErrCode;
struct __internal_DIR *pidData;
/* check the "magic" signature */
if(!__safeobj_validate(dirp, __IDIR_MAGIC))
{
errno = EINVAL;
return (0);
}
/* get internal data */
pidData = (struct __internal_DIR *)dirp;
/* get handle */
hDir = (HANDLE)fcntl(pidData->fildes, F_GETFH);
/* failure */
if(((int)hDir) == -1)
return (0);
/* read next directory entry */
nErrCode = NtQueryDirectoryFile
(
hDir,
NULL,
NULL,
NULL,
&isbStatus,
(PVOID)&pidData->info,
sizeof(pidData->info) + sizeof(WCHAR) * (MAX_PATH - 1),
FileDirectoryInformation,
TRUE,
NULL,
FALSE
);
/* failure or EOF */
if(!NT_SUCCESS(nErrCode))
{
if(nErrCode == (NTSTATUS)STATUS_NO_MORE_FILES)
return (0);
else
{
ERR("NtQueryDirectoryFile() failed with status 0x%08X", nErrCode);
errno = __status_to_errno(nErrCode);
return (0);
}
}
/* null-terminate the filename, just in case */
pidData->info.FileName[pidData->info.FileNameLength / sizeof(WCHAR)] = 0;
INFO("this entry: %ls", pidData->info.FileName);
#if 0
/* file inodes are not returned by NtQueryDirectoryFile, we have to open every file */
/* set file's object attributes */
wstrFileName.Length = pidData->info.FileNameLength;
wstrFileName.MaximumLength = sizeof(WCHAR) * MAX_PATH;
wstrFileName.Buffer = &pidData->info.FileName[0];
oaFileAttribs.Length = sizeof(OBJECT_ATTRIBUTES);
oaFileAttribs.RootDirectory = pidData->dirhandle;
oaFileAttribs.ObjectName = &wstrFileName;
oaFileAttribs.Attributes = 0;
oaFileAttribs.SecurityDescriptor = NULL;
oaFileAttribs.SecurityQualityOfService = NULL;
/* open the file */
nErrCode = NtOpenFile
(
&hFile,
FILE_READ_ATTRIBUTES,
&oaFileAttribs,
&isbStatus,
0,
FILE_SYNCHRONOUS_IO_NONALERT
);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
ERR("NtOpenFile() failed with status %#X", nErrCode);
errno = __status_to_errno(nErrCode);
return (0);
}
/* get the internal information for the file */
nErrCode = NtQueryInformationFile
(
hFile,
&isbStatus,
&fiiInfo,
sizeof(FILE_INTERNAL_INFORMATION),
FileInternalInformation
);
/* close the handle (not needed anymore) */
NtClose(hFile);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
ERR("NtQueryInformationFile() failed with status %#X", nErrCode);
errno = __status_to_errno(nErrCode);
return (0);
}
/* return file inode */
pidData->ent.de_unicode.d_ino = (ino_t)fiiInfo.IndexNumber.QuadPart;
#endif
FIXME("file inodes currently hardcoded to 0");
pidData->ent.de_unicode.d_ino = 0;
/* return file name */
pidData->ent.de_unicode.d_name = &pidData->info.FileName[0];
/* success */
return &(pidData->ent.de_unicode);
}
int _Wreaddir_r(DIR *dirp, struct _Wdirent *entry, struct _Wdirent **result)
{
errno = ENOSYS;
return (0);
}
/* EOF */

View File

@@ -0,0 +1,60 @@
/* $Id: dlclose.c,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/dlfcn/dlclose.c
* PURPOSE: Close a dlopen() object
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 19/12/2001: Created
*/
#include <ddk/ntddk.h>
#include <ntdll/rtl.h>
#include <ntdll/ldr.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <psx/debug.h>
#include <psx/dlfcn.h>
#include <psx/errno.h>
int dlclose(void *handle)
{
if(handle == 0)
{
ERR("invalid handle passed to dlclose");
__dl_set_last_error(EFAULT); /* FIXME? maybe EINVAL? */
return (-1);
}
if(((struct __dlobj *)handle)->global)
{
TODO("global symbol matching not implemented");
__dl_set_last_error(EINVAL);
return (-1);
}
else
{
NTSTATUS nErrCode = LdrUnloadDll(((struct __dlobj *)handle)->handle);
if(!NT_SUCCESS(nErrCode))
{
ERR("LdrUnloadDll(%#x) failed with status %d", ((struct __dlobj *)handle)->handle, nErrCode);
free(handle);
__dl_set_last_error(__status_to_errno(nErrCode));
return (-1);
}
}
free(handle);
return (0);
}
/* EOF */

View File

@@ -0,0 +1,36 @@
/* $Id: dlerror.c,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/dlfcn/dlerror.c
* PURPOSE: Gain access to an executable object file
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 19/12/2001: Created
*/
#include <ddk/ntddk.h>
#include <ntdll/rtl.h>
#include <ntdll/ldr.h>
#include <dlfcn.h>
#include <string.h>
#include <psx/debug.h>
#include <psx/dlfcn.h>
#include <psx/errno.h>
static int __dl_last_error = 0;
void __dl_set_last_error(int err)
{
FIXME("dlfcn error handling not thread safe");
__dl_last_error = err;
}
char *dlerror(void)
{
return strerror(__dl_last_error);
}
/* EOF */

View File

@@ -0,0 +1,129 @@
/* $Id: dlopen.c,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/dlfcn/dlopen.c
* PURPOSE: Gain access to an executable object file
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 19/12/2001: Created
*/
#include <ddk/ntddk.h>
#include <ntdll/rtl.h>
#include <ntdll/ldr.h>
#include <wchar.h>
#include <dlfcn.h>
#include <stdlib.h>
#include <psx/dlfcn.h>
#include <psx/errno.h>
#include <psx/debug.h>
void *__wdlopen(const wchar_t *, int);
void *dlopen(const char *file, int mode)
{
/* TODO: ANSI-to-Unicode stubs like this need to be standardized in some way */
void * pRetVal;
ANSI_STRING strFile;
UNICODE_STRING wstrFile;
RtlInitAnsiString(&strFile, (LPSTR)file);
RtlAnsiStringToUnicodeString (&wstrFile, &strFile, TRUE);
pRetVal = __wdlopen((wchar_t *)wstrFile.Buffer, mode);
free(wstrFile.Buffer);
return pRetVal;
}
void *__wdlopen(const wchar_t *file, int mode)
{
NTSTATUS nErrCode;
UNICODE_STRING wstrNativePath;
struct __dlobj * pdloObject;
if(file == 0)
{
/* POSIX dynamic linking allows for global symbol matching */
pdloObject = (struct __dlobj *)malloc(sizeof(struct __dlobj));
TODO("\
move the global symbol matching semantics into the PE Loader \
(NTDLL Ldr family of calls), and just return a pointer to the module \
image\
");
pdloObject->global = 1;
return (pdloObject);
}
FIXME("\
LdrLoadDll() only accepts DOS paths - probably because the POSIX \
standard didn't specify dynamic linking interfaces at the time Windows NT \
was born \
");
#if 0
/* TODO: LdrLoadNtDll() or LdrLoadDllEx() (the former is preferrable, since
the latter is more likely to be implemented with different purposes from
Microsoft), accepting native NT paths */
if(wcschr(file, '/'L) != NULL)
{
/* TODO: RtlPosixPathNameToNtPathName_U */
if(!RtlPosixPathNameToNtPathName_U((LPWSTR)file, &wstrNativePath, NULL, NULL))
{
__dl_set_last_error(ENOENT);
return (NULL);
}
}
else
{
RtlInitUnicodeString(&wstrNativePath, (LPWSTR)file);
}
#endif
RtlInitUnicodeString(&wstrNativePath, (LPWSTR)file);
pdloObject = (struct __dlobj *)malloc(sizeof(struct __dlobj));
pdloObject->global = 0;
WARN("\
mode flags are not fully supported by Windows NT, due to the \
completely different semantics of dynamical linking (for \
example the global symbol matching is unsupported). This \
implementation will then behave as if mode was set to \
(RTLD_NOW | RTLD_GLOBAL), and fail if other flags are set.\
");
if(__dl_get_scope_flag(mode) == RTLD_LOCAL)
{
__dl_set_last_error(EINVAL);
return (NULL);
}
/* load the DLL */
nErrCode = LdrLoadDll
(
NULL,
0,
&wstrNativePath,
(PVOID*)&pdloObject->handle
);
if(!NT_SUCCESS(nErrCode))
{
__dl_set_last_error(__status_to_errno(nErrCode));
return (NULL);
}
return (pdloObject);
}
/* EOF */

View File

@@ -0,0 +1,92 @@
/* $Id: dlsym.c,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/dlfcn/dlsym.c
* PURPOSE: Obtain the address of a symbol from a dlopen() object
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 19/12/2001: Created
*/
#include <ddk/ntddk.h>
#include <ntdll/rtl.h>
#include <ntdll/ldr.h>
#include <dlfcn.h>
#include <psx/dlfcn.h>
#include <psx/errno.h>
#include <psx/debug.h>
void *__dlsymn(void *, unsigned long int);
void *__dlsym(void *, int, const char *, unsigned long int);
void *dlsym(void *handle, const char *name)
{
return (__dlsym(handle, 1, name, 0));
}
void *__dlsymn(void *handle, unsigned long int ordinal)
{
return (__dlsym(handle, 0, 0, ordinal));
}
void *__dlsym(void *handle, int by_name, const char *name, unsigned long int ordinal)
{
struct __dlobj * pdloObject;
void * pProcAddr;
NTSTATUS nErrCode;
if(handle == RTLD_NEXT)
{
FIXME("implement RTLD_NEXT semantics");
return (NULL);
}
pdloObject = (struct __dlobj *) handle;
if(pdloObject->global)
{
FIXME("implement global symbol matching");
return (NULL);
}
if(by_name)
{
ANSI_STRING strName;
RtlInitAnsiString(&strName, (LPSTR)name);
nErrCode = LdrGetProcedureAddress
(
pdloObject->handle,
&strName,
0,
(PVOID *)&pProcAddr
);
}
else
{
nErrCode = LdrGetProcedureAddress
(
pdloObject->handle,
NULL,
ordinal,
(PVOID *)&pProcAddr
);
}
if(!NT_SUCCESS(nErrCode))
{
__dl_set_last_error(__status_to_errno(nErrCode));
return (NULL);
}
return pProcAddr;
}
/* EOF */

View File

@@ -0,0 +1,25 @@
/* $Id: errno.c,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/errno/errno.c
* PURPOSE: Internal errno implementation
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 27/12/2001: Created
*/
#include <psx/debug.h>
#include <psx/errno.h>
static int __errno_storage = 0;
int * __PdxGetThreadErrNum(void)
{
FIXME("errno currently not thread-safe");
return (&__errno_storage);
}
/* EOF */

View File

@@ -0,0 +1,311 @@
/* $Id: fcntl.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/fcntl/fcntl.c
* PURPOSE: File control
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 13/02/2002: Created
* 15/02/2002: Implemented fcntl() (KJK::Hyperion)
*/
#include <ddk/ntddk.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdarg.h>
#include <psx/errno.h>
#include <psx/stdlib.h>
#include <psx/fdtable.h>
#include <psx/pdata.h>
#include <psx/debug.h>
int fcntl(int fildes, int cmd, ...)
{
__fdtable_t *pftFdTable;
__fildes_t *pfdDescriptor;
NTSTATUS nErrCode;
int nRetVal;
int nThirdArg;
void *pThirdArg;
va_list vlArgs;
/* lock the environment */
__PdxAcquirePdataLock();
/* get the file descriptors table */
pftFdTable = __PdxGetProcessData()->FdTable;
/* fildes is an invalid, closed or uninitialized descriptor */
if
(
fildes < 0 ||
fildes >= OPEN_MAX ||
__fdtable_entry_isavail(pftFdTable, fildes) == 0 ||
__fdtable_entry_get(pftFdTable, fildes) == 0
)
{
errno = EBADF;
__PdxReleasePdataLock();
return (-1);
}
/* get the file descriptor referenced by fildes */
pfdDescriptor = __fdtable_entry_get(pftFdTable, fildes);
/* get third argument as integer */
va_start(vlArgs, cmd);
nThirdArg = va_arg(vlArgs, int);
va_end(vlArgs);
/* get third argument as pointer */
va_start(vlArgs, cmd);
pThirdArg = va_arg(vlArgs, void *);
va_end(vlArgs);
/* initialize return value */
nRetVal = -1;
switch(cmd)
{
case F_DUPFD:
{
va_list vlArgs;
int nDupFileNo;
__fildes_t *pfdDupDescriptor;
/* allocate the duplicated descriptor */
nDupFileNo = __fdtable_entry_add(pftFdTable, nThirdArg, 0, &pfdDupDescriptor);
if(nDupFileNo)
break;
/* copy the open flags */
pfdDupDescriptor->OpenFlags = pfdDescriptor->OpenFlags;
/* clear the FD_CLOEXEC flag */
pfdDupDescriptor->FdFlags = pfdDescriptor->FdFlags & ~FD_CLOEXEC;
/* duplicate the extra data */
if(pfdDescriptor->ExtraDataSize != 0 && pfdDescriptor->ExtraData != 0)
{
/* allocate space for the duplicated extra data */
pfdDupDescriptor->ExtraDataSize = pfdDescriptor->ExtraDataSize;
pfdDupDescriptor->ExtraData = __malloc(pfdDupDescriptor->ExtraDataSize);
/* failure */
if(pfdDupDescriptor->ExtraData == 0)
{
errno = ENOMEM;
break;
}
/* copy the extra data */
memcpy(pfdDupDescriptor->ExtraData, pfdDescriptor->ExtraData, pfdDupDescriptor->ExtraDataSize);
INFO
(
"copied %u bytes from 0x%08X into 0x%08X",
pfdDupDescriptor->ExtraDataSize,
pfdDescriptor->ExtraData,
pfdDupDescriptor->ExtraData
);
}
/* duplicate the handle */
nErrCode = NtDuplicateObject
(
NtCurrentProcess(),
pfdDescriptor->FileHandle,
NtCurrentProcess(),
&pfdDupDescriptor->FileHandle,
0,
0,
DUPLICATE_SAME_ACCESS /* | DUPLICATE_SAME_ATTRIBUTES */
);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
__free(pfdDupDescriptor->ExtraData);
errno = __status_to_errno(nErrCode);
break;
}
INFO
(
"duplicated handle 0x%08X into handle 0x%08X",
pfdDescriptor->FileHandle,
pfdDupDescriptor->FileHandle
);
/* return the duplicated file number */
nRetVal = nDupFileNo;
break;
}
case F_GETFD:
{
nRetVal = pfdDescriptor->FdFlags;
break;
}
case F_SETFD:
{
pfdDescriptor->FdFlags = nThirdArg;
nRetVal = 0;
break;
}
case F_GETFL:
{
nRetVal = pfdDescriptor->OpenFlags;
break;
}
case F_SETFL:
{
pfdDescriptor->OpenFlags = nThirdArg;
nRetVal = 0;
break;
}
case F_GETLK:
{
errno = EINVAL;
break;
}
case F_SETLK:
{
errno = EINVAL;
break;
}
case F_SETLKW:
{
errno = EINVAL;
break;
}
case F_NEWFD:
{
/* allocate a new descriptor */
nRetVal = __fdtable_entry_add(pftFdTable, fildes, (__fildes_t *)pThirdArg, 0);
break;
}
case F_DELFD:
{
/* invalid return pointer */
if(pThirdArg == 0)
{
errno = EINVAL;
break;
}
memcpy((__fildes_t *)pThirdArg, pfdDescriptor, sizeof(*pfdDescriptor));
/* remove file descriptor */
nRetVal = __fdtable_entry_remove(pftFdTable, fildes);
}
case F_GETALL:
{
/* invalid return pointer */
if(pThirdArg == 0)
{
errno = EINVAL;
break;
}
/* return a copy of the file descriptor */
memcpy((__fildes_t *)pThirdArg, pfdDescriptor, sizeof(*pfdDescriptor));
nRetVal = 0;
}
case F_SETALL:
{
/* invalid file descriptor to copy attributes from */
if(pThirdArg == 0)
{
errno = EINVAL;
break;
}
/* copy the attributes of file descriptor from the provided descriptor */
memcpy(pfdDescriptor, pThirdArg, sizeof(*pfdDescriptor));
nRetVal = 0;
}
case F_GETXP:
{
/* invalid return pointer */
if(pThirdArg == 0)
{
errno = EINVAL;
break;
}
/* return a pointer to the extra data associated to the descriptor */
*((void **)pThirdArg) = pfdDescriptor->ExtraData;
nRetVal = 0;
break;
}
case F_SETXP:
{
/* set the pointer to the extra data associated */
pfdDescriptor->ExtraData = pThirdArg;
nRetVal = 0;
break;
}
case F_GETXS:
{
nRetVal = pfdDescriptor->ExtraDataSize;
break;
}
case F_SETXS:
{
pfdDescriptor->ExtraDataSize = nThirdArg;
nRetVal = 0;
break;
}
case F_GETFH:
{
/* invalid return pointer */
if(pThirdArg == 0)
{
errno = EINVAL;
break;
}
/* return the handle associated to the descriptor */
*((void **)pThirdArg) = pfdDescriptor->FileHandle;
nRetVal = 0;
break;
}
case F_SETFH:
{
pfdDescriptor->FileHandle = pThirdArg;
nRetVal = 0;
break;
}
default:
errno = EINVAL;
}
/* unlock the environment */
__PdxReleasePdataLock();
return (nRetVal);
}
/* EOF */

View File

@@ -0,0 +1,181 @@
/* $Id: open.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/fcntl/open.c
* PURPOSE: Open a file
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 04/02/2002: Created
*/
#include <ddk/ntddk.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <psx/path.h>
#include <psx/debug.h>
#include <psx/errno.h>
#include <psx/pdata.h>
int open(const char *path, int oflag, ...)
{
ANSI_STRING strPath;
UNICODE_STRING wstrPath;
int nRetVal;
RtlInitAnsiString(&strPath, (PCSZ)path);
RtlAnsiStringToUnicodeString(&wstrPath, &strPath, TRUE);
nRetVal = _Wopen(wstrPath.Buffer, oflag);
RtlFreeUnicodeString(&wstrPath);
return (nRetVal);
}
int _Wopen(const wchar_t *path, int oflag, ...)
{
OBJECT_ATTRIBUTES oaFileAttribs;
IO_STATUS_BLOCK isbStatus;
UNICODE_STRING wstrNativePath;
NTSTATUS nErrCode;
ULONG nDesiredAccess;
ULONG nCreateDisposition;
ULONG nCreateOptions;
HANDLE hFile;
#if 0
mode_t mFileMode;
#endif
int nFileNo;
__fdtable_t *pftTable;
__fildes_t fdDescriptor;
/* translate file access flag */
switch(oflag & O_ACCMODE)
{
case O_RDONLY:
{
nDesiredAccess = FILE_READ_ACCESS;
nCreateOptions = 0;
break;
}
case O_WRONLY:
{
nDesiredAccess = FILE_WRITE_ACCESS;
nCreateOptions = FILE_NON_DIRECTORY_FILE; /* required by the specification */
break;
}
case O_RDWR:
{
nDesiredAccess = FILE_READ_ACCESS | FILE_WRITE_ACCESS;
nCreateOptions = FILE_NON_DIRECTORY_FILE; /* required by the specification */
break;
}
default:
{
errno = EINVAL;
return (-1);
}
}
/* miscellaneous flags */
if((oflag & _O_DIRFILE) == _O_DIRFILE)
nCreateOptions |= FILE_DIRECTORY_FILE;
/* creation disposition */
if((oflag & O_CREAT) == O_CREAT)
if((oflag & O_EXCL) == O_EXCL)
nCreateDisposition = FILE_CREATE; /* O_CREAT + O_EXCL: create file, fail if file exists */
else
nCreateDisposition = FILE_OPEN_IF; /* O_CREAT: open file, create if file doesn't exist */
else if((oflag & O_TRUNC) == O_TRUNC)
nCreateDisposition = FILE_OVERWRITE; /* O_TRUNC: truncate existing file */
else
nCreateDisposition = FILE_OPEN; /* normal: open file, fail if file doesn't exist */
/* lock the environment */
__PdxAcquirePdataLock();
/* convert the path into a native path */
if(!__PdxPosixPathNameToNtPathName((LPWSTR)path, __PdxGetNativePathBuffer(), __PdxGetCurDir(), NULL))
{
__PdxReleasePdataLock();
return (-1);
}
/* set file generic object attributes */
oaFileAttribs.Length = sizeof(oaFileAttribs);
oaFileAttribs.RootDirectory = __PdxGetRootHandle();
oaFileAttribs.ObjectName = &wstrNativePath;
oaFileAttribs.Attributes = OBJ_INHERIT; /* child processes inherit all file descriptors */
oaFileAttribs.SecurityDescriptor = NULL;
oaFileAttribs.SecurityQualityOfService = NULL;
/* open or create the file */
nErrCode = NtCreateFile
(
&hFile,
nDesiredAccess | SYNCHRONIZE,
&oaFileAttribs,
&isbStatus,
NULL,
0,
FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
nCreateDisposition,
FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
nCreateOptions
);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
ERR("NtCreateFile() failed with status 0x%08X", nErrCode);
__PdxReleasePdataLock();
errno = __status_to_errno(nErrCode);
return (-1);
}
/* initialize descriptor constructor */
memset(&fdDescriptor, 0, sizeof(fdDescriptor));
fdDescriptor.FileHandle = hFile;
fdDescriptor.OpenFlags = oflag;
/* allocate a new file descriptor */
nFileNo = fcntl(0, F_NEWFD, &fdDescriptor);
/* unlock the environment */
__PdxReleasePdataLock();
/* could not allocate the file descriptor */
if(nFileNo < 0)
{
NtClose(hFile);
return (-1);
}
/* return the file number */
return (nFileNo);
}
int creat(const char *path, mode_t mode)
{
return (open(path, O_WRONLY | O_CREAT | O_TRUNC, mode));
}
int _Wcreat(const wchar_t *path, mode_t mode)
{
return (_Wopen(path, O_WRONLY | O_CREAT | O_TRUNC, mode));
}
/* EOF */

View File

@@ -0,0 +1,114 @@
/* $Id: basename.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/libgen/basename.c
* PURPOSE: Return the last component of a pathname
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 15/02/2002: Created
*/
#include <sys/types.h>
#include <libgen.h>
#include <wchar.h>
#include <psx/path.h>
static const char *__basename_dot = ".";
static const wchar_t *__Wbasename_dot = L".";
char *basename(char *path)
{
char *pcTail;
size_t nStrLen;
/* null or empty string */
if(path == 0 && ((nStrLen = strlen(path)) == 0))
return ((char *)__basename_dot);
if(nStrLen == 1)
{
/* path is "/", return "/" */
if(IS_CHAR_DELIMITER_A(path[0]))
{
path[0] = '/';
path[1] = 0;
return (path);
}
/* path is a single character, return it */
else
{
return (path);
}
}
/* tail of the string (null terminator excluded) */
pcTail = &path[nStrLen - 1];
/* skip trailing slashes */
while(pcTail > path && IS_CHAR_DELIMITER_A(*pcTail))
pcTail --;
pcTail[1] = 0;
/* go backwards until a delimiter char or the beginning of the string */
while(pcTail >= path)
/* delimiter found, return the basename */
if(IS_CHAR_DELIMITER_A(*pcTail))
return (&pcTail[1]);
else
pcTail --;
/* return all the path */
return (path);
}
wchar_t *_Wbasename(wchar_t *path)
{
wchar_t *pwcTail;
size_t nStrLen;
/* null or empty string */
if(path == 0 && ((nStrLen = wcslen(path)) == 0))
return ((wchar_t *)__Wbasename_dot);
if(nStrLen == 1)
{
/* path is "/", return "/" */
if(IS_CHAR_DELIMITER_U(path[0]))
{
path[0] = L'/';
path[1] = 0;
return (path);
}
/* path is a single character, return it */
else
{
return (path);
}
}
/* tail of the string (null terminator excluded) */
pwcTail = &path[nStrLen - 1];
/* skip trailing slashes */
while(pwcTail > path && IS_CHAR_DELIMITER_U(*pwcTail))
pwcTail --;
pwcTail[1] = 0;
/* go backwards until a delimiter char or the beginning of the string */
while(pwcTail >= path)
/* delimiter found, return the basename */
if(IS_CHAR_DELIMITER_U(*pwcTail))
return (&pwcTail[1]);
else
pwcTail --;
/* return all the path */
return (path);
}
/* EOF */

View File

@@ -0,0 +1,234 @@
/* $Id: fdtable.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/misc/fdtable.c
* PURPOSE: File descriptors table functions
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 12/02/2002: Created
*/
#include <string.h>
#include <errno.h>
#include <psx/fdtable.h>
#include <psx/stdlib.h>
#include <psx/debug.h>
#include <psx/safeobj.h>
int __fdtable_init(__fdtable_t * fdtable)
{
if(fdtable == 0)
{
errno = EINVAL;
return (-1);
}
memset(fdtable, 0, sizeof(*fdtable));
fdtable->Signature = __FDTABLE_MAGIC;
return (0);
}
int __fdtable_free(__fdtable_t * fdtable)
{
if(fdtable == 0)
{
errno = EINVAL;
return (-1);
}
__free(&fdtable->Descriptors);
memset(fdtable, 0, sizeof(*fdtable));
fdtable->Signature = MAGIC('B', 'A', 'A', 'D');
return (0);
}
int __fdtable_entry_isavail(__fdtable_t * fdtable, int fileno)
{
return ((fdtable->DescriptorsBitmap[fileno / 32] >> (fileno % 32)) % 2);
}
int __fdtable_entry_nextavail(__fdtable_t * fdtable, int fileno)
{
int nCurMapIndex;
int nUnusedIndex;
uint32_t nCurMapCell;
nUnusedIndex = fileno;
/* The file descriptors bitmap is an array of 32 bit unsigned integers (32 bit
integers were chosen for proper data alignment without padding). The array is
big enough to hold at least OPEN_MAX bits, that is it has OPEN_MAX / 32 cells
(see also the __fdtable_t definition in psx/fdtable.h). Bits correspond to
file numbers: if a bit is 1, the corresponding file number is in use, else
it's unused. Bit numbering is right-to-left wise, that is the rightmost (least
significative) bit of cell 0 corresponds to file number 0, the leftmost (most
significative) bit of cell 0 to file number 7, the leftmost bit of cell 1 to
file number 8, and so on
*/
/* NOTE: I'm sure the algorytm can be greatly optimized, but I prefer to privilege
readability - it allows for more maintenable code. Please don't pretend to
outsmart the compiler: such optimizations as performing divisions as bit shifts
are useless */
/* index of the bitmap cell containing nUnusedIndex */
nCurMapIndex = nUnusedIndex / 32;
/* get a copy of the bitmap cell containg nUnusedIndex, and shift it to the right
so that the rightmost (least significative) bit is the one referencing nUnusedIndex */
nCurMapCell = fdtable->DescriptorsBitmap[nCurMapIndex] >> (nUnusedIndex % 32);
while(1)
{
/* if the least significative bit of the current cell is 0, we've found an unused
fileno, and we return it */
if((nCurMapCell % 2) == 0)
return (nUnusedIndex);
/* on to next fileno */
nUnusedIndex ++;
/* this is NOT a failure. -1 with undefined errno means that no unused file
number exists */
if(nUnusedIndex >= OPEN_MAX)
return (-1);
/* this fileno is referenced in the next cell */
if((nUnusedIndex % 32) == 0)
{
nCurMapIndex ++;
nCurMapCell = fdtable->DescriptorsBitmap[nCurMapIndex];
}
/* on to next fileno (bit) in the current cell */
else
nCurMapCell >>= 1;
}
return (-1);
}
int __fdtable_entry_add(__fdtable_t * fdtable, int fileno, __fildes_t * fildes, __fildes_t ** newfd)
{
int nFileNo;
/* descriptors count reached OPEN_MAX */
if(fdtable->UsedDescriptors >= OPEN_MAX)
{
ERR("file descriptor table full");
errno = EMFILE;
return (-1);
}
/* base fileno less than zero: use the lowest unused fileno */
if(fileno < 0)
nFileNo = fdtable->LowestUnusedFileNo;
/* base fileno greater than or equal to zero: use the next available fileno */
else
nFileNo = __fdtable_entry_nextavail(fdtable, fileno);
INFO("lowest unused file number is %d", nFileNo);
/* descriptors count reached OPEN_MAX */
if(nFileNo < 0)
{
ERR("nFileNo is less than zero");
errno = EMFILE;
return (-1);
}
/* if the table doesn't have enough space for the next entry ... */
if(nFileNo >= fdtable->AllocatedDescriptors)
{
void * pTemp;
INFO
(
"growing the array from %lu to %lu bytes",
fdtable->AllocatedDescriptors * sizeof(*fdtable->Descriptors),
(nFileNo + 1) * sizeof(*fdtable->Descriptors)
);
/* ... try to increase the size of the table */
pTemp = __realloc
(
fdtable->Descriptors,
(nFileNo + 1) * sizeof(*fdtable->Descriptors)
);
/* reallocation failed */
if(pTemp == 0)
{
ERR("__realloc() failed");
errno = ENOMEM;
return (-1);
}
/* update the table */
fdtable->AllocatedDescriptors = nFileNo + 1;
fdtable->Descriptors = pTemp;
}
/* initialize descriptor */
if(fildes == 0)
memset(&fdtable->Descriptors[nFileNo], 0, sizeof(__fildes_t));
else
memcpy(&fdtable->Descriptors[nFileNo], fildes, sizeof(__fildes_t));
if(newfd != 0)
*newfd = &fdtable->Descriptors[nFileNo];
INFO
(
"file number %d: handle 0x%08X, open flags 0x%08X, flags 0x%08X, extra data size %u, extra data at 0x%08X",
nFileNo,
fdtable->Descriptors[nFileNo].FileHandle,
fdtable->Descriptors[nFileNo].OpenFlags,
fdtable->Descriptors[nFileNo].FdFlags,
fdtable->Descriptors[nFileNo].ExtraDataSize,
fdtable->Descriptors[nFileNo].ExtraData
);
INFO
(
"incrementing used descriptors count from %u to %u",
fdtable->UsedDescriptors,
fdtable->UsedDescriptors + 1
);
fdtable->UsedDescriptors ++;
INFO
(
"setting bit %u of cell %u of the bitmap to 1",
nFileNo % 32,
nFileNo / 32
);
fdtable->DescriptorsBitmap[nFileNo / 32] |= (1 << (nFileNo % 32));
fdtable->LowestUnusedFileNo = __fdtable_entry_nextavail(fdtable, nFileNo);
INFO("setting the lowest unused file number to %d", fdtable->LowestUnusedFileNo);
return (nFileNo);
}
int __fdtable_entry_remove(__fdtable_t * fdtable, int fileno)
{
return (-1);
}
__fildes_t *__fdtable_entry_get(__fdtable_t * fdtable, int fileno)
{
/* this fileno hasn't been allocated */
if(fileno >= fdtable->AllocatedDescriptors)
return (0);
return (&fdtable->Descriptors[fileno]);
}
/* EOF */

View File

@@ -0,0 +1,83 @@
/* $Id: interlock.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/misc/interlock.c
* PURPOSE: inter-locked increments/decrements
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 20/01/2002: Adapted from lib/kernel32/synch/intrlck.c
*/
/*
* NOTE by KJK::Hyperion: I do not understand what's behind these functions.
* Don't ask me how they work, or to fix errors in them.
* Please refer to the authors referenced in the original
* file, lib/kernel32/synch/intrlck.c
*/
/* TODO? move these in some shared library */
#include <psx/interlock.h>
int __interlock_inc(int * addend)
{
int ret = 0;
__asm__
(
" lock\n" /* for SMP systems */
" incl (%1)\n"
" je 2f\n"
" jl 1f\n"
" incl %0\n"
" jmp 2f\n"
"1: dec %0\n"
"2:\n"
:"=r" (ret):"r" (addend), "0" (0): "memory"
);
return (ret);
}
int __interlock_dec(int * addend)
{
int ret = 0;
__asm__
(
" lock\n" /* for SMP systems */
" decl (%1)\n"
" je 2f\n"
" jl 1f\n"
" incl %0\n"
" jmp 2f\n"
"1: dec %0\n"
"2:\n"
:"=r" (ret):"r" (addend), "0" (0): "memory"
);
return (ret);
}
int __interlock_add(int * addend, int increment)
{
int ret = 0;
__asm__
(
" lock\n" /* for SMP systems */
" xaddl %0,(%1)"
:"=r" (ret)
:"r" (addend), "0" (increment)
:"memory"
);
return (ret);
}
/* EOF */

View File

@@ -0,0 +1,19 @@
/* $Id: main.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/misc/main.c
* PURPOSE: psxdll.dll entry point
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 27/12/2001: Created
*/
int __stdcall DllMain(void *hinstDll, unsigned long int dwReason, void *reserved)
{
return (1);
}
/* EOF */

View File

@@ -0,0 +1,460 @@
/* $Id: path.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/misc/path.c
* PURPOSE: POSIX subsystem path utilities
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 31/01/2002: Created
*/
#include <ddk/ntddk.h>
#include <errno.h>
#include <string.h>
#include <psx/stdlib.h>
#include <psx/pdata.h>
#include <psx/path.h>
BOOLEAN
__PdxPosixPathGetNextComponent_U
(
IN UNICODE_STRING PathName,
IN OUT PUNICODE_STRING PathComponent,
OUT PBOOLEAN TrailingDelimiter OPTIONAL
)
{
int i, j;
USHORT l = PathName.Length / sizeof(WCHAR);
if(PathComponent->Buffer == 0)
i = 0;
else
i = ((ULONG)PathComponent->Buffer - (ULONG)PathName.Buffer + PathComponent->Length) / sizeof(WCHAR);
/* skip leading empty components */
while(1)
if(i >= l)
{
PathComponent->Length = PathComponent->MaximumLength = 0;
return (FALSE);
}
else if(IS_CHAR_DELIMITER_U(PathName.Buffer[i]))
i ++;
else
break;
if(i > l)
{
PathComponent->Length = PathComponent->MaximumLength = 0;
return (FALSE);
}
PathComponent->Buffer = &PathName.Buffer[i];
j = i + 1;
/* advance until the end of the string, or the next delimiter */
while(1)
{
if(j >= l)
{
if(TrailingDelimiter != 0)
*TrailingDelimiter = FALSE;
break;
}
else if (IS_CHAR_DELIMITER_U(PathName.Buffer[j]))
{
if(TrailingDelimiter != 0)
*TrailingDelimiter = TRUE;
break;
}
else
j ++;
}
PathComponent->Length = PathComponent->MaximumLength = (j - i) * sizeof(WCHAR);
return (TRUE);
}
BOOLEAN
__PdxPosixPathResolve_U
(
IN UNICODE_STRING PathName,
OUT PUNICODE_STRING ResolvedPathName,
IN WCHAR PathDelimiter OPTIONAL
)
{
UNICODE_STRING wstrThisComponent = {0, 0, NULL};
PWCHAR pwcCurPos;
PWCHAR pwcStartPos;
BOOLEAN bIsDirectory;
if(PathDelimiter == 0)
PathDelimiter = L'/';
/* start from the beginning of the return buffer */
pwcCurPos = ResolvedPathName->Buffer;
/* path begins with a delimiter (absolute path) */
if(IS_CHAR_DELIMITER_U(PathName.Buffer[0]))
{
/* put a delimiter in front of the return buffer */
*pwcCurPos = PathDelimiter;
/* move to next character */
pwcCurPos ++;
}
pwcStartPos = pwcCurPos;
/* repeat until the end of the path string */
while(__PdxPosixPathGetNextComponent_U(PathName, &wstrThisComponent, &bIsDirectory))
{
/* ".": skip */
if(IS_COMPONENT_DOT_U(wstrThisComponent))
continue;
/* "..": go back to the last component */
else if(IS_COMPONENT_DOTDOT_U(wstrThisComponent))
{
if(pwcCurPos == pwcStartPos)
continue;
/* skip the last (undefined) character */
pwcCurPos --;
/* down to the previous path delimiter */
do{ pwcCurPos --; }while(!IS_CHAR_DELIMITER_U(*pwcCurPos));
/* include the delimiter */
pwcCurPos ++;
}
else
{
/* copy this component into the return string */
memcpy
(
pwcCurPos,
wstrThisComponent.Buffer,
wstrThisComponent.Length
);
/* move the current position to the end of the string */
pwcCurPos = (PWCHAR)((PBYTE)pwcCurPos + wstrThisComponent.Length);
/* component had a trailing delimiter */
if(bIsDirectory)
{
/* append a delimiter */
*pwcCurPos = PathDelimiter;
/* on to next character */
pwcCurPos ++;
}
}
}
/* set the return string's length as the byte offset between the initial buffer
position and the current position */
ResolvedPathName->Length = ((ULONG)pwcCurPos - (ULONG)ResolvedPathName->Buffer);
return (TRUE);
}
BOOLEAN
__PdxPosixPathGetNextComponent_A
(
IN ANSI_STRING PathName,
IN OUT PANSI_STRING PathComponent,
OUT PBOOLEAN TrailingDelimiter OPTIONAL
)
{
int i, j;
if(PathComponent->Buffer == 0)
i = 0;
else
i = ((ULONG)PathComponent->Buffer - (ULONG)PathName.Buffer + PathComponent->Length);
/* skip leading empty components */
while(1)
if(i >= PathName.Length)
{
PathComponent->Length = PathComponent->MaximumLength = 0;
return (FALSE);
}
else if(IS_CHAR_DELIMITER_A(PathName.Buffer[i]))
i ++;
else
break;
if(i > PathName.Length)
{
PathComponent->Length = PathComponent->MaximumLength = 0;
return (FALSE);
}
PathComponent->Buffer = &PathName.Buffer[i];
j = i + 1;
/* advance until the end of the string, or the next delimiter */
while(1)
{
if(j >= PathName.Length)
{
if(TrailingDelimiter != 0)
*TrailingDelimiter = FALSE;
break;
}
else if (IS_CHAR_DELIMITER_A(PathName.Buffer[j]))
{
if(TrailingDelimiter != 0)
*TrailingDelimiter = TRUE;
break;
}
else
j ++;
}
PathComponent->Length = PathComponent->MaximumLength = j - i;
return (TRUE);
}
BOOLEAN
__PdxPosixPathResolve_A
(
IN ANSI_STRING PathName,
OUT PANSI_STRING ResolvedPathName,
IN CHAR PathDelimiter OPTIONAL
)
{
ANSI_STRING strThisComponent = {0, 0, NULL};
PCHAR pcCurPos;
PCHAR pcStartPos;
BOOLEAN bIsDirectory;
if(PathDelimiter == 0)
PathDelimiter = '/';
/* start from the beginning of the return buffer */
pcCurPos = ResolvedPathName->Buffer;
/* path begins with a delimiter (absolute path) */
if(IS_CHAR_DELIMITER_A(PathName.Buffer[0]))
{
/* put a delimiter in front of the return buffer */
*pcCurPos = PathDelimiter;
/* move to next character */
pcCurPos ++;
}
pcStartPos = pcCurPos;
/* repeat until the end of the path string */
while(__PdxPosixPathGetNextComponent_A(PathName, &strThisComponent, &bIsDirectory))
{
/* ".": skip */
if(IS_COMPONENT_DOT_A(strThisComponent))
continue;
/* "..": go back to the last component */
else if(IS_COMPONENT_DOTDOT_A(strThisComponent))
{
if(pcCurPos == pcStartPos)
continue;
/* skip the last (undefined) character */
pcCurPos --;
/* down to the previous path delimiter */
do{ pcCurPos --; }while(!IS_CHAR_DELIMITER_A(*pcCurPos));
/* include the delimiter */
pcCurPos ++;
}
else
{
/* copy this component into the return string */
strncpy
(
pcCurPos,
strThisComponent.Buffer,
strThisComponent.Length
);
/* move the current position to the end of the string */
pcCurPos = (PCHAR)((PBYTE)pcCurPos + strThisComponent.Length);
/* component had a trailing delimiter */
if(bIsDirectory)
{
/* append a delimiter */
*pcCurPos = PathDelimiter;
/* on to next character */
pcCurPos ++;
}
}
}
/* set the return string's length as the byte offset between the initial buffer
position and the current position */
ResolvedPathName->Length = ((ULONG)pcCurPos - (ULONG)ResolvedPathName->Buffer);
return (TRUE);
}
BOOLEAN
__PdxPosixPathNameToNtPathName
(
IN PWCHAR PosixPath,
OUT PUNICODE_STRING NativePath,
IN PUNICODE_STRING CurDir OPTIONAL,
IN PUNICODE_STRING RootDir OPTIONAL
)
{
UNICODE_STRING wstrPosixPath;
UNICODE_STRING wstrTempString;
/* parameter validation */
if
(
PosixPath == 0 ||
NativePath == 0 ||
NativePath->Buffer == 0 ||
NativePath->MaximumLength == 0 ||
(RootDir != 0 && RootDir->Buffer == 0)
)
{
errno = EINVAL;
return (FALSE);
}
RtlInitUnicodeString(&wstrPosixPath, PosixPath);
/* path is null */
if(0 == wstrPosixPath.Length)
{
errno = EINVAL;
return (FALSE);
}
/* first, copy the root path into the return buffer */
/* if no root dir passed by the caller... */
if(RootDir == 0)
/* return buffer too small */
if(NativePath->MaximumLength < sizeof(WCHAR))
{
errno = ENOBUFS;
return (FALSE);
}
/* set the first character to a backslash, and set length accordingly */
else
{
NativePath->Buffer[0] = L'\\';
NativePath->Length = sizeof(WCHAR);
}
/* ... else copy the root dir into the return buffer */
else
/* return buffer too small */
if(NativePath->MaximumLength < RootDir->Length)
{
errno = ENOBUFS;
return (FALSE);
}
/* copy the root directory into the return buffer, and set length */
else
{
memcpy(NativePath->Buffer, RootDir->Buffer, RootDir->Length);
NativePath->Length = RootDir->Length;
}
/* path is "/" - our work is done */
if(sizeof(WCHAR) == wstrPosixPath.Length && IS_CHAR_DELIMITER_U(wstrPosixPath.Buffer[0]))
return (TRUE);
/* temp string pointing to the tail of the return buffer */
wstrTempString.Length = 0;
wstrTempString.MaximumLength = NativePath->MaximumLength - NativePath->Length;
wstrTempString.Buffer = (PWCHAR)(((PBYTE)(NativePath->Buffer)) + NativePath->Length);
/* path begins with '/': absolute path. Append the resolved path to the return buffer */
if(IS_CHAR_DELIMITER_U(wstrPosixPath.Buffer[0]))
{
/* copy the resolved path in the return buffer */
__PdxPosixPathResolve_U(wstrPosixPath, &wstrTempString, L'\\');
return (TRUE);
}
else
{
UNICODE_STRING wstrAbsolutePath;
if(CurDir == 0)
CurDir = __PdxGetCurDir();
/* initialize the buffer for the absolute path */
wstrAbsolutePath.Length = 0;
wstrAbsolutePath.MaximumLength = 0xFFFF;
wstrAbsolutePath.Buffer = __malloc(0xFFFF);
/* if the current directory is not null... */
if(!(CurDir->Buffer == 0 || CurDir->Length == 0))
{
/* copy it into the absolute path buffer */
memcpy(wstrAbsolutePath.Buffer, CurDir->Buffer, CurDir->Length);
wstrAbsolutePath.Length += CurDir->Length;
}
/* not enough space to append an extra slash */
if((wstrAbsolutePath.MaximumLength - wstrAbsolutePath.Length) < (USHORT)sizeof(WCHAR))
{
__free(wstrAbsolutePath.Buffer);
NativePath->Length = 0;
errno = ENOBUFS;
return (FALSE);
}
/* append an extra slash */
wstrAbsolutePath.Buffer[wstrAbsolutePath.Length / sizeof(WCHAR)] = L'/';
wstrAbsolutePath.Length += sizeof(WCHAR);
/* not enough space to copy the relative path */
if((wstrAbsolutePath.MaximumLength - wstrAbsolutePath.Length) < wstrPosixPath.Length)
{
__free(wstrAbsolutePath.Buffer);
NativePath->Length = 0;
errno = ENOBUFS;
return (FALSE);
}
/* append the relative path to the absolute path */
memcpy(
(PWCHAR)(((PBYTE)wstrAbsolutePath.Buffer) + wstrAbsolutePath.Length),
wstrPosixPath.Buffer,
wstrPosixPath.Length
);
wstrAbsolutePath.Length += wstrPosixPath.Length;
/* resolve the path */
__PdxPosixPathResolve_U(wstrAbsolutePath, &wstrTempString, L'\\');
__free(wstrAbsolutePath.Buffer);
return (TRUE);
}
return (FALSE);
}
/* EOF */

View File

@@ -0,0 +1,45 @@
/* $Id: safeobj.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/misc/safeobj.c
* PURPOSE: safe checking of user-provided objects
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 09/01/2002: Created
*/
#include <psx/safeobj.h>
#include <psx/debug.h>
int __safeobj_validate(void *obj, __magic_t refsignature)
{
if(obj == 0)
return (0);
else
{
/* cast the object to a magic number */
__magic_t mSignature = *((__magic_t *)obj);
ERRIF
(
mSignature != refsignature,
"invalid object at %X: signature is \"%c%c%c%c\", should be \"%c%c%c%c\"",
obj,
MAGIC_DECOMPOSE(refsignature),
MAGIC_DECOMPOSE(mSignature)
);
if(mSignature == refsignature)
/* signatures match: ok */
return (-1);
else
/* signatures mismatch: fail */
return (0);
}
}
/* EOF */

View File

@@ -0,0 +1,25 @@
/* $Id: template.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
How to create a new source file from this template:
- copy the template in the new file (never edit this file directly, unless
that's what you want)
- search for the string "EDITME" in the file, and follow the instructions
- remove this comment block, all blocks containing DELETEME, and all EDITME
instructions
- save your file, and Have Fun! (TM)
*/
/* $ Id $ (EDITME: replace "$ Id $" with "$Id: template.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $")
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: (EDITME: put real path of the file here)
* PURPOSE: (EDITME: put a very syntetic description of the file here)
* PROGRAMMER: <john.doe@mail.com> (EDITME: your name and e-mail go here)
* UPDATE HISTORY:
* (EDITME: put here the creation date): Created
*/
/* EDITME: your code here */
/* EOF */

143
posix/lib/psxdll/psxdll.def Normal file
View File

@@ -0,0 +1,143 @@
; $Id: psxdll.def,v 1.2 2002/02/20 09:17:56 hyperion Exp $
;
; ReactOS POSIX+ Client Library
;
LIBRARY PSXDLL.DLL
EXPORTS
;dirent
opendir
readdir
closedir
;dlfcn
dlopen
dlclose
dlsym
dlerror
;errno
__PdxGetThreadErrNum
;fcntl
open
creat
fcntl
;libgen
basename
;misc
;path
__PdxPosixPathGetNextComponent_A
__PdxPosixPathGetNextComponent_U
__PdxPosixPathResolve_A
__PdxPosixPathResolve_U
__PdxPosixPathNameToNtPathName
;fdtable
__fdtable_init
__fdtable_free
__fdtable_entry_nextavail
__fdtable_entry_add
__fdtable_entry_remove
__fdtable_entry_get
;safeobj
__safeobj_validate
;pthread
pthread_create
pthread_exit
pthread_join
pthread_mutex_destroy
pthread_mutex_init
pthread_mutex_lock
pthread_mutex_trylock
pthread_mutex_unlock
pthread_mutex_getprioceiling
pthread_mutex_setprioceiling
pthread_mutexattr_destroy
pthread_mutexattr_getpshared
pthread_mutexattr_init
pthread_mutexattr_setpshared
pthread_mutexattr_gettype
pthread_mutexattr_settype
pthread_mutexattr_getprioceiling
pthread_mutexattr_getprotocol
pthread_mutexattr_setprioceiling
pthread_mutexattr_setprotocol
;sched
sched_yield
;signal
pthread_kill
raise
;stdio
printf
gets
;stdlib
abort
malloc
realloc
free
calloc
exit
;string
;forward-exports to NTDLL
memchr
memcmp
memcpy
memmove
memset
strcat
strchr
strcmp
strcpy
strcspn
strlen
strncat
strncmp
strncpy
strpbrk
strrchr
strspn
strstr
;implemented internally
strdup
;sys/utsname
uname
;unistd
close
dup
dup2
getcwd
getpid
getppid
;wchar
;forward-exports to NTDLL
wcscat
wcschr
wcscmp
wcscpy
wcscspn
wcslen
wcsncat
wcsncmp
wcsncpy
wcspbrk
wcsrchr
wcsspn
wcsstr
wcstol
wcstombs
wcstoul
;implemented internally
;EOF

143
posix/lib/psxdll/psxdll.edf Normal file
View File

@@ -0,0 +1,143 @@
; $Id: psxdll.edf,v 1.2 2002/02/20 09:17:56 hyperion Exp $
;
; ReactOS POSIX+ Client Library
;
LIBRARY PSXDLL.DLL
EXPORTS
;dirent
opendir=opendir
readdir=readdir
closedir=closedir
;dlfcn
dlopen=dlopen
dlclose=dlclose
dlsym=dlsym
dlerror=dlerror
;errno
__PdxGetThreadErrNum=__PdxGetThreadErrNum
;fcntl
open=open
creat=creat
fcntl=fcntl
;libgen
basename=basename
;misc
;path
__PdxPosixPathGetNextComponent_A=__PdxPosixPathGetNextComponent_A
__PdxPosixPathGetNextComponent_U=__PdxPosixPathGetNextComponent_U
__PdxPosixPathResolve_A=__PdxPosixPathResolve_A
__PdxPosixPathResolve_U=__PdxPosixPathResolve_U
__PdxPosixPathNameToNtPathName=__PdxPosixPathNameToNtPathName
;fdtable
__fdtable_init=__fdtable_init
__fdtable_free=__fdtable_free
__fdtable_entry_nextavail=__fdtable_entry_nextavail
__fdtable_entry_add=__fdtable_entry_add
__fdtable_entry_remove=__fdtable_entry_remove
__fdtable_entry_get=__fdtable_entry_get
;safeobj
__safeobj_validate=__safeobj_validate
;pthread
pthread_create=pthread_create
pthread_exit=pthread_exit
pthread_join=pthread_join
pthread_mutex_destroy=pthread_mutex_destroy
pthread_mutex_init=pthread_mutex_init
pthread_mutex_lock=pthread_mutex_lock
pthread_mutex_trylock=pthread_mutex_trylock
pthread_mutex_unlock=pthread_mutex_unlock
pthread_mutex_getprioceiling=pthread_mutex_getprioceiling
pthread_mutex_setprioceiling=pthread_mutex_setprioceiling
pthread_mutexattr_destroy=pthread_mutexattr_destroy
pthread_mutexattr_getpshared=pthread_mutexattr_getpshared
pthread_mutexattr_init=pthread_mutexattr_init
pthread_mutexattr_setpshared=pthread_mutexattr_setpshared
pthread_mutexattr_gettype=pthread_mutexattr_gettype
pthread_mutexattr_settype=pthread_mutexattr_settype
pthread_mutexattr_getprioceiling=pthread_mutexattr_getprioceiling
pthread_mutexattr_getprotocol=pthread_mutexattr_getprotocol
pthread_mutexattr_setprioceiling=pthread_mutexattr_setprioceiling
pthread_mutexattr_setprotocol=pthread_mutexattr_setprotocol
;sched
sched_yield=sched_yield
;signal
pthread_kill=pthread_kill
raise=raise
;stdio
printf=MSVCRT.printf
gets=MSVCRT.gets
;stdlib
abort=abort
malloc=malloc
realloc=realloc
free=free
calloc=calloc
exit=exit
;string
;forward-exports to NTDLL
memchr=NTDLL.memchr
memcmp=NTDLL.memcmp
memcpy=NTDLL.memcpy
memmove=NTDLL.memmove
memset=NTDLL.memset
strcat=NTDLL.strcat
strchr=NTDLL.strchr
strcmp=NTDLL.strcmp
strcpy=NTDLL.strcpy
strcspn=NTDLL.strcspn
strlen=NTDLL.strlen
strncat=NTDLL.strncat
strncmp=NTDLL.strncmp
strncpy=NTDLL.strncpy
strpbrk=NTDLL.strpbrk
strrchr=NTDLL.strrchr
strspn=NTDLL.strspn
strstr=NTDLL.strstr
;implemented internally
strdup
;sys/utsname
uname=uname
;unistd
close=close
dup=dup
dup2=dup2
getcwd=getcwd
getpid=getpid
getppid=getppid
;wchar
;forward-exports to NTDLL
wcscat=NTDLL.wcscat
wcschr=NTDLL.wcschr
wcscmp=NTDLL.wcscmp
wcscpy=NTDLL.wcscpy
wcscspn=NTDLL.wcscspn
wcslen=NTDLL.wcslen
wcsncat=NTDLL.wcsncat
wcsncmp=NTDLL.wcsncmp
wcsncpy=NTDLL.wcsncpy
wcspbrk=NTDLL.wcspbrk
wcsrchr=NTDLL.wcsrchr
wcsspn=NTDLL.wcsspn
wcsstr=NTDLL.wcsstr
wcstol=NTDLL.wcstol
wcstombs=NTDLL.wcstombs
wcstoul=NTDLL.wcstoul
;implemented internally
;EOF

View File

@@ -0,0 +1,39 @@
/* $Id: psxdll.rc,v 1.2 2002/02/20 09:17:56 hyperion Exp $
*/
#include <defines.h>
#include <reactos/resource.h>
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
VS_VERSION_INFO VERSIONINFO
FILEVERSION RES_UINT_FV_MAJOR,RES_UINT_FV_MINOR,RES_UINT_FV_REVISION,RES_UINT_FV_BUILD
PRODUCTVERSION RES_UINT_PV_MAJOR,RES_UINT_PV_MINOR,RES_UINT_PV_REVISION,RES_UINT_PV_BUILD
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x2L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", RES_STR_COMPANY_NAME
VALUE "FileDescription", "POSIX+ Client DLL\0"
VALUE "FileVersion", RES_STR_FILE_VERSION
VALUE "InternalName", "psxdll\0"
VALUE "LegalCopyright", RES_STR_LEGAL_COPYRIGHT
VALUE "OriginalFilename", "psxdll.dll\0"
VALUE "ProductName", RES_STR_PRODUCT_NAME
VALUE "ProductVersion", RES_STR_PRODUCT_VERSION
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END

View File

@@ -0,0 +1,198 @@
/* $Id: create.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/pthread/create.c
* PURPOSE: Thread creation
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 19/12/2001: Created
*/
#include <ddk/ntddk.h>
#include <string.h>
#include <sys/types.h>
#include <pthread.h>
#include <psx/debug.h>
#include <psx/errno.h>
#include <napi/i386/segment.h>
/* thread creation code adapted from kernel32's CreateRemoteThread() function */
static void __threadentry (void *(*start_routine)(void*), void *arg)
{
INFO("hello world! thread successfully created");
TODO("initialize thread data");
TODO("notify DLLs");
TODO("notify psxss");
INFO("about to call start routine at %#x with argument %#x", start_routine, arg);
pthread_exit(start_routine(arg));
}
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine)(void*), void *arg)
{
HANDLE hThread;
OBJECT_ATTRIBUTES oaThreadAttrs;
CLIENT_ID ciId;
CONTEXT cxThreadContext;
INITIAL_TEB itInitialTeb;
BOOLEAN fSuspended;
ULONG nOldPageProtection;
NTSTATUS nErrCode;
/* initialize generic object attributes */
oaThreadAttrs.Length = sizeof(OBJECT_ATTRIBUTES);
oaThreadAttrs.RootDirectory = NULL;
oaThreadAttrs.ObjectName = NULL;
oaThreadAttrs.Attributes = 0;
oaThreadAttrs.SecurityDescriptor = NULL;
oaThreadAttrs.SecurityQualityOfService = NULL;
/* initialize thread attributes */
fSuspended = FALSE; /* FIXME? really needed? can we hardcode this to FALSE? */
/* stack attributes */
FIXME("stack size defaulted to 0x100000 - thread attributes ignored");
/* stack reserve size */
itInitialTeb.StackReserve = 0x100000;
/* stack commit size */
itInitialTeb.StackCommit = itInitialTeb.StackReserve - PAGESIZE;
/* guard page */
itInitialTeb.StackCommit += PAGESIZE;
/* reserve stack */
itInitialTeb.StackAllocate = NULL;
nErrCode = NtAllocateVirtualMemory
(
NtCurrentProcess(),
&itInitialTeb.StackAllocate,
0,
&itInitialTeb.StackReserve,
MEM_RESERVE,
PAGE_READWRITE
);
if(!NT_SUCCESS(nErrCode))
{
return (__status_to_errno(nErrCode)); /* FIXME? TODO? pthread specific error codes? */
}
itInitialTeb.StackBase = (PVOID)((ULONG)itInitialTeb.StackAllocate + itInitialTeb.StackReserve);
itInitialTeb.StackLimit = (PVOID)((ULONG)itInitialTeb.StackBase - itInitialTeb.StackCommit);
/* commit stack */
nErrCode = NtAllocateVirtualMemory
(
NtCurrentProcess(),
&itInitialTeb.StackLimit,
0,
&itInitialTeb.StackCommit,
MEM_COMMIT,
PAGE_READWRITE
);
if(!NT_SUCCESS(nErrCode))
{
NtFreeVirtualMemory
(
NtCurrentProcess(),
itInitialTeb.StackAllocate,
&itInitialTeb.StackReserve,
MEM_RELEASE
);
return (__status_to_errno(nErrCode));
}
/* protect guard page */
nErrCode = NtProtectVirtualMemory
(
NtCurrentProcess(),
itInitialTeb.StackLimit,
PAGESIZE,
PAGE_GUARD | PAGE_READWRITE,
&nOldPageProtection
);
if(!NT_SUCCESS(nErrCode))
{
NtFreeVirtualMemory
(
NtCurrentProcess(),
itInitialTeb.StackAllocate,
&itInitialTeb.StackReserve,
MEM_RELEASE
);
return (__status_to_errno(nErrCode));
}
/* initialize thread registers */
//#ifdef __i386__
memset(&cxThreadContext, 0, sizeof(CONTEXT));
cxThreadContext.Eip = (LONG)__threadentry;
cxThreadContext.SegGs = USER_DS;
cxThreadContext.SegFs = TEB_SELECTOR;
cxThreadContext.SegEs = USER_DS;
cxThreadContext.SegDs = USER_DS;
cxThreadContext.SegCs = USER_CS;
cxThreadContext.SegSs = USER_DS;
cxThreadContext.Esp = (ULONG)itInitialTeb.StackBase - 12;
cxThreadContext.EFlags = (1<<1) + (1<<9);
/* initialize call stack */
*((PULONG)((ULONG)itInitialTeb.StackBase - 4)) = (ULONG)arg; /* thread argument */
*((PULONG)((ULONG)itInitialTeb.StackBase - 8)) = (ULONG)start_routine; /* thread start routine */
*((PULONG)((ULONG)itInitialTeb.StackBase - 12)) = 0xDEADBEEF; /* "shouldn't see me" */
//#else
//#error Unsupported architecture
//#endif
INFO("about to create new thread - start routine at %#x, argument %#x", start_routine, arg);
/* create thread */
nErrCode = NtCreateThread
(
&hThread,
THREAD_ALL_ACCESS,
&oaThreadAttrs,
NtCurrentProcess(),
&ciId,
&cxThreadContext,
&itInitialTeb,
fSuspended
);
if(!NT_SUCCESS(nErrCode))
{
NtFreeVirtualMemory
(
NtCurrentProcess(),
itInitialTeb.StackAllocate,
&itInitialTeb.StackReserve,
MEM_RELEASE
);
return (__status_to_errno(nErrCode));
}
/* FIXME? should we return the thread handle or the thread id? */
if(thread != 0)
*thread = (pthread_t)&ciId.UniqueThread; /* for the moment, we return the id */
return (0);
}
/* EOF */

View File

@@ -0,0 +1,78 @@
/* $Id: exit.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/pthread/exit.c
* PURPOSE: Thread termination
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 19/12/2001: Created
*/
#include <ddk/ntddk.h>
#include <ntdll/ldr.h>
#include <errno.h>
#include <stdlib.h>
#include <pthread.h>
#include <psx/debug.h>
void pthread_exit(void *value_ptr)
{
NTSTATUS nErrCode;
BOOLEAN fLastThread;
/* terminate process if this is the last thread of the current process */
nErrCode = NtQueryInformationThread
(
NtCurrentThread(),
ThreadAmILastThread,
&fLastThread,
sizeof(BOOLEAN),
NULL
);
if(NT_SUCCESS(nErrCode))
{
if(fLastThread)
{
INFO("this thread is the last in the current process - about to call exit(0)");
exit(0);
}
}
else
{
WARN
(
"NtQueryInformationThread(ThreadAmILastThread) failed with status %#x. \
Can't determine if the current thread is the last in the process. The process \
could hang",
nErrCode
);
}
TODO("Notify psxss of thread termination");
LdrShutdownThread(); /* detach DLLs */
/* kill this thread */
WARNIF(
sizeof(ULONG) < sizeof(typeof(value_ptr)),
"\
the value returned from the current thread will be truncated (pointers shorter \
than long integers on this architecture?) - expect trouble"
);
INFO("bye bye. Current thread about to die");
NtTerminateThread(NtCurrentThread(), (ULONG)value_ptr);
/* "The pthread_exit() function cannot return to its caller." */
NtDelayExecution(FALSE, NULL);
}
/* EOF */

View File

@@ -0,0 +1,98 @@
/* $Id: join.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/pthread/join.c
* PURPOSE: Wait for thread termination
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 19/12/2001: Created
*/
#include <ddk/ntddk.h>
#include <ntdll/ldr.h>
#include <errno.h>
#include <sys/types.h>
#include <pthread.h>
#include <psx/debug.h>
#include <psx/errno.h>
int pthread_join(pthread_t thread, void **value_ptr)
{
HANDLE hThread;
NTSTATUS nErrCode;
OBJECT_ATTRIBUTES oaThreadAttrs;
CLIENT_ID ciId;
THREAD_BASIC_INFORMATION tbiThreadInfo;
/* "[EDEADLK] A deadlock was detected or the value of thread specifies
the calling thread" */
if(thread == pthread_self())
return (EDEADLK);
/* initialize id */
ciId.UniqueProcess = (HANDLE)-1;
ciId.UniqueThread = (HANDLE)thread;
/* initialize object attributes */
oaThreadAttrs.Length = sizeof(OBJECT_ATTRIBUTES);
oaThreadAttrs.RootDirectory = NULL;
oaThreadAttrs.ObjectName = NULL;
oaThreadAttrs.Attributes = 0;
oaThreadAttrs.SecurityDescriptor = NULL;
oaThreadAttrs.SecurityQualityOfService = NULL;
/* open the thread */
nErrCode = NtOpenThread
(
&hThread,
SYNCHRONIZE | THREAD_QUERY_INFORMATION,
&oaThreadAttrs,
&ciId
);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
return (__status_to_errno(nErrCode));
}
/* wait for thread termination */
nErrCode = NtWaitForSingleObject
(
hThread,
FALSE,
NULL
);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
NtClose(hThread);
return (__status_to_errno(nErrCode));
}
/* get thread basic information (includes return code) */
nErrCode = NtQueryInformationThread
(
hThread,
ThreadBasicInformation,
&tbiThreadInfo,
sizeof(THREAD_BASIC_INFORMATION),
NULL
);
NtClose(hThread);
if(!value_ptr)
return (EFAULT);
*value_ptr = (void *)tbiThreadInfo.ExitStatus;
return (0);
}
/* EOF */

View File

@@ -0,0 +1,22 @@
/* $Id: kill.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/pthread/kill.c
* PURPOSE: Send a signal to a thread
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 15/02/2002: Created
*/
#include <signal.h>
#include <errno.h>
int pthread_kill(pthread_t thread, int sig)
{
return (ENOSYS);
}
/* EOF */

View File

@@ -0,0 +1,465 @@
/* $Id: mutex.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/pthread/mutex.c
* PURPOSE: Mutex functions
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 19/12/2001: Created
*/
#include <ntos.h>
#include <ddk/ntddk.h>
#include <sys/types.h>
#include <pthread.h>
#include <stdlib.h>
#include <string.h>
#include <psx/debug.h>
#include <psx/pthread.h>
#include <psx/errno.h>
#include <psx/safeobj.h>
int pthread_mutex_init(pthread_mutex_t *mutex,
const pthread_mutexattr_t *attr)
{
struct __mutex *pmMutex;
struct __mutexattr *pmaMutexAttrs;
BOOL bShared;
OBJECT_ATTRIBUTES oaMutexAttrs;
NTSTATUS nErrCode;
/* invalid return buffer */
if(mutex == NULL)
return (EINVAL);
/* object still open */
if(__safeobj_validate(*mutex, __PTHREAD_MUTEX_MAGIC))
return (EBUSY);
if(attr == NULL)
{
/* use default attributes */
/* create new mutex object */
pmMutex = (struct __mutex *)malloc(sizeof(struct __mutex));
/* malloc() failure */
if(!pmMutex)
return (ENOMEM);
/* set the attributes */
bShared = FALSE;
pmMutex->type = PTHREAD_MUTEX_RECURSIVE;
}
else if(__safeobj_validate(*attr, __PTHREAD_MUTEX_ATTR_MAGIC))
{
/* use provided attributes */
/* create new mutex object */
pmMutex = (struct __mutex *)malloc(sizeof(struct __mutex));
/* malloc() failure */
if(!pmMutex)
return (ENOMEM);
/* get the attributes object */
pmaMutexAttrs = (struct __mutexattr *) *attr;
/* set the attributes */
bShared = (pmaMutexAttrs->pshared != PTHREAD_PROCESS_PRIVATE);
pmMutex->type = pmaMutexAttrs->type;
}
else
return (EINVAL);
/* necessary for the mutex to be considered valid later */
pmMutex->signature = __PTHREAD_MUTEX_MAGIC;
/* creation of the native mutex object */
pmMutex->handle = 0;
/* initialize generic object attributes */
oaMutexAttrs.Length = sizeof(OBJECT_ATTRIBUTES);
oaMutexAttrs.RootDirectory = NULL;
oaMutexAttrs.ObjectName = NULL;
oaMutexAttrs.Attributes = 0;
oaMutexAttrs.SecurityDescriptor = NULL;
oaMutexAttrs.SecurityQualityOfService = NULL;
/* process-exclusive mutex */
if(bShared)
oaMutexAttrs.Attributes |= OBJ_EXCLUSIVE;
/* try to create the object */
nErrCode = NtCreateMutant
(
&pmMutex->handle,
MUTANT_ALL_ACCESS,
&oaMutexAttrs,
FALSE
);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
/* free the internal mutex object */
free(pmMutex);
/* return errno */
return (__status_to_errno(nErrCode));
}
/* return the pointer to the mutex */
*mutex = (pthread_mutex_t)pmMutex;
/* success */
return (0);
}
int pthread_mutex_destroy(pthread_mutex_t *mutex)
{
struct __mutex *pmMutex;
NTSTATUS nErrCode;
MUTANT_BASIC_INFORMATION mbiMutexInfo;
/* invalid pointer or pointer to invalid object */
if(mutex == NULL || !__safeobj_validate(*mutex, __PTHREAD_MUTEX_MAGIC))
{
return (EINVAL);
}
pmMutex = (struct __mutex *)*mutex;
/* query the mutex's status */
nErrCode = NtQueryMutant
(
pmMutex->handle,
MutantBasicInformation,
&mbiMutexInfo,
sizeof(MUTANT_BASIC_INFORMATION),
NULL
);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
return (__status_to_errno(nErrCode));
}
/* the thread is owned - cannot destroy it */
if(mbiMutexInfo.Count <= 0)
{
return (EBUSY);
}
/* try to close the handle */
nErrCode = NtClose(pmMutex->handle);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
return (__status_to_errno(nErrCode));
}
/* free the object, nil the pointer */
free(*mutex);
*mutex = NULL;
/* success */
return (0);
}
int pthread_mutex_lock(pthread_mutex_t *mutex)
{
struct __mutex * pmMutex;
NTSTATUS nErrCode;
/* invalid pointer or pointer to invalid object */
if(mutex == NULL || !__safeobj_validate(*mutex, __PTHREAD_MUTEX_MAGIC))
return (EINVAL);
pmMutex = (struct __mutex *)*mutex;
/* decide the behavior from the mutex type */
switch(pmMutex->type)
{
case PTHREAD_MUTEX_NORMAL:
{
/* unconditionally try to lock the mutex */
/* FIXME? should we "artificially" hang the thread if it's the mutex owner, since
NT mutexes always behave recursively? */
#if 0
if(0 /* mutex owner */ == pthread_self() */)
NtDelayExecution(FALSE, NULL);
#endif
nErrCode = NtWaitForSingleObject(pmMutex->handle, FALSE, NULL);
break;
}
case PTHREAD_MUTEX_ERRORCHECK:
{
/* prevent a thread from recursively locking the same mutex */
if(0 /* mutex owner */ == pthread_self()) /* FIXME: implement the correct logic */
return (EDEADLK);
else
nErrCode = NtWaitForSingleObject(pmMutex->handle, FALSE, NULL);
break;
}
case PTHREAD_MUTEX_RECURSIVE:
{
/* allow recursive locking */
/* ASSERT: this is the default behavior for NT */
nErrCode = NtWaitForSingleObject(pmMutex->handle, FALSE, NULL);
break;
}
default:
/* we should never reach this point */
INFO("you should never read this");
}
if(nErrCode == STATUS_ABANDONED)
{
FIXME("mutex abandoned, not sure on what to do: should we try to lock the mutex again?");
}
else if(!NT_SUCCESS(nErrCode))
{
return (__status_to_errno(nErrCode));
}
/* success */
return (0);
}
int pthread_mutex_trylock(pthread_mutex_t *mutex)
{
struct __mutex * pmMutex;
NTSTATUS nErrCode;
MUTANT_BASIC_INFORMATION mbiMutexInfo;
/* invalid pointer or pointer to invalid object */
if(mutex == NULL || !__safeobj_validate(*mutex, __PTHREAD_MUTEX_MAGIC))
return (EINVAL);
pmMutex = (struct __mutex *)*mutex;
/* query the mutex's status */
nErrCode = NtQueryMutant
(
pmMutex->handle,
MutantBasicInformation,
&mbiMutexInfo,
sizeof(MUTANT_BASIC_INFORMATION),
NULL
);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
return (__status_to_errno(nErrCode));
}
/* mutex already locked */
if(mbiMutexInfo.Count <= 0)
return (EBUSY);
/* mutex not locked - mutex type attribute doesn't matter */
nErrCode = NtWaitForSingleObject(pmMutex->handle, FALSE, NULL);
if(!NT_SUCCESS(nErrCode))
{
return (__status_to_errno(nErrCode));
}
/* success */
return (0);
}
int pthread_mutex_unlock(pthread_mutex_t *mutex)
{
struct __mutex * pmMutex;
NTSTATUS nErrCode;
/* invalid pointer or pointer to invalid object */
if(mutex == NULL || !__safeobj_validate(*mutex, __PTHREAD_MUTEX_MAGIC))
return (EINVAL);
pmMutex = (struct __mutex *)*mutex;
/* try to release the mutex */
nErrCode = NtReleaseMutant(pmMutex->handle, NULL);
/* failure */
if(!NT_SUCCESS(nErrCode))
{
return (__status_to_errno(nErrCode));
}
/* success */
return (0);
}
/* mutex attributes routines */
int pthread_mutexattr_init(pthread_mutexattr_t *attr)
{
struct __mutexattr * pmaMutexAttrs;
/* invalid return pointer */
if(!attr)
return (EINVAL);
/* allocate internal structure for mutex attributes */
pmaMutexAttrs = (struct __mutexattr *)malloc(sizeof(struct __mutexattr));
/* failure */
if(pmaMutexAttrs == 0)
return (ENOMEM);
/* attribute defaults */
pmaMutexAttrs->pshared = PTHREAD_PROCESS_PRIVATE;
pmaMutexAttrs->type = PTHREAD_MUTEX_DEFAULT;
/* return the pointer to the attributes object */
*attr = (pthread_mutexattr_t)pmaMutexAttrs;
/* success */
return (0);
}
int pthread_mutexattr_destroy(pthread_mutexattr_t *attr)
{
/* invalid pointer or pointer to invalid object */
if(attr == NULL || !__safeobj_validate(*attr, __PTHREAD_MUTEX_ATTR_MAGIC))
return (EINVAL);
/* deallocate internal structure */
free(*attr);
/* success */
return (0);
}
#define PTHREAD_MUTEXATTR_GET(PATTR,PVAR,FIELD) \
if( \
(PATTR) == NULL || \
(PVAR) == NULL || \
!__safeobj_validate(*(PATTR), __PTHREAD_MUTEX_ATTR_MAGIC) \
) \
return (EINVAL); \
else \
{ \
(*(PVAR)) = ((struct __mutexattr *)*(PATTR))->FIELD; \
return (0); \
}
int pthread_mutexattr_getpshared(const pthread_mutexattr_t *attr,
int *pshared)
{
PTHREAD_MUTEXATTR_GET(attr, pshared, pshared)
}
int pthread_mutexattr_gettype(const pthread_mutexattr_t *attr, int *type)
{
PTHREAD_MUTEXATTR_GET(attr, type, type)
}
int pthread_mutexattr_setpshared(pthread_mutexattr_t *attr,
int pshared)
{
/* invalid pointer or pointer to invalid object */
if(attr == NULL || !__safeobj_validate(*attr, __PTHREAD_MUTEX_ATTR_MAGIC))
return (EINVAL);
/* validate value */
switch(pshared)
{
case PTHREAD_PROCESS_SHARED: break;
case PTHREAD_PROCESS_PRIVATE: break;
default: return (EINVAL);
}
((struct __mutexattr *)*attr)->pshared = pshared;
return (0);
}
int pthread_mutexattr_settype(pthread_mutexattr_t *attr, int type)
{
/* invalid pointer or pointer to invalid object */
if(attr == NULL || !__safeobj_validate(*attr, __PTHREAD_MUTEX_ATTR_MAGIC))
return (EINVAL);
/* validate value */
switch(type)
{
case PTHREAD_MUTEX_NORMAL: break;
case PTHREAD_MUTEX_ERRORCHECK: break;
case PTHREAD_MUTEX_RECURSIVE: break;
default: return (EINVAL);
}
((struct __mutexattr *)*attr)->type = type;
return (0);
}
/* STUBS */
int pthread_mutex_setprioceiling(pthread_mutex_t *mutex,
int prioceiling, int *old_ceiling)
{
TODO("realtime threads not currently implemented");
return (ENOSYS);
}
int pthread_mutex_getprioceiling(const pthread_mutex_t *mutex,
int *prioceiling)
{
TODO("realtime threads not currently implemented");
return (ENOSYS);
}
int pthread_mutexattr_getprotocol(const pthread_mutexattr_t *attr,
int *protocol)
{
TODO("realtime threads not currently implemented");
return (ENOSYS);
}
int pthread_mutexattr_setprotocol(pthread_mutexattr_t *attr,
int protocol)
{
TODO("realtime threads not currently implemented");
return (ENOSYS);
}
int pthread_mutexattr_setprioceiling(pthread_mutexattr_t *attr,
int prioceiling)
{
TODO("realtime threads not currently implemented");
return (ENOSYS);
}
int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *attr,
int *prioceiling)
{
TODO("realtime threads not currently implemented");
return (ENOSYS);
}
/* EOF */

View File

@@ -0,0 +1,23 @@
/* $Id: self.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/pthread/self.c
* PURPOSE: get calling thread's ID
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 27/12/2001: Created
*/
#include <ddk/ntddk.h>
#include <sys/types.h>
#include <pthread.h>
pthread_t pthread_self(void)
{
return ((pthread_t)(NtCurrentTeb()->Cid).UniqueThread);
}
/* EOF */

View File

@@ -0,0 +1,33 @@
/* $Id: yield.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/sched/yield.c
* PURPOSE: Yield processor
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 15/02/2002: Created
*/
#include <ddk/ntddk.h>
#include <sched.h>
#include <psx/errno.h>
int sched_yield(void)
{
NTSTATUS nErrCode;
nErrCode = NtYieldExecution();
if(!NT_SUCCESS(nErrCode))
{
errno = __status_to_errno(nErrCode);
return (-1);
}
return (0);
}
/* EOF */

View File

@@ -0,0 +1,25 @@
/* $Id: raise.c,v 1.2 2002/02/20 09:17:57 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/signal/raise.c
* PURPOSE: Send a signal to the executing process
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 15/02/2002: Created
*/
#include <signal.h>
#include <pthread.h>
#include <errno.h>
int raise(int sig)
{
/* returns zero if pthread_kill() returned zero, non-zero otherwise */
/* pthread_kill() returns the error number and doesn't set errno */
return (((errno = pthread_kill(pthread_self(), sig))) == 0 ? (0) : (1));
}
/* EOF */

View File

@@ -0,0 +1,22 @@
/* $Id: abort.c,v 1.2 2002/02/20 09:17:58 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/stdlib/abort.c
* PURPOSE: Generate an abnormal process abort
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 15/02/2002: Created
*/
#include <stdlib.h>
#include <signal.h>
void abort(void)
{
raise(SIGABRT);
}
/* EOF */

View File

@@ -0,0 +1,51 @@
/* $Id: exit.c,v 1.2 2002/02/20 09:17:58 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/stdlib/exit.c
* PURPOSE: Terminate a process
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 27/12/2001: Created
*/
#include <ddk/ntddk.h>
#include <stdlib.h>
#include <psx/debug.h>
void exit(int status)
{
TODO("call all functions registered with atexit()");
TODO("flush all output streams, close all open streams");
TODO("remove all files created by tmpfile()");
TODO("close all of the file descriptors, directory streams,<2C>conversion \
descriptors and message catalogue descriptors");
TODO("send SIGCHILD to the parent process");
TODO("set parent pid of children to pid of psxss");
TODO("detach each attached shared-memory segment");
TODO("for each semaphore for which the calling process has set a semadj \
value(), add the value to the semval of the semaphore.");
TODO("if the process is a controlling process, send SIGHUP to each process \
in the foreground process group...");
TODO("... and disassociate the terminal from the session");
TODO("if the exit causes a process group to become orphaned, and if any \
member of the newly-orphaned process group is stopped, send SIGHUP and \
SIGCONT to each process in the newly-orphaned process group");
TODO("all open named semaphores in the calling process are closed");
TODO("remove any memory locks");
TODO("destroy memory mappings");
TODO("close all open message queue descriptors");
#if 0
ExitProcess(status);
#endif
NtTerminateProcess(NtCurrentProcess(), status);
}
/* EOF */

View File

@@ -0,0 +1,55 @@
/* $Id: malloc.c,v 1.2 2002/02/20 09:17:58 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/stdlib/malloc.c
* PURPOSE: Memory allocator
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 27/12/2001: Created
*/
#include <errno.h>
#include <psx/stdlib.h>
void * malloc(size_t size)
{
void * pTemp = __malloc(size);
if(!pTemp)
errno = ENOMEM;
return (pTemp);
}
void free(void * ptr)
{
__free(ptr);
}
void * calloc(size_t nelem, size_t elsize)
{
return (__malloc(nelem * elsize));
}
void * realloc(void * ptr, size_t size)
{
void * pTemp;
if(size == 0)
__free(ptr);
if(ptr == 0)
return __malloc(size);
pTemp = __realloc(ptr, size);
if(pTemp == 0)
errno = ENOMEM;
return (pTemp);
}
/* EOF */

View File

@@ -0,0 +1,23 @@
/* $Id: strcoll.c,v 1.2 2002/02/20 09:17:58 hyperion Exp $
*/
/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS POSIX+ Subsystem
* FILE: subsys/psx/lib/psxdll/string/strcoll.c
* PURPOSE: string comparison using collating information
* PROGRAMMER: KJK::Hyperion <noog@libero.it>
* UPDATE HISTORY:
* 20/01/2002: Created
*/
#include <string.h>
#include <psx/debug.h>
int strcoll(const char *s1, const char *s2)
{
TODO("locale semantics currently unimplemented");
return (strcmp(s1, s2));
}
/* EOF */

Some files were not shown because too many files have changed in this diff Show More