diff options
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | Src/pattern.c | 11 |
2 files changed, 13 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog index d8e6b87f6..d87399d9f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-05-29 Peter Stephenson <p.w.stephenson@ntlworld.com> + + * 27021: Src/pattern.c: length of variable saving globflags + was wrong causing restored value to be wrong in pattern matching + on big-endian 64-bit systems. + 2009-05-28 Peter Stephenson <pws@csr.com> * Jun T.: 27010: Completion/Unix/Command/_date: Darwin. @@ -11780,5 +11786,5 @@ ***************************************************** * This is used by the shell to define $ZSH_PATCHLEVEL -* $Revision: 1.4701 $ +* $Revision: 1.4702 $ ***************************************************** diff --git a/Src/pattern.c b/Src/pattern.c index d4941253c..8ac79546d 100644 --- a/Src/pattern.c +++ b/Src/pattern.c @@ -668,7 +668,8 @@ patcompswitch(int paren, int *flagp) { long starter, br, ender, excsync = 0; int parno = 0; - int flags, gfchanged = 0, savglobflags = patglobflags; + int flags, gfchanged = 0; + long savglobflags = (long)patglobflags; Upat ptr; *flagp = 0; @@ -688,7 +689,7 @@ patcompswitch(int paren, int *flagp) br = patnode(P_BRANCH); if (!patcompbranch(&flags)) return 0; - if (patglobflags != savglobflags) + if (patglobflags != (int)savglobflags) gfchanged++; if (starter) pattail(starter, br); @@ -777,7 +778,7 @@ patcompswitch(int paren, int *flagp) patadd((char *)&up, 0, sizeof(union upat), 0); } } else { - patglobflags = savglobflags; + patglobflags = (int)savglobflags; } } newbr = patcompbranch(&flags); @@ -792,7 +793,7 @@ patcompswitch(int paren, int *flagp) return 0; if (gfnode) pattail(gfnode, newbr); - if (!tilde && patglobflags != savglobflags) + if (!tilde && patglobflags != (int)savglobflags) gfchanged++; pattail(starter, br); if (excsync) @@ -831,7 +832,7 @@ patcompswitch(int paren, int *flagp) * a later branch happened to put the flags back. */ pattail(ender, patnode(P_GFLAGS)); - patglobflags = savglobflags; + patglobflags = (int)savglobflags; patadd((char *)&savglobflags, 0, sizeof(long), 0); } |