lib: Common code for formatting the qemu -drive parameter.
[libguestfs.git] / generator / generator_c.ml
index 2e9607b..bfdea33 100644 (file)
@@ -180,6 +180,11 @@ and generate_actions_pod () =
         generate_prototype ~extern:false ~indent:" " ~handle:"g" name style;
         pr "\n\n";
 
+        (match deprecation_notice ~prefix:"guestfs_" flags with
+         | None -> ()
+         | Some txt -> pr "%s\n\n" txt
+        );
+
         let uc_shortname = String.uppercase shortname in
         if optargs <> [] then (
           pr "You may supply a list of optional arguments to this call.\n";
@@ -255,10 +260,6 @@ I<The caller must free the returned buffer after use>.\n\n"
           pr "This function takes a key or passphrase parameter which
 could contain sensitive material.  Read the section
 L</KEYS AND PASSPHRASES> for more information.\n\n";
-        (match deprecation_notice flags with
-         | None -> ()
-         | Some txt -> pr "%s\n\n" txt
-        );
         (match lookup_api_version name with
          | Some version -> pr "(Added in %s)\n\n" version
          | None -> ()
@@ -436,13 +437,13 @@ typedef void (*guestfs_event_callback) (
 #endif
 
 #define LIBGUESTFS_HAVE_SET_EVENT_CALLBACK 1
-int guestfs_set_event_callback (guestfs_h *g,
-                                guestfs_event_callback cb,
-                                uint64_t event_bitmask,
-                                int flags,
-                                void *opaque);
+extern int guestfs_set_event_callback (guestfs_h *g,
+                                       guestfs_event_callback cb,
+                                       uint64_t event_bitmask,
+                                       int flags,
+                                       void *opaque);
 #define LIBGUESTFS_HAVE_DELETE_EVENT_CALLBACK 1
-void guestfs_delete_event_callback (guestfs_h *g, int event_handle);
+extern void guestfs_delete_event_callback (guestfs_h *g, int event_handle);
 
 /* Old-style event handling. */
 #ifndef GUESTFS_TYPEDEF_LOG_MESSAGE_CB
@@ -483,6 +484,10 @@ extern void guestfs_set_close_callback (guestfs_h *g, guestfs_close_cb cb, void
 extern void guestfs_set_progress_callback (guestfs_h *g, guestfs_progress_cb cb, void *opaque)
   GUESTFS_DEPRECATED_BY(\"set_event_callback\");
 
+/* User cancellation. */
+#define LIBGUESTFS_HAVE_USER_CANCEL 1
+extern void guestfs_user_cancel (guestfs_h *g);
+
 /* Private data area. */
 #define LIBGUESTFS_HAVE_SET_PRIVATE 1
 extern void guestfs_set_private (guestfs_h *g, const char *key, void *data);
@@ -753,6 +758,13 @@ trace_send_line (guestfs_h *g)
 
 ";
 
+  (* Generate code for enter events. *)
+  let enter_event shortname =
+    pr "  guestfs___call_callbacks_message (g, GUESTFS_EVENT_ENTER,\n";
+    pr "                                    \"%s\", %d);\n"
+      shortname (String.length shortname)
+  in
+
   (* Generate code to check String-like parameters are not passed in
    * as NULL (returning an error if they are).
    *)
@@ -1022,6 +1034,7 @@ trace_send_line (guestfs_h *g)
            pr "  struct guestfs_%s_list *r;\n" typ
       );
       pr "\n";
+      enter_event shortname;
       check_null_strings shortname style;
       reject_unknown_optargs shortname style;
       trace_call shortname style;
@@ -1114,6 +1127,7 @@ trace_send_line (guestfs_h *g)
         pr "  const uint64_t progress_hint = 0;\n";
 
       pr "\n";
+      enter_event shortname;
       check_null_strings shortname style;
       reject_unknown_optargs shortname style;
       trace_call shortname style;
@@ -1488,6 +1502,7 @@ and generate_linker_script () =
     "guestfs_set_private";
     "guestfs_set_progress_callback";
     "guestfs_set_subprocess_quit_callback";
+    "guestfs_user_cancel";
 
     (* Unofficial parts of the API: the bindings code use these
      * functions, so it is useful to export them.