New installation mechanism, updated to minix 1.5
authorceriel <none@none>
Tue, 3 Sep 1991 15:11:18 +0000 (15:11 +0000)
committerceriel <none@none>
Tue, 3 Sep 1991 15:11:18 +0000 (15:11 +0000)
122 files changed:
mach/minix/libsys/_exit.c
mach/minixST/libsys/.distr
mach/minixST/libsys/LIST
mach/minixST/libsys/_access.c [new file with mode: 0644]
mach/minixST/libsys/_alarm.c [new file with mode: 0644]
mach/minixST/libsys/_brk.c [new file with mode: 0644]
mach/minixST/libsys/_chdir.c [new file with mode: 0644]
mach/minixST/libsys/_chmod.c [new file with mode: 0644]
mach/minixST/libsys/_chown.c [new file with mode: 0644]
mach/minixST/libsys/_chroot.c [new file with mode: 0644]
mach/minixST/libsys/_close.c [new file with mode: 0644]
mach/minixST/libsys/_creat.c [new file with mode: 0644]
mach/minixST/libsys/_dup.c [new file with mode: 0644]
mach/minixST/libsys/_dup2.c [new file with mode: 0644]
mach/minixST/libsys/_exec.c [new file with mode: 0644]
mach/minixST/libsys/_execn.c [new file with mode: 0644]
mach/minixST/libsys/_execnl.c [new file with mode: 0644]
mach/minixST/libsys/_exit.c
mach/minixST/libsys/_fcntl.c [new file with mode: 0644]
mach/minixST/libsys/_fork.c [new file with mode: 0644]
mach/minixST/libsys/_fstat.c [new file with mode: 0644]
mach/minixST/libsys/_getcwd.c [new file with mode: 0644]
mach/minixST/libsys/_getegid.c [new file with mode: 0644]
mach/minixST/libsys/_geteuid.c [new file with mode: 0644]
mach/minixST/libsys/_getgid.c [new file with mode: 0644]
mach/minixST/libsys/_getpid.c [new file with mode: 0644]
mach/minixST/libsys/_getppid.c [new file with mode: 0644]
mach/minixST/libsys/_getuid.c [new file with mode: 0644]
mach/minixST/libsys/_gtty.c [new file with mode: 0644]
mach/minixST/libsys/_ioctl.c [new file with mode: 0644]
mach/minixST/libsys/_kill.c [new file with mode: 0644]
mach/minixST/libsys/_link.c [new file with mode: 0644]
mach/minixST/libsys/_lseek.c [new file with mode: 0644]
mach/minixST/libsys/_mkdir.c [new file with mode: 0644]
mach/minixST/libsys/_mkfifo.c [new file with mode: 0644]
mach/minixST/libsys/_mknod.c [new file with mode: 0644]
mach/minixST/libsys/_mknod4.c [new file with mode: 0644]
mach/minixST/libsys/_mktemp.c [new file with mode: 0644]
mach/minixST/libsys/_mount.c [new file with mode: 0644]
mach/minixST/libsys/_open.c [new file with mode: 0644]
mach/minixST/libsys/_pause.c [new file with mode: 0644]
mach/minixST/libsys/_pipe.c [new file with mode: 0644]
mach/minixST/libsys/_ptrace.c [new file with mode: 0644]
mach/minixST/libsys/_read.c [new file with mode: 0644]
mach/minixST/libsys/_rename.c [new file with mode: 0644]
mach/minixST/libsys/_rmdir.c [new file with mode: 0644]
mach/minixST/libsys/_setgid.c [new file with mode: 0644]
mach/minixST/libsys/_setuid.c [new file with mode: 0644]
mach/minixST/libsys/_signal.c [new file with mode: 0644]
mach/minixST/libsys/_stat.c [new file with mode: 0644]
mach/minixST/libsys/_stime.c [new file with mode: 0644]
mach/minixST/libsys/_stty.c [new file with mode: 0644]
mach/minixST/libsys/_sync.c [new file with mode: 0644]
mach/minixST/libsys/_time.c [new file with mode: 0644]
mach/minixST/libsys/_times.c [new file with mode: 0644]
mach/minixST/libsys/_umask.c [new file with mode: 0644]
mach/minixST/libsys/_umount.c [new file with mode: 0644]
mach/minixST/libsys/_unlink.c [new file with mode: 0644]
mach/minixST/libsys/_utime.c [new file with mode: 0644]
mach/minixST/libsys/_wait.c [new file with mode: 0644]
mach/minixST/libsys/_write.c [new file with mode: 0644]
mach/minixST/libsys/access.s [new file with mode: 0644]
mach/minixST/libsys/alarm.s [new file with mode: 0644]
mach/minixST/libsys/brk.s [new file with mode: 0644]
mach/minixST/libsys/chdir.s [new file with mode: 0644]
mach/minixST/libsys/chmod.s [new file with mode: 0644]
mach/minixST/libsys/chown.s [new file with mode: 0644]
mach/minixST/libsys/chroot.s [new file with mode: 0644]
mach/minixST/libsys/close.s [new file with mode: 0644]
mach/minixST/libsys/creat.s [new file with mode: 0644]
mach/minixST/libsys/dup.s [new file with mode: 0644]
mach/minixST/libsys/dup2.s [new file with mode: 0644]
mach/minixST/libsys/errno.c [new file with mode: 0644]
mach/minixST/libsys/exec.s [new file with mode: 0644]
mach/minixST/libsys/execn.s [new file with mode: 0644]
mach/minixST/libsys/execnl.s [new file with mode: 0644]
mach/minixST/libsys/fcntl.s [new file with mode: 0644]
mach/minixST/libsys/fork.s [new file with mode: 0644]
mach/minixST/libsys/fpathconf.c [new file with mode: 0644]
mach/minixST/libsys/fstat.s [new file with mode: 0644]
mach/minixST/libsys/getcwd.s [new file with mode: 0644]
mach/minixST/libsys/getegid.s [new file with mode: 0644]
mach/minixST/libsys/geteuid.s [new file with mode: 0644]
mach/minixST/libsys/getgid.s [new file with mode: 0644]
mach/minixST/libsys/getpid.s [new file with mode: 0644]
mach/minixST/libsys/getppid.s [new file with mode: 0644]
mach/minixST/libsys/getuid.s [new file with mode: 0644]
mach/minixST/libsys/gtty.s [new file with mode: 0644]
mach/minixST/libsys/ioctl.s [new file with mode: 0644]
mach/minixST/libsys/kill.s [new file with mode: 0644]
mach/minixST/libsys/link.s [new file with mode: 0644]
mach/minixST/libsys/lseek.s [new file with mode: 0644]
mach/minixST/libsys/mkdir.s [new file with mode: 0644]
mach/minixST/libsys/mkfifo.s [new file with mode: 0644]
mach/minixST/libsys/mknod.s [new file with mode: 0644]
mach/minixST/libsys/mknod4.s [new file with mode: 0644]
mach/minixST/libsys/mktemp.s [new file with mode: 0644]
mach/minixST/libsys/mount.s [new file with mode: 0644]
mach/minixST/libsys/open.s [new file with mode: 0644]
mach/minixST/libsys/pathconf.c [new file with mode: 0644]
mach/minixST/libsys/pause.s [new file with mode: 0644]
mach/minixST/libsys/pipe.s [new file with mode: 0644]
mach/minixST/libsys/ptrace.s [new file with mode: 0644]
mach/minixST/libsys/read.s [new file with mode: 0644]
mach/minixST/libsys/rename.s [new file with mode: 0644]
mach/minixST/libsys/rmdir.s [new file with mode: 0644]
mach/minixST/libsys/setgid.s [new file with mode: 0644]
mach/minixST/libsys/setuid.s [new file with mode: 0644]
mach/minixST/libsys/signal.s [new file with mode: 0644]
mach/minixST/libsys/stat.s [new file with mode: 0644]
mach/minixST/libsys/stime.s [new file with mode: 0644]
mach/minixST/libsys/stty.s [new file with mode: 0644]
mach/minixST/libsys/sync.s [new file with mode: 0644]
mach/minixST/libsys/time.s [new file with mode: 0644]
mach/minixST/libsys/times.s [new file with mode: 0644]
mach/minixST/libsys/umask.s [new file with mode: 0644]
mach/minixST/libsys/umount.s [new file with mode: 0644]
mach/minixST/libsys/unlink.s [new file with mode: 0644]
mach/minixST/libsys/utime.s [new file with mode: 0644]
mach/minixST/libsys/vectab.c [new file with mode: 0644]
mach/minixST/libsys/wait.s [new file with mode: 0644]
mach/minixST/libsys/write.s [new file with mode: 0644]

index 3f48898..ad59c46 100644 (file)
@@ -1,4 +1,5 @@
 #include <lib.h>
+#include <unistd.h>
 
 PUBLIC void _exit(status)
 int status;
index 9c858b3..1edec9f 100644 (file)
@@ -1,7 +1,3 @@
 LIST
-Makefile
-compmodule
 head_em.s
-lib.h
-libsys_s.a
-end.s
+libmon_s.a
index c106422..a689c9b 100644 (file)
-libsys_s.a
-stty.c
-gtty.c
-access.c
-alarm.c
-brk.c
-call.c
-chdir.c
-chmod.c
-chown.c
-chroot.c
-close.c
-creat.c
-dup.c
-dup2.c
-exec.c
-exit.c
+libmon_s.a
+access.s
+alarm.s
+brk.s
+chdir.s
+chmod.s
+chown.s
+chroot.s
+close.s
+creat.s
+dup.s
+dup2.s
+exec.s
+execn.s
+execnl.s
+fcntl.s
+fork.s
+fstat.s
+getcwd.s
+getegid.s
+geteuid.s
+getgid.s
+getpid.s
+getppid.s
+getuid.s
+gtty.s
+ioctl.s
+kill.s
+link.s
+lseek.s
+mkdir.s
+mkfifo.s
+mknod.s
+mknod4.s
+mktemp.s
+mount.s
+open.s
+pause.s
+pipe.s
+ptrace.s
+read.s
+rename.s
+rmdir.s
+setgid.s
+setuid.s
+signal.s
+stat.s
+stime.s
+stty.s
+sync.s
+time.s
+times.s
+umask.s
+umount.s
+unlink.s
+utime.s
+wait.s
+write.s
 _exit.c
-cleanup.c
-fork.c
-fstat.c
-getegid.c
-geteuid.c
-getgid.c
-getpid.c
-getuid.c
-ioctl.c
-kill.c
-link.c
-lseek.c
+_access.c
+_alarm.c
+_brk.c
+call.c
+_chdir.c
+_chmod.c
+_chown.c
+_chroot.c
+_close.c
+_creat.c
+_dup.c
+_dup2.c
+_exec.c
+_execn.c
+_execnl.c
+_fcntl.c
+_fork.c
+fpathconf.c
+_fstat.c
+_getcwd.c
+_getegid.c
+_geteuid.c
+_getgid.c
+_getpid.c
+_getppid.c
+_getuid.c
+_gtty.c
+_ioctl.c
+_kill.c
+_link.c
+_lseek.c
 message.c
-mknod.c
-mktemp.c
-mount.c
-open.c
-pause.c
-pipe.c
-read.c
-setgid.c
-setuid.c
-signal.c
-stat.c
-stderr.c
-stime.c
-sync.c
+_mkdir.c
+_mkfifo.c
+_mknod.c
+_mknod4.c
+_mktemp.c
+_mount.c
+_open.c
+pathconf.c
+_pause.c
+_pipe.c
+_ptrace.c
+_read.c
+_rename.c
+_rmdir.c
+_setgid.c
+_setuid.c
+_signal.c
+_stat.c
+_stime.c
+_stty.c
+_sync.c
 syslib.c
-time.c
-times.c
-umask.c
-umount.c
-unlink.c
-utime.c
-wait.c
-write.c
-stbrksz.s
-stsndrec.s
-stcatch.s
+_time.c
+_times.c
+_umask.c
+_umount.c
+_unlink.c
+_utime.c
+_wait.c
+_write.c
+vectab.c
+errno.c
diff --git a/mach/minixST/libsys/_access.c b/mach/minixST/libsys/_access.c
new file mode 100644 (file)
index 0000000..5bfd12f
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#define access _access
+#include <unistd.h>
+
+PUBLIC int access(name, mode)
+char *name;
+int mode;
+{
+  return(_callm3(FS, ACCESS, mode, name));
+}
diff --git a/mach/minixST/libsys/_alarm.c b/mach/minixST/libsys/_alarm.c
new file mode 100644 (file)
index 0000000..605ec13
--- /dev/null
@@ -0,0 +1,9 @@
+#include <lib.h>
+#define alarm  _alarm
+#include <unistd.h>
+
+PUBLIC unsigned int alarm(sec)
+unsigned int sec;
+{
+  return(_callm1(MM, ALARM, (int) sec, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_brk.c b/mach/minixST/libsys/_brk.c
new file mode 100644 (file)
index 0000000..82bbe6a
--- /dev/null
@@ -0,0 +1,33 @@
+#include <lib.h>
+#define brk    _brk
+#define sbrk   _sbrk
+#include <unistd.h>
+
+extern char *_brksize;
+
+PUBLIC char *brk(addr)
+char *addr;
+{
+  if (_callm1(MM, BRK, 0, 0, 0, addr, NIL_PTR, NIL_PTR) == 0) {
+       _brksize = _M.m2_p1;
+       return(NIL_PTR);
+  } else {
+       return((char *) -1);
+  }
+}
+
+
+PUBLIC char *sbrk(incr)
+int incr;
+{
+  char *newsize, *oldsize;
+
+  oldsize = _brksize;
+  newsize = _brksize + incr;
+  if (incr > 0 && newsize < oldsize || incr < 0 && newsize > oldsize)
+       return((char *) -1);
+  if (_brk(newsize) == 0)
+       return(oldsize);
+  else
+       return((char *) -1);
+}
diff --git a/mach/minixST/libsys/_chdir.c b/mach/minixST/libsys/_chdir.c
new file mode 100644 (file)
index 0000000..0373eb3
--- /dev/null
@@ -0,0 +1,9 @@
+#include <lib.h>
+#define chdir  _chdir
+#include <unistd.h>
+
+PUBLIC int chdir(name)
+char *name;
+{
+  return(_callm3(FS, CHDIR, 0, name));
+}
diff --git a/mach/minixST/libsys/_chmod.c b/mach/minixST/libsys/_chmod.c
new file mode 100644 (file)
index 0000000..4306d7b
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#define chmod  _chmod
+#include <sys/stat.h>
+
+PUBLIC int chmod(name, mode)
+_CONST char *name;
+mode_t mode;
+{
+  return(_callm3(FS, CHMOD, mode, name));
+}
diff --git a/mach/minixST/libsys/_chown.c b/mach/minixST/libsys/_chown.c
new file mode 100644 (file)
index 0000000..53531c1
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#define chown  _chown
+#include <unistd.h>
+
+PUBLIC int chown(name, owner, grp)
+char *name;
+int owner, grp;
+{
+  return(_callm1(FS, CHOWN, _len(name), owner, grp, name, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_chroot.c b/mach/minixST/libsys/_chroot.c
new file mode 100644 (file)
index 0000000..b5b3ee5
--- /dev/null
@@ -0,0 +1,9 @@
+#include <lib.h>
+#define chroot _chroot
+#include <unistd.h>
+
+PUBLIC int chroot(name)
+_CONST char *name;
+{
+  return(_callm3(FS, CHROOT, 0, name));
+}
diff --git a/mach/minixST/libsys/_close.c b/mach/minixST/libsys/_close.c
new file mode 100644 (file)
index 0000000..9da9c15
--- /dev/null
@@ -0,0 +1,9 @@
+#include <lib.h>
+#define close  _close
+#include <unistd.h>
+
+PUBLIC int close(fd)
+int fd;
+{
+  return(_callm1(FS, CLOSE, fd, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_creat.c b/mach/minixST/libsys/_creat.c
new file mode 100644 (file)
index 0000000..b8ce7de
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#define creat  _creat
+#include <fcntl.h>
+
+PUBLIC int creat(name, mode)
+_CONST char *name;
+mode_t mode;
+{
+  return(_callm3(FS, CREAT, mode, name));
+}
diff --git a/mach/minixST/libsys/_dup.c b/mach/minixST/libsys/_dup.c
new file mode 100644 (file)
index 0000000..1a12063
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#define dup    _dup
+#include <unistd.h>
+#include <fcntl.h>
+
+PUBLIC int dup(fd)
+int fd;
+{
+  return(fcntl(fd, F_DUPFD, 0));
+}
diff --git a/mach/minixST/libsys/_dup2.c b/mach/minixST/libsys/_dup2.c
new file mode 100644 (file)
index 0000000..4a8e8e1
--- /dev/null
@@ -0,0 +1,30 @@
+#include <lib.h>
+#define dup2     _dup2
+#include <unistd.h>
+#include <fcntl.h>
+#include <limits.h>
+#include <errno.h>
+
+PUBLIC int dup2(fd, fd2)
+int fd, fd2;
+{
+/* The behavior of dup2 is defined by POSIX in 6.2.1.2 as almost, but not
+ * quite the same as fcntl.
+ */
+
+  if (fd2 < 0 || fd2 > OPEN_MAX) {
+       errno = EBADF;
+       return(-1);
+  }
+
+  /* Check to see if fildes is valid. */
+  if (fcntl(fd, F_GETFL) < 0) {
+       /* fd is not valid. */
+       return(-1);
+  } else {
+       /* fd is valid. */
+       if (fd == fd2) return(fd2);
+       close(fd2);
+       return(fcntl(fd, F_DUPFD, fd2));
+  }
+}
diff --git a/mach/minixST/libsys/_exec.c b/mach/minixST/libsys/_exec.c
new file mode 100644 (file)
index 0000000..816533a
--- /dev/null
@@ -0,0 +1,169 @@
+#include <lib.h>
+#include <string.h>
+#define execl  _execl
+#define execle _execle
+#define execv  _execv
+#define execve _execve
+#include <unistd.h>
+
+extern char **environ;         /* environment pointer */
+
+#define        PTRSIZE (sizeof(char *))
+_PROTOTYPE( char *_sbrk, (int _incr)                                   );
+
+#if _ANSI
+#include       <stdarg.h>
+
+PUBLIC int execl(char *name, ...)
+{
+       int retval;
+       va_list ap;
+
+       va_start(ap, name);
+       retval = execve(name, (char **)ap, environ);
+       va_end(ap);
+       return retval;
+}
+#else
+PUBLIC int execl(name, arg0)
+char *name;
+char *arg0;
+{
+  return(execve(name, &arg0, environ));
+}
+#endif
+
+#if _ANSI
+PUBLIC int execle(char *name, ...)
+{
+       int retval;
+       va_list ap;
+       char *p;
+
+       va_start(ap, name);
+       do {
+           p = va_arg(ap, char *);
+       } while(p);
+       p = (char *)va_arg(ap, char **);
+       va_end(ap);
+       va_start(ap, name);
+       retval = execve(name, (char **)ap, (char **) p);
+       va_end(ap);
+       return retval;
+}
+#else
+PUBLIC int execle(name, argv)
+char *name, *argv;
+{
+  char **p;
+  p = (char **) &argv;
+  while (*p++)                 /* null statement */
+       ;
+  return(execve(name, &argv, (char **) *p));
+}
+#endif
+
+PUBLIC int execv(name, argv)
+char *name, *argv[];
+{
+
+  return(execve(name, argv, environ));
+}
+
+PUBLIC int execve(path, argv, envp)
+char *path;                    /* pointer to name of file to be executed */
+char *argv[];                  /* pointer to argument array */
+char *envp[];                  /* pointer to environment */
+{
+  register char **argtop;
+  register char **envtop;
+
+       /* Count the argument pointers and environment pointers. */
+  for (argtop = argv; *argtop != (char *) NULL; ) argtop++;
+  for (envtop = envp; *envtop != (char *) NULL; ) envtop++;
+  return(__execve(path, argv, envp, (int)(argtop - argv), (int)(envtop - envp)));
+}
+
+PUBLIC int __execve(path, argv, envp, nargs, nenvps)
+char *path;                    /* pointer to name of file to be executed */
+char *argv[];                  /* pointer to argument array */
+char *envp[];                  /* pointer to environment */
+int nargs;                     /* number of args */
+int nenvps;                    /* number of environment strings */
+{
+/* This is split off from execve to be called from execvp, so execvp does not
+ * have to allocate up to ARG_MAX bytes just to prepend "sh" to the arg array.
+ */
+
+  char *hp, **ap, *p;
+  int i, stackbytes, npointers, overflow, temp;
+  char *stack;
+  /* Decide how big a stack is needed. Be paranoid about overflow. */
+#if ARG_MAX > INT_MAX
+#error /* overflow checks and sbrk depend on sizes being ints */
+#endif
+  overflow = FALSE;
+  npointers = 1 + nargs + 1 + nenvps + 1;      /* 1's for argc and NULLs */
+  stackbytes = 0;      /* changed because _len is used now */
+  if (nargs < 0 || nenvps < 0 || nargs+nenvps < 0 || npointers < 0)
+       overflow = TRUE;
+  for (i = PTRSIZE; i != 0; i--) {
+       temp = stackbytes + npointers;
+       if (temp < stackbytes) overflow = TRUE;
+       stackbytes = temp;
+  }
+  for (i = 0, ap = argv; i < nargs; i++) {
+       temp = stackbytes + _len(*ap++);
+       if (temp < stackbytes) overflow = TRUE;
+       stackbytes = temp;
+  }
+  for (i = 0, ap = envp; i < nenvps; i++) {
+       temp = stackbytes + _len(*ap++);
+       if (temp < stackbytes) overflow = TRUE;
+       stackbytes = temp;
+  }
+  temp = stackbytes + PTRSIZE - 1;
+  if (temp < stackbytes) overflow = TRUE;
+  stackbytes = (temp / PTRSIZE) * PTRSIZE;
+
+  /* Check for overflow before committing sbrk. */
+  if (overflow || stackbytes > ARG_MAX) {
+       errno = E2BIG;
+       return(-1);
+  }
+
+  /* Allocate the stack. */
+  stack = _sbrk(stackbytes);
+  if (stack == (char *) -1) {
+       errno = E2BIG;
+       return(-1);
+  }
+
+  /* Prepare the stack vector and argc. */
+  ap = (char **) stack;
+  hp = &stack[npointers * PTRSIZE];
+  *ap++ = (char *) nargs;
+
+  /* Prepare the argument pointers and strings. */
+  for (i = 0; i < nargs; i++) {
+       *ap++ = (char *) (hp - stack);
+       p = *argv++;
+       while ((*hp++ = *p++) != 0)
+               ;
+  }
+  *ap++ = (char *) NULL;
+
+  /* Prepare the environment pointers and strings. */
+  for (i = 0; i < nenvps; i++) {
+       *ap++ = (char *) (hp - stack);
+       p = *envp++;
+       while ((*hp++ = *p++) != 0)
+               ;
+  }
+  *ap++ = (char *) NULL;
+
+  /* Do the real work. */
+  temp = _callm1(MM, EXEC, _len(path), stackbytes, 0, path, stack, NIL_PTR);
+  _sbrk(-stackbytes);
+  return(temp);
+}
diff --git a/mach/minixST/libsys/_execn.c b/mach/minixST/libsys/_execn.c
new file mode 100644 (file)
index 0000000..e3ce35e
--- /dev/null
@@ -0,0 +1,16 @@
+#include <lib.h>
+
+#define        PTRSIZE sizeof(char *)
+_PROTOTYPE( int _execn, (char * name));
+
+PUBLIC int _execn(name)
+char *name;                    /* pointer to file to be exec'd */
+{
+/* Special version used when there are no args and no environment.  This call
+ * is principally used by INIT, to avoid having to allocate ARG_MAX.
+ */
+
+  PRIVATE char stack[3 * PTRSIZE];
+
+  return(_callm1(MM, EXEC, _len(name), sizeof(stack), 0, name, stack, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_execnl.c b/mach/minixST/libsys/_execnl.c
new file mode 100644 (file)
index 0000000..97a9e75
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * This file contains two functions that can be used to perform
+ * an EXEC call without the need for a "big" stack of MAX_ARG
+ * bytes.  It is primarily used by the INIT module of the system.
+ */
+#include <lib.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#define MAXSTK 256             /* maximum EXEC stack size */
+#define        PTRSIZE sizeof(char *)
+
+_PROTOTYPE(int _execn,(char *name));
+_PROTOTYPE(int _execnl,(char *name, char *arg0));
+PRIVATE _PROTOTYPE(int _nexec,(char *name, char *argv[]));
+
+PUBLIC int _execn(name)
+char *name;                    /* pointer to file to be exec'd */
+{
+/* This funcion uses no arguments at all. */
+  PRIVATE char stack[3 * PTRSIZE];
+
+  return(_callm1(MM, EXEC, _len(name), sizeof(stack), 0, name, stack, NIL_PTR));
+}
+
+
+PUBLIC int _execnl(name, arg0)
+char *name;
+char *arg0;
+{
+  /* This function resembles execl(2). */
+
+  return(_nexec(name, &arg0));
+}
+
+PRIVATE int _nexec(name, argv)
+char *name;                    /* pointer to name of file to be executed */
+char *argv[];                  /* pointer to argument array */
+{
+  char stack[MAXSTK];
+  char **argorg, *hp, **ap, *p;
+  int i, nargs, stackbytes, offset;
+
+  /* Count the argument pointers. */
+  nargs = 0;
+  argorg = argv;
+  while (*argorg++ != NIL_PTR) nargs++;
+
+  /* Prepare to set up the initial stack. */
+  hp = &stack[(nargs + 3) * PTRSIZE];
+  if (hp + nargs >= &stack[MAXSTK]) {
+       errno = E2BIG;
+       return(-1);
+  }
+  ap = (char **) stack;
+  *ap++ = (char *) nargs;
+
+  /* Prepare the argument pointers and strings. */
+  for (i = 0; i < nargs; i++) {
+       offset = hp - stack;
+       *ap++ = (char *) offset;
+       p = *argv++;
+       while (*p) {
+               *hp++ = *p++;
+               if (hp >= &stack[MAXSTK]) {
+                       errno = E2BIG;
+                       return(-1);
+               }
+       }
+       *hp++ = (char) 0;
+  }
+  *ap++ = NIL_PTR;
+
+  stackbytes = (((int) (hp - stack) + PTRSIZE - 1) / PTRSIZE) * PTRSIZE;
+  return(_callm1(MM, EXEC, _len(name), stackbytes, 0, name, stack, NIL_PTR));
+}
index 3f48898..ad59c46 100644 (file)
@@ -1,4 +1,5 @@
 #include <lib.h>
+#include <unistd.h>
 
 PUBLIC void _exit(status)
 int status;
diff --git a/mach/minixST/libsys/_fcntl.c b/mach/minixST/libsys/_fcntl.c
new file mode 100644 (file)
index 0000000..780280d
--- /dev/null
@@ -0,0 +1,43 @@
+#include <lib.h>
+#define fcntl _fcntl
+#include <fcntl.h>
+#include <stdarg.h>
+
+#if _ANSI
+PUBLIC int fcntl(int fd, int cmd, ...)
+#else
+PUBLIC int fcntl(fd, cmd)
+int fd;
+int cmd;
+#endif
+{
+  va_list argp;
+  int int3;                    /* third integer parameter for callm1 */
+  char *ptr1;                  /* first pointer parameter for callm1 */
+
+  va_start(argp, cmd);
+
+  /* Set up for the sensible case where there is no variable parameter.  This
+   * covers F_GETFD, F_GETFL and invalid commands.
+   */
+  int3 = 0;
+  ptr1 = NIL_PTR;
+
+  /* Adjust for the stupid cases. */
+  switch(cmd) {
+     case F_DUPFD:
+     case F_SETFD:
+     case F_SETFL:
+       int3 = va_arg(argp, int);
+       break;
+     case F_GETLK:
+     case F_SETLK:
+     case F_SETLKW:
+       ptr1 = (char *) va_arg(argp, struct flock *);
+       break;
+  }
+
+  /* Clean up and make the system call. */  
+  va_end(argp);        
+  return(_callm1(FS, FCNTL, fd, cmd, int3, ptr1, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_fork.c b/mach/minixST/libsys/_fork.c
new file mode 100644 (file)
index 0000000..0cf123b
--- /dev/null
@@ -0,0 +1,8 @@
+#include <lib.h>
+#define fork   _fork
+#include <unistd.h>
+
+PUBLIC int fork()
+{
+  return(_callm1(MM, FORK, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_fstat.c b/mach/minixST/libsys/_fstat.c
new file mode 100644 (file)
index 0000000..e7f2447
--- /dev/null
@@ -0,0 +1,11 @@
+#include <lib.h>
+#include <sys/types.h>
+#define fstat  _fstat
+#include <sys/stat.h>
+
+PUBLIC int fstat(fd, buffer)
+int fd;
+struct stat *buffer;
+{
+  return(_callm1(FS, FSTAT, fd, 0, 0, (char *)buffer, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_getcwd.c b/mach/minixST/libsys/_getcwd.c
new file mode 100644 (file)
index 0000000..cfe8eac
--- /dev/null
@@ -0,0 +1,121 @@
+/*  getcwd - get current working directory     Author: Terrence W. Holm */
+
+/* Directly derived from Adri Koppes' pwd(1).
+ * Modified by Andy Tanenbaum for POSIX (29 Oct. 1989)
+ */
+
+#include <lib.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <sys/dir.h>
+#define getcwd _getcwd
+#include <unistd.h>
+#include <string.h>
+
+#define  DIRECT_SIZE  (sizeof (struct direct))
+
+PRIVATE _PROTOTYPE(void,  go_back(char *path) );
+
+char *getcwd(buffer, size)
+char *buffer;
+int size;
+/* Get current working directory. */
+{
+  int same_device, found, fd;
+  char *r, path[PATH_MAX + 1], temp_name[NAME_MAX + 1];
+  struct stat current, parent, dir_entry;
+  struct direct d;
+
+  if (buffer == (char *)NULL || size <= 0) {
+       errno = EINVAL;
+       return((char *)NULL);
+  }
+  path[0] = '\0';
+
+  /* Get the inode for the current directory  */
+  if (stat(".", &current) == -1) return((char *)NULL);
+  if ((current.st_mode & S_IFMT) != S_IFDIR) return((char *)NULL);
+
+  /* Run backwards up the directory tree, grabbing dir names on the way. */
+  while (1) {
+       same_device = 0;
+       found = 0;
+
+       /* Get the inode for the parent directory  */
+       if (chdir("..") == -1) return((char *)NULL);
+       if (stat(".", &parent) == -1) return((char *)NULL);
+       if ((parent.st_mode & S_IFMT) != S_IFDIR) return((char *)NULL);
+       if (current.st_dev == parent.st_dev) same_device = 1;
+
+       /* At the root, "." is the same as ".."  */
+       if (same_device && current.st_ino == parent.st_ino) break;
+
+       /* Search the parent directory for the current entry  */
+       if ((fd = open(".", O_RDONLY)) == -1) return((char *)NULL);
+       while (!found && read(fd, (char *)&d, DIRECT_SIZE) == DIRECT_SIZE) {
+               if (d.d_ino == 0L) continue;    /* empty slot */
+               if (same_device) {
+                       if (current.st_ino == d.d_ino) found = 1;
+               } else {
+                       temp_name[0] = '\0';
+                       strncat(temp_name, d.d_name, NAME_MAX);
+                       if (stat(temp_name, &dir_entry) == -1) {
+                               close(fd);
+                               go_back(path);
+                               return((char *)NULL);
+                       }
+                       if (current.st_dev == dir_entry.st_dev &&
+                           current.st_ino == dir_entry.st_ino)
+                               found = 1;
+               }
+       }
+
+       close(fd);
+       if (!found) {
+               go_back(path);
+               return((char *)NULL);
+       }
+       if (strlen(path) + NAME_MAX + 1 > PATH_MAX) {
+               errno = ERANGE;
+               go_back(path);
+               return((char *)NULL);
+       }
+       strcat(path, "/");
+       strncat(path, d.d_name, NAME_MAX);
+       current.st_dev = parent.st_dev;
+       current.st_ino = parent.st_ino;
+  }
+
+  /* Copy the reversed path name into <buffer>  */
+  if (strlen(path) + 1 > size) {
+       errno = ERANGE;
+       go_back(path);
+       return((char *)NULL);
+  }
+  if (strlen(path) == 0) {
+       strcpy(buffer, "/");
+       return(buffer);
+  }
+  *buffer = '\0';
+  while ((r = strrchr(path, '/')) != (char *)NULL) {
+       strcat(buffer, r);
+       *r = '\0';
+  }
+  return(chdir(buffer) ? (char *)NULL : buffer);
+}
+
+PRIVATE void go_back(path)
+char *path;
+{
+/* If getcwd() gets in trouble and can't complete normally, reverse the
+ * path built so far and change there so we end up in the directory that
+ * we started in.
+ */
+
+  char *r;
+
+  while ((r = strrchr(path, '/')) != (char *)NULL) {
+       chdir(r+1);
+       *r = '\0';
+  }
+}
diff --git a/mach/minixST/libsys/_getegid.c b/mach/minixST/libsys/_getegid.c
new file mode 100644 (file)
index 0000000..1508cc4
--- /dev/null
@@ -0,0 +1,12 @@
+#include <lib.h>
+#include <sys/types.h>
+#define getegid        _getegid
+#include <unistd.h>
+
+PUBLIC gid_t getegid()
+{
+  int k;
+  k = _callm1(MM, GETGID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR);
+  if (k < 0) return((gid_t) k);
+  return((gid_t) _M.m2_i1);
+}
diff --git a/mach/minixST/libsys/_geteuid.c b/mach/minixST/libsys/_geteuid.c
new file mode 100644 (file)
index 0000000..230b3e5
--- /dev/null
@@ -0,0 +1,12 @@
+#include <lib.h>
+#include <sys/types.h>
+#define geteuid        _geteuid
+#include <unistd.h>
+
+PUBLIC uid_t geteuid()
+{
+  int k;
+  k = _callm1(MM, GETUID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR);
+  if (k < 0) return((uid_t) k);
+  return((uid_t) _M.m2_i1);
+}
diff --git a/mach/minixST/libsys/_getgid.c b/mach/minixST/libsys/_getgid.c
new file mode 100644 (file)
index 0000000..38b7123
--- /dev/null
@@ -0,0 +1,9 @@
+#include <lib.h>
+#include <sys/types.h>
+#define getgid _getgid
+#include <unistd.h>
+
+PUBLIC gid_t getgid()
+{
+  return((gid_t)_callm1(MM, GETGID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_getpid.c b/mach/minixST/libsys/_getpid.c
new file mode 100644 (file)
index 0000000..6847d3c
--- /dev/null
@@ -0,0 +1,8 @@
+#include <lib.h>
+#define getpid _getpid
+#include <unistd.h>
+
+PUBLIC int getpid()
+{
+  return(_callm1(MM, GETPID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_getppid.c b/mach/minixST/libsys/_getppid.c
new file mode 100644 (file)
index 0000000..b54666a
--- /dev/null
@@ -0,0 +1,12 @@
+#include <lib.h>
+#define getppid        _getppid
+#include <unistd.h>
+
+PUBLIC int getppid()
+{
+  int p;
+
+  p = _callm1(MM, GETPID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR);
+  if (p < 0) return(p);
+  return(_M.m2_i1);
+}
diff --git a/mach/minixST/libsys/_getuid.c b/mach/minixST/libsys/_getuid.c
new file mode 100644 (file)
index 0000000..ab2b467
--- /dev/null
@@ -0,0 +1,9 @@
+#include <lib.h>
+#include <sys/types.h>
+#define getuid _getuid
+#include <unistd.h>
+
+PUBLIC uid_t getuid()
+{
+  return((uid_t)_callm1(MM, GETUID, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_gtty.c b/mach/minixST/libsys/_gtty.c
new file mode 100644 (file)
index 0000000..943ebe3
--- /dev/null
@@ -0,0 +1,11 @@
+#include <lib.h>
+#define gtty   _gtty
+#define ioctl  _ioctl
+#include <sgtty.h>
+
+PUBLIC int gtty(fd, argp)
+int fd;
+struct sgttyb *argp;
+{
+  return(ioctl(fd, TIOCGETP, argp));
+}
diff --git a/mach/minixST/libsys/_ioctl.c b/mach/minixST/libsys/_ioctl.c
new file mode 100644 (file)
index 0000000..e30bf1f
--- /dev/null
@@ -0,0 +1,77 @@
+#include <lib.h>
+#include <minix/com.h>
+#define ioctl  _ioctl
+#include <sgtty.h>
+
+PUBLIC int ioctl(fd, request, argp)
+int fd;
+int request;
+struct sgttyb *argp;
+{
+  int n;
+  long erase, kill, intr, quit, xon, xoff, eof, brk, speed;
+  struct tchars *argt;
+
+  _M.TTY_REQUEST = request;
+  _M.TTY_LINE = fd;
+
+  switch(request) {
+     case TIOCSETP:
+       erase = argp->sg_erase & BYTE;
+       kill = argp->sg_kill & BYTE;
+       speed = ((argp->sg_ospeed & BYTE) << 8) | (argp->sg_ispeed & BYTE);
+       _M.TTY_SPEK = (speed << 16) | (erase << 8) | kill;
+       _M.TTY_FLAGS = argp->sg_flags;
+       n = _callx(FS, IOCTL);
+       return(n);
+     case TIOCSETC:
+       argt = (struct tchars * /* kludge */) argp;
+       intr = argt->t_intrc & BYTE;
+       quit = argt->t_quitc & BYTE;
+       xon  = argt->t_startc & BYTE;
+       xoff = argt->t_stopc & BYTE;
+       eof  = argt->t_eofc & BYTE;
+       brk  = argt->t_brkc & BYTE;             /* not used at the moment */
+       _M.TTY_SPEK = (intr<<24) | (quit<<16) | (xon<<8) | (xoff<<0);
+       _M.TTY_FLAGS = (eof<<8) | (brk<<0);
+       n = _callx(FS, IOCTL);
+       return(n);
+       
+     case TIOCGETP:
+       n = _callx(FS, IOCTL);
+       argp->sg_erase = (_M.TTY_SPEK >> 8) & BYTE;
+       argp->sg_kill  = (_M.TTY_SPEK >> 0) & BYTE;
+       argp->sg_flags = _M.TTY_FLAGS & 0xFFFFL;
+       speed = (_M.TTY_SPEK >> 16) & 0xFFFFL;
+       argp->sg_ispeed = speed & BYTE;
+       argp->sg_ospeed = (speed >> 8) & BYTE;
+       return(n);
+
+     case TIOCGETC:
+       n = _callx(FS, IOCTL);
+       argt = (struct tchars *) argp;
+       argt->t_intrc  = (_M.TTY_SPEK >> 24) & BYTE;
+       argt->t_quitc  = (_M.TTY_SPEK >> 16) & BYTE;
+       argt->t_startc = (_M.TTY_SPEK >>  8) & BYTE;
+       argt->t_stopc  = (_M.TTY_SPEK >>  0) & BYTE;
+       argt->t_eofc   = (_M.TTY_FLAGS >> 8) & BYTE;
+       argt->t_brkc   = (_M.TTY_FLAGS >> 8) & BYTE;
+       return(n);
+
+/* This is silly, do we want to add 1001 cases and _M.TTY_XYZ's here?
+ * We should just pop argp into the message for low-level interpretation.
+ */
+
+     case TIOCFLUSH:
+       _M.TTY_FLAGS = (int /* kludge */) argp;
+       return _callx(FS, IOCTL);
+
+/* decided to pop argp in the ADDRESS field. Left TIOCFLUSH a special case
+ * since it affects other platforms and old software too. FM
+ */
+     default:
+       _M.ADDRESS = (char *)argp;
+       return _callx(FS, IOCTL);
+  }
+}
diff --git a/mach/minixST/libsys/_kill.c b/mach/minixST/libsys/_kill.c
new file mode 100644 (file)
index 0000000..47d319f
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#define kill   _kill
+#include <signal.h>
+
+PUBLIC int kill(proc, sig)
+int proc;                      /* which process is to be sent the signal */
+int sig;                       /* signal number */
+{
+  return(_callm1(MM, KILL, proc, sig, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_link.c b/mach/minixST/libsys/_link.c
new file mode 100644 (file)
index 0000000..d216428
--- /dev/null
@@ -0,0 +1,11 @@
+#include <lib.h>
+#define link   _link
+#include <unistd.h>
+
+PUBLIC int link(name, name2)
+_CONST char *name, *name2;
+{
+  return(_callm1(FS, LINK, _len(name), _len(name2), 0,
+        (char *) name, (char *) name2, /* perhaps callm1 preserves these */
+        NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_lseek.c b/mach/minixST/libsys/_lseek.c
new file mode 100644 (file)
index 0000000..d2f3993
--- /dev/null
@@ -0,0 +1,18 @@
+#include <lib.h>
+#include <sys/types.h>
+#define lseek  _lseek
+#include <unistd.h>
+
+PUBLIC off_t lseek(fd, offset, whence)
+int fd;
+off_t offset;
+int whence;
+{
+  int k;
+  _M.m2_i1 = fd;
+  _M.m2_l1 = offset;
+  _M.m2_i2 = whence;
+  k = _callx(FS, LSEEK);
+  if (k != 0) return((off_t) k);       /* _send() itself failed */
+  return((off_t)_M.m2_l1);
+}
diff --git a/mach/minixST/libsys/_mkdir.c b/mach/minixST/libsys/_mkdir.c
new file mode 100644 (file)
index 0000000..7fc46fc
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#define mkdir  _mkdir
+#include <sys/stat.h>
+
+PUBLIC int mkdir(name, mode)
+_CONST char *name;
+int mode;
+{
+  return(_callm1(FS, MKDIR, _len(name), mode, 0, (char *)name, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_mkfifo.c b/mach/minixST/libsys/_mkfifo.c
new file mode 100644 (file)
index 0000000..4d41f92
--- /dev/null
@@ -0,0 +1,13 @@
+#include <lib.h>
+#include <sys/types.h>
+#define mkfifo _mkfifo
+#include <sys/stat.h>
+
+PUBLIC int mkfifo(name, mode)
+_CONST char *name;
+int mode;
+{
+  mode = (mode & 0777) | S_IFIFO;
+  return(_callm1(FS, MKNOD, _len(name), (int)mode, 0,
+        (char *)name, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_mknod.c b/mach/minixST/libsys/_mknod.c
new file mode 100644 (file)
index 0000000..ca83f62
--- /dev/null
@@ -0,0 +1,11 @@
+#include <lib.h>
+#define mknod  _mknod
+#include <unistd.h>
+
+PUBLIC int mknod(name, mode, addr)
+_CONST char *name;
+int mode, addr;
+{
+  return(_callm1(FS, MKNOD, _len(name), mode, addr,
+                                       (char *) name, (char *) 0, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_mknod4.c b/mach/minixST/libsys/_mknod4.c
new file mode 100644 (file)
index 0000000..de7682b
--- /dev/null
@@ -0,0 +1,12 @@
+#include <lib.h>
+#define mknod4 _mknod4
+#include <unistd.h>
+
+PUBLIC int mknod4(name, mode, addr, size)
+_CONST char *name;
+int mode, addr;
+unsigned int size;
+{
+  return(_callm1(FS, MKNOD, _len(name), mode, addr, 
+                                      (char *) name, (char *) size, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_mktemp.c b/mach/minixST/libsys/_mktemp.c
new file mode 100644 (file)
index 0000000..e655f9c
--- /dev/null
@@ -0,0 +1,31 @@
+#include <lib.h>
+/* mktemp - make a name for a temporary file */
+#include <sys/types.h>
+#define mktemp _mktemp
+#define getpid _getpid
+#define access _access
+#include <unistd.h>
+
+PUBLIC char *mktemp(char *template)
+{
+  register int pid, k;
+  register char *p;
+
+  pid = getpid();              /* get process id as semi-unique number */
+  p = template;
+  while (*p) p++;              /* find end of string */
+
+  /* Replace XXXXXX at end of template with pid. */
+  while (*--p == 'X') {
+       *p = '0' + (pid % 10);
+       pid /= 10;
+  }
+  p++;
+  for (k = 'a'; k <= 'z'; k++) {
+       *p = k;
+       if (access(template, 0) < 0) {
+               return template;
+       }
+  }
+  return("/");
+}
diff --git a/mach/minixST/libsys/_mount.c b/mach/minixST/libsys/_mount.c
new file mode 100644 (file)
index 0000000..52ba1d9
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#define mount  _mount
+#include <unistd.h>
+
+PUBLIC int mount(special, name, rwflag)
+char *name, *special;
+int rwflag;
+{
+  return(_callm1(FS, MOUNT, _len(special), _len(name), rwflag, special, name, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_open.c b/mach/minixST/libsys/_open.c
new file mode 100644 (file)
index 0000000..5f0f94a
--- /dev/null
@@ -0,0 +1,34 @@
+#include <lib.h>
+#include <sys/types.h>
+#define open   _open
+#include <fcntl.h>
+
+#if _ANSI
+#include <stdarg.h>
+
+PUBLIC int open(const char *name, int flags, ...)
+{
+       int i;
+       va_list ap;
+
+       if (flags & O_CREAT) {
+               va_start(ap, flags);
+               i = va_arg(ap, int);
+               i = _callm1(FS, OPEN, _len(name), flags, i,
+                           (char *)name, NIL_PTR, NIL_PTR);
+               va_end(ap);
+               return i;
+       }
+       return _callm3(FS, OPEN, flags, name);
+}
+#else
+PUBLIC int open(name, flags, mode)
+_CONST char *name;
+int flags, mode;
+{
+  if (flags & O_CREAT)
+       return _callm1(FS, OPEN, _len(name), flags, mode,
+                     (char *)name, NIL_PTR, NIL_PTR);
+  return(_callm3(FS, OPEN, flags, name));
+}
+#endif
diff --git a/mach/minixST/libsys/_pause.c b/mach/minixST/libsys/_pause.c
new file mode 100644 (file)
index 0000000..2a92a9a
--- /dev/null
@@ -0,0 +1,8 @@
+#include <lib.h>
+#define pause  _pause
+#include <unistd.h>
+
+PUBLIC int pause()
+{
+  return(_callm1(MM, PAUSE, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_pipe.c b/mach/minixST/libsys/_pipe.c
new file mode 100644 (file)
index 0000000..4cfce75
--- /dev/null
@@ -0,0 +1,16 @@
+#include <lib.h>
+#define pipe   _pipe
+#include <unistd.h>
+
+PUBLIC int pipe(fild)
+int fild[2];
+{
+  int k;
+  k = _callm1(FS, PIPE, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR);
+  if (k >= 0) {
+       fild[0] = _M.m1_i1;
+       fild[1] = _M.m1_i2;
+       return(0);
+  } else
+       return(k);
+}
diff --git a/mach/minixST/libsys/_ptrace.c b/mach/minixST/libsys/_ptrace.c
new file mode 100644 (file)
index 0000000..b74dfa2
--- /dev/null
@@ -0,0 +1,19 @@
+#include <lib.h>
+#define ptrace _ptrace
+#include <unistd.h>
+
+PUBLIC long ptrace(req, pid, addr, data)
+int req, pid;
+long addr, data;
+{
+  _M.m2_i1 = pid;
+  _M.m2_i2 = req;
+  _M.m2_l1 = addr;
+  _M.m2_l2 = data;
+  if (_callx(MM, PTRACE) == -1) return(-1L);
+  if (_M.m2_l2 == -1) {
+       errno = 0;
+       return(-1L);
+  }
+  return(_M.m2_l2);
+}
diff --git a/mach/minixST/libsys/_read.c b/mach/minixST/libsys/_read.c
new file mode 100644 (file)
index 0000000..ac4e90e
--- /dev/null
@@ -0,0 +1,11 @@
+#include <lib.h>
+#define read   _read
+#include <unistd.h>
+
+PUBLIC int read(fd, buffer, nbytes)
+int fd;
+char *buffer;
+unsigned nbytes;
+{
+  return(_callm1(FS, READ, fd, nbytes, 0, buffer, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_rename.c b/mach/minixST/libsys/_rename.c
new file mode 100644 (file)
index 0000000..80495e5
--- /dev/null
@@ -0,0 +1,11 @@
+#include <lib.h>
+#define rename _rename
+#include <stdio.h>
+
+PUBLIC int rename(name, name2)
+_CONST char *name, *name2;
+{
+  return(_callm1(FS, RENAME, _len(name), _len(name2), 0,
+        (char *) name, (char *) name2, /* perhaps callm1 preserves these */
+        NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_rmdir.c b/mach/minixST/libsys/_rmdir.c
new file mode 100644 (file)
index 0000000..dedcdb2
--- /dev/null
@@ -0,0 +1,9 @@
+#include <lib.h>
+#define rmdir  _rmdir
+#include <unistd.h>
+
+PUBLIC int rmdir(name)
+_CONST char *name;
+{
+  return(_callm3(FS, RMDIR, 0, name));
+}
diff --git a/mach/minixST/libsys/_setgid.c b/mach/minixST/libsys/_setgid.c
new file mode 100644 (file)
index 0000000..9972bec
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#include <sys/types.h>
+#define setgid _setgid
+#include <unistd.h>
+
+PUBLIC int setgid(grp)
+gid_t grp;
+{
+  return(_callm1(MM, SETGID, (int)grp, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_setuid.c b/mach/minixST/libsys/_setuid.c
new file mode 100644 (file)
index 0000000..921635d
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#include <sys/types.h>
+#define setuid _setuid
+#include <unistd.h>
+
+PUBLIC int setuid(usr)
+int usr;
+{
+  return(_callm1(MM, SETUID, (int)usr, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_signal.c b/mach/minixST/libsys/_signal.c
new file mode 100644 (file)
index 0000000..1b5e8e1
--- /dev/null
@@ -0,0 +1,41 @@
+#include <lib.h>
+#define signal _signal
+#include <signal.h>
+
+extern _PROTOTYPE(void (*_vectab[_NSIG]), (int));      /* array of funcs to catch signals */
+
+/* The definition of signal really should be
+ *  PUBLIC void (*signal(signr, func))()
+ * but some compilers refuse to accept this, even though it is correct.
+ * The only thing to do if you are stuck with such a defective compiler is
+ * change it to
+ *  PUBLIC void *signal(signr, func)
+ * and change ../h/signal.h accordingly.
+ */
+
+PUBLIC void (*signal(signr, func))()
+int signr;                     /* which signal is being set */
+_PROTOTYPE( void (*func), (int));      /* pointer to function that catches signal */
+{
+  int r;
+  _PROTOTYPE( void (*old), (int));
+
+  old = _vectab[signr - 1];
+  _M.m6_i1 = signr;
+  if (func == SIG_IGN || func == SIG_DFL)
+       /* Keep old signal catcher until it is completely de-installed */
+       _M.m6_f1 = func;
+  else {
+       /* Use new signal catcher immediately (old one may not exist) */
+       _vectab[signr - 1] = func;
+       _M.m6_f1 = _begsig;
+  }
+  r = _callx(MM, SIGNAL);
+  if (r < 0) {
+       _vectab[signr - 1] = old;/* undo any pre-installation */
+       return((void (*) ()) r);
+  }
+  _vectab[signr - 1] = func;   /* redo any pre-installation */
+  if (r == 1) return(SIG_IGN);
+  return(old);
+}
diff --git a/mach/minixST/libsys/_stat.c b/mach/minixST/libsys/_stat.c
new file mode 100644 (file)
index 0000000..329b014
--- /dev/null
@@ -0,0 +1,11 @@
+#include <lib.h>
+#define stat   _stat
+#include <sys/stat.h>
+
+PUBLIC int stat(name, buffer)
+_CONST char *name;
+struct stat *buffer;
+{
+  return(_callm1(FS, STAT, _len(name), 0, 0,
+               (char *)name, (char *)buffer, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_stime.c b/mach/minixST/libsys/_stime.c
new file mode 100644 (file)
index 0000000..9fa8e16
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#define stime _stime
+#include <unistd.h>
+
+PUBLIC int stime(top)
+long *top;
+{
+  _M.m2_l1 = *top;
+  return(_callx(FS, STIME));
+}
diff --git a/mach/minixST/libsys/_stty.c b/mach/minixST/libsys/_stty.c
new file mode 100644 (file)
index 0000000..a213e3e
--- /dev/null
@@ -0,0 +1,11 @@
+#include <lib.h>
+#define stty   _stty
+#define ioctl  _ioctl
+#include <sgtty.h>
+
+PUBLIC int stty(fd, argp)
+int fd;
+struct sgttyb *argp;
+{
+  return ioctl(fd, TIOCSETP, argp);
+}
diff --git a/mach/minixST/libsys/_sync.c b/mach/minixST/libsys/_sync.c
new file mode 100644 (file)
index 0000000..c72e862
--- /dev/null
@@ -0,0 +1,8 @@
+#include <lib.h>
+#define sync   _sync
+#include <unistd.h>
+
+PUBLIC int sync()
+{
+  return(_callm1(FS, SYNC, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_time.c b/mach/minixST/libsys/_time.c
new file mode 100644 (file)
index 0000000..22957e2
--- /dev/null
@@ -0,0 +1,18 @@
+#include <lib.h>
+#define time   _time
+#include <time.h>
+
+PUBLIC long time(tp)
+long *tp;
+{
+  int k;
+  long l;
+  k = _callm1(FS, TIME, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR);
+  if (_M.m_type < 0 || k != 0) {
+       errno = -_M.m_type;
+       return(-1L);
+  }
+  l = _M.m2_l1;
+  if (tp != (long *) 0) *tp = l;
+  return(l);
+}
diff --git a/mach/minixST/libsys/_times.c b/mach/minixST/libsys/_times.c
new file mode 100644 (file)
index 0000000..223c8b3
--- /dev/null
@@ -0,0 +1,17 @@
+#include <lib.h>
+#include <sys/types.h>
+#include <time.h>
+#define times  _times
+#include <sys/times.h>
+
+PUBLIC clock_t times(buf)
+struct tms *buf;
+{
+  clock_t k;
+  k = (clock_t)_callm1(FS, TIMES, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR);
+  buf->tms_utime = _M.m4_l1;
+  buf->tms_stime = _M.m4_l2;
+  buf->tms_cutime = _M.m4_l3;
+  buf->tms_cstime = _M.m4_l4;
+  return(k);
+}
diff --git a/mach/minixST/libsys/_umask.c b/mach/minixST/libsys/_umask.c
new file mode 100644 (file)
index 0000000..70c80c3
--- /dev/null
@@ -0,0 +1,10 @@
+#include <lib.h>
+#include <sys/types.h>
+#define umask  _umask
+#include <sys/stat.h>
+
+PUBLIC mode_t umask(complmode)
+int complmode;
+{
+  return((mode_t)_callm1(FS, UMASK, (int)complmode, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/_umount.c b/mach/minixST/libsys/_umount.c
new file mode 100644 (file)
index 0000000..103538c
--- /dev/null
@@ -0,0 +1,9 @@
+#include <lib.h>
+#define umount _umount
+#include <unistd.h>
+
+PUBLIC int umount(name)
+_CONST char *name;
+{
+  return(_callm3(FS, UMOUNT, 0, name));
+}
diff --git a/mach/minixST/libsys/_unlink.c b/mach/minixST/libsys/_unlink.c
new file mode 100644 (file)
index 0000000..3d225a7
--- /dev/null
@@ -0,0 +1,9 @@
+#include <lib.h>
+#define unlink _unlink
+#include <unistd.h>
+
+PUBLIC int unlink(name)
+_CONST char *name;
+{
+  return(_callm3(FS, UNLINK, 0, name));
+}
diff --git a/mach/minixST/libsys/_utime.c b/mach/minixST/libsys/_utime.c
new file mode 100644 (file)
index 0000000..6586a83
--- /dev/null
@@ -0,0 +1,28 @@
+/* _utime(2) for POSIX         Authors: Terrence W. Holm & Edwin L. Froese */
+
+#include <lib.h>
+#include <stddef.h>
+#define time   _time
+#include <time.h>
+#define utime  _utime
+#include <utime.h>
+
+PUBLIC int utime(name, timp)
+char *name;
+struct utimbuf *timp;
+{
+  long current_time;
+
+  if (timp == (struct utimbuf *)NULL) {
+       current_time = time((long *)NULL);
+       _M.m2_l1 = current_time;
+       _M.m2_l2 = current_time;
+  } else {
+       _M.m2_l1 = timp->actime;
+       _M.m2_l2 = timp->modtime;
+  }
+
+  _M.m2_i1 = _len(name);
+  _M.m2_p1 = name;
+  return _callx(FS, UTIME);
+}
diff --git a/mach/minixST/libsys/_wait.c b/mach/minixST/libsys/_wait.c
new file mode 100644 (file)
index 0000000..c1c2322
--- /dev/null
@@ -0,0 +1,12 @@
+#include <lib.h>
+#define wait   _wait
+#include <sys/wait.h>
+
+PUBLIC int wait(status)
+int *status;
+{
+  int k;
+  k = _callm1(MM, WAIT, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR);
+  if (k >= 0 && status != 0) *status = _M.m2_i1;
+  return(k);
+}
diff --git a/mach/minixST/libsys/_write.c b/mach/minixST/libsys/_write.c
new file mode 100644 (file)
index 0000000..a64da03
--- /dev/null
@@ -0,0 +1,11 @@
+#include <lib.h>
+#define write  _write
+#include <unistd.h>
+
+PUBLIC int write(fd, buffer, nbytes)
+int fd;
+char *buffer;
+unsigned nbytes;
+{
+  return(_callm1(FS, WRITE, fd, nbytes, 0, buffer, NIL_PTR, NIL_PTR));
+}
diff --git a/mach/minixST/libsys/access.s b/mach/minixST/libsys/access.s
new file mode 100644 (file)
index 0000000..5c69768
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _access
+_access:
+       jmp __access
diff --git a/mach/minixST/libsys/alarm.s b/mach/minixST/libsys/alarm.s
new file mode 100644 (file)
index 0000000..5d1806e
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _alarm
+_alarm:
+       jmp __alarm
diff --git a/mach/minixST/libsys/brk.s b/mach/minixST/libsys/brk.s
new file mode 100644 (file)
index 0000000..1ab5012
--- /dev/null
@@ -0,0 +1,8 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _brk
+.define _sbrk
+_brk:
+       jmp __brk
+_sbrk:
+       jmp __sbrk
diff --git a/mach/minixST/libsys/chdir.s b/mach/minixST/libsys/chdir.s
new file mode 100644 (file)
index 0000000..f347483
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _chdir
+_chdir:
+       jmp __chdir
diff --git a/mach/minixST/libsys/chmod.s b/mach/minixST/libsys/chmod.s
new file mode 100644 (file)
index 0000000..591cd3a
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _chmod
+_chmod:
+       jmp __chmod
diff --git a/mach/minixST/libsys/chown.s b/mach/minixST/libsys/chown.s
new file mode 100644 (file)
index 0000000..d559c01
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _chown
+_chown:
+       jmp __chown
diff --git a/mach/minixST/libsys/chroot.s b/mach/minixST/libsys/chroot.s
new file mode 100644 (file)
index 0000000..082bee2
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _chroot
+_chroot:
+       jmp __chroot
diff --git a/mach/minixST/libsys/close.s b/mach/minixST/libsys/close.s
new file mode 100644 (file)
index 0000000..6bfbbb6
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _close
+_close:
+       jmp __close
diff --git a/mach/minixST/libsys/creat.s b/mach/minixST/libsys/creat.s
new file mode 100644 (file)
index 0000000..d10c180
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _creat
+_creat:
+       jmp __creat
diff --git a/mach/minixST/libsys/dup.s b/mach/minixST/libsys/dup.s
new file mode 100644 (file)
index 0000000..b4987c1
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _dup
+_dup:
+       jmp __dup
diff --git a/mach/minixST/libsys/dup2.s b/mach/minixST/libsys/dup2.s
new file mode 100644 (file)
index 0000000..6f39663
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _dup2
+_dup2:
+       jmp __dup2
diff --git a/mach/minixST/libsys/errno.c b/mach/minixST/libsys/errno.c
new file mode 100644 (file)
index 0000000..538fd57
--- /dev/null
@@ -0,0 +1,4 @@
+#include <lib.h>
+/* errno.c - declare variable errno             Author: F. Meulenbroeks */
+
+int errno = 0;
diff --git a/mach/minixST/libsys/exec.s b/mach/minixST/libsys/exec.s
new file mode 100644 (file)
index 0000000..0657aa3
--- /dev/null
@@ -0,0 +1,14 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _execl
+.define _execle
+.define _execv
+.define _execve
+_execl:
+       jmp __execl
+_execle:
+       jmp __execle
+_execv:
+       jmp __execv
+_execve:
+       jmp __execve
diff --git a/mach/minixST/libsys/execn.s b/mach/minixST/libsys/execn.s
new file mode 100644 (file)
index 0000000..39f10cb
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _execn
+_execn:
+       jmp __execn
diff --git a/mach/minixST/libsys/execnl.s b/mach/minixST/libsys/execnl.s
new file mode 100644 (file)
index 0000000..99c77fb
--- /dev/null
@@ -0,0 +1,8 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _execn
+.define _execnl
+_execn:
+       jmp __execn
+_execnl:
+       jmp __execnl
diff --git a/mach/minixST/libsys/fcntl.s b/mach/minixST/libsys/fcntl.s
new file mode 100644 (file)
index 0000000..bdeb686
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _fcntl
+_fcntl:
+       jmp __fcntl
diff --git a/mach/minixST/libsys/fork.s b/mach/minixST/libsys/fork.s
new file mode 100644 (file)
index 0000000..281576f
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _fork
+_fork:
+       jmp __fork
diff --git a/mach/minixST/libsys/fpathconf.c b/mach/minixST/libsys/fpathconf.c
new file mode 100644 (file)
index 0000000..923e63e
--- /dev/null
@@ -0,0 +1,60 @@
+/* POSIX fpathconf (Sec. 5.7.1)                Author: Andy Tanenbaum */
+
+#include <lib.h>
+#include <sys/types.h>
+#define fstat  _fstat
+#include <sys/stat.h>
+#include <errno.h>
+#include <limits.h>
+#include <unistd.h>
+
+PUBLIC long fpathconf(fd, name)
+int fd;                                /* file descriptor being interrogated */
+int name;                      /* property being inspected */
+{
+/* POSIX allows some of the values in <limits.h> to be increased at
+ * run time.  The pathconf and fpathconf functions allow these values
+ * to be checked at run time.  MINIX does not use this facility.
+ * The run-time limits are those given in <limits.h>.
+ */
+
+  struct stat stbuf;
+
+  switch(name) {
+       case _PC_LINK_MAX:
+               /* Fstat the file.  If that fails, return -1. */
+               if (fstat(fd, &stbuf) != 0) return(-1L);
+               if (S_ISDIR(stbuf.st_mode))
+                       return(1L);     /* no links to directories */
+               else
+                       return( (long) LINK_MAX);
+
+       case _PC_MAX_CANON:
+               return( (long) MAX_CANON);
+
+       case _PC_MAX_INPUT:
+               return( (long) MAX_INPUT);
+
+       case _PC_NAME_MAX:
+               return( (long) NAME_MAX);
+
+       case _PC_PATH_MAX:
+               return( (long) PATH_MAX);
+
+       case _PC_PIPE_BUF:
+               return( (long) PIPE_BUF);
+
+       case _PC_CHOWN_RESTRICTED:
+               return( (long) 1);      /* MINIX defines CHOWN_RESTRICTED */
+
+       case _PC_NO_TRUNC:              /* MINIX does not define NO_TRUNC */
+               return( (long) 0);
+
+       case _PC_VDISABLE:              /* MINIX defines VDISABLE */
+               return( (long) _POSIX_VDISABLE);
+
+       default:
+               errno = EINVAL;
+               return(-1L);
+  }
+}
diff --git a/mach/minixST/libsys/fstat.s b/mach/minixST/libsys/fstat.s
new file mode 100644 (file)
index 0000000..7d14ae9
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _fstat
+_fstat:
+       jmp __fstat
diff --git a/mach/minixST/libsys/getcwd.s b/mach/minixST/libsys/getcwd.s
new file mode 100644 (file)
index 0000000..e1afecc
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _getcwd
+_getcwd:
+       jmp __getcwd
diff --git a/mach/minixST/libsys/getegid.s b/mach/minixST/libsys/getegid.s
new file mode 100644 (file)
index 0000000..f0f4af3
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _getegid
+_getegid:
+       jmp __getegid
diff --git a/mach/minixST/libsys/geteuid.s b/mach/minixST/libsys/geteuid.s
new file mode 100644 (file)
index 0000000..6a9fd25
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _geteuid
+_geteuid:
+       jmp __geteuid
diff --git a/mach/minixST/libsys/getgid.s b/mach/minixST/libsys/getgid.s
new file mode 100644 (file)
index 0000000..2e950b2
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _getgid
+_getgid:
+       jmp __getgid
diff --git a/mach/minixST/libsys/getpid.s b/mach/minixST/libsys/getpid.s
new file mode 100644 (file)
index 0000000..9338723
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _getpid
+_getpid:
+       jmp __getpid
diff --git a/mach/minixST/libsys/getppid.s b/mach/minixST/libsys/getppid.s
new file mode 100644 (file)
index 0000000..95ffedc
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _getppid
+_getppid:
+       jmp __getppid
diff --git a/mach/minixST/libsys/getuid.s b/mach/minixST/libsys/getuid.s
new file mode 100644 (file)
index 0000000..2073f73
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _getuid
+_getuid:
+       jmp __getuid
diff --git a/mach/minixST/libsys/gtty.s b/mach/minixST/libsys/gtty.s
new file mode 100644 (file)
index 0000000..18e0c15
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _gtty
+_gtty:
+       jmp __gtty
diff --git a/mach/minixST/libsys/ioctl.s b/mach/minixST/libsys/ioctl.s
new file mode 100644 (file)
index 0000000..ffdf4aa
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _ioctl
+_ioctl:
+       jmp __ioctl
diff --git a/mach/minixST/libsys/kill.s b/mach/minixST/libsys/kill.s
new file mode 100644 (file)
index 0000000..97b4067
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _kill
+_kill:
+       jmp __kill
diff --git a/mach/minixST/libsys/link.s b/mach/minixST/libsys/link.s
new file mode 100644 (file)
index 0000000..99c8879
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _link
+_link:
+       jmp __link
diff --git a/mach/minixST/libsys/lseek.s b/mach/minixST/libsys/lseek.s
new file mode 100644 (file)
index 0000000..1da1339
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _lseek
+_lseek:
+       jmp __lseek
diff --git a/mach/minixST/libsys/mkdir.s b/mach/minixST/libsys/mkdir.s
new file mode 100644 (file)
index 0000000..da3ea01
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _mkdir
+_mkdir:
+       jmp __mkdir
diff --git a/mach/minixST/libsys/mkfifo.s b/mach/minixST/libsys/mkfifo.s
new file mode 100644 (file)
index 0000000..9959ff4
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _mkfifo
+_mkfifo:
+       jmp __mkfifo
diff --git a/mach/minixST/libsys/mknod.s b/mach/minixST/libsys/mknod.s
new file mode 100644 (file)
index 0000000..0f99912
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _mknod
+_mknod:
+       jmp __mknod
diff --git a/mach/minixST/libsys/mknod4.s b/mach/minixST/libsys/mknod4.s
new file mode 100644 (file)
index 0000000..37ecdbc
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _mknod4
+_mknod4:
+       jmp __mknod4
diff --git a/mach/minixST/libsys/mktemp.s b/mach/minixST/libsys/mktemp.s
new file mode 100644 (file)
index 0000000..cc5b48b
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _mktemp
+_mktemp:
+       jmp __mktemp
diff --git a/mach/minixST/libsys/mount.s b/mach/minixST/libsys/mount.s
new file mode 100644 (file)
index 0000000..7d1ea56
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _mount
+_mount:
+       jmp __mount
diff --git a/mach/minixST/libsys/open.s b/mach/minixST/libsys/open.s
new file mode 100644 (file)
index 0000000..e8d1935
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _open
+_open:
+       jmp __open
diff --git a/mach/minixST/libsys/pathconf.c b/mach/minixST/libsys/pathconf.c
new file mode 100644 (file)
index 0000000..6473feb
--- /dev/null
@@ -0,0 +1,28 @@
+/* POSIX pathconf (Sec. 5.7.1)                 Author: Andy Tanenbaum */
+
+#include <lib.h>
+#include <sys/types.h>
+#define open   _open
+#include <fcntl.h>
+#include <errno.h>
+#define close  _close
+#include <unistd.h>
+
+PUBLIC long pathconf(path, name)
+char *path;                    /* name of file being interrogated */
+int name;                      /* property being inspected */
+{
+/* POSIX allows some of the values in <limits.h> to be increased at
+ * run time.  The pathconf and fpathconf functions allow these values
+ * to be checked at run time.  MINIX does not use this facility.
+ * The run-time limits are those given in <limits.h>.
+ */
+
+  int fd;
+  long val;
+
+  if ( (fd = open(path, O_RDONLY)) < 0) return(-1L);
+  val = fpathconf(fd, name);
+  close(fd);
+  return(val);
+}
diff --git a/mach/minixST/libsys/pause.s b/mach/minixST/libsys/pause.s
new file mode 100644 (file)
index 0000000..b50185d
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _pause
+_pause:
+       jmp __pause
diff --git a/mach/minixST/libsys/pipe.s b/mach/minixST/libsys/pipe.s
new file mode 100644 (file)
index 0000000..fedc499
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _pipe
+_pipe:
+       jmp __pipe
diff --git a/mach/minixST/libsys/ptrace.s b/mach/minixST/libsys/ptrace.s
new file mode 100644 (file)
index 0000000..8159241
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _ptrace
+_ptrace:
+       jmp __ptrace
diff --git a/mach/minixST/libsys/read.s b/mach/minixST/libsys/read.s
new file mode 100644 (file)
index 0000000..6251858
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _read
+_read:
+       jmp __read
diff --git a/mach/minixST/libsys/rename.s b/mach/minixST/libsys/rename.s
new file mode 100644 (file)
index 0000000..928cc95
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _rename
+_rename:
+       jmp __rename
diff --git a/mach/minixST/libsys/rmdir.s b/mach/minixST/libsys/rmdir.s
new file mode 100644 (file)
index 0000000..00ae365
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _rmdir
+_rmdir:
+       jmp __rmdir
diff --git a/mach/minixST/libsys/setgid.s b/mach/minixST/libsys/setgid.s
new file mode 100644 (file)
index 0000000..c6c25dd
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _setgid
+_setgid:
+       jmp __setgid
diff --git a/mach/minixST/libsys/setuid.s b/mach/minixST/libsys/setuid.s
new file mode 100644 (file)
index 0000000..d01684a
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _setuid
+_setuid:
+       jmp __setuid
diff --git a/mach/minixST/libsys/signal.s b/mach/minixST/libsys/signal.s
new file mode 100644 (file)
index 0000000..aa8aa37
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _signal
+_signal:
+       jmp __signal
diff --git a/mach/minixST/libsys/stat.s b/mach/minixST/libsys/stat.s
new file mode 100644 (file)
index 0000000..4df16b4
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _stat
+_stat:
+       jmp __stat
diff --git a/mach/minixST/libsys/stime.s b/mach/minixST/libsys/stime.s
new file mode 100644 (file)
index 0000000..f016d6c
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _stime
+_stime:
+       jmp __stime
diff --git a/mach/minixST/libsys/stty.s b/mach/minixST/libsys/stty.s
new file mode 100644 (file)
index 0000000..c3ae0e8
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _stty
+_stty:
+       jmp __stty
diff --git a/mach/minixST/libsys/sync.s b/mach/minixST/libsys/sync.s
new file mode 100644 (file)
index 0000000..2ab0b5d
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _sync
+_sync:
+       jmp __sync
diff --git a/mach/minixST/libsys/time.s b/mach/minixST/libsys/time.s
new file mode 100644 (file)
index 0000000..cc6dde2
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _time
+_time:
+       jmp __time
diff --git a/mach/minixST/libsys/times.s b/mach/minixST/libsys/times.s
new file mode 100644 (file)
index 0000000..8085dbe
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _times
+_times:
+       jmp __times
diff --git a/mach/minixST/libsys/umask.s b/mach/minixST/libsys/umask.s
new file mode 100644 (file)
index 0000000..4658ef8
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _umask
+_umask:
+       jmp __umask
diff --git a/mach/minixST/libsys/umount.s b/mach/minixST/libsys/umount.s
new file mode 100644 (file)
index 0000000..1de4961
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _umount
+_umount:
+       jmp __umount
diff --git a/mach/minixST/libsys/unlink.s b/mach/minixST/libsys/unlink.s
new file mode 100644 (file)
index 0000000..f3d7d48
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _unlink
+_unlink:
+       jmp __unlink
diff --git a/mach/minixST/libsys/utime.s b/mach/minixST/libsys/utime.s
new file mode 100644 (file)
index 0000000..ce53ead
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _utime
+_utime:
+       jmp __utime
diff --git a/mach/minixST/libsys/vectab.c b/mach/minixST/libsys/vectab.c
new file mode 100644 (file)
index 0000000..54eed90
--- /dev/null
@@ -0,0 +1,10 @@
+/* When the signal call is made, a pointer to the function to be called
+ * is stored in this table.  When the interrupt comes in from the kernel,
+ * the function is called within the user address space using _vectab[].
+ */
+
+#include <lib.h>
+#include <signal.h>
+
+/* array of functions to catch signals */
+_PROTOTYPE( void (*_vectab[_NSIG]), (int));
diff --git a/mach/minixST/libsys/wait.s b/mach/minixST/libsys/wait.s
new file mode 100644 (file)
index 0000000..cb723f5
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _wait
+_wait:
+       jmp __wait
diff --git a/mach/minixST/libsys/write.s b/mach/minixST/libsys/write.s
new file mode 100644 (file)
index 0000000..9ff32a7
--- /dev/null
@@ -0,0 +1,5 @@
+.sect .text; .sect .rom; .sect .data; .sect .bss
+.sect .text
+.define _write
+_write:
+       jmp __write