URI: 
       Fix match function bugs - st - simple terminal
  HTML git clone https://git.parazyd.org/st
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 6e1c7c8afce3a0e6f896231a3155a27543d261e5
   DIR parent 90c6f055b637a58da0381a21b4a290ce26f56d8f
  HTML Author: Roberto E. Vargas Caballero <k0ga@shike2.com>
       Date:   Sun, 23 Jun 2013 10:33:53 +0200
       
       Fix match function bugs
       
       There were two problems with match denfinition.
       
       1) There was a forward declaration in the form:
       
               static inline bool match(uint, uint);
       
       but later the function was defined as:
       
               inline bool
               match(uint mask, uint state) {
       
       This causes that there were two different functions in the code, one local
       and inline, and other inline but extern. All was working without problems
       due to we were using -Os, and the compiler was using the extern definition
       and it was no expanding the static declaration. If you removed the -Os flag,
       then you got linker errors due it was no able to find the static definition
       of the static declaration.
       
       2) The mask checking was incorrect because we were doing the test:
       
               (state & mask) != state
       
       and this test only was saying that at least all the enabled bits of state
       were enabled also in mask, but no all the possible bits in mask. This was
       the origin of the bug reported by Xavier Cartron, where he said it was
       possible activated some shortcuts with some of the modifiers defined in the
       config.h file.
       
       Diffstat:
         M st.c                                |      10 +++++-----
       
       1 file changed, 5 insertions(+), 5 deletions(-)
       ---
   DIR diff --git a/st.c b/st.c
       @@ -3355,17 +3355,17 @@ focus(XEvent *ev) {
                }
        }
        
       -inline bool
       +static inline bool
        match(uint mask, uint state) {
       -        state &= ~(ignoremod);
       +        state &= ~ignoremod;
        
                if(mask == XK_NO_MOD && state)
                        return false;
                if(mask != XK_ANY_MOD && mask != XK_NO_MOD && !state)
                        return false;
       -        if((state & mask) != state)
       -                return false;
       -        return true;
       +        if(mask == XK_ANY_MOD)
       +                return true;
       +        return state == mask;
        }
        
        void