diff options
-rw-r--r-- | cutils.c | 12 | ||||
-rw-r--r-- | hw/bt-hci.c | 2 | ||||
-rw-r--r-- | qemu-common.h | 1 |
3 files changed, 14 insertions, 1 deletions
@@ -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); |