Skip to content

Commit 9ef65b0

Browse files
authored
Merge pull request #19 from nulano/reference-count
2 parents 6328662 + e1d0a96 commit 9ef65b0

File tree

5 files changed

+57
-72
lines changed

5 files changed

+57
-72
lines changed

src/_imaging.c

Lines changed: 40 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -3810,6 +3810,7 @@ static PyTypeObject PixelAccess_Type = {
38103810
static PyObject *
38113811
_get_stats(PyObject *self, PyObject *args) {
38123812
PyObject *d;
3813+
PyObject *v;
38133814
ImagingMemoryArena arena = &ImagingDefaultArena;
38143815

38153816
if (!PyArg_ParseTuple(args, ":get_stats")) {
@@ -3820,29 +3821,29 @@ _get_stats(PyObject *self, PyObject *args) {
38203821
if (!d) {
38213822
return NULL;
38223823
}
3823-
PyObject *new_count = PyLong_FromLong(arena->stats_new_count);
3824-
PyDict_SetItemString(d, "new_count", new_count);
3825-
Py_XDECREF(new_count);
3824+
v = PyLong_FromLong(arena->stats_new_count);
3825+
PyDict_SetItemString(d, "new_count", v ? v : Py_None);
3826+
Py_XDECREF(v);
38263827

3827-
PyObject *allocated_blocks = PyLong_FromLong(arena->stats_allocated_blocks);
3828-
PyDict_SetItemString(d, "allocated_blocks", allocated_blocks);
3829-
Py_XDECREF(allocated_blocks);
3828+
v = PyLong_FromLong(arena->stats_allocated_blocks);
3829+
PyDict_SetItemString(d, "allocated_blocks", v ? v : Py_None);
3830+
Py_XDECREF(v);
38303831

3831-
PyObject *reused_blocks = PyLong_FromLong(arena->stats_reused_blocks);
3832-
PyDict_SetItemString(d, "reused_blocks", reused_blocks);
3833-
Py_XDECREF(reused_blocks);
3832+
v = PyLong_FromLong(arena->stats_reused_blocks);
3833+
PyDict_SetItemString(d, "reused_blocks", v ? v : Py_None);
3834+
Py_XDECREF(v);
38343835

3835-
PyObject *reallocated_blocks = PyLong_FromLong(arena->stats_reallocated_blocks);
3836-
PyDict_SetItemString(d, "reallocated_blocks", reallocated_blocks);
3837-
Py_XDECREF(reallocated_blocks);
3836+
v = PyLong_FromLong(arena->stats_reallocated_blocks);
3837+
PyDict_SetItemString(d, "reallocated_blocks", v ? v : Py_None);
3838+
Py_XDECREF(v);
38383839

3839-
PyObject *freed_blocks = PyLong_FromLong(arena->stats_freed_blocks);
3840-
PyDict_SetItemString(d, "freed_blocks", freed_blocks);
3841-
Py_XDECREF(freed_blocks);
3840+
v = PyLong_FromLong(arena->stats_freed_blocks);
3841+
PyDict_SetItemString(d, "freed_blocks", v ? v : Py_None);
3842+
Py_XDECREF(v);
38423843

3843-
PyObject *blocks_cached = PyLong_FromLong(arena->blocks_cached);
3844-
PyDict_SetItemString(d, "blocks_cached", blocks_cached);
3845-
Py_XDECREF(blocks_cached);
3844+
v = PyLong_FromLong(arena->blocks_cached);
3845+
PyDict_SetItemString(d, "blocks_cached", v ? v : Py_None);
3846+
Py_XDECREF(v);
38463847
return d;
38473848
}
38483849

@@ -4211,31 +4212,33 @@ setup_module(PyObject *m) {
42114212
#ifdef HAVE_LIBJPEG
42124213
{
42134214
extern const char *ImagingJpegVersion(void);
4214-
PyObject *jpeglib_version = PyUnicode_FromString(ImagingJpegVersion());
4215-
PyDict_SetItemString(d, "jpeglib_version", jpeglib_version);
4216-
Py_XDECREF(jpeglib_version);
4215+
PyObject *v = PyUnicode_FromString(ImagingJpegVersion());
4216+
PyDict_SetItemString(d, "jpeglib_version", v ? v : Py_None);
4217+
Py_XDECREF(v);
42174218
}
42184219
#endif
42194220

42204221
#ifdef HAVE_OPENJPEG
42214222
{
42224223
extern const char *ImagingJpeg2KVersion(void);
4223-
PyObject *jp2klib_version = PyUnicode_FromString(ImagingJpeg2KVersion());
4224-
PyDict_SetItemString(d, "jp2klib_version", jp2klib_version);
4225-
Py_XDECREF(jp2klib_version);
4224+
PyObject *v = PyUnicode_FromString(ImagingJpeg2KVersion());
4225+
PyDict_SetItemString(d, "jp2klib_version", v ? v : Py_None);
4226+
Py_XDECREF(v);
42264227
}
42274228
#endif
42284229

42294230
PyObject *have_libjpegturbo;
42304231
#ifdef LIBJPEG_TURBO_VERSION
42314232
have_libjpegturbo = Py_True;
4233+
{
42324234
#define tostr1(a) #a
42334235
#define tostr(a) tostr1(a)
4234-
PyObject *libjpeg_turbo_version = PyUnicode_FromString(tostr(LIBJPEG_TURBO_VERSION));
4235-
PyDict_SetItemString(d, "libjpeg_turbo_version", libjpeg_turbo_version);
4236-
Py_XDECREF(libjpeg_turbo_version);
4236+
PyObject *v = PyUnicode_FromString(tostr(LIBJPEG_TURBO_VERSION));
4237+
PyDict_SetItemString(d, "libjpeg_turbo_version", v ? v : Py_None);
4238+
Py_XDECREF(v);
42374239
#undef tostr
42384240
#undef tostr1
4241+
}
42394242
#else
42404243
have_libjpegturbo = Py_False;
42414244
#endif
@@ -4247,9 +4250,9 @@ setup_module(PyObject *m) {
42474250
have_libimagequant = Py_True;
42484251
{
42494252
extern const char *ImagingImageQuantVersion(void);
4250-
PyObject *imagequant_version = PyUnicode_FromString(ImagingImageQuantVersion());
4251-
PyDict_SetItemString(d, "imagequant_version", imagequant_version);
4252-
Py_XDECREF(imagequant_version);
4253+
PyObject *v = PyUnicode_FromString(ImagingImageQuantVersion());
4254+
PyDict_SetItemString(d, "imagequant_version", v ? v : Py_None);
4255+
Py_XDECREF(v);
42534256
}
42544257
#else
42554258
have_libimagequant = Py_False;
@@ -4266,18 +4269,18 @@ setup_module(PyObject *m) {
42664269
PyModule_AddIntConstant(m, "FIXED", Z_FIXED);
42674270
{
42684271
extern const char *ImagingZipVersion(void);
4269-
PyObject *zlibversion = PyUnicode_FromString(ImagingZipVersion());
4270-
PyDict_SetItemString(d, "zlib_version", zlibversion);
4271-
Py_XDECREF(zlibversion);
4272+
PyObject *v = PyUnicode_FromString(ImagingZipVersion());
4273+
PyDict_SetItemString(d, "zlib_version", v ? v : Py_None);
4274+
Py_XDECREF(v);
42724275
}
42734276
#endif
42744277

42754278
#ifdef HAVE_LIBTIFF
42764279
{
42774280
extern const char *ImagingTiffVersion(void);
4278-
PyObject *libtiff_version = PyUnicode_FromString(ImagingTiffVersion());
4279-
PyDict_SetItemString(d, "libtiff_version", libtiff_version);
4280-
Py_XDECREF(libtiff_version);
4281+
PyObject *v = PyUnicode_FromString(ImagingTiffVersion());
4282+
PyDict_SetItemString(d, "libtiff_version", v ? v : Py_None);
4283+
Py_XDECREF(v);
42814284

42824285
// Test for libtiff 4.0 or later, excluding libtiff 3.9.6 and 3.9.7
42834286
PyObject *support_custom_tags;
@@ -4301,7 +4304,7 @@ setup_module(PyObject *m) {
43014304
PyModule_AddObject(m, "HAVE_XCB", have_xcb);
43024305

43034306
PyObject *pillow_version = PyUnicode_FromString(version);
4304-
PyDict_SetItemString(d, "PILLOW_VERSION", pillow_version);
4307+
PyDict_SetItemString(d, "PILLOW_VERSION", pillow_version ? pillow_version : Py_None);
43054308
Py_XDECREF(pillow_version);
43064309

43074310
return 0;

src/_imagingcms.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1533,7 +1533,7 @@ setup_module(PyObject *m) {
15331533
} else {
15341534
v = PyUnicode_FromFormat("%d.%d", vn / 1000, (vn / 10) % 100);
15351535
}
1536-
PyDict_SetItemString(d, "littlecms_version", v);
1536+
PyDict_SetItemString(d, "littlecms_version", v ? v : Py_None);
15371537
Py_XDECREF(v);
15381538

15391539
return 0;

src/_imagingft.c

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1130,15 +1130,15 @@ font_getvaraxes(FontObject *self) {
11301130

11311131
list_axis = PyDict_New();
11321132
PyObject *minimum = PyLong_FromLong(axis.minimum / 65536);
1133-
PyDict_SetItemString(list_axis, "minimum", minimum);
1133+
PyDict_SetItemString(list_axis, "minimum", minimum ? minimum : Py_None);
11341134
Py_XDECREF(minimum);
11351135

11361136
PyObject *def = PyLong_FromLong(axis.def / 65536);
1137-
PyDict_SetItemString(list_axis, "default", def);
1137+
PyDict_SetItemString(list_axis, "default", def ? def : Py_None);
11381138
Py_XDECREF(def);
11391139

11401140
PyObject *maximum = PyLong_FromLong(axis.maximum / 65536);
1141-
PyDict_SetItemString(list_axis, "maximum", maximum);
1141+
PyDict_SetItemString(list_axis, "maximum", maximum ? maximum : Py_None);
11421142
Py_XDECREF(maximum);
11431143

11441144
for (j = 0; j < name_count; j++) {
@@ -1149,7 +1149,7 @@ font_getvaraxes(FontObject *self) {
11491149

11501150
if (name.name_id == axis.strid) {
11511151
axis_name = Py_BuildValue("y#", name.string, name.string_len);
1152-
PyDict_SetItemString(list_axis, "name", axis_name);
1152+
PyDict_SetItemString(list_axis, "name", axis_name ? axis_name : Py_None);
11531153
Py_XDECREF(axis_name);
11541154
break;
11551155
}
@@ -1365,7 +1365,7 @@ setup_module(PyObject *m) {
13651365
FT_Library_Version(library, &major, &minor, &patch);
13661366

13671367
v = PyUnicode_FromFormat("%d.%d.%d", major, minor, patch);
1368-
PyDict_SetItemString(d, "freetype2_version", v);
1368+
PyDict_SetItemString(d, "freetype2_version", v ? v : Py_None);
13691369
Py_XDECREF(v);
13701370

13711371
#ifdef HAVE_RAQM
@@ -1386,35 +1386,32 @@ setup_module(PyObject *m) {
13861386
PyDict_SetItemString(d, "HAVE_HARFBUZZ", v);
13871387
Py_DECREF(v);
13881388
if (have_raqm) {
1389+
v = NULL;
13891390
#ifdef RAQM_VERSION_MAJOR
13901391
v = PyUnicode_FromString(raqm_version_string());
1391-
#else
1392-
v = Py_None;
13931392
#endif
1394-
PyDict_SetItemString(d, "raqm_version", v);
1393+
PyDict_SetItemString(d, "raqm_version", v ? v : Py_None);
13951394
Py_XDECREF(v);
13961395

1396+
v = NULL;
13971397
#ifdef FRIBIDI_MAJOR_VERSION
13981398
{
13991399
const char *a = strchr(fribidi_version_info, ')');
14001400
const char *b = strchr(fribidi_version_info, '\n');
14011401
if (a && b && a + 2 < b) {
14021402
v = PyUnicode_FromStringAndSize(a + 2, b - (a + 2));
1403-
} else {
1404-
v = Py_None;
14051403
}
14061404
}
1407-
#else
1408-
v = Py_None;
14091405
#endif
1410-
PyDict_SetItemString(d, "fribidi_version", v);
1406+
PyDict_SetItemString(d, "fribidi_version", v ? v : Py_None);
1407+
Py_XDECREF(v);
14111408

1409+
v = NULL;
14121410
#ifdef HB_VERSION_STRING
14131411
v = PyUnicode_FromString(hb_version_string());
1414-
#else
1415-
v = Py_None;
14161412
#endif
1417-
PyDict_SetItemString(d, "harfbuzz_version", v);
1413+
PyDict_SetItemString(d, "harfbuzz_version", v ? v : Py_None);
1414+
Py_XDECREF(v);
14181415
}
14191416

14201417
return 0;

src/_imagingmorph.c

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -238,17 +238,6 @@ get_on_pixels(PyObject *self, PyObject *args) {
238238
return ret;
239239
}
240240

241-
static int
242-
setup_module(PyObject *m) {
243-
PyObject *d = PyModule_GetDict(m);
244-
245-
PyObject *version = PyUnicode_FromString("0.1");
246-
PyDict_SetItemString(d, "__version", version);
247-
Py_XDECREF(version);
248-
249-
return 0;
250-
}
251-
252241
static PyMethodDef functions[] = {
253242
/* Functions */
254243
{"apply", (PyCFunction)apply, METH_VARARGS, NULL},
@@ -270,9 +259,5 @@ PyInit__imagingmorph(void) {
270259

271260
m = PyModule_Create(&module_def);
272261

273-
if (setup_module(m) < 0) {
274-
return NULL;
275-
}
276-
277262
return m;
278263
}

src/_webp.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -962,9 +962,9 @@ setup_module(PyObject *m) {
962962
addAnimFlagToModule(m);
963963
addTransparencyFlagToModule(m);
964964

965-
PyObject *webpdecoder_version = PyUnicode_FromString(WebPDecoderVersion_str());
966-
PyDict_SetItemString(d, "webpdecoder_version", webpdecoder_version);
967-
Py_XDECREF(webpdecoder_version);
965+
PyObject *v = PyUnicode_FromString(WebPDecoderVersion_str());
966+
PyDict_SetItemString(d, "webpdecoder_version", v ? v : Py_None);
967+
Py_XDECREF(v);
968968

969969
#ifdef HAVE_WEBPANIM
970970
/* Ready object types */

0 commit comments

Comments
 (0)