Author: cito
Date: Sat Mar 26 13:22:18 2016
New Revision: 870

Log:
Fix some issues when compiling with MSVC 9

Modified:
   trunk/pgmodule.c
   trunk/setup.py

Modified: trunk/pgmodule.c
==============================================================================
--- trunk/pgmodule.c    Sun Mar 20 16:01:00 2016        (r869)
+++ trunk/pgmodule.c    Sat Mar 26 13:22:18 2016        (r870)
@@ -472,7 +472,7 @@
        {
                case PYGRES_INT:
                        n = sizeof(buf)/sizeof(buf[0]) - 1;
-                       if (size < n) n = size;
+                       if ((int)size < n) n = (int)size;
                        for (i = 0, t = buf; i < n; ++i) *t++ = *s++;
                        *t = '\0';
                        obj = PyInt_FromString(buf, NULL, 10);
@@ -480,7 +480,7 @@
 
                case PYGRES_LONG:
                        n = sizeof(buf)/sizeof(buf[0]) - 1;
-                       if (size < n) n = size;
+                       if ((int)size < n) n = (int)size;
                        for (i = 0, t = buf; i < n; ++i) *t++ = *s++;
                        *t = '\0';
                        obj = PyLong_FromString(buf, NULL, 10);
@@ -1460,147 +1460,154 @@
 {
        const int n = PQnfields(res);
 
-       if (n <= 0)
-               return PyStr_FromString("(nothing selected)");
-
-       char * const aligns = (char *) PyMem_Malloc(n * sizeof(char));
-       int * const sizes = (int *) PyMem_Malloc(n * sizeof(int));
-
-       if (!aligns || !sizes)
-       {
-               PyMem_Free(aligns); PyMem_Free(sizes); return PyErr_NoMemory();
-       }
-
-       const int m = PQntuples(res);
-       int i, j;
-       size_t size;
-       char *buffer;
-
-       /* calculate sizes and alignments */
-       for (j = 0; j < n; ++j)
+       if (n > 0)
        {
-               const char * const s = PQfname(res, j);
-               const int format = PQfformat(res, j);
+               char * const aligns = (char *) PyMem_Malloc(n * sizeof(char));
+               int * const sizes = (int *) PyMem_Malloc(n * sizeof(int));
 
-               sizes[j] = s ? (int)strlen(s) : 0;
-               if (format)
-               {
-                       aligns[j] = '\0';
-                       if (m && sizes[j] < 8)
-                               /* "<binary>" must fit */
-                               sizes[j] = 8;
-               }
-               else
+               if (aligns && sizes)
                {
-                       const Oid ftype = PQftype(res, j);
+                       const int m = PQntuples(res);
+                       int i, j;
+                       size_t size;
+                       char *buffer;
 
-                       switch (ftype)
+                       /* calculate sizes and alignments */
+                       for (j = 0; j < n; ++j)
                        {
-                               case INT2OID:
-                               case INT4OID:
-                               case INT8OID:
-                               case FLOAT4OID:
-                               case FLOAT8OID:
-                               case NUMERICOID:
-                               case OIDOID:
-                               case XIDOID:
-                               case CIDOID:
-                               case CASHOID:
-                                       aligns[j] = 'r';
-                                       break;
-                               default:
-                                       aligns[j] = 'l';
+                               const char * const s = PQfname(res, j);
+                               const int format = PQfformat(res, j);
+
+                               sizes[j] = s ? (int)strlen(s) : 0;
+                               if (format)
+                               {
+                                       aligns[j] = '\0';
+                                       if (m && sizes[j] < 8)
+                                               /* "<binary>" must fit */
+                                               sizes[j] = 8;
+                               }
+                               else
+                               {
+                                       const Oid ftype = PQftype(res, j);
+
+                                       switch (ftype)
+                                       {
+                                               case INT2OID:
+                                               case INT4OID:
+                                               case INT8OID:
+                                               case FLOAT4OID:
+                                               case FLOAT8OID:
+                                               case NUMERICOID:
+                                               case OIDOID:
+                                               case XIDOID:
+                                               case CIDOID:
+                                               case CASHOID:
+                                                       aligns[j] = 'r';
+                                                       break;
+                                               default:
+                                                       aligns[j] = 'l';
+                                       }
+                               }
                        }
-               }
-       }
-       for (i = 0; i < m; ++i)
-       {
-               for (j = 0; j < n; ++j)
-               {
-                       if (aligns[j])
+                       for (i = 0; i < m; ++i)
                        {
-                               const int k = PQgetlength(res, i, j);
+                               for (j = 0; j < n; ++j)
+                               {
+                                       if (aligns[j])
+                                       {
+                                               const int k = PQgetlength(res, 
i, j);
 
-                               if (sizes[j] < k)
-                                       /* value must fit */
-                                       sizes[j] = k;
+                                               if (sizes[j] < k)
+                                                       /* value must fit */
+                                                       sizes[j] = k;
+                                       }
+                               }
                        }
-               }
-       }
-       size = 0;
-       /* size of one row */
-       for (j = 0; j < n; ++j) size += sizes[j] + 1;
-       /* times number of rows incl. heading */
-       size *= (m + 2);
-       /* plus size of footer */
-       size += 40;
-       /* is the buffer size that needs to be allocated */
-       buffer = (char *) PyMem_Malloc(size);
-       if (!buffer)
-       {
-               PyMem_Free(aligns); PyMem_Free(sizes); return PyErr_NoMemory();
-       }
-       char *p = buffer;
-       PyObject *result;
+                       size = 0;
+                       /* size of one row */
+                       for (j = 0; j < n; ++j) size += sizes[j] + 1;
+                       /* times number of rows incl. heading */
+                       size *= (m + 2);
+                       /* plus size of footer */
+                       size += 40;
+                       /* is the buffer size that needs to be allocated */
+                       buffer = (char *) PyMem_Malloc(size);
+                       if (buffer)
+                       {
+                               char *p = buffer;
+                               PyObject *result;
 
-       /* create the header */
-       for (j = 0; j < n; ++j)
-       {
-               const char * const s = PQfname(res, j);
-               const int k = sizes[j];
-               const int h = (k - (int)strlen(s)) / 2;
-
-               sprintf(p, "%*s", h, "");
-               sprintf(p + h, "%-*s", k - h, s);
-               p += k;
-               if (j + 1 < n)
-                       *p++ = '|';
-       }
-       *p++ = '\n';
-       for (j = 0; j < n; ++j)
-       {
-               int k = sizes[j];
-
-               while (k--)
-                       *p++ = '-';
-               if (j + 1 < n)
-                       *p++ = '+';
-       }
-       *p++ = '\n';
-       /* create the body */
-       for (i = 0; i < m; ++i)
-       {
-               for (j = 0; j < n; ++j)
-               {
-                       const char align = aligns[j];
-                       const int k = sizes[j];
+                               /* create the header */
+                               for (j = 0; j < n; ++j)
+                               {
+                                       const char * const s = PQfname(res, j);
+                                       const int k = sizes[j];
+                                       const int h = (k - (int)strlen(s)) / 2;
+
+                                       sprintf(p, "%*s", h, "");
+                                       sprintf(p + h, "%-*s", k - h, s);
+                                       p += k;
+                                       if (j + 1 < n)
+                                               *p++ = '|';
+                               }
+                               *p++ = '\n';
+                               for (j = 0; j < n; ++j)
+                               {
+                                       int k = sizes[j];
 
-                       if (align)
-                       {
-                               sprintf(p, align == 'r' ?
-                                       "%*s" : "%-*s", k,
-                                       PQgetvalue(res, i, j));
+                                       while (k--)
+                                               *p++ = '-';
+                                       if (j + 1 < n)
+                                               *p++ = '+';
+                               }
+                               *p++ = '\n';
+                               /* create the body */
+                               for (i = 0; i < m; ++i)
+                               {
+                                       for (j = 0; j < n; ++j)
+                                       {
+                                               const char align = aligns[j];
+                                               const int k = sizes[j];
+
+                                               if (align)
+                                               {
+                                                       sprintf(p, align == 'r' 
?
+                                                               "%*s" : "%-*s", 
k,
+                                                               PQgetvalue(res, 
i, j));
+                                               }
+                                               else
+                                               {
+                                                       sprintf(p, "%-*s", k,
+                                                               
PQgetisnull(res, i, j) ?
+                                                               "" : 
"<binary>");
+                                               }
+                                               p += k;
+                                               if (j + 1 < n)
+                                                       *p++ = '|';
+                                       }
+                                       *p++ = '\n';
+                               }
+                               /* free memory */
+                               PyMem_Free(aligns); PyMem_Free(sizes);
+                               /* create the footer */
+                               sprintf(p, "(%d row%s)", m, m == 1 ? "" : "s");
+                               /* return the result */
+                               result = PyStr_FromString(buffer);
+                               PyMem_Free(buffer);
+                               return result;
                        }
                        else
                        {
-                               sprintf(p, "%-*s", k,
-                                       PQgetisnull(res, i, j) ?
-                                       "" : "<binary>");
-                       }
-                       p += k;
-                       if (j + 1 < n)
-                               *p++ = '|';
-               }
-               *p++ = '\n';
-       }
-       /* free memory */
-       PyMem_Free(aligns); PyMem_Free(sizes);
-       /* create the footer */
-       sprintf(p, "(%d row%s)", m, m == 1 ? "" : "s");
-       /* return the result */
-       result = PyStr_FromString(buffer);
-       PyMem_Free(buffer);
-       return result;
+                               PyMem_Free(aligns); PyMem_Free(sizes); return 
PyErr_NoMemory();
+                       }
+               }
+               else
+               {
+                       PyMem_Free(aligns); PyMem_Free(sizes); return 
PyErr_NoMemory();
+               }
+       }
+       else
+               return PyStr_FromString("(nothing selected)");
 }
 
 /* --------------------------------------------------------------------- */
@@ -2629,17 +2636,20 @@
                                        PyMem_Free(buffer);
                                        return NULL; /* pass the 
UnicodeEncodeError */
                                }
-                               const char* t = PyBytes_AsString(s);
-                               while (*t && bufsiz)
+                               else
                                {
-                                       if (*t == '\\' || *t == '\t' || *t == 
'\n')
+                                       const char* t = PyBytes_AsString(s);
+                                       while (*t && bufsiz)
                                        {
-                                               *bufpt++ = '\\'; --bufsiz;
-                                               if (!bufsiz) break;
+                                               if (*t == '\\' || *t == '\t' || 
*t == '\n')
+                                               {
+                                                       *bufpt++ = '\\'; 
--bufsiz;
+                                                       if (!bufsiz) break;
+                                               }
+                                               *bufpt++ = *t++; --bufsiz;
                                        }
-                                       *bufpt++ = *t++; --bufsiz;
+                                       Py_DECREF(s);
                                }
-                               Py_DECREF(s);
                        }
                        else if (PyInt_Check(item) || PyLong_Check(item))
                        {

Modified: trunk/setup.py
==============================================================================
--- trunk/setup.py      Sun Mar 20 16:01:00 2016        (r869)
+++ trunk/setup.py      Sat Mar 26 13:22:18 2016        (r870)
@@ -166,7 +166,8 @@
                     define_macros.append(('MS_WIN64', None))
             elif compiler == 'msvc':  # Microsoft Visual C++
                 libraries[0] = 'lib' + libraries[0]
-                extra_compile_args[1:] = ['-J', '-W3', '-WX']
+                extra_compile_args[1:] = ['-J', '-W3', '-WX',
+                    '-Dinline=__inline']  # needed for MSVC 9
 
 
 setup(
_______________________________________________
PyGreSQL mailing list
[email protected]
https://mail.vex.net/mailman/listinfo.cgi/pygresql

Reply via email to