1.1 --- a/ucx/string.c Mon Oct 26 14:09:45 2015 +0100 1.2 +++ b/ucx/string.c Tue Oct 27 15:29:34 2015 +0100 1.3 @@ -175,6 +175,24 @@ 1.4 return n; 1.5 } 1.6 1.7 +sstr_t sstrstr(sstr_t string, sstr_t match) { 1.8 + if (match.length == 0) { 1.9 + return string; 1.10 + } 1.11 + 1.12 + for (size_t i = 0 ; i < string.length ; i++) { 1.13 + sstr_t substr = sstrsubs(string, i); 1.14 + if (sstrprefix(substr, match)) { 1.15 + return substr; 1.16 + } 1.17 + } 1.18 + 1.19 + sstr_t emptystr; 1.20 + emptystr.length = 0; 1.21 + emptystr.ptr = NULL; 1.22 + return emptystr; 1.23 +} 1.24 + 1.25 sstr_t* sstrsplit(sstr_t s, sstr_t d, ssize_t *n) { 1.26 return sstrsplit_a(ucx_default_allocator(), s, d, n); 1.27 } 1.28 @@ -201,23 +219,13 @@ 1.29 } 1.30 1.31 for (size_t i = 0 ; i < s.length ; i++) { 1.32 - if (sv.ptr[i] == d.ptr[0]) { 1.33 - _Bool match = 1; 1.34 - for (size_t j = 1 ; j < d.length ; j++) { 1.35 - if (j+i < s.length) { 1.36 - match &= (sv.ptr[i+j] == d.ptr[j]); 1.37 - } else { 1.38 - match = 0; 1.39 - break; 1.40 - } 1.41 + sstr_t substr = sstrsubs(sv, i); 1.42 + if (sstrprefix(substr, d)) { 1.43 + (*n)++; 1.44 + for (size_t j = 0 ; j < d.length ; j++) { 1.45 + sv.ptr[i+j] = 0; 1.46 } 1.47 - if (match) { 1.48 - (*n)++; 1.49 - for (size_t j = 0 ; j < d.length ; j++) { 1.50 - sv.ptr[i+j] = 0; 1.51 - } 1.52 - i += d.length - 1; // -1, because the loop will do a i++ 1.53 - } 1.54 + i += d.length - 1; // -1, because the loop will do a i++ 1.55 } 1.56 if ((*n) == nmax) break; 1.57 }