X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=src%2Fgenerator.ml;h=9c0632ef7b7c8f17c63213021a7566a748efd783;hb=ef2b0cf761b6281a6a728aacb6ac0ec91fad33c8;hp=86f2fe20414dd2dd297c15004a9daef055722998;hpb=da947eadcfa1367c2d634667068db813a87a6dd1;p=libguestfs.git diff --git a/src/generator.ml b/src/generator.ml index 86f2fe2..9c0632e 100755 --- a/src/generator.ml +++ b/src/generator.ml @@ -7264,14 +7264,11 @@ and generate_haskell_hs () = * at the moment. Please help out! *) let can_generate style = - let check_no_bad_args = - List.for_all (function Bool _ | Int _ -> false | _ -> true) - in match style with - | RErr, args -> check_no_bad_args args - | RBool _, _ + | RErr, _ | RInt _, _ - | RInt64 _, _ + | RInt64 _, _ -> true + | RBool _, _ | RConstString _, _ | RString _, _ | RStringList _, _ @@ -7300,6 +7297,7 @@ module Guestfs ( ) where import Foreign import Foreign.C +import Foreign.C.Types import IO import Control.Exception import Data.Typeable @@ -7363,6 +7361,7 @@ last_error h = do pr "%s %s = do\n" name (String.concat " " ("h" :: List.map name_of_argt (snd style))); pr " r <- "; + (* Convert pointer arguments using with* functions. *) List.iter ( function | FileIn n @@ -7370,17 +7369,18 @@ last_error h = do | String n -> pr "withCString %s $ \\%s -> " n n | OptString n -> pr "maybeWith withCString %s $ \\%s -> " n n | StringList n -> pr "withMany withCString %s $ \\%s -> withArray0 nullPtr %s $ \\%s -> " n n n n - | Bool n -> - (* XXX this doesn't work *) - pr " let\n"; - pr " %s = case %s of\n" n n; - pr " False -> 0\n"; - pr " True -> 1\n"; - pr " in fromIntegral %s $ \\%s ->\n" n n - | Int n -> pr "fromIntegral %s $ \\%s -> " n n + | Bool _ | Int _ -> () ) (snd style); + (* Convert integer arguments. *) + let args = + List.map ( + function + | Bool n -> sprintf "(fromBool %s)" n + | Int n -> sprintf "(fromIntegral %s)" n + | FileIn n | FileOut n | String n | OptString n | StringList n -> n + ) (snd style) in pr "withForeignPtr h (\\p -> c_%s %s)\n" name - (String.concat " " ("p" :: List.map name_of_argt (snd style))); + (String.concat " " ("p" :: args)); (match fst style with | RErr | RInt _ | RInt64 _ | RBool _ -> pr " if (r == -1)\n";