Skip to content

Commit 5465202

Browse files
committed
Reworked wand.cdefs.wandtypes.c_magick_size_t to match magick-types.h, and applied changes to BaseImage.length_of_bytes & set_resource_limit methods. Issue #686
1 parent cd2caac commit 5465202

6 files changed

Lines changed: 21 additions & 16 deletions

File tree

docs/changes.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ Unreleased.
2222
- ``'magickernelsharp2013'``
2323
- ``'magickernelsharp2021'``
2424

25+
- Fixed :meth:`Image.length_of_bytes() <wand.image.BaseImage.length_of_bytes>` method
26+
by refactoring & applying :const:`c_magick_size_t <wand.cdefs.wandtypes.c_magick_size_t>`
27+
type. [:issue:`686`]
2528
- [DOC] Fixed typos in documentation [:pull:`685` by Shawn Presser]
2629

2730

wand/cdefs/magick_image.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from ctypes import (CFUNCTYPE, POINTER, c_bool, c_char_p, c_double, c_int,
77
c_size_t, c_ubyte, c_void_p)
88

9-
from wand.cdefs.wandtypes import c_ssize_t
9+
from wand.cdefs.wandtypes import c_ssize_t, c_magick_size_t
1010

1111
__all__ = ('MagickProgressMonitor', 'load')
1212

@@ -545,7 +545,7 @@ def load(lib, IM_VERSION):
545545
c_void_p, POINTER(c_double), POINTER(c_double)
546546
]
547547
lib.MagickGetImageKurtosis.restype = c_bool
548-
lib.MagickGetImageLength.argtypes = [c_void_p, POINTER(c_size_t)]
548+
lib.MagickGetImageLength.argtypes = [c_void_p, POINTER(c_magick_size_t)]
549549
lib.MagickGetImageLength.restype = c_bool
550550
if is_im_7:
551551
lib.MagickGetImageMask.argtypes = [c_void_p, c_int]

wand/cdefs/magick_property.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@
44
.. versionadded:: 0.5.0
55
"""
66
from ctypes import (POINTER, c_bool, c_char_p, c_double, c_int, c_size_t,
7-
c_ubyte, c_uint, c_ulong, c_ulonglong, c_void_p)
7+
c_ubyte, c_uint, c_ulong, c_void_p)
88

9-
from wand.cdefs.wandtypes import c_ssize_t
9+
from wand.cdefs.wandtypes import c_ssize_t, c_magick_size_t
1010

1111
__all__ = ('load',)
1212

@@ -91,9 +91,9 @@ def load(lib, IM_VERSION):
9191
lib.MagickGetPointsize.restype = c_double
9292
lib.MagickGetQuantumRange.argtypes = [POINTER(c_size_t)]
9393
lib.MagickGetResource.argtypes = [c_int]
94-
lib.MagickGetResource.restype = c_ulonglong
94+
lib.MagickGetResource.restype = c_magick_size_t
9595
lib.MagickGetResourceLimit.argtypes = [c_int]
96-
lib.MagickGetResourceLimit.restype = c_ulonglong
96+
lib.MagickGetResourceLimit.restype = c_magick_size_t
9797
lib.MagickGetSamplingFactors.argtypes = [c_void_p, POINTER(c_size_t)]
9898
lib.MagickGetSamplingFactors.restype = POINTER(c_double)
9999
lib.MagickGetSize.argtypes = [c_void_p, POINTER(c_uint), POINTER(c_uint)]
@@ -172,7 +172,7 @@ def load(lib, IM_VERSION):
172172
lib.MagickSetPointsize.restype = c_bool
173173
lib.MagickSetResolution.argtypes = [c_void_p, c_double, c_double]
174174
lib.MagickSetResolution.restype = c_bool
175-
lib.MagickSetResourceLimit.argtypes = [c_int, c_ulonglong]
175+
lib.MagickSetResourceLimit.argtypes = [c_int, c_magick_size_t]
176176
lib.MagickSetResourceLimit.restype = c_bool
177177
lib.MagickSetSamplingFactors.argtypes = [
178178
c_void_p, c_size_t, POINTER(c_double)

wand/cdefs/wandtypes.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
"""
66
import ctypes
77
import os
8+
import platform
89
import sys
910

1011
__all__ = ('c_magick_real_t', 'c_magick_size_t', 'c_ssize_t')
@@ -34,11 +35,10 @@
3435
del env_real
3536

3637

37-
# FIXME: Might need to rewrite to check against c_void_p size;
38-
# like `c_ssize_t` above, and not against window platform.
39-
if ctypes.sizeof(ctypes.c_size_t) == 8:
40-
c_magick_size_t = ctypes.c_size_t
41-
elif ctypes.sizeof(ctypes.c_ulonglong) == 8:
42-
c_magick_size_t = ctypes.c_ulonglong
38+
if platform.system() != 'Windows':
39+
if ctypes.sizeof(ctypes.c_ulonglong) == 8:
40+
c_magick_size_t = ctypes.c_ulonglong
41+
else:
42+
c_magick_size_t = ctypes.c_size_t
4343
else:
4444
c_magick_size_t = ctypes.c_uint64

wand/image.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
from .cdefs.structures import (AffineMatrix, CCObjectInfo, CCObjectInfo70A,
2323
CCObjectInfo710, ChannelFeature, GeometryInfo,
2424
PixelInfo, RectangleInfo)
25+
from .cdefs.wandtypes import c_magick_size_t
2526
from .color import Color
2627
from .compat import binary, encode_filename, text, to_bytes
2728
from .exceptions import (MissingDelegateError, WandException,
@@ -2067,7 +2068,7 @@ def length_of_bytes(self):
20672068
20682069
.. versionadded:: 0.5.4
20692070
"""
2070-
size_ptr = ctypes.c_ulonglong(0)
2071+
size_ptr = c_magick_size_t(0)
20712072
library.MagickGetImageLength(self.wand, ctypes.byref(size_ptr))
20722073
return size_ptr.value
20732074

wand/resource.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
from collections import abc
1313

1414
from .api import library
15+
from .cdefs.wandtypes import c_magick_size_t
1516
from .exceptions import TYPE_MAP, WandException
1617
from .version import MAGICK_VERSION_NUMBER
1718

@@ -356,8 +357,8 @@ def set_resource_limit(self, resource, limit):
356357
.. versionadded:: 0.5.1
357358
"""
358359
genesis()
359-
ull = ctypes.c_ulonglong(limit)
360-
library.MagickSetResourceLimit(self._to_idx(resource), ull)
360+
magick_size = c_magick_size_t(limit)
361+
library.MagickSetResourceLimit(self._to_idx(resource), magick_size)
361362

362363

363364
#: (:class:`ResourceLimits`) Helper to get & set Magick Resource Limits.

0 commit comments

Comments
 (0)