Something went wrong. Try again.
lol
Something went wrong. Try again.
1.8 kB · 49 lines
at master
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950# shellcheck shell=bash
# getRunpathEntries# Append the runpath entries of the dynamically linked ELF file at path to the indexed array referenced by# outputArrRef.## NOTE: This function does not check if path is a valid ELF file.## Arguments:# - path: a path to an ELF file with a dynamic section# - outputArrRef: a reference to an indexed array (mutated only by appending)## Returns 0 if the file is dynamically linked and the runpath was appended to the output array.# Returns 1 if patchelf fails (e.g., the ELF file is not dynamically linked, so patchelf fails to print the rpath).getRunpathEntries() { if (($# != 2)); then nixErrorLog "expected two arguments!" nixErrorLog "usage: getRunpathEntries path outputArrRef" exit 1 fi
local -r path="$1" local -rn outputArrRef="$2"
if [[ ! -f $path ]]; then nixErrorLog "first argument path $path is not a file" exit 1 elif ! isDeclaredArray "${!outputArrRef}"; then nixErrorLog "second argument outputArrRef must be a reference to an indexed array" exit 1 fi
# Declare runpath separately to avoid masking the return value of patchelf. local runpath # Files that are not dynamically linked cause patchelf to exit with a non-zero status and print to stderr. # If patchelf fails to print the rpath, we assume the file is not dynamically linked. runpath="$(patchelf --print-rpath "$path" 2>/dev/null)" || return 1
# If the runpath is empty and we feed it to mapfile, it gives us a singleton array with an empty string. # We want to avoid that, so we check if the runpath is empty before trying to populate runpathEntries. local -a runpathEntries=() if [[ -n $runpath ]]; then mapfile -d ':' -t runpathEntries < <(echo -n "$runpath") fi
outputArrRef+=("${runpathEntries[@]}")
return 0}