Import ruby-clutter-gst-0.8.0 as multimedia/ruby-clutter-gst.
[pkgsrc.git] / bootstrap / ufsdiskimage
1 #!/bin/sh
2 #
3 # $NetBSD: ufsdiskimage,v 1.2 2002/07/26 21:26:18 schmonz Exp $
4
5 _getdevice_and_halfway_mount()
6 {
7         hdid -nomount "$1" | _getdevicebasename | tail -1
8 }
9
10 _getdevicebasename()
11 {
12         awk '{print $1}' | sed -e 's|^/dev/||'
13 }
14
15 _normalize_filename()
16 {
17         echo "$1" | sed -e 's|\.dmg$||' -e 's|$|.dmg|'
18 }
19
20 dmg_create()
21 {
22         local file mountedname megabytes device
23         [ $# -eq 2 ] || die 1 "Usage: $0 create <file> <megabytes>"
24
25         file="`_normalize_filename \"$1\"`"
26         mountedname="`basename \"${file}\" .dmg`"
27         megabytes=$2
28
29         # create
30         hdiutil create -quiet "${file}" -megabytes ${megabytes} \
31                 -partitionType Apple_UFS -layout SPUD
32
33         # format
34         device=`_getdevice_and_halfway_mount "${file}"`
35         newfs ${device}
36         hdiutil eject -quiet "${device}"
37
38         # rename
39         hdiutil mount "${file}"
40         disktool -n "${device}" "${mountedname}"
41         hdiutil eject -quiet "${device}"
42         # mountpoint="`hdiutil mount -verbose '${file}' | grep -A 1 '<key>mount-point</key>' | grep -v '<key>mount-point</key>' | sed -e 's|<string>||' -e 's|</string>||' | awk '{print $1}'`"
43         # mount | grep '^/dev/disk1' | awk '{print $3}' | sed -e 's|^/Volumes/||'
44 }
45
46 dmg_mount()
47 {
48         local file device exitcode
49         [ $# -eq 1 ] || die 1 "Usage: $0 mount <file>"
50
51         file="`_normalize_filename \"$1\"`"
52
53         hdiutil mount ${file}
54 }
55
56
57 dmg_umount()
58 {
59         local mountpoint device
60         [ $# -eq 1 ] || die 1 "Usage: $0 umount <mount-point>"
61
62         mountpoint="$1"
63         device=`mount | grep "${mountpoint} (local" | _getdevicebasename`
64
65         [ "${device}" ] || die 1 "error: no device mounted at ${mountpoint}"
66
67         hdiutil eject -quiet "${device}"
68 }
69
70 die()
71 {
72         local exitcode
73         exitcode=$1; shift
74         warn "$@"
75         exit ${exitcode}
76 }
77
78 warn()
79 {
80         echo >&2 "$@"
81 }
82
83 try()
84 {
85         exitcode=$1; shift
86         action=$1; shift
87         error=`"${action}" "$@" 2>&1` || die ${exitcode} "${error}"
88 }
89
90 main()
91 {
92         [ $# -eq 0 ] && die 1 "Usage: $0 <create|mount|umount>"
93         ACTION="$1"; shift
94         case ${ACTION} in
95                 create|mount|umount)
96                         try 1 "dmg_${ACTION}" "$@"
97                         return 0
98                         ;;
99                 *)
100                         die 1 "Usage: $0 <create|mount|umount>"
101                         ;;
102         esac
103 }
104
105 main "$@"
106 exit $?