--- /dev/null
+
+/*$Id: date2yyyymm.c,v 1.1 1999/10/09 16:45:43 lindberg Exp $*/
+/*$Name: ezmlm-idx-040 $*/
+#include "yyyymm.h"
+
+unsigned int date2yyyymm(s)
+char *s;
+/* expects a qmail date string s and returns yyyymm */
+/* if there are problems, it returns 0. If there is no terminating char */
+/* we may segfault if the syntax is bad. Assure that the ';' is there */
+/* or add '\0' */
+{
+ unsigned int mo;
+ unsigned int year; /* must hold yyyymm - ok to year 65K */
+ char ch,ch1,ch2;
+
+/* jan feb mar apr may jun jul aug sep oct nov dec */
+/* - strictly qmail datefmt dependent*/
+ for (;;s++) {
+ ch = *s;
+ if (ch != ' ' && (ch < '0' || ch > '9')) break;
+ }
+ mo = 0;
+ if (!(ch = *(s++))) return 0;
+ if (ch >= 'a') ch -= ('a' - 'A'); /* toupper */
+ if (!(ch1 = *(s++))) return 0; /* rfc822 hrds are case-insens */
+ if (ch1 >= 'a') ch1 -= ('a' - 'A');
+ if (!(ch2 = *(s++))) return 0;
+ if (ch2 >= 'a') ch2 -= ('a' - 'A');
+
+ switch (ch) {
+ case 'J':
+ if (ch1 == 'A' && ch2 == 'N') { mo = 1; break; }
+ if (ch1 == 'U') {
+ if (ch2 == 'N') mo = 6;
+ else if (ch2 == 'L') mo = 7;
+ }
+ break;
+ case 'F': if (ch1 == 'E' && ch2 == 'B') mo = 2; break;
+ case 'A':
+ if (ch1 == 'P' && ch2 == 'R') mo = 4;
+ else if (ch1 == 'U' && ch2 == 'G') mo = 8;
+ break;
+ case 'M':
+ if (ch1 != 'A') break;
+ if (ch2 == 'R') mo = 3;
+ else if (ch2 == 'Y') mo = 5;
+ break;
+ case 'S': if (ch1 == 'E' && ch2 == 'P') mo = 9; break;
+ case 'O': if (ch1 == 'C' && ch2 == 'T') mo = 10; break;
+ case 'N': if (ch1 == 'O' && ch2 == 'V') mo = 11; break;
+ case 'D': if (ch1 == 'E' && ch2 == 'C') mo = 12; break;
+ default:
+ break;
+ }
+ if (!mo || *(s++) != ' ')
+ return 0L; /* mo true means s[0-2] valid */
+ year = 0L;
+ for (;;) {
+ register unsigned char chy;
+ chy = (unsigned char) *(s++);
+ if (chy < '0' || chy > '9') {
+ if (year) break;
+ else return 0;
+ }
+ year = year * 10 + (chy - '0');
+ }
+ return year * 100 + mo;
+}
+
+