1
0
mirror of https://github.com/samba-team/samba.git synced 2025-02-26 21:57:41 +03:00

lib/util: Optimise trim_string() to use a single memmove(3)

Signed-off-by: Martin Schwenke <martin@meltin.net>
Reviewed-by: Ralph Boehme <slow@samba.org>

Autobuild-User(master): Martin Schwenke <martins@samba.org>
Autobuild-Date(master): Mon Jun 20 04:47:26 CEST 2016 on sn-devel-144
This commit is contained in:
Martin Schwenke 2016-06-19 06:47:09 +10:00 committed by Martin Schwenke
parent 92cfd1e9b8
commit 2513d5e11c

View File

@ -802,24 +802,29 @@ _PUBLIC_ bool trim_string(char *s, const char *front, const char *back)
size_t len;
/* Ignore null or empty strings. */
if (!s || (s[0] == '\0'))
if (!s || (s[0] == '\0')) {
return false;
}
len = strlen(s);
front_len = front? strlen(front) : 0;
back_len = back? strlen(back) : 0;
len = strlen(s);
if (front_len) {
while (len && strncmp(s, front, front_len)==0) {
size_t front_trim = 0;
while (strncmp(s+front_trim, front, front_len)==0) {
front_trim += front_len;
}
if (front_trim > 0) {
/* Must use memmove here as src & dest can
* easily overlap. Found by valgrind. JRA. */
memmove(s, s+front_len, (len-front_len)+1);
len -= front_len;
memmove(s, s+front_trim, (len-front_trim)+1);
len -= front_trim;
ret=true;
}
}
if (back_len) {
while ((len >= back_len) && strncmp(s+len-back_len,back,back_len)==0) {
s[len-back_len]='\0';