aboutsummaryrefslogtreecommitdiffstats
path: root/xen/common/libelf
diff options
context:
space:
mode:
authorkfraser@localhost.localdomain <kfraser@localhost.localdomain>2007-01-29 11:47:00 +0000
committerkfraser@localhost.localdomain <kfraser@localhost.localdomain>2007-01-29 11:47:00 +0000
commitb83f66feae1269d43bb7ac4d58f80faec7048a7a (patch)
tree47fb380faf297d99b6315874eea02580c451b284 /xen/common/libelf
parentd0ee6737093998c4c52043d70041427718fead65 (diff)
downloadxen-b83f66feae1269d43bb7ac4d58f80faec7048a7a.tar.gz
xen-b83f66feae1269d43bb7ac4d58f80faec7048a7a.tar.bz2
xen-b83f66feae1269d43bb7ac4d58f80faec7048a7a.zip
libelf cannot rely on the strlcpy() BSD-ism.
Make a private definition based on strncpy and strlen. Signed-off-by: Keir Fraser <keir@xensource.com>
Diffstat (limited to 'xen/common/libelf')
-rw-r--r--xen/common/libelf/libelf-dominfo.c16
-rw-r--r--xen/common/libelf/libelf-private.h10
2 files changed, 18 insertions, 8 deletions
diff --git a/xen/common/libelf/libelf-dominfo.c b/xen/common/libelf/libelf-dominfo.c
index d3ddcdb6fe..c353acde16 100644
--- a/xen/common/libelf/libelf-dominfo.c
+++ b/xen/common/libelf/libelf-dominfo.c
@@ -128,16 +128,16 @@ int elf_xen_parse_note(struct elf_binary *elf,
switch (type)
{
case XEN_ELFNOTE_LOADER:
- strlcpy(parms->loader, str, sizeof(parms->loader));
+ elf_strlcpy(parms->loader, str, sizeof(parms->loader));
break;
case XEN_ELFNOTE_GUEST_OS:
- strlcpy(parms->guest_os, str, sizeof(parms->guest_os));
+ elf_strlcpy(parms->guest_os, str, sizeof(parms->guest_os));
break;
case XEN_ELFNOTE_GUEST_VERSION:
- strlcpy(parms->guest_ver, str, sizeof(parms->guest_ver));
+ elf_strlcpy(parms->guest_ver, str, sizeof(parms->guest_ver));
break;
case XEN_ELFNOTE_XEN_VERSION:
- strlcpy(parms->xen_ver, str, sizeof(parms->xen_ver));
+ elf_strlcpy(parms->xen_ver, str, sizeof(parms->xen_ver));
break;
case XEN_ELFNOTE_PAE_MODE:
if (0 == strcmp(str, "yes"))
@@ -224,13 +224,13 @@ int elf_xen_parse_guest_info(struct elf_binary *elf,
/* strings */
if (0 == strcmp(name, "LOADER"))
- strlcpy(parms->loader, value, sizeof(parms->loader));
+ elf_strlcpy(parms->loader, value, sizeof(parms->loader));
if (0 == strcmp(name, "GUEST_OS"))
- strlcpy(parms->guest_os, value, sizeof(parms->guest_os));
+ elf_strlcpy(parms->guest_os, value, sizeof(parms->guest_os));
if (0 == strcmp(name, "GUEST_VER"))
- strlcpy(parms->guest_ver, value, sizeof(parms->guest_ver));
+ elf_strlcpy(parms->guest_ver, value, sizeof(parms->guest_ver));
if (0 == strcmp(name, "XEN_VER"))
- strlcpy(parms->xen_ver, value, sizeof(parms->xen_ver));
+ elf_strlcpy(parms->xen_ver, value, sizeof(parms->xen_ver));
if (0 == strcmp(name, "PAE"))
{
if (0 == strcmp(value, "yes[extended-cr3]"))
diff --git a/xen/common/libelf/libelf-private.h b/xen/common/libelf/libelf-private.h
index 4d9ef5ba4f..146251fe00 100644
--- a/xen/common/libelf/libelf-private.h
+++ b/xen/common/libelf/libelf-private.h
@@ -21,6 +21,8 @@
#define bswap_32(x) swab32(x)
#define bswap_64(x) swab64(x)
+#define elf_strlcpy(d,s,c) strlcpy(d,s,c)
+
#else /* !__XEN__ */
#include <stdio.h>
@@ -50,6 +52,14 @@
xc_set_error(XC_INVALID_KERNEL, fmt , ## args ); \
} while (0)
+/* SysV unices have no strlcpy/strlcat. */
+static inline size_t elf_strlcpy(char *dest, const char *src, size_t size)
+{
+ strncpy(dest, src, size-1);
+ dest[size-1] = '\0';
+ return strlen(src);
+}
+
#endif
#endif /* __LIBELF_PRIVATE_H_ */