.
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
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
--- src/cmd/builtin/pty.c
|
||||
+++ 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
|
||||
char* sname;
|
||||
#endif
|
||||
@ -13,6 +13,24 @@
|
||||
/*
|
||||
* some systems hang hard during the handshake
|
||||
* 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)
|
||||
error(-1, "unable to get standard error window size");
|
||||
}
|
||||
@ -36,6 +54,87 @@
|
||||
alarm(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 2012-02-13 11:02:18.645933606 +0000
|
||||
@@ -68,7 +68,7 @@ static struct
|
||||
|
@ -5,24 +5,7 @@
|
||||
| This is a backport from the beta version ksh93v-2013-08-29
|
||||
--- src/cmd/ksh93/bltins/read.c
|
||||
+++ 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
|
||||
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
|
||||
@@ -280,24 +280,25 @@ int sh_readline(register Shell_t *shp,ch
|
||||
if(size || (flags>>D_FLAG)) /* delimiter not new-line or fixed size read */
|
||||
{
|
||||
if((shp->fdstatus[fd]&IOTTY) && !keytrap)
|
||||
@ -54,20 +37,7 @@
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -331,7 +335,11 @@ 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
|
||||
@@ -342,7 +343,7 @@ int sh_readline(register Shell_t *shp,ch
|
||||
size = nv_size(np);
|
||||
}
|
||||
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;
|
||||
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
|
||||
end = var + sizeof(buf) - 1;
|
||||
up = cur = var;
|
||||
@ -85,7 +55,7 @@
|
||||
was_share = 1;
|
||||
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);
|
||||
if(binary && !((size=nv_size(np)) && nv_isarray(np) && c!=size))
|
||||
{
|
||||
@ -94,7 +64,7 @@
|
||||
memcpy((char*)np->nvalue.cp,var,c);
|
||||
else
|
||||
{
|
||||
@@ -819,7 +827,7 @@ done:
|
||||
@@ -819,7 +820,7 @@ done:
|
||||
sfset(iop,SF_SHARE,0);
|
||||
nv_close(np);
|
||||
if((shp->fdstatus[fd]&IOTTY) && !keytrap)
|
||||
|
Loading…
x
Reference in New Issue
Block a user