From 79c4204ff9fb126046945be763c9490edf1c60cf Mon Sep 17 00:00:00 2001 From: joe Date: Sat, 7 Dec 2013 16:37:00 -0500 Subject: Command line option validation. --- kiki.hs | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/kiki.hs b/kiki.hs index f49f170..e8f7998 100644 --- a/kiki.hs +++ b/kiki.hs @@ -1622,20 +1622,20 @@ main = do let (args,trail1) = break (=="--") args_raw trail = drop 1 trail1 (sargs,margs) = - (sargs, foldl' (\m (k:xs)->Map.alter (appendArgs xs) k m) + (sargs, foldl' (\m (k:xs)->Map.alter (appendArgs k xs) k m) Map.empty gargs) - where (sargs,vargs) = partitionStaticArguments - [ ("--homedir",1) - , ("--passphrase-fd",1) - , ("--import",0) - , ("--autosign",0) - , ("--show-wk",0) - , ("--show-all",0) - , ("--show-pem",1) - , ("--help",0) - ] - args + where (sargs,vargs) = partitionStaticArguments sargspec args + sargspec = [ ("--homedir",1) + , ("--passphrase-fd",1) + , ("--import",0) + , ("--autosign",0) + , ("--show-wk",0) + , ("--show-all",0) + , ("--show-pem",1) + , ("--help",0) + ] + argspec = map fst sargspec ++ ["--keyrings","--keypairs"] args' = if map (take 1) (take 1 vargs) == ["-"] then vargs else "--keyrings":vargs @@ -1643,7 +1643,11 @@ main = do . toLast (++trail) . groupBy (\_ s-> take 1 s /= "-") $ args' - appendArgs xs = Just . maybe xs (++xs) + appendArgs k xs opt = + if k `elem` argspec + then Just . maybe xs (++xs) $ opt + else error . unlines $ [ "unrecognized option "++k + , "Use --help for usage." ] -- putStrLn $ "margs = " ++ show (Map.assocs margs) unkeysRef <- newIORef Map.empty pwRef <- newIORef Nothing -- cgit v1.2.3