I should be able to detect that cat is a builtin version of /bin/cat and implicitly treat it as /bin/cat. I'll put this on my list.
On Mon, Aug 18, 2014 at 9:18 AM, Dr. Werner Fink <wer...@suse.de> wrote: > On Wed, Aug 06, 2014 at 09:03:22PM -0400, David Korn wrote: > > I have attached a different fix that doesn't have the problem the last > one > > does. However, if the last command in the pipeline is a shell built-in, > it > > could hang for large output. > > > > Let me know if this works for you. > > It hangs as `cat' is a shell built-in in normal case: > > /usr/src/packages/BUILD/ksh93> ./arch/linux.i386-64/src/cmd/ksh93/ksh > /usr/src/packages/BUILD/ksh93> x=`cat ~/testfile.txt | cat -` > Killed > > whereas this one > > /usr/src/packages/BUILD/ksh93> x=`cat ~/testfile.txt | /bin/cat -` > /usr/src/packages/BUILD/ksh93> > > does work ... IMHO both should work. The test suite does survive with > this patch. > > Werner > > > > > > > > > On Fri, Jul 25, 2014 at 4:04 AM, Dr. Werner Fink <wer...@suse.de> wrote: > > > > > On Thu, Jul 24, 2014 at 11:35:01AM -0400, David Korn wrote: > > > > I finally got a chance to look at this. > > > > > > > > The problem is that the standard is ambiguous about when a command > > > > substitution ends. > > > > > > > > The bourne shell used a pipe for command substitution and command > > > > substitution terminated when the pipe closed. Thus, if you had a > command > > > > the wrote on standard output, forked and exited and the child wrote > on that > > > > pipe, the output from both processes was part of the command > substitution. > > > > > > > > ksh considered the command substitution done when the command > completed and > > > > used memory for files less that 64K(IOBSIZE) and this created a tmp > file > > > > if it was larger. > > > > > > > > I tried to restore the old bourne shell semantics for `` so that the > > > > foreback test would work. However, this caused the example you have > to > > > > hang. Here is a change which should fix this by using pipes for all > `` not > > > > just large ones. Here is the one line patch: > > > > > > > > --- old/sh/subshell.c Wed Apr 2 09:57:00 2014 > > > > +++new/sh/subshell.c Thu Jul 24 11:19:43 2014 > > > > @@ -593,7 +574,7 @@ > > > > sp->tmpfd = -1; > > > > sp->pipefd = -1; > > > > /* use sftmp() file for standard output */ > > > > - if(!(iop = > sftmp(comsub==1?PIPE_BUF:IOBSIZE))) > > > > + if(!(iop = sftmp(comsub==1?0:IOBSIZE))) > > > > { > > > > sfswap(sp->saveout,sfstdout); > > > > > > > > errormsg(SH_DICT,ERROR_system(1),e_tmpcreate); > > > > > > > > > > > > Let me know. > > > > > > -- > "Having a smoking section in a restaurant is like having > a peeing section in a swimming pool." -- Edward Burr >
_______________________________________________ ast-developers mailing list ast-developers@lists.research.att.com http://lists.research.att.com/mailman/listinfo/ast-developers