
On Mon, May 09, 2011 at 05:24:09PM +0800, Lai Jiangshan wrote:
These VIR_XXXX0 APIs make us confused, use the non-0-suffix APIs instead.
How these coversions works? The magic is using ##. #define high_levle_api(fmt, ...) low_levle_api(fmt, ##__VA_ARGS__) When __VA_ARGS__ is empty, "##" will swallow the "," in "fmt," to avoid compile error.
example: origin after CPP high_levle_api("%d", a_int) low_levle_api("%d", a_int) high_levle_api("a string") low_levle_api("a string")
About 400 conversions.
8 special conversions: VIR_XXXX0("") -> VIR_XXXX(" ") (avoid empty format) 2 conversions VIR_XXXX0(string_literal_with_%) -> VIR_XXXX(%->%%) 0 conversions VIR_XXXX0(non_string_literal) -> VIR_XXXX("%s", non_string_literal) (for security) 6 conversions
Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com> --- daemon/libvirtd.c | 76 ++++++++++---------- daemon/remote.c | 32 ++++---- daemon/stream.c | 2 +- examples/domain-events/events-c/event-test.c | 10 +-- src/cpu/cpu_x86.c | 4 +- src/esx/esx_driver.c | 8 +- src/esx/esx_vi.c | 12 ++-- src/libvirt.c | 4 +- src/libxl/libxl_driver.c | 18 ++-- src/lxc/lxc_conf.c | 4 +- src/lxc/lxc_container.c | 10 +- src/lxc/lxc_controller.c | 8 +- src/lxc/lxc_driver.c | 12 ++-- src/network/bridge_driver.c | 4 +- src/node_device/node_device_hal.c | 28 ++++---- src/node_device/node_device_linux_sysfs.c | 2 +- src/node_device/node_device_udev.c | 8 +- src/nwfilter/nwfilter_ebiptables_driver.c | 2 +- src/openvz/openvz_driver.c | 6 +- src/phyp/phyp_driver.c | 102 +++++++++++++------------- src/qemu/qemu_audit.c | 30 ++++---- src/qemu/qemu_capabilities.c | 4 +- src/qemu/qemu_cgroup.c | 2 +- src/qemu/qemu_conf.c | 4 +- src/qemu/qemu_domain.c | 2 +- src/qemu/qemu_driver.c | 10 +- src/qemu/qemu_hotplug.c | 22 +++--- src/qemu/qemu_migration.c | 14 ++-- src/qemu/qemu_monitor.c | 2 +- src/qemu/qemu_monitor_json.c | 36 +++++----- src/qemu/qemu_monitor_text.c | 8 +- src/qemu/qemu_process.c | 48 ++++++------ src/remote/remote_driver.c | 64 ++++++++-------- src/secret/secret_driver.c | 2 +- src/storage/storage_backend_logical.c | 2 +- src/test/test_driver.c | 2 +- src/uml/uml_conf.c | 2 +- src/uml/uml_driver.c | 14 ++-- src/util/bridge.c | 10 +- src/util/cgroup.c | 4 +- src/util/command.c | 18 ++-- src/util/event.c | 4 +- src/util/event_poll.c | 2 +- src/util/hash.c | 2 +- src/util/json.c | 8 +- src/util/logging.c | 10 +- src/util/logging.h | 24 ++---- src/util/pci.c | 4 +- src/util/util.c | 8 +- src/util/virtaudit.c | 2 +- src/vbox/vbox_driver.c | 14 ++-- src/vbox/vbox_tmpl.c | 32 ++++---- src/vmx/vmx.c | 4 +- src/xen/xen_driver.c | 28 ++++---- src/xen/xen_hypervisor.c | 18 ++-- src/xen/xen_inotify.c | 12 ++-- src/xen/xend_internal.c | 2 +- src/xen/xs_internal.c | 12 ++-- src/xenxs/xen_sxpr.c | 2 +- 59 files changed, 415 insertions(+), 425 deletions(-)
diff --git a/src/util/logging.h b/src/util/logging.h index 0dba78c..e948077 100644 --- a/src/util/logging.h +++ b/src/util/logging.h @@ -32,35 +32,27 @@ */ # ifdef ENABLE_DEBUG # define VIR_DEBUG_INT(category, f, l, fmt,...) \ - virLogMessage(category, VIR_LOG_DEBUG, f, l, 0, fmt, __VA_ARGS__) + virLogMessage(category, VIR_LOG_DEBUG, f, l, 0, fmt, ##__VA_ARGS__) # else # define VIR_DEBUG_INT(category, f, l, fmt,...) \ do { } while (0) # endif /* !ENABLE_DEBUG */
# define VIR_INFO_INT(category, f, l, fmt,...) \ - virLogMessage(category, VIR_LOG_INFO, f, l, 0, fmt, __VA_ARGS__) + virLogMessage(category, VIR_LOG_INFO, f, l, 0, fmt, ##__VA_ARGS__) # define VIR_WARN_INT(category, f, l, fmt,...) \ - virLogMessage(category, VIR_LOG_WARN, f, l, 0, fmt, __VA_ARGS__) + virLogMessage(category, VIR_LOG_WARN, f, l, 0, fmt, ##__VA_ARGS__) # define VIR_ERROR_INT(category, f, l, fmt,...) \ - virLogMessage(category, VIR_LOG_ERROR, f, l, 0, fmt, __VA_ARGS__) + virLogMessage(category, VIR_LOG_ERROR, f, l, 0, fmt, ##__VA_ARGS__)
# define VIR_DEBUG(fmt,...) \ - VIR_DEBUG_INT("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__) -# define VIR_DEBUG0(msg) \ - VIR_DEBUG_INT("file." __FILE__, __func__, __LINE__, "%s", msg) + VIR_DEBUG_INT("file." __FILE__, __func__, __LINE__, fmt, ##__VA_ARGS__) # define VIR_INFO(fmt,...) \ - VIR_INFO_INT("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__) -# define VIR_INFO0(msg) \ - VIR_INFO_INT("file." __FILE__, __func__, __LINE__, "%s", msg) + VIR_INFO_INT("file." __FILE__, __func__, __LINE__, fmt, ##__VA_ARGS__) # define VIR_WARN(fmt,...) \ - VIR_WARN_INT("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__) -# define VIR_WARN0(msg) \ - VIR_WARN_INT("file." __FILE__, __func__, __LINE__, "%s", msg) + VIR_WARN_INT("file." __FILE__, __func__, __LINE__, fmt, ##__VA_ARGS__) # define VIR_ERROR(fmt,...) \ - VIR_ERROR_INT("file." __FILE__, __func__, __LINE__, fmt, __VA_ARGS__) -# define VIR_ERROR0(msg) \ - VIR_ERROR_INT("file." __FILE__, __func__, __LINE__, "%s", msg) + VIR_ERROR_INT("file." __FILE__, __func__, __LINE__, fmt, ##__VA_ARGS__)
ACK Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :|