1. int parseMonth(const char *input) {
  2.     int rv=-1;
  3.     const char *p=input;
  4.     int len=strlen(input);
  5.  
  6.     /* Short cut when the length falls outside of
  7.         expected ranges */
  8.     if(len < 3 || len > 3) {
  9.         return rv;
  10.     }
  11.  
  12.     /* Collapsing anything with fewer than 4 paths */
  13.     /* 12 matches for "" */
  14.     switch(p[0]) {
  15.         case 'A':
  16.             /* 2 match(es) for "A" */
  17.             if(memcmp(p, "Apr\0", 4) == 0) {
  18.                 rv=3;
  19.             } else if(memcmp(p, "Aug\0", 4) == 0) {
  20.                 rv=7;
  21.             }
  22.         break;
  23.         case 'D':
  24.             /* 1 match(es) for "D" */
  25.             if(memcmp(p, "Dec\0", 4) == 0) {
  26.                 rv=11;
  27.             }
  28.         break;
  29.         case 'F':
  30.             /* 1 match(es) for "F" */
  31.             if(memcmp(p, "Feb\0", 4) == 0) {
  32.                 rv=1;
  33.             }
  34.         break;
  35.         case 'J':
  36.             /* 3 match(es) for "J" */
  37.             if(memcmp(p, "Jan\0", 4) == 0) {
  38.                 rv=0;
  39.             } else if(memcmp(p, "Jun\0", 4) == 0) {
  40.                 rv=5;
  41.             } else if(memcmp(p, "Jul\0", 4) == 0) {
  42.                 rv=6;
  43.             }
  44.         break;
  45.         case 'M':
  46.             /* 2 match(es) for "M" */
  47.             if(memcmp(p, "Mar\0", 4) == 0) {
  48.                 rv=2;
  49.             } else if(memcmp(p, "May\0", 4) == 0) {
  50.                 rv=4;
  51.             }
  52.         break;
  53.         case 'O':
  54.             /* 1 match(es) for "O" */
  55.             if(memcmp(p, "Oct\0", 4) == 0) {
  56.                 rv=9;
  57.             }
  58.         break;
  59.         case 'N':
  60.             /* 1 match(es) for "N" */
  61.             if(memcmp(p, "Nov\0", 4) == 0) {
  62.                 rv=10;
  63.             }
  64.         break;
  65.         case 'S':
  66.             /* 1 match(es) for "S" */
  67.             if(memcmp(p, "Sep\0", 4) == 0) {
  68.                 rv=8;
  69.             }
  70.         break;
  71.     }
  72.     return rv;
  73. }