diff options
author | Alain Magloire <alainm@gnu.org> | 2001-04-15 01:49:51 +0000 |
---|---|---|
committer | Alain Magloire <alainm@gnu.org> | 2001-04-15 01:49:51 +0000 |
commit | 5bed8190e1dacb3be3516bb41d10cbc3d1a357cd (patch) | |
tree | 627fc2cd4c201eafd5c4a001b70e993061620f49 /examples/addr.c | |
parent | fadb4826c14bd96272f6ab0b789bcddf3e6f5d57 (diff) | |
download | mailutils-5bed8190e1dacb3be3516bb41d10cbc3d1a357cd.tar.gz mailutils-5bed8190e1dacb3be3516bb41d10cbc3d1a357cd.tar.bz2 |
From Sam.
* examples/{Makefile,Addrs,addr.c,Addrs.good}: address test f/w.
* include/mailutils/address.h,mailbox/{address.c,parse822.c}: now
stuff a group name into an _address, and added a function to do
a quick check if it is a group.
* mailbox/parse822.c: fixed bug where ",sam@foo.bar" wasn't valid.
Diffstat (limited to 'examples/addr.c')
-rw-r--r-- | examples/addr.c | 112 |
1 files changed, 78 insertions, 34 deletions
diff --git a/examples/addr.c b/examples/addr.c index d8bcdfb7b..5f495a052 100644 --- a/examples/addr.c +++ b/examples/addr.c @@ -1,48 +1,92 @@ #include <stdio.h> +#include <errno.h> #include <mailutils/address.h> +#define EPARSE ENOENT + +static const char* err_name(int e) +{ + struct { + int e; + const char* s; + } map[] = { +#define E(e) { e, #e }, + E(ENOENT) + E(EINVAL) + E(ENOMEM) +#undef E + { 0, NULL } + }; + static char s[sizeof(int) * 8 + 3]; + int i; + + for(i = 0; map[i].s; i++) { + if(map[i].e == e) + return map[i].s; + } + sprintf(s, "[%d]", e); + + return s; +} + static int parse(const char* str) { size_t no = 0; - size_t pcount; + size_t pcount = 0; + int status; char buf[BUFSIZ]; address_t address = NULL; - address_create(&address, str); + status = address_create(&address, str); address_get_count(address, &pcount); - printf("%s=> pcount %d\n", str, pcount); + if(status) { + printf("%s=> error %s\n\n", str, err_name(status)); + return 0; + } else { + printf("%s=> pcount %d\n", str, pcount); + } for(no = 1; no <= pcount; no++) { - size_t got = 0; - printf("%d ", no); + size_t got = 0; + int isgroup; + + address_is_group(address, no, &isgroup); + + printf("%d ", no); + + if(isgroup) { + address_get_personal(address, no, buf, sizeof(buf), &got); - address_get_email(address, no, buf, sizeof(buf), 0); + printf("group <%s>\n", buf); + } else { + address_get_email(address, no, buf, sizeof(buf), 0); - printf("email <%s>\n", buf); + printf("email <%s>\n", buf); + } - address_get_personal(address, no, buf, sizeof(buf), &got); + address_get_personal(address, no, buf, sizeof(buf), &got); - if(got) printf(" personal <%s>\n", buf); + if(got && !isgroup) printf(" personal <%s>\n", buf); - address_get_comments(address, no, buf, sizeof(buf), &got); + address_get_comments(address, no, buf, sizeof(buf), &got); - if(got) printf(" comments <%s>\n", buf); + if(got) printf(" comments <%s>\n", buf); - address_get_local_part(address, no, buf, sizeof(buf), &got); + address_get_local_part(address, no, buf, sizeof(buf), &got); - if(got) printf(" local-part <%s>", buf); + if(got) printf(" local-part <%s>", buf); - address_get_domain(address, no, buf, sizeof(buf), &got); + address_get_domain(address, no, buf, sizeof(buf), &got); - if(got) printf(" domain <%s>\n", buf); + if(got) printf(" domain <%s>\n", buf); - address_get_route(address, no, buf, sizeof(buf), &got); + address_get_route(address, no, buf, sizeof(buf), &got); - if(got) printf(" route <%s>\n", buf); + if(got) printf(" route <%s>\n", buf); } address_destroy(&address); @@ -53,30 +97,30 @@ static int parse(const char* str) static int parseinput(void) { - char buf[BUFSIZ]; + char buf[BUFSIZ]; - while(fgets(buf, sizeof(buf), stdin) != 0) { - buf[strlen(buf) - 1] = 0; - parse(buf); - } + while(fgets(buf, sizeof(buf), stdin) != 0) { + buf[strlen(buf) - 1] = 0; + parse(buf); + } - return 0; + return 0; } int main(int argc, const char *argv[]) { - argc = 1; + argc = 1; - if(!argv[argc]) { - return parseinput(); - } - for(; argv[argc]; argc++) { - if(strcmp(argv[argc], "-") == 0) { - parseinput(); - } else { - parse(argv[argc]); - } + if(!argv[argc]) { + return parseinput(); + } + for(; argv[argc]; argc++) { + if(strcmp(argv[argc], "-") == 0) { + parseinput(); + } else { + parse(argv[argc]); } + } - return 0; + return 0; } |