alloc tables at boot time version
[unix-history] / usr / src / sys / kern / kern_proc.c
index b985dca..06600e0 100644 (file)
@@ -1,4 +1,4 @@
-/*     kern_proc.c     4.4     %G%     */
+/*     kern_proc.c     4.7     %G%     */
 
 #include "../h/param.h"
 #include "../h/systm.h"
 
 #include "../h/param.h"
 #include "../h/systm.h"
@@ -66,6 +66,8 @@ exece()
   again:
        if(access(ip, IEXEC))
                goto bad;
   again:
        if(access(ip, IEXEC))
                goto bad;
+       if((u.u_procp->p_flag&STRC) && access(ip, IREAD))
+               goto bad;
        if((ip->i_mode & IFMT) != IFREG ||
           (ip->i_mode & (IEXEC|(IEXEC>>3)|(IEXEC>>6))) == 0) {
                u.u_error = EACCES;
        if((ip->i_mode & IFMT) != IFREG ||
           (ip->i_mode & (IEXEC|(IEXEC>>3)|(IEXEC>>6))) == 0) {
                u.u_error = EACCES;
@@ -299,7 +301,7 @@ register struct inode *ip;
        if(u.u_exdata.ux_tsize!=0 && (ip->i_flag&ITEXT)==0 && ip->i_count!=1) {
                register struct file *fp;
 
        if(u.u_exdata.ux_tsize!=0 && (ip->i_flag&ITEXT)==0 && ip->i_count!=1) {
                register struct file *fp;
 
-               for (fp = file; fp < &file[NFILE]; fp++)
+               for (fp = file; fp < fileNFILE; fp++)
                        if (fp->f_inode == ip && (fp->f_flag&FWRITE)) {
                                u.u_error = ETXTBSY;
                                goto bad;
                        if (fp->f_inode == ip && (fp->f_flag&FWRITE)) {
                                u.u_error = ETXTBSY;
                                goto bad;
@@ -573,7 +575,7 @@ done:
        ((struct xproc *)p)->xp_xstat = rv;             /* overlay */
        ((struct xproc *)p)->xp_vm = u.u_vm;            /* overlay */
        vmsadd(&((struct xproc *)p)->xp_vm, &u.u_cvm);
        ((struct xproc *)p)->xp_xstat = rv;             /* overlay */
        ((struct xproc *)p)->xp_vm = u.u_vm;            /* overlay */
        vmsadd(&((struct xproc *)p)->xp_vm, &u.u_cvm);
-       for(q = &proc[0]; q < &proc[NPROC]; q++)
+       for(q = proc; q < procNPROC; q++)
                if(q->p_pptr == p) {
                        q->p_pptr = &proc[1];
                        q->p_ppid = 1;
                if(q->p_pptr == p) {
                        q->p_pptr = &proc[1];
                        q->p_ppid = 1;
@@ -637,7 +639,7 @@ wait1(options, vp)
 
        f = 0;
 loop:
 
        f = 0;
 loop:
-       for(p = &proc[0]; p < &proc[NPROC]; p++)
+       for(p = proc; p < procNPROC; p++)
        if(p->p_pptr == u.u_procp) {
                f++;
                if(p->p_stat == SZOMB) {
        if(p->p_pptr == u.u_procp) {
                f++;
                if(p->p_stat == SZOMB) {
@@ -707,7 +709,7 @@ fork1(isvfork)
 
        a = 0;
        p2 = NULL;
 
        a = 0;
        p2 = NULL;
-       for(p1 = &proc[0]; p1 < &proc[NPROC]; p1++) {
+       for(p1 = proc; p1 < procNPROC; p1++) {
                if (p1->p_stat==NULL && p2==NULL)
                        p2 = p1;
                else {
                if (p1->p_stat==NULL && p2==NULL)
                        p2 = p1;
                else {
@@ -721,7 +723,7 @@ fork1(isvfork)
         *  not su and too many procs owned; or
         *  not su and would take last slot.
         */
         *  not su and too many procs owned; or
         *  not su and would take last slot.
         */
-       if (p2==NULL || (u.u_uid!=0 && (p2==&proc[NPROC-1] || a>MAXUPRC))) {
+       if (p2==NULL || (u.u_uid!=0 && (p2==procNPROC-1 || a>MAXUPRC))) {
                u.u_error = EAGAIN;
                if (!isvfork) {
                        (void) vsexpand(0, &u.u_cdmap, 1);
                u.u_error = EAGAIN;
                if (!isvfork) {
                        (void) vsexpand(0, &u.u_cdmap, 1);