1guestfs-hacking(1)          Virtualization Support          guestfs-hacking(1)
2
3
4

NAME

6       guestfs-hacking - extending and contributing to libguestfs
7

DESCRIPTION

9       This manual page is for hackers who want to extend libguestfs itself.
10

THE SOURCE CODE

12       Libguestfs source is located in the github repository
13       https://github.com/libguestfs/libguestfs
14
15       Large amounts of boilerplate code in libguestfs (RPC, bindings,
16       documentation) are generated.  This means that many source files will
17       appear to be missing from a straightforward git checkout.  You have to
18       run the generator ("./configure && make -C generator") in order to
19       create those files.
20
21       Libguestfs uses an autotools-based build system, with the main files
22       being configure.ac and Makefile.am.  See "THE BUILD SYSTEM".
23
24       The generator subdirectory contains the generator, plus files
25       describing the API.  The lib subdirectory contains source for the
26       library.  The appliance and daemon subdirectories contain the source
27       for the code that builds the appliance, and the code that runs in the
28       appliance respectively.  Other directories are covered in the section
29       "SOURCE CODE SUBDIRECTORIES" below.
30
31       Apart from the fact that all API entry points go via some generated
32       code, the library is straightforward.  (In fact, even the generated
33       code is designed to be readable, and should be read as ordinary code).
34       Some actions run entirely in the library, and are written as C
35       functions in files under lib.  Others are forwarded to the daemon where
36       (after some generated RPC marshalling) they appear as C functions in
37       files under daemon.
38
39       To build from source, first read the guestfs-building(1).
40
41   SOURCE CODE SUBDIRECTORIES
42       There are a lot of subdirectories in the source tree!  Which ones
43       should you concentrate on first?  lib and daemon which contain the
44       source code of the core library.  generator is the code generator
45       described above, so that is important.  The Makefile.am in the root
46       directory will tell you in which order the subdirectories get built.
47       And then if you are looking at a particular tool (eg. customize) or
48       language binding (eg. python), go straight to that subdirectory, but
49       remember that if you didn't run the generator yet, then you may find
50       files which appear to be missing.
51
52       align
53           virt-alignment-scan(1) command and documentation.
54
55       appliance
56           The libguestfs appliance, build scripts and so on.
57
58       bash
59           Bash tab-completion scripts.
60
61       build-aux
62           Various build scripts used by autotools.
63
64       builder
65           virt-builder(1) command and documentation.
66
67       bundled
68           Embedded copies of other libraries, mostly for convenience (and the
69           embedded library is not widespread enough).
70
71           bundled/ocaml-augeas
72               Bindings for the Augeas library.  These come from the ocaml-
73               augeas library http://git.annexia.org/?p=ocaml-augeas.git
74
75       cat The virt-cat(1), virt-filesystems(1), virt-log(1), virt-ls(1) and
76           virt-tail(1) commands and documentation.
77
78       common
79           Various libraries of internal code can be found in the common
80           subdirectory:
81
82           common/edit
83               Common code for interactively and non-interactively editing
84               files within a libguestfs filesystem.
85
86           common/errnostring
87               The communication protocol used between the library and the
88               daemon running inside the appliance has to encode errnos as
89               strings, which is handled by this library.
90
91           common/mlcustomize
92               Library code associated with "virt-customize" but also used in
93               other tools.
94
95           common/mlgettext
96               Small, generated wrapper which allows libguestfs to be compiled
97               with or without ocaml-gettext.  This is generated by
98               ./configure.
99
100           common/mlpcre
101               Lightweight OCaml bindings for Perl Compatible Regular
102               Expressions (PCRE).  Note this is not related in any way to
103               Markus Mottl's ocaml-pcre library.
104
105           common/mlprogress
106               OCaml bindings for the progress bar functions (see
107               common/progress).
108
109           common/mlstdutils
110               A library of pure OCaml utility functions used in many places.
111
112           common/mltools
113               OCaml utility functions only used by the OCaml virt tools (like
114               "virt-sysprep", "virt-customize" etc.)
115
116           common/mlutils
117               OCaml bindings for C functions in "common/utils", and some
118               POSIX bindings which are missing from the OCaml stdlib.
119
120           common/mlvisit
121               OCaml bindings for the visit functions (see common/visit).
122
123           common/mlxml
124               OCaml bindings for the libxml2 library.
125
126           common/options
127               Common options parsing for guestfish, guestmount and some virt
128               tools.
129
130           common/parallel
131               A framework used for processing multiple libvirt domains in
132               parallel.
133
134           common/progress
135               Common code for printing progress bars.
136
137           common/protocol
138               The XDR-based communication protocol used between the library
139               and the daemon running inside the appliance is defined here.
140
141           common/qemuopts
142               Mini-library for writing qemu command lines and qemu config
143               files.
144
145           common/structs
146               Common code for printing and freeing libguestfs structs, used
147               by the library and some tools.
148
149           common/utils
150               Various utility functions used throughout the library and
151               tools.
152
153           common/visit
154               Recursively visit a guestfs filesystem hierarchy.
155
156           common/windows
157               Utility functions for handling Windows drive letters.
158
159       contrib
160           Outside contributions, experimental parts.
161
162       customize
163           virt-customize(1) command and documentation.
164
165       daemon
166           The daemon that runs inside the libguestfs appliance and carries
167           out actions.
168
169       df  virt-df(1) command and documentation.
170
171       dib virt-dib(1) command and documentation.
172
173       diff
174           virt-diff(1) command and documentation.
175
176       docs
177           Miscellaneous manual pages.
178
179       edit
180           virt-edit(1) command and documentation.
181
182       examples
183           C API example code.
184
185       fish
186           guestfish(1), the command-line shell, and various shell scripts
187           built on top such as virt-copy-in(1), virt-copy-out(1),
188           virt-tar-in(1), virt-tar-out(1).
189
190       format
191           virt-format(1) command and documentation.
192
193       fuse
194           guestmount(1), FUSE (userspace filesystem) built on top of
195           libguestfs.
196
197       generator
198           The crucially important generator, used to automatically generate
199           large amounts of boilerplate C code for things like RPC and
200           bindings.
201
202       get-kernel
203           virt-get-kernel(1) command and documentation.
204
205       inspector
206           virt-inspector(1), the virtual machine image inspector.
207
208       lib Source code to the C library.
209
210       logo
211           Logo used on the website.  The fish is called Arthur by the way.
212
213       m4  M4 macros used by autoconf.  See "THE BUILD SYSTEM".
214
215       make-fs
216           virt-make-fs(1) command and documentation.
217
218       po  Translations of simple gettext strings.
219
220       po-docs
221           The build infrastructure and PO files for translations of manpages
222           and POD files.  Eventually this will be combined with the po
223           directory, but that is rather complicated.
224
225       rescue
226           virt-rescue(1) command and documentation.
227
228       resize
229           virt-resize(1) command and documentation.
230
231       sparsify
232           virt-sparsify(1) command and documentation.
233
234       sysprep
235           virt-sysprep(1) command and documentation.
236
237       tests
238           Tests.
239
240       test-data
241           Files and other test data used by the tests.
242
243       test-tool
244           Test tool for end users to test if their qemu/kernel combination
245           will work with libguestfs.
246
247       tmp Used for temporary files when running the tests (instead of /tmp
248           etc).  The reason is so that you can run multiple parallel tests of
249           libguestfs without having one set of tests overwriting the
250           appliance created by another.
251
252       tools
253           Command line tools written in Perl (virt-win-reg(1) and many
254           others).
255
256       utils
257           Miscellaneous utilities, such as "boot-benchmark".
258
259       v2v Up to libguestfs > 1.42 this contained the virt-v2v(1) tool, but
260           this has now moved into a separate repository:
261           https://github.com/libguestfs/virt-v2v
262
263       website
264           The http://libguestfs.org website files.
265
266       csharp
267       erlang
268       gobject
269       golang
270       haskell
271       java
272       lua
273       ocaml
274       php
275       perl
276       python
277       ruby
278           Language bindings.
279
280   THE BUILD SYSTEM
281       Libguestfs uses the GNU autotools build system (autoconf, automake,
282       libtool).
283
284       The ./configure script is generated from configure.ac and
285       m4/guestfs-*.m4.  Most of the configure script is split over many m4
286       macro files by topic, for example m4/guestfs-daemon.m4 deals with the
287       dependencies of the daemon.
288
289       The job of the top level Makefile.am is mainly to list the
290       subdirectories ("SUBDIRS") in the order they should be compiled.
291
292       common-rules.mk is included in every Makefile.am (top level and
293       subdirectories).  subdir-rules.mk is included only in subdirectory
294       Makefile.am files.
295
296       There are many make targets.  Use this command to list them all:
297
298        make help
299

EXTENDING LIBGUESTFS

301   ADDING A NEW API
302       Because large amounts of boilerplate code in libguestfs are generated,
303       this makes it easy to extend the libguestfs API.
304
305       To add a new API action there are two changes:
306
307       1.  You need to add a description of the call (name, parameters, return
308           type, tests, documentation) to generator/actions_*.ml and possibly
309           generator/proc_nr.ml.
310
311           There are two sorts of API action, depending on whether the call
312           goes through to the daemon in the appliance, or is serviced
313           entirely by the library (see "ARCHITECTURE" in
314           guestfs-internals(1)).  "guestfs_sync" in guestfs(3) is an example
315           of the former, since the sync is done in the appliance.
316           "guestfs_set_trace" in guestfs(3) is an example of the latter,
317           since a trace flag is maintained in the handle and all tracing is
318           done on the library side.
319
320           Most new actions are of the first type, and get added to the
321           "daemon_functions" list.  Each function has a unique procedure
322           number used in the RPC protocol which is assigned to that action
323           when we publish libguestfs and cannot be reused.  Take the latest
324           procedure number and increment it.
325
326           For library-only actions of the second type, add to the
327           "non_daemon_functions" list.  Since these functions are serviced by
328           the library and do not travel over the RPC mechanism to the daemon,
329           these functions do not need a procedure number, and so the
330           procedure number is set to "-1".
331
332       2.  Implement the action (in C):
333
334           For daemon actions, implement the function "do_<name>" in the
335           "daemon/" directory.
336
337           For library actions, implement the function "guestfs_impl_<name>"
338           in the "lib/" directory.
339
340           In either case, use another function as an example of what to do.
341
342       3.  As an alternative to step 2: Since libguestfs 1.38, daemon actions
343           can be implemented in OCaml.  You have to set the "impl = OCaml
344           ..."  flag in the generator.  Take a look at daemon/file.ml for an
345           example.
346
347       After making these changes, use "make" to compile.
348
349       Note that you don’t need to implement the RPC, language bindings,
350       manual pages or anything else.  It’s all automatically generated from
351       the OCaml description.
352
353       Adding tests for an API
354
355       You can supply zero or as many tests as you want per API call.  The
356       tests can either be added as part of the API description
357       (generator/actions_*.ml), or in some rarer cases you may want to drop a
358       script into "tests/*/".  Note that adding a script to "tests/*/" is
359       slower, so if possible use the first method.
360
361       The following describes the test environment used when you add an API
362       test in actions_*.ml.
363
364       The test environment has 4 block devices:
365
366       /dev/sda 2 GB
367           General block device for testing.
368
369       /dev/sdb 2 GB
370           /dev/sdb1 is an ext2 filesystem used for testing filesystem write
371           operations.
372
373       /dev/sdc 10 MB
374           Used in a few tests where two block devices are needed.
375
376       /dev/sdd
377           ISO with fixed content (see images/test.iso).
378
379       To be able to run the tests in a reasonable amount of time, the
380       libguestfs appliance and block devices are reused between tests.  So
381       don't try testing "guestfs_kill_subprocess" in guestfs(3) :-x
382
383       Each test starts with an initial scenario, selected using one of the
384       "Init*" expressions, described in generator/types.ml.  These initialize
385       the disks mentioned above in a particular way as documented in
386       types.ml.  You should not assume anything about the previous contents
387       of other disks that are not initialized.
388
389       You can add a prerequisite clause to any individual test.  This is a
390       run-time check, which, if it fails, causes the test to be skipped.
391       Useful if testing a command which might not work on all variations of
392       libguestfs builds.  A test that has prerequisite of "Always" means to
393       run unconditionally.
394
395       In addition, packagers can skip individual tests by setting environment
396       variables before running "make check".
397
398        SKIP_TEST_<CMD>_<NUM>=1
399
400       eg: "SKIP_TEST_COMMAND_3=1" skips test #3 of "guestfs_command" in
401       guestfs(3).
402
403       or:
404
405        SKIP_TEST_<CMD>=1
406
407       eg: "SKIP_TEST_ZEROFREE=1" skips all "guestfs_zerofree" in guestfs(3)
408       tests.
409
410       Packagers can run only certain tests by setting for example:
411
412        TEST_ONLY="vfs_type zerofree"
413
414       See tests/c-api/tests.c for more details of how these environment
415       variables work.
416
417       Debugging new APIs
418
419       Test new actions work before submitting them.
420
421       You can use guestfish to try out new commands.
422
423       Debugging the daemon is a problem because it runs inside a minimal
424       environment.  However you can fprintf messages in the daemon to stderr,
425       and they will show up if you use "guestfish -v".
426
427   ADDING A NEW LANGUAGE BINDING
428       All language bindings must be generated by the generator (see the
429       generator subdirectory).
430
431       There is no documentation for this yet.  We suggest you look at an
432       existing binding, eg. generator/ocaml.ml or generator/perl.ml.
433
434       Adding tests for language bindings
435
436       Language bindings should come with tests.  Previously testing of
437       language bindings was rather ad-hoc, but we have been trying to
438       formalize the set of tests that every language binding should use.
439
440       Currently only the OCaml and Perl bindings actually implement the full
441       set of tests, and the OCaml bindings are canonical, so you should
442       emulate what the OCaml tests do.
443
444       This is the numbering scheme used by the tests:
445
446        - 000+ basic tests:
447
448          010  load the library
449          020  create
450          030  create-flags
451          040  create multiple handles
452          050  test setting and getting config properties
453          060  explicit close
454          065  implicit close (in GC'd languages)
455          070  optargs
456          080  version
457          090  retvalues
458
459        - 100  launch, create partitions and LVs and filesystems
460
461        - 400+ events:
462
463          410  close event
464          420  log messages
465          430  progress messages
466
467        - 800+ regression tests (specific to the language)
468
469        - 900+ any other custom tests for the language
470
471       To save time when running the tests, only 100, 430, 800+, 900+ should
472       launch the handle.
473
474   FORMATTING CODE
475       Our C source code generally adheres to some basic code-formatting
476       conventions.  The existing code base is not totally consistent on this
477       front, but we do prefer that contributed code be formatted similarly.
478       In short, use spaces-not-TABs for indentation, use 2 spaces for each
479       indentation level, and other than that, follow the K&R style.
480
481       If you use Emacs, add the following to one of your start-up files
482       (e.g., ~/.emacs), to help ensure that you get indentation right:
483
484        ;;; In libguestfs, indent with spaces everywhere (not TABs).
485        ;;; Exceptions: Makefile and ChangeLog modes.
486        (add-hook 'find-file-hook
487            '(lambda () (if (and buffer-file-name
488                                 (string-match "/libguestfs\\>"
489                                     (buffer-file-name))
490                                 (not (string-equal mode-name "Change Log"))
491                                 (not (string-equal mode-name "Makefile")))
492                            (setq indent-tabs-mode nil))))
493
494        ;;; When editing C sources in libguestfs, use this style.
495        (defun libguestfs-c-mode ()
496          "C mode with adjusted defaults for use with libguestfs."
497          (interactive)
498          (c-set-style "K&R")
499          (setq c-indent-level 2)
500          (setq c-basic-offset 2))
501        (add-hook 'c-mode-hook
502                  '(lambda () (if (string-match "/libguestfs\\>"
503                                      (buffer-file-name))
504                                  (libguestfs-c-mode))))
505
506   TESTING YOUR CHANGES
507       Turn warnings into errors when developing to make warnings hard to
508       ignore:
509
510        ./configure --enable-werror
511
512       Useful targets are:
513
514       "make check"
515           Runs the regular test suite.
516
517           This is implemented using the regular automake "TESTS" target.  See
518           the automake documentation for details.
519
520       "make check-valgrind"
521           Runs a subset of the test suite under valgrind.
522
523           See "VALGRIND" below.
524
525       "make check-valgrind-local-guests"
526           Runs a subset of the test suite under valgrind using locally
527           installed libvirt guests (read-only).
528
529       "make check-direct"
530           Runs all tests using default appliance back-end.  This only has any
531           effect if a non-default backend was selected using "./configure
532           --with-default-backend=..."
533
534       "make check-valgrind-direct"
535           Run a subset of the test suite under valgrind using the default
536           appliance back-end.
537
538       "make check-uml"
539           Runs all tests using the User-Mode Linux backend.
540
541           As there is no standard location for the User-Mode Linux kernel,
542           you have to set "LIBGUESTFS_HV" to point to the kernel image, eg:
543
544            make check-uml LIBGUESTFS_HV=~/d/linux-um/vmlinux
545
546       "make check-valgrind-uml"
547           Runs all tests using the User-Mode Linux backend, under valgrind.
548
549           As above, you have to set "LIBGUESTFS_HV" to point to the kernel.
550
551       "make check-with-upstream-qemu"
552           Runs all tests using a local qemu binary.  It looks for the qemu
553           binary in QEMUDIR (defaults to $HOME/d/qemu), but you can set this
554           to another directory on the command line, eg:
555
556            make check-with-upstream-qemu QEMUDIR=/usr/src/qemu
557
558       "make check-with-upstream-libvirt"
559           Runs all tests using a local libvirt.  This only has any effect if
560           the libvirt backend was selected using "./configure
561           --with-default-backend=libvirt"
562
563           It looks for libvirt in LIBVIRTDIR (defaults to $HOME/d/libvirt),
564           but you can set this to another directory on the command line, eg:
565
566            make check-with-upstream-libvirt LIBVIRTDIR=/usr/src/libvirt
567
568       "make check-slow"
569           Runs some slow/long-running tests which are not run by default.
570
571           To mark a test as slow/long-running:
572
573           •   Add it to the list of "TESTS" in the Makefile.am, just like a
574               normal test.
575
576           •   Modify the test so it checks if the "SLOW=1" environment
577               variable is set, and if not set it skips (ie. returns with exit
578               code 77).  If using $TEST_FUNCTIONS, you can call the function
579               "slow_test" for this.
580
581           •   Add a variable "SLOW_TESTS" to the Makefile.am listing the slow
582               tests.
583
584           •   Add a rule to the Makefile.am:
585
586                check-slow:
587                  $(MAKE) check TESTS="$(SLOW_TESTS)" SLOW=1
588
589       "sudo make check-root"
590           Runs some tests which require root privileges.  These are supposed
591           to be safe, but take care.  You have to run this as root (eg. using
592           sudo(8) explicitly).
593
594           To mark a test as requiring root:
595
596           •   Add it to the list of "TESTS" in the Makefile.am, just like a
597               normal test.
598
599           •   Modify the test so it checks if euid == 0, and if not set it
600               skips (ie. returns with exit code 77).  If using
601               $TEST_FUNCTIONS, you can call the function "root_test" for
602               this.
603
604           •   Add a variable "ROOT_TESTS" to the Makefile.am listing the root
605               tests.
606
607           •   Add a rule to the Makefile.am:
608
609                check-root:
610                  $(MAKE) check TESTS="$(ROOT_TESTS)"
611
612       "make check-all"
613           Equivalent to running all "make check*" rules except "check-root".
614
615       "make check-release"
616           Runs a subset of "make check*" rules that are required to pass
617           before a tarball can be released.  Currently this is:
618
619           •   check
620
621           •   check-valgrind
622
623           •   check-direct
624
625           •   check-valgrind-direct
626
627           •   check-slow
628
629       "make installcheck"
630           Run "make check" on the installed copy of libguestfs.
631
632           The version of installed libguestfs being tested, and the version
633           of the libguestfs source tree must be the same.
634
635           Do:
636
637            ./configure
638            make clean ||:
639            make
640            make installcheck
641
642   VALGRIND
643       When you do "make check-valgrind", it searches for any Makefile.am in
644       the tree that has a "check-valgrind:" target and runs it.
645
646       Writing the Makefile.am and tests correctly to use valgrind and working
647       with automake parallel tests is subtle.
648
649       If your tests are run via a shell script wrapper, then in the wrapper
650       use:
651
652        $VG virt-foo
653
654       and in the Makefile.am use:
655
656        check-valgrind:
657            make VG="@VG@" check
658
659       However, if your binaries run directly from the "TESTS" rule, you have
660       to modify the Makefile.am like this:
661
662        LOG_COMPILER = $(VG)
663
664        check-valgrind:
665            make VG="@VG@" check
666
667       In either case, check that the right program is being tested by
668       examining the tmp/valgrind* log files carefully.
669
670   SUBMITTING PATCHES
671       Submit patches to the mailing list:
672       http://www.redhat.com/mailman/listinfo/libguestfs and CC to
673       rjones@redhat.com.
674
675       You do not need to subscribe to the mailing list if you don’t want to.
676       There may be a short delay while your message is moderated.
677
678   DAEMON CUSTOM PRINTF FORMATTERS
679       In the daemon code we have created custom printf formatters %Q and %R,
680       which are used to do shell quoting.
681
682       %Q  Simple shell quoted string.  Any spaces or other shell characters
683           are escaped for you.
684
685       %R  Same as %Q except the string is treated as a path which is prefixed
686           by the sysroot.
687
688       For example:
689
690        asprintf (&cmd, "cat %R", path);
691
692       would produce "cat /sysroot/some\ path\ with\ spaces"
693
694       Note: Do not use these when you are passing parameters to the
695       "command{,r,v,rv}()" functions.  These parameters do NOT need to be
696       quoted because they are not passed via the shell (instead, straight to
697       exec).  You probably want to use the "sysroot_path()" function however.
698
699   INTERNATIONALIZATION (I18N) SUPPORT
700       We support i18n (gettext anyhow) in the library.
701
702       However many messages come from the daemon, and we don’t translate
703       those at the moment.  One reason is that the appliance generally has
704       all locale files removed from it, because they take up a lot of space.
705       So we'd have to readd some of those, as well as copying our PO files
706       into the appliance.
707
708       Debugging messages are never translated, since they are intended for
709       the programmers.
710

MISCELLANEOUS TOPICS

712   HOW OCAML PROGRAMS ARE COMPILED AND LINKED
713       Mostly this section is "how we make automake & ocamlopt work together"
714       since OCaml programs themselves are easy to compile.
715
716       Automake has no native support for OCaml programs, ocamlc nor ocamlopt.
717       What we do instead is to treat OCaml programs as C programs which
718       happen to contain these "other objects" ("DEPENDENCIES" in automake-
719       speak) that happen to be the OCaml objects.  This works because OCaml
720       programs usually have C files for native bindings etc.
721
722       So a typical program is described as just its C sources:
723
724        virt_customize_SOURCES = ... crypt-c.c perl_edit-c.c
725
726       For programs that have no explicit C sources, we create an empty
727       dummy.c file, and list that instead:
728
729        virt_resize_SOURCES = dummy.c
730
731       The OCaml objects which contain most of the code are listed as automake
732       dependencies (other dependencies may also be listed):
733
734        virt_customize_DEPENDENCIES = ... customize_main.cmx
735
736       The only other special thing we need to do is to provide a custom link
737       command.  This is needed because automake won't assemble the ocamlopt
738       command, the list of objects and the "-cclib" libraries in the correct
739       order otherwise.
740
741        virt_customize_LINK = \
742            $(top_builddir)/ocaml-link.sh -cclib '-lutils' -- ...
743
744       The actual rules, which you can examine in customize/Makefile.am, are a
745       little bit more complicated than this because they have to handle:
746
747       •   Compiling for byte code or native code.
748
749       •   The pattern rules needed to compile the OCaml sources to objects.
750
751           These are now kept in subdir-rules.mk at the top level, which is
752           included in every subdirectory Makefile.am.
753
754       •   Adding OCaml sources files to "EXTRA_DIST".
755
756           Automake isn't aware of the complete list of sources for a binary,
757           so it will not add them all automatically.
758

MAINTAINER TASKS

760   MAINTAINER MAKEFILE TARGETS
761       These "make" targets probably won’t work and aren't useful unless you
762       are a libguestfs maintainer.
763
764       make maintainer-commit
765
766       This commits everything in the working directory with the commit
767       message "Version $(VERSION).".  You must update configure.ac, clean and
768       rebuild first.
769
770       make maintainer-tag
771
772       This tags the current HEAD commit with the tag "v$(VERSION)" and one of
773       the messages:
774
775        Version $(VERSION) stable
776
777        Version $(VERSION) development
778
779       (See "LIBGUESTFS VERSION NUMBERS" in guestfs(3) for the difference
780       between a stable and development release.)
781
782       make maintainer-check-authors
783
784       Check that all authors (found in git commit messages) are included in
785       the generator/authors.ml file.
786
787       make maintainer-check-extra-dist
788
789       This rule must be run after "make dist" (so there is a tarball in the
790       working directory).  It compares the contents of the tarball with the
791       contents of git to ensure that no files have been missed from
792       Makefile.am "EXTRA_DIST" rules.
793
794       make maintainer-upload-website
795
796       This is used by the software used to automate libguestfs releases to
797       copy the libguestfs website to another git repository before it is
798       uploaded to the web server.
799
800   MAKING A STABLE RELEASE
801       When we make a stable release, there are several steps documented here.
802       See "LIBGUESTFS VERSION NUMBERS" in guestfs(3) for general information
803       about the stable branch policy.
804
805       •   Check "make && make check" works on at least:
806
807           Fedora (x86-64)
808           Debian (x86-64)
809           Ubuntu (x86-64)
810           Fedora (aarch64)
811           Fedora (ppc64)
812           Fedora (ppc64le)
813       •   Check "./configure --without-libvirt" works.
814
815       •   Finalize guestfs-release-notes.pod
816
817       •   Create new stable and development directories under
818           http://libguestfs.org/download.
819
820       •   Edit website/index.html.in.
821
822       •   Set the version (in configure.ac) to the new stable version, ie.
823           1.XX.0, and commit it:
824
825            ./localconfigure
826            make distclean -k
827            ./localconfigure
828            make && make dist
829            make maintainer-commit
830            make maintainer-tag
831
832       •   Create the stable branch in git:
833
834            git branch stable-1.XX
835            git push origin stable-1.XX
836
837       •   Do a full release of the stable branch.
838
839       •   Set the version to the next development version and commit that.
840           Optionally do a full release of the development branch.
841

INTERNAL DOCUMENTATION

843       This section documents internal functions inside libguestfs and various
844       utilities.  It is intended for libguestfs developers only.
845
846       This section is autogenerated from "/**" comments in source files,
847       which are marked up in POD format.
848
849       These functions are not publicly exported, and may change or be removed
850       at any time.
851
852   Subdirectory lib
853       File lib/actions-support.c
854
855       Helper functions for the actions code in lib/actions-*.c.
856
857       File lib/appliance-cpu.c
858
859       The appliance choice of CPU model.
860
861       Function "lib/appliance-cpu.c:guestfs_int_get_cpu_model"
862
863        const char *
864        guestfs_int_get_cpu_model (int kvm)
865
866       Return the right CPU model to use as the qemu "-cpu" parameter or its
867       equivalent in libvirt.  This returns:
868
869       "host"
870           The literal string "host" means use "-cpu host".
871
872       "max"
873           The literal string "max" means use "-cpu max" (the best possible).
874           This requires awkward translation for libvirt.
875
876       some string
877           Some string such as "cortex-a57" means use "-cpu cortex-a57".
878
879       "NULL"
880           "NULL" means no "-cpu" option at all.  Note returning "NULL" does
881           not indicate an error.
882
883       This is made unnecessarily hard and fragile because of two stupid
884       choices in QEMU:
885
886       •   The default for "qemu-system-aarch64 -M virt" is to emulate a
887           "cortex-a15" (WTF?).
888
889       •   We don't know for sure if KVM will work, but "-cpu host" is broken
890           with TCG, so we almost always pass a broken "-cpu" flag if KVM is
891           semi-broken in any way.
892
893       File lib/appliance-kcmdline.c
894
895       The appliance kernel command line.
896
897       Definition "lib/appliance-kcmdline.c:VALID_TERM"
898
899        #define VALID_TERM
900
901       Check that the $TERM environment variable is reasonable before we pass
902       it through to the appliance.
903
904       Function "lib/appliance-kcmdline.c:get_root_uuid_with_file"
905
906        static char *
907        get_root_uuid_with_file (guestfs_h *g, const char *appliance)
908
909       Given a disk image containing an extX filesystem, return the UUID.
910
911       Function "lib/appliance-kcmdline.c:run_qemu_img_dd"
912
913        static int
914        run_qemu_img_dd (guestfs_h *g, const char *in_file, char *out_file)
915
916       Read the first 256k bytes of the in_file with qemu-img(1) command and
917       write them into the out_file. That may be useful to get UUID of the
918       QCOW2 disk image with "get_root_uuid_with_file".
919
920       The function returns zero if successful, otherwise -1.
921
922       Function "lib/appliance-kcmdline.c:get_root_uuid"
923
924        static char *
925        get_root_uuid (guestfs_h *g, const char *appliance)
926
927       Get the UUID from the appliance disk image.
928
929       Function "lib/appliance-kcmdline.c:guestfs_int_appliance_command_line"
930
931        char *
932        guestfs_int_appliance_command_line (guestfs_h *g,
933                                            const char *appliance,
934                                           int flags)
935
936       Construct the Linux command line passed to the appliance.  This is used
937       by the "direct" and "libvirt" backends, and is simply located in this
938       file because it's a convenient place for this common code.
939
940       The "appliance" parameter is the filename of the appliance (could be
941       NULL) from which we obtain the root UUID.
942
943       The "flags" parameter can contain the following flags logically or'd
944       together (or 0):
945
946       "APPLIANCE_COMMAND_LINE_IS_TCG"
947           If we are launching a qemu TCG guest (ie. KVM is known to be
948           disabled or unavailable).  If you don't know, don't pass this flag.
949
950       Note that this function returns a newly allocated buffer which must be
951       freed by the caller.
952
953       File lib/appliance-uefi.c
954
955       Find the UEFI firmware needed to boot the appliance.
956
957       See also lib/uefi.c (autogenerated file) containing the firmware file
958       locations.
959
960       Function "lib/appliance-uefi.c:guestfs_int_get_uefi"
961
962        int
963        guestfs_int_get_uefi (guestfs_h *g, char *const *firmwares,
964                              const char **firmware, char **code, char **vars,
965                              int *flags)
966
967       Return the location of firmware needed to boot the appliance.  This is
968       aarch64 only currently, since that's the only architecture where UEFI
969       is mandatory (and that only for RHEL).
970
971       "firmwares" is an optional list of allowed values for the firmware
972       autoselection of libvirt. It is "NULL" to indicate it is not supported.
973       *firmware is set to one of the strings in "firmwares" in case one can
974       be used.
975
976       *code is initialized with the path to the read-only UEFI code file.
977       *vars is initialized with the path to a copy of the UEFI vars file
978       (which is cleaned up automatically on exit).
979
980       In case a UEFI firmware is available, either *firmware is set to a
981       non-"NULL" value, or *code and *vars are.
982
983       *code and *vars should be freed by the caller, and *firmware must not.
984
985       If the function returns "-1" then there was a real error which should
986       cause appliance building to fail (no UEFI firmware is not an error).
987
988       See also virt-v2v.git/v2v/utils.ml:find_uefi_firmware
989
990       File lib/appliance.c
991
992       This file deals with building the libguestfs appliance.
993
994       Function "lib/appliance.c:guestfs_int_build_appliance"
995
996        int
997        guestfs_int_build_appliance (guestfs_h *g,
998                                    char **kernel_rtn,
999                                    char **initrd_rtn,
1000                                    char **appliance_rtn)
1001
1002       Locate or build the appliance.
1003
1004       This function locates or builds the appliance as necessary, handling
1005       the supermin appliance, caching of supermin-built appliances, or using
1006       either a fixed or old-style appliance.
1007
1008       The return value is 0 = good, "-1" = error.  Returned in
1009       "appliance.kernel" will be the name of the kernel to use,
1010       "appliance.initrd" the name of the initrd, "appliance.image" the name
1011       of the ext2 root filesystem.  "appliance.image" can be "NULL", meaning
1012       that we are using an old-style (non-ext2) appliance.  All three strings
1013       must be freed by the caller.  However the referenced files themselves
1014       must not be deleted.
1015
1016       The process is as follows:
1017
1018       1.  Look in "path" which contains a supermin appliance skeleton.  If no
1019           element has this, skip straight to step 3.
1020
1021       2.  Call "supermin --build" to build the full appliance (if it needs to
1022           be rebuilt).  If this is successful, return the full appliance.
1023
1024       3.  Check "path", looking for a fixed appliance.  If one is found,
1025           return it.
1026
1027       4.  Check "path", looking for an old-style appliance.  If one is found,
1028           return it.
1029
1030       The supermin appliance cache directory lives in $TMPDIR/.guestfs-$UID/
1031       and consists of up to four files:
1032
1033         $TMPDIR/.guestfs-$UID/lock            - the supermin lock file
1034         $TMPDIR/.guestfs-$UID/appliance.d/kernel - the kernel
1035         $TMPDIR/.guestfs-$UID/appliance.d/initrd - the supermin initrd
1036         $TMPDIR/.guestfs-$UID/appliance.d/root   - the appliance
1037
1038       Multiple instances of libguestfs with the same UID may be racing to
1039       create an appliance.  However (since supermin ≥ 5) supermin provides a
1040       --lock flag and atomic update of the appliance.d subdirectory.
1041
1042       Function "lib/appliance.c:locate_or_build_appliance"
1043
1044        static int
1045        locate_or_build_appliance (guestfs_h *g,
1046                                   struct appliance_files *appliance,
1047                                   const char *path)
1048
1049       Check "path", looking for one of appliances: supermin appliance, fixed
1050       appliance or old-style appliance.  If one of the fixed appliances is
1051       found, return it.  If the supermin appliance skeleton is found, build
1052       and return appliance.
1053
1054       Return values:
1055
1056         1 = appliance is found, returns C<appliance>,
1057         0 = appliance not found,
1058        -1 = error which aborts the launch process.
1059
1060       Function "lib/appliance.c:search_appliance"
1061
1062        static int
1063        search_appliance (guestfs_h *g, struct appliance_files *appliance)
1064
1065       Search elements of "g->path", returning the first "appliance" element
1066       which matches the predicate function "locate_or_build_appliance".
1067
1068       Return values:
1069
1070         1 = a path element matched, returns C<appliance>,
1071         0 = no path element matched,
1072        -1 = error which aborts the launch process.
1073
1074       Function "lib/appliance.c:build_supermin_appliance"
1075
1076        static int
1077        build_supermin_appliance (guestfs_h *g,
1078                                  const char *supermin_path,
1079                                  struct appliance_files *appliance)
1080
1081       Build supermin appliance from "supermin_path" to $TMPDIR/.guestfs-$UID.
1082
1083       Returns: 0 = built or "-1" = error (aborts launch).
1084
1085       Function "lib/appliance.c:run_supermin_build"
1086
1087        static int
1088        run_supermin_build (guestfs_h *g,
1089                            const char *lockfile,
1090                            const char *appliancedir,
1091                            const char *supermin_path)
1092
1093       Run "supermin --build" and tell it to generate the appliance.
1094
1095       Function "lib/appliance.c:dir_contains_file"
1096
1097        static int
1098        dir_contains_file (guestfs_h *g, const char *dir, const char *file)
1099
1100       Returns true iff "file" is contained in "dir".
1101
1102       Function "lib/appliance.c:dir_contains_files"
1103
1104        static int
1105        dir_contains_files (guestfs_h *g, const char *dir, ...)
1106
1107       Returns true iff every listed file is contained in "dir".
1108
1109       File lib/command.c
1110
1111       A wrapper for running external commands, loosely based on libvirt's
1112       "virCommand" interface.
1113
1114       In outline to use this interface you must:
1115
1116       1.  Create a new command handle:
1117
1118            struct command *cmd;
1119            cmd = guestfs_int_new_command (g);
1120
1121       2.  Either add arguments:
1122
1123            guestfs_int_cmd_add_arg (cmd, "qemu-img");
1124            guestfs_int_cmd_add_arg (cmd, "info");
1125            guestfs_int_cmd_add_arg (cmd, filename);
1126
1127           (NB: You don't need to add a "NULL" argument at the end.)
1128
1129       3.  Or construct a command using a mix of quoted and unquoted strings.
1130           (This is useful for system(3)/"popen("r")"-style shell commands,
1131           with the added safety of allowing args to be quoted properly).
1132
1133            guestfs_int_cmd_add_string_unquoted (cmd, "qemu-img info ");
1134            guestfs_int_cmd_add_string_quoted (cmd, filename);
1135
1136       4.  Set various flags, such as whether you want to capture errors in
1137           the regular libguestfs error log.
1138
1139       5.  Run the command.  This is what does the fork(2) call, optionally
1140           loops over the output, and then does a waitpid(3) and returns the
1141           exit status of the command.
1142
1143            r = guestfs_int_cmd_run (cmd);
1144            if (r == -1)
1145              // error
1146            // else test r using the WIF* functions
1147
1148       6.  Close the handle:
1149
1150            guestfs_int_cmd_close (cmd);
1151
1152           (or use "CLEANUP_CMD_CLOSE").
1153
1154       Function "lib/command.c:guestfs_int_new_command"
1155
1156        struct command *
1157        guestfs_int_new_command (guestfs_h *g)
1158
1159       Create a new command handle.
1160
1161       Function "lib/command.c:guestfs_int_cmd_add_arg"
1162
1163        void
1164        guestfs_int_cmd_add_arg (struct command *cmd, const char *arg)
1165
1166       Add single arg (for "execv"-style command execution).
1167
1168       Function "lib/command.c:guestfs_int_cmd_add_arg_format"
1169
1170        void
1171        guestfs_int_cmd_add_arg_format (struct command *cmd, const char *fs, ...)
1172
1173       Add single arg (for "execv"-style command execution) using a
1174       printf(3)-style format string.
1175
1176       Function "lib/command.c:guestfs_int_cmd_add_string_unquoted"
1177
1178        void
1179        guestfs_int_cmd_add_string_unquoted (struct command *cmd, const char *str)
1180
1181       Add a string (for system(3)-style command execution).
1182
1183       This variant adds the strings without quoting them, which is dangerous
1184       if the string contains untrusted content.
1185
1186       Function "lib/command.c:guestfs_int_cmd_add_string_quoted"
1187
1188        void
1189        guestfs_int_cmd_add_string_quoted (struct command *cmd, const char *str)
1190
1191       Add a string (for system(3)-style command execution).
1192
1193       The string is enclosed in double quotes, with any special characters
1194       within the string which need escaping done.  This is used to add a
1195       single argument to a system(3)-style command string.
1196
1197       Function "lib/command.c:guestfs_int_cmd_set_stdout_callback"
1198
1199        void
1200        guestfs_int_cmd_set_stdout_callback (struct command *cmd,
1201                                             cmd_stdout_callback stdout_callback,
1202                                             void *stdout_data, unsigned flags)
1203
1204       Set a callback which will capture stdout.
1205
1206       If flags contains "CMD_STDOUT_FLAG_LINE_BUFFER" (the default), then the
1207       callback is called line by line on the output.  If there is a trailing
1208       "\n" then it is automatically removed before the callback is called.
1209       The line buffer is "\0"-terminated.
1210
1211       If flags contains "CMD_STDOUT_FLAG_UNBUFFERED", then buffers are passed
1212       to the callback as it is received from the command.  Note in this case
1213       the buffer is not "\0"-terminated, so you need to may attention to the
1214       length field in the callback.
1215
1216       If flags contains "CMD_STDOUT_FLAG_WHOLE_BUFFER", then the callback is
1217       called exactly once, with the entire buffer.  Note in this case the
1218       buffer is not "\0"-terminated, so you need to may attention to the
1219       length field in the callback.
1220
1221       Function "lib/command.c:guestfs_int_cmd_set_stderr_to_stdout"
1222
1223        void
1224        guestfs_int_cmd_set_stderr_to_stdout (struct command *cmd)
1225
1226       Equivalent to adding "2>&1" to the end of the command.  This is
1227       incompatible with the "capture_errors" flag, because it doesn't make
1228       sense to combine them.
1229
1230       Function "lib/command.c:guestfs_int_cmd_clear_capture_errors"
1231
1232        void
1233        guestfs_int_cmd_clear_capture_errors (struct command *cmd)
1234
1235       Clear the "capture_errors" flag.  This means that any errors will go to
1236       stderr, instead of being captured in the event log, and that is usually
1237       undesirable.
1238
1239       Function "lib/command.c:guestfs_int_cmd_clear_close_files"
1240
1241        void
1242        guestfs_int_cmd_clear_close_files (struct command *cmd)
1243
1244       Don't close file descriptors after the fork.
1245
1246       XXX Should allow single fds to be sent to child process.
1247
1248       Function "lib/command.c:guestfs_int_cmd_set_child_callback"
1249
1250        void
1251        guestfs_int_cmd_set_child_callback (struct command *cmd,
1252                                            cmd_child_callback child_callback,
1253                                            void *data)
1254
1255       Set a function to be executed in the child, right before the execution.
1256       Can be used to setup the child, for example changing its current
1257       directory.
1258
1259       Function "lib/command.c:guestfs_int_cmd_set_child_rlimit"
1260
1261        void
1262        guestfs_int_cmd_set_child_rlimit (struct command *cmd, int resource, long limit)
1263
1264       Set up child rlimits, in case the process we are running could consume
1265       lots of space or time.
1266
1267       Function "lib/command.c:finish_command"
1268
1269        static void
1270        finish_command (struct command *cmd)
1271
1272       Finish off the command by either "NULL"-terminating the argv array or
1273       adding a terminating "\0" to the string, or die with an internal error
1274       if no command has been added.
1275
1276       Function "lib/command.c:loop"
1277
1278        static int
1279        loop (struct command *cmd)
1280
1281       The loop which reads errors and output and directs it either to the log
1282       or to the stdout callback as appropriate.
1283
1284       Function "lib/command.c:guestfs_int_cmd_run"
1285
1286        int
1287        guestfs_int_cmd_run (struct command *cmd)
1288
1289       Fork, run the command, loop over the output, and waitpid.
1290
1291       Returns the exit status.  Test it using "WIF*" macros.
1292
1293       On error: Calls "error" and returns "-1".
1294
1295       Function "lib/command.c:guestfs_int_cmd_pipe_run"
1296
1297        int
1298        guestfs_int_cmd_pipe_run (struct command *cmd, const char *mode)
1299
1300       Fork and run the command, but don't wait.  Roughly equivalent to
1301       "popen (..., "r"|"w")".
1302
1303       Returns the file descriptor of the pipe, connected to stdout ("r") or
1304       stdin ("w") of the child process.
1305
1306       After reading/writing to this pipe, call "guestfs_int_cmd_pipe_wait" to
1307       wait for the status of the child.
1308
1309       Errors from the subcommand cannot be captured to the error log using
1310       this interface.  Instead the caller should call
1311       "guestfs_int_cmd_get_pipe_errors" (after "guestfs_int_cmd_pipe_wait"
1312       returns an error).
1313
1314       Function "lib/command.c:guestfs_int_cmd_pipe_wait"
1315
1316        int
1317        guestfs_int_cmd_pipe_wait (struct command *cmd)
1318
1319       Wait for a subprocess created by "guestfs_int_cmd_pipe_run" to finish.
1320       On error (eg. failed syscall) this returns "-1" and sets the error.  If
1321       the subcommand fails, then use "WIF*" macros to check this, and call
1322       "guestfs_int_cmd_get_pipe_errors" to read the error messages printed by
1323       the child.
1324
1325       Function "lib/command.c:guestfs_int_cmd_get_pipe_errors"
1326
1327        char *
1328        guestfs_int_cmd_get_pipe_errors (struct command *cmd)
1329
1330       Read the error messages printed by the child.  The caller must free the
1331       returned buffer after use.
1332
1333       Function "lib/command.c:guestfs_int_cmd_close"
1334
1335        void
1336        guestfs_int_cmd_close (struct command *cmd)
1337
1338       Close the "cmd" object and free all resources.
1339
1340       Function "lib/command.c:process_line_buffer"
1341
1342        static void
1343        process_line_buffer (struct command *cmd, int closed)
1344
1345       Deal with buffering stdout for the callback.
1346
1347       File lib/conn-socket.c
1348
1349       This file handles connections to the child process where this is done
1350       over regular POSIX sockets.
1351
1352       Function "lib/conn-socket.c:handle_log_message"
1353
1354        static int
1355        handle_log_message (guestfs_h *g,
1356                            struct connection_socket *conn)
1357
1358       This is called if "conn->console_sock" becomes ready to read while we
1359       are doing one of the connection operations above.  It reads and deals
1360       with the log message.
1361
1362       Returns:
1363
1364       1   log message(s) were handled successfully
1365
1366       0   connection to appliance closed
1367
1368       "-1"
1369           error
1370
1371       Function "lib/conn-socket.c:guestfs_int_new_conn_socket_listening"
1372
1373        struct connection *
1374        guestfs_int_new_conn_socket_listening (guestfs_h *g,
1375                                              int daemon_accept_sock,
1376                                              int console_sock)
1377
1378       Create a new socket connection, listening.
1379
1380       Note that it's OK for "console_sock" to be passed as "-1", meaning
1381       there's no console available for this appliance.
1382
1383       After calling this, "daemon_accept_sock" is owned by the connection,
1384       and will be closed properly either in "accept_connection" or
1385       "free_connection".
1386
1387       Function "lib/conn-socket.c:guestfs_int_new_conn_socket_connected"
1388
1389        struct connection *
1390        guestfs_int_new_conn_socket_connected (guestfs_h *g,
1391                                              int daemon_sock,
1392                                              int console_sock)
1393
1394       Create a new socket connection, connected.
1395
1396       As above, but the caller passes us a connected "daemon_sock" and
1397       promises not to call "accept_connection".
1398
1399       File lib/create.c
1400
1401       APIs for creating empty disks.
1402
1403       Mostly this consists of wrappers around the qemu-img(1) program.
1404
1405       Definition "lib/create.c:VALID_FORMAT"
1406
1407        #define VALID_FORMAT
1408
1409       Check for valid backing format.  Allow any "^[[:alnum]]+$" (in C
1410       locale), but limit the length to something reasonable.
1411
1412       File lib/drives.c
1413
1414       Drives added are stored in an array in the handle.  Code here manages
1415       that array and the individual "struct drive" data.
1416
1417       Function "lib/drives.c:create_overlay"
1418
1419        static int
1420        create_overlay (guestfs_h *g, struct drive *drv)
1421
1422       For readonly drives, create an overlay to protect the original drive
1423       content.  Note we never need to clean up these overlays since they are
1424       created in the temporary directory and deleted when the handle is
1425       closed.
1426
1427       Function "lib/drives.c:create_drive_file"
1428
1429        static struct drive *
1430        create_drive_file (guestfs_h *g,
1431                           const struct drive_create_data *data)
1432
1433       Create and free the "struct drive".
1434
1435       Function "lib/drives.c:create_drive_dev_null"
1436
1437        static struct drive *
1438        create_drive_dev_null (guestfs_h *g,
1439                               struct drive_create_data *data)
1440
1441       Create the special /dev/null drive.
1442
1443       Traditionally you have been able to use /dev/null as a filename, as
1444       many times as you like.  Ancient KVM (RHEL 5) cannot handle adding
1445       /dev/null readonly.  qemu 1.2 + virtio-scsi segfaults when you use any
1446       zero-sized file including /dev/null.
1447
1448       Because of these problems, we replace /dev/null with a non-zero sized
1449       temporary file.  This shouldn't make any difference since users are not
1450       supposed to try and access a null drive.
1451
1452       Function "lib/drives.c:drive_to_string"
1453
1454        static char *
1455        drive_to_string (guestfs_h *g, const struct drive *drv)
1456
1457       Convert a "struct drive" to a string for debugging.  The caller must
1458       free this string.
1459
1460       Function "lib/drives.c:add_drive_to_handle_at"
1461
1462        static void
1463        add_drive_to_handle_at (guestfs_h *g, struct drive *d, size_t drv_index)
1464
1465       Add "struct drive" to the "g->drives" vector at the given index
1466       "drv_index".  If the array isn't large enough it is reallocated.  The
1467       index must not contain a drive already.
1468
1469       Function "lib/drives.c:add_drive_to_handle"
1470
1471        static void
1472        add_drive_to_handle (guestfs_h *g, struct drive *d)
1473
1474       Add struct drive to the end of the "g->drives" vector in the handle.
1475
1476       Function "lib/drives.c:guestfs_int_add_dummy_appliance_drive"
1477
1478        void
1479        guestfs_int_add_dummy_appliance_drive (guestfs_h *g)
1480
1481       Called during launch to add a dummy slot to "g->drives".
1482
1483       Function "lib/drives.c:guestfs_int_free_drives"
1484
1485        void
1486        guestfs_int_free_drives (guestfs_h *g)
1487
1488       Free up all the drives in the handle.
1489
1490       Definition "lib/drives.c:VALID_FORMAT_IFACE"
1491
1492        #define VALID_FORMAT_IFACE
1493
1494       Check string parameter matches regular expression "^[-_[:alnum:]]+$"
1495       (in C locale).
1496
1497       Definition "lib/drives.c:VALID_DISK_LABEL"
1498
1499        #define VALID_DISK_LABEL
1500
1501       Check the disk label is reasonable.  It can't contain certain
1502       characters, eg. '/', ','.  However be stricter here and ensure it's
1503       just alphabetic and ≤ 20 characters in length.
1504
1505       Definition "lib/drives.c:VALID_HOSTNAME"
1506
1507        #define VALID_HOSTNAME
1508
1509       Check the server hostname is reasonable.
1510
1511       Function "lib/drives.c:valid_port"
1512
1513        static int
1514        valid_port (int port)
1515
1516       Check the port number is reasonable.
1517
1518       Function "lib/drives.c:valid_blocksize"
1519
1520        static int
1521        valid_blocksize (int blocksize)
1522
1523       Check the block size is reasonable.  It can't be other then 512 or
1524       4096.
1525
1526       Function "lib/drives.c:guestfs_impl_remove_drive"
1527
1528        int
1529        guestfs_impl_remove_drive (guestfs_h *g, const char *label)
1530
1531       This function implements "guestfs_remove_drive" in guestfs(3).
1532
1533       Depending on whether we are hotplugging or not, this function does
1534       slightly different things: If not hotplugging, then the drive just
1535       disappears as if it had never been added.  The later drives "move up"
1536       to fill the space.  When hotplugging we have to do some complex stuff,
1537       and we usually end up leaving an empty ("NULL") slot in the "g->drives"
1538       vector.
1539
1540       Function "lib/drives.c:guestfs_int_checkpoint_drives"
1541
1542        size_t
1543        guestfs_int_checkpoint_drives (guestfs_h *g)
1544
1545       Checkpoint and roll back drives, so that groups of drives can be added
1546       atomically.  Only used by "guestfs_add_domain" in guestfs(3).
1547
1548       Function "lib/drives.c:guestfs_impl_debug_drives"
1549
1550        char **
1551        guestfs_impl_debug_drives (guestfs_h *g)
1552
1553       Internal function to return the list of drives.
1554
1555       File lib/errors.c
1556
1557       This file handles errors, and also debug, trace and warning messages.
1558
1559       Errors in libguestfs API calls are handled by setting an error message
1560       and optional errno in the handle.  The caller has the choice of testing
1561       API calls to find out if they failed and then querying the last error
1562       from the handle, and/or getting a callback.
1563
1564       From the point of view of the library source, generally you should use
1565       the "error" or "perrorf" macros along error paths, eg:
1566
1567        if (something_bad) {
1568          error (g, "something bad happened");
1569          return -1;
1570        }
1571
1572       Make sure to call the "error" or "perrorf" macro exactly once along
1573       each error path, since the handle can only store a single error and the
1574       previous error will be overwritten.
1575
1576       Function "lib/errors.c:guestfs_int_warning"
1577
1578        void
1579        guestfs_int_warning (guestfs_h *g, const char *fs, ...)
1580
1581       Print a warning.
1582
1583       Code should not call this function directly.  Use the
1584       "warning (g, fs, ...)" macro.
1585
1586       Warnings are printed unconditionally.  We try to make these rare:
1587       Generally speaking, a warning should either be an error, or if it's not
1588       important for end users then it should be a debug message.
1589
1590       Function "lib/errors.c:guestfs_int_debug"
1591
1592        void
1593        guestfs_int_debug (guestfs_h *g, const char *fs, ...)
1594
1595       Print a debug message.
1596
1597       Code should not call this function directly.  To add debug messages in
1598       the library, use the "debug (g, fs, ...)" macro.  The macro checks if
1599       "g->verbose" is false and avoids the function call, meaning the macro
1600       is more efficient.
1601
1602       Function "lib/errors.c:guestfs_int_trace"
1603
1604        void
1605        guestfs_int_trace (guestfs_h *g, const char *fs, ...)
1606
1607       Print a trace message.
1608
1609       Do not call this function.  All calls are generated automatically.
1610
1611       Function "lib/errors.c:guestfs_int_error_errno"
1612
1613        void
1614        guestfs_int_error_errno (guestfs_h *g, int errnum, const char *fs, ...)
1615
1616       Set the last error and errno in the handle, and optionally raise the
1617       error callback if one is defined.
1618
1619       If you don't need to set errno, use the "error (g, fs, ...)"  macro
1620       instead of calling this directly.  If you need to set errno then there
1621       is no macro wrapper, so calling this function directly is fine.
1622
1623       Function "lib/errors.c:guestfs_int_perrorf"
1624
1625        void
1626        guestfs_int_perrorf (guestfs_h *g, const char *fs, ...)
1627
1628       Similar to perror(3), but it sets the last error in the handle, raises
1629       the error callback if one is defined, and supports format strings.
1630
1631       You should probably use the "perrorf (g, fs, ...)" macro instead of
1632       calling this directly.
1633
1634       Function "lib/errors.c:guestfs_int_launch_failed_error"
1635
1636        void
1637        guestfs_int_launch_failed_error (guestfs_h *g)
1638
1639       Raise a launch failed error in a standard format.
1640
1641       Since this is the most common error seen by people who have
1642       installation problems, buggy qemu, etc, and since no one reads the FAQ,
1643       describe in this error message what resources are available to debug
1644       launch problems.
1645
1646       Function "lib/errors.c:guestfs_int_unexpected_close_error"
1647
1648        void
1649        guestfs_int_unexpected_close_error (guestfs_h *g)
1650
1651       Raise an error if the appliance unexpectedly crashes after launch.
1652
1653       Function "lib/errors.c:guestfs_int_launch_timeout"
1654
1655        void
1656        guestfs_int_launch_timeout (guestfs_h *g)
1657
1658       Raise an error if the appliance hangs during launch.
1659
1660       Function "lib/errors.c:guestfs_int_external_command_failed"
1661
1662        void
1663        guestfs_int_external_command_failed (guestfs_h *g, int status,
1664                                            const char *cmd_name, const char *extra)
1665
1666       Raise an error if an external command fails.
1667
1668       "status" is the status code of the command (eg. returned from
1669       waitpid(2) or system(3)).  This function turns the status code into an
1670       explanatory string.
1671
1672       File lib/events.c
1673
1674       Function "lib/events.c:replace_old_style_event_callback"
1675
1676        static void
1677        replace_old_style_event_callback (guestfs_h *g,
1678                                          guestfs_event_callback cb,
1679                                          uint64_t event_bitmask,
1680                                          void *opaque,
1681                                          void *opaque2)
1682
1683       Emulate old-style callback API.
1684
1685       There were no event handles, so multiple callbacks per event were not
1686       supported.  Calling the same "guestfs_set_*_callback" function would
1687       replace the existing event.  Calling it with "cb == NULL" meant that
1688       the caller wanted to remove the callback.
1689
1690       File lib/guestfs-internal-all.h
1691
1692       This header contains definitions which are shared by all parts of
1693       libguestfs, ie. the daemon, the library, language bindings and virt
1694       tools (ie. all C code).
1695
1696       If you need a definition used by only the library, put it in
1697       lib/guestfs-internal.h instead.
1698
1699       If a definition is used by only a single tool, it should not be in any
1700       shared header file at all.
1701
1702       File lib/guestfs-internal.h
1703
1704       This header file is included in the libguestfs library (lib/) only.
1705
1706       See also lib/guestfs-internal-all.h.
1707
1708       Structure "lib/guestfs-internal.h:event"
1709
1710        struct event {
1711          uint64_t event_bitmask;
1712          guestfs_event_callback cb;
1713          void *opaque;
1714
1715          /* opaque2 is not exposed through the API, but is used internally to
1716           * emulate the old-style callback API.
1717           */
1718          void *opaque2;
1719        };
1720
1721       This struct is used to maintain a list of events registered against the
1722       handle.  See "g->events" in the handle.
1723
1724       Structure "lib/guestfs-internal.h:drive"
1725
1726        struct drive {
1727          /* Original source of the drive, eg. file:..., http:... */
1728          struct drive_source src;
1729
1730          /* If the drive is readonly, then an overlay [a local file] is
1731           * created before launch to protect the original drive content, and
1732           * the filename is stored here.  Backends should open this file if
1733           * it is non-NULL, else consult the original source above.
1734           *
1735           * Note that the overlay is in a backend-specific format, probably
1736           * different from the source format.  eg. qcow2, UML COW.
1737           */
1738          char *overlay;
1739
1740          /* Various per-drive flags. */
1741          bool readonly;
1742          char *iface;
1743          char *name;
1744          char *disk_label;
1745          char *cachemode;
1746          enum discard discard;
1747          bool copyonread;
1748          int blocksize;
1749        };
1750
1751       There is one "struct drive" per drive, including hot-plugged drives.
1752
1753       Structure "lib/guestfs-internal.h:backend_ops"
1754
1755        struct backend_ops {
1756          /* Size (in bytes) of the per-handle data structure needed by this
1757           * backend.  The data pointer is allocated and freed by libguestfs
1758           * and passed to the functions in the 'void *data' parameter.
1759           * Inside the data structure is opaque to libguestfs.  Any strings
1760           * etc pointed to by it must be freed by the backend during
1761           * shutdown.
1762           */
1763          size_t data_size;
1764
1765          /* Create a COW overlay on top of a drive.  This must be a local
1766           * file, created in the temporary directory.  This is called when
1767           * the drive is added to the handle.
1768           */
1769          char *(*create_cow_overlay) (guestfs_h *g, void *data, struct drive *drv);
1770
1771          /* Launch and shut down. */
1772          int (*launch) (guestfs_h *g, void *data, const char *arg);
1773          int (*shutdown) (guestfs_h *g, void *data, int check_for_errors);
1774
1775          /* Miscellaneous. */
1776          int (*get_pid) (guestfs_h *g, void *data);
1777          int (*max_disks) (guestfs_h *g, void *data);
1778
1779          /* Hotplugging drives. */
1780          int (*hot_add_drive) (guestfs_h *g, void *data, struct drive *drv, size_t drv_index);
1781          int (*hot_remove_drive) (guestfs_h *g, void *data, struct drive *drv, size_t drv_index);
1782        };
1783
1784       Backend operations.
1785
1786       Each backend (eg. libvirt, direct) defines some functions which get run
1787       at various places in the handle lifecycle (eg. at launch, shutdown).
1788       The backend defines this struct pointing to those functions.
1789
1790       Structure "lib/guestfs-internal.h:connection"
1791
1792        struct connection {
1793          const struct connection_ops *ops;
1794
1795          /* In the real struct, private data used by each connection module
1796           * follows here.
1797           */
1798        };
1799
1800       Connection module.
1801
1802       A "connection" represents the appliance console connection plus the
1803       daemon connection.  It hides the underlying representation (POSIX
1804       sockets, "virStreamPtr").
1805
1806       Structure "lib/guestfs-internal.h:cached_feature"
1807
1808        struct cached_feature {
1809          char *group;
1810          int result;
1811        };
1812
1813       Cache of queried features.
1814
1815       Used to cache the appliance features (see lib/available.c).
1816
1817       Structure "lib/guestfs-internal.h:guestfs_h"
1818
1819        struct guestfs_h {
1820          struct guestfs_h *next;      /* Linked list of open handles. */
1821          enum state state;             /* See the state machine diagram in guestfs(3)*/
1822
1823          /* Lock acquired when entering any public guestfs_* function to
1824           * protect the handle.
1825           */
1826          pthread_mutex_t lock;
1827
1828          /**** Configuration of the handle. ****/
1829          bool verbose;                 /* Debugging. */
1830          bool trace;                   /* Trace calls. */
1831          bool autosync;                /* Autosync. */
1832          bool direct_mode;             /* Direct mode. */
1833          bool recovery_proc;           /* Create a recovery process. */
1834          bool enable_network;          /* Enable the network. */
1835          bool selinux;                 /* selinux enabled? */
1836          bool pgroup;                  /* Create process group for children? */
1837          bool close_on_exit;           /* Is this handle on the atexit list? */
1838
1839          int smp;                      /* If > 1, -smp flag passed to hv. */
1840          int memsize;                 /* Size of RAM (megabytes). */
1841
1842          char *path;                  /* Path to the appliance. */
1843          char *hv;                    /* Hypervisor (HV) binary. */
1844          char *append;                        /* Append to kernel command line. */
1845
1846          struct hv_param *hv_params;   /* Extra hv parameters. */
1847
1848          char *program;                /* Program name. */
1849          char *identifier;             /* Handle identifier. */
1850
1851          /* Array of drives added by add-drive* APIs.
1852           *
1853           * Before launch this list can be empty or contain some drives.
1854           *
1855           * During launch, a dummy slot may be added which represents the
1856           * slot taken up by the appliance drive.
1857           *
1858           * When hotplugging is supported by the backend, drives can be
1859           * added to the end of this list after launch.  Also hot-removing a
1860           * drive causes a NULL slot to appear in the list.
1861           *
1862           * During shutdown, this list is deleted, so that each launch gets a
1863           * fresh set of drives (however callers: don't do this, create a new
1864           * handle each time).
1865           *
1866           * Always use ITER_DRIVES macro to iterate over this list!
1867           */
1868          struct drive **drives;
1869          size_t nr_drives;
1870
1871        #define ITER_DRIVES(g,i,drv)              \
1872          for (i = 0; i < (g)->nr_drives; ++i)    \
1873            if (((drv) = (g)->drives[i]) != NULL)
1874
1875          /* Backend.  NB: Use guestfs_int_set_backend to change the backend. */
1876          char *backend;                /* The full string, always non-NULL. */
1877          char *backend_arg;            /* Pointer to the argument part. */
1878          const struct backend_ops *backend_ops;
1879          void *backend_data;           /* Per-handle data. */
1880          char **backend_settings;      /* Backend settings (can be NULL). */
1881
1882          /**** Runtime information. ****/
1883          /* Temporary and cache directories. */
1884          /* The actual temporary directory - this is not created with the
1885           * handle, you have to call guestfs_int_lazy_make_tmpdir.
1886           */
1887          char *tmpdir;
1888          char *sockdir;
1889          /* Environment variables that affect tmpdir/cachedir/sockdir locations. */
1890          char *env_tmpdir;             /* $TMPDIR (NULL if not set) */
1891          char *env_runtimedir;         /* $XDG_RUNTIME_DIR (NULL if not set)*/
1892          char *int_tmpdir;   /* $LIBGUESTFS_TMPDIR or guestfs_set_tmpdir or NULL */
1893          char *int_cachedir; /* $LIBGUESTFS_CACHEDIR or guestfs_set_cachedir or NULL */
1894
1895          /* Error handler, plus stack of old error handlers. */
1896          pthread_key_t error_data;
1897
1898          /* Linked list of error_data structures allocated for this handle,
1899           * plus a mutex to protect the linked list.
1900           */
1901          pthread_mutex_t error_data_list_lock;
1902          struct error_data *error_data_list;
1903
1904          /* Out of memory error handler. */
1905          guestfs_abort_cb           abort_cb;
1906
1907          /* Events. */
1908          struct event *events;
1909          size_t nr_events;
1910
1911          /* Private data area. */
1912          struct hash_table *pda;
1913          struct pda_entry *pda_next;
1914
1915          /* User cancelled transfer.  Not signal-atomic, but it doesn't
1916           * matter for this case because we only care if it is != 0.
1917           */
1918          int user_cancel;
1919
1920          struct timeval launch_t;      /* The time that we called guestfs_launch. */
1921
1922          /* Used by bindtests. */
1923          FILE *test_fp;
1924
1925          /* Used to generate unique numbers, eg for temp files.  To use this,
1926           * '++g->unique'.  Note these are only unique per-handle, not
1927           * globally unique.
1928           */
1929          int unique;
1930
1931          /*** Protocol. ***/
1932          struct connection *conn;              /* Connection to appliance. */
1933          int msg_next_serial;
1934
1935        #if HAVE_FUSE
1936          /**** Used by the mount-local APIs. ****/
1937          char *localmountpoint;
1938          struct fuse *fuse;                    /* FUSE handle. */
1939          int ml_dir_cache_timeout;             /* Directory cache timeout. */
1940          Hash_table *lsc_ht, *xac_ht, *rlc_ht; /* Directory cache. */
1941          int ml_read_only;                     /* If mounted read-only. */
1942          int ml_debug_calls;        /* Extra debug info on each FUSE call. */
1943        #endif
1944
1945        #ifdef HAVE_LIBVIRT_BACKEND
1946          /* Used by lib/libvirt-auth.c. */
1947        #define NR_CREDENTIAL_TYPES 9
1948          unsigned int nr_supported_credentials;
1949          int supported_credentials[NR_CREDENTIAL_TYPES];
1950          const char *saved_libvirt_uri; /* Doesn't need to be freed. */
1951          bool wrapper_warning_done;
1952          unsigned int nr_requested_credentials;
1953          virConnectCredentialPtr requested_credentials;
1954        #endif
1955
1956          /* Cached features. */
1957          struct cached_feature *features;
1958          size_t nr_features;
1959
1960          /* Used by lib/info.c.  -1 = not tested or error; else 0 or 1. */
1961          int qemu_img_supports_U_option;
1962        };
1963
1964       The libguestfs handle.
1965
1966       Structure "lib/guestfs-internal.h:version"
1967
1968        struct version {
1969          int v_major;
1970          int v_minor;
1971          int v_micro;
1972        };
1973
1974       Used for storing major.minor.micro version numbers.  See lib/version.c
1975       for more information.
1976
1977       File lib/guid.c
1978
1979       Function "lib/guid.c:guestfs_int_validate_guid"
1980
1981        int
1982        guestfs_int_validate_guid (const char *str)
1983
1984       Check whether a string supposed to contain a GUID actually contains it.
1985       It can recognize strings either as
1986       "{21EC2020-3AEA-1069-A2DD-08002B30309D}" or
1987       "21EC2020-3AEA-1069-A2DD-08002B30309D".
1988
1989       File lib/handle.c
1990
1991       This file deals with the "guestfs_h" handle, creating it, closing it,
1992       and initializing/setting/getting fields.
1993
1994       Function "lib/handle.c:init_libguestfs"
1995
1996        static void
1997        init_libguestfs (void)
1998
1999       No initialization is required by libguestfs, but libvirt and libxml2
2000       require initialization if they might be called from multiple threads.
2001       Hence this constructor function which is called when libguestfs is
2002       first loaded.
2003
2004       Function "lib/handle.c:shutdown_backend"
2005
2006        static int
2007        shutdown_backend (guestfs_h *g, int check_for_errors)
2008
2009       This function is the common path for shutting down the backend qemu
2010       process.
2011
2012       "guestfs_shutdown" calls "shutdown_backend" with "check_for_errors=1".
2013       "guestfs_close" calls "shutdown_backend" with "check_for_errors=0".
2014
2015       "check_for_errors" is a hint to the backend about whether we care about
2016       errors or not.  In the libvirt case it can be used to optimize the
2017       shutdown for speed when we don't care.
2018
2019       Function "lib/handle.c:close_handles"
2020
2021        static void
2022        close_handles (void)
2023
2024       Close all open handles (called from atexit(3)).
2025
2026       Function "lib/handle.c:guestfs_int_get_backend_setting_bool"
2027
2028        int
2029        guestfs_int_get_backend_setting_bool (guestfs_h *g, const char *name)
2030
2031       This is a convenience function, but we might consider exporting it as
2032       an API in future.
2033
2034       File lib/info.c
2035
2036       Function "lib/info.c:qemu_img_supports_U_option"
2037
2038        static int
2039        qemu_img_supports_U_option (guestfs_h *g)
2040
2041       Test if the qemu-img info command supports the "-U" option to disable
2042       locking.  The result is memoized in the handle.
2043
2044       Note this option was added in qemu 2.11.  We can remove this test when
2045       we can assume everyone is using qemu >= 2.11.
2046
2047       File lib/inspect-icon.c
2048
2049       Function "lib/inspect-icon.c:guestfs_int_download_to_tmp"
2050
2051        char *
2052        guestfs_int_download_to_tmp (guestfs_h *g, const char *filename,
2053                                     const char *extension,
2054                                     uint64_t max_size)
2055
2056       Download a guest file to a local temporary file.
2057
2058       The name of the temporary (downloaded) file is returned.  The caller
2059       must free the pointer, but does not need to delete the temporary file.
2060       It will be deleted when the handle is closed.
2061
2062       The name of the temporary file is randomly generated, but an extension
2063       can be specified using "extension" (or pass "NULL" for none).
2064
2065       Refuse to download the guest file if it is larger than "max_size".  On
2066       this and other errors, "NULL" is returned.
2067
2068       File lib/launch-direct.c
2069
2070       Implementation of the "direct" backend.
2071
2072       For more details see "BACKENDS" in guestfs(3).
2073
2074       Function "lib/launch-direct.c:add_drive_standard_params"
2075
2076        static int
2077        add_drive_standard_params (guestfs_h *g, struct backend_direct_data *data,
2078                                   struct qemuopts *qopts,
2079                                   size_t i, struct drive *drv)
2080
2081       Add the standard elements of the "-drive" parameter.
2082
2083       Function "lib/launch-direct.c:add_device_blocksize_params"
2084
2085        static int
2086        add_device_blocksize_params (guestfs_h *g, struct qemuopts *qopts,
2087                                   struct drive *drv)
2088
2089       Add the physical_block_size and logical_block_size elements of the
2090       "-device" parameter.
2091
2092       File lib/launch-libvirt.c
2093
2094       Function "lib/launch-libvirt.c:get_source_format_or_autodetect"
2095
2096        static char *
2097        get_source_format_or_autodetect (guestfs_h *g, struct drive *drv)
2098
2099       Return "drv->src.format", but if it is "NULL", autodetect the format.
2100
2101       libvirt has disabled the feature of detecting the disk format, unless
2102       the administrator sets "allow_disk_format_probing=1" in
2103       /etc/libvirt/qemu.conf.  There is no way to detect if this option is
2104       set, so we have to do format detection here using "qemu-img" and pass
2105       that to libvirt.
2106
2107       This can still be a security issue, so in most cases it is recommended
2108       the users pass the format to libguestfs which will faithfully pass that
2109       straight through to libvirt without doing autodetection.
2110
2111       Caller must free the returned string.  On error this function sets the
2112       error in the handle and returns "NULL".
2113
2114       Function "lib/launch-libvirt.c:make_qcow2_overlay"
2115
2116        static char *
2117        make_qcow2_overlay (guestfs_h *g, const char *backing_drive,
2118                            const char *format)
2119
2120       Create a qcow2 format overlay, with the given "backing_drive" (file).
2121       The "format" parameter is the backing file format.  The "format"
2122       parameter can be NULL, in this case the backing format will be
2123       determined automatically.  This is used to create the appliance
2124       overlay, and also for read-only drives.
2125
2126       File lib/launch.c
2127
2128       This file implements "guestfs_launch" in guestfs(3).
2129
2130       Most of the work is done by the backends (see "BACKEND" in guestfs(3)),
2131       which are implemented in lib/launch-direct.c, lib/launch-libvirt.c etc,
2132       so this file mostly passes calls through to the current backend.
2133
2134       Function "lib/launch.c:guestfs_int_launch_send_progress"
2135
2136        void
2137        guestfs_int_launch_send_progress (guestfs_h *g, int perdozen)
2138
2139       This function sends a launch progress message.
2140
2141       Launching the appliance generates approximate progress messages.
2142       Currently these are defined as follows:
2143
2144          0 / 12: launch clock starts
2145          3 / 12: appliance created
2146          6 / 12: detected that guest kernel started
2147          9 / 12: detected that /init script is running
2148         12 / 12: launch completed successfully
2149
2150       Notes:
2151
2152       1.  This is not a documented ABI and the behaviour may be changed or
2153           removed in future.
2154
2155       2.  Messages are only sent if more than 5 seconds has elapsed since the
2156           launch clock started.
2157
2158       3.  There is a hack in lib/proto.c to make this work.
2159
2160       Function "lib/launch.c:guestfs_int_timeval_diff"
2161
2162        int64_t
2163        guestfs_int_timeval_diff (const struct timeval *x, const struct timeval *y)
2164
2165       Compute "y - x" and return the result in milliseconds.
2166
2167       Approximately the same as this code:
2168       http://www.mpp.mpg.de/~huber/util/timevaldiff.c
2169
2170       Function "lib/launch.c:guestfs_int_unblock_sigterm"
2171
2172        void
2173        guestfs_int_unblock_sigterm (void)
2174
2175       Unblock the "SIGTERM" signal.  Call this after fork(2) so that the
2176       parent process can send "SIGTERM" to the child process in case
2177       "SIGTERM" is blocked.  See https://bugzilla.redhat.com/1460338.
2178
2179       Function "lib/launch.c:guestfs_impl_max_disks"
2180
2181        int
2182        guestfs_impl_max_disks (guestfs_h *g)
2183
2184       Returns the maximum number of disks allowed to be added to the backend
2185       (backend dependent).
2186
2187       Function "lib/launch.c:guestfs_impl_wait_ready"
2188
2189        int
2190        guestfs_impl_wait_ready (guestfs_h *g)
2191
2192       Implementation of "guestfs_wait_ready" in guestfs(3).  You had to call
2193       this function after launch in versions ≤ 1.0.70, but it is now an
2194       (almost) no-op.
2195
2196       Function "lib/launch.c:guestfs_int_create_socketname"
2197
2198        int
2199        guestfs_int_create_socketname (guestfs_h *g, const char *filename,
2200                                       char (*sockpath)[UNIX_PATH_MAX])
2201
2202       Create the path for a socket with the selected filename in the tmpdir.
2203
2204       Function "lib/launch.c:guestfs_int_register_backend"
2205
2206        void
2207        guestfs_int_register_backend (const char *name, const struct backend_ops *ops)
2208
2209       When the library is loaded, each backend calls this function to
2210       register itself in a global list.
2211
2212       Function "lib/launch.c:guestfs_int_set_backend"
2213
2214        int
2215        guestfs_int_set_backend (guestfs_h *g, const char *method)
2216
2217       Implementation of "guestfs_set_backend" in guestfs(3).
2218
2219       •   Callers must ensure this is only called in the config state.
2220
2221       •   This shouldn't call "error" since it may be called early in handle
2222           initialization.  It can return an error code however.
2223
2224       File lib/private-data.c
2225
2226       Implement a private data area where libguestfs C API users can attach
2227       arbitrary pieces of data to a "guestfs_h" handle.
2228
2229       For more information see "PRIVATE DATA AREA" in guestfs(3).
2230
2231       Language bindings do not generally expose this, largely because in non-
2232       C languages it is easy to associate data with handles in other ways
2233       (using hash tables or maps).
2234
2235       Structure "lib/private-data.c:pda_entry"
2236
2237        struct pda_entry {
2238          char *key;                    /* key */
2239          void *data;                   /* opaque user data pointer */
2240        };
2241
2242       The private data area is internally stored as a gnulib hash table
2243       containing "pda_entry" structures.
2244
2245       Note the private data area is allocated lazily, since the vast majority
2246       of callers will never use it.  This means "g->pda" is likely to be
2247       "NULL".
2248
2249       File lib/proto.c
2250
2251       This is the code used to send and receive RPC messages and (for certain
2252       types of message) to perform file transfers.  This code is driven from
2253       the generated actions (lib/actions-*.c).  There are five different
2254       cases to consider:
2255
2256       1.  A non-daemon function (eg. "guestfs_set_verbose" in guestfs(3)).
2257           There is no RPC involved at all, it's all handled inside the
2258           library.
2259
2260       2.  A simple RPC (eg. "guestfs_mount" in guestfs(3)).  We write the
2261           request, then read the reply.  The sequence of calls is:
2262
2263             guestfs_int_send
2264             guestfs_int_recv
2265
2266       3.  An RPC with "FileIn" parameters (eg. "guestfs_upload" in
2267           guestfs(3)).  We write the request, then write the file(s), then
2268           read the reply.  The sequence of calls is:
2269
2270             guestfs_int_send
2271             guestfs_int_send_file  (possibly multiple times)
2272             guestfs_int_recv
2273
2274       4.  An RPC with "FileOut" parameters (eg. "guestfs_download" in
2275           guestfs(3)).  We write the request, then read the reply, then read
2276           the file(s).  The sequence of calls is:
2277
2278             guestfs_int_send
2279             guestfs_int_recv
2280             guestfs_int_recv_file  (possibly multiple times)
2281
2282       5.  Both "FileIn" and "FileOut" parameters.  There are no calls like
2283           this in the current API, but they would be implemented as a
2284           combination of cases 3 and 4.
2285
2286       All read/write/etc operations are performed using the current
2287       connection module ("g->conn").  During operations the connection module
2288       transparently handles log messages that appear on the console.
2289
2290       Function "lib/proto.c:child_cleanup"
2291
2292        static void
2293        child_cleanup (guestfs_h *g)
2294
2295       This is called if we detect EOF, ie. qemu died.
2296
2297       Function "lib/proto.c:guestfs_int_progress_message_callback"
2298
2299        void
2300        guestfs_int_progress_message_callback (guestfs_h *g,
2301                                              const guestfs_progress *message)
2302
2303       Convenient wrapper to generate a progress message callback.
2304
2305       Function "lib/proto.c:guestfs_int_log_message_callback"
2306
2307        void
2308        guestfs_int_log_message_callback (guestfs_h *g, const char *buf, size_t len)
2309
2310       Connection modules call us back here when they get a log message.
2311
2312       Function "lib/proto.c:check_daemon_socket"
2313
2314        static ssize_t
2315        check_daemon_socket (guestfs_h *g)
2316
2317       Before writing to the daemon socket, check the read side of the daemon
2318       socket for any of these conditions:
2319
2320       error
2321           return -1
2322
2323       daemon cancellation message
2324           return -2
2325
2326       progress message
2327           handle it here
2328
2329       end of input or appliance exited unexpectedly
2330           return 0
2331
2332       anything else
2333           return 1
2334
2335       Function "lib/proto.c:guestfs_int_send_file"
2336
2337        int
2338        guestfs_int_send_file (guestfs_h *g, const char *filename)
2339
2340       Send a file.
2341
2342       Returns 0 on success, "-1" for error, "-2" if the daemon cancelled (we
2343       must read the error message).
2344
2345       Function "lib/proto.c:send_file_data"
2346
2347        static int
2348        send_file_data (guestfs_h *g, const char *buf, size_t len)
2349
2350       Send a chunk of file data.
2351
2352       Function "lib/proto.c:send_file_cancellation"
2353
2354        static int
2355        send_file_cancellation (guestfs_h *g)
2356
2357       Send a cancellation message.
2358
2359       Function "lib/proto.c:send_file_complete"
2360
2361        static int
2362        send_file_complete (guestfs_h *g)
2363
2364       Send a file complete chunk.
2365
2366       Function "lib/proto.c:recv_from_daemon"
2367
2368        static int
2369        recv_from_daemon (guestfs_h *g, uint32_t *size_rtn, void **buf_rtn)
2370
2371       This function reads a single message, file chunk, launch flag or
2372       cancellation flag from the daemon.  If something was read, it returns
2373       0, otherwise "-1".
2374
2375       Both "size_rtn" and "buf_rtn" must be passed by the caller as non-NULL.
2376
2377       *size_rtn returns the size of the returned message or it may be
2378       "GUESTFS_LAUNCH_FLAG" or "GUESTFS_CANCEL_FLAG".
2379
2380       *buf_rtn is returned containing the message (if any) or will be set to
2381       "NULL".  *buf_rtn must be freed by the caller.
2382
2383       This checks for EOF (appliance died) and passes that up through the
2384       child_cleanup function above.
2385
2386       Log message, progress messages are handled transparently here.
2387
2388       Function "lib/proto.c:guestfs_int_recv"
2389
2390        int
2391        guestfs_int_recv (guestfs_h *g, const char *fn,
2392                         guestfs_message_header *hdr,
2393                         guestfs_message_error *err,
2394                         xdrproc_t xdrp, char *ret)
2395
2396       Receive a reply.
2397
2398       Function "lib/proto.c:guestfs_int_recv_discard"
2399
2400        int
2401        guestfs_int_recv_discard (guestfs_h *g, const char *fn)
2402
2403       Same as "guestfs_int_recv", but it discards the reply message.
2404
2405       Notes (XXX):
2406
2407       •   This returns an int, but all current callers ignore it.
2408
2409       •   The error string may end up being set twice on error paths.
2410
2411       Function "lib/proto.c:guestfs_int_recv_file"
2412
2413        int
2414        guestfs_int_recv_file (guestfs_h *g, const char *filename)
2415
2416       Returns "-1" = error, 0 = EOF, ">0" = more data
2417
2418       Function "lib/proto.c:receive_file_data"
2419
2420        static ssize_t
2421        receive_file_data (guestfs_h *g, void **buf_r)
2422
2423       Receive a chunk of file data.
2424
2425       Returns "-1" = error, 0 = EOF, ">0" = more data
2426
2427       File lib/qemu.c
2428
2429       Functions to handle qemu versions and features.
2430
2431       Function "lib/qemu.c:guestfs_int_test_qemu"
2432
2433        struct qemu_data *
2434        guestfs_int_test_qemu (guestfs_h *g)
2435
2436       Test that the qemu binary (or wrapper) runs, and do "qemu -help" and
2437       other commands so we can find out the version of qemu and what options
2438       this qemu supports.
2439
2440       This caches the results in the cachedir so that as long as the qemu
2441       binary does not change, calling this is effectively free.
2442
2443       Function "lib/qemu.c:cache_filename"
2444
2445        static char *
2446        cache_filename (guestfs_h *g, const char *cachedir,
2447                        const struct stat *statbuf, const char *suffix)
2448
2449       Generate the filenames, for the stat file and the other cache files.
2450
2451       By including the size and mtime in the filename we also ensure that the
2452       same user can use multiple versions of qemu without conflicts.
2453
2454       Function "lib/qemu.c:parse_qemu_version"
2455
2456        static void
2457        parse_qemu_version (guestfs_h *g, const char *qemu_help,
2458                            struct version *qemu_version)
2459
2460       Parse the first line of "qemu_help" into the major and minor version of
2461       qemu, but don't fail if parsing is not possible.
2462
2463       Function "lib/qemu.c:parse_json"
2464
2465        static void
2466        parse_json (guestfs_h *g, const char *json, json_t **treep)
2467
2468       Parse the json output from QMP.  But don't fail if parsing is not
2469       possible.
2470
2471       Function "lib/qemu.c:parse_has_kvm"
2472
2473        static void
2474        parse_has_kvm (guestfs_h *g, const char *json, bool *ret)
2475
2476       Parse the json output from QMP query-kvm to find out if KVM is enabled
2477       on this machine.  Don't fail if parsing is not possible, assume KVM is
2478       available.
2479
2480       The JSON output looks like: {"return": {"enabled": true, "present":
2481       true}}
2482
2483       Function "lib/qemu.c:generic_read_cache"
2484
2485        static int
2486        generic_read_cache (guestfs_h *g, const char *filename, char **strp)
2487
2488       Generic functions for reading and writing the cache files, used where
2489       we are just reading and writing plain text strings.
2490
2491       Function "lib/qemu.c:generic_qmp_test"
2492
2493        static int
2494        generic_qmp_test (guestfs_h *g, struct qemu_data *data,
2495                          const char *qmp_command,
2496                          char **outp)
2497
2498       Run a generic QMP test on the QEMU binary.
2499
2500       Function "lib/qemu.c:guestfs_int_qemu_version"
2501
2502        struct version
2503        guestfs_int_qemu_version (guestfs_h *g, struct qemu_data *data)
2504
2505       Return the parsed version of qemu.
2506
2507       Function "lib/qemu.c:guestfs_int_qemu_supports"
2508
2509        int
2510        guestfs_int_qemu_supports (guestfs_h *g, const struct qemu_data *data,
2511                                   const char *option)
2512
2513       Test if option is supported by qemu command line (just by grepping the
2514       help text).
2515
2516       Function "lib/qemu.c:guestfs_int_qemu_supports_device"
2517
2518        int
2519        guestfs_int_qemu_supports_device (guestfs_h *g,
2520                                          const struct qemu_data *data,
2521                                          const char *device_name)
2522
2523       Test if device is supported by qemu (currently just greps the "qemu
2524       -device ?" output).
2525
2526       Function "lib/qemu.c:guestfs_int_qemu_mandatory_locking"
2527
2528        int
2529        guestfs_int_qemu_mandatory_locking (guestfs_h *g,
2530                                            const struct qemu_data *data)
2531
2532       Test if the qemu binary uses mandatory file locking, added in QEMU >=
2533       2.10 (but sometimes disabled).
2534
2535       Function "lib/qemu.c:guestfs_int_qemu_escape_param"
2536
2537        char *
2538        guestfs_int_qemu_escape_param (guestfs_h *g, const char *param)
2539
2540       Escape a qemu parameter.
2541
2542       Every "," becomes ",,".  The caller must free the returned string.
2543
2544       XXX This functionality is now only used when constructing a qemu-img
2545       command in lib/create.c.  We should extend the qemuopts library to
2546       cover this use case.
2547
2548       Function "lib/qemu.c:guestfs_int_drive_source_qemu_param"
2549
2550        char *
2551        guestfs_int_drive_source_qemu_param (guestfs_h *g,
2552                                             const struct drive_source *src)
2553
2554       Useful function to format a drive + protocol for qemu.
2555
2556       Note that the qemu parameter is the bit after "file=".  It is not
2557       escaped here, but would usually be escaped if passed to qemu as part of
2558       a full -drive parameter (but not for qemu-img(1)).
2559
2560       Function "lib/qemu.c:guestfs_int_discard_possible"
2561
2562        bool
2563        guestfs_int_discard_possible (guestfs_h *g, struct drive *drv,
2564                                     const struct version *qemu_version)
2565
2566       Test if discard is both supported by qemu AND possible with the
2567       underlying file or device.  This returns 1 if discard is possible.  It
2568       returns 0 if not possible and sets the error to the reason why.
2569
2570       This function is called when the user set "discard == "enable"".
2571
2572       Function "lib/qemu.c:guestfs_int_free_qemu_data"
2573
2574        void
2575        guestfs_int_free_qemu_data (struct qemu_data *data)
2576
2577       Free the "struct qemu_data".
2578
2579       File lib/rescue.c
2580
2581       Support for virt-rescue(1).
2582
2583       File lib/stringsbuf.c
2584
2585       An expandable NULL-terminated vector of strings (like "argv").
2586
2587       Use the "DECLARE_STRINGSBUF" macro to declare the stringsbuf.
2588
2589       Note: Don't confuse this with stringsbuf in the daemon which is a
2590       different type with different methods.
2591
2592       Function "lib/stringsbuf.c:guestfs_int_add_string_nodup"
2593
2594        void
2595        guestfs_int_add_string_nodup (guestfs_h *g, struct stringsbuf *sb, char *str)
2596
2597       Add a string to the end of the list.
2598
2599       This doesn't call strdup(3) on the string, so the string itself is
2600       stored inside the vector.
2601
2602       Function "lib/stringsbuf.c:guestfs_int_add_string"
2603
2604        void
2605        guestfs_int_add_string (guestfs_h *g, struct stringsbuf *sb, const char *str)
2606
2607       Add a string to the end of the list.
2608
2609       This makes a copy of the string.
2610
2611       Function "lib/stringsbuf.c:guestfs_int_add_sprintf"
2612
2613        void
2614        guestfs_int_add_sprintf (guestfs_h *g, struct stringsbuf *sb,
2615                                const char *fs, ...)
2616
2617       Add a string to the end of the list.
2618
2619       Uses an sprintf-like format string when creating the string.
2620
2621       Function "lib/stringsbuf.c:guestfs_int_end_stringsbuf"
2622
2623        void
2624        guestfs_int_end_stringsbuf (guestfs_h *g, struct stringsbuf *sb)
2625
2626       Finish the string buffer.
2627
2628       This adds the terminating NULL to the end of the vector.
2629
2630       Function "lib/stringsbuf.c:guestfs_int_free_stringsbuf"
2631
2632        void
2633        guestfs_int_free_stringsbuf (struct stringsbuf *sb)
2634
2635       Free the string buffer and the strings.
2636
2637       File lib/tmpdirs.c
2638
2639       Handle temporary directories.
2640
2641       Function "lib/tmpdirs.c:set_abs_path"
2642
2643        static int
2644        set_abs_path (guestfs_h *g, const char *ctxstr,
2645                      const char *tmpdir, char **tmpdir_ret)
2646
2647       We need to make all tmpdir paths absolute because lots of places in the
2648       code assume this.  Do it at the time we set the path or read the
2649       environment variable (https://bugzilla.redhat.com/882417).
2650
2651       The "ctxstr" parameter is a string displayed in error messages giving
2652       the context of the operation (eg. name of environment variable being
2653       used, or API function being called).
2654
2655       Function "lib/tmpdirs.c:guestfs_impl_get_tmpdir"
2656
2657        char *
2658        guestfs_impl_get_tmpdir (guestfs_h *g)
2659
2660       Implements the "guestfs_get_tmpdir" API.
2661
2662       Note this actually calculates the tmpdir, so it never returns "NULL".
2663
2664       Function "lib/tmpdirs.c:guestfs_impl_get_cachedir"
2665
2666        char *
2667        guestfs_impl_get_cachedir (guestfs_h *g)
2668
2669       Implements the "guestfs_get_cachedir" API.
2670
2671       Note this actually calculates the cachedir, so it never returns "NULL".
2672
2673       Function "lib/tmpdirs.c:guestfs_impl_get_sockdir"
2674
2675        char *
2676        guestfs_impl_get_sockdir (guestfs_h *g)
2677
2678       Implements the "guestfs_get_sockdir" API.
2679
2680       Note this actually calculates the sockdir, so it never returns "NULL".
2681
2682       Function "lib/tmpdirs.c:guestfs_int_lazy_make_tmpdir"
2683
2684        int
2685        guestfs_int_lazy_make_tmpdir (guestfs_h *g)
2686
2687       The "g->tmpdir" (per-handle temporary directory) is not created when
2688       the handle is created.  Instead we create it lazily before the first
2689       time it is used, or during launch.
2690
2691       Function "lib/tmpdirs.c:guestfs_int_make_temp_path"
2692
2693        char *
2694        guestfs_int_make_temp_path (guestfs_h *g,
2695                                    const char *name, const char *extension)
2696
2697       Generate unique temporary paths for temporary files.
2698
2699       Returns a unique path or NULL on error.
2700
2701       Function "lib/tmpdirs.c:guestfs_int_lazy_make_supermin_appliance_dir"
2702
2703        char *
2704        guestfs_int_lazy_make_supermin_appliance_dir (guestfs_h *g)
2705
2706       Create the supermin appliance directory under cachedir, if it does not
2707       exist.
2708
2709       Sanity-check that the permissions on the cachedir are safe, in case it
2710       has been pre-created maliciously or tampered with.
2711
2712       Returns the directory name which the caller must free.
2713
2714       Function "lib/tmpdirs.c:guestfs_int_recursive_remove_dir"
2715
2716        void
2717        guestfs_int_recursive_remove_dir (guestfs_h *g, const char *dir)
2718
2719       Recursively remove a temporary directory.  If removal fails, just
2720       return (it's a temporary directory so it'll eventually be cleaned up by
2721       a temp cleaner).
2722
2723       This is implemented using "rm -rf" because that's simpler and safer.
2724
2725       File lib/umask.c
2726
2727       Return current umask in a thread-safe way.
2728
2729       glibc documents, but does not actually implement, a "getumask(3)" call.
2730
2731       We use "Umask" from /proc/self/status for Linux ≥ 4.7.  For older Linux
2732       and other Unix, this file implements an expensive but thread-safe way
2733       to get the current process's umask.
2734
2735       Thanks to: Josh Stone, Jiri Jaburek, Eric Blake.
2736
2737       Function "lib/umask.c:guestfs_int_getumask"
2738
2739        int
2740        guestfs_int_getumask (guestfs_h *g)
2741
2742       Returns the current process's umask.  On failure, returns "-1" and sets
2743       the error in the guestfs handle.
2744
2745       Function "lib/umask.c:get_umask_from_proc"
2746
2747        static int
2748        get_umask_from_proc (guestfs_h *g)
2749
2750       For Linux ≥ 4.7 get the umask from /proc/self/status.
2751
2752       On failure this returns "-1".  However if we could not open the /proc
2753       file or find the "Umask" entry in it, return "-2" which causes the
2754       fallback path to run.
2755
2756       Function "lib/umask.c:get_umask_from_fork"
2757
2758        static int
2759        get_umask_from_fork (guestfs_h *g)
2760
2761       Fallback method of getting the umask using fork.
2762
2763       File lib/unit-tests.c
2764
2765       Unit tests of internal functions.
2766
2767       These tests may use a libguestfs handle, but must not launch the
2768       handle.  Also, avoid long-running tests.
2769
2770       Function "lib/unit-tests.c:test_split"
2771
2772        static void
2773        test_split (void)
2774
2775       Test "guestfs_int_split_string".
2776
2777       Function "lib/unit-tests.c:test_concat"
2778
2779        static void
2780        test_concat (void)
2781
2782       Test "guestfs_int_concat_strings".
2783
2784       Function "lib/unit-tests.c:test_join"
2785
2786        static void
2787        test_join (void)
2788
2789       Test "guestfs_int_join_strings".
2790
2791       Function "lib/unit-tests.c:test_validate_guid"
2792
2793        static void
2794        test_validate_guid (void)
2795
2796       Test "guestfs_int_validate_guid".
2797
2798       Function "lib/unit-tests.c:test_drive_name"
2799
2800        static void
2801        test_drive_name (void)
2802
2803       Test "guestfs_int_drive_name".
2804
2805       Function "lib/unit-tests.c:test_drive_index"
2806
2807        static void
2808        test_drive_index (void)
2809
2810       Test "guestfs_int_drive_index".
2811
2812       Function "lib/unit-tests.c:test_getumask"
2813
2814        static void
2815        test_getumask (void)
2816
2817       Test "guestfs_int_getumask".
2818
2819       Function "lib/unit-tests.c:test_command"
2820
2821        static void
2822        test_command (void)
2823
2824       Test "guestfs_int_new_command" etc.
2825
2826       XXX These tests could be made much more thorough.  So far we simply
2827       test that it's not obviously broken.
2828
2829       Function "lib/unit-tests.c:test_qemu_escape_param"
2830
2831        static void
2832        test_qemu_escape_param (void)
2833
2834       Test "guestfs_int_qemu_escape_param"
2835
2836       XXX I wanted to make this test run qemu, passing some parameters which
2837       need to be escaped, but I cannot think of a way to do that without
2838       launching a VM.
2839
2840       Function "lib/unit-tests.c:test_timeval_diff"
2841
2842        static void
2843        test_timeval_diff (void)
2844
2845       Test "guestfs_int_timeval_diff".
2846
2847       File lib/version.c
2848
2849       This file provides simple version number management.
2850
2851       Function "lib/version.c:guestfs_int_version_from_x_y"
2852
2853        int
2854        guestfs_int_version_from_x_y (guestfs_h *g, struct version *v, const char *str)
2855
2856       Parses a version from a string, looking for a "X.Y" pattern.
2857
2858       Returns "-1" on failure (like failed integer parsing), 0 on missing
2859       match, and 1 on match and successful parsing.  "v" is changed only on
2860       successful match.
2861
2862       Function "lib/version.c:guestfs_int_version_from_x_y_re"
2863
2864        int
2865        guestfs_int_version_from_x_y_re (guestfs_h *g, struct version *v,
2866                                         const char *str, const pcre2_code *re)
2867
2868       Parses a version from a string, using the specified "re" as regular
2869       expression which must provide (at least) two matches.
2870
2871       Returns "-1" on failure (like failed integer parsing), 0 on missing
2872       match, and 1 on match and successful parsing.  "v" is changed only on
2873       successful match.
2874
2875       Function "lib/version.c:guestfs_int_version_from_x_y_or_x"
2876
2877        int
2878        guestfs_int_version_from_x_y_or_x (guestfs_h *g, struct version *v,
2879                                           const char *str)
2880
2881       Parses a version from a string, either looking for a "X.Y" pattern or
2882       considering it as whole integer.
2883
2884       Returns "-1" on failure (like failed integer parsing), 0 on missing
2885       match, and 1 on match and successful parsing.  "v" is changed only on
2886       successful match.
2887
2888       Function "lib/version.c:guestfs_int_parse_unsigned_int"
2889
2890        int
2891        guestfs_int_parse_unsigned_int (guestfs_h *g, const char *str)
2892
2893       Parse small, unsigned ints, as used in version numbers.
2894
2895       This will fail with an error if trailing characters are found after the
2896       integer.
2897
2898       Returns ≥ 0 on success, or "-1" on failure.
2899
2900       File lib/wait.c
2901
2902       Function "lib/wait.c:guestfs_int_waitpid"
2903
2904        int
2905        guestfs_int_waitpid (guestfs_h *g, pid_t pid, int *status, const char *errmsg)
2906
2907       A safe version of waitpid(3) which retries if "EINTR" is returned.
2908
2909       Note: this only needs to be used in the library, or in programs that
2910       install a non-restartable "SIGCHLD" handler (which is not the case for
2911       any current libguestfs virt tools).
2912
2913       If the main program installs a SIGCHLD handler and sets it to be non-
2914       restartable, then what can happen is the library is waiting in a wait
2915       syscall, the child exits, "SIGCHLD" is sent to the process, and the
2916       wait syscall returns "EINTR".  Since the library cannot control the
2917       signal handler, we have to instead restart the wait syscall, which is
2918       the purpose of this wrapper.
2919
2920       Function "lib/wait.c:guestfs_int_waitpid_noerror"
2921
2922        void
2923        guestfs_int_waitpid_noerror (pid_t pid)
2924
2925       Like "guestfs_int_waitpid", but ignore errors.
2926
2927       Function "lib/wait.c:guestfs_int_wait4"
2928
2929        int
2930        guestfs_int_wait4 (guestfs_h *g, pid_t pid, int *status,
2931                           struct rusage *rusage, const char *errmsg)
2932
2933       A safe version of wait4(2) which retries if "EINTR" is returned.
2934
2935       File lib/whole-file.c
2936
2937       Function "lib/whole-file.c:guestfs_int_read_whole_file"
2938
2939        int
2940        guestfs_int_read_whole_file (guestfs_h *g, const char *filename,
2941                                     char **data_r, size_t *size_r)
2942
2943       Read the whole file "filename" into a memory buffer.
2944
2945       The memory buffer is initialized and returned in "data_r".  The size of
2946       the file in bytes is returned in "size_r".  The return buffer must be
2947       freed by the caller.
2948
2949       On error this sets the error in the handle and returns "-1".
2950
2951       For the convenience of callers, the returned buffer is NUL-terminated
2952       (the NUL is not included in the size).
2953
2954       The file must be a regular, local, trusted file.  In particular, do not
2955       use this function to read files that might be under control of an
2956       untrusted user since that will lead to a denial-of-service attack.
2957
2958   Subdirectory common/edit
2959       File common/edit/file-edit.c
2960
2961       This file implements common file editing in a range of utilities
2962       including guestfish(1), virt-edit(1), virt-customize(1) and
2963       virt-builder(1).
2964
2965       It contains the code for both interactive-(editor-)based editing and
2966       non-interactive editing using Perl snippets.
2967
2968       Function "common/edit/file-edit.c:edit_file_editor"
2969
2970        int
2971        edit_file_editor (guestfs_h *g, const char *filename, const char *editor,
2972                          const char *backup_extension, int verbose)
2973
2974       Edit "filename" using the specified "editor" application.
2975
2976       If "backup_extension" is not null, then a copy of "filename" is saved
2977       with "backup_extension" appended to its file name.
2978
2979       If "editor" is null, then the $EDITOR environment variable will be
2980       queried for the editor application, leaving "vi" as fallback if not
2981       set.
2982
2983       Returns "-1" for failure, 0 on success, 1 if the editor did not change
2984       the file (e.g. the user closed the editor without saving).
2985
2986       Function "common/edit/file-edit.c:edit_file_perl"
2987
2988        int
2989        edit_file_perl (guestfs_h *g, const char *filename, const char *perl_expr,
2990                        const char *backup_extension, int verbose)
2991
2992       Edit "filename" running the specified "perl_expr" using Perl.
2993
2994       If "backup_extension" is not null, then a copy of "filename" is saved
2995       with "backup_extension" appended to its file name.
2996
2997       Returns "-1" for failure, 0 on success.
2998
2999   Subdirectory common/options
3000       File common/options/config.c
3001
3002       This file parses the guestfish configuration file, usually
3003       ~/.libguestfs-tools.rc or /etc/libguestfs-tools.conf.
3004
3005       Note that "parse_config" is called very early, before command line
3006       parsing, before the "verbose" flag has been set, even before the global
3007       handle "g" is opened.
3008
3009       File common/options/decrypt.c
3010
3011       This file implements the decryption of disk images, usually done before
3012       mounting their partitions.
3013
3014       Function "common/options/decrypt.c:make_mapname"
3015
3016        static void
3017        make_mapname (const char *device, char *mapname, size_t len)
3018
3019       Make a LUKS map name from the partition name, eg. "/dev/vda2" =>
3020       "cryptvda2"
3021
3022       Function "common/options/decrypt.c:inspect_do_decrypt"
3023
3024        void
3025        inspect_do_decrypt (guestfs_h *g, struct key_store *ks)
3026
3027       Simple implementation of decryption: look for any encrypted partitions
3028       and decrypt them, then rescan for VGs.
3029
3030       File common/options/display-options.c
3031
3032       This file contains common code used to implement --short-options and
3033       --long-options in C virt tools.  (The equivalent for OCaml virt tools
3034       is implemented by common/mltools/getopt.ml).
3035
3036       These "hidden" options are used to implement bash tab completion.
3037
3038       Function "common/options/display-options.c:display_short_options"
3039
3040        void
3041        display_short_options (const char *format)
3042
3043       Implements the internal "tool --short-options" flag, which just lists
3044       out the short options available.  Used by bash completion.
3045
3046       Function "common/options/display-options.c:display_long_options"
3047
3048        void
3049        display_long_options (const struct option *long_options)
3050
3051       Implements the internal "tool --long-options" flag, which just lists
3052       out the long options available.  Used by bash completion.
3053
3054       File common/options/domain.c
3055
3056       Implements the guestfish (and other tools) -d option.
3057
3058       Function "common/options/domain.c:add_libvirt_drives"
3059
3060        int
3061        add_libvirt_drives (guestfs_h *g, const char *guest)
3062
3063       This function is called when a user invokes "guestfish -d guest".
3064
3065       Returns the number of drives added ("> 0"), or "-1" for failure.
3066
3067       File common/options/inspect.c
3068
3069       This file implements inspecting the guest and mounting the filesystems
3070       found in the right places.  It is used by the guestfish(1) -i option
3071       and some utilities such as virt-cat(1).
3072
3073       Function "common/options/inspect.c:inspect_mount_handle"
3074
3075        void
3076        inspect_mount_handle (guestfs_h *g, struct key_store *ks)
3077
3078       This function implements the -i option.
3079
3080       Function "common/options/inspect.c:print_inspect_prompt"
3081
3082        void
3083        print_inspect_prompt (void)
3084
3085       This function is called only if "inspect_mount_root" was called, and
3086       only after we've printed the prompt in interactive mode.
3087
3088       File common/options/keys.c
3089
3090       Function "common/options/keys.c:read_key"
3091
3092        char *
3093        read_key (const char *param)
3094
3095       Read a passphrase ('Key') from /dev/tty with echo off.
3096
3097       The caller (fish/cmds.c) will call free on the string afterwards.
3098       Based on the code in cryptsetup file lib/utils.c.
3099
3100       File common/options/options.c
3101
3102       This file contains common options parsing code used by guestfish and
3103       many other tools which share a common options syntax.
3104
3105       For example, guestfish, virt-cat, virt-ls etc all support the -a
3106       option, and that is handled in all of those tools using a macro
3107       "OPTION_a" defined in fish/options.h.
3108
3109       There are a lot of common global variables used, "drvs" accumulates the
3110       list of drives, "verbose" for the -v flag, and many more.
3111
3112       Function "common/options/options.c:option_a"
3113
3114        void
3115        option_a (const char *arg, const char *format, int blocksize,
3116                  struct drv **drvsp)
3117
3118       Handle the guestfish -a option on the command line.
3119
3120       Function "common/options/options.c:option_d"
3121
3122        void
3123        option_d (const char *arg, struct drv **drvsp)
3124
3125       Handle the -d option when passed on the command line.
3126
3127       Function "common/options/options.c:display_mountpoints_on_failure"
3128
3129        static void
3130        display_mountpoints_on_failure (const char *mp_device,
3131                                        const char *user_supplied_options)
3132
3133       If the -m option fails on any command, display a useful error message
3134       listing the mountpoints.
3135
3136       File common/options/uri.c
3137
3138       This file implements URI parsing for the -a option, in many utilities
3139       including guestfish(1), virt-cat(1), virt-builder(1),
3140       virt-customize(1), etc.
3141
3142   Subdirectory common/parallel
3143       File common/parallel/domains.c
3144
3145       This file is used by "virt-df" and some of the other tools when they
3146       are implicitly asked to operate over all libvirt domains (VMs), for
3147       example when "virt-df" is called without specifying any particular disk
3148       image.
3149
3150       It hides the complexity of querying the list of domains from libvirt.
3151
3152       Function "common/parallel/domains.c:free_domains"
3153
3154        void
3155        free_domains (void)
3156
3157       Frees up everything allocated by "get_all_libvirt_domains".
3158
3159       Function "common/parallel/domains.c:get_all_libvirt_domains"
3160
3161        void
3162        get_all_libvirt_domains (const char *libvirt_uri)
3163
3164       Read all libguest guests into the global variables "domains" and
3165       "nr_domains".  The guests are ordered by name.  This exits on any
3166       error.
3167
3168       File common/parallel/estimate-max-threads.c
3169
3170       Function "common/parallel/estimate-max-threads.c:estimate_max_threads"
3171
3172        size_t
3173        estimate_max_threads (void)
3174
3175       This function uses the output of "free -m" to estimate how many
3176       libguestfs appliances could be safely started in parallel.  Note that
3177       it always returns ≥ 1.
3178
3179       Function "common/parallel/estimate-max-threads.c:read_line_from"
3180
3181        static char *
3182        read_line_from (const char *cmd)
3183
3184       Run external command and read the first line of output.
3185
3186       File common/parallel/parallel.c
3187
3188       This file is used by "virt-df" and some of the other tools when they
3189       need to run multiple parallel libguestfs instances to operate on a
3190       large number of libvirt domains efficiently.
3191
3192       It implements a multithreaded work queue.  In addition it reorders the
3193       output so the output still appears in the same order as the input (ie.
3194       still ordered alphabetically).
3195
3196       Function "common/parallel/parallel.c:start_threads"
3197
3198        int
3199        start_threads (size_t option_P, guestfs_h *options_handle, work_fn work)
3200
3201       Run the threads and work through the global list of libvirt domains.
3202
3203       "option_P" is whatever the user passed in the -P option, or 0 if the
3204       user didn't use the -P option (in which case the number of threads is
3205       chosen heuristically).
3206
3207       "options_handle" (which may be "NULL") is the global guestfs handle
3208       created by the options mini-library.
3209
3210       The work function ("work") should do the work (inspecting the domain,
3211       etc.)  on domain index "i".  However it must not print out any result
3212       directly.  Instead it prints anything it needs to the supplied "FILE
3213       *".  The work function should return 0 on success or "-1" on error.
3214
3215       The "start_threads" function returns 0 if all work items completed
3216       successfully, or "-1" if there was an error.
3217
3218   Subdirectory common/progress
3219       File common/progress/progress.c
3220
3221       This file implements the progress bar in guestfish(1), virt-resize(1)
3222       and virt-sparsify(1).
3223
3224       Function "common/progress/progress.c:progress_bar_init"
3225
3226        struct progress_bar *
3227        progress_bar_init (unsigned flags)
3228
3229       Initialize a progress bar struct.
3230
3231       It is intended that you can reuse the same struct for multiple commands
3232       (but only in a single thread).  Call "progress_bar_reset" before each
3233       new command.
3234
3235       Function "common/progress/progress.c:progress_bar_free"
3236
3237        void
3238        progress_bar_free (struct progress_bar *bar)
3239
3240       Free a progress bar struct.
3241
3242       Function "common/progress/progress.c:progress_bar_reset"
3243
3244        void
3245        progress_bar_reset (struct progress_bar *bar)
3246
3247       This function should be called just before you issue any command.
3248
3249       Function "common/progress/progress.c:estimate_remaining_time"
3250
3251        static double
3252        estimate_remaining_time (struct progress_bar *bar, double ratio)
3253
3254       Return remaining time estimate (in seconds) for current call.
3255
3256       This returns the running mean estimate of remaining time, but if the
3257       latest estimate of total time is greater than two s.d.'s from the
3258       running mean then we don't print anything because we're not confident
3259       that the estimate is meaningful.  (Returned value is <0.0 when nothing
3260       should be printed).
3261
3262       Function "common/progress/progress.c:progress_bar_set"
3263
3264        void
3265        progress_bar_set (struct progress_bar *bar,
3266                          uint64_t position, uint64_t total)
3267
3268       Set the position of the progress bar.
3269
3270       This should be called from a "GUESTFS_EVENT_PROGRESS" event callback.
3271
3272   Subdirectory common/qemuopts
3273       File common/qemuopts/qemuopts-tests.c
3274
3275       Unit tests of internal functions.
3276
3277       These tests may use a libguestfs handle, but must not launch the
3278       handle.  Also, avoid long-running tests.
3279
3280       File common/qemuopts/qemuopts.c
3281
3282       Mini-library for writing qemu command lines and qemu config files.
3283
3284       There are some shortcomings with the model used for qemu options which
3285       aren't clear until you try to convert options into a configuration
3286       file.  However if we attempted to model the options in more detail then
3287       this library would be both very difficult to use and incompatible with
3288       older versions of qemu.  Hopefully the current model is a decent
3289       compromise.
3290
3291       For reference here are the problems:
3292
3293       •   There's inconsistency in qemu between options and config file, eg.
3294           "-smp 4" becomes:
3295
3296            [smp-opts]
3297              cpus = "4"
3298
3299       •   Similar to the previous point, you can write either "-smp 4" or
3300           "-smp cpus=4" (although this won't work in very old qemu).  When
3301           generating a config file you need to know the implicit key name.
3302
3303       •   In "-opt key=value,..." the "key" is really a tree/array specifier.
3304           The way this works is complicated but hinted at here:
3305           http://git.qemu.org/?p=qemu.git;a=blob;f=util/keyval.c;h=93d5db6b590427e412dfb172f1c406d6dd8958c1;hb=HEAD
3306
3307       •   Some options are syntactic sugar.  eg. "-kernel foo" is sugar for
3308           "-machine kernel=foo".
3309
3310       Function "common/qemuopts/qemuopts.c:qemuopts_create"
3311
3312        struct qemuopts *
3313        qemuopts_create (void)
3314
3315       Create an empty list of qemu options.
3316
3317       The caller must eventually free the list by calling "qemuopts_free".
3318
3319       Returns "NULL" on error, setting "errno".
3320
3321       Function "common/qemuopts/qemuopts.c:qemuopts_free"
3322
3323        void
3324        qemuopts_free (struct qemuopts *qopts)
3325
3326       Free the list of qemu options.
3327
3328       Function "common/qemuopts/qemuopts.c:qemuopts_add_flag"
3329
3330        int
3331        qemuopts_add_flag (struct qemuopts *qopts, const char *flag)
3332
3333       Add a command line flag which has no argument. eg:
3334
3335        qemuopts_add_flag (qopts, "-no-user-config");
3336
3337       Returns 0 on success.  Returns "-1" on error, setting "errno".
3338
3339       Function "common/qemuopts/qemuopts.c:qemuopts_add_arg"
3340
3341        int
3342        qemuopts_add_arg (struct qemuopts *qopts, const char *flag, const char *value)
3343
3344       Add a command line flag which has a single argument. eg:
3345
3346        qemuopts_add_arg (qopts, "-m", "1024");
3347
3348       Don't use this if the argument is a comma-separated list, since quoting
3349       will not be done properly.  See "qemuopts_add_arg_list".
3350
3351       Returns 0 on success.  Returns "-1" on error, setting "errno".
3352
3353       Function "common/qemuopts/qemuopts.c:qemuopts_add_arg_format"
3354
3355        int
3356        qemuopts_add_arg_format (struct qemuopts *qopts, const char *flag,
3357                                 const char *fs, ...)
3358
3359       Add a command line flag which has a single formatted argument. eg:
3360
3361        qemuopts_add_arg_format (qopts, "-m", "%d", 1024);
3362
3363       Don't use this if the argument is a comma-separated list, since quoting
3364       will not be done properly.  See "qemuopts_add_arg_list".
3365
3366       Returns 0 on success.  Returns "-1" on error, setting "errno".
3367
3368       Function "common/qemuopts/qemuopts.c:qemuopts_add_arg_noquote"
3369
3370        int
3371        qemuopts_add_arg_noquote (struct qemuopts *qopts, const char *flag,
3372                                  const char *value)
3373
3374       This is like "qemuopts_add_arg" except that no quoting is done on the
3375       value.
3376
3377       For "qemuopts_to_script" and "qemuopts_to_channel", this means that
3378       neither shell quoting nor qemu comma quoting is done on the value.
3379
3380       For "qemuopts_to_argv" this means that qemu comma quoting is not done.
3381
3382       "qemuopts_to_config*" will fail.
3383
3384       You should use this with great care.
3385
3386       Function "common/qemuopts/qemuopts.c:qemuopts_start_arg_list"
3387
3388        int
3389        qemuopts_start_arg_list (struct qemuopts *qopts, const char *flag)
3390
3391       Start an argument that takes a comma-separated list of fields.
3392
3393       Typical usage is like this (with error handling omitted):
3394
3395        qemuopts_start_arg_list (qopts, "-drive");
3396        qemuopts_append_arg_list (qopts, "file=foo");
3397        qemuopts_append_arg_list_format (qopts, "if=%s", "ide");
3398        qemuopts_end_arg_list (qopts);
3399
3400       which would construct "-drive file=foo,if=ide"
3401
3402       See also "qemuopts_add_arg_list" for a way to do simple cases in one
3403       call.
3404
3405       Returns 0 on success.  Returns "-1" on error, setting "errno".
3406
3407       Function "common/qemuopts/qemuopts.c:qemuopts_add_arg_list"
3408
3409        int
3410        qemuopts_add_arg_list (struct qemuopts *qopts, const char *flag,
3411                               const char *elem0, ...)
3412
3413       Add a command line flag which has a list of arguments. eg:
3414
3415        qemuopts_add_arg_list (qopts, "-drive", "file=foo", "if=ide", NULL);
3416
3417       This is turned into a comma-separated list, like: "-drive
3418       file=foo,if=ide".  Note that this handles qemu quoting properly, so
3419       individual elements may contain commas and this will do the right
3420       thing.
3421
3422       Returns 0 on success.  Returns "-1" on error, setting "errno".
3423
3424       Function "common/qemuopts/qemuopts.c:qemuopts_set_binary"
3425
3426        int
3427        qemuopts_set_binary (struct qemuopts *qopts, const char *binary)
3428
3429       Set the qemu binary name.
3430
3431       Returns 0 on success.  Returns "-1" on error, setting "errno".
3432
3433       Function "common/qemuopts/qemuopts.c:qemuopts_set_binary_by_arch"
3434
3435        int
3436        qemuopts_set_binary_by_arch (struct qemuopts *qopts, const char *arch)
3437
3438       Set the qemu binary name to "qemu-system-[arch]".
3439
3440       As a special case if "arch" is "NULL", the binary is set to the KVM
3441       binary for the current host architecture:
3442
3443        qemuopts_set_binary_by_arch (qopts, NULL);
3444
3445       Returns 0 on success.  Returns "-1" on error, setting "errno".
3446
3447       Function "common/qemuopts/qemuopts.c:qemuopts_to_script"
3448
3449        int
3450        qemuopts_to_script (struct qemuopts *qopts, const char *filename)
3451
3452       Write the qemu options to a script.
3453
3454       "qemuopts_set_binary*" must be called first.
3455
3456       The script file will start with "#!/bin/sh" and will be chmod to mode
3457       0755.
3458
3459       Returns 0 on success.  Returns "-1" on error, setting "errno".
3460
3461       Function "common/qemuopts/qemuopts.c:shell_quote"
3462
3463        static void
3464        shell_quote (const char *str, FILE *fp)
3465
3466       Print "str" to "fp", shell-quoting it if necessary.
3467
3468       Function "common/qemuopts/qemuopts.c:shell_and_comma_quote"
3469
3470        static void
3471        shell_and_comma_quote (const char *str, FILE *fp)
3472
3473       Print "str" to "fp" doing both shell and qemu comma quoting.
3474
3475       Function "common/qemuopts/qemuopts.c:qemuopts_to_channel"
3476
3477        int
3478        qemuopts_to_channel (struct qemuopts *qopts, FILE *fp)
3479
3480       Write the qemu options to a "FILE *fp".
3481
3482       "qemuopts_set_binary*" must be called first.
3483
3484       Only the qemu command line is written.  The caller may need to add
3485       "#!/bin/sh" and may need to chmod the resulting file to 0755.
3486
3487       Returns 0 on success.  Returns "-1" on error, setting "errno".
3488
3489       Function "common/qemuopts/qemuopts.c:qemuopts_to_argv"
3490
3491        char **
3492        qemuopts_to_argv (struct qemuopts *qopts)
3493
3494       Return a NULL-terminated argument list, of the kind that can be passed
3495       directly to execv(3).
3496
3497       "qemuopts_set_binary*" must be called first.  It will be returned as
3498       "argv[0]" in the returned list.
3499
3500       The list of strings and the strings themselves must be freed by the
3501       caller.
3502
3503       Returns "NULL" on error, setting "errno".
3504
3505       Function "common/qemuopts/qemuopts.c:qemuopts_to_config_file"
3506
3507        int
3508        qemuopts_to_config_file (struct qemuopts *qopts, const char *filename)
3509
3510       Write the qemu options to a qemu config file, suitable for reading in
3511       using "qemu -readconfig filename".
3512
3513       Note that qemu config files have limitations on content and quoting, so
3514       not all qemuopts structs can be written (this function returns an error
3515       in these cases).  For more information see
3516       https://habkost.net/posts/2016/12/qemu-apis-qemuopts.html
3517       https://bugs.launchpad.net/qemu/+bug/1686364
3518
3519       Also, command line argument names and config file sections sometimes
3520       have different names.  For example the equivalent of "-m 1024" is:
3521
3522        [memory]
3523          size = "1024"
3524
3525       This code does not attempt to convert between the two forms.  You just
3526       need to know how to do that yourself.
3527
3528       Returns 0 on success.  Returns "-1" on error, setting "errno".
3529
3530       Function "common/qemuopts/qemuopts.c:qemuopts_to_config_channel"
3531
3532        int
3533        qemuopts_to_config_channel (struct qemuopts *qopts, FILE *fp)
3534
3535       Same as "qemuopts_to_config_file", but this writes to a "FILE *fp".
3536
3537   Subdirectory common/utils
3538       File common/utils/cleanups.c
3539
3540       Libguestfs uses "CLEANUP_*" macros to simplify temporary allocations.
3541       They are implemented using the "__attribute__((cleanup))" feature of
3542       gcc and clang.  Typical usage is:
3543
3544        fn ()
3545        {
3546          CLEANUP_FREE char *str = NULL;
3547          str = safe_asprintf (g, "foo");
3548          // str is freed automatically when the function returns
3549        }
3550
3551       There are a few catches to be aware of with the cleanup mechanism:
3552
3553       •   If a cleanup variable is not initialized, then you can end up
3554           calling free(3) with an undefined value, resulting in the program
3555           crashing.  For this reason, you should usually initialize every
3556           cleanup variable with something, eg. "NULL"
3557
3558       •   Don't mark variables holding return values as cleanup variables.
3559
3560       •   The "main()" function shouldn't use cleanup variables since it is
3561           normally exited by calling exit(3), and that doesn't call the
3562           cleanup handlers.
3563
3564       The functions in this file are used internally by the "CLEANUP_*"
3565       macros.  Don't call them directly.
3566
3567       File common/utils/gnulib-cleanups.c
3568
3569       Libguestfs uses "CLEANUP_*" macros to simplify temporary allocations.
3570       They are implemented using the "__attribute__((cleanup))" feature of
3571       gcc and clang.  Typical usage is:
3572
3573        fn ()
3574        {
3575          CLEANUP_FREE char *str = NULL;
3576          str = safe_asprintf (g, "foo");
3577          // str is freed automatically when the function returns
3578        }
3579
3580       There are a few catches to be aware of with the cleanup mechanism:
3581
3582       •   If a cleanup variable is not initialized, then you can end up
3583           calling free(3) with an undefined value, resulting in the program
3584           crashing.  For this reason, you should usually initialize every
3585           cleanup variable with something, eg. "NULL"
3586
3587       •   Don't mark variables holding return values as cleanup variables.
3588
3589       •   The "main()" function shouldn't use cleanup variables since it is
3590           normally exited by calling exit(3), and that doesn't call the
3591           cleanup handlers.
3592
3593       The functions in this file are used internally by the "CLEANUP_*"
3594       macros.  Don't call them directly.
3595
3596       File common/utils/guestfs-utils.h
3597
3598       This header file is included in all "frontend" parts of libguestfs,
3599       namely the library, non-C language bindings, virt tools and tests.
3600
3601       The daemon does not use this header.  If you need a place to put
3602       something shared with absolutely everything including the daemon, put
3603       it in lib/guestfs-internal-all.h
3604
3605       If a definition is only needed by a single component of libguestfs (eg.
3606       just the library, or just a single virt tool) then it should not be
3607       here!
3608
3609       File common/utils/libxml2-writer-macros.h
3610
3611       These macros make it easier to write XML.  To use them correctly you
3612       must be aware of these assumptions:
3613
3614       •   The "xmlTextWriterPtr" is called "xo".  It is used implicitly by
3615           all the macros.
3616
3617       •   On failure, a function called "xml_error" is called which you must
3618           define (usually as a macro).  You must use "CLEANUP_*" macros in
3619           your functions if you want correct cleanup of local variables along
3620           the error path.
3621
3622       •   All the "bad" casting is hidden inside the macros.
3623
3624       Definition "common/utils/libxml2-writer-macros.h:start_element"
3625
3626        #define start_element
3627
3628       To define an XML element use:
3629
3630        start_element ("name") {
3631          ...
3632        } end_element ();
3633
3634       which produces "<name>...</name>"
3635
3636       Definition "common/utils/libxml2-writer-macros.h:empty_element"
3637
3638        #define empty_element
3639
3640       To define an empty element:
3641
3642        empty_element ("name");
3643
3644       which produces "<name/>"
3645
3646       Definition "common/utils/libxml2-writer-macros.h:single_element"
3647
3648        #define single_element
3649
3650       To define a single element with no attributes containing some text:
3651
3652        single_element ("name", text);
3653
3654       which produces "<name>text</name>"
3655
3656       Definition "common/utils/libxml2-writer-macros.h:single_element_format"
3657
3658        #define single_element_format
3659
3660       To define a single element with no attributes containing some text
3661       using a format string:
3662
3663        single_element_format ("cores", "%d", nr_cores);
3664
3665       which produces "<cores>4</cores>"
3666
3667       Definition "common/utils/libxml2-writer-macros.h:attribute"
3668
3669        #define attribute
3670
3671       To define an XML element with attributes, use:
3672
3673        start_element ("name") {
3674          attribute ("foo", "bar");
3675          attribute_format ("count", "%d", count);
3676          ...
3677        } end_element ();
3678
3679       which produces "<name foo="bar" count="123">...</name>"
3680
3681       Definition "common/utils/libxml2-writer-macros.h:attribute_ns"
3682
3683        #define attribute_ns
3684
3685       "attribute_ns (prefix, key, namespace_uri, value)" defines a namespaced
3686       attribute.
3687
3688       Definition "common/utils/libxml2-writer-macros.h:string"
3689
3690        #define string
3691
3692       To define a verbatim string, use:
3693
3694        string ("hello");
3695
3696       Definition "common/utils/libxml2-writer-macros.h:string_format"
3697
3698        #define string_format
3699
3700       To define a verbatim string using a format string, use:
3701
3702        string ("%s, world", greeting);
3703
3704       Definition "common/utils/libxml2-writer-macros.h:base64"
3705
3706        #define base64
3707
3708       To write a string encoded as base64:
3709
3710        base64 (data, size);
3711
3712       Definition "common/utils/libxml2-writer-macros.h:comment"
3713
3714        #define comment
3715
3716       To define a comment in the XML, use:
3717
3718         comment ("number of items = %d", nr_items);
3719
3720       File common/utils/stringlists-utils.c
3721
3722       Utility functions used by the library, tools and language bindings.
3723
3724       These functions must not call internal library functions such as
3725       "safe_*", "error" or "perrorf", or any "guestfs_int_*".
3726
3727       Function "common/utils/stringlists-utils.c:guestfs_int_split_string"
3728
3729        char **
3730        guestfs_int_split_string (char sep, const char *str)
3731
3732       Split string at separator character "sep", returning the list of
3733       strings.  Returns "NULL" on memory allocation failure.
3734
3735       Note (assuming "sep" is ":"):
3736
3737       "str == NULL"
3738           aborts
3739
3740       "str == """
3741           returns "[]"
3742
3743       "str == "abc""
3744           returns "["abc"]"
3745
3746       "str == ":""
3747           returns "["", ""]"
3748
3749       File common/utils/utils.c
3750
3751       Utility functions used by the library, tools and language bindings.
3752
3753       These functions must not call internal library functions such as
3754       "safe_*", "error" or "perrorf", or any "guestfs_int_*".
3755
3756       Function "common/utils/utils.c:guestfs_int_replace_string"
3757
3758        char *
3759        guestfs_int_replace_string (const char *str, const char *s1, const char *s2)
3760
3761       Replace every instance of "s1" appearing in "str" with "s2".  A newly
3762       allocated string is returned which must be freed by the caller.  If
3763       allocation fails this can return "NULL".
3764
3765       For example:
3766
3767        replace_string ("abcabb", "ab", "a");
3768
3769       would return "acab".
3770
3771       Function "common/utils/utils.c:guestfs_int_exit_status_to_string"
3772
3773        char *
3774        guestfs_int_exit_status_to_string (int status, const char *cmd_name,
3775                                          char *buffer, size_t buflen)
3776
3777       Translate a wait/system exit status into a printable string.
3778
3779       Function "common/utils/utils.c:guestfs_int_random_string"
3780
3781        int
3782        guestfs_int_random_string (char *ret, size_t len)
3783
3784       Return a random string of characters.
3785
3786       Notes:
3787
3788       •   The "ret" buffer must have length "len+1" in order to store the
3789           final "\0" character.
3790
3791       •   There is about 5 bits of randomness per output character (so about
3792           "5*len" bits of randomness in the resulting string).
3793
3794       Function "common/utils/utils.c:guestfs_int_drive_name"
3795
3796        char *
3797        guestfs_int_drive_name (size_t index, char *ret)
3798
3799       This turns a drive index (eg. 27) into a drive name (eg. "ab").
3800
3801       Drive indexes count from 0.  The return buffer has to be large enough
3802       for the resulting string, and the returned pointer points to the *end*
3803       of the string.
3804
3805       https://rwmj.wordpress.com/2011/01/09/how-are-linux-drives-named-beyond-drive-26-devsdz/
3806
3807       Function "common/utils/utils.c:guestfs_int_drive_index"
3808
3809        ssize_t
3810        guestfs_int_drive_index (const char *name)
3811
3812       The opposite of "guestfs_int_drive_name".  Take a string like "ab" and
3813       return the index (eg 27).
3814
3815       Note that you must remove any prefix such as "hd", "sd" etc, or any
3816       partition number before calling the function.
3817
3818       Function "common/utils/utils.c:guestfs_int_is_true"
3819
3820        int
3821        guestfs_int_is_true (const char *str)
3822
3823       Similar to "Tcl_GetBoolean".
3824
3825       Function "common/utils/utils.c:guestfs_int_string_is_valid"
3826
3827        bool
3828        guestfs_int_string_is_valid (const char *str,
3829                                     size_t min_length, size_t max_length,
3830                                     int flags, const char *extra)
3831
3832       Check a string for validity, that it contains only certain characters,
3833       and minimum and maximum length.  This function is usually wrapped in a
3834       VALID_* macro, see lib/drives.c for an example.
3835
3836       "str" is the string to check.
3837
3838       "min_length" and "max_length" are the minimum and maximum length
3839       checks.  0 means no check.
3840
3841       The flags control:
3842
3843       "VALID_FLAG_ALPHA"
3844           7-bit ASCII-only alphabetic characters are permitted.
3845
3846       "VALID_FLAG_DIGIT"
3847           7-bit ASCII-only digits are permitted.
3848
3849       "extra" is a set of extra characters permitted, in addition to
3850       alphabetic and/or digits.  ("extra = NULL" for no extra).
3851
3852       Returns boolean "true" if the string is valid (passes all the tests),
3853       or "false" if not.
3854
3855       Function "common/utils/utils.c:guestfs_int_fadvise_normal"
3856
3857        void
3858        guestfs_int_fadvise_normal (int fd)
3859
3860       Hint that we will read or write the file descriptor normally.
3861
3862       On Linux, this clears the "FMODE_RANDOM" flag on the file [see below]
3863       and sets the per-file number of readahead pages to equal the block
3864       device readahead setting.
3865
3866       It's OK to call this on a non-file since we ignore failure as it is
3867       only a hint.
3868
3869       Function "common/utils/utils.c:guestfs_int_fadvise_sequential"
3870
3871        void
3872        guestfs_int_fadvise_sequential (int fd)
3873
3874       Hint that we will read or write the file descriptor sequentially.
3875
3876       On Linux, this clears the "FMODE_RANDOM" flag on the file [see below]
3877       and sets the per-file number of readahead pages to twice the block
3878       device readahead setting.
3879
3880       It's OK to call this on a non-file since we ignore failure as it is
3881       only a hint.
3882
3883       Function "common/utils/utils.c:guestfs_int_fadvise_random"
3884
3885        void
3886        guestfs_int_fadvise_random (int fd)
3887
3888       Hint that we will read or write the file descriptor randomly.
3889
3890       On Linux, this sets the "FMODE_RANDOM" flag on the file.  The effect of
3891       this flag is to:
3892
3893       •   Disable normal sequential file readahead.
3894
3895       •   If any read of the file is done which misses in the page cache, 2MB
3896           are read into the page cache.  [I think - I'm not sure I totally
3897           understand what this is doing]
3898
3899       It's OK to call this on a non-file since we ignore failure as it is
3900       only a hint.
3901
3902       Function "common/utils/utils.c:guestfs_int_fadvise_noreuse"
3903
3904        void
3905        guestfs_int_fadvise_noreuse (int fd)
3906
3907       Hint that we will access the data only once.
3908
3909       On Linux, this does nothing.
3910
3911       It's OK to call this on a non-file since we ignore failure as it is
3912       only a hint.
3913
3914       Function "common/utils/utils.c:guestfs_int_fadvise_dontneed"
3915
3916        void
3917        guestfs_int_fadvise_dontneed (int fd)
3918
3919       Hint that we will not access the data in the near future.
3920
3921       On Linux, this immediately writes out any dirty pages in the page cache
3922       and then invalidates (drops) all pages associated with this file from
3923       the page cache.  Apparently it does this even if the file is opened or
3924       being used by other processes.  This setting is not persistent; if you
3925       subsequently read the file it will be cached in the page cache as
3926       normal.
3927
3928       It's OK to call this on a non-file since we ignore failure as it is
3929       only a hint.
3930
3931       Function "common/utils/utils.c:guestfs_int_fadvise_willneed"
3932
3933        void
3934        guestfs_int_fadvise_willneed (int fd)
3935
3936       Hint that we will access the data in the near future.
3937
3938       On Linux, this immediately reads the whole file into the page cache.
3939       This setting is not persistent; subsequently pages may be dropped from
3940       the page cache as normal.
3941
3942       It's OK to call this on a non-file since we ignore failure as it is
3943       only a hint.
3944
3945       Function "common/utils/utils.c:guestfs_int_shell_unquote"
3946
3947        char *
3948        guestfs_int_shell_unquote (const char *str)
3949
3950       Unquote a shell-quoted string.
3951
3952       Augeas passes strings to us which may be quoted, eg. if they come from
3953       files in /etc/sysconfig.  This function can do simple unquoting of
3954       these strings.
3955
3956       Note this function does not do variable substitution, since that is
3957       impossible without knowing the file context and indeed the environment
3958       under which the shell script is run.  Configuration files should not
3959       use complex quoting.
3960
3961       "str" is the input string from Augeas, a string that may be single- or
3962       double-quoted or may not be quoted.  The returned string is unquoted,
3963       and must be freed by the caller.  "NULL" is returned on error and
3964       "errno" is set accordingly.
3965
3966       For information on double-quoting in bash, see
3967       https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html
3968
3969       Function "common/utils/utils.c:guestfs_int_is_reg"
3970
3971        int
3972        guestfs_int_is_reg (int64_t mode)
3973
3974       Return true if the "guestfs_statns" or "guestfs_lstatns" "st_mode"
3975       field represents a regular file.
3976
3977       Function "common/utils/utils.c:guestfs_int_is_dir"
3978
3979        int
3980        guestfs_int_is_dir (int64_t mode)
3981
3982       Return true if the "guestfs_statns" or "guestfs_lstatns" "st_mode"
3983       field represents a directory.
3984
3985       Function "common/utils/utils.c:guestfs_int_is_chr"
3986
3987        int
3988        guestfs_int_is_chr (int64_t mode)
3989
3990       Return true if the "guestfs_statns" or "guestfs_lstatns" "st_mode"
3991       field represents a char device.
3992
3993       Function "common/utils/utils.c:guestfs_int_is_blk"
3994
3995        int
3996        guestfs_int_is_blk (int64_t mode)
3997
3998       Return true if the "guestfs_statns" or "guestfs_lstatns" "st_mode"
3999       field represents a block device.
4000
4001       Function "common/utils/utils.c:guestfs_int_is_fifo"
4002
4003        int
4004        guestfs_int_is_fifo (int64_t mode)
4005
4006       Return true if the "guestfs_statns" or "guestfs_lstatns" "st_mode"
4007       field represents a named pipe (FIFO).
4008
4009       Function "common/utils/utils.c:guestfs_int_is_lnk"
4010
4011        int
4012        guestfs_int_is_lnk (int64_t mode)
4013
4014       Return true if the "guestfs_statns" or "guestfs_lstatns" "st_mode"
4015       field represents a symbolic link.
4016
4017       Function "common/utils/utils.c:guestfs_int_is_sock"
4018
4019        int
4020        guestfs_int_is_sock (int64_t mode)
4021
4022       Return true if the "guestfs_statns" or "guestfs_lstatns" "st_mode"
4023       field represents a Unix domain socket.
4024
4025       Function "common/utils/utils.c:guestfs_int_full_path"
4026
4027        char *
4028        guestfs_int_full_path (const char *dir, const char *name)
4029
4030       Concatenate "dir" and "name" to create a path.  This correctly handles
4031       the case of concatenating "/" + "filename" as well as "/dir" +
4032       "filename".  "name" may be "NULL".
4033
4034       The caller must free the returned path.
4035
4036       This function sets "errno" and returns "NULL" on error.
4037
4038       Function "common/utils/utils.c:guestfs_int_hexdump"
4039
4040        void
4041        guestfs_int_hexdump (const void *data, size_t len, FILE *fp)
4042
4043       Hexdump a block of memory to "FILE *", used for debugging.
4044
4045   Subdirectory common/visit
4046       File common/visit/visit.c
4047
4048       This file contains a recursive function for visiting all files and
4049       directories in a guestfs filesystem.
4050
4051       Adapted from
4052       https://rwmj.wordpress.com/2010/12/15/tip-audit-virtual-machine-for-setuid-files/
4053
4054       Function "common/visit/visit.c:visit"
4055
4056        int
4057        visit (guestfs_h *g, const char *dir, visitor_function f, void *opaque)
4058
4059       Visit every file and directory in a guestfs filesystem, starting at
4060       "dir".
4061
4062       "dir" may be "/" to visit the entire filesystem, or may be some
4063       subdirectory.  Symbolic links are not followed.
4064
4065       The visitor function "f" is called once for every directory and every
4066       file.  The parameters passed to "f" include the current directory name,
4067       the current file name (or "NULL" when we're visiting a directory), the
4068       "guestfs_statns" (file permissions etc), and the list of extended
4069       attributes of the file.  The visitor function may return "-1" which
4070       causes the whole recursion to stop with an error.
4071
4072       Also passed to this function is an "opaque" pointer which is passed
4073       through to the visitor function.
4074
4075       Returns 0 if everything went OK, or "-1" if there was an error.  Error
4076       handling is not particularly well defined.  It will either set an error
4077       in the libguestfs handle or print an error on stderr, but there is no
4078       way for the caller to tell the difference.
4079
4080   Subdirectory common/windows
4081       File common/windows/windows.c
4082
4083       This file implements "win:" Windows file path support in guestfish(1).
4084
4085       Function "common/windows/windows.c:is_windows"
4086
4087        int
4088        is_windows (guestfs_h *g, const char *root)
4089
4090       Checks whether "root" is a Windows installation.
4091
4092       This relies on an already being done introspection.
4093
4094       Function "common/windows/windows.c:windows_path"
4095
4096        char *
4097        windows_path (guestfs_h *g, const char *root, const char *path, int readonly)
4098
4099       Resolves "path" as possible Windows path according to "root", giving a
4100       new path that can be used in libguestfs API calls.
4101
4102       Notes:
4103
4104       •   "root" must be a Windows installation
4105
4106       •   relies on an already being done introspection
4107
4108       •   will unmount all the existing mount points and mount the Windows
4109           root (according to "readonly")
4110
4111       •   calls exit(3) on memory allocation failures
4112
4113   Subdirectory daemon
4114       File daemon/command.c
4115
4116       This file contains a number of useful functions for running external
4117       commands and capturing their output.
4118
4119       Function "daemon/command.c:commandf"
4120
4121        int
4122        commandf (char **stdoutput, char **stderror, unsigned flags,
4123                  const char *name, ...)
4124
4125       Run a command.  Optionally capture stdout and stderr as strings.
4126
4127       Returns 0 if the command ran successfully, or "-1" if there was any
4128       error.
4129
4130       For a description of the "flags" see "commandrvf".
4131
4132       There is also a macro "command(out,err,name,...)" which calls
4133       "commandf" with "flags=0".
4134
4135       Function "daemon/command.c:commandrf"
4136
4137        int
4138        commandrf (char **stdoutput, char **stderror, unsigned flags,
4139                   const char *name, ...)
4140
4141       Same as "command", but we allow the status code from the subcommand to
4142       be non-zero, and return that status code.
4143
4144       We still return "-1" if there was some other error.
4145
4146       There is also a macro "commandr(out,err,name,...)" which calls
4147       "commandrf" with "flags=0".
4148
4149       Function "daemon/command.c:commandvf"
4150
4151        int
4152        commandvf (char **stdoutput, char **stderror, unsigned flags,
4153                   char const *const *argv)
4154
4155       Same as "command", but passing in an argv array.
4156
4157       There is also a macro "commandv(out,err,argv)" which calls "commandvf"
4158       with "flags=0".
4159
4160       Function "daemon/command.c:commandrvf"
4161
4162        int
4163        commandrvf (char **stdoutput, char **stderror, unsigned flags,
4164                    char const* const *argv)
4165
4166       This is a more sane version of system(3) for running external commands.
4167       It uses fork/execvp, so we don't need to worry about quoting of
4168       parameters, and it allows us to capture any error messages in a buffer.
4169
4170       If "stdoutput" is not "NULL", then *stdoutput will return the stdout of
4171       the command as a string.
4172
4173       If "stderror" is not "NULL", then *stderror will return the stderr of
4174       the command.  If there is a final \n character, it is removed so you
4175       can use the error string directly in a call to "reply_with_error".
4176
4177       Flags are:
4178
4179       "COMMAND_FLAG_FOLD_STDOUT_ON_STDERR"
4180           For broken external commands that send error messages to stdout
4181           (hello, parted) but that don't have any useful stdout information,
4182           use this flag to capture the error messages in the *stderror
4183           buffer.  If using this flag, you should pass "stdoutput=NULL"
4184           because nothing could ever be captured in that buffer.
4185
4186       "COMMAND_FLAG_CHROOT_COPY_FILE_TO_STDIN"
4187           For running external commands on chrooted files correctly (see
4188           https://bugzilla.redhat.com/579608) specifying this flag causes
4189           another process to be forked which chroots into sysroot and just
4190           copies the input file to stdin of the specified command.  The file
4191           descriptor is ORed with the flags, and that file descriptor is
4192           always closed by this function.  See daemon/hexdump.c for an
4193           example of usage.
4194
4195       There is also a macro "commandrv(out,err,argv)" which calls
4196       "commandrvf" with "flags=0".
4197
4198       File daemon/device-name-translation.c
4199
4200       Function
4201       "daemon/device-name-translation.c:device_name_translation_init"
4202
4203        void
4204        device_name_translation_init (void)
4205
4206       Cache daemon disk mapping.
4207
4208       When the daemon starts up, populate a cache with the contents of
4209       /dev/disk/by-path.  It's easiest to use "ls -lv" here since the names
4210       are sorted awkwardly.
4211
4212       Function "daemon/device-name-translation.c:device_name_translation"
4213
4214        char *
4215        device_name_translation (const char *device)
4216
4217       Perform device name translation.
4218
4219       Libguestfs defines a few standard formats for device names.  (see also
4220       "BLOCK DEVICE NAMING" in guestfs(3) and "guestfs_canonical_device_name"
4221       in guestfs(3)).  They are:
4222
4223       /dev/sdX[N]
4224       /dev/hdX[N]
4225       /dev/vdX[N]
4226           These mean the Nth partition on the Xth device.  Because Linux no
4227           longer enumerates devices in the order they are passed to qemu, we
4228           must translate these by looking up the actual device using
4229           /dev/disk/by-path/
4230
4231       /dev/mdX
4232       /dev/VG/LV
4233       /dev/mapper/...
4234       /dev/dm-N
4235           These are not translated here.
4236
4237       It returns a newly allocated string which the caller must free.
4238
4239       It returns "NULL" on error.  Note it does not call "reply_with_*".
4240
4241       We have to open the device and test for "ENXIO", because the device
4242       nodes may exist in the appliance.
4243
4244       File daemon/guestfsd.c
4245
4246       This is the guestfs daemon which runs inside the guestfs appliance.
4247       This file handles start up and connecting back to the library.
4248
4249       Function "daemon/guestfsd.c:print_shell_quote"
4250
4251        static int
4252        print_shell_quote (FILE *stream,
4253                           const struct printf_info *info ATTRIBUTE_UNUSED,
4254                           const void *const *args)
4255
4256       printf helper function so we can use %Q ("quoted") and %R to print
4257       shell-quoted strings.  See guestfs-hacking(1) for more details.
4258
4259       File daemon/internal.c
4260
4261       Internal functions that are not part of the public API.
4262
4263       File daemon/utils-c.c
4264
4265       Bindings for utility functions.
4266
4267       Note that functions called from OCaml code must never call any of the
4268       "reply*" functions.
4269
4270       File daemon/utils.c
4271
4272       Miscellaneous utility functions used by the daemon.
4273
4274       Function "daemon/utils.c:is_root_device_stat"
4275
4276        static int
4277        is_root_device_stat (struct stat *statbuf)
4278
4279       Return true iff device is the root device (and therefore should be
4280       ignored from the point of view of user calls).
4281
4282       Function "daemon/utils.c:is_device_parameter"
4283
4284        int
4285        is_device_parameter (const char *device)
4286
4287       Parameters marked as "Device", "Dev_or_Path", etc can be passed a block
4288       device name.  This function tests if the parameter is a block device
4289       name.
4290
4291       It can also be used in daemon code to test if the string passed as a
4292       "Dev_or_Path" parameter is a device or path.
4293
4294       Function "daemon/utils.c:sysroot_path"
4295
4296        char *
4297        sysroot_path (const char *path)
4298
4299       Turn "/path" into "/sysroot/path".
4300
4301       Returns "NULL" on failure.  The caller must check for this and call
4302       "reply_with_perror ("malloc")".  The caller must also free the returned
4303       string.
4304
4305       See also the custom %R printf formatter which does shell quoting too.
4306
4307       Function "daemon/utils.c:sysroot_realpath"
4308
4309        char *
4310        sysroot_realpath (const char *path)
4311
4312       Resolve path within sysroot, calling "sysroot_path" on the resolved
4313       path.
4314
4315       Returns "NULL" on failure.  The caller must check for this and call
4316       "reply_with_perror ("malloc")".  The caller must also free the returned
4317       string.
4318
4319       See also the custom %R printf formatter which does shell quoting too.
4320
4321       Function "daemon/utils.c:is_power_of_2"
4322
4323        int
4324        is_power_of_2 (unsigned long v)
4325
4326       Returns true if "v" is a power of 2.
4327
4328       Uses the algorithm described at
4329       http://graphics.stanford.edu/~seander/bithacks.html#DetermineIfPowerOf2
4330
4331       Function "daemon/utils.c:split_lines_sb"
4332
4333        struct stringsbuf
4334        split_lines_sb (char *str)
4335
4336       Split an output string into a NULL-terminated list of lines, wrapped
4337       into a stringsbuf.
4338
4339       Typically this is used where we have run an external command which has
4340       printed out a list of things, and we want to return an actual list.
4341
4342       The corner cases here are quite tricky.  Note in particular:
4343
4344       ""  returns "[]"
4345
4346       "\n"
4347           returns "[""]"
4348
4349       "a\nb"
4350           returns "["a"; "b"]"
4351
4352       "a\nb\n"
4353           returns "["a"; "b"]"
4354
4355       "a\nb\n\n"
4356           returns "["a"; "b"; ""]"
4357
4358       The original string is written over and destroyed by this function
4359       (which is usually OK because it's the 'out' string from "command*()").
4360       You can free the original string, because "add_string()" strdups the
4361       strings.
4362
4363       "argv" in the "struct stringsbuf" will be "NULL" in case of errors.
4364
4365       Function "daemon/utils.c:filter_list"
4366
4367        char **
4368        filter_list (bool (*p) (const char *str), char **strs)
4369
4370       Filter a list of strings.  Returns a newly allocated list of only the
4371       strings where "p (str) == true".
4372
4373       Note it does not copy the strings, be careful not to double-free them.
4374
4375       Function "daemon/utils.c:trim"
4376
4377        void
4378        trim (char *str)
4379
4380       Skip leading and trailing whitespace, updating the original string in-
4381       place.
4382
4383       Function "daemon/utils.c:parse_btrfsvol"
4384
4385        int
4386        parse_btrfsvol (const char *desc_orig, mountable_t *mountable)
4387
4388       Parse the mountable descriptor for a btrfs subvolume.  Don't call this
4389       directly; it is only used from the stubs.
4390
4391       A btrfs subvolume is given as:
4392
4393        btrfsvol:/dev/sda3/root
4394
4395       where /dev/sda3 is a block device containing a btrfs filesystem, and
4396       root is the name of a subvolume on it. This function is passed the
4397       string following "btrfsvol:".
4398
4399       On success, "mountable->device" and "mountable->volume" must be freed
4400       by the caller.
4401
4402       Function "daemon/utils.c:mountable_to_string"
4403
4404        char *
4405        mountable_to_string (const mountable_t *mountable)
4406
4407       Convert a "mountable_t" back to its string representation
4408
4409       This function can be used in an error path, so must not call
4410       "reply_with_error".
4411
4412       Function "daemon/utils.c:prog_exists"
4413
4414        int
4415        prog_exists (const char *prog)
4416
4417       Check program exists and is executable on $PATH.
4418
4419       Function "daemon/utils.c:random_name"
4420
4421        int
4422        random_name (char *template)
4423
4424       Pass a template such as "/sysroot/XXXXXXXX.XXX".  This updates the
4425       template to contain a randomly named file.  Any 'X' characters after
4426       the final '/' in the template are replaced with random characters.
4427
4428       Notes: You should probably use an 8.3 path, so it's compatible with all
4429       filesystems including basic FAT.  Also this only substitutes lowercase
4430       ASCII letters and numbers, again for compatibility with lowest common
4431       denominator filesystems.
4432
4433       This doesn't create a file or check whether or not the file exists (it
4434       would be extremely unlikely to exist as long as the RNG is working).
4435
4436       If there is an error, "-1" is returned.
4437
4438       Function "daemon/utils.c:udev_settle_file"
4439
4440        void
4441        udev_settle_file (const char *file)
4442
4443       LVM and other commands aren't synchronous, especially when udev is
4444       involved.  eg. You can create or remove some device, but the "/dev"
4445       device node won't appear until some time later.  This means that you
4446       get an error if you run one command followed by another.
4447
4448       Use "udevadm settle" after certain commands, but don't be too fussed if
4449       it fails.
4450
4451       Function "daemon/utils.c:make_exclude_from_file"
4452
4453        char *
4454        make_exclude_from_file (const char *function, char *const *excludes)
4455
4456       Turn list "excludes" into a temporary file, and return a string
4457       containing the temporary file name.  Caller must unlink the file and
4458       free the string.
4459
4460       "function" is the function that invoked this helper, and it is used
4461       mainly for errors/debugging.
4462
4463       Function "daemon/utils.c:read_whole_file"
4464
4465        char *
4466        read_whole_file (const char *filename, size_t *size_r)
4467
4468       Read whole file into dynamically allocated array.  If there is an
4469       error, DON'T call reply_with_perror, just return NULL.  Returns a
4470       "\0"-terminated string.  "size_r" can be specified to get the size of
4471       the returned data.
4472
4473       File daemon/xattr.c
4474
4475       Function "daemon/xattr.c:split_attr_names"
4476
4477        static char **
4478        split_attr_names (char *buf, size_t len)
4479
4480       listxattr(2) returns the string "foo\0bar\0baz" of length "len".  (The
4481       last string in the list is \0-terminated but the \0 is not included in
4482       "len").
4483
4484       This function splits it into a regular list of strings.
4485
4486       Note that the returned list contains pointers to the original strings
4487       in "buf" so be careful that you do not double-free them.
4488
4489   Subdirectory fish
4490       File fish/alloc.c
4491
4492       This file implements the guestfish "alloc" and "sparse" commands.
4493
4494       Function "fish/alloc.c:alloc_disk"
4495
4496        int
4497        alloc_disk (const char *filename, const char *size_str, int add, int sparse)
4498
4499       This is the underlying allocation function.  It's called from a few
4500       other places in guestfish.
4501
4502       File fish/copy.c
4503
4504       This file implements the guestfish commands "copy-in" and "copy-out".
4505
4506       File fish/destpaths.c
4507
4508       The file handles tab-completion of filesystem paths in guestfish.
4509
4510       File fish/display.c
4511
4512       The file implements the guestfish "display" command, for displaying
4513       graphical files (icons, images) in disk images.
4514
4515       File fish/echo.c
4516
4517       The file implements the guestfish "echo" command.
4518
4519       File fish/edit.c
4520
4521       guestfish "edit" command, suggested by Ján Ondrej.
4522
4523       File fish/events.c
4524
4525       This file implements the guestfish event-related commands, "event",
4526       "delete-event" and "list-events".
4527
4528       File fish/fish.c
4529
4530       guestfish, the guest filesystem shell.  This file contains the main
4531       loop and utilities.
4532
4533       Function "fish/fish.c:parse_command_line"
4534
4535        static struct parsed_command
4536        parse_command_line (char *buf, int *exit_on_error_rtn)
4537
4538       Parse a command string, splitting at whitespace, handling '!', '#' etc.
4539       This destructively updates "buf".
4540
4541       "exit_on_error_rtn" is used to pass in the global "exit_on_error"
4542       setting and to return the local setting (eg. if the command begins with
4543       '-').
4544
4545       Returns in "parsed_command.status":
4546
4547       1   got a guestfish command (returned in
4548           "cmd_rtn"/"argv_rtn"/"pipe_rtn")
4549
4550       0   no guestfish command, but otherwise OK
4551
4552       "-1"
4553           an error
4554
4555       Function "fish/fish.c:parse_quoted_string"
4556
4557        static ssize_t
4558        parse_quoted_string (char *p)
4559
4560       Parse double-quoted strings, replacing backslash escape sequences with
4561       the true character.  Since the string is returned in place, the escapes
4562       must make the string shorter.
4563
4564       Function "fish/fish.c:execute_and_inline"
4565
4566        static int
4567        execute_and_inline (const char *cmd, int global_exit_on_error)
4568
4569       Used to handle "<!" (execute command and inline result).
4570
4571       Function "fish/fish.c:issue_command"
4572
4573        int
4574        issue_command (const char *cmd, char *argv[], const char *pipecmd,
4575                       int rc_exit_on_error_flag)
4576
4577       Run a command.
4578
4579       "rc_exit_on_error_flag" is the "exit_on_error" flag that we pass to the
4580       remote server (when issuing --remote commands).  It does not cause
4581       "issue_command" itself to exit on error.
4582
4583       Function "fish/fish.c:extended_help_message"
4584
4585        void
4586        extended_help_message (void)
4587
4588       Print an extended help message when the user types in an unknown
4589       command for the first command issued.  A common case is the user doing:
4590
4591         guestfish disk.img
4592
4593       expecting guestfish to open disk.img (in fact, this tried to run a non-
4594       existent command "disk.img").
4595
4596       Function "fish/fish.c:error_cb"
4597
4598        static void
4599        error_cb (guestfs_h *g, void *data, const char *msg)
4600
4601       Error callback.  This replaces the standard libguestfs error handler.
4602
4603       Function "fish/fish.c:free_n_strings"
4604
4605        static void
4606        free_n_strings (char **str, size_t len)
4607
4608       Free strings from a non-NULL terminated "char**".
4609
4610       Function "fish/fish.c:decode_ps1"
4611
4612        static char *
4613        decode_ps1 (const char *str)
4614
4615       Decode "str" into the final printable prompt string.
4616
4617       Function "fish/fish.c:win_prefix"
4618
4619        char *
4620        win_prefix (const char *path)
4621
4622       Resolve the special "win:..." form for Windows-specific paths.  The
4623       generated code calls this for all device or path arguments.
4624
4625       The function returns a newly allocated string, and the caller must free
4626       this string; else display an error and return "NULL".
4627
4628       Function "fish/fish.c:file_in"
4629
4630        char *
4631        file_in (const char *arg)
4632
4633       Resolve the special "FileIn" paths ("-" or "-<<END" or filename).
4634
4635       The caller (fish/cmds.c) will call "free_file_in" after the command has
4636       run which should clean up resources.
4637
4638       Function "fish/fish.c:file_out"
4639
4640        char *
4641        file_out (const char *arg)
4642
4643       Resolve the special "FileOut" paths ("-" or filename).
4644
4645       The caller (fish/cmds.c) will call "free (str)" after the command has
4646       run.
4647
4648       Function "fish/fish.c:progress_callback"
4649
4650        void
4651        progress_callback (guestfs_h *g, void *data,
4652                           uint64_t event, int event_handle, int flags,
4653                           const char *buf, size_t buf_len,
4654                           const uint64_t *array, size_t array_len)
4655
4656       Callback which displays a progress bar.
4657
4658       File fish/glob.c
4659
4660       This file implements the guestfish "glob" command.
4661
4662       Function "fish/glob.c:expand_devicename"
4663
4664        static char **
4665        expand_devicename (guestfs_h *g, const char *device)
4666
4667       Glob-expand device patterns, such as "/dev/sd*"
4668       (https://bugzilla.redhat.com/635971).
4669
4670       There is no "guestfs_glob_expand_device" function because the
4671       equivalent can be implemented using functions like
4672       "guestfs_list_devices".
4673
4674       It's not immediately clear what it means to expand a pattern like
4675       "/dev/sd*".  Should that include device name translation?  Should the
4676       result include partitions as well as devices?
4677
4678       Should "/dev/" + "*" return every possible device and filesystem?  How
4679       about VGs?  LVs?
4680
4681       To solve this what we do is build up a list of every device, partition,
4682       etc., then glob against that list.
4683
4684       Notes for future work (XXX):
4685
4686       •   This doesn't handle device name translation.  It wouldn't be too
4687           hard to add.
4688
4689       •   Could have an API function for returning all device-like things.
4690
4691       Function "fish/glob.c:add_strings_matching"
4692
4693        static int
4694        add_strings_matching (char **pp, const char *glob,
4695                              char ***ret, size_t *size_r)
4696
4697       Using POSIX fnmatch(3), find strings in the list "pp" which match
4698       pattern "glob".  Add strings which match to the "ret" array.  *size_r
4699       is the current size of the "ret" array, which is updated with the new
4700       size.
4701
4702       Function "fish/glob.c:single_element_list"
4703
4704        static char **
4705        single_element_list (const char *element)
4706
4707       Return a single element list containing "element".
4708
4709       File fish/help.c
4710
4711       The file implements the guestfish "help" command.
4712
4713       Function "fish/help.c:display_help"
4714
4715        int
4716        display_help (const char *cmd, size_t argc, char *argv[])
4717
4718       The "help" command.
4719
4720       This used to just list all commands, but that's not very useful.
4721       Instead display some useful context-sensitive help.  This could be
4722       improved if we knew how many drives had been added already, and whether
4723       anything was mounted.
4724
4725       File fish/hexedit.c
4726
4727       This file implements the guestfish "hexedit" command.
4728
4729       File fish/lcd.c
4730
4731       Function "fish/lcd.c:run_lcd"
4732
4733        int
4734        run_lcd (const char *cmd, size_t argc, char *argv[])
4735
4736       guestfish "lcd" command (similar to the "lcd" command in BSD ftp).
4737
4738       File fish/man.c
4739
4740       Function "fish/man.c:run_man"
4741
4742        int
4743        run_man (const char *cmd, size_t argc, char *argv[])
4744
4745       guestfish "man" command
4746
4747       File fish/more.c
4748
4749       This file implements the guestfish "more" command.
4750
4751       File fish/prep.c
4752
4753       This file implements the guestfish -N option for creating pre-prepared
4754       disk layouts.
4755
4756       File fish/rc.c
4757
4758       This file implements guestfish remote (command) support.
4759
4760       Function "fish/rc.c:rc_listen"
4761
4762        void
4763        rc_listen (void)
4764
4765       The remote control server (ie. "guestfish --listen").
4766
4767       Function "fish/rc.c:rc_remote"
4768
4769        int
4770        rc_remote (int pid, const char *cmd, size_t argc, char *argv[],
4771                   int exit_on_error)
4772
4773       The remote control client (ie. "guestfish --remote").
4774
4775       File fish/reopen.c
4776
4777       This file implements the guestfish "reopen" command.
4778
4779       File fish/setenv.c
4780
4781       This file implements the guestfish "setenv" and "unsetenv" commands.
4782
4783       File fish/supported.c
4784
4785       This file implements the guestfish "supported" command.
4786
4787       File fish/tilde.c
4788
4789       This file implements tilde ("~") expansion of home directories in
4790       guestfish(1).
4791
4792       Function "fish/tilde.c:try_tilde_expansion"
4793
4794        char *
4795        try_tilde_expansion (char *str)
4796
4797       This is called from the script loop if we find a candidate for
4798       "~username" (tilde-expansion).
4799
4800       Function "fish/tilde.c:expand_home"
4801
4802        static char *
4803        expand_home (char *orig, const char *append)
4804
4805       Return $HOME + append string.
4806
4807       Function "fish/tilde.c:find_home_for_username"
4808
4809        static const char *
4810        find_home_for_username (const char *username, size_t ulen)
4811
4812       Lookup "username" (of length "ulen"), return home directory if found,
4813       or "NULL" if not found.
4814
4815       File fish/time.c
4816
4817       This file implements the guestfish "time" command.
4818
4819   Subdirectory python
4820       File python/handle.c
4821
4822       This file contains a small number of functions that are written by
4823       hand.  The majority of the bindings are generated (see
4824       python/actions-*.c).
4825

SEE ALSO

4827       guestfs(3), guestfs-building(1), guestfs-examples(3),
4828       guestfs-internals(1), guestfs-performance(1), guestfs-release-notes(1),
4829       guestfs-testing(1), libguestfs-test-tool(1),
4830       libguestfs-make-fixed-appliance(1), http://libguestfs.org/.
4831

AUTHORS

4833       Richard W.M. Jones ("rjones at redhat dot com")
4834
4836       Copyright (C) 2009-2020 Red Hat Inc.
4837

LICENSE

4839       This library is free software; you can redistribute it and/or modify it
4840       under the terms of the GNU Lesser General Public License as published
4841       by the Free Software Foundation; either version 2 of the License, or
4842       (at your option) any later version.
4843
4844       This library is distributed in the hope that it will be useful, but
4845       WITHOUT ANY WARRANTY; without even the implied warranty of
4846       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
4847       Lesser General Public License for more details.
4848
4849       You should have received a copy of the GNU Lesser General Public
4850       License along with this library; if not, write to the Free Software
4851       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
4852       02110-1301 USA
4853

BUGS

4855       To get a list of bugs against libguestfs, use this link:
4856       https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools
4857
4858       To report a new bug against libguestfs, use this link:
4859       https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools
4860
4861       When reporting a bug, please supply:
4862
4863       •   The version of libguestfs.
4864
4865       •   Where you got libguestfs (eg. which Linux distro, compiled from
4866           source, etc)
4867
4868       •   Describe the bug accurately and give a way to reproduce it.
4869
4870       •   Run libguestfs-test-tool(1) and paste the complete, unedited output
4871           into the bug report.
4872
4873
4874
4875libguestfs-1.46.0                 2021-09-23                guestfs-hacking(1)
Impressum