@@ -112,7 +112,9 @@ read_from_device = do
112112 max_bytes <- use $ input_buffer.size
113113 liftIO $ do
114114 bytes_read <- fdReadBuf fd buffer_ptr (fromIntegral max_bytes)
115− fmap (map $ chr . fromIntegral) $ peekArray (fromIntegral bytes_read) buffer_ptr
115+ if bytes_read > 0
116+ then fmap (map $ chr . fromIntegral) $ peekArray (fromIntegral bytes_read) buffer_ptr
117+ else return []
116118
117119apply_timing_config :: Fd -> Config -> IO ()
118120apply_timing_config fd config =
@@ -149,10 +151,9 @@ compile :: ClassifyTable -> [Char] -> KClass
149151compile table = cl' where
150152 -- take all prefixes and create a set of these
151153 prefix_set = S.fromList $ concatMap (init . inits . fst) $ table
152− -- create a map from strings to event
153− event_for_input = flip M.lookup (M.fromList table)
154+ event_for_input = M.fromList table
154155 cl' [] = Prefix
155− cl' input_block = case event_for_input input_block of
156+ cl' input_block = case M.lookup input_block event_for_input of
156157 Just (EvKey k m) -> Valid k m []
157158 Nothing -> case S.member input_block prefix_set of
158159 True -> Prefix
@@ -163,7 +164,7 @@ compile table = cl' where
163164 -- prefixes of an event.
164165 False ->
165166 let input_prefixes = init $ inits input_block
166− in case mapMaybe (\s -> (,) s `fmap` event_for_input s) input_prefixes of
167+ in case mapMaybe (\s -> (,) s `fmap` M.lookup s event_for_input) input_prefixes of
167168 (s,EvKey k m) : _ -> Valid k m (drop (length s) input_block)
168169 -- neither a prefix or a full event. Might be interesting to log.
169170 [] -> Invalid