summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKerin Millar <kfm@plushkava.net>2024-07-01 00:15:36 +0100
committerKerin Millar <kfm@plushkava.net>2024-07-01 03:31:58 +0100
commitfeaa7438ef8c749179bf5fb99f93a3683e6d40fd (patch)
treebd99c9dc0615e777fb780bcfd0e4a9707357f05d
parentUse curly braces around a variable expansion in chdir() (diff)
downloadgentoo-functions-feaa7438ef8c749179bf5fb99f93a3683e6d40fd.tar.gz
gentoo-functions-feaa7438ef8c749179bf5fb99f93a3683e6d40fd.tar.bz2
gentoo-functions-feaa7438ef8c749179bf5fb99f93a3683e6d40fd.zip
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@plushkava.net>
-rw-r--r--functions.sh41
-rw-r--r--functions/experimental.sh41
-rwxr-xr-xtest-functions2
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
@@ -437,47 +437,6 @@ 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
# to be processed. Otherwise, the lines to be processed shall be read from the
diff --git a/functions/experimental.sh b/functions/experimental.sh
index 1aac078..4d56cfa 100644
--- a/functions/experimental.sh
+++ b/functions/experimental.sh
@@ -95,6 +95,47 @@ str_between()
}
#
+# 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
# four characters must form the special prefix, ".../". It recurses upwards from
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