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-with-upstream-qemu"
539           Runs all tests using a local qemu binary.  It looks for the qemu
540           binary in QEMUDIR (defaults to $HOME/d/qemu), but you can set this
541           to another directory on the command line, eg:
542
543            make check-with-upstream-qemu QEMUDIR=/usr/src/qemu
544
545       "make check-with-upstream-libvirt"
546           Runs all tests using a local libvirt.  This only has any effect if
547           the libvirt backend was selected using "./configure
548           --with-default-backend=libvirt"
549
550           It looks for libvirt in LIBVIRTDIR (defaults to $HOME/d/libvirt),
551           but you can set this to another directory on the command line, eg:
552
553            make check-with-upstream-libvirt LIBVIRTDIR=/usr/src/libvirt
554
555       "make check-slow"
556           Runs some slow/long-running tests which are not run by default.
557
558           To mark a test as slow/long-running:
559
560           •   Add it to the list of "TESTS" in the Makefile.am, just like a
561               normal test.
562
563           •   Modify the test so it checks if the "SLOW=1" environment
564               variable is set, and if not set it skips (ie. returns with exit
565               code 77).  If using $TEST_FUNCTIONS, you can call the function
566               "slow_test" for this.
567
568           •   Add a variable "SLOW_TESTS" to the Makefile.am listing the slow
569               tests.
570
571           •   Add a rule to the Makefile.am:
572
573                check-slow:
574                  $(MAKE) check TESTS="$(SLOW_TESTS)" SLOW=1
575
576       "sudo make check-root"
577           Runs some tests which require root privileges.  These are supposed
578           to be safe, but take care.  You have to run this as root (eg. using
579           sudo(8) explicitly).
580
581           To mark a test as requiring root:
582
583           •   Add it to the list of "TESTS" in the Makefile.am, just like a
584               normal test.
585
586           •   Modify the test so it checks if euid == 0, and if not set it
587               skips (ie. returns with exit code 77).  If using
588               $TEST_FUNCTIONS, you can call the function "root_test" for
589               this.
590
591           •   Add a variable "ROOT_TESTS" to the Makefile.am listing the root
592               tests.
593
594           •   Add a rule to the Makefile.am:
595
596                check-root:
597                  $(MAKE) check TESTS="$(ROOT_TESTS)"
598
599       "make check-all"
600           Equivalent to running all "make check*" rules except "check-root".
601
602       "make check-release"
603           Runs a subset of "make check*" rules that are required to pass
604           before a tarball can be released.  Currently this is:
605
606           •   check
607
608           •   check-valgrind
609
610           •   check-direct
611
612           •   check-valgrind-direct
613
614           •   check-slow
615
616       "make installcheck"
617           Run "make check" on the installed copy of libguestfs.
618
619           The version of installed libguestfs being tested, and the version
620           of the libguestfs source tree must be the same.
621
622           Do:
623
624            ./configure
625            make clean ||:
626            make
627            make installcheck
628
629   VALGRIND
630       When you do "make check-valgrind", it searches for any Makefile.am in
631       the tree that has a "check-valgrind:" target and runs it.
632
633       Writing the Makefile.am and tests correctly to use valgrind and working
634       with automake parallel tests is subtle.
635
636       If your tests are run via a shell script wrapper, then in the wrapper
637       use:
638
639        $VG virt-foo
640
641       and in the Makefile.am use:
642
643        check-valgrind:
644            make VG="@VG@" check
645
646       However, if your binaries run directly from the "TESTS" rule, you have
647       to modify the Makefile.am like this:
648
649        LOG_COMPILER = $(VG)
650
651        check-valgrind:
652            make VG="@VG@" check
653
654       In either case, check that the right program is being tested by
655       examining the tmp/valgrind* log files carefully.
656
657   SUBMITTING PATCHES
658       Submit patches to the mailing list:
659       http://www.redhat.com/mailman/listinfo/libguestfs and CC to
660       rjones@redhat.com.
661
662       You do not need to subscribe to the mailing list if you don’t want to.
663       There may be a short delay while your message is moderated.
664
665   DAEMON CUSTOM PRINTF FORMATTERS
666       In the daemon code we have created custom printf formatters %Q and %R,
667       which are used to do shell quoting.
668
669       %Q  Simple shell quoted string.  Any spaces or other shell characters
670           are escaped for you.
671
672       %R  Same as %Q except the string is treated as a path which is prefixed
673           by the sysroot.
674
675       For example:
676
677        asprintf (&cmd, "cat %R", path);
678
679       would produce "cat /sysroot/some\ path\ with\ spaces"
680
681       Note: Do not use these when you are passing parameters to the
682       "command{,r,v,rv}()" functions.  These parameters do NOT need to be
683       quoted because they are not passed via the shell (instead, straight to
684       exec).  You probably want to use the "sysroot_path()" function however.
685
686   INTERNATIONALIZATION (I18N) SUPPORT
687       We support i18n (gettext anyhow) in the library.
688
689       However many messages come from the daemon, and we don’t translate
690       those at the moment.  One reason is that the appliance generally has
691       all locale files removed from it, because they take up a lot of space.
692       So we'd have to readd some of those, as well as copying our PO files
693       into the appliance.
694
695       Debugging messages are never translated, since they are intended for
696       the programmers.
697

MISCELLANEOUS TOPICS

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

MAINTAINER TASKS

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

INTERNAL DOCUMENTATION

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

SEE ALSO

4809       guestfs(3), guestfs-building(1), guestfs-examples(3),
4810       guestfs-internals(1), guestfs-performance(1), guestfs-release-notes(1),
4811       guestfs-testing(1), libguestfs-test-tool(1),
4812       libguestfs-make-fixed-appliance(1), http://libguestfs.org/.
4813

AUTHORS

4815       Richard W.M. Jones ("rjones at redhat dot com")
4816
4818       Copyright (C) 2009-2020 Red Hat Inc.
4819

LICENSE

4821       This library is free software; you can redistribute it and/or modify it
4822       under the terms of the GNU Lesser General Public License as published
4823       by the Free Software Foundation; either version 2 of the License, or
4824       (at your option) any later version.
4825
4826       This library is distributed in the hope that it will be useful, but
4827       WITHOUT ANY WARRANTY; without even the implied warranty of
4828       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
4829       Lesser General Public License for more details.
4830
4831       You should have received a copy of the GNU Lesser General Public
4832       License along with this library; if not, write to the Free Software
4833       Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
4834       02110-1301 USA
4835

BUGS

4837       To get a list of bugs against libguestfs, use this link:
4838       https://bugzilla.redhat.com/buglist.cgi?component=libguestfs&product=Virtualization+Tools
4839
4840       To report a new bug against libguestfs, use this link:
4841       https://bugzilla.redhat.com/enter_bug.cgi?component=libguestfs&product=Virtualization+Tools
4842
4843       When reporting a bug, please supply:
4844
4845       •   The version of libguestfs.
4846
4847       •   Where you got libguestfs (eg. which Linux distro, compiled from
4848           source, etc)
4849
4850       •   Describe the bug accurately and give a way to reproduce it.
4851
4852       •   Run libguestfs-test-tool(1) and paste the complete, unedited output
4853           into the bug report.
4854
4855
4856
4857libguestfs-1.48.3                 2022-05-26                guestfs-hacking(1)
Impressum