3 # SPDX-License-Identifier: BSD-2-Clause
5 # Copyright (c) 2018-2020 Gavin D. Howard and contributors.
7 # Redistribution and use in source and binary forms, with or without
8 # modification, are permitted provided that the following conditions are met:
10 # * Redistributions of source code must retain the above copyright notice, this
11 # list of conditions and the following disclaimer.
13 # * Redistributions in binary form must reproduce the above copyright notice,
14 # this list of conditions and the following disclaimer in the documentation
15 # and/or other materials provided with the distribution.
17 # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
18 # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
21 # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
22 # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
23 # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
25 # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
26 # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27 # POSSIBILITY OF SUCH DAMAGE.
36 _readlink_d=$(dirname "$_readlink_f")
41 _readlink_lsout=$(ls -dl "$_readlink_f")
42 _readlink_link=$(printf '%s' "${_readlink_lsout#*$_readlink_arrow}")
44 while [ -z "${_readlink_lsout##*$_readlink_arrow*}" ]; do
45 _readlink_f="$_readlink_d/$_readlink_link"
46 _readlink_d=$(dirname "$_readlink_f")
47 _readlink_lsout=$(ls -dl "$_readlink_f")
48 _readlink_link=$(printf '%s' "${_readlink_lsout#*$_readlink_arrow}")
51 printf '%s' "${_readlink_f##*$_readlink_d/}"
56 if [ "$#" -ne 2 ]; then
57 printf 'Invalid number of args to err_exit\n'
62 printf '\nexiting...\n'
80 _die_str=$(printf '\n%s %s on test:\n\n %s\n' "$_die_d" "$_die_msg" "$_die_name")
82 err_exit "$_die_str" "$_die_err"
90 _checkcrash_error="$1"
96 if [ "$_checkcrash_error" -gt 127 ]; then
97 die "$_checkcrash_d" "crashed ($_checkcrash_error)" \
98 "$_checkcrash_name" "$_checkcrash_error"
107 _checktest_error="$1"
116 _checktest_exebase="$1"
119 checkcrash "$_checktest_d" "$_checktest_error" "$_checktest_name"
121 if [ "$_checktest_error" -eq 0 ]; then
122 die "$_checktest_d" "returned no error" "$_checktest_name" 127
125 if [ "$_checktest_error" -eq 100 ]; then
127 _checktest_output=$(cat "$_checktest_out")
128 _checktest_fatal_error="Fatal error"
130 if [ "${_checktest_output##*$_checktest_fatal_error*}" ]; then
131 printf "%s\n" "$_checktest_output"
132 die "$_checktest_d" "had memory errors on a non-fatal error" \
133 "$_checktest_name" "$_checktest_error"
137 if [ ! -s "$_checktest_out" ]; then
138 die "$_checktest_d" "produced no error message" "$_checktest_name" "$_checktest_error"
141 # Display the error messages if not directly running exe.
142 # This allows the script to print valgrind output.
143 if [ "$_checktest_exebase" != "bc" -a "$_checktest_exebase" != "dc" ]; then
144 cat "$_checktest_out"
148 substring_replace() {
150 _substring_replace_str="$1"
153 _substring_replace_needle="$1"
156 _substring_replace_replacement="$1"
159 _substring_replace_result=$(printf '%s\n' "$_substring_replace_str" | \
160 sed -e "s!$_substring_replace_needle!$_substring_replace_replacement!g")
162 printf '%s' "$_substring_replace_result"
167 _gen_nlspath_nlspath="$1"
170 _gen_nlspath_locale="$1"
173 _gen_nlspath_execname="$1"
176 _gen_nlspath_char="@"
177 _gen_nlspath_modifier="${_gen_nlspath_locale#*$_gen_nlspath_char}"
178 _gen_nlspath_tmplocale="${_gen_nlspath_locale%%$_gen_nlspath_char*}"
180 _gen_nlspath_char="."
181 _gen_nlspath_charset="${_gen_nlspath_tmplocale#*$_gen_nlspath_char}"
182 _gen_nlspath_tmplocale="${_gen_nlspath_tmplocale%%$_gen_nlspath_char*}"
184 if [ "$_gen_nlspath_charset" = "$_gen_nlspath_tmplocale" ]; then
185 _gen_nlspath_charset=""
188 _gen_nlspath_char="_"
189 _gen_nlspath_territory="${_gen_nlspath_tmplocale#*$_gen_nlspath_char}"
190 _gen_nlspath_language="${_gen_nlspath_tmplocale%%$_gen_nlspath_char*}"
192 if [ "$_gen_nlspath_territory" = "$_gen_nlspath_tmplocale" ]; then
193 _gen_nlspath_territory=""
196 if [ "$_gen_nlspath_language" = "$_gen_nlspath_tmplocale" ]; then
197 _gen_nlspath_language=""
200 _gen_nlspath_needles="%%:%L:%N:%l:%t:%c"
202 _gen_nlspath_needles=$(printf '%s' "$_gen_nlspath_needles" | tr ':' '\n')
204 for _gen_nlspath_i in $_gen_nlspath_needles; do
205 _gen_nlspath_nlspath=$(substring_replace "$_gen_nlspath_nlspath" "$_gen_nlspath_i" "|$_gen_nlspath_i|")
208 _gen_nlspath_nlspath=$(substring_replace "$_gen_nlspath_nlspath" "%%" "%")
209 _gen_nlspath_nlspath=$(substring_replace "$_gen_nlspath_nlspath" "%L" "$_gen_nlspath_locale")
210 _gen_nlspath_nlspath=$(substring_replace "$_gen_nlspath_nlspath" "%N" "$_gen_nlspath_execname")
211 _gen_nlspath_nlspath=$(substring_replace "$_gen_nlspath_nlspath" "%l" "$_gen_nlspath_language")
212 _gen_nlspath_nlspath=$(substring_replace "$_gen_nlspath_nlspath" "%t" "$_gen_nlspath_territory")
213 _gen_nlspath_nlspath=$(substring_replace "$_gen_nlspath_nlspath" "%c" "$_gen_nlspath_charset")
215 _gen_nlspath_nlspath=$(printf '%s' "$_gen_nlspath_nlspath" | tr -d '|')
217 printf '%s' "$_gen_nlspath_nlspath"