# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# This global array variable is used to remember options from
# mount_image so that unmount_image can do its job.
MOUNT_GPT_OPTIONS=( )

# Usage: _check_mount_image_flags [mode_flag ...]
#
# Check that all the passed flags only modify the read or write access of the
# mounted image when passed to mount_gpt_image.sh.
# Args:
#   mode_flag ...: 0 or more flags.
_check_mount_image_flags() {
  local flag
  for flag; do
    case "${flag}" in
      --read_only|--safe) ;;
      *)
        die "Invalid flag '${flag}'."
    esac
  done
}

# Usage: mount_image image rootfs_mountpt stateful_mountpt esp_mountpt \
#   [esp_mount] [mode_flag]
#
# Mount the root, stateful, and optionally ESP partitions in a Chromium OS
# image. Create the mountpoints when needed.
# Args:
#  image: path to image to be mounted.
#  rootfs_mountpt: path to root fs mount point.
#  stateful_mountpt: path to stateful fs mount point.
#  esp_mount: optional path to ESP fs mount point; if empty the ESP will not be
#    mounted.
#  mode_flag: Optional flag to control how the image is mounted:
#    --read-only mounts all partitions as read-only.
#    --safe, mounts only the rootfs as read-only and the rest as read/write.
#    If omitted, the image will be mounted read-write. See mount_gpt_image.sh
#    for details on these flags.
mount_image() {
  MOUNT_GPT_OPTIONS=(
    --from "$1"
    --rootfs_mountpt "$2"
    --stateful_mountpt "$3"
  )

  if [[ -n "${4:-}" ]]; then
    MOUNT_GPT_OPTIONS+=( --esp_mountpt "$4" )
  fi
  # Bash returns an empty array for mode_flag if $@ has less than 5 elements.
  local mode_flag=( "${@:5:1}" )
  _check_mount_image_flags "${mode_flag[@]:+${mode_flag[@]}}"

  "${SCRIPTS_DIR}/mount_gpt_image.sh" "${MOUNT_GPT_OPTIONS[@]}" \
    "${mode_flag[@]:+${mode_flag[@]}}"
}

# Usage: unmount_image
# Unmount the file systems mounted in the previous call to mount_image. The
# mountpoint directories will be removed, regardless of whether or not they
# existed when mount_image was called.
# No arguments.
unmount_image() {
  if [[ ${#MOUNT_GPT_OPTIONS[@]} -eq 0 ]]; then
    warn "Image already unmounted."
    return 1
  fi
  "${SCRIPTS_DIR}/mount_gpt_image.sh" --unmount "${MOUNT_GPT_OPTIONS[@]}" \
    --delete_mountpts

  MOUNT_GPT_OPTIONS=( )
}

# Usage: get_board_from_image [image]
#
# Echoes the board name specified in the image.
get_board_from_image() {
  local image=$1
  local dir="$(mktemp -d)"
  local rootfs="${dir}/rootfs"
  local stateful="${dir}/stateful"
  (
    trap "unmount_image > /dev/null; rm -rf ${dir}" EXIT
    mount_image "${image}" "${rootfs}" "${stateful}" > /dev/null
    echo "$(sed -n '/^CHROMEOS_RELEASE_BOARD=/s:^[^=]*=::p' \
      "${rootfs}/etc/lsb-release")"
  )
}
