lib: Do not take string context into account

Close #2883.

authored by Kirill Elagin and committed by Vladimír Čunát 751a0106 dbf92db3

+12 -7
+12 -7
lib/strings.nix
··· 58 58 59 59 # Determine whether a string has given prefix/suffix. 60 60 hasPrefix = pref: str: 61 - substring 0 (stringLength pref) str == pref; 61 + eqStrings (substring 0 (stringLength pref) str) pref; 62 62 hasSuffix = suff: str: 63 - let lenStr = stringLength str; 64 - lenSuff = stringLength suff; 63 + let 64 + lenStr = stringLength str; 65 + lenSuff = stringLength suff; 65 66 in lenStr >= lenSuff && 66 - substring (lenStr - lenSuff) lenStr str == suff; 67 + eqStrings (substring (lenStr - lenSuff) lenStr str) suff; 67 68 68 69 69 70 # Convert a string to a list of characters (i.e. singleton strings). ··· 118 119 toLower = replaceChars upperChars lowerChars; 119 120 toUpper = replaceChars lowerChars upperChars; 120 121 122 + # Appends string context from another string 123 + addContextFrom = a: b: (substring 0 0 a)+b; 121 124 122 125 # Compares strings not requiring context equality 123 126 # Obviously, a workaround but works on all Nix versions 124 - eqStrings = a: b: (a+(substring 0 0 b)) == ((substring 0 0 a)+b); 127 + eqStrings = a: b: addContextFrom b a == addContextFrom a b; 125 128 126 129 127 130 # Cut a string with a separator and produces a list of strings which were 128 131 # separated by this separator. e.g., 129 132 # `splitString "." "foo.bar.baz"' returns ["foo" "bar" "baz"]. 130 - splitString = sep: s: 133 + splitString = _sep: _s: 131 134 let 135 + sep = addContextFrom _s _sep; 136 + s = addContextFrom _sep _s; 132 137 sepLen = stringLength sep; 133 138 sLen = stringLength s; 134 139 lastSearch = sub sLen sepLen; ··· 167 172 sufLen = stringLength suf; 168 173 sLen = stringLength s; 169 174 in 170 - if sufLen <= sLen && suf == substring (sLen - sufLen) sufLen s then 175 + if sufLen <= sLen && eqStrings suf (substring (sLen - sufLen) sufLen s) then 171 176 substring 0 (sLen - sufLen) s 172 177 else 173 178 s;