aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cutils.c12
-rw-r--r--hw/bt-hci.c2
-rw-r--r--qemu-common.h1
3 files changed, 14 insertions, 1 deletions
diff --git a/cutils.c b/cutils.c
index 9ef2fa627c..8fcb62efed 100644
--- a/cutils.c
+++ b/cutils.c
@@ -50,6 +50,18 @@ char *pstrcat(char *buf, int buf_size, const char *s)
return buf;
}
+/* strdup with a limit */
+char *pstrdup(const char *str, size_t buf_size)
+{
+ size_t len;
+ char *buf;
+
+ len = MIN(buf_size, strlen(str));
+ buf = qemu_malloc(len);
+ pstrcpy(buf, len, str);
+ return buf;
+}
+
int strstart(const char *str, const char *val, const char **ptr)
{
const char *p, *q;
diff --git a/hw/bt-hci.c b/hw/bt-hci.c
index 714e72671c..ab11e498d4 100644
--- a/hw/bt-hci.c
+++ b/hw/bt-hci.c
@@ -1814,7 +1814,7 @@ static void bt_submit_hci(struct HCIInfo *info,
if (hci->device.lmp_name)
free((void *) hci->device.lmp_name);
- hci->device.lmp_name = strndup(PARAM(change_local_name, name),
+ hci->device.lmp_name = pstrdup(PARAM(change_local_name, name),
sizeof(PARAM(change_local_name, name)));
bt_hci_event_complete_status(hci, HCI_SUCCESS);
break;
diff --git a/qemu-common.h b/qemu-common.h
index cc95fe62bb..aca2674622 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -82,6 +82,7 @@ int qemu_timedate_diff(struct tm *tm);
/* cutils.c */
void pstrcpy(char *buf, int buf_size, const char *str);
char *pstrcat(char *buf, int buf_size, const char *s);
+char *pstrdup(const char *str, size_t buf_size);
int strstart(const char *str, const char *val, const char **ptr);
int stristart(const char *str, const char *val, const char **ptr);
time_t mktimegm(struct tm *tm);