]> mj.ucw.cz Git - maildups.git/commitdiff
mparse: Allow to choose the header fields to print
authorMartin Mares <mj@ucw.cz>
Sun, 12 Aug 2012 20:51:33 +0000 (22:51 +0200)
committerMartin Mares <mj@ucw.cz>
Sun, 12 Aug 2012 20:51:33 +0000 (22:51 +0200)
mparse.c

index 9c31851f9cc4d3584ede9fd0f730e9b60595195f..962755e5bf2f4f81e1a1dc732a5963a52c3a26d3 100644 (file)
--- a/mparse.c
+++ b/mparse.c
@@ -18,7 +18,7 @@ const char progname[] = "mparse";
 static char buf[BUFSIZE];
 static char *bpos=buf, *bend=buf;
 
-static char *getline(void)
+static char *get_line(void)
 {
   if (!bpos)
     return NULL;
@@ -63,6 +63,21 @@ static char *getline(void)
     }
 }
 
+static int want_header(char *line, char **want, int n_want)
+{
+  if (!n_want)
+    return 1;
+
+  for (int i=0; i<n_want; i++)
+    {
+      int len = strlen(want[i]);
+      if (!strncasecmp(line, want[i], len))
+       return 1;
+    }
+
+  return 0;
+}
+
 enum state {
   S_INITIAL,
   S_HEADER,
@@ -70,12 +85,13 @@ enum state {
 };
 
 int
-main(int argc UNUSED, char **argv UNUSED)
+main(int argc, char **argv)
 {
   char *c;
   enum state state = S_INITIAL;
+  int want = 0;
 
-  while (c = getline())
+  while (c = get_line())
     {
       // printf("<%s>\n", c);
       if (state == S_INITIAL || state == S_BODY)
@@ -95,15 +111,22 @@ main(int argc UNUSED, char **argv UNUSED)
            }
          else if (*c == ' ' || *c == '\t')
            {
-             while (*c == ' ' || *c == '\t')
-               c++;
-             putchar(' ');
-             fputs(c, stdout);
+             if (want)
+               {
+                 while (*c == ' ' || *c == '\t')
+                   c++;
+                 putchar(' ');
+                 fputs(c, stdout);
+               }
            }
          else
            {
-             putchar('\n');
-             fputs(c, stdout);
+             want = want_header(c, argv+1, argc-1);
+             if (want)
+               {
+                 putchar('\n');
+                 fputs(c, stdout);
+               }
            }
        }
     }