diff options
author | Pablo Galindo <Pablogsal@gmail.com> | 2020-05-27 21:48:12 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-05-27 13:48:12 -0700 |
commit | e4799b95945b44eb0e2eea26473db8e0a49ed0ee (patch) | |
tree | 0a834d6f67374baffdd2d411c3846695725db4f7 /Modules/_zoneinfo.c | |
parent | c116c94ff119485761460f1033cdee425bed0310 (diff) | |
download | cpython-git-e4799b95945b44eb0e2eea26473db8e0a49ed0ee.tar.gz |
Fix compiler warnings in _zoneinfo.c (GH-20342)
```
D:\a\cpython\cpython\Modules\_zoneinfo.c(903,52): warning C4267: '=': conversion from 'size_t' to 'unsigned int', possible loss of data [D:\a\cpython\cpython\PCbuild\_zoneinfo.vcxproj]
D:\a\cpython\cpython\Modules\_zoneinfo.c(904,44): warning C4267: '=': conversion from 'size_t' to 'unsigned int', possible loss of data [D:\a\cpython\cpython\PCbuild\_zoneinfo.vcxproj]
D:\a\cpython\cpython\Modules\_zoneinfo.c(1772,31): warning C4244: '=': conversion from 'ssize_t' to 'uint8_t', possible loss of data [D:\a\cpython\cpython\PCbuild\_zoneinfo.vcxproj]
```
Diffstat (limited to 'Modules/_zoneinfo.c')
-rw-r--r-- | Modules/_zoneinfo.c | 56 |
1 files changed, 26 insertions, 30 deletions
diff --git a/Modules/_zoneinfo.c b/Modules/_zoneinfo.c index d852c763e2..e8b2831999 100644 --- a/Modules/_zoneinfo.c +++ b/Modules/_zoneinfo.c @@ -36,8 +36,8 @@ typedef struct { PyObject *key; PyObject *file_repr; PyObject *weakreflist; - unsigned int num_transitions; - unsigned int num_ttinfos; + size_t num_transitions; + size_t num_ttinfos; int64_t *trans_list_utc; int64_t *trans_list_wall[2]; _ttinfo **trans_ttinfos; // References to the ttinfo for each transition @@ -117,14 +117,14 @@ ts_to_local(size_t *trans_idx, int64_t *trans_utc, long *utcoff, static int parse_tz_str(PyObject *tz_str_obj, _tzrule *out); -static ssize_t +static Py_ssize_t parse_abbr(const char *const p, PyObject **abbr); -static ssize_t +static Py_ssize_t parse_tz_delta(const char *const p, long *total_seconds); -static ssize_t +static Py_ssize_t parse_transition_time(const char *const p, int8_t *hour, int8_t *minute, int8_t *second); -static ssize_t +static Py_ssize_t parse_transition_rule(const char *const p, TransitionRuleType **out); static _ttinfo * @@ -891,12 +891,12 @@ load_data(PyZoneInfo_ZoneInfo *self, PyObject *file_obj) // Load the relevant sizes Py_ssize_t num_transitions = PyTuple_Size(trans_utc); - if (num_transitions == -1) { + if (num_transitions < 0) { goto error; } Py_ssize_t num_ttinfos = PyTuple_Size(utcoff_list); - if (num_ttinfos == -1) { + if (num_ttinfos < 0) { goto error; } @@ -908,7 +908,7 @@ load_data(PyZoneInfo_ZoneInfo *self, PyObject *file_obj) PyMem_Malloc(self->num_transitions * sizeof(int64_t)); trans_idx = PyMem_Malloc(self->num_transitions * sizeof(Py_ssize_t)); - for (Py_ssize_t i = 0; i < self->num_transitions; ++i) { + for (size_t i = 0; i < self->num_transitions; ++i) { PyObject *num = PyTuple_GetItem(trans_utc, i); if (num == NULL) { goto error; @@ -946,7 +946,7 @@ load_data(PyZoneInfo_ZoneInfo *self, PyObject *file_obj) if (utcoff == NULL || isdst == NULL) { goto error; } - for (Py_ssize_t i = 0; i < self->num_ttinfos; ++i) { + for (size_t i = 0; i < self->num_ttinfos; ++i) { PyObject *num = PyTuple_GetItem(utcoff_list, i); if (num == NULL) { goto error; @@ -1468,7 +1468,7 @@ parse_tz_str(PyObject *tz_str_obj, _tzrule *out) char *p = tz_str; // Read the `std` abbreviation, which must be at least 3 characters long. - ssize_t num_chars = parse_abbr(p, &std_abbr); + Py_ssize_t num_chars = parse_abbr(p, &std_abbr); if (num_chars < 1) { PyErr_Format(PyExc_ValueError, "Invalid STD format in %R", tz_str_obj); goto error; @@ -1565,18 +1565,19 @@ error: return -1; } -static ssize_t -parse_uint(const char *const p) +static int +parse_uint(const char *const p, uint8_t *value) { if (!isdigit(*p)) { return -1; } - return (*p) - '0'; + *value = (*p) - '0'; + return 0; } /* Parse the STD and DST abbreviations from a TZ string. */ -static ssize_t +static Py_ssize_t parse_abbr(const char *const p, PyObject **abbr) { const char *ptr = p; @@ -1629,7 +1630,7 @@ parse_abbr(const char *const p, PyObject **abbr) } /* Parse a UTC offset from a TZ str. */ -static ssize_t +static Py_ssize_t parse_tz_delta(const char *const p, long *total_seconds) { // From the POSIX spec: @@ -1712,7 +1713,7 @@ complete: } /* Parse the date portion of a transition rule. */ -static ssize_t +static Py_ssize_t parse_transition_rule(const char *const p, TransitionRuleType **out) { // The full transition rule indicates when to change back and forth between @@ -1739,20 +1740,18 @@ parse_transition_rule(const char *const p, TransitionRuleType **out) if (*ptr == 'M') { uint8_t month, week, day; ptr++; - ssize_t tmp = parse_uint(ptr); - if (tmp < 0) { + if (parse_uint(ptr, &month)) { return -1; } - month = (uint8_t)tmp; ptr++; if (*ptr != '.') { - tmp = parse_uint(ptr); - if (tmp < 0) { + uint8_t tmp; + if (parse_uint(ptr, &tmp)) { return -1; } month *= 10; - month += (uint8_t)tmp; + month += tmp; ptr++; } @@ -1763,18 +1762,15 @@ parse_transition_rule(const char *const p, TransitionRuleType **out) } ptr++; - tmp = parse_uint(ptr); - if (tmp < 0) { + if (parse_uint(ptr, values[i])) { return -1; } ptr++; - - *(values[i]) = tmp; } if (*ptr == '/') { ptr++; - ssize_t num_chars = + Py_ssize_t num_chars = parse_transition_time(ptr, &hour, &minute, &second); if (num_chars < 0) { return -1; @@ -1816,7 +1812,7 @@ parse_transition_rule(const char *const p, TransitionRuleType **out) if (*ptr == '/') { ptr++; - ssize_t num_chars = + Py_ssize_t num_chars = parse_transition_time(ptr, &hour, &minute, &second); if (num_chars < 0) { return -1; @@ -1840,7 +1836,7 @@ parse_transition_rule(const char *const p, TransitionRuleType **out) } /* Parse the time portion of a transition rule (e.g. following an /) */ -static ssize_t +static Py_ssize_t parse_transition_time(const char *const p, int8_t *hour, int8_t *minute, int8_t *second) { |