-"do it (see L</guestfs_set_close_callback>, and note that only one callback "
-"can be registered for a handle)."
+"do it (see L</GUESTFS_EVENT_CLOSE>)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1988
+msgid "To walk over all entries, use these two functions:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1990
+#, no-wrap
+msgid ""
+" void *guestfs_first_private (guestfs_h *g, const char **key_rtn);\n"
+"\n"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:1992
+#, no-wrap
+msgid ""
+" void *guestfs_next_private (guestfs_h *g, const char **key_rtn);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:1994
+msgid ""
+"C<guestfs_first_private> returns the first key, pointer pair (\"first\" does "
+"not have any particular meaning -- keys are not returned in any defined "
+"order). A pointer to the key is returned in C<*key_rtn> and the "
+"corresponding data pointer is returned from the function. C<NULL> is "
+"returned if there are no keys stored in the handle."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2000
+msgid ""
+"C<guestfs_next_private> returns the next key, pointer pair. The return "
+"value of this function is also C<NULL> is there are no further entries to "
+"return."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2004
+msgid "Notes about walking over entries:"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2010
+msgid ""
+"You must not call C<guestfs_set_private> while walking over the entries."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2015
+msgid ""
+"The handle maintains an internal iterator which is reset when you call "
+"C<guestfs_first_private>. This internal iterator is invalidated when you "
+"call C<guestfs_set_private>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2021
+msgid "If you have set the data pointer associated with a key to C<NULL>, ie:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2023
+#, no-wrap
+msgid ""
+" guestfs_set_private (g, key, NULL);\n"
+"\n"
-#: ../src/guestfs.pod:1839
+#: ../src/guestfs.pod:2025
+msgid "then that C<key> is not returned when walking."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2029
+msgid ""
+"C<*key_rtn> is only valid until the next call to C<guestfs_first_private>, "
+"C<guestfs_next_private> or C<guestfs_set_private>."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2035
+msgid ""
+"The following example code shows how to print all keys and data pointers "
+"that are associated with the handle C<g>:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2038
+#, no-wrap
+msgid ""
+" const char *key;\n"
+" void *data = guestfs_first_private (g, &key);\n"
+" while (data != NULL)\n"
+" {\n"
+" printf (\"key = %s, data = %p\\n\", key, data);\n"
+" data = guestfs_next_private (g, &key);\n"
+" }\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2046
+msgid ""
+"More commonly you are only interested in keys that begin with an application-"
+"specific prefix C<foo_>. Modify the loop like so:"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs.pod:2049
+#, no-wrap
+msgid ""
+" const char *key;\n"
+" void *data = guestfs_first_private (g, &key);\n"
+" while (data != NULL)\n"
+" {\n"
+" if (strncmp (key, \"foo_\", strlen (\"foo_\")) == 0)\n"
+" printf (\"key = %s, data = %p\\n\", key, data);\n"
+" data = guestfs_next_private (g, &key);\n"
+" }\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs.pod:2058
-#: ../src/guestfs-actions.pod:2501 ../src/guestfs-actions.pod:3336
-#: ../src/guestfs-actions.pod:3351 ../src/guestfs-actions.pod:3371
-#: ../src/guestfs-actions.pod:3526 ../src/guestfs-actions.pod:3540
-#: ../src/guestfs-actions.pod:3553 ../src/guestfs-actions.pod:3567
-#: ../src/guestfs-actions.pod:3582 ../src/guestfs-actions.pod:3618
-#: ../src/guestfs-actions.pod:3690 ../src/guestfs-actions.pod:3710
-#: ../src/guestfs-actions.pod:3727 ../src/guestfs-actions.pod:3750
-#: ../src/guestfs-actions.pod:3773 ../src/guestfs-actions.pod:3805
-#: ../src/guestfs-actions.pod:3824 ../src/guestfs-actions.pod:3843
-#: ../src/guestfs-actions.pod:3878 ../src/guestfs-actions.pod:3890
-#: ../src/guestfs-actions.pod:3926 ../src/guestfs-actions.pod:3942
-#: ../src/guestfs-actions.pod:3955 ../src/guestfs-actions.pod:3970
-#: ../src/guestfs-actions.pod:3987 ../src/guestfs-actions.pod:4080
-#: ../src/guestfs-actions.pod:4100 ../src/guestfs-actions.pod:4113
-#: ../src/guestfs-actions.pod:4164 ../src/guestfs-actions.pod:4182
-#: ../src/guestfs-actions.pod:4200 ../src/guestfs-actions.pod:4216
-#: ../src/guestfs-actions.pod:4230 ../src/guestfs-actions.pod:4244
-#: ../src/guestfs-actions.pod:4261 ../src/guestfs-actions.pod:4276
-#: ../src/guestfs-actions.pod:4296 ../src/guestfs-actions.pod:4354
-#: ../src/guestfs-actions.pod:4427 ../src/guestfs-actions.pod:4458
-#: ../src/guestfs-actions.pod:4477 ../src/guestfs-actions.pod:4496
-#: ../src/guestfs-actions.pod:4508 ../src/guestfs-actions.pod:4525
-#: ../src/guestfs-actions.pod:4538 ../src/guestfs-actions.pod:4553
-#: ../src/guestfs-actions.pod:4568 ../src/guestfs-actions.pod:4603
-#: ../src/guestfs-actions.pod:4618 ../src/guestfs-actions.pod:4638
-#: ../src/guestfs-actions.pod:4652 ../src/guestfs-actions.pod:4669
-#: ../src/guestfs-actions.pod:4718 ../src/guestfs-actions.pod:4755
-#: ../src/guestfs-actions.pod:4769 ../src/guestfs-actions.pod:4797
-#: ../src/guestfs-actions.pod:4814 ../src/guestfs-actions.pod:4832
-#: ../src/guestfs-actions.pod:4966 ../src/guestfs-actions.pod:5023
-#: ../src/guestfs-actions.pod:5045 ../src/guestfs-actions.pod:5063
-#: ../src/guestfs-actions.pod:5095 ../src/guestfs-actions.pod:5161
-#: ../src/guestfs-actions.pod:5178 ../src/guestfs-actions.pod:5191
-#: ../src/guestfs-actions.pod:5205 ../src/guestfs-actions.pod:5494
-#: ../src/guestfs-actions.pod:5513 ../src/guestfs-actions.pod:5532
-#: ../src/guestfs-actions.pod:5544 ../src/guestfs-actions.pod:5556
-#: ../src/guestfs-actions.pod:5570 ../src/guestfs-actions.pod:5582
-#: ../src/guestfs-actions.pod:5596 ../src/guestfs-actions.pod:5612
-#: ../src/guestfs-actions.pod:5633 ../src/guestfs-actions.pod:5652
-#: ../src/guestfs-actions.pod:5671 ../src/guestfs-actions.pod:5701
-#: ../src/guestfs-actions.pod:5717 ../src/guestfs-actions.pod:5740
-#: ../src/guestfs-actions.pod:5758 ../src/guestfs-actions.pod:5777
-#: ../src/guestfs-actions.pod:5798 ../src/guestfs-actions.pod:5817
-#: ../src/guestfs-actions.pod:5834 ../src/guestfs-actions.pod:5862
-#: ../src/guestfs-actions.pod:5886 ../src/guestfs-actions.pod:5905
-#: ../src/guestfs-actions.pod:5929 ../src/guestfs-actions.pod:5944
-#: ../src/guestfs-actions.pod:5959 ../src/guestfs-actions.pod:5978
-#: ../src/guestfs-actions.pod:6015 ../src/guestfs-actions.pod:6038
-#: ../src/guestfs-actions.pod:6064 ../src/guestfs-actions.pod:6172
-#: ../src/guestfs-actions.pod:6293 ../src/guestfs-actions.pod:6305
-#: ../src/guestfs-actions.pod:6318 ../src/guestfs-actions.pod:6331
-#: ../src/guestfs-actions.pod:6353 ../src/guestfs-actions.pod:6366
-#: ../src/guestfs-actions.pod:6379 ../src/guestfs-actions.pod:6392
-#: ../src/guestfs-actions.pod:6407 ../src/guestfs-actions.pod:6466
-#: ../src/guestfs-actions.pod:6483 ../src/guestfs-actions.pod:6499
-#: ../src/guestfs-actions.pod:6515 ../src/guestfs-actions.pod:6532
-#: ../src/guestfs-actions.pod:6545 ../src/guestfs-actions.pod:6565
-#: ../src/guestfs-actions.pod:6601 ../src/guestfs-actions.pod:6615
-#: ../src/guestfs-actions.pod:6656 ../src/guestfs-actions.pod:6669
-#: ../src/guestfs-actions.pod:6687 ../src/guestfs-actions.pod:6721
-#: ../src/guestfs-actions.pod:6757 ../src/guestfs-actions.pod:6876
-#: ../src/guestfs-actions.pod:6894 ../src/guestfs-actions.pod:6908
-#: ../src/guestfs-actions.pod:6963 ../src/guestfs-actions.pod:6976
-#: ../src/guestfs-actions.pod:7021 ../src/guestfs-actions.pod:7054
-#: ../src/guestfs-actions.pod:7108 ../src/guestfs-actions.pod:7134
-#: ../src/guestfs-actions.pod:7200 ../src/guestfs-actions.pod:7219
-#: ../src/guestfs-actions.pod:7248
+#: ../src/guestfs-actions.pod:2501 ../src/guestfs-actions.pod:3371
+#: ../src/guestfs-actions.pod:3386 ../src/guestfs-actions.pod:3406
+#: ../src/guestfs-actions.pod:3561 ../src/guestfs-actions.pod:3575
+#: ../src/guestfs-actions.pod:3588 ../src/guestfs-actions.pod:3602
+#: ../src/guestfs-actions.pod:3617 ../src/guestfs-actions.pod:3653
+#: ../src/guestfs-actions.pod:3725 ../src/guestfs-actions.pod:3745
+#: ../src/guestfs-actions.pod:3762 ../src/guestfs-actions.pod:3785
+#: ../src/guestfs-actions.pod:3808 ../src/guestfs-actions.pod:3840
+#: ../src/guestfs-actions.pod:3859 ../src/guestfs-actions.pod:3878
+#: ../src/guestfs-actions.pod:3913 ../src/guestfs-actions.pod:3925
+#: ../src/guestfs-actions.pod:3961 ../src/guestfs-actions.pod:3977
+#: ../src/guestfs-actions.pod:3990 ../src/guestfs-actions.pod:4005
+#: ../src/guestfs-actions.pod:4022 ../src/guestfs-actions.pod:4115
+#: ../src/guestfs-actions.pod:4135 ../src/guestfs-actions.pod:4148
+#: ../src/guestfs-actions.pod:4199 ../src/guestfs-actions.pod:4217
+#: ../src/guestfs-actions.pod:4235 ../src/guestfs-actions.pod:4251
+#: ../src/guestfs-actions.pod:4265 ../src/guestfs-actions.pod:4279
+#: ../src/guestfs-actions.pod:4296 ../src/guestfs-actions.pod:4311
+#: ../src/guestfs-actions.pod:4331 ../src/guestfs-actions.pod:4389
+#: ../src/guestfs-actions.pod:4462 ../src/guestfs-actions.pod:4493
+#: ../src/guestfs-actions.pod:4512 ../src/guestfs-actions.pod:4531
+#: ../src/guestfs-actions.pod:4543 ../src/guestfs-actions.pod:4560
+#: ../src/guestfs-actions.pod:4573 ../src/guestfs-actions.pod:4588
+#: ../src/guestfs-actions.pod:4603 ../src/guestfs-actions.pod:4638
+#: ../src/guestfs-actions.pod:4653 ../src/guestfs-actions.pod:4673
+#: ../src/guestfs-actions.pod:4687 ../src/guestfs-actions.pod:4704
+#: ../src/guestfs-actions.pod:4753 ../src/guestfs-actions.pod:4790
+#: ../src/guestfs-actions.pod:4804 ../src/guestfs-actions.pod:4832
+#: ../src/guestfs-actions.pod:4849 ../src/guestfs-actions.pod:4867
+#: ../src/guestfs-actions.pod:5001 ../src/guestfs-actions.pod:5058
+#: ../src/guestfs-actions.pod:5080 ../src/guestfs-actions.pod:5098
+#: ../src/guestfs-actions.pod:5130 ../src/guestfs-actions.pod:5196
+#: ../src/guestfs-actions.pod:5213 ../src/guestfs-actions.pod:5226
+#: ../src/guestfs-actions.pod:5240 ../src/guestfs-actions.pod:5529
+#: ../src/guestfs-actions.pod:5548 ../src/guestfs-actions.pod:5567
+#: ../src/guestfs-actions.pod:5579 ../src/guestfs-actions.pod:5591
+#: ../src/guestfs-actions.pod:5605 ../src/guestfs-actions.pod:5617
+#: ../src/guestfs-actions.pod:5631 ../src/guestfs-actions.pod:5647
+#: ../src/guestfs-actions.pod:5668 ../src/guestfs-actions.pod:5687
+#: ../src/guestfs-actions.pod:5706 ../src/guestfs-actions.pod:5736
+#: ../src/guestfs-actions.pod:5752 ../src/guestfs-actions.pod:5775
+#: ../src/guestfs-actions.pod:5793 ../src/guestfs-actions.pod:5812
+#: ../src/guestfs-actions.pod:5833 ../src/guestfs-actions.pod:5852
+#: ../src/guestfs-actions.pod:5869 ../src/guestfs-actions.pod:5897
+#: ../src/guestfs-actions.pod:5921 ../src/guestfs-actions.pod:5940
+#: ../src/guestfs-actions.pod:5964 ../src/guestfs-actions.pod:5983
+#: ../src/guestfs-actions.pod:5998 ../src/guestfs-actions.pod:6017
+#: ../src/guestfs-actions.pod:6054 ../src/guestfs-actions.pod:6077
+#: ../src/guestfs-actions.pod:6103 ../src/guestfs-actions.pod:6211
+#: ../src/guestfs-actions.pod:6332 ../src/guestfs-actions.pod:6344
+#: ../src/guestfs-actions.pod:6357 ../src/guestfs-actions.pod:6370
+#: ../src/guestfs-actions.pod:6392 ../src/guestfs-actions.pod:6405
+#: ../src/guestfs-actions.pod:6418 ../src/guestfs-actions.pod:6431
+#: ../src/guestfs-actions.pod:6446 ../src/guestfs-actions.pod:6505
+#: ../src/guestfs-actions.pod:6522 ../src/guestfs-actions.pod:6538
+#: ../src/guestfs-actions.pod:6554 ../src/guestfs-actions.pod:6571
+#: ../src/guestfs-actions.pod:6584 ../src/guestfs-actions.pod:6604
+#: ../src/guestfs-actions.pod:6640 ../src/guestfs-actions.pod:6654
+#: ../src/guestfs-actions.pod:6695 ../src/guestfs-actions.pod:6708
+#: ../src/guestfs-actions.pod:6726 ../src/guestfs-actions.pod:6760
+#: ../src/guestfs-actions.pod:6796 ../src/guestfs-actions.pod:6915
+#: ../src/guestfs-actions.pod:6933 ../src/guestfs-actions.pod:6947
+#: ../src/guestfs-actions.pod:7002 ../src/guestfs-actions.pod:7015
+#: ../src/guestfs-actions.pod:7060 ../src/guestfs-actions.pod:7093
+#: ../src/guestfs-actions.pod:7147 ../src/guestfs-actions.pod:7173
+#: ../src/guestfs-actions.pod:7239 ../src/guestfs-actions.pod:7258
+#: ../src/guestfs-actions.pod:7287
-#: ../src/guestfs-actions.pod:2629 ../src/guestfs-actions.pod:2879
-#: ../src/guestfs-actions.pod:3147 ../src/guestfs-actions.pod:3432
-#: ../src/guestfs-actions.pod:3494 ../src/guestfs-actions.pod:3599
-#: ../src/guestfs-actions.pod:4004 ../src/guestfs-actions.pod:4702
-#: ../src/guestfs-actions.pod:5222 ../src/guestfs-actions.pod:5348
-#: ../src/guestfs-actions.pod:5462 ../src/guestfs-actions.pod:6158
-#: ../src/guestfs-actions.pod:6219 ../src/guestfs-actions.pod:6274
-#: ../src/guestfs-actions.pod:6420 ../src/guestfs-actions.pod:6444
-#: ../src/guestfs-actions.pod:6926 ../src/guestfs-actions.pod:6946
-#: ../src/guestfs-actions.pod:6993 ../src/guestfs-actions.pod:7158
-#: ../src/guestfs-actions.pod:7177 ../src/guestfs-actions.pod:7262
-#: ../src/guestfs-actions.pod:7281 ../src/guestfs-actions.pod:7327
-#: ../src/guestfs-actions.pod:7346
+#: ../src/guestfs-actions.pod:2629 ../src/guestfs-actions.pod:2914
+#: ../src/guestfs-actions.pod:3182 ../src/guestfs-actions.pod:3467
+#: ../src/guestfs-actions.pod:3529 ../src/guestfs-actions.pod:3634
+#: ../src/guestfs-actions.pod:4039 ../src/guestfs-actions.pod:4737
+#: ../src/guestfs-actions.pod:5257 ../src/guestfs-actions.pod:5383
+#: ../src/guestfs-actions.pod:5497 ../src/guestfs-actions.pod:6197
+#: ../src/guestfs-actions.pod:6258 ../src/guestfs-actions.pod:6313
+#: ../src/guestfs-actions.pod:6459 ../src/guestfs-actions.pod:6483
+#: ../src/guestfs-actions.pod:6965 ../src/guestfs-actions.pod:6985
+#: ../src/guestfs-actions.pod:7032 ../src/guestfs-actions.pod:7197
+#: ../src/guestfs-actions.pod:7216 ../src/guestfs-actions.pod:7301
+#: ../src/guestfs-actions.pod:7320 ../src/guestfs-actions.pod:7366
+#: ../src/guestfs-actions.pod:7385
-" char *\n"
-" guestfs_inspect_get_product_name (guestfs_h *g,\n"
-" const char *root);\n"
-"\n"
+" char *\n"
+" guestfs_inspect_get_product_name (guestfs_h *g,\n"
+" const char *root);\n"
+"\n"
+msgstr ""
+
+# type: textblock
+#. type: textblock
+#: ../src/guestfs-actions.pod:2850 ../fish/guestfish-actions.pod:1957
+msgid ""
+"This returns the product name of the inspected operating system. The "
+"product name is generally some freeform string which can be displayed to the "
+"user, but should not be parsed by programs."
+msgstr ""
+
+# type: textblock
+#. type: textblock
+#: ../src/guestfs-actions.pod:2855 ../fish/guestfish-actions.pod:1962
+msgid ""
+"If the product name could not be determined, then the string C<unknown> is "
+"returned."
+msgstr ""
+
+#. type: =head2
+#: ../src/guestfs-actions.pod:2865
+msgid "guestfs_inspect_get_product_variant"
+msgstr ""
+
+#. type: verbatim
+#: ../src/guestfs-actions.pod:2867
+#, no-wrap
+msgid ""
+" char *\n"
+" guestfs_inspect_get_product_variant (guestfs_h *g,\n"
+" const char *root);\n"
+"\n"
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:2874 ../fish/guestfish-actions.pod:1974
+msgid "This returns the product variant of the inspected operating system."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:2877 ../fish/guestfish-actions.pod:1977
+msgid ""
+"For Windows guests, this returns the contents of the Registry key C<HKLM"
+"\\Software\\Microsoft\\Windows NT\\CurrentVersion> C<InstallationType> which "
+"is usually a string such as C<Client> or C<Server> (other values are "
+"possible). This can be used to distinguish consumer and enterprise versions "
+"of Windows that have the same version number (for example, Windows 7 and "
+"Windows 2008 Server are both version 6.1, but the former is C<Client> and "
+"the latter is C<Server>)."
+msgstr ""
+
+#. type: textblock
+#: ../src/guestfs-actions.pod:2886 ../fish/guestfish-actions.pod:1986
+msgid ""
+"For enterprise Linux guests, in future we intend this to return the product "
+"variant such as C<Desktop>, C<Server> and so on. But this is not "
+"implemented at present."