#!/bin/bash

# mkdir
#
# Wrapper for /bin/mkdir.
# Write in /dev/ outside of fakechroot environment.

fakechroot_wrapper_base="$FAKECHROOT_BASE_ORIG"

# is /dev an excluded path ?
dev_is_excluded=`
    IFS=:
    for target_d in $FAKECHROOT_EXCLUDE_PATH; do
        if [ "$target_d" = "/dev" ]; then
            echo "1"
            exit
        fi
    done
    echo "0"
`

# dir name
make_replacement() {
    filename="$1"
# is it a relative path ?
    if [ "${filename#/}" = "$filename" ]; then
        absfilename=$(readlink -m "$filename")
        filename="$absfilename"
    fi

# is a dir to be created in /dev ?
    if [ "$filename" = "/dev" -o "${filename#/dev/}" != "$filename" ]; then
        replacement="${fakechroot_wrapper_base}${filename}"
    fi
}

# walk through command line arguments
is_replacement_needed() {
    mkdir_arg_nr=0
# parse options
    while [ $# -gt 0 ]; do
        mkdir_arg_nr=$(($mkdir_arg_nr + 1))
        case "$1" in
          -p|--parents|-v|--verbose|--help|--version|--mode=*|--context=*)
            shift
            ;;
          -m|-Z|--mode|--context)
            shift 2
            mkdir_arg_nr=$(($mkdir_arg_nr + 1))
            ;;
          -m*|-Z*)
            shift
            ;;
          --)
            shift
            break
            ;;
          -*)
            shift
            ;;
          *)
            break
            ;;
        esac
    done

# parse directories to make
    while [ $# -gt 0 ]; do
        replacement=
        make_replacement "$1"
        if [ -z "$replacement" ]; then
            without_replacement_array+=("$1")
        else
            replacement_nr=$(($replacement_nr + 1))
            with_replacement_array+=("$replacement")
        fi
        shift
    done

}

# calculate a replacement of destination
replacement_nr=0
if [ $dev_is_excluded -eq 1 ]; then
  is_replacement_needed "$@"
fi

# make directory
if [ $replacement_nr -gt 0 ]; then
  mkdir "${@:1:$(($mkdir_arg_nr - 1))}" "${with_replacement_array[@]}"
  if [ ${#without_replacement_array[@]} -gt 0 ]; then
    env -u FAKECHROOT_BASE_ORIG FAKECHROOT_BASE="$fakechroot_wrapper_base" mkdir "${@:1:$(($mkdir_arg_nr - 1))}" "${without_replacement_array[@]}"
  fi
else
  env -u FAKECHROOT_BASE_ORIG FAKECHROOT_BASE="$fakechroot_wrapper_base" mkdir "$@"
fi


