[Python-checkins] python/nondist/sandbox/datetime datetime.c,1.64,1.65 obj_date.c,1.49,1.50 obj_datetime.c,1.47,1.48 obj_datetimetz.c,1.1,1.2 obj_time.c,1.8,1.9 obj_timetz.c,1.19,1.20
tim_one@users.sourceforge.net
tim_one@users.sourceforge.net
Fri, 13 Dec 2002 08:43:46 -0800
- Previous message: [Python-checkins] python/nondist/sandbox/datetime datetime.c,1.63,1.64 obj_timetz.c,1.18,1.19
- Next message: [Python-checkins] python/nondist/sandbox/datetime datetime.c,1.65,1.66 obj_datetimetz.c,1.2,1.3 test_both.py,1.70,1.71
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]
Update of /cvsroot/python/python/nondist/sandbox/datetime
In directory sc8-pr-cvs1:/tmp/cvs-serv16088
Modified Files:
datetime.c obj_date.c obj_datetime.c obj_datetimetz.c
obj_time.c obj_timetz.c
Log Message:
Refactor ever-bloating argument range-check code.
Index: datetime.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/datetime.c,v
retrieving revision 1.64
retrieving revision 1.65
diff -C2 -d -r1.64 -r1.65
*** datetime.c 13 Dec 2002 16:34:58 -0000 1.64
--- datetime.c 13 Dec 2002 16:43:11 -0000 1.65
***************
*** 113,139 ****
/* ---------------------------------------------------------------------------
- * Range checkers.
- */
-
- /* Check that -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS. If so, return 0.
- * If not, raise the given exception and return -1.
- */
- static int
- check_delta_day_range(long days, PyObject *exception)
- {
- char buf[200];
-
- if (-MAX_DELTA_DAYS <= days && days <= MAX_DELTA_DAYS)
- return 0;
- /* PyErr_Format() ignores the "l" in "%ld", which isn't correct
- * on boxes where sizeof(long) > sizeof(int). So roll our own.
- */
- PyOS_snprintf(buf, sizeof(buf), "days=%ld; must have magnitude <= %d",
- days, MAX_DELTA_DAYS);
- PyErr_SetString(exception, buf);
- return -1;
- }
-
- /* ---------------------------------------------------------------------------
* General calendrical helper functions
*/
--- 113,116 ----
***************
*** 329,332 ****
--- 306,386 ----
week1_monday += 7;
return week1_monday;
+ }
+
+ /* ---------------------------------------------------------------------------
+ * Range checkers.
+ */
+
+ /* Check that -MAX_DELTA_DAYS <= days <= MAX_DELTA_DAYS. If so, return 0.
+ * If not, raise the given exception and return -1.
+ */
+ static int
+ check_delta_day_range(long days, PyObject *exception)
+ {
+ char buf[200];
+
+ if (-MAX_DELTA_DAYS <= days && days <= MAX_DELTA_DAYS)
+ return 0;
+ /* PyErr_Format() ignores the "l" in "%ld", which isn't correct
+ * on boxes where sizeof(long) > sizeof(int). So roll our own.
+ */
+ PyOS_snprintf(buf, sizeof(buf), "days=%ld; must have magnitude <= %d",
+ days, MAX_DELTA_DAYS);
+ PyErr_SetString(exception, buf);
+ return -1;
+ }
+
+ /* Check that date arguments are in range. Return 0 if they are. If they
+ * aren't, raise ValueError and return -1.
+ */
+ static int
+ check_date_args(int year, int month, int day)
+ {
+
+ if (year < MINYEAR || year > MAXYEAR) {
+ PyErr_SetString(PyExc_ValueError,
+ "year is out of range");
+ return -1;
+ }
+ if (month < 1 || month > 12) {
+ PyErr_SetString(PyExc_ValueError,
+ "month must be in 1..12");
+ return -1;
+ }
+ if (day < 1 || day > days_in_month(year, month)) {
+ PyErr_SetString(PyExc_ValueError,
+ "day is out of range for month");
+ return -1;
+ }
+ return 0;
+ }
+
+ /* Check that time arguments are in range. Return 0 if they are. If they
+ * aren't, raise ValueError and return -1.
+ */
+ static int
+ check_time_args(int h, int m, int s, int us)
+ {
+ if (h < 0 || h > 23) {
+ PyErr_SetString(PyExc_ValueError,
+ "hour must be in 0..23");
+ return -1;
+ }
+ if (m < 0 || m > 59) {
+ PyErr_SetString(PyExc_ValueError,
+ "minute must be in 0..59");
+ return -1;
+ }
+ if (s < 0 || s > 59) {
+ PyErr_SetString(PyExc_ValueError,
+ "second must be in 0..59");
+ return -1;
+ }
+ if (us < 0 || us > 999999) {
+ PyErr_SetString(PyExc_ValueError,
+ "microsecond must be in 0..999999");
+ return -1;
+ }
+ return 0;
}
Index: obj_date.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_date.c,v
retrieving revision 1.49
retrieving revision 1.50
diff -C2 -d -r1.49 -r1.50
*** obj_date.c 13 Dec 2002 01:13:46 -0000 1.49
--- obj_date.c 13 Dec 2002 16:43:15 -0000 1.50
***************
*** 44,62 ****
if (PyArg_ParseTupleAndKeywords(args, kw, "lll", keywords,
&year, &month, &day)) {
! if (year < MINYEAR || year > MAXYEAR) {
! PyErr_SetString(PyExc_ValueError,
! "year is out of range");
! return NULL;
! }
! if (month < 1 || month > 12) {
! PyErr_SetString(PyExc_ValueError,
! "month must be in 1..12");
! return NULL;
! }
! if (day < 1 || day > days_in_month(year, month)) {
! PyErr_SetString(PyExc_ValueError,
! "day is out of range for month");
return NULL;
- }
self = new_date(year, month, day);
}
--- 44,49 ----
if (PyArg_ParseTupleAndKeywords(args, kw, "lll", keywords,
&year, &month, &day)) {
! if (check_date_args(year, month, day) < 0)
return NULL;
self = new_date(year, month, day);
}
Index: obj_datetime.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_datetime.c,v
retrieving revision 1.47
retrieving revision 1.48
diff -C2 -d -r1.47 -r1.48
*** obj_datetime.c 13 Dec 2002 01:13:46 -0000 1.47
--- obj_datetime.c 13 Dec 2002 16:43:20 -0000 1.48
***************
*** 59,97 ****
&year, &month, &day, &hour, &minute,
&second, &usecond)) {
! if (year < MINYEAR || year > MAXYEAR) {
! PyErr_SetString(PyExc_ValueError,
! "year is out of range");
! return NULL;
! }
! if (month < 1 || month > 12) {
! PyErr_SetString(PyExc_ValueError,
! "month must be in 1..12");
! return NULL;
! }
! if (day < 1 || day > days_in_month(year, month)) {
! PyErr_SetString(PyExc_ValueError,
! "day is out of range for month");
! return NULL;
! }
! if (hour < 0 || hour > 23) {
! PyErr_SetString(PyExc_ValueError,
! "hour must be in 0..23");
! return NULL;
! }
! if (minute < 0 || minute > 59) {
! PyErr_SetString(PyExc_ValueError,
! "minute must be in 0..59");
! return NULL;
! }
! if (second < 0 || second > 59) {
! PyErr_SetString(PyExc_ValueError,
! "second must be in 0..59");
return NULL;
! }
! if (usecond < 0 || usecond > 999999) {
! PyErr_SetString(PyExc_ValueError,
! "microsecond must be in 0..999999");
return NULL;
- }
self = new_datetime(year, month, day, hour, minute, second,
usecond);
--- 59,66 ----
&year, &month, &day, &hour, &minute,
&second, &usecond)) {
! if (check_date_args(year, month, day) < 0)
return NULL;
! if (check_time_args(hour, minute, second, usecond) < 0)
return NULL;
self = new_datetime(year, month, day, hour, minute, second,
usecond);
Index: obj_datetimetz.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_datetimetz.c,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** obj_datetimetz.c 13 Dec 2002 01:13:47 -0000 1.1
--- obj_datetimetz.c 13 Dec 2002 16:43:24 -0000 1.2
***************
*** 62,100 ****
&year, &month, &day, &hour, &minute,
&second, &usecond)) {
! if (year < MINYEAR || year > MAXYEAR) {
! PyErr_SetString(PyExc_ValueError,
! "year is out of range");
! return NULL;
! }
! if (month < 1 || month > 12) {
! PyErr_SetString(PyExc_ValueError,
! "month must be in 1..12");
! return NULL;
! }
! if (day < 1 || day > days_in_month(year, month)) {
! PyErr_SetString(PyExc_ValueError,
! "day is out of range for month");
! return NULL;
! }
! if (hour < 0 || hour > 23) {
! PyErr_SetString(PyExc_ValueError,
! "hour must be in 0..23");
! return NULL;
! }
! if (minute < 0 || minute > 59) {
! PyErr_SetString(PyExc_ValueError,
! "minute must be in 0..59");
! return NULL;
! }
! if (second < 0 || second > 59) {
! PyErr_SetString(PyExc_ValueError,
! "second must be in 0..59");
return NULL;
! }
! if (usecond < 0 || usecond > 999999) {
! PyErr_SetString(PyExc_ValueError,
! "microsecond must be in 0..999999");
return NULL;
- }
self = new_datetime(year, month, day, hour, minute, second,
usecond);
--- 62,69 ----
&year, &month, &day, &hour, &minute,
&second, &usecond)) {
! if (check_date_args(year, month, day) < 0)
return NULL;
! if (check_time_args(hour, minute, second, usecond) < 0)
return NULL;
self = new_datetime(year, month, day, hour, minute, second,
usecond);
Index: obj_time.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_time.c,v
retrieving revision 1.8
retrieving revision 1.9
diff -C2 -d -r1.8 -r1.9
*** obj_time.c 12 Dec 2002 17:58:28 -0000 1.8
--- obj_time.c 13 Dec 2002 16:43:25 -0000 1.9
***************
*** 39,71 ****
/* Constructors. */
- /* Check that time arguments are in range. Return 0 if they are. If they
- * aren't, raise ValueError and return -1.
- */
- static int
- time_check_time_args(int h, int m, int s, int us)
- {
- if (h < 0 || h > 23) {
- PyErr_SetString(PyExc_ValueError,
- "hour must be in 0..23");
- return -1;
- }
- if (m < 0 || m > 59) {
- PyErr_SetString(PyExc_ValueError,
- "minute must be in 0..59");
- return -1;
- }
- if (s < 0 || s > 59) {
- PyErr_SetString(PyExc_ValueError,
- "second must be in 0..59");
- return -1;
- }
- if (us < 0 || us > 999999) {
- PyErr_SetString(PyExc_ValueError,
- "microsecond must be in 0..999999");
- return -1;
- }
- return 0;
- }
-
static PyObject *
time_new(PyTypeObject *type, PyObject *args, PyObject *kw)
--- 39,42 ----
***************
*** 83,87 ****
if (PyArg_ParseTupleAndKeywords(args, kw, "|iiii", keywords,
&hour, &minute, &second, &usecond)) {
! if (time_check_time_args(hour, minute, second, usecond) < 0)
return NULL;
self = new_time(hour, minute, second, usecond);
--- 54,58 ----
if (PyArg_ParseTupleAndKeywords(args, kw, "|iiii", keywords,
&hour, &minute, &second, &usecond)) {
! if (check_time_args(hour, minute, second, usecond) < 0)
return NULL;
self = new_time(hour, minute, second, usecond);
Index: obj_timetz.c
===================================================================
RCS file: /cvsroot/python/python/nondist/sandbox/datetime/obj_timetz.c,v
retrieving revision 1.19
retrieving revision 1.20
diff -C2 -d -r1.19 -r1.20
*** obj_timetz.c 13 Dec 2002 16:35:09 -0000 1.19
--- obj_timetz.c 13 Dec 2002 16:43:28 -0000 1.20
***************
*** 38,42 ****
&hour, &minute, &second, &usecond,
&tzinfo)) {
! if (time_check_time_args(hour, minute, second, usecond) < 0)
return NULL;
if (check_tzinfo_subclass(tzinfo, "tzinfo argument") < 0)
--- 38,42 ----
&hour, &minute, &second, &usecond,
&tzinfo)) {
! if (check_time_args(hour, minute, second, usecond) < 0)
return NULL;
if (check_tzinfo_subclass(tzinfo, "tzinfo argument") < 0)
- Previous message: [Python-checkins] python/nondist/sandbox/datetime datetime.c,1.63,1.64 obj_timetz.c,1.18,1.19
- Next message: [Python-checkins] python/nondist/sandbox/datetime datetime.c,1.65,1.66 obj_datetimetz.c,1.2,1.3 test_both.py,1.70,1.71
- Messages sorted by:
[ date ]
[ thread ]
[ subject ]
[ author ]