|
|
@ -460,12 +460,13 @@ class typeFile(object):
|
|
|
|
self.magicObject = type_file(MAGIC_NONE)
|
|
|
|
self.magicObject = type_file(MAGIC_NONE)
|
|
|
|
self.magicObject.load()
|
|
|
|
self.magicObject.load()
|
|
|
|
self.magicObject.setflags(magic)
|
|
|
|
self.magicObject.setflags(magic)
|
|
|
|
|
|
|
|
self.magic = magic
|
|
|
|
|
|
|
|
|
|
|
|
def __del__(self):
|
|
|
|
def __del__(self):
|
|
|
|
"""Закрываем magic"""
|
|
|
|
"""Закрываем magic"""
|
|
|
|
self.magicObject.close()
|
|
|
|
self.magicObject.close()
|
|
|
|
|
|
|
|
|
|
|
|
def getMTypeBuf(self, buf):
|
|
|
|
def getMTypeBuf_(self, buf):
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|
ret = self.magicObject.buffer(buf)
|
|
|
|
ret = self.magicObject.buffer(buf)
|
|
|
|
except UnicodeDecodeError:
|
|
|
|
except UnicodeDecodeError:
|
|
|
@ -475,6 +476,42 @@ class typeFile(object):
|
|
|
|
return None
|
|
|
|
return None
|
|
|
|
return ret
|
|
|
|
return ret
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def getMTypeBuf(self, buf):
|
|
|
|
|
|
|
|
#buftype = typeFile(magic=0).getMTypeBuf
|
|
|
|
|
|
|
|
self.magicObject.setflags(self.magic & (~(self.magic&0x4)))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
rdtype = self.getMTypeBuf_(buf)
|
|
|
|
|
|
|
|
if not self.magic & 0x4:
|
|
|
|
|
|
|
|
return rdtype
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if "LZ4" in rdtype:
|
|
|
|
|
|
|
|
arch_cmd = '/usr/bin/lz4'
|
|
|
|
|
|
|
|
elif "XZ" in rdtype:
|
|
|
|
|
|
|
|
arch_cmd = '/usr/bin/xz'
|
|
|
|
|
|
|
|
elif "bzip2" in rdtype:
|
|
|
|
|
|
|
|
arch_cmd = '/usr/bin/bzip2'
|
|
|
|
|
|
|
|
elif "gzip" in rdtype:
|
|
|
|
|
|
|
|
arch_cmd = '/bin/gzip'
|
|
|
|
|
|
|
|
elif "Zstandard" in rdtype:
|
|
|
|
|
|
|
|
arch_cmd = '/usr/bin/zstd'
|
|
|
|
|
|
|
|
else:
|
|
|
|
|
|
|
|
return rdtype
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
self.magicObject.setflags(self.magic)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with open(os.devnull, 'w') as DEVNULL:
|
|
|
|
|
|
|
|
gz = Popen([arch_cmd, "-dc"], stdout=PIPE, stderr=DEVNULL,
|
|
|
|
|
|
|
|
stdin=PIPE, close_fds=True)
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
return "{} ({})".format(
|
|
|
|
|
|
|
|
self.getMTypeBuf_(gz.communicate(input=buf)[0]),
|
|
|
|
|
|
|
|
rdtype)
|
|
|
|
|
|
|
|
finally:
|
|
|
|
|
|
|
|
try:
|
|
|
|
|
|
|
|
gz.terminate()
|
|
|
|
|
|
|
|
except OSError:
|
|
|
|
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
def getMType(self, filename):
|
|
|
|
def getMType(self, filename):
|
|
|
|
"""Информация о типе файла"""
|
|
|
|
"""Информация о типе файла"""
|
|
|
|
try:
|
|
|
|
try:
|
|
|
|