From: Daniele Varrazzo Date: Sat, 13 Aug 2022 01:44:17 +0000 (+0200) Subject: refactor(psycopg_c): define and use an ARRAYSIZE macro X-Git-Tag: 3.1~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=59a0221bea753b966fecca92d7ae76c2d56d755e;p=thirdparty%2Fpsycopg.git refactor(psycopg_c): define and use an ARRAYSIZE macro --- diff --git a/psycopg_c/psycopg_c/_psycopg.pyx b/psycopg_c/psycopg_c/_psycopg.pyx index b3781f6a2..6c325e7a3 100644 --- a/psycopg_c/psycopg_c/_psycopg.pyx +++ b/psycopg_c/psycopg_c/_psycopg.pyx @@ -22,6 +22,15 @@ PG_TEXT = _py_Format.TEXT PG_BINARY = _py_Format.BINARY +cdef extern from *: + """ +#ifndef ARRAYSIZE +#define ARRAYSIZE(a) ((sizeof(a) / sizeof(*(a)))) +#endif + """ + int ARRAYSIZE(void *array) + + include "_psycopg/adapt.pyx" include "_psycopg/copy.pyx" include "_psycopg/generators.pyx" diff --git a/psycopg_c/psycopg_c/types/datetime.pyx b/psycopg_c/psycopg_c/types/datetime.pyx index f1cd9c6a3..720a852c4 100644 --- a/psycopg_c/psycopg_c/types/datetime.pyx +++ b/psycopg_c/psycopg_c/types/datetime.pyx @@ -386,7 +386,7 @@ cdef class DateLoader(CLoader): cdef const char *ptr cdef const char *end = data + length - ptr = _parse_date_values(data, end, vals, sizeof(vals) // sizeof(vals[0])) + ptr = _parse_date_values(data, end, vals, ARRAYSIZE(vals)) if ptr == NULL: s = bytes(data).decode("utf8", "replace") raise e.DataError(f"can't parse date {s!r}") @@ -433,7 +433,7 @@ cdef class TimeLoader(CLoader): cdef const char *end = data + length # Parse the first 3 groups of digits - ptr = _parse_date_values(data, end, vals, sizeof(vals) // sizeof(vals[0])) + ptr = _parse_date_values(data, end, vals, ARRAYSIZE(vals)) if ptr == NULL: s = bytes(data).decode("utf8", "replace") raise e.DataError(f"can't parse time {s!r}") @@ -490,7 +490,7 @@ cdef class TimetzLoader(CLoader): cdef const char *end = data + length # Parse the first 3 groups of digits (time) - ptr = _parse_date_values(data, end, vals, 3) + ptr = _parse_date_values(data, end, vals, ARRAYSIZE(vals)) if ptr == NULL: s = bytes(data).decode("utf8", "replace") raise e.DataError(f"can't parse timetz {s!r}") @@ -577,7 +577,7 @@ cdef class TimestampLoader(CLoader): cdef const char *ptr # Parse the first 6 groups of digits (date and time) - ptr = _parse_date_values(data, end, vals, sizeof(vals) // sizeof(vals[0])) + ptr = _parse_date_values(data, end, vals, ARRAYSIZE(vals)) if ptr == NULL: raise _get_timestamp_load_error(self._pgconn, data) from None @@ -719,7 +719,7 @@ cdef class TimestamptzLoader(_BaseTimestamptzLoader): # Parse the first 6 groups of digits (date and time) cdef const char *ptr - ptr = _parse_date_values(data, end, vals, sizeof(vals) // sizeof(vals[0])) + ptr = _parse_date_values(data, end, vals, ARRAYSIZE(vals)) if ptr == NULL: raise _get_timestamp_load_error(self._pgconn, data) from None @@ -905,7 +905,7 @@ cdef class IntervalLoader(CLoader): cdef int vals[3] memset(vals, 0, sizeof(vals)) if ptr != NULL: - ptr = _parse_date_values(ptr, end, vals, sizeof(vals) // sizeof(vals[0])) + ptr = _parse_date_values(ptr, end, vals, ARRAYSIZE(vals)) if ptr == NULL: s = bytes(data).decode("utf8", "replace") raise e.DataError(f"can't parse interval {s!r}") @@ -1043,7 +1043,7 @@ cdef int _parse_timezone_to_seconds(const char **bufptr, const char *end): cdef int vals[3] memset(vals, 0, sizeof(vals)) - ptr = _parse_date_values(ptr + 1, end, vals, sizeof(vals) // sizeof(vals[0])) + ptr = _parse_date_values(ptr + 1, end, vals, ARRAYSIZE(vals)) if ptr == NULL: return 0