summaryrefslogtreecommitdiff
path: root/examples/addr.c
diff options
context:
space:
mode:
authorAlain Magloire <alainm@gnu.org>2001-04-15 01:49:51 +0000
committerAlain Magloire <alainm@gnu.org>2001-04-15 01:49:51 +0000
commit5bed8190e1dacb3be3516bb41d10cbc3d1a357cd (patch)
tree627fc2cd4c201eafd5c4a001b70e993061620f49 /examples/addr.c
parentfadb4826c14bd96272f6ab0b789bcddf3e6f5d57 (diff)
downloadmailutils-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.c112
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;
}

Return to:

Send suggestions and report system problems to the System administrator.