From ba8fa1be9e5c422b700d75ff032de79c3ec15017 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Tue, 30 Jan 2007 16:23:43 +0000 Subject: [PATCH] Clean up arch_get_xen_caps() to not use sprintf(). Based on a patch from Christoph Egger Signed-off-by: Keir Fraser --- xen/arch/ia64/xen/xensetup.c | 17 +++++----- xen/arch/x86/setup.c | 66 ++++++++++++++---------------------- 2 files changed, 34 insertions(+), 49 deletions(-) diff --git a/xen/arch/ia64/xen/xensetup.c b/xen/arch/ia64/xen/xensetup.c index 3692440240..2496683a5e 100644 --- a/xen/arch/ia64/xen/xensetup.c +++ b/xen/arch/ia64/xen/xensetup.c @@ -547,18 +547,19 @@ printk("num_online_cpus=%d, max_cpus=%d\n",num_online_cpus(),max_cpus); void arch_get_xen_caps(xen_capabilities_info_t info) { - char *p=info; int major = xen_major_version(); int minor = xen_minor_version(); + char s[32]; - p += snprintf(p,sizeof(info), "xen-%d.%d-ia64 ", major, minor); + info[0] = '\0'; - if (vmx_enabled) - p += snprintf(p,sizeof(info) - (p - info),"hvm-%d.%d-ia64 ", major, minor); - - *(p-1) = 0; - - BUG_ON((p-info)>sizeof(xen_capabilities_info_t)); + snprintf(s, sizeof(s), "xen-%d.%d-ia54 ", major, minor); + safe_strcat(info, s); + if (vmx_enabled) + { + snprintf(s, sizeof(s), "hvm-%d.%d-ia64 ", major, minor); + safe_strcat(info, s); + } } diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 18110c5f3c..9e67c009ca 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -802,69 +802,53 @@ void __init __start_xen(multiboot_info_t *mbi) void arch_get_xen_caps(xen_capabilities_info_t info) { - char *p = info; - int i = 0; int major = xen_major_version(); int minor = xen_minor_version(); + char s[32]; + + info[0] = '\0'; #if defined(CONFIG_X86_32) && !defined(CONFIG_X86_PAE) - i = snprintf(p, sizeof(xen_capabilities_info_t), - "xen-%d.%d-x86_32 ", major, minor); - p += i; - if ( hvm_enabled ) { - i = snprintf(p, sizeof(xen_capabilities_info_t) - i, - "hvm-%d.%d-x86_32 ", major, minor); - p += i; + snprintf(s, sizeof(s), "xen-%d.%d-x86_32 ", major, minor); + safe_strcat(info, s); + if ( hvm_enabled ) + { + snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor); + safe_strcat(info, s); } #elif defined(CONFIG_X86_32) && defined(CONFIG_X86_PAE) - i = snprintf(p, sizeof(xen_capabilities_info_t), - "xen-%d.%d-x86_32p ", major, minor); - p += i; + snprintf(s, sizeof(s), "xen-%d.%d-x86_32p ", major, minor); + safe_strcat(info, s); if ( hvm_enabled ) { - i = snprintf(p, sizeof(xen_capabilities_info_t), - "hvm-%d.%d-x86_32 ", major, minor); - p += i; - i = snprintf(p, sizeof(xen_capabilities_info_t) - i, - "hvm-%d.%d-x86_32p ", major, minor); - p += i; + snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor); + safe_strcat(info, s); + snprintf(s, sizeof(s), "hvm-%d.%d-x86_32p ", major, minor); + safe_strcat(info, s); } #elif defined(CONFIG_X86_64) - i = snprintf(p, sizeof(xen_capabilities_info_t), - "xen-%d.%d-x86_64 ", major, minor); - p += i; + snprintf(s, sizeof(s), "xen-%d.%d-x86_64 ", major, minor); + safe_strcat(info, s); #ifdef CONFIG_COMPAT - i = snprintf(p, sizeof(xen_capabilities_info_t) - i, - "xen-%d.%d-x86_32p ", major, minor); - p += i; + snprintf(s, sizeof(s), "xen-%d.%d-x86_32p ", major, minor); + safe_strcat(info, s); #endif if ( hvm_enabled ) { - i = snprintf(p, sizeof(xen_capabilities_info_t) - i, - "hvm-%d.%d-x86_32 ", major, minor); - p += i; - i = snprintf(p, sizeof(xen_capabilities_info_t) - i, - "hvm-%d.%d-x86_32p ", major, minor); - p += i; - i = snprintf(p, sizeof(xen_capabilities_info_t) - i, - "hvm-%d.%d-x86_64 ", major, minor); - p += i; + snprintf(s, sizeof(s), "hvm-%d.%d-x86_32 ", major, minor); + safe_strcat(info, s); + snprintf(s, sizeof(s), "hvm-%d.%d-x86_32p ", major, minor); + safe_strcat(info, s); + snprintf(s, sizeof(s), "hvm-%d.%d-x86_64 ", major, minor); + safe_strcat(info, s); } -#else - - p++; - #endif - - *(p-1) = 0; - - BUG_ON((p - info) > sizeof(xen_capabilities_info_t)); } /* -- 2.30.2