diff options
author | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-01-29 11:47:00 +0000 |
---|---|---|
committer | kfraser@localhost.localdomain <kfraser@localhost.localdomain> | 2007-01-29 11:47:00 +0000 |
commit | b83f66feae1269d43bb7ac4d58f80faec7048a7a (patch) | |
tree | 47fb380faf297d99b6315874eea02580c451b284 /xen/common/libelf | |
parent | d0ee6737093998c4c52043d70041427718fead65 (diff) | |
download | xen-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.c | 16 | ||||
-rw-r--r-- | xen/common/libelf/libelf-private.h | 10 |
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_ */ |