if [ ! "$_MEDIA_COMMON_SUBR" ]; then _MEDIA_COMMON_SUBR=1 # # Copyright (c) 2012-2013 Devin Teske # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # 1. Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # 2. Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF # SUCH DAMAGE. # # ############################################################ INCLUDES BSDCFG_SHARE="/usr/share/bsdconfig" . $BSDCFG_SHARE/common.subr || exit 1 f_dprintf "%s: loading includes..." media/common.subr f_include $BSDCFG_SHARE/device.subr f_include $BSDCFG_SHARE/media/any.subr f_include $BSDCFG_SHARE/struct.subr ############################################################ GLOBALS # # Where to mount media # MOUNTPOINT=/dist # # Media probe values to use for `f_media_get_TYPE media $file $PROBE' or # `f_device_get device_media $file $PROBE' (where $PROBE is one of the below # values). # PROBE_EXIST=1 PROBE_SIZE=2 ############################################################ FUNCTIONS # f_media_open # # Returms success if able to initialize the media device. # f_media_open() { f_dprintf "f_media_open: Verifying and initiliazing media device" { # Verify and initialize device media if-defined f_struct device_media && f_media_verify && f_device_init device_media } || return $FAILURE } # f_media_close # # Shuts down the media device, see f_device_shutdown() from device.subr for # more details. # f_media_close() { f_dprintf "f_media_close: Shutting down media device" f_struct device_media && f_device_shutdown device_media f_struct_free device_media } # f_media_verify # # Returns success if the media device is available, and if not, prompts the # user to select a media type. See f_media_get_type() from media/any.subr for # more details. # f_media_verify() { f_dprintf "f_media_verify: Verifying media device" f_struct device_media || f_media_get_type } # f_media_generic_get $base $file [$probe_type] # # A generic open which follows a well-known "path" of places to look. If # $probe_type is present and non-NULL, returns success if $file exists. If # $probe_type is equal to $PROBE_SIZE, prints the size of $file in bytes to # standard-out. # f_media_generic_get() { local funcname=f_media_generic_get local base="$1" file="$2" probe_type="$3" local fname=f_media_generic_get f_dprintf "%s: base=[%s] files=[%s] probe_type=%s" \ $fname "$base" "$file" "$probe_type" local rel path f_getvar $VAR_RELNAME rel for path in \ "$base/$file" \ "$base/FreeBSD/$file" \ "$base/releases/$file" \ "$base/$rel/$file" \ ; do if [ -f "$path" -a -r "$path" ]; then f_dprintf "%s: file exists path=[%s]" $fname "$path" if [ "$probe_type" = "$PROBE_SIZE" ]; then local size f_eval_catch -dk size $funcname stat \ 'stat -f %%z "%s"' "$path" || size=-1 f_isinteger "$size" || size=-1 echo $size fi [ "$probe_type" ] && return $SUCCESS cat "$path" return $? fi done path="$base/releases/$rel/$file" # Final path to try if [ -f "$path" -a -r "$path" ]; then f_dprintf "%s: file exists path=[%s]" $fname "$path" if [ "$probe_type" = "$PROBE_SIZE" ]; then local size f_eval_catch -dk size $funcname stat \ 'stat -f %%z "%s"' "$path" || size=-1 f_isinteger "$size" || size=-1 echo $size fi [ "$probe_type" ] && return $SUCCESS elif [ "$probe_type" ]; then [ "$probe_type" = "$PROBE_SIZE" ] && echo "-1" return $FAILURE fi cat "$base/releases/$rel/$file" # Final path to try } ############################################################ MAIN f_dprintf "%s: Successfully loaded." media/common.subr fi # ! $_MEDIA_COMMON_SUBR