diff options
Diffstat (limited to 'unixio.c')
-rw-r--r-- | unixio.c | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/unixio.c b/unixio.c new file mode 100644 index 0000000..ec235b9 --- /dev/null +++ b/unixio.c @@ -0,0 +1,170 @@ +/*********************************************************************/ +/* */ +/* This Program Written By Paul Edwards. */ +/* Released to the public domain. */ +/* */ +/*********************************************************************/ +/*********************************************************************/ +/* */ +/* unixio - Unix I/O functions written in terms of standard C */ +/* functions. */ +/* */ +/*********************************************************************/ + +#include <stdio.h> + +#ifdef fileno +#undef fileno +#endif + +#include "unixio.h" + +static FILE *files[FOPEN_MAX]; +/*char *environ[] = { NULL };*/ + +int open(const char *fnm, int mode, ...) +{ + int x; + char *modestr; + + for (x = 3; x < FOPEN_MAX; x++) + { + if (files[x] == NULL) + { + break; + } + } + if (x == FOPEN_MAX) + { + return (-1); + } + if (mode == O_RDONLY) + { + modestr = "r"; + } + else if (mode == O_WRONLY) + { + modestr = "w"; + } + else if (mode == O_RDWR) + { + modestr = "r+"; + } + files[x] = fopen(fnm, modestr); + if (files[x] == NULL) + { + return (-1); + } + return (x); +} + +int read(int fno, void *buf, size_t bytes) +{ + size_t rb; + + if (fno < 3) + { + rb = fread(buf, 1, bytes, stdin); + } + else + { + rb = fread(buf, 1, bytes, files[fno]); + } + return ((int)rb); +} + +int write(int fno, const void *buf, size_t bytes) +{ + size_t wb = 0; + + if (fno == 1) + { + wb = fwrite(buf, 1, bytes, stdout); + } + else if (fno == 2) + { + wb = fwrite(buf, 1, bytes, stderr); + } + else if (fno > 2) + { + wb = fwrite(buf, 1, bytes, files[fno]); + } + return ((int)wb); +} + +int close(int fno) +{ + if (fno >= 3) + { + fclose(files[fno]); + files[fno] = NULL; + } + return (0); +} + +char *getcwd(char *buf, int len) +{ + if (len != 0) + { + *buf = '\0'; + } + return (buf); +} + +void unlink(char *f) +{ + remove(f); + return; +} + +int stat(char *f, struct stat *buf) +{ + memset(buf, '\0', sizeof *buf); + return (0); +} + +int fileno(FILE *fp) +{ + return (0); +} + +int access(char *f, int n) +{ + return (1); +} + +int fstat(int fh, struct stat *buf) +{ + memset(buf, '\0', sizeof *buf); + return (0); +} + +int pwait(int a, int *b, int c) +{ + return (0); +} + +int putenv(char *x) +{ + return (0); +} + +char *mktemp(char *s) +{ + return (tmpnam(s)); +} + +int chdir(char *path) +{ + return (0); +} + +int rmdir(char *path) +{ + return (0); +} + +int mkdir(char *path, int permissions) +{ + return (0); +} |