-
Notifications
You must be signed in to change notification settings - Fork 97
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This requires a little bit of working around MacOS-specific weirdnesses (which are fine under POSIX but don't match Linux). The most obvious one is the lack of 'readlink -f', but there's also the lack of sub-second granularity of filesystem timesamps, and the default-follow behaviour of link(2) when trying to hardlink a symlink. Signed-off-by: Aleksa Sarai <asarai@suse.de>
- Loading branch information
Showing
19 changed files
with
265 additions
and
94 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
#!/bin/bash | ||
# readlinkf: POSIX-compliant implementation of readlink -f. | ||
# Author: Koichi Nakashima <koichi@nksm.name> | ||
# Licensed under the Creative Commons Zero v1.0 Universal license. | ||
# <https://creativecommons.org/publicdomain/zero/1.0/> | ||
|
||
# Copied verbatim from v1.1.0 of <https://github.com/ko1nksm/readlinkf>. | ||
|
||
# POSIX compliant version | ||
readlinkf_posix() { | ||
[ "${1:-}" ] || return 1 | ||
max_symlinks=40 | ||
CDPATH='' # to avoid changing to an unexpected directory | ||
|
||
target=$1 | ||
[ -e "${target%/}" ] || target=${1%"${1##*[!/]}"} # trim trailing slashes | ||
[ -d "${target:-/}" ] && target="$target/" | ||
|
||
cd -P . 2>/dev/null || return 1 | ||
while [ "$max_symlinks" -ge 0 ] && max_symlinks=$((max_symlinks - 1)); do | ||
if [ ! "$target" = "${target%/*}" ]; then | ||
case $target in | ||
/*) cd -P "${target%/*}/" 2>/dev/null || break ;; | ||
*) cd -P "./${target%/*}" 2>/dev/null || break ;; | ||
esac | ||
target=${target##*/} | ||
fi | ||
|
||
if [ ! -L "$target" ]; then | ||
target="${PWD%/}${target:+/}${target}" | ||
printf '%s\n' "${target:-/}" | ||
return 0 | ||
fi | ||
|
||
# `ls -dl` format: "%s %u %s %s %u %s %s -> %s\n", | ||
# <file mode>, <number of links>, <owner name>, <group name>, | ||
# <size>, <date and time>, <pathname of link>, <contents of link> | ||
# https://pubs.opengroup.org/onlinepubs/9699919799/utilities/ls.html | ||
link=$(ls -dl -- "$target" 2>/dev/null) || break | ||
target=${link#*" $target -> "} | ||
done | ||
return 1 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.