17b66cf61Sopenharmony_ci#!/bin/sh 27b66cf61Sopenharmony_ci# 37b66cf61Sopenharmony_ci# Author: Carlos Santos <unixmania@gmail.com> 47b66cf61Sopenharmony_ci# This file is in public domain. 57b66cf61Sopenharmony_ci# 67b66cf61Sopenharmony_ci 77b66cf61Sopenharmony_cierror() { 87b66cf61Sopenharmony_ci echo "$@" 1>&2 97b66cf61Sopenharmony_ci exit 1 107b66cf61Sopenharmony_ci} 117b66cf61Sopenharmony_ci 127b66cf61Sopenharmony_cisrc="$1" 137b66cf61Sopenharmony_cidst="$2" 147b66cf61Sopenharmony_ci 157b66cf61Sopenharmony_cicheck_path() { 167b66cf61Sopenharmony_ci case "$2" in 177b66cf61Sopenharmony_ci */../*|*/./*|*/.|*/..) error "$1 path '$2' must be absolute";; 187b66cf61Sopenharmony_ci */) error "$1 path '$2' must not end with '/'";; 197b66cf61Sopenharmony_ci /?*) ;; 207b66cf61Sopenharmony_ci *) error "$1 path '$2' must start with '/'";; 217b66cf61Sopenharmony_ci esac 227b66cf61Sopenharmony_ci} 237b66cf61Sopenharmony_ci 247b66cf61Sopenharmony_cicheck_path "source" "$src" 257b66cf61Sopenharmony_cicheck_path "destination" "$dst" 267b66cf61Sopenharmony_ci 277b66cf61Sopenharmony_ci# strip leading '/' 287b66cf61Sopenharmony_cisrc=${src#/*} 297b66cf61Sopenharmony_citmp=${dst#/*} 307b66cf61Sopenharmony_ci 317b66cf61Sopenharmony_cis_prefix=${src%%/*} 327b66cf61Sopenharmony_cid_prefix=${tmp%%/*} 337b66cf61Sopenharmony_ci 347b66cf61Sopenharmony_ci# strip leading common 357b66cf61Sopenharmony_ciwhile [ "$s_prefix" = "$d_prefix" ]; do 367b66cf61Sopenharmony_ci src="${src#$s_prefix/}" 377b66cf61Sopenharmony_ci tmp="${tmp#$d_prefix/}" 387b66cf61Sopenharmony_ci s_prefix=${src%%/*} 397b66cf61Sopenharmony_ci d_prefix=${tmp%%/*} 407b66cf61Sopenharmony_cidone 417b66cf61Sopenharmony_ci 427b66cf61Sopenharmony_cis_prefix="../" 437b66cf61Sopenharmony_ciwhile [ -n "$d_prefix" ] && [ "$tmp" != "$d_prefix" ]; do 447b66cf61Sopenharmony_ci s_prefix="../$s_prefix" 457b66cf61Sopenharmony_ci tmp="${tmp#$d_prefix/}" 467b66cf61Sopenharmony_ci d_prefix=${tmp%%/*} 477b66cf61Sopenharmony_cidone 487b66cf61Sopenharmony_ci 497b66cf61Sopenharmony_ciln -s -f "$s_prefix$src" "$dst" 50