mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
196 lines
5.7 KiB
Plaintext
196 lines
5.7 KiB
Plaintext
PLEASE LOOK AT THE TOP OF EACH FILE BEFORE EDITING TO SEE WHETHER IT
|
|
IS AUTOMATICALLY GENERATED OR NOT.
|
|
|
|
Adding a new action
|
|
----------------------------------------------------------------------
|
|
|
|
All action functions are generated automatically, so there are only
|
|
two files you need to edit:
|
|
|
|
(1) src/generator.ml: Add your new action, parameters, description,
|
|
etc. to the big list called 'functions' at the top of this file.
|
|
|
|
(2) Edit/create a C file in daemon/ subdirectory which implements your
|
|
'do_action' function. Take a look at one of the numerous examples
|
|
there.
|
|
|
|
Formatting
|
|
----------------------------------------------------------------------
|
|
|
|
Try to use GNU / Emacs default formatting, following the convention
|
|
used elsewhere in the source.
|
|
|
|
Please make sure that the code compiles without warnings.
|
|
|
|
Please test any changes.
|
|
|
|
Useful targets:
|
|
make syntax-check Checks the syntax of the C code.
|
|
make check Runs the test suite.
|
|
|
|
Enable warnings, and fix any you find:
|
|
./configure --enable-gcc-warnings
|
|
|
|
Code indentation
|
|
----------------------------------------------------------------------
|
|
Our C source code generally adheres to some basic code-formatting
|
|
conventions. The existing code base is not totally consistent on this
|
|
front, but we do prefer that contributed code be formatted similarly.
|
|
In short, use spaces-not-TABs for indentation, use 2 spaces for each
|
|
indentation level, and other than that, follow the K&R style.
|
|
|
|
If you use Emacs, add the following to one of one of your start-up files
|
|
(e.g., ~/.emacs), to help ensure that you get indentation right:
|
|
|
|
;;; In libguestfs, indent with spaces everywhere (not TABs).
|
|
;;; Exceptions: Makefile and ChangeLog modes.
|
|
(add-hook 'find-file-hook
|
|
'(lambda () (if (and buffer-file-name
|
|
(string-match "/libguestfs\\>" (buffer-file-name))
|
|
(not (string-equal mode-name "Change Log"))
|
|
(not (string-equal mode-name "Makefile")))
|
|
(setq indent-tabs-mode nil))))
|
|
|
|
;;; When editing C sources in libguestfs, use this style.
|
|
(defun libguestfs-c-mode ()
|
|
"C mode with adjusted defaults for use with libguestfs."
|
|
(interactive)
|
|
(c-set-style "K&R")
|
|
(setq c-indent-level 2)
|
|
(setq c-basic-offset 2))
|
|
(add-hook 'c-mode-hook
|
|
'(lambda () (if (string-match "/libguestfs\\>" (buffer-file-name))
|
|
(libguestfs-c-mode))))
|
|
|
|
Directories
|
|
----------------------------------------------------------------------
|
|
|
|
appliance/
|
|
The qemu appliance, build scripts and so on.
|
|
|
|
capitests/
|
|
Automated tests of the C API.
|
|
|
|
contrib/
|
|
Outside contributions, experimental parts.
|
|
|
|
csharp/
|
|
Experimental C# bindings.
|
|
|
|
daemon/
|
|
The daemon that runs inside the guest and carries out actions.
|
|
|
|
examples/
|
|
The examples.
|
|
|
|
fish/
|
|
Guestfish (the command-line program / shell)
|
|
|
|
fuse/
|
|
FUSE (userspace filesystem) built on top of libguestfs.
|
|
|
|
haskell/
|
|
Haskell bindings.
|
|
|
|
hivex/
|
|
Hive extraction library, for reading Windows Registry files.
|
|
See hivex/README for more details.
|
|
|
|
images/
|
|
Some guest images to test against. These are gzipped to save
|
|
space. You have to unzip them before use.
|
|
|
|
Also contains some files used by the test suite.
|
|
|
|
inspector/
|
|
Virtual machine image inspector (virt-inspector).
|
|
|
|
java/
|
|
Java bindings.
|
|
|
|
m4/
|
|
M4 macros used by autoconf.
|
|
|
|
ocaml/
|
|
OCaml bindings.
|
|
|
|
po/
|
|
Translations.
|
|
|
|
perl/
|
|
Perl bindings.
|
|
|
|
python/
|
|
Python bindings.
|
|
|
|
regressions/
|
|
Regression tests.
|
|
|
|
ruby/
|
|
Ruby bindings.
|
|
|
|
tools/
|
|
Command line tools like virt-cat, virt-df, virt-edit and more.
|
|
In versions <= 1.0.73 these were all in separate directories
|
|
like cat/, df/, edit/, but since then we moved them all into
|
|
one directory to simplify builds.
|
|
|
|
src/
|
|
Source code to the C library.
|
|
Also contains the crucial generator program.
|
|
|
|
test-tool/
|
|
Interactive qemu/kernel test tool.
|
|
|
|
Debugging
|
|
----------------------------------------------------------------------
|
|
|
|
It's a good idea to use guestfish to try out new commands.
|
|
|
|
Debugging the daemon is a problem because it runs inside a minimal
|
|
qemu environment. However you can print messages from the daemon, and
|
|
they will show up if you use 'guestfish -v'.
|
|
|
|
Patches
|
|
----------------------------------------------------------------------
|
|
|
|
Submit patches to the mailing list:
|
|
http://www.redhat.com/mailman/listinfo/libguestfs
|
|
and CC to rjones@redhat.com
|
|
|
|
I18N
|
|
----------------------------------------------------------------------
|
|
|
|
We support i18n (gettext anyhow) in the library.
|
|
|
|
However many messages come from the daemon, and we don't translate
|
|
those at the moment. One reason is that the appliance generally has
|
|
all locale files removed from it, because they take up a lot of space.
|
|
So we'd have to readd some of those, as well as copying our PO files
|
|
into the appliance.
|
|
|
|
Debugging messages are never translated, since they are intended for
|
|
the programmers.
|
|
|
|
Extended printf
|
|
----------------------------------------------------------------------
|
|
|
|
In the daemon code we have created custom printf formatters %Q and %R,
|
|
which are used to do shell quoting.
|
|
|
|
%Q => Simple shell quoted string. Any spaces or other shell characters
|
|
are escaped for you.
|
|
|
|
%R => Same as %Q except the string is treated as a path which is prefixed
|
|
by the sysroot.
|
|
|
|
eg.
|
|
|
|
asprintf (&cmd, "cat %R", path);
|
|
==> "cat /sysroot/some\ path\ with\ spaces"
|
|
|
|
Note: Do NOT use these when you are passing parameters to the
|
|
command{,r,v,rv}() functions. These parameters do NOT need to be
|
|
quoted because they are not passed via the shell (instead, straight to
|
|
exec). You probably want to use the sysroot_path() function however.
|