summaryrefslogtreecommitdiff
path: root/magic.py
diff options
context:
space:
mode:
authorAdam Hupp <adam@hupp.org>2013-10-07 21:28:16 -0700
committerAdam Hupp <adam@hupp.org>2013-10-07 21:28:16 -0700
commit4942310344701c0eb0fd55a16ab4583fd5b2dc63 (patch)
treedc3859794289c8bdb8b25c9aed96d29d1347af79 /magic.py
parent998677aa225ba0dbcb8a89c0fa8e312f38b8be65 (diff)
downloadpython-magic-4942310344701c0eb0fd55a16ab4583fd5b2dc63.tar.gz
Fix failure on file-5.15. That has a bug and/or change in behvior
where the first call to magic_load results in magic_error returning a string even though there was no error. Fixed by being more precise about checking the return values (either nul or -1 depending on function) rather than relying on magic_error.
Diffstat (limited to 'magic.py')
-rw-r--r--magic.py21
1 files changed, 14 insertions, 7 deletions
diff --git a/magic.py b/magic.py
index ab1fd63..c3ece14 100644
--- a/magic.py
+++ b/magic.py
@@ -162,13 +162,21 @@ if not libmagic or not libmagic._name:
magic_t = ctypes.c_void_p
-def errorcheck(result, func, args):
- err = magic_error(args[0])
- if err is not None:
+def errorcheck_null(result, func, args):
+ if result is None:
+ err = magic_error(args[0])
raise MagicException(err)
else:
return result
+def errorcheck_negative_one(result, func, args):
+ if result is -1:
+ err = magic_error(args[0])
+ raise MagicException(err)
+ else:
+ return result
+
+
def coerce_filename(filename):
if filename is None:
return None
@@ -193,7 +201,7 @@ magic_errno.argtypes = [magic_t]
_magic_file = libmagic.magic_file
_magic_file.restype = c_char_p
_magic_file.argtypes = [magic_t, c_char_p]
-_magic_file.errcheck = errorcheck
+_magic_file.errcheck = errorcheck_null
def magic_file(cookie, filename):
return _magic_file(cookie, coerce_filename(filename))
@@ -201,8 +209,7 @@ def magic_file(cookie, filename):
_magic_buffer = libmagic.magic_buffer
_magic_buffer.restype = c_char_p
_magic_buffer.argtypes = [magic_t, c_void_p, c_size_t]
-_magic_buffer.errcheck = errorcheck
-
+_magic_buffer.errcheck = errorcheck_null
def magic_buffer(cookie, buf):
return _magic_buffer(cookie, buf, len(buf))
@@ -211,7 +218,7 @@ def magic_buffer(cookie, buf):
_magic_load = libmagic.magic_load
_magic_load.restype = c_int
_magic_load.argtypes = [magic_t, c_char_p]
-_magic_load.errcheck = errorcheck
+_magic_load.errcheck = errorcheck_negative_one
def magic_load(cookie, filename):
return _magic_load(cookie, coerce_filename(filename))