Contents of /trunk/vmware-workstation/unbundle.sh
Parent Directory | Revision Log
Revision 852 -
(show annotations)
(download)
(as text)
Mon Jun 15 21:54:19 2009 UTC (15 years, 3 months ago) by niro
File MIME type: application/x-sh
File size: 1828 byte(s)
Mon Jun 15 21:54:19 2009 UTC (15 years, 3 months ago) by niro
File MIME type: application/x-sh
File size: 1828 byte(s)
-files for vmware
1 | #!/bin/bash |
2 | |
3 | ORIGFILE="$1" |
4 | |
5 | is_relative() { |
6 | local path="$1" |
7 | shift |
8 | |
9 | [ "${path:0:1}" != "/" ] |
10 | return |
11 | } |
12 | |
13 | set_offsets() { |
14 | # This won't work with non-GNU stat. |
15 | FILE_SIZE=`stat -L --format "%s" "$1"` |
16 | local offset=$(($FILE_SIZE - 4)) |
17 | |
18 | MAGIC_OFFSET=$offset |
19 | offset=$(($offset - 4)) |
20 | |
21 | CHECKSUM_OFFSET=$offset |
22 | offset=$(($offset - 4)) |
23 | |
24 | VERSION_OFFSET=$offset |
25 | offset=$(($offset - 4)) |
26 | |
27 | PREPAYLOAD_OFFSET=$offset |
28 | offset=$(($offset - 4)) |
29 | |
30 | PREPAYLOAD_SIZE_OFFSET=$offset |
31 | offset=$(($offset - 4)) |
32 | |
33 | LAUNCHER_SIZE_OFFSET=$offset |
34 | offset=$(($offset - 4)) |
35 | |
36 | PAYLOAD_OFFSET=$offset |
37 | offset=$(($offset - 4)) |
38 | |
39 | PAYLOAD_SIZE_OFFSET=$offset |
40 | offset=$(($offset - 4)) |
41 | } |
42 | |
43 | set_lengths() { |
44 | local file="$1" |
45 | if [ ! -s "$file" ]; then |
46 | echo "$file does not exist" |
47 | exit 1 |
48 | fi |
49 | |
50 | # XXX: put extraction in its own function |
51 | MAGIC_NUMBER=`od -An -t u4 -N 4 -j $MAGIC_OFFSET "$file" | tr -d ' '` |
52 | |
53 | if [ "$MAGIC_NUMBER" != "907380241" ]; then |
54 | echo "magic number does not match" |
55 | exit 1 |
56 | fi |
57 | |
58 | LAUNCHER_SIZE=`od -An -t u4 -N 4 -j $LAUNCHER_SIZE_OFFSET "$file" | tr -d ' '` |
59 | PAYLOAD_SIZE=`od -An -t u4 -N 4 -j $PAYLOAD_SIZE_OFFSET "$file" | tr -d ' '` |
60 | PREPAYLOAD_SIZE=`od -An -t u4 -N 4 -j $PREPAYLOAD_SIZE_OFFSET "$file" | tr -d ' '` |
61 | |
62 | SKIP_BYTES=$(($PREPAYLOAD_SIZE + $LAUNCHER_SIZE)) |
63 | |
64 | return 0 |
65 | } |
66 | |
67 | if is_relative "${ORIGFILE}"; then |
68 | ORIGFILE="`pwd`/${ORIGFILE}" |
69 | fi |
70 | |
71 | |
72 | set_offsets ${ORIGFILE} |
73 | set_lengths ${ORIGFILE} |
74 | |
75 | echo "Unbundling" ${ORIGFILE} |
76 | |
77 | PREPAYLOAD="prepayload" |
78 | PAYLOAD="payload" |
79 | |
80 | # Unpack the pre-payload file |
81 | mkdir ${PREPAYLOAD} |
82 | cd ${PREPAYLOAD} |
83 | dd if="${ORIGFILE}" ibs=$LAUNCHER_SIZE obs=1024 skip=1 | tar -xzf - 2> /dev/null |
84 | cd .. |
85 | |
86 | # Unpack the main file |
87 | mkdir ${PAYLOAD} |
88 | cd ${PAYLOAD} |
89 | dd if="${ORIGFILE}" ibs=$SKIP_BYTES obs=1024 skip=1 | tar -xzf - 2> /dev/null |
90 | cd .. |
91 |