1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
|
"""
@copyright: 2009 Bastian Blank <waldi@debian.org>
@license: GNU GPL-3
"""
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 3 as
# published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import struct
class DescriptorTag:
_struct = struct.Struct('<HHBxHHHI')
def __init__(self, buf):
data = self._struct.unpack(buf[:16])
(self.identifier, self.version, self.checksum, serial_number,
crc, self.crc_length, self.location) = data
def __repr__(self):
return '<DescriptorTag with identifier: %d; version: %d; location: %d>' % (
self.identifier,
self.version,
self.location,
)
class OSTACompressedUnicode(str):
def __new__(self, buf):
stype = buf[0]
if stype == 8:
return buf[1:].decode('utf-8')
elif stype == 16:
return buf[1:].decode('utf-16be')
raise ValueError
class ExtentAD:
_struct = struct.Struct('<II8xH2x')
size = _struct.size
def __init__(self, buf):
data = self._struct.unpack(buf)
length, self.location, self.partition = data
self.length = length & 0x3fffffff
self.flags = length >> 30
def __repr__(self):
return '<ExtentAD with location: %d; length: %d; flags: %d; partition: %d>' % (
self.location,
self.length,
self.flags,
self.partition,
)
class LongAD:
_struct = struct.Struct('<IIH6x')
size = _struct.size
def __init__(self, buf):
data = self._struct.unpack(buf)
length, self.location, self.partition = data
self.length = length & 0x3fffffff
self.flags = length >> 30
def __repr__(self):
return '<LongAD with location: %d; length: %d; flags: %d; partition: %d>' % (
self.location,
self.length,
self.flags,
self.partition,
)
class ShortAD:
_struct = struct.Struct('<II')
size = _struct.size
def __init__(self, buf):
data = self._struct.unpack(buf)
length, self.location = data
self.length = length & 0x3fffffff
self.flags = length >> 30
def __repr__(self):
return '<ShortAD with location: %d; length: %d; flags: %x' % (
self.location,
self.length,
self.flags,
)
|