- static int maxdmap = 0;
-
- if (ts > MAXTSIZ || ds > MAXDSIZ || ss > MAXSSIZ) {
- u.u_error = ENOMEM;
- return (1);
- }
- /* check for swap map overflow */
- if (maxdmap == 0) {
- register int i, blk;
-
- blk = dmmin;
- for (i = 0; i < NDMAP; i++) {
- maxdmap += blk;
- if (blk < dmmax)
- blk *= 2;
- }
- }
- if (ctod(ts) > NXDAD * dmtext ||
- ctod(ds) > maxdmap || ctod(ss) > maxdmap) {
- u.u_error = ENOMEM;
- return (1);
- }
- /*
- * Make sure the process isn't bigger than our
- * virtual memory limit.
- *
- * THERE SHOULD BE A CONSTANT FOR THIS.
- */
- if (ts + ds + ss + LOWPAGES + HIGHPAGES > btoc(USRSTACK)) {
- u.u_error = ENOMEM;
- return (1);
+ extern unsigned maxtsize;
+
+ if (ctob(ts) > maxtsize ||
+ ctob(ids) > u.u_rlimit[RLIMIT_DATA].rlim_cur ||
+ ctob(uds) > u.u_rlimit[RLIMIT_DATA].rlim_cur ||
+ ctob(ids + uds) > u.u_rlimit[RLIMIT_DATA].rlim_cur ||
+ ctob(ss) > u.u_rlimit[RLIMIT_STACK].rlim_cur) {
+ return (ENOMEM);