python: Convert any iterable argument to a list (RHBZ#693324).
authorRichard W.M. Jones <rjones@redhat.com>
Mon, 4 Apr 2011 11:48:02 +0000 (12:48 +0100)
committerRichard W.M. Jones <rjones@redhat.com>
Mon, 11 Apr 2011 10:08:32 +0000 (11:08 +0100)
Thanks to Erez Shinan.
(cherry picked from commit afa17809599f3ebc82c3feef025ca812fb26c9fe)

generator/generator_python.ml

index 937c092..9514e4a 100644 (file)
@@ -1,5 +1,5 @@
 (* libguestfs
- * Copyright (C) 2009-2010 Red Hat Inc.
+ * Copyright (C) 2009-2011 Red Hat Inc.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -647,6 +647,18 @@ class GuestFS:
         let doc = String.concat "\n        " doc in
         pr "        u\"\"\"%s\"\"\"\n" doc;
       );
+      (* Callers might pass in iterables instead of plain lists;
+       * convert those to plain lists because the C side of things
+       * cannot deal with iterables.  (RHBZ#693306).
+       *)
+      List.iter (
+        function
+        | Pathname _ | Device _ | Dev_or_Path _ | String _ | Key _
+        | FileIn _ | FileOut _ | OptString _ | Bool _ | Int _ | Int64 _
+        | BufferIn _ | Pointer _ -> ()
+        | StringList n | DeviceList n ->
+            pr "        %s = list (%s)\n" n n
+      ) args;
       pr "        return libguestfsmod.%s (self._o" name;
       List.iter (fun arg -> pr ", %s" (name_of_argt arg)) (args@optargs);
       pr ")\n\n";