components/ksh93/patches/100-CR6964621.patch
author Norm Jacobs <Norm.Jacobs@Oracle.COM>
Mon, 27 Apr 2015 10:19:50 -0500
changeset 4196 d697072a92f5
parent 805 components/ksh93/patches/CR6964621.patch@23c55a2f8a8e
child 4268 d723f8ed85fe
permissions -rw-r--r--
19782029 userland should be able to build from SCM repositories
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
     1
diff -rupN INIT.2011-02-08.clean/src/cmd/ksh93/include/io.h INIT.2011-02-08/src/cmd/ksh93/include/io.h
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
     2
--- INIT.2011-02-08.clean/src/cmd/ksh93/include/io.h	2012-05-02 03:16:17.383778774 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
     3
+++ INIT.2011-02-08/src/cmd/ksh93/include/io.h	2012-05-02 03:17:53.562408338 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
     4
@@ -23,6 +23,9 @@
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
     5
  *	David Korn
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
     6
  *
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
     7
  */
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
     8
+/*
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
     9
+ * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    10
+ */
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    11
 
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    12
 #include	<ast.h>
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    13
 #include	<sfio.h>
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    14
@@ -84,6 +87,12 @@ extern int	sh_devtofd(const char*);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    15
 extern int	sh_isdevfd(const char*);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    16
 extern int	sh_source(Shell_t*, Sfio_t*, const char*);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    17
 
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    18
+extern int	VALIDATE_FD(Shell_t *, int);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    19
+
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    20
+#define	VALIDATE_FD(shp, fd) \
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    21
+	(((fd) >= (shp)->gd->lim.open_max) ? sh_iovalidfd(shp, fd) : 1)
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    22
+
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    23
+
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    24
 /* the following are readonly */
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    25
 extern const char	e_pexists[];
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    26
 extern const char	e_query[];
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    27
@@ -123,4 +132,5 @@ extern const char	e_bash_profile[];
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    28
 extern const char	e_stdprompt[];
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    29
 extern const char	e_supprompt[];
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    30
 extern const char	e_ambiguous[];
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    31
+
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    32
 #endif /* KSHELL */
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    33
diff -rupN INIT.2011-02-08.clean/src/cmd/ksh93/sh/io.c INIT.2011-02-08/src/cmd/ksh93/sh/io.c
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    34
--- INIT.2011-02-08.clean/src/cmd/ksh93/sh/io.c	2012-05-02 03:16:17.389917698 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    35
+++ INIT.2011-02-08/src/cmd/ksh93/sh/io.c	2012-05-02 03:19:12.669621809 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    36
@@ -596,8 +596,10 @@ static void io_preserve(Shell_t* shp, re
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    37
 		((struct checkpt*)shp->jmplist)->mode = SH_JMPERREXIT;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    38
 		errormsg(SH_DICT,ERROR_system(1),e_toomany);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    39
 	}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    40
-	if(f2 >= shp->gd->lim.open_max)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    41
-		sh_iovalidfd(shp,f2);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    42
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    43
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    44
+	VALIDATE_FD(shp, f2);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    45
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    46
 	if(shp->fdptrs[fd]=shp->fdptrs[f2])
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    47
 	{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    48
 		if(f2==job.fd)
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    49
@@ -623,7 +625,12 @@ static void io_preserve(Shell_t* shp, re
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    50
  */
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    51
 int sh_iorenumber(Shell_t *shp, register int f1,register int f2)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    52
 {
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    53
-	register Sfio_t *sp = shp->sftable[f2];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    54
+	register Sfio_t *sp;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    55
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    56
+	VALIDATE_FD(shp, f1);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    57
+	VALIDATE_FD(shp, f2);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    58
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    59
+	sp = shp->sftable[f2];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    60
 	if(f1!=f2)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    61
 	{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    62
 		/* see whether file descriptor is in use */
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    63
@@ -663,8 +670,7 @@ int sh_iorenumber(Shell_t *shp, register
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    64
 		if(f2<=2)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    65
 			sfset(sp,SF_SHARE|SF_PUBLIC,1);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    66
 	}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    67
-	if(f2>=shp->gd->lim.open_max)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    68
-		sh_iovalidfd(shp,f2);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    69
+	VALIDATE_FD(shp, f2);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    70
 	return(f2);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    71
 }
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    72
 
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    73
@@ -678,8 +684,9 @@ int sh_close(register int fd)
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    74
 	register int r = 0;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    75
 	if(fd<0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    76
 		return(-1);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    77
-	if(fd >= shp->gd->lim.open_max)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    78
-		sh_iovalidfd(shp,fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    79
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    80
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    81
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    82
 	if(!(sp=shp->sftable[fd]) || sfclose(sp) < 0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    83
 	{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    84
 		if(fdnotify)
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    85
@@ -835,6 +842,9 @@ int sh_open(register const char *path, i
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    86
 		mode = (IOREAD|IOWRITE);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    87
 	else
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    88
 		mode = IOREAD;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    89
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    90
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    91
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    92
 	shp->fdstatus[fd] = mode;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    93
 	return(fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    94
 }
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    95
@@ -861,6 +871,8 @@ int sh_iomovefd(register int fdold)
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    96
 	if(fdold<0 || fdold>2)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    97
 		return(fdold);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
    98
 	fdnew = sh_iomovefd(dup(fdold));
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
    99
+	VALIDATE_FD(shp, fdold);
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   100
+	VALIDATE_FD(shp, fdnew);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   101
 	shp->fdstatus[fdnew] = (shp->fdstatus[fdold]&~IOCLEX);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   102
 	close(fdold);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   103
 	shp->fdstatus[fdold] = IOCLOSE;
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   104
@@ -897,6 +909,9 @@ int	sh_pipe(register int pv[])
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   105
 		sh_close(fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   106
 	else
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   107
 		pv[out] = sh_iomovefd(fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   108
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   109
+	VALIDATE_FD(shp, pv[out]);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   110
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   111
 	if(fcntl(pv[out],F_SETFD,FD_CLOEXEC) >=0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   112
 		shp->fdstatus[pv[out]] |= IOCLEX;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   113
 	shp->fdstatus[pv[out]] = (out?IOWRITE:IOREAD);
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   114
@@ -929,6 +944,9 @@ int	sh_pipe(register int pv[])
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   115
 		errormsg(SH_DICT,ERROR_system(1),e_pipe);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   116
 	}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   117
 	fcntl(pv[out],F_SETFD,FD_CLOEXEC);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   118
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   119
+	VALIDATE_FD(shp, pv[out]);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   120
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   121
 	shp->fdstatus[pv[out]] |= IOCLEX;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   122
 	pv[1-out] = -1;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   123
 	pv[2] = port;
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   124
@@ -958,9 +976,13 @@ static int pat_line(const regex_t* rp, c
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   125
 static int io_patseek(Shell_t *shp, regex_t *rp, Sfio_t* sp, int flags)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   126
 {
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   127
 	char	*cp, *match;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   128
-	int	r, fd=sffileno(sp), close_exec = shp->fdstatus[fd]&IOCLEX;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   129
+	int	r, fd, close_exec;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   130
 	int	was_share,s=(PIPE_BUF>SF_BUFSIZE?SF_BUFSIZE:PIPE_BUF);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   131
 	size_t	n,m;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   132
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   133
+	fd = sffileno(sp);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   134
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   135
+	close_exec = shp->fdstatus[fd]&IOCLEX;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   136
 	shp->fdstatus[sffileno(sp)] |= IOCLEX;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   137
 	if(fd==0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   138
 		was_share = sfset(sp,SF_SHARE,1);
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   139
@@ -994,12 +1016,17 @@ static int io_patseek(Shell_t *shp, rege
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   140
 
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   141
 static Sfoff_t	file_offset(Shell_t *shp, int fn, char *fname)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   142
 {
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   143
-	Sfio_t		*sp = shp->sftable[fn];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   144
+	Sfio_t		*sp;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   145
 	char		*cp;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   146
 	Sfoff_t		off;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   147
 	struct Eof	endf;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   148
 	Namval_t	*mp = nv_open("EOF",shp->var_tree,0);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   149
 	Namval_t	*pp = nv_open("CUR",shp->var_tree,0);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   150
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   151
+	VALIDATE_FD(shp, fn);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   152
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   153
+	sp = shp->sftable[fn];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   154
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   155
 	memset(&endf,0,sizeof(struct Eof));
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   156
 	endf.fd = fn;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   157
 	endf.hdr.disc = &EOF_disc;
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   158
@@ -1169,7 +1196,7 @@ int	sh_redirect(Shell_t *shp,struct iono
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   159
 			if((iof&IOLSEEK) || ((iof&IOMOV) && *fname=='-'))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   160
 				fn = nv_getnum(np);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   161
 		}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   162
-		if(fn>=shp->gd->lim.open_max && !sh_iovalidfd(shp,fn))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   163
+		if (!VALIDATE_FD(shp, fn))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   164
 			errormsg(SH_DICT,ERROR_system(1),e_file+4);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   165
 		if(iof&IOLSEEK)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   166
 		{
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   167
@@ -1212,6 +1239,7 @@ int	sh_redirect(Shell_t *shp,struct iono
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   168
 						message = e_file;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   169
 						goto fail;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   170
 					}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   171
+					VALIDATE_FD(shp, dupfd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   172
 					if(shp->subshell && dupfd==1)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   173
 					{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   174
 						if(sfset(sfstdout,0,0)&SF_STRING)
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   175
@@ -1248,8 +1276,7 @@ int	sh_redirect(Shell_t *shp,struct iono
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   176
 					goto traceit;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   177
 				if((fd=sh_fcntl(dupfd,F_DUPFD,3))<0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   178
 					goto fail;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   179
-				if(fd>= shp->gd->lim.open_max)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   180
-					sh_iovalidfd(shp,fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   181
+				VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   182
 				sh_iocheckfd(shp,dupfd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   183
 				shp->fdstatus[fd] = (shp->fdstatus[dupfd]&~IOCLEX);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   184
 				if(toclose<0 && shp->fdstatus[fd]&IOREAD)
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   185
@@ -1362,7 +1389,11 @@ int	sh_redirect(Shell_t *shp,struct iono
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   186
 			}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   187
 			if(iof&IOLSEEK)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   188
 			{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   189
-				Sfio_t *sp = shp->sftable[fn];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   190
+				Sfio_t *sp;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   191
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   192
+				VALIDATE_FD(shp, fn);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   193
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   194
+				sp = shp->sftable[fn];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   195
 				r = shp->fdstatus[fn];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   196
 				if(!(r&(IOSEEK|IONOSEEK)))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   197
 					r = sh_iocheckfd(shp,fn);
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   198
@@ -1443,6 +1474,7 @@ int	sh_redirect(Shell_t *shp,struct iono
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   199
 			}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   200
 			if(fd<0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   201
 			{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   202
+				VALIDATE_FD(shp, fn);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   203
 				if(sh_inuse(shp,fn) || (fn && fn==shp->infd))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   204
 				{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   205
 					if(fn>9 || !(shp->inuse_bits&(1<<fn)))
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   206
@@ -1462,7 +1494,7 @@ int	sh_redirect(Shell_t *shp,struct iono
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   207
 					{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   208
 						if((fn=fcntl(fd,F_DUPFD,10)) < 0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   209
 							goto fail;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   210
-						if(fn>=shp->gd->lim.open_max && !sh_iovalidfd(shp,fn))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   211
+						if (!VALIDATE_FD(shp, fn))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   212
 							goto fail;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   213
 						shp->fdstatus[fn] = shp->fdstatus[fd];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   214
 						sh_close(fd);
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   215
@@ -1622,7 +1654,12 @@ void sh_iosave(Shell_t *shp, register in
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   216
 	filemap[shp->topfd++].save_fd = savefd;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   217
 	if(savefd >=0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   218
 	{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   219
-		register Sfio_t* sp = shp->sftable[origfd];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   220
+		register Sfio_t* sp;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   221
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   222
+		VALIDATE_FD(shp, origfd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   223
+		VALIDATE_FD(shp, savefd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   224
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   225
+		sp = shp->sftable[origfd];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   226
 		/* make saved file close-on-exec */
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   227
 		sh_fcntl(savefd,F_SETFD,FD_CLOEXEC);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   228
 		if(origfd==job.fd)
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   229
@@ -1655,6 +1692,7 @@ void	sh_iounsave(Shell_t* shp)
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   230
 			filemap[newfd++] = filemap[fd];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   231
 		else
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   232
 		{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   233
+			VALIDATE_FD(shp, savefd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   234
 			shp->sftable[savefd] = 0;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   235
 			sh_close(savefd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   236
 		}
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   237
@@ -1678,16 +1716,19 @@ void	sh_iorestore(Shell_t *shp, int last
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   238
 		{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   239
 			if ((savefd = filemap[fd].save_fd) >= 0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   240
 			{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   241
+				VALIDATE_FD(shp, savefd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   242
 				shp->sftable[savefd] = 0;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   243
 				sh_close(savefd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   244
 			}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   245
 			continue;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   246
 		}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   247
 		origfd = filemap[fd].orig_fd;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   248
+		VALIDATE_FD(shp, origfd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   249
 		if(origfd<0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   250
 		{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   251
 			/* this should never happen */
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   252
 			savefd = filemap[fd].save_fd;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   253
+			VALIDATE_FD(shp, savefd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   254
 			shp->sftable[savefd] = 0;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   255
 			sh_close(savefd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   256
 			return;
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   257
@@ -1699,6 +1740,7 @@ void	sh_iorestore(Shell_t *shp, int last
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   258
 		sh_close(origfd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   259
 		if ((savefd = filemap[fd].save_fd) >= 0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   260
 		{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   261
+			VALIDATE_FD(shp, savefd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   262
 			sh_fcntl(savefd, F_DUPFD, origfd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   263
 			if(savefd==job.fd)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   264
 				job.fd=origfd;
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   265
@@ -1954,6 +1996,9 @@ static ssize_t slowread(Sfio_t *iop,void
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   266
 int sh_iocheckfd(Shell_t *shp, register int fd)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   267
 {
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   268
 	register int flags, n;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   269
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   270
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   271
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   272
 	if((n=shp->fdstatus[fd])&IOCLOSE)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   273
 		return(n);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   274
 	if(!(n&(IOREAD|IOWRITE)))
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   275
@@ -2145,7 +2190,7 @@ static void	sftrack(Sfio_t* sp, int flag
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   276
 		return;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   277
 	}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   278
 #endif
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   279
-	if(fd<0 || (fd>=shp->gd->lim.open_max && !sh_iovalidfd(shp,fd)))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   280
+	if (fd < 0 || !VALIDATE_FD(shp, fd))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   281
 		return;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   282
 	if(sh_isstate(SH_NOTRACK))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   283
 		return;
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   284
@@ -2413,6 +2458,8 @@ ssize_t sh_read(register int fd, void* b
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   285
 {
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   286
 	Shell_t *shp = sh_getinterp();
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   287
 	register Sfio_t *sp;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   288
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   289
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   290
 	if(sp=shp->sftable[fd])
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   291
 		return(sfread(sp,buff,n));
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   292
 	else
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   293
@@ -2427,6 +2474,8 @@ ssize_t sh_write(register int fd, const 
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   294
 {
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   295
 	Shell_t *shp = sh_getinterp();
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   296
 	register Sfio_t *sp;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   297
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   298
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   299
 	if(sp=shp->sftable[fd])
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   300
 		return(sfwrite(sp,buff,n));
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   301
 	else
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   302
@@ -2441,6 +2490,8 @@ off_t sh_seek(register int fd, off_t off
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   303
 {
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   304
 	Shell_t *shp = sh_getinterp();
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   305
 	register Sfio_t *sp;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   306
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   307
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   308
 	if((sp=shp->sftable[fd]) && (sfset(sp,0,0)&(SF_READ|SF_WRITE)))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   309
 		return(sfseek(sp,offset,whence));
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   310
 	else
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   311
@@ -2452,6 +2503,9 @@ int sh_dup(register int old)
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   312
 {
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   313
 	Shell_t *shp = sh_getinterp();
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   314
 	register int fd = dup(old);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   315
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   316
+	VALIDATE_FD(shp, old);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   317
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   318
 	if(fd>=0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   319
 	{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   320
 		if(shp->fdstatus[old] == IOCLOSE)
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   321
@@ -2473,13 +2527,15 @@ int sh_fcntl(register int fd, int op, ..
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   322
 	arg =  va_arg(ap, int) ;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   323
 	va_end(ap);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   324
 	newfd = fcntl(fd,op,arg);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   325
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   326
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   327
+	VALIDATE_FD(shp, newfd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   328
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   329
 	if(newfd>=0) switch(op)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   330
 	{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   331
 	    case F_DUPFD:
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   332
 		if(shp->fdstatus[fd] == IOCLOSE)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   333
 			shp->fdstatus[fd] = 0;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   334
-		if(newfd>=shp->gd->lim.open_max)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   335
-			sh_iovalidfd(shp,newfd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   336
 		shp->fdstatus[newfd] = (shp->fdstatus[fd]&~IOCLEX);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   337
 		if(fdnotify)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   338
 			(*fdnotify)(fd,newfd);
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   339
@@ -2548,6 +2604,7 @@ Sfio_t *sh_iogetiop(int fd, int mode)
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   340
 		return(iop);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   341
 	if(mode==SF_READ && !(n&IOREAD))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   342
 		return(iop);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   343
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   344
 	if(!(iop = shp->sftable[fd]))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   345
 		iop=sh_iostream(shp,fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   346
 	return(iop);
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   347
@@ -2567,7 +2624,10 @@ Sfio_t	*sh_fd2sfio(int fd)
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   348
 {
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   349
 	Shell_t	*shp = sh_getinterp();
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   350
 	register int status;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   351
-	Sfio_t *sp = shp->sftable[fd];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   352
+	Sfio_t *sp;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   353
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   354
+	VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   355
+	sp = shp->sftable[fd];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   356
 	if(!sp  && (status = sh_iocheckfd(shp,fd))!=IOCLOSE)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   357
 	{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   358
 		register int flags=0;
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   359
diff -rupN INIT.2011-02-08.clean/src/cmd/ksh93/sh/lex.c INIT.2011-02-08/src/cmd/ksh93/sh/lex.c
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   360
--- INIT.2011-02-08.clean/src/cmd/ksh93/sh/lex.c	2012-05-02 03:16:17.388010187 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   361
+++ INIT.2011-02-08/src/cmd/ksh93/sh/lex.c	2012-05-02 03:17:53.567785551 -0700
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   362
@@ -25,6 +25,9 @@
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   363
  * AT&T Labs
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   364
  *
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   365
  */
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   366
+/*
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   367
+ * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   368
+ */
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   369
 
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   370
 #include	<ast.h>
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   371
 #include	<stak.h>
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   372
@@ -2053,6 +2056,7 @@ void	sh_syntax(Lex_t *lp)
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   373
 	else
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   374
 		lp->lastline = shp->inlineno;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   375
 	tokstr = fmttoken(lp,tok,tokbuf);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   376
+	VALIDATE_FD(shp, shp->infd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   377
 	if((sp=fcfile()) || (shp->infd>=0 && (sp=shp->sftable[shp->infd])))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   378
 	{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   379
 		/* clear out any pending input */
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   380
diff -rupN INIT.2011-02-08.clean/src/cmd/ksh93/sh/macro.c INIT.2011-02-08/src/cmd/ksh93/sh/macro.c
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   381
--- INIT.2011-02-08.clean/src/cmd/ksh93/sh/macro.c	2012-05-02 03:16:26.100861446 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   382
+++ INIT.2011-02-08/src/cmd/ksh93/sh/macro.c	2012-05-02 03:17:53.569195199 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   383
@@ -2086,6 +2086,7 @@ static void comsubst(Mac_t *mp,register 
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   384
 			sh_popcontext(mp->shp,&buff);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   385
 			if(r==0 && ip && (ip->iofile&IOLSEEK))
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   386
 			{
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   387
+				VALIDATE_FD(mp->shp, fd);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   388
 				if(sp=mp->shp->sftable[fd])
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   389
 					num = sftell(sp);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   390
 				else
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   391
diff -rupN INIT.2011-02-08.clean/src/cmd/ksh93/sh/main.c INIT.2011-02-08/src/cmd/ksh93/sh/main.c
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   392
--- INIT.2011-02-08.clean/src/cmd/ksh93/sh/main.c	2012-05-02 03:16:17.389138504 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   393
+++ INIT.2011-02-08/src/cmd/ksh93/sh/main.c	2012-05-02 03:17:53.570027033 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   394
@@ -26,6 +26,9 @@
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   395
  * AT&T Labs
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   396
  *
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   397
  */
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   398
+/*
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   399
+ * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   400
+ */
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   401
 
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   402
 #include	<ast.h>
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   403
 #include	<sfio.h>
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   404
@@ -396,8 +399,10 @@ static void	exfile(register Shell_t *shp
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   405
 		if(fno > 0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   406
 		{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   407
 			int r;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   408
+			VALIDATE_FD(shp, fno);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   409
 			if(fno < 10 && ((r=sh_fcntl(fno,F_DUPFD,10))>=10))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   410
 			{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   411
+				VALIDATE_FD(shp, r);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   412
 				shp->fdstatus[r] = shp->fdstatus[fno];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   413
 				sh_close(fno);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   414
 				fno = r;
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   415
diff -rupN INIT.2011-02-08.clean/src/cmd/ksh93/sh/path.c INIT.2011-02-08/src/cmd/ksh93/sh/path.c
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   416
--- INIT.2011-02-08.clean/src/cmd/ksh93/sh/path.c	2012-05-02 03:16:20.752378905 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   417
+++ INIT.2011-02-08/src/cmd/ksh93/sh/path.c	2012-05-02 03:17:53.571078341 -0700
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   418
@@ -23,6 +23,9 @@
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   419
  * AT&T Labs
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   420
  *
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   421
  */
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   422
+/*
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   423
+ * Copyright (c) 2007, 2011, Oracle and/or its affiliates. All rights reserved.
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   424
+ */
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   425
 
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   426
 #include	"defs.h"
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   427
 #include	<fcin.h>
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   428
@@ -1239,6 +1242,7 @@ static void exscript(Shell_t *shp,regist
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   429
 	if(sp=fcfile())
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   430
 		while(sfstack(sp,SF_POPSTACK));
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   431
 	job_clear();
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   432
+	VALIDATE_FD(shp, shp->infd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   433
 	if(shp->infd>0 && (shp->fdstatus[shp->infd]&IOCLEX))
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   434
 		sh_close(shp->infd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   435
 	sh_setstate(sh_state(SH_FORKED));
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   436
diff -rupN INIT.2011-02-08.clean/src/cmd/ksh93/sh/subshell.c INIT.2011-02-08/src/cmd/ksh93/sh/subshell.c
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   437
--- INIT.2011-02-08.clean/src/cmd/ksh93/sh/subshell.c	2012-05-02 03:16:25.241021529 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   438
+++ INIT.2011-02-08/src/cmd/ksh93/sh/subshell.c	2012-05-02 03:17:53.571942019 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   439
@@ -115,6 +115,7 @@ void	sh_subtmpfile(Shell_t *shp)
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   440
 		if((sp->tmpfd = fd = fcntl(1,F_DUPFD,10)) >= 0)
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   441
 		{
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   442
 			fcntl(fd,F_SETFD,FD_CLOEXEC);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   443
+			VALIDATE_FD(shp, fd);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   444
 			shp->fdstatus[fd] = shp->fdstatus[1]|IOCLEX;
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   445
 			close(1);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   446
 		}
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   447
@@ -141,6 +142,7 @@ void	sh_subtmpfile(Shell_t *shp)
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   448
 		}
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   449
 		else
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   450
 		{
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   451
+			VALIDATE_FD(shp, fd);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   452
 			shp->fdstatus[fd] = IOREAD|IOWRITE;
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   453
 			sfsync(sfstdout);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   454
 			if(fd==1)
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   455
@@ -627,6 +629,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   456
 					((struct checkpt*)shp->jmplist)->mode = SH_JMPERREXIT;
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   457
 					errormsg(SH_DICT,ERROR_system(1),e_toomany);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   458
 				}
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   459
+				VALIDATE_FD(shp, fd);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   460
 				shp->sftable[fd] = iop;
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   461
 				fcntl(fd,F_SETFD,FD_CLOEXEC);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   462
 				shp->fdstatus[fd] = (shp->fdstatus[1]|IOCLEX);
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   463
diff -rupN INIT.2011-02-08.clean/src/cmd/ksh93/sh/xec.c INIT.2011-02-08/src/cmd/ksh93/sh/xec.c
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   464
--- INIT.2011-02-08.clean/src/cmd/ksh93/sh/xec.c	2012-05-02 03:16:17.393286735 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   465
+++ INIT.2011-02-08/src/cmd/ksh93/sh/xec.c	2012-05-02 03:17:53.574535124 -0700
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   466
@@ -94,6 +94,8 @@ static void iousepipe(Shell_t *shp)
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   467
 	usepipe++;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   468
 	fcntl(subpipe[0],F_SETFD,FD_CLOEXEC);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   469
 	subpipe[2] = fcntl(1,F_DUPFD,10);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   470
+	VALIDATE_FD(shp, subpipe[1]);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   471
+	VALIDATE_FD(shp, subpipe[2]);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   472
 	shp->fdstatus[subpipe[2]] = shp->fdstatus[1];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   473
 	close(1);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   474
 	fcntl(subpipe[1],F_DUPFD,1);
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   475
@@ -117,6 +119,7 @@ static void iounpipe(Shell_t *shp)
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   476
 	usepipe = 0;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   477
 	close(1);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   478
 	fcntl(subpipe[2], F_DUPFD, 1);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   479
+	VALIDATE_FD(shp, subpipe[2]);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   480
 	shp->fdstatus[1] = shp->fdstatus[subpipe[2]];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   481
 	if(subdup) for(n=0; n < 10; n++)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   482
 	{
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   483
@@ -844,6 +847,7 @@ static int sh_coexec(Shell_t *shp,const 
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   484
 			if(filt > 2)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   485
 			{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   486
 				shp->coutpipe = shp->inpipe[1];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   487
+				VALIDATE_FD(shp, shp->coutpipe);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   488
 				shp->fdptrs[shp->coutpipe] = &shp->coutpipe;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   489
 			}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   490
 		}
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   491
@@ -1487,6 +1491,7 @@ int sh_exec(register const Shnode_t *t, 
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   492
 						if(shp->cpipe[0]<0 || shp->cpipe[1] < 0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   493
 						{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   494
 							sh_copipe(shp,shp->outpipe=shp->cpipe,0);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   495
+							VALIDATE_FD(shp, shp->cpipe[0]);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   496
 							shp->fdptrs[shp->cpipe[0]] = shp->cpipe;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   497
 						}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   498
 						sh_copipe(shp,shp->inpipe=pipes,0);
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   499
@@ -3419,6 +3424,8 @@ static void coproc_init(Shell_t *shp, in
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   500
 		if((outfd=shp->cpipe[1]) < 10) 
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   501
 		{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   502
 		        int fd=fcntl(shp->cpipe[1],F_DUPFD,10);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   503
+			VALIDATE_FD(shp, outfd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   504
+			VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   505
 			if(fd>=10)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   506
 			{
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   507
 			        shp->fdstatus[fd] = (shp->fdstatus[outfd]&~IOCLEX);
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   508
@@ -3427,6 +3434,9 @@ static void coproc_init(Shell_t *shp, in
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   509
 				shp->cpipe[1] = fd;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   510
 			}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   511
 		}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   512
+		VALIDATE_FD(shp, shp->cpipe[0]);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   513
+		VALIDATE_FD(shp, shp->cpipe[1]);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   514
+
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   515
 		if(fcntl(*shp->cpipe,F_SETFD,FD_CLOEXEC)>=0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   516
 			shp->fdstatus[shp->cpipe[0]] |= IOCLEX;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   517
 		shp->fdptrs[shp->cpipe[0]] = shp->cpipe;
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   518
@@ -3437,7 +3447,9 @@ static void coproc_init(Shell_t *shp, in
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   519
 	shp->outpipe = shp->cpipe;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   520
 	sh_pipe(shp->inpipe=pipes);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   521
 	shp->coutpipe = shp->inpipe[1];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   522
+	VALIDATE_FD(shp, shp->coutpipe);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   523
 	shp->fdptrs[shp->coutpipe] = &shp->coutpipe;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   524
+	VALIDATE_FD(shp, shp->outpipe[0]);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   525
 	if(fcntl(shp->outpipe[0],F_SETFD,FD_CLOEXEC)>=0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   526
 		shp->fdstatus[shp->outpipe[0]] |= IOCLEX;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   527
 }
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   528
@@ -3608,6 +3620,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   529
 				int fd = shp->inpipe[1];
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   530
 				sh_iosave(shp,0,buff.topfd,(char*)0);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   531
 				sh_iorenumber(shp,shp->inpipe[0],0);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   532
+				VALIDATE_FD(shp, fd);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   533
 				if(fd>=0 && (!(otype&FPOU) || (otype&FCOOP)) && fcntl(fd,F_SETFD,FD_CLOEXEC)>=0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   534
 					shp->fdstatus[fd] |= IOCLEX;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   535
 			}
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   536
@@ -3619,6 +3632,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   537
 #endif /* SHOPT_COSHELL */
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   538
 				sh_iosave(shp,1,buff.topfd,(char*)0);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   539
 				sh_iorenumber(shp,sh_dup(shp->outpipe[1]),1);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   540
+				VALIDATE_FD(shp, shp->outpipe[0]);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   541
 				if(fcntl(shp->outpipe[0],F_SETFD,FD_CLOEXEC)>=0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   542
 					shp->fdstatus[shp->outpipe[0]] |= IOCLEX;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   543
 			}
805
23c55a2f8a8e 7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents: 789
diff changeset
   544
@@ -3658,6 +3672,7 @@ static pid_t sh_ntfork(Shell_t *shp,cons
789
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   545
 			signal(SIGQUIT,sh_fault);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   546
 			signal(SIGINT,sh_fault);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   547
 		}
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   548
+		VALIDATE_FD(shp, shp->inpipe[1]);
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   549
 		if((otype&FPIN) && (!(otype&FPOU) || (otype&FCOOP)) && fcntl(shp->inpipe[1],F_SETFD,FD_CLOEXEC)>=0)
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   550
 			shp->fdstatus[shp->inpipe[1]] &= ~IOCLEX;
5f074ca23733 7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff changeset
   551
 		if(t->fork.forkio || otype)