# 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: mount_image image rootfs_mountpt stateful_mountpt esp_mountpt \
#   [esp_mount]
#
# 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
#  $4: path to ESP fs mount point; if empty the ESP will not be mounted
mount_image() {
  MOUNT_GPT_OPTIONS=(
    --from "$1"
    --rootfs_mountpt "$2"
    --stateful_mountpt "$3"
  )

  if [ $# -ge 4 ]; then
    MOUNT_GPT_OPTIONS+=( --esp_mountpt "$4" )
  fi

  "${SCRIPTS_DIR}/mount_gpt_image.sh" "${MOUNT_GPT_OPTIONS[@]}"
}

# Usage: remount_image [extra_flags ...]
#
# Remount the file systems mounted in the previous call to mount_image with the
# passed extra flags.
# Args:
#   extra_flags: Optional flags, "--read_only" and "--safe" passed to
#     mount_gpt_image.sh
remount_image() {
  # Check the extra_flags passed.
  local flag
  for flag in "$@"; do
    case "${flag}" in
      --read_only)
        ;;
      --safe)
        ;;
      *)
        die "Invalid flag '${flag}' passed to remount_image."
    esac
  done
  "${SCRIPTS_DIR}/mount_gpt_image.sh" --remount "${MOUNT_GPT_OPTIONS[@]}" "$@"
}

# 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=( )
}
