git: e6e38bc522e2 - main - rc.d/ldconfig: Compute ldconfig paths in a function

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Fri, 12 Apr 2024 21:36:24 UTC
The branch main has been updated by jhb:

URL: https://cgit.FreeBSD.org/src/commit/?id=e6e38bc522e29de6299536b547bf11dab11e9679

commit e6e38bc522e29de6299536b547bf11dab11e9679
Author:     Konrad Witaszczyk <def@FreeBSD.org>
AuthorDate: 2024-04-12 21:34:59 +0000
Commit:     John Baldwin <jhb@FreeBSD.org>
CommitDate: 2024-04-12 21:34:59 +0000

    rc.d/ldconfig: Compute ldconfig paths in a function
    
    Move logic that computes paths passed to ldconfig(8) to a
    ldconfig_paths() function that can be called for multiple ABIs.
    
    Reviewed by:    olce, kib
    Obtained from:  CheriBSD
    Differential Revision:  https://reviews.freebsd.org/D44751
---
 libexec/rc/rc.d/ldconfig | 55 +++++++++++++++++++++++++-----------------------
 1 file changed, 29 insertions(+), 26 deletions(-)

diff --git a/libexec/rc/rc.d/ldconfig b/libexec/rc/rc.d/ldconfig
index 5c404a823dbb..fd54b2d3444e 100755
--- a/libexec/rc/rc.d/ldconfig
+++ b/libexec/rc/rc.d/ldconfig
@@ -14,6 +14,31 @@ ldconfig_command="/sbin/ldconfig"
 start_cmd="ldconfig_start"
 stop_cmd=":"
 
+ldconfig_paths()
+{
+	local _dirs _files _ii _ldpaths _paths
+
+	_dirs="${1}"
+	_paths="${2}"
+	_ldpaths="${3}"
+
+	for _ii in ${_dirs}; do
+		if [ -d "${_ii}" ]; then
+			_files=`find ${_ii} -type f`
+			if [ -n "${_files}" ]; then
+				_paths="${_paths} `cat ${_files} | sort -u`"
+			fi
+		fi
+	done
+	for _ii in ${_paths}; do
+		if [ -r "${_ii}" ]; then
+			_ldpaths="${_ldpaths} ${_ii}"
+		fi
+	done
+
+	echo "${_ldpaths}"
+}
+
 ldconfig_start()
 {
 	local _files _ins
@@ -23,31 +48,12 @@ ldconfig_start()
 	checkyesno ldconfig_insecure && _ins="-i"
 	if [ -x "${ldconfig_command}" ]; then
 		_LDC=$(/libexec/ld-elf.so.1 -v | sed -n -e '/^Default lib path /s///p' | tr : ' ')
-		for i in ${ldconfig_local_dirs}; do
-			if [ -d "${i}" ]; then
-				_files=`find ${i} -type f`
-				if [ -n "${_files}" ]; then
-					ldconfig_paths="${ldconfig_paths} `cat ${_files} | sort -u`"
-				fi
-			fi
-		done
-		for i in ${ldconfig_paths} /etc/ld-elf.so.conf; do
-			if [ -r "${i}" ]; then
-				_LDC="${_LDC} ${i}"
-			fi
-		done
+		_LDC=$(ldconfig_paths "${ldconfig_local_dirs}" \
+		    "${ldconfig_paths} /etc/ld-elf.so.conf" "$_LDC")
 		startmsg 'ELF ldconfig path:' ${_LDC}
 		${ldconfig} -elf ${_ins} ${_LDC}
 
 		if check_kern_features compat_freebsd32; then
-			for i in ${ldconfig_local32_dirs}; do
-				if [ -d "${i}" ]; then
-					_files=`find ${i} -type f`
-					if [ -n "${_files}" ]; then
-						ldconfig32_paths="${ldconfig32_paths} `cat ${_files} | sort -u`"
-					fi
-				fi
-			done
 			_LDC=""
 			if [ -x /libexec/ld-elf32.so.1 ]; then
 				for x in $(/libexec/ld-elf32.so.1 -v | sed -n -e '/^Default lib path /s///p' | tr : ' '); do
@@ -56,11 +62,8 @@ ldconfig_start()
 					fi
 				done
 			fi
-			for i in ${ldconfig32_paths}; do
-				if [ -r "${i}" ]; then
-					_LDC="${_LDC} ${i}"
-				fi
-			done
+			_LDC=$(ldconfig_paths "${ldconfig_local32_dirs}" \
+			    "${ldconfig32_paths}" "$_LDC")
 			startmsg '32-bit compatibility ldconfig path:' ${_LDC}
 			${ldconfig} -32 ${_ins} ${_LDC}
 		fi