39 lines
951 B
C
39 lines
951 B
C
/*
|
|
* Copyright (c) 1986 Regents of the University of California.
|
|
* All rights reserved. The Berkeley software License Agreement
|
|
* specifies the terms and conditions for redistribution.
|
|
*/
|
|
#include <sys/param.h>
|
|
#include <sys/user.h>
|
|
#include <sys/proc.h>
|
|
#include <sys/vm.h>
|
|
#include <sys/systm.h>
|
|
|
|
void
|
|
brk()
|
|
{
|
|
struct a {
|
|
int naddr;
|
|
};
|
|
register int newsize, d;
|
|
|
|
/* set newsize to new data size */
|
|
newsize = ((struct a*)u.u_arg)->naddr - u.u_procp->p_daddr;
|
|
if (newsize < 0)
|
|
newsize = 0;
|
|
if (u.u_tsize + newsize + u.u_ssize > MAXMEM) {
|
|
u.u_error = ENOMEM;
|
|
return;
|
|
}
|
|
|
|
u.u_procp->p_dsize = newsize;
|
|
|
|
/* set d to (new - old) */
|
|
d = newsize - u.u_dsize;
|
|
//printf ("brk: new size %u bytes, incremented by %d\n", newsize, d);
|
|
if (d > 0)
|
|
bzero ((void*) (u.u_procp->p_daddr + u.u_dsize), d);
|
|
u.u_dsize = newsize;
|
|
u.u_rval = u.u_procp->p_daddr + u.u_dsize;
|
|
}
|