inspect: Refuse to download software hive if it is huge.
[libguestfs.git] / generator / generator_daemon.ml
index 4ac2a6e..e3d87e5 100644 (file)
@@ -33,7 +33,7 @@ open Generator_c
 let generate_daemon_actions_h () =
   generate_header CStyle GPLv2plus;
 
-  pr "#include \"../src/guestfs_protocol.h\"\n";
+  pr "#include \"guestfs_protocol.h\"\n";
   pr "\n";
 
   List.iter (
@@ -58,17 +58,20 @@ and generate_daemon_actions () =
   pr "\n";
   pr "#include \"daemon.h\"\n";
   pr "#include \"c-ctype.h\"\n";
-  pr "#include \"../src/guestfs_protocol.h\"\n";
+  pr "#include \"guestfs_protocol.h\"\n";
   pr "#include \"actions.h\"\n";
   pr "\n";
 
   List.iter (
-    fun (name, style, _, _, _, _, _) ->
+    fun (name, (ret, args, optargs), _, _, _, _, _) ->
+      if optargs <> [] then
+        failwithf "optional arguments not supported in the daemon yet";
+
       (* Generate server-side stubs. *)
       pr "static void %s_stub (XDR *xdr_in)\n" name;
       pr "{\n";
       let error_code =
-        match fst style with
+        match ret with
         | RErr | RInt _ -> pr "  int r;\n"; "-1"
         | RInt64 _ -> pr "  int64_t r;\n"; "-1"
         | RBool _ -> pr "  int r;\n"; "-1"
@@ -83,7 +86,7 @@ and generate_daemon_actions () =
             pr "  char *r;\n";
             "NULL" in
 
-      (match snd style with
+      (match args with
        | [] -> ()
        | args ->
            pr "  struct guestfs_%s_args args;\n" name;
@@ -102,14 +105,15 @@ and generate_daemon_actions () =
              | BufferIn n ->
                  pr "  const char *%s;\n" n;
                  pr "  size_t %s_size;\n" n
+             | Pointer _ -> assert false
            ) args
       );
       pr "\n";
 
       let is_filein =
-        List.exists (function FileIn _ -> true | _ -> false) (snd style) in
+        List.exists (function FileIn _ -> true | _ -> false) args in
 
-      (match snd style with
+      (match args with
        | [] -> ()
        | args ->
            pr "  memset (&args, 0, sizeof args);\n";
@@ -171,12 +175,13 @@ and generate_daemon_actions () =
              | BufferIn n ->
                  pr "  %s = args.%s.%s_val;\n" n n n;
                  pr "  %s_size = args.%s.%s_len;\n" n n n
+             | Pointer _ -> assert false
            ) args;
            pr "\n"
       );
 
       (* this is used at least for do_equal *)
-      if List.exists (function Pathname _ -> true | _ -> false) (snd style) then (
+      if List.exists (function Pathname _ -> true | _ -> false) args then (
         (* Emit NEED_ROOT just once, even when there are two or
            more Pathname args *)
         pr "  NEED_ROOT (%s, goto done);\n"
@@ -187,13 +192,12 @@ and generate_daemon_actions () =
        * parameters, since these go "outside" the RPC protocol.
        *)
       let args' =
-        List.filter (function FileIn _ | FileOut _ -> false | _ -> true)
-          (snd style) in
+        List.filter (function FileIn _ | FileOut _ -> false | _ -> true) args in
       pr "  r = do_%s " name;
-      generate_c_call_args (fst style, args');
+      generate_c_call_args (ret, args', optargs);
       pr ";\n";
 
-      (match fst style with
+      (match ret with
        | RErr | RInt _ | RInt64 _ | RBool _
        | RConstString _ | RConstOptString _
        | RString _ | RStringList _ | RHashtable _
@@ -216,11 +220,11 @@ and generate_daemon_actions () =
        * send its own reply.
        *)
       let no_reply =
-        List.exists (function FileOut _ -> true | _ -> false) (snd style) in
+        List.exists (function FileOut _ -> true | _ -> false) args in
       if no_reply then
         pr "  /* do_%s has already sent a reply */\n" name
       else (
-        match fst style with
+        match ret with
         | RErr -> pr "  reply (NULL, NULL);\n"
         | RInt n | RInt64 n | RBool n ->
             pr "  struct guestfs_%s_ret ret;\n" name;
@@ -267,7 +271,7 @@ and generate_daemon_actions () =
 
       (* Free the args. *)
       pr "done:\n";
-      (match snd style with
+      (match args with
        | [] -> ()
        | _ ->
            pr "  xdr_free ((xdrproc_t) xdr_guestfs_%s_args, (char *) &args);\n"
@@ -283,7 +287,7 @@ and generate_daemon_actions () =
   pr "  switch (proc_nr) {\n";
 
   List.iter (
-    fun (name, style, _, _, _, _, _) ->
+    fun (name, _, _, _, _, _, _) ->
       pr "    case GUESTFS_PROC_%s:\n" (String.uppercase name);
       pr "      %s_stub (xdr_in);\n" name;
       pr "      break;\n"