summaryrefslogtreecommitdiffstats
path: root/src/generator.ml
Commit message (Collapse)AuthorAgeFilesLines
* avoid use of all ctype macrosJim Meyering2009-09-241-5/+5
| | | | | | | | | | | | | | | | | | | | * cfg.mk (disable_temporarily): Don't disable sc_avoid_ctype_macros. * fish/tilde.c: Remove unnecessary inclusion of ctype.h. * bootstrap: Add gnulib's c-ctype module to the list. * daemon/m4/gnulib-cache.m4: Likewise. * daemon/ext2.c: Include "c-ctype.h", not <ctype.h>. Use c_isspace, etc, rather than isspace. * daemon/guestfsd.c: Likewise. * daemon/lvm.c: Likewise. * daemon/proto.c: Likewise. * fish/fish.c: Likewise. * fish/tilde.c: Likewise. * src/generator.ml: Likewise. * src/guestfs.c: Likewise. * examples/to-xml.c: Likewise. * examples/Makefile.am (to_xml_CPPFLAGS): Add -I$(top_srcdir)/gnulib/lib so inclusion of "c-ctype.h" works. (to_xml_CPPFLAGS): Rename from to_xml_CFLAGS.
* maint: use spaces, not TABs for indentationJim Meyering2009-09-241-24/+24
| | | | | | | | "make syntax-check" was failing. This fixes it. * HACKING: Indent with spaces, not TABs. * configure.ac: Likewise. * rescue/virt-rescue: Likewise. * src/generator.ml: Likewise.
* Add direct appliance mode flag and implementation.Richard Jones2009-09-231-0/+25
| | | | | | | | When the g->direct flag is set, the appliance stdin/stdout are not connected to the library. Instead they inherit the stdin/stdout of the caller. This is used to implement virt-rescue.
* Remove guestfs_wait_ready (turn it into a no-op).Richard Jones2009-09-211-17/+11
| | | | | | | | | | | | | | This commit changes guestfs_launch so that it both launches the appliance and waits until it is ready (ie. the daemon communicates back to us). Since we removed the pretence that we could implement a low-level asynchronous API, the need to call launch() followed by wait_ready() has looked a bit silly. Now guestfs_wait_ready() is basically a no-op. It is left in the API for backwards compatibility. Any calls to guestfs_wait_ready() can be removed from client code.
* Remove main loop.Richard Jones2009-09-141-149/+63
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This commit removes the external main loop, which never worked and caused a number of bugs. Requests are now done synchronously, and if the user wants to have requests issued in the background or to have a responsive GUI, then they'll just have to use threads. The big change is to push all reads and writes through two functions called send_to_daemon (for writes) and recv_from_daemon (for reads) which operate synchronously. These functions read/write whole messages, and also handle checking for EOF (ie. daemon died) and asynchronous log message events from qemu (eg. from debug / dmesg printed by the guest). A more complete description of how these work can be found in the code. This code passes a complete run of the tests. Bugs believed to be fixed by this commit: https://bugzilla.redhat.com/show_bug.cgi?id=501888 internal error: reply callback called twice https://bugzilla.redhat.com/show_bug.cgi?id=504418 In virt-inspector: "download: guestfs_download reply failed, see earlier error messages" I have tried to avoid reintroducing this: https://bugzilla.redhat.com/show_bug.cgi?id=508713 libguestfs: error: write: Broken pipe (guestfish only) One other benefit of this is that 'set_busy/end_busy' calls no longer appear in traces.
* Don't enable trace in set_trace test.Richard Jones2009-09-141-2/+2
| | | | | This leaves trace enabled afterwards, resulting in some ugly test messages.
* guestfish: Enable grouping in string listsMatthew Booth2009-09-141-1/+2
| | | | | | | | | | | | | | | | | | | | | | This change adds the ability to group entries in a string list with single quotes. So the string: "'foo bar'" becomes 1 token rather than 2. Consequently single quotes must now be escaped: "\'" resolves to a literal single quote. Incidentally, this change also alters another, probably unintentional behaviour of the previous implementation, in that tokens are separated by any amount of whitespace rather than a single whitespace character. I.e.: "a b" resolves to: 'a' 'b' rather than: 'a' '' 'b' That last syntax can be used if an empty argument is still desired. Whitespace is now also defined to include tabs. parse_string_list can also now fail if it contains an unmatched open quote.
* Add command trace functionality.Richard Jones2009-09-141-0/+74
| | | | | Enable this by calling guestfs_trace (handle, 1) or by setting the LIBGUESTFS_TRACE=1 environment variable.
* Non-daemon actions indirect through generated code.Richard Jones2009-09-141-3/+34
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Previously non-daemon actions were called directly by user code, eg: /* Non-generated */ int guestfs_set_verbose (guestfs_h *g, int v) { g->verbose = !!v; return 0; } This changes these actions so they go indirectly via some generated code, eg: /* Generated */ int guestfs_set_verbose (guestfs_h *g, int verbose) { return guestfs__set_verbose (g, verbose); } /* Non-generated */ int guestfs__set_verbose (guestfs_h *g, int v) { g->verbose = !!v; return 0; } The aim is to have a place in the generated code where we can add debug or tracing information for these non- daemon calls.
* Add echo_daemon commandMatthew Booth2009-09-141-0/+13
| | | | | echo_daemon is a simple echo which can be used to test connectivity between the client and daemon.
* generator.ml: Fix string list memory leakMatthew Booth2009-09-111-1/+10
| | | | Parsed string lists are allocated by malloc, but were never freed.
* generator.ml: avoid a warning about signed overflow in tests.cJim Meyering2009-08-281-4/+4
| | | | | | * src/generator.ml: Emit "unsigned long int n_failed;" rather than "int failed;", to avoid warning from gcc about "assuming signed overflow does not occur when simplifying conditional to constant".
* generator.ml: avoid defined-but-not-used warnings in guestfs_c_actions.cJim Meyering2009-08-281-21/+32
| | | | | * src/generator.ml (emit_ocaml_copy_list_function): New function. Emit a function definition only if it will be used.
* generator.ml: avoid warnings in generated ocaml/guestfs_c_actions.cJim Meyering2009-08-281-0/+7
| | | | | | | | | * src/generator.ml: Emit prototypes for ocaml_guestfs_* functions, to avoid warnings from gcc -Wmissing-prototypes. Normally we'd put these somewhere else, but in this unusual case, they're not needed anywhere else. Handle the >5-argument case, too, for these: ocaml_guestfs_test0_byte, ocaml_guestfs_sfdisk_byte, ocaml_guestfs_sfdisk_N_byte.
* generator.ml: avoid signed/unsigned-comparison warning in fish/cmds.cJim Meyering2009-08-211-2/+2
| | | | | | * src/generator.ml (emit_print_list_function): Emit code that doesn't evoke warnings. s/int/unsigned int/ (emit print_*_indent): Likewise, s/int/unsigned int/
* tests: namemax on ISO devices is 2551.0.68Richard Jones2009-08-191-1/+1
| | | | Was 256 for the old squashfs device.
* tests: Use ISO instead of squashfs.Richard Jones2009-08-191-67/+67
| | | | | The squashfs format changes too much. Use an ISO file for the tests instead.
* tests: modprobe fat instead of ext2 module.Richard W.M. Jones2009-08-191-1/+1
| | | | | | | On RHEL 5, ext2 is compiled into the kernel, so trying to modprobe it will fail. I've checked that fat.ko is always a module on the platforms we care about (RHEL 5, Fedora 11, Debian), so use that to test instead.
* avoid build failure due to Haskell keyword clashJim Meyering2009-08-191-3/+32
| | | | | | | | * src/generator.ml: Fix this particular problem by renaming the "module" parameter to "modulename". Avoid the general problem by ensuring that no parameter name is in the set of nearly all Haskell, OCaml and C reserved words. (zfile): Adjust one more offender: s/method/meth/.
* build: Comment out some unused macros.Richard Jones2009-08-191-3/+3
| | | | | GCC 4.4.1 warns about some unused macros. Comment these out while they are not used.
* generator.ml: suppress signed/unsigned-compare warningsJim Meyering2009-08-181-1/+1
| | | | | * src/generator.ml (check_reply_header): Emit parameter declarations that are unsigned, so as to avoid signed/unsigned-compare warnings.
* New 'modprobe' command.Matthew Booth2009-08-181-0/+9
| | | | Allow kernel modules to be loaded into the appliance.
* generator: Small code rearrangement.Richard Jones2009-08-181-3/+5
| | | | Move code which updates pod2text memo file into a separate function.
* generator.ml: do not emit unused print_* functionsJim Meyering2009-08-181-5/+12
| | | | | * src/generator.ml: Do not emit functions like print_xattr, print_lvm_vg, print_inotify_event, that are not used.
* generator.ml: do not emit unused print_*_list functionsJim Meyering2009-08-181-12/+24
| | | | | * src/generator.ml (emit_print_list_function): New function. Emit a function definition only if it will be used.
* generator.ml: avoid warnings in generated tests.cJim Meyering2009-08-181-4/+4
| | | | | | | | | * src/generator.ml: Avoid warnings in generated tests.c, regarding print_strings, and in exercising any function that takes a StringList or DeviceList parameter. (print_strings): Change param type to "char *const *s". Declare fully-const initializer for each list-taking function use. Cast *List argument to "(char **)".
* generator.ml: Use TABs, not spaces for indentation.Jim Meyering2009-08-171-3/+3
|
* java: Small fix to Java bindings.Richard W.M. Jones2009-08-171-1/+4
| | | | Missing declaration of local variable 'i'.
* indent with spaces, not TABsJim Meyering2009-08-171-10/+10
|
* generator.ml: emit slightly prettier codeJim Meyering2009-08-171-3/+3
| | | | * src/generator.ml: Emit a few omitted newlines.
* python: avoid "_POSIX_C_SOURCE" redefinition warningJim Meyering2009-08-171-2/+2
| | | | | * src/generator.ml: Include <Python.h> *before* <stdio.h> to avoid redefinition warning about "_POSIX_C_SOURCE".
* adjust const "**" pointers to avoid warningsJim Meyering2009-08-171-47/+60
| | | | | | Also, ... * src/generator.ml: Add DeviceList type, and propagate that change out to all calling/interface code.
* New commands: mkfs-b, mke2journal*, mke2fs-J*Richard W.M. Jones2009-08-151-0/+84
| | | | | | | | | | mkfs-b: Pass the -b (blocksize) parameter to mkfs. mke2journal and friends: Lets you create external ext2 journals on devices. mke2fs-J and friends: Lets you create ext2/3/4 filesystems with external journals.
* generator: Generate the UUIDs for tests randomly.Richard W.M. Jones2009-08-151-18/+34
| | | | | Adds a uuidgen function which gets the random UUID from the uuid program. Uses this for tests.
* generator.ml: don't emit unused functionsJim Meyering2009-08-141-1/+9
| | | | | * src/generator.ml: Use "rstructs_used" to emit definitions only for put_TYPE_list functions that are used.
* generator.ml: factor out a functionJim Meyering2009-08-141-12/+16
| | | | * src/generator.ml (emit_put_list_function): New function.
* Work out which RStruct/RStructList structs are really used, and how.Richard W.M. Jones2009-08-141-0/+58
|
* Misc parameters which are String but should be Pathname.Richard Jones2009-08-131-9/+9
|
* cp/cp-a/mv parameters marked as Pathname.Richard Jones2009-08-131-3/+3
|
* generator.ml: convert leading TABs to spacesJim Meyering2009-08-131-4/+4
|
* generator.ml: factor out "pr_args n" functionJim Meyering2009-08-131-4/+7
|
* generator.ml: finish adding Dev_or_Path supportJim Meyering2009-08-131-31/+35
| | | | | | | | | | * src/generator.ml: Update all rules to handle Dev_or_Path. (the above changes to generator.ml are mostly mechanical) Emit a use of REQUIRE_ROOT_OR_RESOLVE_DEVICE. * daemon/upload.c (do_download): Remove use of REQUIRE_ROOT_OR_RESOLVE_DEVICE, now that it's automatically done in calling code. * daemon/file.c (do_file): Likewise.
* generator.ml: add type: Dev_or_PathJim Meyering2009-08-131-2/+3
| | | | * src/generator.ml (file, download): Use it.
* generator.ml: constify do_mkdtempJim Meyering2009-08-131-4/+2
| | | | | * daemon/dir.c (do_mkdtemp): Rewrite for a "const" parameter. * src/generator.ml (mkdtemp): Declare parameter to be of type Pathname.
* generator.ml: move String/Device decls "down" to definitionJim Meyering2009-08-131-5/+5
|
* generator.ml: use new "Pathname" designationJim Meyering2009-08-131-14/+31
| | | | | | | | | | Nearly every file-related function in daemons/*.c is affected: Remove this pair of statements from each affected do_* function: - NEED_ROOT (return -1); - ABS_PATH (dir, return -1); and change the type of the corresponding parameter to "const char *". * src/generator.ml: Emit NEED_ROOT just once, even when there are two or more Pathname args.
* generator.ml: new type, "Pathname"Jim Meyering2009-08-131-93/+111
| | | | | | | | | | * src/generator.ml: Emit NEED_ROOT and ABS_PATH into generated stubs.c, rather than requiring they be added manually at the start of each and every do_* function that operates on a "path" parameter. Update grammar: Pathname is just a String, with the above exception. Do not update augeas "path" parameters, since they are not file names, but rather ":"-separated search paths. Except aug_init, for which "path" *is* a file name.
* generator.ml: emit "const char *" for Device and String paramsJim Meyering2009-08-131-7/+5
| | | | | | * src/generator.ml: Emit "const char *", not "char *" for Device and String params, now that the non-const code is hoisted into the calling code in stubs.c.
* * src/generator.ml: Change all `String "device"' to `Device "device"'.Jim Meyering2009-08-131-43/+43
| | | | | | | | | | | | | | | | | | | | | Then update each affected function, removing each uses of RESOLVE_DEVICE, now that it's generated in caller from stub.c. * daemon/blockdev.c (call_blockdev): Remove use of RESOLVE_DEVICE. * daemon/devsparts.c (do_mkfs): Likewise. * daemon/ext2.c (do_e2fsck_f, do_get_e2label, do_get_e2uuid): Likewise. (do_resize2fs, do_set_e2label, do_set_e2uuid, do_tune2fs_l): Likewise. * daemon/fsck.c (do_fsck): Likewise. * daemon/grub.c (do_grub_install): Likewise. * daemon/lvm.c (do_lvremove, do_pvcreate, do_pvremove): Likewise. (do_pvresize): Likewise. * daemon/mount.c (do_mount_vfs): Likewise. * daemon/ntfs.c (do_ntfs_3g_probe): Likewise. * daemon/scrub.c (do_scrub_device): Likewise. * daemon/sfdisk.c (sfdisk, sfdisk_flag): Likewise. * daemon/swap.c (do_mkswap, do_mkswap_L, do_mkswap_U): Likewise. (do_swapoff_device, do_swapon_device): Likewise. * daemon/zero.c (do_zero): Likewise. * daemon/zerofree.c (do_zerofree): Likewise.
* update generator to emit each RESOLVE_DEVICE callJim Meyering2009-08-131-7/+7
| | | | | * src/generator.ml: Emit RESOLVE_DEVICE (device, goto done); just before each Device-enabled do_$FUNCTION.