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
