.
OBS-URL: https://build.opensuse.org/package/show/shells/ksh?expand=0&rev=164
This commit is contained in:
parent
e48d785121
commit
b178404e5a
@ -1,3 +1,9 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Sep 18 11:09:34 UTC 2013 - werner@suse.de
|
||||||
|
|
||||||
|
- Extend patch ksh93-fdstatus.dif to solve bnc#838475
|
||||||
|
- Modify patch ksh93-builtin.dif to reduce timeouts of pty utility
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Tue Aug 13 09:59:45 UTC 2013 - dmueller@suse.com
|
Tue Aug 13 09:59:45 UTC 2013 - dmueller@suse.com
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- src/cmd/builtin/pty.c
|
--- src/cmd/builtin/pty.c
|
||||||
+++ src/cmd/builtin/pty.c 2013-02-01 15:59:52.697952156 +0000
|
+++ src/cmd/builtin/pty.c 2013-02-01 15:59:52.697952156 +0000
|
||||||
@@ -216,6 +216,12 @@ mkpty(int* master, int* slave)
|
@@ -216,13 +216,19 @@ mkpty(int* master, int* slave)
|
||||||
#if !_lib_openpty
|
#if !_lib_openpty
|
||||||
char* sname;
|
char* sname;
|
||||||
#endif
|
#endif
|
||||||
@ -13,6 +13,24 @@
|
|||||||
/*
|
/*
|
||||||
* some systems hang hard during the handshake
|
* some systems hang hard during the handshake
|
||||||
* if you know why then please let us know
|
* if you know why then please let us know
|
||||||
|
*/
|
||||||
|
|
||||||
|
- alarm(4);
|
||||||
|
- if (tcgetattr(STDERR_FILENO, &tty) >= 0)
|
||||||
|
+ alarm(6);
|
||||||
|
+ if (tcgetattr(sffileno(sfstderr), &tty) >= 0)
|
||||||
|
ttyp = &tty;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
@@ -230,7 +236,7 @@ mkpty(int* master, int* slave)
|
||||||
|
error(-1, "unable to get standard error terminal attributes");
|
||||||
|
}
|
||||||
|
#ifdef TIOCGWINSZ
|
||||||
|
- if (ioctl(STDERR_FILENO, TIOCGWINSZ, &win) >= 0)
|
||||||
|
+ if (ioctl(sffileno(sfstderr), TIOCGWINSZ, &win) >= 0)
|
||||||
|
winp = &win;
|
||||||
|
else
|
||||||
|
{
|
||||||
@@ -238,6 +244,12 @@ mkpty(int* master, int* slave)
|
@@ -238,6 +244,12 @@ mkpty(int* master, int* slave)
|
||||||
error(-1, "unable to get standard error window size");
|
error(-1, "unable to get standard error window size");
|
||||||
}
|
}
|
||||||
@ -36,6 +54,87 @@
|
|||||||
alarm(0);
|
alarm(0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@@ -317,9 +332,13 @@ process(Sfio_t* mp, Sfio_t* lp, int dela
|
||||||
|
char* s;
|
||||||
|
Sfio_t* ip;
|
||||||
|
Sfio_t* sps[2];
|
||||||
|
+ struct stat dst;
|
||||||
|
+ struct stat fst;
|
||||||
|
|
||||||
|
ip = sfstdin;
|
||||||
|
- for (;;)
|
||||||
|
+ if (!fstat(sffileno(ip), &dst) && !stat("/dev/null", &fst) && dst.st_dev == fst.st_dev && dst.st_ino == fst.st_ino)
|
||||||
|
+ ip = 0;
|
||||||
|
+ do
|
||||||
|
{
|
||||||
|
i = 0;
|
||||||
|
t = timeout;
|
||||||
|
@@ -336,39 +355,39 @@ process(Sfio_t* mp, Sfio_t* lp, int dela
|
||||||
|
{
|
||||||
|
if (n < 0)
|
||||||
|
error(ERROR_SYSTEM|2, "poll failed");
|
||||||
|
- if (t < 0)
|
||||||
|
- break;
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
- else
|
||||||
|
- for (i = 0; i < n; i++)
|
||||||
|
+ for (i = t = 0; i < n; i++)
|
||||||
|
+ {
|
||||||
|
+ if (!(sfvalue(sps[i]) & SF_READ))
|
||||||
|
+ /*skip*/;
|
||||||
|
+ else if (sps[i] == mp)
|
||||||
|
{
|
||||||
|
- if (!(sfvalue(sps[i]) & SF_READ))
|
||||||
|
- /*skip*/;
|
||||||
|
- else if (sps[i] == mp)
|
||||||
|
+ t++;
|
||||||
|
+ if (!(s = (char*)sfreserve(mp, SF_UNBOUND, -1)))
|
||||||
|
{
|
||||||
|
- if (!(s = (char*)sfreserve(mp, SF_UNBOUND, -1)))
|
||||||
|
- {
|
||||||
|
- sfclose(mp);
|
||||||
|
- mp = 0;
|
||||||
|
- }
|
||||||
|
- else if ((r = sfvalue(mp)) > 0 && (sfwrite(sfstdout, s, r) != r || sfsync(sfstdout)))
|
||||||
|
- {
|
||||||
|
- error(ERROR_SYSTEM|2, "output write failed");
|
||||||
|
- goto done;
|
||||||
|
- }
|
||||||
|
+ sfclose(mp);
|
||||||
|
+ mp = 0;
|
||||||
|
}
|
||||||
|
- else
|
||||||
|
+ else if ((r = sfvalue(mp)) > 0 && (sfwrite(sfstdout, s, r) != r || sfsync(sfstdout)))
|
||||||
|
{
|
||||||
|
- if (!(s = sfgetr(ip, '\n', 1)))
|
||||||
|
- ip = 0;
|
||||||
|
- else if (sfputr(mp, s, '\r') < 0 || sfsync(mp))
|
||||||
|
- {
|
||||||
|
- error(ERROR_SYSTEM|2, "write failed");
|
||||||
|
- goto done;
|
||||||
|
- }
|
||||||
|
+ error(ERROR_SYSTEM|2, "output write failed");
|
||||||
|
+ goto done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- }
|
||||||
|
+ else
|
||||||
|
+ {
|
||||||
|
+ t++;
|
||||||
|
+ if (!(s = sfgetr(ip, '\n', 1)))
|
||||||
|
+ ip = 0;
|
||||||
|
+ else if (sfputr(mp, s, '\r') < 0 || sfsync(mp))
|
||||||
|
+ {
|
||||||
|
+ error(ERROR_SYSTEM|2, "write failed");
|
||||||
|
+ goto done;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ } while (t);
|
||||||
|
done:
|
||||||
|
if (mp)
|
||||||
|
sfclose(mp);
|
||||||
--- src/cmd/builtin/what.c
|
--- src/cmd/builtin/what.c
|
||||||
+++ src/cmd/builtin/what.c 2012-02-13 11:02:18.645933606 +0000
|
+++ src/cmd/builtin/what.c 2012-02-13 11:02:18.645933606 +0000
|
||||||
@@ -68,7 +68,7 @@ static struct
|
@@ -68,7 +68,7 @@ static struct
|
||||||
|
@ -5,24 +5,7 @@
|
|||||||
| This is a backport from the beta version ksh93v-2013-08-29
|
| This is a backport from the beta version ksh93v-2013-08-29
|
||||||
--- src/cmd/ksh93/bltins/read.c
|
--- src/cmd/ksh93/bltins/read.c
|
||||||
+++ src/cmd/ksh93/bltins/read.c 2013-09-17 15:01:33.000000000 +0000
|
+++ src/cmd/ksh93/bltins/read.c 2013-09-17 15:01:33.000000000 +0000
|
||||||
@@ -227,6 +227,7 @@ int sh_readline(register Shell_t *shp,ch
|
@@ -280,24 +280,25 @@ int sh_readline(register Shell_t *shp,ch
|
||||||
char inquote = 0;
|
|
||||||
struct checkpt buff;
|
|
||||||
Edit_t *ep = (struct edit*)shp->gd->ed_context;
|
|
||||||
+ Namval_t *nq = 0;
|
|
||||||
if(!(iop=shp->sftable[fd]) && !(iop=sh_iostream(shp,fd)))
|
|
||||||
return(1);
|
|
||||||
sh_stats(STAT_READS);
|
|
||||||
@@ -257,6 +258,8 @@ int sh_readline(register Shell_t *shp,ch
|
|
||||||
else if(flags&C_FLAG)
|
|
||||||
{
|
|
||||||
char *sp = np->nvenv;
|
|
||||||
+ if(strchr(name,'['))
|
|
||||||
+ nq = np;
|
|
||||||
delim = -1;
|
|
||||||
nv_unset(np);
|
|
||||||
if(!nv_isattr(np,NV_MINIMAL))
|
|
||||||
@@ -280,24 +283,25 @@ int sh_readline(register Shell_t *shp,ch
|
|
||||||
if(size || (flags>>D_FLAG)) /* delimiter not new-line or fixed size read */
|
if(size || (flags>>D_FLAG)) /* delimiter not new-line or fixed size read */
|
||||||
{
|
{
|
||||||
if((shp->fdstatus[fd]&IOTTY) && !keytrap)
|
if((shp->fdstatus[fd]&IOTTY) && !keytrap)
|
||||||
@ -54,20 +37,7 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@@ -331,7 +335,11 @@ int sh_readline(register Shell_t *shp,ch
|
@@ -342,7 +343,7 @@ int sh_readline(register Shell_t *shp,ch
|
||||||
{
|
|
||||||
if(nfp->disc && nfp->disc->readf)
|
|
||||||
{
|
|
||||||
- Namval_t *mp = nv_open(name,shp->var_tree,oflags|NV_NOREF);
|
|
||||||
+ Namval_t *mp;
|
|
||||||
+ if(nq)
|
|
||||||
+ mp = nq;
|
|
||||||
+ else
|
|
||||||
+ mp = nv_open(name,shp->var_tree,oflags|NV_NOREF);
|
|
||||||
if((c=(*nfp->disc->readf)(mp,iop,delim,nfp))>=0)
|
|
||||||
return(c);
|
|
||||||
}
|
|
||||||
@@ -342,7 +350,7 @@ int sh_readline(register Shell_t *shp,ch
|
|
||||||
size = nv_size(np);
|
size = nv_size(np);
|
||||||
}
|
}
|
||||||
was_write = (sfset(iop,SF_WRITE,0)&SF_WRITE)!=0;
|
was_write = (sfset(iop,SF_WRITE,0)&SF_WRITE)!=0;
|
||||||
@ -76,7 +46,7 @@
|
|||||||
was_share = (sfset(iop,SF_SHARE,shp->redir0!=2)&SF_SHARE)!=0;
|
was_share = (sfset(iop,SF_SHARE,shp->redir0!=2)&SF_SHARE)!=0;
|
||||||
if(timeout || (shp->fdstatus[fd]&(IOTTY|IONOSEEK)))
|
if(timeout || (shp->fdstatus[fd]&(IOTTY|IONOSEEK)))
|
||||||
{
|
{
|
||||||
@@ -366,7 +374,7 @@ int sh_readline(register Shell_t *shp,ch
|
@@ -366,7 +367,7 @@ int sh_readline(register Shell_t *shp,ch
|
||||||
else
|
else
|
||||||
end = var + sizeof(buf) - 1;
|
end = var + sizeof(buf) - 1;
|
||||||
up = cur = var;
|
up = cur = var;
|
||||||
@ -85,7 +55,7 @@
|
|||||||
was_share = 1;
|
was_share = 1;
|
||||||
if(size==0)
|
if(size==0)
|
||||||
{
|
{
|
||||||
@@ -473,7 +481,7 @@ int sh_readline(register Shell_t *shp,ch
|
@@ -473,7 +474,7 @@ int sh_readline(register Shell_t *shp,ch
|
||||||
timerdel(timeslot);
|
timerdel(timeslot);
|
||||||
if(binary && !((size=nv_size(np)) && nv_isarray(np) && c!=size))
|
if(binary && !((size=nv_size(np)) && nv_isarray(np) && c!=size))
|
||||||
{
|
{
|
||||||
@ -94,7 +64,7 @@
|
|||||||
memcpy((char*)np->nvalue.cp,var,c);
|
memcpy((char*)np->nvalue.cp,var,c);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -819,7 +827,7 @@ done:
|
@@ -819,7 +820,7 @@ done:
|
||||||
sfset(iop,SF_SHARE,0);
|
sfset(iop,SF_SHARE,0);
|
||||||
nv_close(np);
|
nv_close(np);
|
||||||
if((shp->fdstatus[fd]&IOTTY) && !keytrap)
|
if((shp->fdstatus[fd]&IOTTY) && !keytrap)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user