int incr;
{
char *newsize, *oldsize;
- extern int endv, dorgv;
oldsize = brksize;
newsize = brksize + incr;
- if (incr > 0 && newsize < oldsize) return( (char *) -1);
+ if (incr > 0 && newsize < oldsize || incr < 0 && newsize > oldsize)
+ return( (char *) -1);
if (brk(newsize) == 0)
return(oldsize);
else
#include "lib.h"
-char *nullptr[1]; /* the EXEC calls need a zero pointer */
+extern char **environ; /* environment pointer */
#define PTRSIZE sizeof(char *)
char *name;
char *arg0;
{
- return execve(name, &arg0, nullptr);
+ return execve(name, &arg0, environ);
}
PUBLIC int execle(name, argv)
PUBLIC int execv(name, argv)
char *name, *argv[];
{
- return execve(name, argv, nullptr);
+ return execve(name, argv, environ);
}
} u;
{
- int n;
- long erase, kill, intr, quit, xon, xoff, eof, brk;
+ int n, ispeed, ospeed;
+ long erase, kill, intr, quit, xon, xoff, eof, brk, speed;
M.TTY_REQUEST = request;
M.TTY_LINE = fd;
switch(request) {
case TIOCSETP:
- erase = u.argp->sg_erase & 0377;
- kill = u.argp->sg_kill & 0377;
+ erase = u.argp->sg_erase & BYTE;
+ kill = u.argp->sg_kill & BYTE;
M.TTY_SPEK = (erase << 8) | kill;
M.TTY_FLAGS = u.argp->sg_flags;
+ M.TTY_SPEED = (u.argp->sg_ospeed << 8) | u.argp->sg_ispeed;
n = callx(FS, IOCTL);
return(n);
case TIOCSETC:
- intr = u.argt->t_intrc & 0377;
- quit = u.argt->t_quitc & 0377;
- xon = u.argt->t_startc & 0377;
- xoff = u.argt->t_stopc & 0377;
- eof = u.argt->t_eofc & 0377;
- brk = u.argt->t_brkc & 0377; /* not used at the moment */
+ intr = u.argt->t_intrc & BYTE;
+ quit = u.argt->t_quitc & BYTE;
+ xon = u.argt->t_startc & BYTE;
+ xoff = u.argt->t_stopc & BYTE;
+ eof = u.argt->t_eofc & BYTE;
+ brk = u.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);
case TIOCGETP:
n = callx(FS, IOCTL);
- u.argp->sg_erase = (M.TTY_SPEK >> 8) & 0377;
- u.argp->sg_kill = (M.TTY_SPEK >> 0) & 0377;
- u.argp->sg_flags = M.TTY_FLAGS;
+ u.argp->sg_erase = (M.TTY_SPEK >> 8) & BYTE;
+ u.argp->sg_kill = (M.TTY_SPEK >> 0) & BYTE;
+ u.argp->sg_flags = M.TTY_FLAGS & 0xFFFF;
+ speed = (M.TTY_FLAGS >> 16) & 0xFFFFL;
+ u.argp->sg_ispeed = speed & BYTE;
+ u.argp->sg_ospeed = (speed >> 8) & BYTE;
return(n);
case TIOCGETC:
n = callx(FS, IOCTL);
- u.argt->t_intrc = (M.TTY_SPEK >> 24) & 0377;
- u.argt->t_quitc = (M.TTY_SPEK >> 16) & 0377;
- u.argt->t_startc = (M.TTY_SPEK >> 8) & 0377;
- u.argt->t_stopc = (M.TTY_SPEK >> 0) & 0377;
- u.argt->t_eofc = (M.TTY_FLAGS >> 8) & 0377;
- u.argt->t_brkc = (M.TTY_FLAGS >> 8) & 0377;
+ u.argt->t_intrc = (M.TTY_SPEK >> 24) & BYTE;
+ u.argt->t_quitc = (M.TTY_SPEK >> 16) & BYTE;
+ u.argt->t_startc = (M.TTY_SPEK >> 8) & BYTE;
+ u.argt->t_stopc = (M.TTY_SPEK >> 0) & BYTE;
+ u.argt->t_eofc = (M.TTY_FLAGS >> 8) & BYTE;
+ u.argt->t_brkc = (M.TTY_FLAGS >> 8) & BYTE;
return(n);
default:
#endif
+PUBLIC sys_kill(proc, sig)
+int proc; /* which proc has exited */
+int sig; /* signal number: 1 - 16 */
+{
+/* A proc has to be signaled via MM. Tell the kernel. */
+
+ M.m6_i1 = proc;
+ M.m6_i2 = sig;
+ callx(SYSTASK, SYS_KILL);
+}
+
+
PUBLIC int tell_fs(what, p1, p2, p3)
int what, p1, p2, p3;
{
{
int k;
k = callm1(MM, WAIT, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR);
- if (status != 0) *status = M.m2_i1;
+ if (k >= 0 && status != 0) *status = M.m2_i1;
return(k);
}
int incr;
{
char *newsize, *oldsize;
- extern int endv, dorgv;
oldsize = brksize;
newsize = brksize + incr;
- if (incr > 0 && newsize < oldsize) return( (char *) -1);
+ if (incr > 0 && newsize < oldsize || incr < 0 && newsize > oldsize)
+ return( (char *) -1);
if (brk(newsize) == 0)
return(oldsize);
else
#include "lib.h"
-char *nullptr[1]; /* the EXEC calls need a zero pointer */
+extern char **environ; /* environment pointer */
#define PTRSIZE sizeof(char *)
char *name;
char *arg0;
{
- return execve(name, &arg0, nullptr);
+ return execve(name, &arg0, environ);
}
PUBLIC int execle(name, argv)
PUBLIC int execv(name, argv)
char *name, *argv[];
{
- return execve(name, argv, nullptr);
+ return execve(name, argv, environ);
}
} u;
{
- int n;
- long erase, kill, intr, quit, xon, xoff, eof, brk;
+ int n, ispeed, ospeed;
+ long erase, kill, intr, quit, xon, xoff, eof, brk, speed;
M.TTY_REQUEST = request;
M.TTY_LINE = fd;
switch(request) {
case TIOCSETP:
- erase = u.argp->sg_erase & 0377;
- kill = u.argp->sg_kill & 0377;
+ erase = u.argp->sg_erase & BYTE;
+ kill = u.argp->sg_kill & BYTE;
M.TTY_SPEK = (erase << 8) | kill;
M.TTY_FLAGS = u.argp->sg_flags;
+ M.TTY_SPEED = (u.argp->sg_ospeed << 8) | u.argp->sg_ispeed;
n = callx(FS, IOCTL);
return(n);
case TIOCSETC:
- intr = u.argt->t_intrc & 0377;
- quit = u.argt->t_quitc & 0377;
- xon = u.argt->t_startc & 0377;
- xoff = u.argt->t_stopc & 0377;
- eof = u.argt->t_eofc & 0377;
- brk = u.argt->t_brkc & 0377; /* not used at the moment */
+ intr = u.argt->t_intrc & BYTE;
+ quit = u.argt->t_quitc & BYTE;
+ xon = u.argt->t_startc & BYTE;
+ xoff = u.argt->t_stopc & BYTE;
+ eof = u.argt->t_eofc & BYTE;
+ brk = u.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);
case TIOCGETP:
n = callx(FS, IOCTL);
- u.argp->sg_erase = (M.TTY_SPEK >> 8) & 0377;
- u.argp->sg_kill = (M.TTY_SPEK >> 0) & 0377;
- u.argp->sg_flags = M.TTY_FLAGS;
+ u.argp->sg_erase = (M.TTY_SPEK >> 8) & BYTE;
+ u.argp->sg_kill = (M.TTY_SPEK >> 0) & BYTE;
+ u.argp->sg_flags = M.TTY_FLAGS & 0xFFFF;
+ speed = (M.TTY_FLAGS >> 16) & 0xFFFFL;
+ u.argp->sg_ispeed = speed & BYTE;
+ u.argp->sg_ospeed = (speed >> 8) & BYTE;
return(n);
case TIOCGETC:
n = callx(FS, IOCTL);
- u.argt->t_intrc = (M.TTY_SPEK >> 24) & 0377;
- u.argt->t_quitc = (M.TTY_SPEK >> 16) & 0377;
- u.argt->t_startc = (M.TTY_SPEK >> 8) & 0377;
- u.argt->t_stopc = (M.TTY_SPEK >> 0) & 0377;
- u.argt->t_eofc = (M.TTY_FLAGS >> 8) & 0377;
- u.argt->t_brkc = (M.TTY_FLAGS >> 8) & 0377;
+ u.argt->t_intrc = (M.TTY_SPEK >> 24) & BYTE;
+ u.argt->t_quitc = (M.TTY_SPEK >> 16) & BYTE;
+ u.argt->t_startc = (M.TTY_SPEK >> 8) & BYTE;
+ u.argt->t_stopc = (M.TTY_SPEK >> 0) & BYTE;
+ u.argt->t_eofc = (M.TTY_FLAGS >> 8) & BYTE;
+ u.argt->t_brkc = (M.TTY_FLAGS >> 8) & BYTE;
return(n);
default:
#endif
+PUBLIC sys_kill(proc, sig)
+int proc; /* which proc has exited */
+int sig; /* signal number: 1 - 16 */
+{
+/* A proc has to be signaled via MM. Tell the kernel. */
+
+ M.m6_i1 = proc;
+ M.m6_i2 = sig;
+ callx(SYSTASK, SYS_KILL);
+}
+
+
PUBLIC int tell_fs(what, p1, p2, p3)
int what, p1, p2, p3;
{
{
int k;
k = callm1(MM, WAIT, 0, 0, 0, NIL_PTR, NIL_PTR, NIL_PTR);
- if (status != 0) *status = M.m2_i1;
+ if (k >= 0 && status != 0) *status = M.m2_i1;
return(k);
}