|
1 | 1 | /* |
2 | | - Copyright (C) 2001 Jeff Epler <jepler@unpythonic.dhs.org> |
| 2 | + Copyright (C) 2001 Jeff Epler <jepler@gmail.com> |
3 | 3 |
|
4 | 4 | This program can be distributed under the terms of the GNU LGPL. |
5 | 5 | See the file COPYING. |
|
94 | 94 | PyErr_SetString(PyExc_ValueError, "non-decodable filename"); |
95 | 95 | return NULL; |
96 | 96 | } |
97 | | - |
| 97 | + static inline Py_ssize_t PyString_Size(PyObject *s) { |
| 98 | + Py_ssize_t result = -1; |
| 99 | + (void)PyUnicode_AsUTF8AndSize(s, &result); |
| 100 | + return result; |
| 101 | + } |
98 | 102 | #else |
99 | 103 | #define PyString_AsString PyUnicode_AsUTF8 |
| 104 | + #define PyString_Size PyUnicode_GET_LENGTH |
100 | 105 | #endif |
101 | 106 | #define PyString_Check PyUnicode_Check |
102 | | - #define PyString_Size PyUnicode_GET_LENGTH |
103 | 107 | #endif |
104 | 108 |
|
105 | 109 | #ifdef FIX_PATH_DECODING |
@@ -683,14 +687,14 @@ read_func(const char *path, char *buf, size_t s, off_t off) |
683 | 687 | if(PyObject_CheckBuffer(v)) { |
684 | 688 | PyObject_GetBuffer(v, &buffer, PyBUF_SIMPLE); |
685 | 689 |
|
686 | | - if(buffer.len <= s) { |
| 690 | + if((size_t)buffer.len <= s) { |
687 | 691 | memcpy(buf, buffer.buf, buffer.len); |
688 | 692 | ret = buffer.len; |
689 | 693 | } |
690 | 694 |
|
691 | 695 | PyBuffer_Release(&buffer); |
692 | 696 | } else if(PyBytes_Check(v)) { |
693 | | - if(PyBytes_Size(v) > s) |
| 697 | + if((size_t)PyBytes_Size(v) > s) |
694 | 698 | goto OUT_DECREF; |
695 | 699 | memcpy(buf, PyBytes_AsString(v), PyBytes_Size(v)); |
696 | 700 | ret = PyBytes_Size(v); |
@@ -944,7 +948,7 @@ getxattr_func(const char *path, const char *name, char *value, size_t size) |
944 | 948 | /* If the size of the value buffer is too small to hold the result, errno |
945 | 949 | * is set to ERANGE. |
946 | 950 | */ |
947 | | - if (PyString_Size(v) > size) { |
| 951 | + if ((size_t)PyString_Size(v) > size) { |
948 | 952 | ret = -ERANGE; |
949 | 953 | goto OUT_DECREF; |
950 | 954 | } |
@@ -980,9 +984,9 @@ listxattr_func(const char *path, char *list, size_t size) |
980 | 984 | } |
981 | 985 |
|
982 | 986 | for (;;) { |
983 | | - int ilen; |
| 987 | + size_t ilen; |
984 | 988 |
|
985 | | - w = PyIter_Next(iter); |
| 989 | + w = PyIter_Next(iter); |
986 | 990 | if (!w) { |
987 | 991 | ret = lx - list; |
988 | 992 | break; |
@@ -1302,7 +1306,9 @@ pyfuse_loop_mt(struct fuse *f) |
1302 | 1306 | #ifdef WITH_THREAD |
1303 | 1307 | PyThreadState *save; |
1304 | 1308 |
|
| 1309 | +#if PY_VERSION_HEX < 0x03070000 |
1305 | 1310 | PyEval_InitThreads(); |
| 1311 | +#endif |
1306 | 1312 | interp = PyThreadState_Get()->interp; |
1307 | 1313 | save = PyEval_SaveThread(); |
1308 | 1314 | err = fuse_loop_mt(f); |
|
0 commit comments