]> mj.ucw.cz Git - umpf.git/blobdiff - umpf.c
fix modified flags
[umpf.git] / umpf.c
diff --git a/umpf.c b/umpf.c
index c3ef9a7044a53d7291ee6c524a325eb114aef312..5918a0db7dfdc5aaddb5c32222bf94d88362d254 100644 (file)
--- a/umpf.c
+++ b/umpf.c
@@ -1,9 +1,13 @@
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <pwd.h>
+#include <getopt.h>
 
 #include "umpf.h"
 
+#define DEFAULT_CONF ".umpf"
+
 void
 init(void)
 {
@@ -18,23 +22,48 @@ init(void)
 int
 main(int argc, char** argv)
 {
-       int res;
-       int i;
+       int res, i, opt;
+       char* conffile = NULL;
        
-       if (argc < 2)
-               die("Usage: ./umpf conf_file [default_mailbox]");
-
-       struct passwd* p;
-       p = getpwuid(getuid());
-       if (argc < 3)
-                default_mailbox = cat("/var/mail/", p->pw_name);
-       else
-                default_mailbox = argv[2];
-
-       save_gids();
-       read_conf(argv[1]);
+       while ((opt = getopt(argc, argv, "c:m:")) != -1) {
+               switch (opt) {
+               case 'm':
+                       default_mailbox = optarg;
+                       break;
+               case 'c':
+                       conffile = optarg;
+                       break;
+               default:
+                       die("Usage: ./umpf [-c conf_file] [-m default_mailbox]");
+               }
+       }
+
+       if (!default_mailbox) {
+               struct passwd* p;
+
+               p = getpwuid(getuid());
+               default_mailbox = cat("/var/mail/", p->pw_name);
+       }
+
+               save_gids();
        init();
-//     yydebug=1;
+
+       /* returning from longjump? save the mail and exit */
+       if (setjmp(env))
+               goto skip_conf;
+
+       if (! conffile) {
+               int len;
+               char* home; 
+
+               home = getenv("HOME");
+               if (! home)
+                       goto skip_conf;
+
+               conffile = xmalloc(strlen(home) + strlen(DEFAULT_CONF) + 1);
+               sprintf(conffile, "%s/%s", home, DEFAULT_CONF); 
+       }
+       read_conf(conffile);
        res = yyparse ();
 
        if (res)
@@ -43,15 +72,17 @@ main(int argc, char** argv)
        temp_varcode_start = current_varcode;
        compile(input_tree, NULL);
 
-       var_tab = xmalloc((max_varcode + 1) * sizeof(char*));
+skip_conf:
+       var_tab = xmalloc((max_varcode + 1) * sizeof(struct vartab));
        for (i = 0; i <= max_varcode; i++) {
-               var_tab[i] = empty;
+               var_tab[i].value = empty;
+               var_tab[i].modif = 0;
        }       
 
        current_headers = make_hlist(0);
-//     print_headers(current_headers);
        current_body = get_body(0);
        save_current_headers(var_hash);
+       set_cur_mail_length_var(curr_email_len, var_hash);
 
        interp(&input_code, var_hash);