From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KyyAV-0005Oj-AN for qemu-devel@nongnu.org; Sat, 08 Nov 2008 19:28:43 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KyyAT-0005OH-Uz for qemu-devel@nongnu.org; Sat, 08 Nov 2008 19:28:42 -0500 Received: from [199.232.76.173] (port=33348 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KyyAT-0005OE-NP for qemu-devel@nongnu.org; Sat, 08 Nov 2008 19:28:41 -0500 Received: from savannah.gnu.org ([199.232.41.3]:45924 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1KyyAT-0000Qb-Bu for qemu-devel@nongnu.org; Sat, 08 Nov 2008 19:28:41 -0500 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.63) (envelope-from ) id 1KyyAS-00055p-Sw for qemu-devel@nongnu.org; Sun, 09 Nov 2008 00:28:40 +0000 Received: from balrog by cvs.savannah.gnu.org with local (Exim 4.63) (envelope-from ) id 1KyyAS-00055l-Ip for qemu-devel@nongnu.org; Sun, 09 Nov 2008 00:28:40 +0000 MIME-Version: 1.0 Errors-To: balrog Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Andrzej Zaborowski Message-Id: Date: Sun, 09 Nov 2008 00:28:40 +0000 Subject: [Qemu-devel] [5653] Add qemu_strndup: qemu_strdup with length limit. Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 5653 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=5653 Author: balrog Date: 2008-11-09 00:28:40 +0000 (Sun, 09 Nov 2008) Log Message: ----------- Add qemu_strndup: qemu_strdup with length limit. Also optimise qemu_strdup by using memcpy - using pstrcpy is usually suboptimal. Modified Paths: -------------- trunk/hw/bt-hci.c trunk/qemu-common.h trunk/qemu-malloc.c Modified: trunk/hw/bt-hci.c =================================================================== --- trunk/hw/bt-hci.c 2008-11-09 00:04:26 UTC (rev 5652) +++ trunk/hw/bt-hci.c 2008-11-09 00:28:40 UTC (rev 5653) @@ -1137,7 +1137,7 @@ hci->device.inquiry_scan = 0; hci->device.page_scan = 0; if (hci->device.lmp_name) - free((void *) hci->device.lmp_name); + qemu_free((void *) hci->device.lmp_name); hci->device.lmp_name = 0; hci->device.class[0] = 0x00; hci->device.class[1] = 0x00; @@ -1815,8 +1815,8 @@ LENGTH_CHECK(change_local_name); if (hci->device.lmp_name) - free((void *) hci->device.lmp_name); - hci->device.lmp_name = strndup(PARAM(change_local_name, name), + qemu_free((void *) hci->device.lmp_name); + hci->device.lmp_name = qemu_strndup(PARAM(change_local_name, name), sizeof(PARAM(change_local_name, name))); bt_hci_event_complete_status(hci, HCI_SUCCESS); break; @@ -2191,7 +2191,7 @@ bt_device_done(&hci->device); if (hci->device.lmp_name) - free((void *) hci->device.lmp_name); + qemu_free((void *) hci->device.lmp_name); /* Be gentle and send DISCONNECT to all connected peers and those * currently waiting for us to accept or reject a connection request. Modified: trunk/qemu-common.h =================================================================== --- trunk/qemu-common.h 2008-11-09 00:04:26 UTC (rev 5652) +++ trunk/qemu-common.h 2008-11-09 00:28:40 UTC (rev 5653) @@ -98,6 +98,7 @@ void *qemu_mallocz(size_t size); void qemu_free(void *ptr); char *qemu_strdup(const char *str); +char *qemu_strndup(const char *str, size_t size); void *get_mmap_addr(unsigned long size); Modified: trunk/qemu-malloc.c =================================================================== --- trunk/qemu-malloc.c 2008-11-09 00:04:26 UTC (rev 5652) +++ trunk/qemu-malloc.c 2008-11-09 00:28:40 UTC (rev 5653) @@ -60,6 +60,20 @@ ptr = qemu_malloc(len + 1); if (!ptr) return NULL; - pstrcpy(ptr, len + 1, str); + memcpy(ptr, str, len + 1); return ptr; } + +char *qemu_strndup(const char *str, size_t size) +{ + const char *end = memchr(str, 0, size); + char *new; + + if (end) + size = end - str; + + new = qemu_malloc(size + 1); + new[size] = 0; + + return memcpy(new, str, size); +}