cleanup, add manual pages
[unix-history] / usr / src / old / make / dosys.c
index de5fdb9..738fb70 100644 (file)
@@ -1,4 +1,4 @@
-static char *sccsid = "@(#)dosys.c     4.4 (Berkeley) 82/06/17";
+static char *sccsid = "@(#)dosys.c     4.11 (Berkeley) %G%";
 #include "defs"
 #include <signal.h>
 
 #include "defs"
 #include <signal.h>
 
@@ -73,31 +73,32 @@ enbint(intrupt);
 return(status);
 }
 
 return(status);
 }
 
-
-
-
-
-
-doclose()      /* Close open directory files before exec'ing */
+/*
+ * Close open directory files before exec'ing
+ */
+doclose()
 {
 register struct dirhdr *od;
 
 for (od = firstod; od; od = od->nxtopendir)
 {
 register struct dirhdr *od;
 
 for (od = firstod; od; od = od->nxtopendir)
-       if (od->dirfc != NULL) {
-               closedir(od->dirfc);
-               od->dirfc = NULL;
-       }
+       if (od->dirfc != NULL)
+               /*
+                * vfork kludge...
+                * we cannot call closedir since this will modify
+                * the parents data space; just call close directly.
+                */
+               (void)close(dirfd(od->dirfc));
 }
 \f
 
 
 }
 \f
 
 
-
+#define MAXARGV        400
 
 doexec(str)
 register char *str;
 {
 register char *t;
 
 doexec(str)
 register char *str;
 {
 register char *t;
-char *argv[200];
+char *argv[MAXARGV];
 register char **p;
 
 while( *str==' ' || *str=='\t' )
 register char **p;
 
 while( *str==' ' || *str=='\t' )
@@ -108,6 +109,8 @@ if( *str == '\0' )
 p = argv;
 for(t = str ; *t ; )
        {
 p = argv;
 for(t = str ; *t ; )
        {
+       if (p >= argv + MAXARGV)
+               fatal1("%s: Too many arguments.", str);
        *p++ = t;
        while(*t!=' ' && *t!='\t' && *t!='\0')
                ++t;
        *p++ = t;
        while(*t!=' ' && *t!='\t' && *t!='\0')
                ++t;
@@ -136,7 +139,6 @@ return( await() );
 
 
 
 
 
 
-
 touch(force, name)
 int force;
 char *name;
 touch(force, name)
 int force;
 char *name;