ruby-changes:11638
From: akr <ko1@a...>
Date: Sat, 25 Apr 2009 16:21:31 +0900 (JST)
Subject: [ruby-changes:11638] Ruby:r23276 (trunk): * time.c (month_arg): extracted from time_arg.
akr 2009-04-25 16:20:20 +0900 (Sat, 25 Apr 2009) New Revision: 23276 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=23276 Log: * time.c (month_arg): extracted from time_arg. (validate_vtm): ditto. Modified files: trunk/ChangeLog trunk/time.c Index: time.c =================================================================== --- time.c (revision 23275) +++ time.c (revision 23276) @@ -1422,7 +1422,49 @@ return quo(num_exact(obj), INT2FIX(1000000)); } +static int +month_arg(VALUE arg) +{ + int i, mon; + + VALUE s = rb_check_string_type(arg); + if (!NIL_P(s)) { + mon = 0; + for (i=0; i<12; i++) { + if (RSTRING_LEN(s) == 3 && + STRCASECMP(months[i], RSTRING_PTR(s)) == 0) { + mon = i+1; + break; + } + } + if (mon == 0) { + char c = RSTRING_PTR(s)[0]; + + if ('0' <= c && c <= '9') { + mon = obj2long(s); + } + } + } + else { + mon = obj2long(arg); + } + return mon; +} + static void +validate_vtm(struct vtm *vtm) +{ + if ( vtm->mon < 1 || vtm->mon > 12 + || vtm->mday < 1 || vtm->mday > 31 + || vtm->hour < 0 || vtm->hour > 24 + || (vtm->hour == 24 && (vtm->min > 0 || vtm->sec > 0)) + || vtm->min < 0 || vtm->min > 59 + || vtm->sec < 0 || vtm->sec > 60 + || lt(vtm->subsec, INT2FIX(0)) || ge(vtm->subsec, INT2FIX(1))) + rb_raise(rb_eArgError, "argument out of range"); +} + +static void time_arg(int argc, VALUE *argv, struct vtm *vtm) { VALUE v[8]; @@ -1465,27 +1507,7 @@ vtm->mon = 1; } else { - VALUE s = rb_check_string_type(v[1]); - if (!NIL_P(s)) { - vtm->mon = 0; - for (i=0; i<12; i++) { - if (RSTRING_LEN(s) == 3 && - STRCASECMP(months[i], RSTRING_PTR(s)) == 0) { - vtm->mon = i+1; - break; - } - } - if (vtm->mon == 0) { - char c = RSTRING_PTR(s)[0]; - - if ('0' <= c && c <= '9') { - vtm->mon = obj2long(s); - } - } - } - else { - vtm->mon = obj2long(v[1]); - } + vtm->mon = month_arg(v[1]); } if (NIL_P(v[2])) { @@ -1508,15 +1530,7 @@ vtm->sec = NIL_P(v[5])?0:obj2subsec(v[5], &vtm->subsec); } - /* value validation */ - if ( vtm->mon < 1 || vtm->mon > 12 - || vtm->mday < 1 || vtm->mday > 31 - || vtm->hour < 0 || vtm->hour > 24 - || (vtm->hour == 24 && (vtm->min > 0 || vtm->sec > 0)) - || vtm->min < 0 || vtm->min > 59 - || vtm->sec < 0 || vtm->sec > 60 - || lt(vtm->subsec, INT2FIX(0)) || ge(vtm->subsec, INT2FIX(1))) - rb_raise(rb_eArgError, "argument out of range"); + validate_vtm(vtm); } static int Index: ChangeLog =================================================================== --- ChangeLog (revision 23275) +++ ChangeLog (revision 23276) @@ -1,3 +1,8 @@ +Sat Apr 25 16:19:48 2009 Tanaka Akira <akr@f...> + + * time.c (month_arg): extracted from time_arg. + (validate_vtm): ditto. + Sat Apr 25 16:03:21 2009 Tanaka Akira <akr@f...> * time.c (TIME_COPY_GMT): new macro. -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/