- static char *mon[] = {
- "Jan", "Feb", "Mar", "Apr", "May", "Jun",
- "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
- };
-
- os = s;
- /* Sunday, */
- for(i=0; i<nelem(wday); i++){
- if(cistrncmp(s, wday[i], strlen(wday[i])) == 0){
- s += strlen(wday[i]);
- break;
- }
- if(cistrncmp(s, wday[i], 3) == 0){
- s += 3;
- break;
- }
- }
- if(i==nelem(wday)){
- if(debug)
- fprint(2, "bad wday (%s)\n", os);
- return -1;
- }
- if(*s++ != ',' || *s++ != ' '){
- if(debug)
- fprint(2, "bad wday separator (%s)\n", os);
- return -1;
- }
-
- /* 25- */
- if(!isdigit(s[0]) || !isdigit(s[1]) || (s[2]!='-' && s[2]!=' ')){
- if(debug)
- fprint(2, "bad day of month (%s)\n", os);
- return -1;
- }
- tm.mday = strtol(s, 0, 10);
- s += 3;
-
- /* Jan- */
- for(i=0; i<nelem(mon); i++)
- if(cistrncmp(s, mon[i], 3) == 0){
- tm.mon = i;
- s += 3;
- break;
- }
- if(i==nelem(mon)){
- if(debug)
- fprint(2, "bad month (%s)\n", os);
- return -1;
- }
- if(s[0] != '-' && s[0] != ' '){
- if(debug)
- fprint(2, "bad month separator (%s)\n", os);
- return -1;
- }
- s++;
-
- /* 2002 */
- if(!isdigit(s[0]) || !isdigit(s[1])){
- if(debug)
- fprint(2, "bad year (%s)\n", os);
- return -1;
- }
- tm.year = strtol(s, 0, 10);
- s += 2;
- if(isdigit(s[0]) && isdigit(s[1]))
- s += 2;
- else{
- if(tm.year <= 68)
- tm.year += 2000;
- else
- tm.year += 1900;
- }
- if(tm.mday==0 || tm.mday > mday[isleap(tm.year)][tm.mon]){
- if(debug)
- fprint(2, "invalid day of month (%s)\n", os);
- return -1;
- }
- tm.year -= 1900;
- if(*s++ != ' '){
- if(debug)
- fprint(2, "bad year separator (%s)\n", os);
- return -1;
- }
-
- if(!isdigit(s[0]) || !isdigit(s[1]) || s[2]!=':'
- || !isdigit(s[3]) || !isdigit(s[4]) || s[5]!=':'
- || !isdigit(s[6]) || !isdigit(s[7]) || s[8]!=' '){
- if(debug)
- fprint(2, "bad time (%s)\n", os);
- return -1;
- }
-
- tm.hour = atoi(s);
- tm.min = atoi(s+3);
- tm.sec = atoi(s+6);
- if(tm.hour >= 24 || tm.min >= 60 || tm.sec >= 60){
- if(debug)
- fprint(2, "invalid time (%s)\n", os);
- return -1;
- }
- s += 9;