Pillow

Форк
0
/
codec_fd.c 
69 строк · 1.4 Кб
1
#include "Python.h"
2
#include "Imaging.h"
3

4
Py_ssize_t
5
_imaging_read_pyFd(PyObject *fd, char *dest, Py_ssize_t bytes) {
6
    /* dest should be a buffer bytes long, returns length of read
7
       -1 on error */
8

9
    PyObject *result;
10
    char *buffer;
11
    Py_ssize_t length;
12
    int bytes_result;
13

14
    result = PyObject_CallMethod(fd, "read", "n", bytes);
15

16
    bytes_result = PyBytes_AsStringAndSize(result, &buffer, &length);
17
    if (bytes_result == -1) {
18
        goto err;
19
    }
20

21
    if (length > bytes) {
22
        goto err;
23
    }
24

25
    memcpy(dest, buffer, length);
26

27
    Py_DECREF(result);
28
    return length;
29

30
err:
31
    Py_DECREF(result);
32
    return -1;
33
}
34

35
Py_ssize_t
36
_imaging_write_pyFd(PyObject *fd, char *src, Py_ssize_t bytes) {
37
    PyObject *result;
38
    PyObject *byteObj;
39

40
    byteObj = PyBytes_FromStringAndSize(src, bytes);
41
    result = PyObject_CallMethod(fd, "write", "O", byteObj);
42

43
    Py_DECREF(byteObj);
44
    Py_DECREF(result);
45

46
    return bytes;
47
}
48

49
int
50
_imaging_seek_pyFd(PyObject *fd, Py_ssize_t offset, int whence) {
51
    PyObject *result;
52

53
    result = PyObject_CallMethod(fd, "seek", "ni", offset, whence);
54

55
    Py_DECREF(result);
56
    return 0;
57
}
58

59
Py_ssize_t
60
_imaging_tell_pyFd(PyObject *fd) {
61
    PyObject *result;
62
    Py_ssize_t location;
63

64
    result = PyObject_CallMethod(fd, "tell", NULL);
65
    location = PyLong_AsSsize_t(result);
66

67
    Py_DECREF(result);
68
    return location;
69
}
70

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.