fix xfree() so it can be re-written as a macro
[unix-history] / usr / src / bin / csh / misc.c
index fdb2eaa..e8398f9 100644 (file)
@@ -6,12 +6,22 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)misc.c     5.8 (Berkeley) %G%";
+static char sccsid[] = "@(#)misc.c     5.15 (Berkeley) %G%";
 #endif /* not lint */
 
 #endif /* not lint */
 
-#include "sh.h"
+#include <sys/param.h>
+#include <stdlib.h>
+#include <unistd.h>
+#if __STDC__
+# include <stdarg.h>
+#else
+# include <varargs.h>
+#endif
+
+#include "csh.h"
+#include "extern.h"
 
 
-static int renum();
+static int     renum __P((int, int));
 
 int
 any(s, c)
 
 int
 any(s, c)
@@ -44,7 +54,7 @@ strsave(s)
     char   *n;
     register char *p;
 
     char   *n;
     register char *p;
 
-    if (s == 0)
+    if (s == NULL)
        s = "";
     for (p = s; *p++;);
     n = p = (char *) xmalloc((size_t) ((p - s) * sizeof(char)));
        s = "";
     for (p = s; *p++;);
     n = p = (char *) xmalloc((size_t) ((p - s) * sizeof(char)));
@@ -64,14 +74,15 @@ blkend(up)
 
 
 void
 
 
 void
-blkpr(av)
+blkpr(fp, av)
+    FILE *fp;
     register Char **av;
 {
 
     for (; *av; av++) {
     register Char **av;
 {
 
     for (; *av; av++) {
-       xprintf("%s", short2str(*av));
+       (void) fprintf(fp, "%s", short2str(*av));
        if (av[1])
        if (av[1])
-           xprintf(" ");
+           (void) fprintf(fp, " ");
     }
 }
 
     }
 }
 
@@ -147,7 +158,7 @@ strstr(s, t)
                return (s);
        while (*ss++ == *tt++);
     } while (*s++ != '\0');
                return (s);
        while (*ss++ == *tt++);
     } while (*s++ != '\0');
-    return ((char *) 0);
+    return (NULL);
 }
 
 #endif /* NOTUSED */
 }
 
 #endif /* NOTUSED */
@@ -210,7 +221,7 @@ closem()
     register int f;
 
     for (f = 0; f < NOFILE; f++)
     register int f;
 
     for (f = 0; f < NOFILE; f++)
-       if (f != SHIN && f != SHOUT && f != SHDIAG && f != OLDSTD &&
+       if (f != SHIN && f != SHOUT && f != SHERR && f != OLDSTD &&
            f != FSHTTY)
            (void) close(f);
 }
            f != FSHTTY)
            (void) close(f);
 }
@@ -218,10 +229,10 @@ closem()
 void
 donefds()
 {
 void
 donefds()
 {
-
     (void) close(0);
     (void) close(1);
     (void) close(2);
     (void) close(0);
     (void) close(1);
     (void) close(2);
+
     didfds = 0;
 }
 
     didfds = 0;
 }
 
@@ -239,6 +250,8 @@ dmove(i, j)
        return (i);
     if (j >= 0) {
        (void) dup2(i, j);
        return (i);
     if (j >= 0) {
        (void) dup2(i, j);
+       if (j != i)
+           (void) close(i);
        return (j);
     }
     j = dcopy(i, j);
        return (j);
     }
     j = dcopy(i, j);
@@ -290,10 +303,10 @@ lshift(v, c)
     register Char **v;
     register int c;
 {
     register Char **v;
     register int c;
 {
-    register Char **u = v;
+    register Char **u;
 
 
-    while (*u && --c >= 0)
-       xfree((ptr_t) * u++);
+    for (u = v; *u && --c >= 0; u++)
+       xfree((ptr_t) *u);
     (void) blkcpy(v, u);
 }
 
     (void) blkcpy(v, u);
 }