From b3e5e3e6854bd3e3d642557b16f6cafb4b2fbe91 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Mon, 10 May 2010 09:16:05 +0200 Subject: QMP: Add "Downstream extension of QMP" to spec Signed-off-by: Markus Armbruster --- QMP/qmp-spec.txt | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/QMP/qmp-spec.txt b/QMP/qmp-spec.txt index f3c0327..9d30a8c 100644 --- a/QMP/qmp-spec.txt +++ b/QMP/qmp-spec.txt @@ -215,3 +215,58 @@ Additionally, Clients must not assume any particular: - Order of json-object members or json-array elements - Amount of errors generated by a command, that is, new errors can be added to any existing command in newer versions of the Server + +6. Downstream extension of QMP +------------------------------ + +We recommend that downstream consumers of QEMU do *not* modify QMP. +Management tools should be able to support both upstream and downstream +versions of QMP without special logic, and downstream extensions are +inherently at odds with that. + +However, we recognize that it is sometimes impossible for downstreams to +avoid modifying QMP. Both upstream and downstream need to take care to +preserve long-term compatibility and interoperability. + +To help with that, QMP reserves JSON object member names beginning with +'__' (double underscore) for downstream use ("downstream names"). This +means upstream will never use any downstream names for its commands, +arguments, errors, asynchronous events, and so forth. + +Any new names downstream wishes to add must begin with '__'. To +ensure compatibility with other downstreams, it is strongly +recommended that you prefix your downstram names with '__RFQDN_' where +RFQDN is a valid, reverse fully qualified domain name which you +control. For example, a qemu-kvm specific monitor command would be: + + (qemu) __org.linux-kvm_enable_irqchip + +Downstream must not change the server greeting (section 2.2) other than +to offer additional capabilities. But see below for why even that is +discouraged. + +Section '5 Compatibility Considerations' applies to downstream as well +as to upstream, obviously. It follows that downstream must behave +exactly like upstream for any input not containing members with +downstream names ("downstream members"), except it may add members +with downstream names to its output. + +Thus, a client should not be able to distinguish downstream from +upstream as long as it doesn't send input with downstream members, and +properly ignores any downstream members in the output it receives. + +Advice on downstream modifications: + +1. Introducing new commands is okay. If you want to extend an existing + command, consider introducing a new one with the new behaviour + instead. + +2. Introducing new asynchronous messages is okay. If you want to extend + an existing message, consider adding a new one instead. + +3. Introducing new errors for use in new commands is okay. Adding new + errors to existing commands counts as extension, so 1. applies. + +4. New capabilities are strongly discouraged. Capabilities are for + evolving the basic protocol, and multiple diverging basic protocol + dialects are most undesirable. -- cgit v1.1 From 6c6a58aee425338bf67ec8faffdcda56b0b82090 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 12 May 2010 10:53:00 +0200 Subject: Revert "PCI: Convert pci_device_hot_add() to QObject" Short story: We don't want pci_add in QMP. Long story follows. pci_add can do two things: * Hot plug a PCI NIC. device_add is more general. * Hot plug a PCI disk controller, and a drive connected to it. The controller is either virtio-blk-pci (if=virtio) or lsi53c895a (if=scsi). With the latter, the drive is optional. Use drive_add to hotplug additional SCSI drives. Except drive_add is not available in QMP. device_add is more general for controllers and the guest part of drives. I'm working on a more general alternative for the host part of drives. Why am I proposing to remove pci_add from QMP before its replacement is ready? I want it out sooner rather than later, because it isn't fully functional (errors and drive_add are missing), and we do not plan to complete the job. In other words, it's not really usable over QMP now, and it's not what we want for QMP anyway. Since we don't want it to be used over QMP, we should take it out, not leave it around as a trap for the uninitiated. Dan Berrange confirmed that libvirt has no need for pci_add & friends over QMP. This reverts commit 7a344f7ac7bb651d0556a933ed8060d3a9e5d949. Conflicts: hw/pci-hotplug.c sysemu.h Signed-off-by: Markus Armbruster --- hw/pci-hotplug.c | 46 +++++----------------------------------------- qemu-monitor.hx | 3 +-- sysemu.h | 3 +-- 3 files changed, 7 insertions(+), 45 deletions(-) diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c index cc45c50..22a7ce4 100644 --- a/hw/pci-hotplug.c +++ b/hw/pci-hotplug.c @@ -33,7 +33,6 @@ #include "scsi.h" #include "virtio-blk.h" #include "qemu-config.h" -#include "qemu-objects.h" #if defined(TARGET_I386) static PCIDevice *qemu_pci_hot_add_nic(Monitor *mon, @@ -224,36 +223,7 @@ static PCIDevice *qemu_pci_hot_add_storage(Monitor *mon, return dev; } -void pci_device_hot_add_print(Monitor *mon, const QObject *data) -{ - QDict *qdict; - - assert(qobject_type(data) == QTYPE_QDICT); - qdict = qobject_to_qdict(data); - - monitor_printf(mon, "OK domain %d, bus %d, slot %d, function %d\n", - (int) qdict_get_int(qdict, "domain"), - (int) qdict_get_int(qdict, "bus"), - (int) qdict_get_int(qdict, "slot"), - (int) qdict_get_int(qdict, "function")); - -} - -/** - * pci_device_hot_add(): Hot add a PCI device - * - * Return a QDict with the following device information: - * - * - "domain": domain number - * - "bus": bus number - * - "slot": slot number - * - "function": function number - * - * Example: - * - * { "domain": 0, "bus": 0, "slot": 5, "function": 0 } - */ -int pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data) +void pci_device_hot_add(Monitor *mon, const QDict *qdict) { PCIDevice *dev = NULL; const char *pci_addr = qdict_get_str(qdict, "pci_addr"); @@ -278,20 +248,14 @@ int pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data) dev = qemu_pci_hot_add_storage(mon, pci_addr, opts); } else { monitor_printf(mon, "invalid type: %s\n", type); - return -1; } if (dev) { - *ret_data = - qobject_from_jsonf("{ 'domain': 0, 'bus': %d, 'slot': %d, " - "'function': %d }", pci_bus_num(dev->bus), - PCI_SLOT(dev->devfn), PCI_FUNC(dev->devfn)); - } else { + monitor_printf(mon, "OK domain %d, bus %d, slot %d, function %d\n", + 0, pci_bus_num(dev->bus), PCI_SLOT(dev->devfn), + PCI_FUNC(dev->devfn)); + } else monitor_printf(mon, "failed to add %s\n", opts); - return -1; - } - - return 0; } #endif diff --git a/qemu-monitor.hx b/qemu-monitor.hx index a8f194c..fba4c3f 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -858,8 +858,7 @@ ETEXI .args_type = "pci_addr:s,type:s,opts:s?", .params = "auto|[[:]:] nic|storage [[vlan=n][,macaddr=addr][,model=type]] [file=file][,if=type][,bus=nr]...", .help = "hot-add PCI device", - .user_print = pci_device_hot_add_print, - .mhandler.cmd_new = pci_device_hot_add, + .mhandler.cmd = pci_device_hot_add, }, #endif diff --git a/sysemu.h b/sysemu.h index fa921df..47975b5 100644 --- a/sysemu.h +++ b/sysemu.h @@ -201,8 +201,7 @@ extern DriveInfo *drive_init(QemuOpts *arg, void *machine, int *fatal_error); DriveInfo *add_init_drive(const char *opts); /* pci-hotplug */ -void pci_device_hot_add_print(Monitor *mon, const QObject *data); -int pci_device_hot_add(Monitor *mon, const QDict *qdict, QObject **ret_data); +void pci_device_hot_add(Monitor *mon, const QDict *qdict); void drive_hot_add(Monitor *mon, const QDict *qdict); int pci_device_hot_remove(Monitor *mon, const char *pci_addr); int do_pci_device_hot_remove(Monitor *mon, const QDict *qdict, -- cgit v1.1 From b752daf03092b6720e39fdf7f4198eec95f71468 Mon Sep 17 00:00:00 2001 From: Markus Armbruster Date: Wed, 12 May 2010 10:53:01 +0200 Subject: Revert "monitor: Convert do_pci_device_hot_remove() to QObject" We don't want pci_del in QMP. Use device_del instead. This reverts commit 6848d827162fea039f2658414a4adb6164a4f9b0. Conflicts: hw/pci-hotplug.c sysemu.h Signed-off-by: Markus Armbruster --- hw/pci-hotplug.c | 5 ++--- qemu-monitor.hx | 3 +-- sysemu.h | 3 +-- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/hw/pci-hotplug.c b/hw/pci-hotplug.c index 22a7ce4..37ac015 100644 --- a/hw/pci-hotplug.c +++ b/hw/pci-hotplug.c @@ -277,8 +277,7 @@ int pci_device_hot_remove(Monitor *mon, const char *pci_addr) return qdev_unplug(&d->qdev); } -int do_pci_device_hot_remove(Monitor *mon, const QDict *qdict, - QObject **ret_data) +void do_pci_device_hot_remove(Monitor *mon, const QDict *qdict) { - return pci_device_hot_remove(mon, qdict_get_str(qdict, "pci_addr")); + pci_device_hot_remove(mon, qdict_get_str(qdict, "pci_addr")); } diff --git a/qemu-monitor.hx b/qemu-monitor.hx index fba4c3f..b6e3467 100644 --- a/qemu-monitor.hx +++ b/qemu-monitor.hx @@ -874,8 +874,7 @@ ETEXI .args_type = "pci_addr:s", .params = "[[:]:]", .help = "hot remove PCI device", - .user_print = monitor_user_noop, - .mhandler.cmd_new = do_pci_device_hot_remove, + .mhandler.cmd = do_pci_device_hot_remove, }, #endif diff --git a/sysemu.h b/sysemu.h index 47975b5..643c0c6 100644 --- a/sysemu.h +++ b/sysemu.h @@ -204,8 +204,7 @@ DriveInfo *add_init_drive(const char *opts); void pci_device_hot_add(Monitor *mon, const QDict *qdict); void drive_hot_add(Monitor *mon, const QDict *qdict); int pci_device_hot_remove(Monitor *mon, const char *pci_addr); -int do_pci_device_hot_remove(Monitor *mon, const QDict *qdict, - QObject **ret_data); +void do_pci_device_hot_remove(Monitor *mon, const QDict *qdict); /* serial ports */ -- cgit v1.1 From a875170167f75e63a11f68adc0a15b4e82a6c186 Mon Sep 17 00:00:00 2001 From: Luiz Capitulino Date: Tue, 11 May 2010 17:50:50 -0300 Subject: Revert "Monitor: Return before exiting with 'quit'" This reverts commit 0e8d2b5575938b8876a3c4bb66ee13c5d306fb6d. Next commits will do the same thing in a better way. Signed-off-by: Luiz Capitulino --- monitor.c | 3 +-- sysemu.h | 2 -- vl.c | 18 ------------------ 3 files changed, 1 insertion(+), 22 deletions(-) diff --git a/monitor.c b/monitor.c index a1ebc5d..2e202ff 100644 --- a/monitor.c +++ b/monitor.c @@ -1020,8 +1020,7 @@ static void do_info_cpu_stats(Monitor *mon) */ static int do_quit(Monitor *mon, const QDict *qdict, QObject **ret_data) { - monitor_suspend(mon); - qemu_system_exit_request(); + exit(0); return 0; } diff --git a/sysemu.h b/sysemu.h index 643c0c6..48ee66c 100644 --- a/sysemu.h +++ b/sysemu.h @@ -45,11 +45,9 @@ void cpu_disable_ticks(void); void qemu_system_reset_request(void); void qemu_system_shutdown_request(void); void qemu_system_powerdown_request(void); -void qemu_system_exit_request(void); int qemu_shutdown_requested(void); int qemu_reset_requested(void); int qemu_powerdown_requested(void); -int qemu_exit_requested(void); extern qemu_irq qemu_system_powerdown; void qemu_system_reset(void); diff --git a/vl.c b/vl.c index d77b47c..8c818f0 100644 --- a/vl.c +++ b/vl.c @@ -1708,7 +1708,6 @@ static int shutdown_requested; static int powerdown_requested; int debug_requested; int vmstop_requested; -static int exit_requested; int qemu_shutdown_requested(void) { @@ -1731,12 +1730,6 @@ int qemu_powerdown_requested(void) return r; } -int qemu_exit_requested(void) -{ - /* just return it, we'll exit() anyway */ - return exit_requested; -} - static int qemu_debug_requested(void) { int r = debug_requested; @@ -1807,12 +1800,6 @@ void qemu_system_powerdown_request(void) qemu_notify_event(); } -void qemu_system_exit_request(void) -{ - exit_requested = 1; - qemu_notify_event(); -} - #ifdef _WIN32 static void host_main_loop_wait(int *timeout) { @@ -1949,8 +1936,6 @@ static int vm_can_run(void) return 0; if (debug_requested) return 0; - if (exit_requested) - return 0; return 1; } @@ -2003,9 +1988,6 @@ static void main_loop(void) if ((r = qemu_vmstop_requested())) { vm_stop(r); } - if (qemu_exit_requested()) { - exit(0); - } } pause_all_vcpus(); } -- cgit v1.1 From a691d41a118289e8eb8210e1a824a848497d14a9 Mon Sep 17 00:00:00 2001 From: Luiz Capitulino Date: Tue, 11 May 2010 18:07:04 -0300 Subject: sysemu: Export 'no_shutdown' It's a global variable already, do_quit() will use it. Signed-off-by: Luiz Capitulino --- sysemu.h | 1 + 1 file changed, 1 insertion(+) diff --git a/sysemu.h b/sysemu.h index 48ee66c..879446a 100644 --- a/sysemu.h +++ b/sysemu.h @@ -128,6 +128,7 @@ extern int max_cpus; extern int cursor_hide; extern int graphic_rotate; extern int no_quit; +extern int no_shutdown; extern int semihosting_enabled; extern int old_param; extern int boot_menu; -- cgit v1.1 From 39b59d2606b3360458361ab0f5419b3262dbf46d Mon Sep 17 00:00:00 2001 From: Luiz Capitulino Date: Tue, 11 May 2010 18:08:20 -0300 Subject: Monitor: Return before exiting with 'quit' This is a new version of the (now reverted) following commit: 0e8d2b5575938b8876a3c4bb66ee13c5d306fb6d The 'quit' Monitor command (implemented by do_quit()) calls exit() directly, this is problematic under QMP because QEMU exits before having a chance to send the ok response. Clients don't know if QEMU exited because of a problem or because the 'quit' command has been executed. This commit fixes that by making do_quit() use qemu_system_shutdown_request(), so that we exit gracefully. Thanks to Paolo Bonzini for suggesting this solution. Signed-off-by: Luiz Capitulino --- monitor.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/monitor.c b/monitor.c index 2e202ff..ad50f12 100644 --- a/monitor.c +++ b/monitor.c @@ -1020,7 +1020,10 @@ static void do_info_cpu_stats(Monitor *mon) */ static int do_quit(Monitor *mon, const QDict *qdict, QObject **ret_data) { - exit(0); + monitor_suspend(mon); + no_shutdown = 0; + qemu_system_shutdown_request(); + return 0; } -- cgit v1.1 From 41836a9f7e4da3a265989d79f35c44f659f7b3cf Mon Sep 17 00:00:00 2001 From: Luiz Capitulino Date: Wed, 12 May 2010 16:34:42 -0300 Subject: Fix qtypes' licenses - Change from GPL to LGPL - Add license text when missing - Minor cosmetic changes to make all headers look the same Signed-off-by: Luiz Capitulino --- check-qdict.c | 3 +++ check-qfloat.c | 5 ----- check-qint.c | 3 +++ check-qlist.c | 4 ++-- check-qstring.c | 3 +++ qbool.c | 8 -------- qdict.c | 6 +++--- qdict.h | 12 ++++++++++++ qemu-objects.h | 5 +++-- qerror.c | 2 +- qerror.h | 2 +- qfloat.c | 8 -------- qint.c | 7 ++++--- qint.h | 12 ++++++++++++ qlist.c | 7 ++++--- qlist.h | 7 ++++--- qobject.h | 4 ++-- qstring.c | 7 ++++--- qstring.h | 12 ++++++++++++ 19 files changed, 73 insertions(+), 44 deletions(-) diff --git a/check-qdict.c b/check-qdict.c index f2b4826..2c3089f 100644 --- a/check-qdict.c +++ b/check-qdict.c @@ -5,6 +5,9 @@ * * Authors: * Luiz Capitulino + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. */ #include diff --git a/check-qfloat.c b/check-qfloat.c index 3758700..b71d983 100644 --- a/check-qfloat.c +++ b/check-qfloat.c @@ -1,11 +1,6 @@ /* * QFloat unit-tests. * - * Copyright (C) 2009 Red Hat Inc. - * - * Authors: - * Luiz Capitulino - * * Copyright IBM, Corp. 2009 * * Authors: diff --git a/check-qint.c b/check-qint.c index 49887bb..f3b0316 100644 --- a/check-qint.c +++ b/check-qint.c @@ -5,6 +5,9 @@ * * Authors: * Luiz Capitulino + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. */ #include diff --git a/check-qlist.c b/check-qlist.c index 0117ef3..58984cb 100644 --- a/check-qlist.c +++ b/check-qlist.c @@ -6,8 +6,8 @@ * Authors: * Luiz Capitulino * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. */ #include diff --git a/check-qstring.c b/check-qstring.c index c308a63..c9bafc2 100644 --- a/check-qstring.c +++ b/check-qstring.c @@ -5,6 +5,9 @@ * * Authors: * Luiz Capitulino + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. */ #include diff --git a/qbool.c b/qbool.c index 5ab734c..ad4873f 100644 --- a/qbool.c +++ b/qbool.c @@ -1,14 +1,6 @@ /* * QBool Module * - * Copyright (C) 2009 Red Hat Inc. - * - * Authors: - * Luiz Capitulino - * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. - * * Copyright IBM, Corp. 2009 * * Authors: diff --git a/qdict.c b/qdict.c index aae57bf..175bc17 100644 --- a/qdict.c +++ b/qdict.c @@ -1,13 +1,13 @@ /* - * QDict data type. + * QDict Module * * Copyright (C) 2009 Red Hat Inc. * * Authors: * Luiz Capitulino * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. */ #include "qint.h" diff --git a/qdict.h b/qdict.h index 579dcdd..5e5902c 100644 --- a/qdict.h +++ b/qdict.h @@ -1,3 +1,15 @@ +/* + * QDict Module + * + * Copyright (C) 2009 Red Hat Inc. + * + * Authors: + * Luiz Capitulino + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. + */ + #ifndef QDICT_H #define QDICT_H diff --git a/qemu-objects.h b/qemu-objects.h index e1d1e0c..c53fbaa 100644 --- a/qemu-objects.h +++ b/qemu-objects.h @@ -6,9 +6,10 @@ * Authors: * Luiz Capitulino * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. */ + #ifndef QEMU_OBJECTS_H #define QEMU_OBJECTS_H diff --git a/qerror.c b/qerror.c index 034c7de..44d0bf8 100644 --- a/qerror.c +++ b/qerror.c @@ -1,5 +1,5 @@ /* - * QError: QEMU Error data-type. + * QError Module * * Copyright (C) 2009 Red Hat Inc. * diff --git a/qerror.h b/qerror.h index c98c61a..77ae574 100644 --- a/qerror.h +++ b/qerror.h @@ -1,5 +1,5 @@ /* - * QError header file. + * QError Module * * Copyright (C) 2009 Red Hat Inc. * diff --git a/qfloat.c b/qfloat.c index 05215f5..f8c8a2e 100644 --- a/qfloat.c +++ b/qfloat.c @@ -1,14 +1,6 @@ /* * QFloat Module * - * Copyright (C) 2009 Red Hat Inc. - * - * Authors: - * Luiz Capitulino - * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. - * * Copyright IBM, Corp. 2009 * * Authors: diff --git a/qint.c b/qint.c index 447e847..fb3823a 100644 --- a/qint.c +++ b/qint.c @@ -1,14 +1,15 @@ /* - * QInt data type. + * QInt Module * * Copyright (C) 2009 Red Hat Inc. * * Authors: * Luiz Capitulino * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. */ + #include "qint.h" #include "qobject.h" #include "qemu-common.h" diff --git a/qint.h b/qint.h index 672b321..6b1a15c 100644 --- a/qint.h +++ b/qint.h @@ -1,3 +1,15 @@ +/* + * QInt Module + * + * Copyright (C) 2009 Red Hat Inc. + * + * Authors: + * Luiz Capitulino + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. + */ + #ifndef QINT_H #define QINT_H diff --git a/qlist.c b/qlist.c index 5fccb7d..5730fb8 100644 --- a/qlist.c +++ b/qlist.c @@ -1,14 +1,15 @@ /* - * QList data type. + * QList Module * * Copyright (C) 2009 Red Hat Inc. * * Authors: * Luiz Capitulino * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. */ + #include "qlist.h" #include "qobject.h" #include "qemu-queue.h" diff --git a/qlist.h b/qlist.h index a3261e1..dbe7b92 100644 --- a/qlist.h +++ b/qlist.h @@ -1,14 +1,15 @@ /* - * QList data type header. + * QList Module * * Copyright (C) 2009 Red Hat Inc. * * Authors: * Luiz Capitulino * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. */ + #ifndef QLIST_H #define QLIST_H diff --git a/qobject.h b/qobject.h index 07de211..d42386d 100644 --- a/qobject.h +++ b/qobject.h @@ -8,8 +8,8 @@ * Authors: * Luiz Capitulino * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. * * QObject Reference Counts Terminology * ------------------------------------ diff --git a/qstring.c b/qstring.c index 740a106..4e2ba08 100644 --- a/qstring.c +++ b/qstring.c @@ -1,14 +1,15 @@ /* - * QString data type. + * QString Module * * Copyright (C) 2009 Red Hat Inc. * * Authors: * Luiz Capitulino * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. */ + #include "qobject.h" #include "qstring.h" #include "qemu-common.h" diff --git a/qstring.h b/qstring.h index 6aaa7d5..84ccd96 100644 --- a/qstring.h +++ b/qstring.h @@ -1,3 +1,15 @@ +/* + * QString Module + * + * Copyright (C) 2009 Red Hat Inc. + * + * Authors: + * Luiz Capitulino + * + * This work is licensed under the terms of the GNU LGPL, version 2.1 or later. + * See the COPYING.LIB file in the top-level directory. + */ + #ifndef QSTRING_H #define QSTRING_H -- cgit v1.1