Remote protocol working.
[wrappi.git] / generator / wrappi_c_xdr.ml
index 2eb4b52..78a6961 100644 (file)
@@ -64,10 +64,12 @@ let pr_xdr_of_ptype n = function
   | TUnion uname ->
     pr "  if (!xdr_union_%s (xdrs, %s)) return FALSE;\n" uname n
 
-let generate_lib_proto_xdr_impl_c api =
+let generate_lib_xdr_c api =
   generate_header inputs CStyle LGPLv2plus;
 
   pr "\
+#include <config.h>
+
 #include <stdlib.h>
 #include <rpc/xdr.h>
 
@@ -105,44 +107,42 @@ xdr_unlimited_string (XDR *xdrs, unlimited_string *objp)
 
   iter_entry_points api (
     fun ep ->
-      if not ep.ep_local then (
-        let name = ep.ep_name in
-        let ret, req, opt = ep.ep_ftype in
-
-        pr "\n";
-        pr "bool_t\n";
-        pr "wrap_int_xdr_%s_args (XDR *xdrs, struct wrap_int_%s_args *args)\n"
-          name name;
-        pr "{\n";
-
-        List.iter (
-          fun (n, t, _) ->
-            pr_xdr_of_ptype (sprintf "args->%s" n) t
-        ) req;
-
-        if opt <> [] then assert false; (* XXX not implemented *)
-
-        pr "  return TRUE;\n";
-        pr "}\n";
-
-        pr "\n";
-        pr "bool_t\n";
-        pr "wrap_int_xdr_%s_ret (XDR *xdrs, struct wrap_int_%s_ret *ret)\n"
-          name name;
-        pr "{\n";
-
-        (match ret with
-        | RVoid -> ()
-        | RStaticString ->
-          assert false (* RStaticString cannot be used for remote functions. *)
-        | Return t ->
-          pr_xdr_of_ptype "ret->r" t
-        );
-
-        pr "  return TRUE;\n";
-        pr "}\n"
-      )
+      let name = ep.ep_name in
+      let ret, req, opt = ep.ep_ftype in
+
+      pr "\n";
+      pr "bool_t\n";
+      pr "wrap_int_xdr_%s_args (XDR *xdrs, struct wrap_%s_args *args)\n"
+        name name;
+      pr "{\n";
+
+      List.iter (
+        fun (n, t, _) ->
+          pr_xdr_of_ptype (sprintf "args->%s" n) t
+      ) req;
+
+      if opt <> [] then assert false; (* XXX not implemented *)
+
+      pr "  return TRUE;\n";
+      pr "}\n";
+
+      pr "\n";
+      pr "bool_t\n";
+      pr "wrap_int_xdr_%s_ret (XDR *xdrs, struct wrap_%s_ret *ret)\n"
+        name name;
+      pr "{\n";
+
+      (match ret with
+      | RVoid -> ()
+      | RStaticString ->
+        pr_xdr_of_ptype "ret->r" TString (* XXX is this right? *)
+      | Return t ->
+        pr_xdr_of_ptype "ret->r" t
+      );
+
+      pr "  return TRUE;\n";
+      pr "}\n"
   )
 
 let generate api =
-  output_to "lib/proto-xdr-impl.c" generate_lib_proto_xdr_impl_c api
+  output_to "lib/xdr.c" generate_lib_xdr_c api