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:
parent
92cfd1e9b8
commit
2513d5e11c
@ -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';
|
||||
|
Loading…
x
Reference in New Issue
Block a user