ajout de readlinkm(). support de cgiscript sur toutes les plateformes
This commit is contained in:
parent
0afe6e3371
commit
c84cd3c8ee
|
@ -1 +1 @@
|
||||||
13
|
14
|
||||||
|
|
|
@ -1034,10 +1034,12 @@ function splitwcs() {
|
||||||
function deref() {
|
function deref() {
|
||||||
# Retourner un chemin absolu vers le fichier $1, dans lequel toutes les
|
# Retourner un chemin absolu vers le fichier $1, dans lequel toutes les
|
||||||
# composantes "lien symbolique" ont été supprimées.
|
# composantes "lien symbolique" ont été supprimées.
|
||||||
|
# DEPRECATED: Cette fonction est dépréciée. Utiliser à la place readlinkm()
|
||||||
local OENC="$UTF8"
|
local OENC="$UTF8"
|
||||||
|
|
||||||
local max_deref=50
|
local max_deref=50
|
||||||
local file="$1"
|
local file="$1"
|
||||||
|
local basedir link
|
||||||
while [ -L "$file" ]; do
|
while [ -L "$file" ]; do
|
||||||
basedir="$(dirname "$file")"
|
basedir="$(dirname "$file")"
|
||||||
link="$(readlink "$file")"
|
link="$(readlink "$file")"
|
||||||
|
@ -1054,6 +1056,12 @@ function deref() {
|
||||||
done
|
done
|
||||||
abspath "$file"
|
abspath "$file"
|
||||||
}
|
}
|
||||||
|
function readlinkm() {
|
||||||
|
# Retourner un chemin absolu vers le fichier $1, dans lequel toutes les
|
||||||
|
# composantes "lien symbolique" ont été supprimées. Il n'est pas requis que les
|
||||||
|
# composantes du chemin existent.
|
||||||
|
readlink -m "$1"
|
||||||
|
}
|
||||||
function path_if_test() {
|
function path_if_test() {
|
||||||
# afficher un chemin si le fichier $2 existe (en utilisant l'opérateur $1) dans
|
# afficher un chemin si le fichier $2 existe (en utilisant l'opérateur $1) dans
|
||||||
# l'un des chemins absolus $4..n. si $3==relative, afficher le chemin relatif,
|
# l'un des chemins absolus $4..n. si $3==relative, afficher le chemin relatif,
|
||||||
|
|
|
@ -7,6 +7,9 @@ uprovide compat
|
||||||
urequire base sysinfos
|
urequire base sysinfos
|
||||||
|
|
||||||
if check_sysinfos -s macosx; then
|
if check_sysinfos -s macosx; then
|
||||||
|
# implémentation en bash des variantes de readlink
|
||||||
|
function __rlnp() { local p="$1" np f; [ "${p#/}" == "$p" ] && p="$(pwd)/$p"; while [[ "$p" == *//* ]]; do p="${p//\/\///}"; done; p="${p%/}"; p="${p#/}"; np=; while [ -n "$p" ]; do if [[ "$p" == */* ]]; then f="${p%%/*}"; p="${p#*/}"; else f="$p"; p=; fi; if [ "$f" == . ]; then :; elif [ "$f" == .. ]; then if [[ "$np" == */* ]]; then np="${np%/*}"; else np=; fi; else [ -n "$np" ] && np="$np/"; np="$np$f"; fi; done; echo "/$np"; }
|
||||||
|
function readlinkm() { local p="$(__rlnp "$1")" np n; while [ -n "$p" ]; do local max=50; while [ -L "$p" -a $max -gt 0 ]; do n="$(readlink "$p")"; if [ "${n#/}" != "$n" ]; then p="$n"; else p="${p%/*}/$n"; fi; p="$(__rlnp "$p")"; max=$(($max-1)); done; [ -n "$np" ] && np="/$np"; if [[ "$p" == */* ]]; then np="${p##*/}$np"; p="${p%/*}"; else np="$p$np"; p=; fi; done; echo "/$np"; }
|
||||||
# la version de awk livrée sur macosx est braindead
|
# la version de awk livrée sur macosx est braindead
|
||||||
function _nl2lf() { awk '{ sub(/\r$/, ""); gsub(/\r/, "\n"); print }'; }
|
function _nl2lf() { awk '{ sub(/\r$/, ""); gsub(/\r/, "\n"); print }'; }
|
||||||
function _nl2crlf() { _nl2lf | awk '{ print $0 "\r" }'; }
|
function _nl2crlf() { _nl2lf | awk '{ print $0 "\r" }'; }
|
||||||
|
|
|
@ -7,30 +7,23 @@
|
||||||
# d'origine. Ce fichier permet de s'assurer que scriptdir a la bonne valeur.
|
# d'origine. Ce fichier permet de s'assurer que scriptdir a la bonne valeur.
|
||||||
# cgiscriptdir contient la valeur d'origine, c'est à dire le répertoire cgi à
|
# cgiscriptdir contient la valeur d'origine, c'est à dire le répertoire cgi à
|
||||||
# partir duquel le script est lancé.
|
# partir duquel le script est lancé.
|
||||||
cgiscriptdir="$(dirname "$0")"
|
cgiscriptdir="$(cd "$(dirname -- "$0")"; pwd)"
|
||||||
|
cgiscriptname="$(basename -- "$0")"
|
||||||
if [ "$(uname -s)" == Linux ]; then
|
if [ "$(uname -s)" == Linux ]; then
|
||||||
script="$(readlink -f -- "$0")"
|
script="$(readlink -f -- "$0")"
|
||||||
scriptdir="$(dirname -- "$script")"
|
|
||||||
scriptname="$(basename -- "$script")"
|
|
||||||
elif [ -L "$0" ]; then
|
|
||||||
# Sur un système autre que linux, readlink -f n'existe sans doute pas.
|
|
||||||
# On ne supporte que le cas où le script lui-même est un lien symbolique, et
|
|
||||||
# on fait implémentation limitée de readlink -f: si le lien est relatif,
|
|
||||||
# l'exprimer par rapport à $scriptdir. Ne prendre qu'un seul niveau de lien
|
|
||||||
# symbolique.
|
|
||||||
script="$(readlink -- "$0")"
|
|
||||||
[ "${script#/}" != "$script" ] || script="$cgiscriptdir/$script"
|
|
||||||
scriptdir="$(dirname -- "$script")"
|
|
||||||
scriptdir="$(cd "$scriptdir"; pwd)"
|
|
||||||
scriptname="$(basename -- "$script")"
|
|
||||||
script="$scriptdir/$scriptname"
|
|
||||||
else
|
else
|
||||||
scriptdir="$(dirname -- "$0")"
|
# Sur un système autre que linux, les options avancées (-f, -e, -m) de
|
||||||
scriptdir="$(cd "$scriptdir"; pwd)"
|
# readlink n'existent sans doute pas. Implémenter en bash l'équivalent de
|
||||||
scriptname="$(basename -- "$0")"
|
# readlink -m
|
||||||
script="$scriptdir/$scriptname"
|
script="$(
|
||||||
|
function __normpath() { local p="$1" np f; [ "${p#/}" == "$p" ] && p="$(pwd)/$p"; while [[ "$p" == *//* ]]; do p="${p//\/\///}"; done; p="${p%/}"; p="${p#/}"; np=; while [ -n "$p" ]; do if [[ "$p" == */* ]]; then f="${p%%/*}"; p="${p#*/}"; else f="$p"; p=; fi; if [ "$f" == . ]; then :; elif [ "$f" == .. ]; then if [[ "$np" == */* ]]; then np="${np%/*}"; else np=; fi; else [ -n "$np" ] && np="$np/"; np="$np$f"; fi; done; echo "/$np"; }
|
||||||
|
function __readlinkm() { local p="$(__normpath "$1")" np n; while [ -n "$p" ]; do local max=50; while [ -L "$p" -a $max -gt 0 ]; do n="$(readlink "$p")"; if [ "${n#/}" != "$n" ]; then p="$n"; else p="${p%/*}/$n"; fi; p="$(__normpath "$p")"; max=$(($max-1)); done; [ -n "$np" ] && np="/$np"; if [[ "$p" == */* ]]; then np="${p##*/}$np"; p="${p%/*}"; else np="$p$np"; p=; fi; done; echo "/$np"; }
|
||||||
|
__readlinkm "$0"
|
||||||
|
)"
|
||||||
fi
|
fi
|
||||||
|
scriptdir="$(dirname -- "$script")"
|
||||||
|
scriptname="$(basename -- "$script")"
|
||||||
UTOOLS_HAVE_SCRIPTVARS=1
|
UTOOLS_HAVE_SCRIPTVARS=1
|
||||||
# Juste après avoir inclu ce fichier, il faut rajouter une ligne comme celle-ci
|
# Juste après avoir inclu ce fichier, on peut rajouter une ligne comme celle-ci
|
||||||
# pour charger ulib:
|
# pour charger ulib:
|
||||||
#source "$scriptdir/ulib/auto"
|
#source "$scriptdir/ulib/auto"
|
||||||
|
|
Loading…
Reference in New Issue