Skip to content

Commit ec62643

Browse files
authored
Merge pull request #2717 from Starbuck5/rwobject-code
Cleanup rwobject.c file object methods
2 parents f45b277 + b7e797d commit ec62643

File tree

1 file changed

+7
-109
lines changed

1 file changed

+7
-109
lines changed

src_c/rwobject.c

Lines changed: 7 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -31,29 +31,12 @@
3131

3232
#include "doc/pygame_doc.h"
3333

34-
#if defined(_WIN32)
35-
#define PG_LSEEK _lseeki64
36-
#elif defined(__APPLE__)
37-
/* Mac does not implement lseek64 */
38-
#define PG_LSEEK lseek
39-
#elif defined(__EMSCRIPTEN__)
40-
/* emsdk mvp 1.0 does not implement lseek64 */
41-
#define PG_LSEEK lseek
42-
#elif defined(_LARGEFILE64_SOURCE)
43-
/* for glibc system that support LFS */
44-
#define PG_LSEEK lseek64
45-
#else
46-
#define PG_LSEEK lseek
47-
#endif
48-
4934
typedef struct {
5035
PyObject *read;
5136
PyObject *write;
5237
PyObject *seek;
5338
PyObject *tell;
5439
PyObject *close;
55-
PyObject *file;
56-
int fileno;
5740
} pgRWHelper;
5841

5942
/*static const char pg_default_encoding[] = "unicode_escape";*/
@@ -319,15 +302,11 @@ _pg_rw_size(SDL_RWops *context)
319302
PyObject *tmp = NULL;
320303
Sint64 size;
321304
Sint64 retval = -1;
322-
#ifdef WITH_THREAD
323-
PyGILState_STATE state;
324-
#endif /* WITH_THREAD */
325305

326306
if (!helper->seek || !helper->tell)
327307
return retval;
328-
#ifdef WITH_THREAD
329-
state = PyGILState_Ensure();
330-
#endif /* WITH_THREAD */
308+
309+
PyGILState_STATE state = PyGILState_Ensure();
331310

332311
/* Current file position; need to restore it later.
333312
*/
@@ -378,38 +357,21 @@ _pg_rw_size(SDL_RWops *context)
378357
*/
379358
Py_XDECREF(pos);
380359
Py_XDECREF(tmp);
381-
#ifdef WITH_THREAD
382360
PyGILState_Release(state);
383-
#endif
384361
return retval;
385362
}
386363

387364
static size_t
388365
_pg_rw_write(SDL_RWops *context, const void *ptr, size_t size, size_t num)
389366
{
390-
#ifndef WITH_THREAD
391-
pgRWHelper *helper = (pgRWHelper *)context->hidden.unknown.data1;
392-
PyObject *result;
393-
394-
if (!helper->write)
395-
return -1;
396-
397-
result = PyObject_CallFunction(helper->write, "y#", (const char *)ptr,
398-
(Py_ssize_t)size * num);
399-
if (!result)
400-
return -1;
401-
402-
Py_DECREF(result);
403-
return num;
404-
#else /* WITH_THREAD */
405367
pgRWHelper *helper = (pgRWHelper *)context->hidden.unknown.data1;
406368
PyObject *result;
407369
size_t retval;
408370

409-
PyGILState_STATE state;
410371
if (!helper->write)
411372
return -1;
412-
state = PyGILState_Ensure();
373+
374+
PyGILState_STATE state = PyGILState_Ensure();
413375

414376
result = PyObject_CallFunction(helper->write, "y#", (const char *)ptr,
415377
(Py_ssize_t)size * num);
@@ -425,7 +387,6 @@ _pg_rw_write(SDL_RWops *context, const void *ptr, size_t size, size_t num)
425387
end:
426388
PyGILState_Release(state);
427389
return retval;
428-
#endif /* WITH_THREAD */
429390
}
430391

431392
static int
@@ -434,10 +395,7 @@ _pg_rw_close(SDL_RWops *context)
434395
pgRWHelper *helper = (pgRWHelper *)context->hidden.unknown.data1;
435396
PyObject *result;
436397
int retval = 0;
437-
#ifdef WITH_THREAD
438-
PyGILState_STATE state;
439-
state = PyGILState_Ensure();
440-
#endif /* WITH_THREAD */
398+
PyGILState_STATE state = PyGILState_Ensure();
441399

442400
if (helper->close) {
443401
result = PyObject_CallFunction(helper->close, NULL);
@@ -453,12 +411,9 @@ _pg_rw_close(SDL_RWops *context)
453411
Py_XDECREF(helper->write);
454412
Py_XDECREF(helper->read);
455413
Py_XDECREF(helper->close);
456-
Py_XDECREF(helper->file);
457414

458415
PyMem_Free(helper);
459-
#ifdef WITH_THREAD
460416
PyGILState_Release(state);
461-
#endif /* WITH_THREAD */
462417
SDL_FreeRW(context);
463418
return retval;
464419
}
@@ -477,9 +432,6 @@ pgRWops_FromFileObject(PyObject *obj)
477432
if (helper == NULL) {
478433
return (SDL_RWops *)PyErr_NoMemory();
479434
}
480-
helper->fileno = PyObject_AsFileDescriptor(obj);
481-
if (helper->fileno == -1)
482-
PyErr_Clear();
483435
if (fetch_object_methods(helper, obj)) {
484436
PyMem_Free(helper);
485437
return NULL;
@@ -491,9 +443,6 @@ pgRWops_FromFileObject(PyObject *obj)
491443
return (SDL_RWops *)PyErr_NoMemory();
492444
}
493445

494-
helper->file = obj;
495-
Py_INCREF(obj);
496-
497446
/* Adding a helper to the hidden data to support file-like object RWops */
498447
rw->hidden.unknown.data1 = (void *)helper;
499448
rw->size = _pg_rw_size;
@@ -511,17 +460,11 @@ _pg_rw_seek(SDL_RWops *context, Sint64 offset, int whence)
511460
pgRWHelper *helper = (pgRWHelper *)context->hidden.unknown.data1;
512461
PyObject *result;
513462
Sint64 retval;
514-
#ifdef WITH_THREAD
515-
PyGILState_STATE state;
516-
517-
if (helper->fileno != -1) {
518-
return PG_LSEEK(helper->fileno, offset, whence);
519-
}
520463

521464
if (!helper->seek || !helper->tell)
522465
return -1;
523466

524-
state = PyGILState_Ensure();
467+
PyGILState_STATE state = PyGILState_Ensure();
525468

526469
if (!(offset == 0 &&
527470
whence == SEEK_CUR)) /* being seek'd, not just tell'd */
@@ -553,35 +496,6 @@ _pg_rw_seek(SDL_RWops *context, Sint64 offset, int whence)
553496
PyGILState_Release(state);
554497

555498
return retval;
556-
#else /* ~WITH_THREAD */
557-
if (helper->fileno != -1) {
558-
return PG_LSEEK(helper->fileno, offset, whence);
559-
}
560-
561-
if (!helper->seek || !helper->tell)
562-
return -1;
563-
564-
if (!(offset == 0 && whence == SEEK_CUR)) /*being called only for 'tell'*/
565-
{
566-
result = PyObject_CallFunction(helper->seek, "Li", (long long)offset,
567-
whence);
568-
if (!result)
569-
return -1;
570-
Py_DECREF(result);
571-
}
572-
573-
result = PyObject_CallFunction(helper->tell, NULL);
574-
if (!result)
575-
return -1;
576-
577-
retval = PyLong_AsLongLong(result);
578-
if (retval == -1 && PyErr_Occurred())
579-
PyErr_Clear();
580-
581-
Py_DECREF(result);
582-
583-
return retval;
584-
#endif /* ~WITH_THREAD*/
585499
}
586500

587501
static size_t
@@ -590,25 +504,11 @@ _pg_rw_read(SDL_RWops *context, void *ptr, size_t size, size_t maxnum)
590504
pgRWHelper *helper = (pgRWHelper *)context->hidden.unknown.data1;
591505
PyObject *result;
592506
Py_ssize_t retval;
593-
#ifdef WITH_THREAD
594-
PyGILState_STATE state;
595-
#endif /* WITH_THREAD */
596-
597-
if (helper->fileno != -1) {
598-
retval = read(helper->fileno, ptr, (unsigned int)(size * maxnum));
599-
if (retval == -1) {
600-
return -1;
601-
}
602-
retval /= size;
603-
return retval;
604-
}
605507

606508
if (!helper->read)
607509
return -1;
608510

609-
#ifdef WITH_THREAD
610-
state = PyGILState_Ensure();
611-
#endif /* WITH_THREAD */
511+
PyGILState_STATE state = PyGILState_Ensure();
612512
result = PyObject_CallFunction(helper->read, "K",
613513
(unsigned long long)size * maxnum);
614514
if (!result) {
@@ -633,9 +533,7 @@ _pg_rw_read(SDL_RWops *context, void *ptr, size_t size, size_t maxnum)
633533
Py_DECREF(result);
634534

635535
end:
636-
#ifdef WITH_THREAD
637536
PyGILState_Release(state);
638-
#endif /* WITH_THREAD */
639537

640538
return retval;
641539
}

0 commit comments

Comments
 (0)