author | Lijo George<lijo.x.george@oracle.com> |
Sun, 10 May 2015 11:59:46 -0700 | |
changeset 4268 | d723f8ed85fe |
parent 4196 | d697072a92f5 |
child 4305 | 90493abe0c5c |
permissions | -rw-r--r-- |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
1 |
# This patch has been developed inhouse. This fixes a Solaris specific |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
2 |
# issue and has not been submitted to the community. |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
3 |
--- INIT.2012-08-01.old/src/cmd/ksh93/include/io.h 2015-02-24 13:25:19.331558350 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
4 |
+++ INIT.2012-08-01/src/cmd/ksh93/include/io.h 2015-03-04 13:27:49.205782578 -0800 |
805
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
5 |
@@ -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
|
6 |
* David Korn |
789
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 |
*/ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
9 |
+/* |
805
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
10 |
+ * 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
|
11 |
+ */ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
12 |
|
805
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
13 |
#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
|
14 |
#include <sfio.h> |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
15 |
@@ -87,6 +90,12 @@ extern int sh_devtofd(const char*); |
805
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_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
|
17 |
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
|
18 |
|
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
19 |
+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
|
20 |
+ |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
21 |
+#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
|
22 |
+ (((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
|
23 |
+ |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
24 |
+ |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
25 |
/* 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
|
26 |
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
|
27 |
extern const char e_query[]; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
28 |
@@ -126,4 +135,5 @@ extern const char e_bash_profile[]; |
805
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_stdprompt[]; |
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_supprompt[]; |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
31 |
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
|
32 |
+ |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
33 |
#endif /* KSHELL */ |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
34 |
--- INIT.2012-08-01.old/src/cmd/ksh93/sh/io.c 2015-02-24 13:25:19.362427732 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
35 |
+++ INIT.2012-08-01/src/cmd/ksh93/sh/io.c 2015-03-04 14:04:54.981280201 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
36 |
@@ -605,8 +605,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) |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
49 |
@@ -632,7 +634,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 */ |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
63 |
@@ -672,8 +679,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 |
|
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
73 |
@@ -687,8 +693,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 |
{ |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
84 |
int err=errno; |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
85 |
@@ -846,8 +853,7 @@ 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; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
89 |
- if(fd >= shp->gd->lim.open_max) |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
90 |
- sh_iovalidfd(shp,fd); |
789
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
91 |
+ VALIDATE_FD(shp, fd); |
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 |
} |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
95 |
@@ -876,6 +882,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; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
104 |
@@ -936,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
|
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); |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
114 |
@@ -968,6 +979,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; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
124 |
@@ -997,9 +1011,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); |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
139 |
@@ -1033,12 +1051,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; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
158 |
@@ -1216,7 +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
|
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 |
{ |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
167 |
@@ -1259,6 +1282,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) |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
175 |
@@ -1295,8 +1319,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) |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
185 |
@@ -1410,7 +1433,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); |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
198 |
@@ -1491,6 +1518,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))) |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
206 |
@@ -1510,7 +1538,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; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
213 |
if(flag!=2 || shp->subshell) |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
214 |
sh_iosave(shp,fn,indx|0x10000,tname?fname:(trunc?Empty:0)); |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
215 |
@@ -1701,7 +1729,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) |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
229 |
@@ -1734,6 +1767,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 |
} |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
237 |
@@ -1757,16 +1791,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; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
257 |
@@ -1778,6 +1815,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; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
265 |
@@ -2035,6 +2073,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))) |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
275 |
@@ -2226,7 +2267,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 |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
279 |
- if(fd<0 || fd==PSEUDOFD || (fd>=shp->gd->lim.open_max && !sh_iovalidfd(shp,fd))) |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
280 |
+ if(fd<0 || fd==PSEUDOFD || !VALIDATE_FD(shp, fd)) |
789
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; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
284 |
@@ -2495,6 +2536,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 |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
293 |
@@ -2509,6 +2552,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 |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
302 |
@@ -2523,6 +2568,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 |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
311 |
@@ -2534,6 +2581,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) |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
321 |
@@ -2555,13 +2605,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); |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
339 |
@@ -2630,6 +2682,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); |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
347 |
@@ -2649,7 +2702,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; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
359 |
--- INIT.2012-08-01.old/src/cmd/ksh93/sh/lex.c 2015-02-24 13:25:19.370183959 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
360 |
+++ INIT.2012-08-01/src/cmd/ksh93/sh/lex.c 2015-03-04 13:27:49.211457345 -0800 |
789
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
361 |
@@ -25,6 +25,9 @@ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
362 |
* AT&T Labs |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
363 |
* |
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 |
+/* |
805
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
366 |
+ * 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
|
367 |
+ */ |
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 |
#include <ast.h> |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
370 |
#include <stak.h> |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
371 |
@@ -2122,6 +2125,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
|
372 |
else |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
373 |
lp->lastline = shp->inlineno; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
374 |
tokstr = fmttoken(lp,tok,tokbuf); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
375 |
+ VALIDATE_FD(shp, shp->infd); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
376 |
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
|
377 |
{ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
378 |
/* clear out any pending input */ |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
379 |
--- INIT.2012-08-01.old/src/cmd/ksh93/sh/macro.c 2015-02-24 13:25:19.363200741 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
380 |
+++ INIT.2012-08-01/src/cmd/ksh93/sh/macro.c 2015-03-04 13:27:49.212566247 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
381 |
@@ -2121,6 +2121,7 @@ static void comsubst(Mac_t *mp,register |
805
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
382 |
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
|
383 |
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
|
384 |
{ |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
385 |
+ 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
|
386 |
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
|
387 |
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
|
388 |
else |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
389 |
--- INIT.2012-08-01.old/src/cmd/ksh93/sh/main.c 2015-02-24 13:25:19.364162232 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
390 |
+++ INIT.2012-08-01/src/cmd/ksh93/sh/main.c 2015-03-04 13:27:49.213386462 -0800 |
805
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
391 |
@@ -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
|
392 |
* 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
|
393 |
* |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
394 |
*/ |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
395 |
+/* |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
396 |
+ * 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
|
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 |
#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
|
400 |
#include <sfio.h> |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
401 |
@@ -376,8 +379,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
|
402 |
if(fno > 0) |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
403 |
{ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
404 |
int r; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
405 |
+ VALIDATE_FD(shp, fno); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
406 |
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
|
407 |
{ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
408 |
+ VALIDATE_FD(shp, r); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
409 |
shp->fdstatus[r] = shp->fdstatus[fno]; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
410 |
sh_close(fno); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
411 |
fno = r; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
412 |
--- INIT.2012-08-01.old/src/cmd/ksh93/sh/path.c 2015-02-24 13:25:19.360898415 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
413 |
+++ INIT.2012-08-01/src/cmd/ksh93/sh/path.c 2015-03-04 13:27:49.214381188 -0800 |
789
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
414 |
@@ -23,6 +23,9 @@ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
415 |
* AT&T Labs |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
416 |
* |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
417 |
*/ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
418 |
+/* |
805
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
419 |
+ * 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
|
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 |
#include "defs.h" |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
423 |
#include <fcin.h> |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
424 |
@@ -1272,6 +1275,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
|
425 |
if(sp=fcfile()) |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
426 |
while(sfstack(sp,SF_POPSTACK)); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
427 |
job_clear(); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
428 |
+ VALIDATE_FD(shp, shp->infd); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
429 |
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
|
430 |
sh_close(shp->infd); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
431 |
sh_setstate(sh_state(SH_FORKED)); |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
432 |
--- INIT.2012-08-01.old/src/cmd/ksh93/sh/subshell.c 2015-02-24 13:25:19.363479570 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
433 |
+++ INIT.2012-08-01/src/cmd/ksh93/sh/subshell.c 2015-03-04 14:05:03.665801329 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
434 |
@@ -125,6 +125,7 @@ void sh_subtmpfile(Shell_t *shp) |
805
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
435 |
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
|
436 |
{ |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
437 |
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
|
438 |
+ 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
|
439 |
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
|
440 |
close(1); |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
441 |
} |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
442 |
@@ -151,6 +152,7 @@ void sh_subtmpfile(Shell_t *shp) |
805
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
443 |
} |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
444 |
else |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
445 |
{ |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
446 |
+ 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
|
447 |
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
|
448 |
sfsync(sfstdout); |
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
449 |
if(fd==1) |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
450 |
@@ -679,8 +681,7 @@ Sfio_t *sh_subshell(Shell_t *shp,Shnode_ |
805
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
451 |
((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
|
452 |
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
|
453 |
} |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
454 |
- if(fd >= shp->gd->lim.open_max) |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
455 |
- sh_iovalidfd(shp,fd); |
805
23c55a2f8a8e
7165565 ksh93 in userland misses several bug fixes made in ON
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
789
diff
changeset
|
456 |
+ 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
|
457 |
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
|
458 |
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
|
459 |
shp->fdstatus[fd] = (shp->fdstatus[1]|IOCLEX); |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
460 |
--- INIT.2012-08-01.old/src/cmd/ksh93/sh/xec.c 2015-02-24 13:25:19.365424099 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
461 |
+++ INIT.2012-08-01/src/cmd/ksh93/sh/xec.c 2015-03-04 14:05:12.823587666 -0800 |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
462 |
@@ -117,6 +117,8 @@ static int iousepipe(Shell_t *shp) |
789
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
463 |
usepipe++; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
464 |
fcntl(subpipe[0],F_SETFD,FD_CLOEXEC); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
465 |
subpipe[2] = fcntl(1,F_DUPFD,10); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
466 |
+ VALIDATE_FD(shp, subpipe[1]); |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
467 |
+ VALIDATE_FD(shp, subpipe[2]); |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
468 |
fcntl(subpipe[2],F_SETFD,FD_CLOEXEC); |
789
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
469 |
shp->fdstatus[subpipe[2]] = shp->fdstatus[1]; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
470 |
close(1); |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
471 |
@@ -141,6 +143,7 @@ static void iounpipe(Shell_t *shp) |
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
472 |
char buff[SF_BUFSIZE]; |
789
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[2], F_DUPFD, 1); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
475 |
+ VALIDATE_FD(shp, subpipe[2]); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
476 |
shp->fdstatus[1] = shp->fdstatus[subpipe[2]]; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
477 |
--usepipe; |
789
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
478 |
if(subdup) for(n=0; n < 10; n++) |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
479 |
@@ -886,6 +889,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
|
480 |
if(filt > 2) |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
481 |
{ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
482 |
shp->coutpipe = shp->inpipe[1]; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
483 |
+ VALIDATE_FD(shp, shp->coutpipe); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
484 |
shp->fdptrs[shp->coutpipe] = &shp->coutpipe; |
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 |
} |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
487 |
@@ -1646,6 +1650,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
|
488 |
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
|
489 |
{ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
490 |
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
|
491 |
+ VALIDATE_FD(shp, shp->cpipe[0]); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
492 |
shp->fdptrs[shp->cpipe[0]] = shp->cpipe; |
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->inpipe=pipes,0); |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
495 |
@@ -3623,6 +3628,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
|
496 |
if((outfd=shp->cpipe[1]) < 10) |
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 |
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
|
499 |
+ VALIDATE_FD(shp, outfd); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
500 |
+ VALIDATE_FD(shp, fd); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
501 |
if(fd>=10) |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
502 |
{ |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
503 |
shp->fdstatus[fd] = (shp->fdstatus[outfd]&~IOCLEX); |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
504 |
@@ -3631,6 +3638,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
|
505 |
shp->cpipe[1] = fd; |
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 |
} |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
508 |
+ VALIDATE_FD(shp, shp->cpipe[0]); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
509 |
+ VALIDATE_FD(shp, shp->cpipe[1]); |
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 |
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
|
512 |
shp->fdstatus[shp->cpipe[0]] |= IOCLEX; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
513 |
shp->fdptrs[shp->cpipe[0]] = shp->cpipe; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
514 |
@@ -3641,7 +3651,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
|
515 |
shp->outpipe = shp->cpipe; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
516 |
sh_pipe(shp->inpipe=pipes); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
517 |
shp->coutpipe = shp->inpipe[1]; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
518 |
+ VALIDATE_FD(shp, shp->coutpipe); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
519 |
shp->fdptrs[shp->coutpipe] = &shp->coutpipe; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
520 |
+ VALIDATE_FD(shp, shp->outpipe[0]); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
521 |
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
|
522 |
shp->fdstatus[shp->outpipe[0]] |= IOCLEX; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
523 |
} |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
524 |
@@ -3812,6 +3824,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
|
525 |
int fd = shp->inpipe[1]; |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
526 |
sh_iosave(shp,0,buffp->topfd,(char*)0); |
789
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
527 |
sh_iorenumber(shp,shp->inpipe[0],0); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
528 |
+ VALIDATE_FD(shp, fd); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
529 |
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
|
530 |
shp->fdstatus[fd] |= IOCLEX; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
531 |
} |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
532 |
@@ -3823,6 +3836,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
|
533 |
#endif /* SHOPT_COSHELL */ |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
534 |
sh_iosave(shp,1,buffp->topfd,(char*)0); |
789
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
535 |
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
|
536 |
+ VALIDATE_FD(shp, shp->outpipe[0]); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
537 |
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
|
538 |
shp->fdstatus[shp->outpipe[0]] |= IOCLEX; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
539 |
} |
4268
d723f8ed85fe
PSARC/2014/162 ksh93 update to 2012-08-01
Lijo George<lijo.x.george@oracle.com>
parents:
4196
diff
changeset
|
540 |
@@ -3862,6 +3876,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
|
541 |
signal(SIGQUIT,sh_fault); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
542 |
signal(SIGINT,sh_fault); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
543 |
} |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
544 |
+ VALIDATE_FD(shp, shp->inpipe[1]); |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
545 |
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
|
546 |
shp->fdstatus[shp->inpipe[1]] &= ~IOCLEX; |
5f074ca23733
7106955 move ksh93 from ON to userland
Edwin Beasant <Edwin.Beasant@oracle.com>
parents:
diff
changeset
|
547 |
if(t->fork.forkio || otype) |