zsh-workers
 help / color / mirror / code / Atom feed
* histlexwords error with >! token
@ 2015-01-25 18:52 Mikael Magnusson
  2015-01-25 19:59 ` Bart Schaefer
  0 siblings, 1 reply; 5+ messages in thread
From: Mikael Magnusson @ 2015-01-25 18:52 UTC (permalink / raw)
  To: zsh workers

Even though the code appears to specially handle it, I still get this error,
 hist.c:3477: bad(1) wordsplit reading history: echo hello >! /dev/null
at: >! /dev/null
word: >|

The (1) indicates that it's the first bad that gets set, ie this one
            if (!*wptr) {
                /*
                 * End of the word before the end of the
                 * line: not good.
                 */
                bad = 1;
                loop_next = 1;
                break;
            }

and just below that is

            /*
             * Oddity 2: !'s turn into |'s.
             */
            if (*lptr == *wptr ||
                (*lptr == '!' && *wptr == '|')) {
                lptr++;
                wptr++;

I have no idea why *wptr would be NULL here. Entries that say >|
instead of >! do not produce the error.

-- 
Mikael Magnusson


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: histlexwords error with >! token
  2015-01-25 18:52 histlexwords error with >! token Mikael Magnusson
@ 2015-01-25 19:59 ` Bart Schaefer
  2015-01-25 20:40   ` Mikael Magnusson
  0 siblings, 1 reply; 5+ messages in thread
From: Bart Schaefer @ 2015-01-25 19:59 UTC (permalink / raw)
  To: zsh workers

On Jan 25,  7:52pm, Mikael Magnusson wrote:
} Subject: histlexwords error with >! token
}
} Even though the code appears to specially handle it, I still get this error,
}  hist.c:3477: bad(1) wordsplit reading history: echo hello >! /dev/null
} at: >! /dev/null
} word: >|

Try this:


diff --git a/Src/hist.c b/Src/hist.c
index 11d9722..87d0723 100644
--- a/Src/hist.c
+++ b/Src/hist.c
@@ -3452,7 +3452,8 @@ histsplitwords(char *lineptr, short **wordsp, int *nwordsp, int *nwordposp,
 			if (*lptr == *wptr ||
 			    (*lptr == '!' && *wptr == '|')) {
 			    lptr++;
-			    wptr++;
+			    if (!*++wptr)
+				break;
 			} else if (lptr[0] == '\\' &&
 				   lptr[1] == '\n') {
 			    /*


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: histlexwords error with >! token
  2015-01-25 19:59 ` Bart Schaefer
@ 2015-01-25 20:40   ` Mikael Magnusson
  2015-01-25 21:15     ` Bart Schaefer
  0 siblings, 1 reply; 5+ messages in thread
From: Mikael Magnusson @ 2015-01-25 20:40 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh workers

On Sun, Jan 25, 2015 at 8:59 PM, Bart Schaefer
<schaefer@brasslantern.com> wrote:
> On Jan 25,  7:52pm, Mikael Magnusson wrote:
> } Subject: histlexwords error with >! token
> }
> } Even though the code appears to specially handle it, I still get this error,
> }  hist.c:3477: bad(1) wordsplit reading history: echo hello >! /dev/null
> } at: >! /dev/null
> } word: >|
>
> Try this:
>
>
> diff --git a/Src/hist.c b/Src/hist.c
> index 11d9722..87d0723 100644
> --- a/Src/hist.c
> +++ b/Src/hist.c
> @@ -3452,7 +3452,8 @@ histsplitwords(char *lineptr, short **wordsp, int *nwordsp, int *nwordposp,
>                         if (*lptr == *wptr ||
>                             (*lptr == '!' && *wptr == '|')) {
>                             lptr++;
> -                           wptr++;
> +                           if (!*++wptr)
> +                               break;
>                         } else if (lptr[0] == '\\' &&
>                                    lptr[1] == '\n') {
>                             /*

That appears to do the trick. I also tried recalling the words with
insert-last-word and copy-earlier-word and they show up as expected
even when they contain spaces, which wasn't the case before the patch.

-- 
Mikael Magnusson


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: histlexwords error with >! token
  2015-01-25 20:40   ` Mikael Magnusson
@ 2015-01-25 21:15     ` Bart Schaefer
  2015-01-25 21:32       ` Mikael Magnusson
  0 siblings, 1 reply; 5+ messages in thread
From: Bart Schaefer @ 2015-01-25 21:15 UTC (permalink / raw)
  To: zsh workers

On Jan 25,  9:40pm, Mikael Magnusson wrote:
}
} > -                           wptr++;
} > +                           if (!*++wptr)
} > +                               break;
} 
} That appears to do the trick. I also tried recalling the words with
} insert-last-word and copy-earlier-word and they show up as expected
} even when they contain spaces, which wasn't the case before the patch.

Hm, that's a little strange (unless you mean this happens on lines that
also contain ">!") -- for the simple case of words containing a space,
the strpfx() call up at line 3407 should have done the trick in the
first place.

Nevertheless, I'll go ahead and push this for now.


^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: histlexwords error with >! token
  2015-01-25 21:15     ` Bart Schaefer
@ 2015-01-25 21:32       ` Mikael Magnusson
  0 siblings, 0 replies; 5+ messages in thread
From: Mikael Magnusson @ 2015-01-25 21:32 UTC (permalink / raw)
  To: Bart Schaefer; +Cc: zsh workers

On Sun, Jan 25, 2015 at 10:15 PM, Bart Schaefer
<schaefer@brasslantern.com> wrote:
> On Jan 25,  9:40pm, Mikael Magnusson wrote:
> }
> } > -                           wptr++;
> } > +                           if (!*++wptr)
> } > +                               break;
> }
> } That appears to do the trick. I also tried recalling the words with
> } insert-last-word and copy-earlier-word and they show up as expected
> } even when they contain spaces, which wasn't the case before the patch.
>
> Hm, that's a little strange (unless you mean this happens on lines that
> also contain ">!") -- for the simple case of words containing a space,
> the strpfx() call up at line 3407 should have done the trick in the
> first place.
>
> Nevertheless, I'll go ahead and push this for now.

Yes, I'm talking about a line that has >! on it. Without the patch,
recalling words gives you 'foo\' and 'bar' separately instead of a
single 'foo\ bar'. What I meant by pointing that out in the first
place is that stuff is actually working, we didn't just suppress an
error message :).

-- 
Mikael Magnusson


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-01-25 21:32 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-01-25 18:52 histlexwords error with >! token Mikael Magnusson
2015-01-25 19:59 ` Bart Schaefer
2015-01-25 20:40   ` Mikael Magnusson
2015-01-25 21:15     ` Bart Schaefer
2015-01-25 21:32       ` Mikael Magnusson

Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).