commit:     feaa7438ef8c749179bf5fb99f93a3683e6d40fd
Author:     Kerin Millar <kfm <AT> plushkava <DOT> net>
AuthorDate: Sun Jun 30 23:15:36 2024 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Jul  1 02:31:58 2024 +0000
URL:        
https://gitweb.gentoo.org/proj/gentoo-functions.git/commit/?id=feaa7438

Move substr() to experimental

Though it works very well, I'm not yet ready to commit to it being among
the core functions for the inaugural API level.

Signed-off-by: Kerin Millar <kfm <AT> plushkava.net>

 functions.sh              | 41 -----------------------------------------
 functions/experimental.sh | 41 +++++++++++++++++++++++++++++++++++++++++
 test-functions            |  2 +-
 3 files changed, 42 insertions(+), 42 deletions(-)

diff --git a/functions.sh b/functions.sh
index 087b62d..1926c40 100644
--- a/functions.sh
+++ b/functions.sh
@@ -436,47 +436,6 @@ srandom()
        srandom
 }
 
-#
-# Takes the first parameter as a string (s), the second parameter as a 
numerical
-# position (m) and, optionally, the third parameter as a numerical length (n).
-# It shall then print a <newline> terminated substring of s that is at most, n
-# characters in length and which begins at position m, numbering from 1. If n 
is
-# omitted, or if n specifies more characters than are left in the string, the
-# length of the substring shall be limited by the length of s. The function
-# shall return 0 provided that none of the parameters are invalid.
-#
-substr()
-{
-       local i str
-
-       if [ "$#" -lt 2 ]; then
-               warn "substr: too few arguments (got $#, expected at least 2)"
-               return 1
-       elif ! is_int "$2"; then
-               _warn_for_args substr "$2"
-               return 1
-       elif [ "$#" -ge 3 ]; then
-               if ! is_int "$3"; then
-                       _warn_for_args substr "$3"
-                       return 1
-               elif [ "$3" -lt 0 ]; then
-                       set -- "$1" "$2" 0
-               fi
-       fi
-       str=$1
-       i=0
-       while [ "$(( i += 1 ))" -lt "$2" ]; do
-               str=${str#?}
-       done
-       i=0
-       while [ "${#str}" -gt "${3-${#str}}" ]; do
-               str=${str%?}
-       done
-       if [ "${#str}" -gt 0 ]; then
-               printf '%s\n' "${str}"
-       fi
-}
-
 #
 # Trims leading and trailing whitespace from one or more lines. If at least one
 # parameter is provided, each positional parameter shall be considered as a 
line

diff --git a/functions/experimental.sh b/functions/experimental.sh
index 1aac078..4d56cfa 100644
--- a/functions/experimental.sh
+++ b/functions/experimental.sh
@@ -94,6 +94,47 @@ str_between()
        fi
 }
 
+#
+# Takes the first parameter as a string (s), the second parameter as a 
numerical
+# position (m) and, optionally, the third parameter as a numerical length (n).
+# It shall then print a <newline> terminated substring of s that is at most, n
+# characters in length and which begins at position m, numbering from 1. If n 
is
+# omitted, or if n specifies more characters than are left in the string, the
+# length of the substring shall be limited by the length of s. The function
+# shall return 0 provided that none of the parameters are invalid.
+#
+substr()
+{
+       local i str
+
+       if [ "$#" -lt 2 ]; then
+               warn "substr: too few arguments (got $#, expected at least 2)"
+               return 1
+       elif ! is_int "$2"; then
+               _warn_for_args substr "$2"
+               return 1
+       elif [ "$#" -ge 3 ]; then
+               if ! is_int "$3"; then
+                       _warn_for_args substr "$3"
+                       return 1
+               elif [ "$3" -lt 0 ]; then
+                       set -- "$1" "$2" 0
+               fi
+       fi
+       str=$1
+       i=0
+       while [ "$(( i += 1 ))" -lt "$2" ]; do
+               str=${str#?}
+       done
+       i=0
+       while [ "${#str}" -gt "${3-${#str}}" ]; do
+               str=${str%?}
+       done
+       if [ "${#str}" -gt 0 ]; then
+               printf '%s\n' "${str}"
+       fi
+}
+
 #
 # Takes the first parameter as either a relative pathname or an integer
 # referring to a number of iterations. To be recognised as a pathname, the 
first

diff --git a/test-functions b/test-functions
index 68e73eb..34ff54a 100755
--- a/test-functions
+++ b/test-functions
@@ -793,7 +793,7 @@ test_is_anyof || rc=1
 test_is_subset || rc=1
 test_trueof_all || rc=1
 test_trueof_any || rc=1
-test_substr || rc=1
+#test_substr || rc=1
 
 cleanup_tmpdir
 

Reply via email to