From 0fcab4a3ed5e39769609b60d6179c4c801e45985 Mon Sep 17 00:00:00 2001
From: Victor Stinner <victor.stinner@haypocalc.com>
Date: Tue, 4 Jan 2011 12:59:15 +0000
Subject: Issue #9566: use Py_ssize_t instead of int

---
 Modules/_ctypes/_ctypes.c |  6 +++---
 Modules/_testcapimodule.c |  2 +-
 Modules/audioop.c         |  2 +-
 Modules/md5module.c       |  4 ++--
 Modules/pyexpat.c         | 10 +++++-----
 Modules/selectmodule.c    |  3 +--
 Modules/sha1module.c      |  4 ++--
 Modules/sha256module.c    |  4 ++--
 Modules/sha512module.c    |  4 ++--
 Modules/unicodedata.c     | 10 ++++------
 Objects/codeobject.c      |  5 +++--
 Objects/listobject.c      |  2 +-
 Objects/typeobject.c      |  6 +++---
 Python/pythonrun.c        |  3 ++-
 14 files changed, 32 insertions(+), 33 deletions(-)

diff --git a/Modules/_ctypes/_ctypes.c b/Modules/_ctypes/_ctypes.c
index ed7c66a..ff35862 100644
--- a/Modules/_ctypes/_ctypes.c
+++ b/Modules/_ctypes/_ctypes.c
@@ -3925,14 +3925,14 @@ PyTypeObject PyCFuncPtr_Type = {
 
   Returns -1 on error, or the index of next argument on success.
  */
-static int
+static Py_ssize_t
 _init_pos_args(PyObject *self, PyTypeObject *type,
                PyObject *args, PyObject *kwds,
-               int index)
+               Py_ssize_t index)
 {
     StgDictObject *dict;
     PyObject *fields;
-    int i;
+    Py_ssize_t i;
 
     if (PyType_stgdict((PyObject *)type->tp_base)) {
         index = _init_pos_args(self, type->tp_base,
diff --git a/Modules/_testcapimodule.c b/Modules/_testcapimodule.c
index f0c07ae..587a9f0 100644
--- a/Modules/_testcapimodule.c
+++ b/Modules/_testcapimodule.c
@@ -2188,7 +2188,7 @@ argparsing(PyObject *o, PyObject *args)
             /* argument converter not called? */
             return NULL;
         /* Should be 1 */
-        res = PyLong_FromLong(Py_REFCNT(str2));
+        res = PyLong_FromSsize_t(Py_REFCNT(str2));
         Py_DECREF(str2);
         PyErr_Clear();
         return res;
diff --git a/Modules/audioop.c b/Modules/audioop.c
index 38e3e7a..a031d42 100644
--- a/Modules/audioop.c
+++ b/Modules/audioop.c
@@ -309,7 +309,7 @@ audioop_check_size(int size)
 }
 
 static int
-audioop_check_parameters(int len, int size)
+audioop_check_parameters(Py_ssize_t len, int size)
 {
     if (!audioop_check_size(size))
         return 0;
diff --git a/Modules/md5module.c b/Modules/md5module.c
index d217dc8..208930d 100644
--- a/Modules/md5module.c
+++ b/Modules/md5module.c
@@ -228,9 +228,9 @@ void md5_init(struct md5_state *md5)
    @param inlen  The length of the data (octets)
 */
 void md5_process(struct md5_state *md5,
-                const unsigned char *in, unsigned long inlen)
+                const unsigned char *in, Py_ssize_t inlen)
 {
-    unsigned long n;
+    Py_ssize_t n;
 
     assert(md5 != NULL);
     assert(in != NULL);
diff --git a/Modules/pyexpat.c b/Modules/pyexpat.c
index c83639c..dea682d 100644
--- a/Modules/pyexpat.c
+++ b/Modules/pyexpat.c
@@ -800,7 +800,7 @@ readinst(char *buf, int buf_size, PyObject *meth)
     PyObject *arg = NULL;
     PyObject *bytes = NULL;
     PyObject *str = NULL;
-    int len = -1;
+    Py_ssize_t len = -1;
     char *ptr;
 
     if ((bytes = PyLong_FromLong(buf_size)) == NULL)
@@ -831,7 +831,7 @@ readinst(char *buf, int buf_size, PyObject *meth)
     if (len > buf_size) {
         PyErr_Format(PyExc_ValueError,
                      "read() returned too much data: "
-                     "%i bytes requested, %i returned",
+                     "%i bytes requested, %zi returned",
                      buf_size, len);
         goto finally;
     }
@@ -839,7 +839,7 @@ readinst(char *buf, int buf_size, PyObject *meth)
 finally:
     Py_XDECREF(arg);
     Py_XDECREF(str);
-    return len;
+    return (int)len;
 }
 
 PyDoc_STRVAR(xmlparse_ParseFile__doc__,
@@ -1807,7 +1807,7 @@ MODULE_INITFUNC(void)
         Py_XDECREF(rev_codes_dict);
         return NULL;
     }
-    
+
 #define MYCONST(name) \
     if (PyModule_AddStringConstant(errors_module, #name,               \
                                    (char *)XML_ErrorString(name)) < 0) \
@@ -1873,7 +1873,7 @@ MODULE_INITFUNC(void)
         return NULL;
     if (PyModule_AddObject(errors_module, "messages", rev_codes_dict) < 0)
         return NULL;
-    
+
 #undef MYCONST
 
 #define MYCONST(c) PyModule_AddIntConstant(m, #c, c)
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 58cc4c7..65e1826 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -81,10 +81,9 @@ reap_obj(pylist fd2obj[FD_SETSIZE + 1])
 static int
 seq2set(PyObject *seq, fd_set *set, pylist fd2obj[FD_SETSIZE + 1])
 {
-    int i;
     int max = -1;
     int index = 0;
-    int len = -1;
+    Py_ssize_t i, len = -1;
     PyObject* fast_seq = NULL;
     PyObject* o = NULL;
 
diff --git a/Modules/sha1module.c b/Modules/sha1module.c
index b660042..b25bd44 100644
--- a/Modules/sha1module.c
+++ b/Modules/sha1module.c
@@ -203,9 +203,9 @@ void sha1_init(struct sha1_state *sha1)
    @param inlen  The length of the data (octets)
 */
 void sha1_process(struct sha1_state *sha1,
-                  const unsigned char *in, unsigned long inlen)
+                  const unsigned char *in, Py_ssize_t inlen)
 {
-    unsigned long n;
+    Py_ssize_t n;
 
     assert(sha1 != NULL);
     assert(in != NULL);
diff --git a/Modules/sha256module.c b/Modules/sha256module.c
index 705b31a..8617210 100644
--- a/Modules/sha256module.c
+++ b/Modules/sha256module.c
@@ -265,9 +265,9 @@ sha224_init(SHAobject *sha_info)
 /* update the SHA digest */
 
 static void
-sha_update(SHAobject *sha_info, SHA_BYTE *buffer, int count)
+sha_update(SHAobject *sha_info, SHA_BYTE *buffer, Py_ssize_t count)
 {
-    int i;
+    Py_ssize_t i;
     SHA_INT32 clo;
 
     clo = sha_info->count_lo + ((SHA_INT32) count << 3);
diff --git a/Modules/sha512module.c b/Modules/sha512module.c
index c403ed6..0faaf5c 100644
--- a/Modules/sha512module.c
+++ b/Modules/sha512module.c
@@ -291,9 +291,9 @@ sha384_init(SHAobject *sha_info)
 /* update the SHA digest */
 
 static void
-sha512_update(SHAobject *sha_info, SHA_BYTE *buffer, int count)
+sha512_update(SHAobject *sha_info, SHA_BYTE *buffer, Py_ssize_t count)
 {
-    int i;
+    Py_ssize_t i;
     SHA_INT32 clo;
 
     clo = sha_info->count_lo + ((SHA_INT32) count << 3);
diff --git a/Modules/unicodedata.c b/Modules/unicodedata.c
index bd96e36..463be2c 100644
--- a/Modules/unicodedata.c
+++ b/Modules/unicodedata.c
@@ -403,7 +403,8 @@ unicodedata_decomposition(PyObject *self, PyObject *args)
 {
     PyUnicodeObject *v;
     char decomp[256];
-    int code, index, count, i;
+    int code, index, count;
+    size_t i;
     unsigned int prefix_index;
     Py_UCS4 c;
 
@@ -450,15 +451,12 @@ unicodedata_decomposition(PyObject *self, PyObject *args)
     while (count-- > 0) {
         if (i)
             decomp[i++] = ' ';
-        assert((size_t)i < sizeof(decomp));
+        assert(i < sizeof(decomp));
         PyOS_snprintf(decomp + i, sizeof(decomp) - i, "%04X",
                       decomp_data[++index]);
         i += strlen(decomp + i);
     }
-
-    decomp[i] = '\0';
-
-    return PyUnicode_FromString(decomp);
+    return PyUnicode_FromStringAndSize(decomp, i);
 }
 
 static void
diff --git a/Objects/codeobject.c b/Objects/codeobject.c
index 54c23ae..e9cae13 100644
--- a/Objects/codeobject.c
+++ b/Objects/codeobject.c
@@ -492,7 +492,7 @@ PyTypeObject PyCode_Type = {
 int
 PyCode_Addr2Line(PyCodeObject *co, int addrq)
 {
-    int size = PyBytes_Size(co->co_lnotab) / 2;
+    Py_ssize_t size = PyBytes_Size(co->co_lnotab) / 2;
     unsigned char *p = (unsigned char*)PyBytes_AsString(co->co_lnotab);
     int line = co->co_firstlineno;
     int addr = 0;
@@ -510,7 +510,8 @@ PyCode_Addr2Line(PyCodeObject *co, int addrq)
 int
 _PyCode_CheckLineNumber(PyCodeObject* co, int lasti, PyAddrPair *bounds)
 {
-    int size, addr, line;
+    Py_ssize_t size;
+    int addr, line;
     unsigned char* p;
 
     p = (unsigned char*)PyBytes_AS_STRING(co->co_lnotab);
diff --git a/Objects/listobject.c b/Objects/listobject.c
index bcc6bc0..2e0c8aa 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -1381,7 +1381,7 @@ typedef struct s_MergeState {
 
 /* Conceptually a MergeState's constructor. */
 static void
-merge_init(MergeState *ms, int list_size, int has_keyfunc)
+merge_init(MergeState *ms, Py_ssize_t list_size, int has_keyfunc)
 {
     assert(ms != NULL);
     if (has_keyfunc) {
diff --git a/Objects/typeobject.c b/Objects/typeobject.c
index a5863dd..1fefe84 100644
--- a/Objects/typeobject.c
+++ b/Objects/typeobject.c
@@ -2325,7 +2325,7 @@ PyObject* PyType_FromSpec(PyType_Spec *spec)
     res->ht_type.tp_basicsize = spec->basicsize;
     res->ht_type.tp_itemsize = spec->itemsize;
     res->ht_type.tp_flags = spec->flags | Py_TPFLAGS_HEAPTYPE;
-    
+
     for (slot = spec->slots; slot->slot; slot++) {
 	if (slot->slot >= sizeof(slotoffsets)/sizeof(slotoffsets[0])) {
 	    PyErr_SetString(PyExc_RuntimeError, "invalid slot offset");
@@ -2335,7 +2335,7 @@ PyObject* PyType_FromSpec(PyType_Spec *spec)
     }
 
     return (PyObject*)res;
-    
+
  fail:
     Py_DECREF(res);
     return NULL;
@@ -6202,7 +6202,7 @@ super_init(PyObject *self, PyObject *args, PyObject *kwds)
            and first local variable on the stack. */
         PyFrameObject *f = PyThreadState_GET()->frame;
         PyCodeObject *co = f->f_code;
-        int i, n;
+        Py_ssize_t i, n;
         if (co == NULL) {
             PyErr_SetString(PyExc_SystemError,
                             "super(): no code object");
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index e3836b8..33f1873 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -1202,7 +1202,8 @@ PyRun_SimpleFileExFlags(FILE *fp, const char *filename, int closeit,
 {
     PyObject *m, *d, *v;
     const char *ext;
-    int set_file_name = 0, ret, len;
+    int set_file_name = 0, ret;
+    size_t len;
 
     m = PyImport_AddModule("__main__");
     if (m == NULL)
-- 
cgit v0.12