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