about summary refs log tree commit diff
path: root/lib
diff options
context:
space:
mode:
authorKirill Elagin <kirelagin@gmail.com>2014-06-10 13:55:25 +0400
committerVladimír Čunát <vcunat@gmail.com>2014-06-11 20:22:58 +0200
commit751a01063dc9f40700e3774c3ee489f5fd1ee8ac (patch)
tree731c09dc7e231c76d1f9b5bd5c5358689271c29f /lib
parentdbf92db3b986bed339f877895081aa8ba3132da4 (diff)
downloadnixlib-751a01063dc9f40700e3774c3ee489f5fd1ee8ac.tar
nixlib-751a01063dc9f40700e3774c3ee489f5fd1ee8ac.tar.gz
nixlib-751a01063dc9f40700e3774c3ee489f5fd1ee8ac.tar.bz2
nixlib-751a01063dc9f40700e3774c3ee489f5fd1ee8ac.tar.lz
nixlib-751a01063dc9f40700e3774c3ee489f5fd1ee8ac.tar.xz
nixlib-751a01063dc9f40700e3774c3ee489f5fd1ee8ac.tar.zst
nixlib-751a01063dc9f40700e3774c3ee489f5fd1ee8ac.zip
lib: Do not take string context into account
Close #2883.
Diffstat (limited to 'lib')
-rw-r--r--lib/strings.nix19
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/strings.nix b/lib/strings.nix
index 5f76da5c33c6..efdc265465f3 100644
--- a/lib/strings.nix
+++ b/lib/strings.nix
@@ -58,12 +58,13 @@ rec {
 
   # Determine whether a string has given prefix/suffix.
   hasPrefix = pref: str:
-     substring 0 (stringLength pref) str == pref;
+    eqStrings (substring 0 (stringLength pref) str) pref;
   hasSuffix = suff: str:
-    let lenStr = stringLength str;
-        lenSuff = stringLength suff;
+    let
+      lenStr = stringLength str;
+      lenSuff = stringLength suff;
     in lenStr >= lenSuff &&
-       substring (lenStr - lenSuff) lenStr str == suff;
+       eqStrings (substring (lenStr - lenSuff) lenStr str) suff;
 
 
   # Convert a string to a list of characters (i.e. singleton strings).
@@ -118,17 +119,21 @@ rec {
   toLower = replaceChars upperChars lowerChars;
   toUpper = replaceChars lowerChars upperChars;
 
+  # Appends string context from another string
+  addContextFrom = a: b: (substring 0 0 a)+b;
 
   # Compares strings not requiring context equality
   # Obviously, a workaround but works on all Nix versions
-  eqStrings = a: b: (a+(substring 0 0 b)) == ((substring 0 0 a)+b);
+  eqStrings = a: b: addContextFrom b a == addContextFrom a b;
 
 
   # Cut a string with a separator and produces a list of strings which were
   # separated by this separator. e.g.,
   # `splitString "." "foo.bar.baz"' returns ["foo" "bar" "baz"].
-  splitString = sep: s:
+  splitString = _sep: _s:
     let
+      sep = addContextFrom _s _sep;
+      s = addContextFrom _sep _s;
       sepLen = stringLength sep;
       sLen = stringLength s;
       lastSearch = sub sLen sepLen;
@@ -167,7 +172,7 @@ rec {
       sufLen = stringLength suf;
       sLen = stringLength s;
     in
-      if sufLen <= sLen && suf == substring (sLen - sufLen) sufLen s then
+      if sufLen <= sLen && eqStrings suf (substring (sLen - sufLen) sufLen s) then
         substring 0 (sLen - sufLen) s
       else
         s;