+" typedef void (*guestfs_error_handler_cb) (guestfs_h *g,\n"
+" void *opaque,\n"
+" const char *msg);\n"
+" void guestfs_set_error_handler (guestfs_h *g,\n"
+" guestfs_error_handler_cb cb,\n"
+" void *opaque);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1370
+msgid ""
+"The callback C<cb> will be called if there is an error. The parameters "
+"passed to the callback are an opaque data pointer and the error message "
+"string."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1374
+msgid ""
+"C<errno> is not passed to the callback. To get that the callback must call "
+"L</guestfs_last_errno>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1377
+msgid ""
+"Note that the message string C<msg> is freed as soon as the callback "
+"function returns, so if you want to stash it somewhere you must make your "
+"own copy."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1381
+msgid "The default handler prints messages on C<stderr>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1383
+msgid "If you set C<cb> to C<NULL> then I<no> handler is called."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1385
+msgid "guestfs_get_error_handler"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1387
+#, no-wrap
+msgid ""
+" guestfs_error_handler_cb guestfs_get_error_handler (guestfs_h *g,\n"
+" void **opaque_rtn);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1390
+msgid "Returns the current error handler callback."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1392
+msgid "guestfs_set_out_of_memory_handler"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1394
+#, no-wrap
+msgid ""
+" typedef void (*guestfs_abort_cb) (void);\n"
+" int guestfs_set_out_of_memory_handler (guestfs_h *g,\n"
+" guestfs_abort_cb);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1398
+msgid ""
+"The callback C<cb> will be called if there is an out of memory situation. "
+"I<Note this callback must not return>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1401
+msgid "The default is to call L<abort(3)>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1403
+msgid "You cannot set C<cb> to C<NULL>. You can't ignore out of memory situations."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1406
+msgid "guestfs_get_out_of_memory_handler"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1408
+#, no-wrap
+msgid ""
+" guestfs_abort_fn guestfs_get_out_of_memory_handler (guestfs_h *g);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1410
+msgid "This returns the current out of memory handler."
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:1412
+msgid "API CALLS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1414 ../fish/guestfish.pod:958
+msgid "@ACTIONS@"
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:1416
+msgid "STRUCTURES"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1418
+msgid "@STRUCTS@"
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:1420
+msgid "AVAILABILITY"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1422
+msgid "GROUPS OF FUNCTIONALITY IN THE APPLIANCE"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1424
+msgid ""
+"Using L</guestfs_available> you can test availability of the following "
+"groups of functions. This test queries the appliance to see if the "
+"appliance you are currently using supports the functionality."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1429
+msgid "@AVAILABILITY@"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1431
+msgid "GUESTFISH supported COMMAND"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1433
+msgid ""
+"In L<guestfish(3)> there is a handy interactive command C<supported> which "
+"prints out the available groups and whether they are supported by this build "
+"of libguestfs. Note however that you have to do C<run> first."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1438
+msgid "SINGLE CALLS AT COMPILE TIME"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1440
+msgid ""
+"Since version 1.5.8, C<E<lt>guestfs.hE<gt>> defines symbols for each C API "
+"function, such as:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1443
+#, no-wrap
+msgid ""
+" #define LIBGUESTFS_HAVE_DD 1\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1445
+msgid "if L</guestfs_dd> is available."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1447
+msgid ""
+"Before version 1.5.8, if you needed to test whether a single libguestfs "
+"function is available at compile time, we recommended using build tools such "
+"as autoconf or cmake. For example in autotools you could use:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1452
+#, no-wrap
+msgid ""
+" AC_CHECK_LIB([guestfs],[guestfs_create])\n"
+" AC_CHECK_FUNCS([guestfs_dd])\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1455
+msgid ""
+"which would result in C<HAVE_GUESTFS_DD> being either defined or not defined "
+"in your program."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1458
+msgid "SINGLE CALLS AT RUN TIME"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1460
+msgid ""
+"Testing at compile time doesn't guarantee that a function really exists in "
+"the library. The reason is that you might be dynamically linked against a "
+"previous I<libguestfs.so> (dynamic library) which doesn't have the call. "
+"This situation unfortunately results in a segmentation fault, which is a "
+"shortcoming of the C dynamic linking system itself."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1467
+msgid ""
+"You can use L<dlopen(3)> to test if a function is available at run time, as "
+"in this example program (note that you still need the compile time check as "
+"well):"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1471
+#, no-wrap
+msgid ""
+" #include <stdio.h>\n"
+" #include <stdlib.h>\n"
+" #include <unistd.h>\n"
+" #include <dlfcn.h>\n"
+" #include <guestfs.h>\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1477
+#, no-wrap
+msgid ""
+" main ()\n"
+" {\n"
+" #ifdef LIBGUESTFS_HAVE_DD\n"
+" void *dl;\n"
+" int has_function;\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1483
+#, no-wrap
+msgid ""
+" /* Test if the function guestfs_dd is really available. */\n"
+" dl = dlopen (NULL, RTLD_LAZY);\n"
+" if (!dl) {\n"
+" fprintf (stderr, \"dlopen: %s\\n\", dlerror ());\n"
+" exit (EXIT_FAILURE);\n"
+" }\n"
+" has_function = dlsym (dl, \"guestfs_dd\") != NULL;\n"
+" dlclose (dl);\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1492
+#, no-wrap
+msgid ""
+" if (!has_function)\n"
+" printf (\"this libguestfs.so does NOT have guestfs_dd function\\n\");\n"
+" else {\n"
+" printf (\"this libguestfs.so has guestfs_dd function\\n\");\n"
+" /* Now it's safe to call\n"
+" guestfs_dd (g, \"foo\", \"bar\");\n"
+" */\n"
+" }\n"
+" #else\n"
+" printf (\"guestfs_dd function was not found at compile time\\n\");\n"
+" #endif\n"
+" }\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1505
+msgid ""
+"You may think the above is an awful lot of hassle, and it is. There are "
+"other ways outside of the C linking system to ensure that this kind of "
+"incompatibility never arises, such as using package versioning:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1510
+#, no-wrap
+msgid ""
+" Requires: libguestfs >= 1.0.80\n"
+"\n"
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:1512
+msgid "CALLS WITH OPTIONAL ARGUMENTS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1514
+msgid ""
+"A recent feature of the API is the introduction of calls which take optional "
+"arguments. In C these are declared 3 ways. The main way is as a call which "
+"takes variable arguments (ie. C<...>), as in this example:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1519
+#, no-wrap
+msgid ""
+" int guestfs_add_drive_opts (guestfs_h *g, const char *filename, ...);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1521
+msgid ""
+"Call this with a list of optional arguments, terminated by C<-1>. So to "
+"call with no optional arguments specified:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1524
+#, no-wrap
+msgid ""
+" guestfs_add_drive_opts (g, filename, -1);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1526
+msgid "With a single optional argument:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1528
+#, no-wrap
+msgid ""
+" guestfs_add_drive_opts (g, filename,\n"
+" GUESTFS_ADD_DRIVE_OPTS_FORMAT, \"qcow2\",\n"
+" -1);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1532
+msgid "With two:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1534
+#, no-wrap
+msgid ""
+" guestfs_add_drive_opts (g, filename,\n"
+" GUESTFS_ADD_DRIVE_OPTS_FORMAT, \"qcow2\",\n"
+" GUESTFS_ADD_DRIVE_OPTS_READONLY, 1,\n"
+" -1);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1539
+msgid ""
+"and so forth. Don't forget the terminating C<-1> otherwise Bad Things will "
+"happen!"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1542
+msgid "USING va_list FOR OPTIONAL ARGUMENTS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1544
+msgid ""
+"The second variant has the same name with the suffix C<_va>, which works the "
+"same way but takes a C<va_list>. See the C manual for details. For the "
+"example function, this is declared:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1548
+#, no-wrap
+msgid ""
+" int guestfs_add_drive_opts_va (guestfs_h *g, const char *filename,\n"
+" va_list args);\n"
+"\n"
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1551
+msgid "CONSTRUCTING OPTIONAL ARGUMENTS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1553
+msgid ""
+"The third variant is useful where you need to construct these calls. You "
+"pass in a structure where you fill in the optional fields. The structure "
+"has a bitmask as the first element which you must set to indicate which "
+"fields you have filled in. For our example function the structure and call "
+"are declared:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1559
+#, no-wrap
+msgid ""
+" struct guestfs_add_drive_opts_argv {\n"
+" uint64_t bitmask;\n"
+" int readonly;\n"
+" const char *format;\n"
+" /* ... */\n"
+" };\n"
+" int guestfs_add_drive_opts_argv (guestfs_h *g, const char *filename,\n"
+" const struct guestfs_add_drive_opts_argv *optargs);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1568
+msgid "You could call it like this:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1570
+#, no-wrap
+msgid ""
+" struct guestfs_add_drive_opts_argv optargs = {\n"
+" .bitmask = GUESTFS_ADD_DRIVE_OPTS_READONLY_BITMASK |\n"
+" GUESTFS_ADD_DRIVE_OPTS_FORMAT_BITMASK,\n"
+" .readonly = 1,\n"
+" .format = \"qcow2\"\n"
+" };\n"
+" \n"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1577
+#, no-wrap
+msgid ""
+" guestfs_add_drive_opts_argv (g, filename, &optargs);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1579 ../src/guestfs-actions.pod:11 ../src/guestfs-actions.pod:1842 ../fish/guestfish-actions.pod:9 ../fish/guestfish-actions.pod:1253 ../tools/virt-win-reg.pl:532
+msgid "Notes:"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1585
+msgid "The C<_BITMASK> suffix on each option name when specifying the bitmask."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1590
+msgid "You do not need to fill in all fields of the structure."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1594
+msgid ""
+"There must be a one-to-one correspondence between fields of the structure "
+"that are filled in, and bits set in the bitmask."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1599
+msgid "OPTIONAL ARGUMENTS IN OTHER LANGUAGES"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1601
+msgid ""
+"In other languages, optional arguments are expressed in the way that is "
+"natural for that language. We refer you to the language-specific "
+"documentation for more details on that."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1605
+msgid "For guestfish, see L<guestfish(1)/OPTIONAL ARGUMENTS>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1607
+msgid "SETTING CALLBACKS TO HANDLE EVENTS"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1609
+msgid ""
+"The child process generates events in some situations. Current events "
+"include: receiving a log message, the child process exits."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1612
+msgid ""
+"Use the C<guestfs_set_*_callback> functions to set a callback for different "
+"types of events."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1615
+msgid ""
+"Only I<one callback of each type> can be registered for each handle. "
+"Calling C<guestfs_set_*_callback> again overwrites the previous callback of "
+"that type. Cancel all callbacks of this type by calling this function with "
+"C<cb> set to C<NULL>."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1620
+msgid "guestfs_set_log_message_callback"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1622
+#, no-wrap
+msgid ""
+" typedef void (*guestfs_log_message_cb) (guestfs_h *g, void *opaque,\n"
+" char *buf, int len);\n"
+" void guestfs_set_log_message_callback (guestfs_h *g,\n"
+" guestfs_log_message_cb cb,\n"
+" void *opaque);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1628
+msgid ""
+"The callback function C<cb> will be called whenever qemu or the guest writes "
+"anything to the console."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1631
+msgid "Use this function to capture kernel messages and similar."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1633
+msgid ""
+"Normally there is no log message handler, and log messages are just "
+"discarded."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1636
+msgid "guestfs_set_subprocess_quit_callback"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1638
+#, no-wrap
+msgid ""
+" typedef void (*guestfs_subprocess_quit_cb) (guestfs_h *g, void *opaque);\n"
+" void guestfs_set_subprocess_quit_callback (guestfs_h *g,\n"
+" guestfs_subprocess_quit_cb cb,\n"
+" void *opaque);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1643
+msgid ""
+"The callback function C<cb> will be called when the child process quits, "
+"either asynchronously or if killed by L</guestfs_kill_subprocess>. (This "
+"corresponds to a transition from any state to the CONFIG state)."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1648
+msgid "guestfs_set_launch_done_callback"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1650
+#, no-wrap
+msgid ""
+" typedef void (*guestfs_launch_done_cb) (guestfs_h *g, void *opaque);\n"
+" void guestfs_set_launch_done_callback (guestfs_h *g,\n"
+" guestfs_launch_done_cb cb,\n"
+" void *opaque);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1655
+msgid ""
+"The callback function C<cb> will be called when the child process becomes "
+"ready first time after it has been launched. (This corresponds to a "
+"transition from LAUNCHING to the READY state)."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1659
+msgid "guestfs_set_close_callback"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1661
+#, no-wrap
+msgid ""
+" typedef void (*guestfs_close_cb) (guestfs_h *g, void *opaque);\n"
+" void guestfs_set_close_callback (guestfs_h *g,\n"
+" guestfs_close_cb cb,\n"
+" void *opaque);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1666
+msgid ""
+"The callback function C<cb> will be called while the handle is being closed "
+"(synchronously from L</guestfs_close>)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1669
+msgid ""
+"Note that libguestfs installs an L<atexit(3)> handler to try to clean up "
+"handles that are open when the program exits. This means that this callback "
+"might be called indirectly from L<exit(3)>, which can cause unexpected "
+"problems in higher-level languages (eg. if your HLL interpreter has already "
+"been cleaned up by the time this is called, and if your callback then jumps "
+"into some HLL function)."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs.pod:1677
+msgid "guestfs_set_progress_callback"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1679
+#, no-wrap
+msgid ""
+" typedef void (*guestfs_progress_cb) (guestfs_h *g, void *opaque,\n"
+" int proc_nr, int serial,\n"
+" uint64_t position, uint64_t total);\n"
+" void guestfs_set_progress_callback (guestfs_h *g,\n"
+" guestfs_progress_cb cb,\n"
+" void *opaque);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1686
+msgid ""
+"Some long-running operations can generate progress messages. If this "
+"callback is registered, then it will be called each time a progress message "
+"is generated (usually two seconds after the operation started, and three "
+"times per second thereafter until it completes, although the frequency may "
+"change in future versions)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1692
+msgid ""
+"The callback receives two numbers: C<position> and C<total>. The units of "
+"C<total> are not defined, although for some operations C<total> may relate "
+"in some way to the amount of data to be transferred (eg. in bytes or "
+"megabytes), and C<position> may be the portion which has been transferred."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1698
+msgid "The only defined and stable parts of the API are:"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1704
+msgid ""
+"The callback can display to the user some type of progress bar or indicator "
+"which shows the ratio of C<position>:C<total>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1709
+msgid "0 E<lt>= C<position> E<lt>= C<total>"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1713
+msgid ""
+"If any progress notification is sent during a call, then a final progress "
+"notification is always sent when C<position> = C<total>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1716
+msgid ""
+"This is to simplify caller code, so callers can easily set the progress "
+"indicator to \"100%\" at the end of the operation, without requiring special "
+"code to detect this case."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1722
+msgid ""
+"The callback also receives the procedure number and serial number of the "
+"call. These are only useful for debugging protocol issues, and the callback "
+"can normally ignore them. The callback may want to print these numbers in "
+"error messages or debugging messages."
+msgstr ""
+
+#. type: =head1
+#: ../src/guestfs.pod:1727
+msgid "PRIVATE DATA AREA"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1729
+msgid ""
+"You can attach named pieces of private data to the libguestfs handle, and "
+"fetch them by name for the lifetime of the handle. This is called the "
+"private data area and is only available from the C API."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1733
+msgid "To attach a named piece of data, use the following call:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1735
+#, no-wrap
+msgid ""
+" void guestfs_set_private (guestfs_h *g, const char *key, void *data);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1737
+msgid ""
+"C<key> is the name to associate with this data, and C<data> is an arbitrary "
+"pointer (which can be C<NULL>). Any previous item with the same name is "
+"overwritten."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1741
+msgid ""
+"You can use any C<key> you want, but names beginning with an underscore "
+"character are reserved for internal libguestfs purposes (for implementing "
+"language bindings). It is recommended to prefix the name with some unique "
+"string to avoid collisions with other users."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1746
+msgid "To retrieve the pointer, use:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1748
+#, no-wrap
+msgid ""
+" void *guestfs_get_private (guestfs_h *g, const char *key);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1750
+msgid ""
+"This function returns C<NULL> if either no data is found associated with "
+"C<key>, or if the user previously set the C<key>'s C<data> pointer to "
+"C<NULL>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1754
+msgid ""
+"Libguestfs does not try to look at or interpret the C<data> pointer in any "
+"way. As far as libguestfs is concerned, it need not be a valid pointer at "
+"all. In particular, libguestfs does I<not> try to free the data when the "
+"handle is closed. If the data must be freed, then the caller must either "
+"free it before calling L</guestfs_close> or must set up a close callback to "
+"do it (see L</guestfs_set_close_callback>, and note that only one callback "
+"can be registered for a handle)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1762
+msgid ""
+"The private data area is implemented using a hash table, and should be "
+"reasonably efficient for moderate numbers of keys."
+msgstr ""
+
+#. type: =end
+#: ../src/guestfs.pod:1765 ../src/guestfs.pod:1770
+msgid "html"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1767
+msgid ""
+"<!-- old anchor for the next section --> <a "
+"name=\"state_machine_and_low_level_event_api\"/>"
+msgstr ""