aboutsummaryrefslogtreecommitdiffstats
path: root/find-contact-by-email.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--find-contact-by-email.c64
1 files changed, 5 insertions, 59 deletions
diff --git a/find-contact-by-email.c b/find-contact-by-email.c
index accdf3b..0e05c60 100644
--- a/find-contact-by-email.c
+++ b/find-contact-by-email.c
@@ -1,62 +1,8 @@
/* See LICENSE file for copyright and license details. */
-#include "common.h"
-
-USAGE("[-c context] (-L | address)");
-
-
-int
-main(int argc, char *argv[])
-{
- int list = 0;
- struct passwd *user;
- struct libcontacts_contact **contacts;
- struct libcontacts_email **emails, *email;
- char *context = NULL;
- size_t i;
-
- ARGBEGIN {
- case 'c':
- if (context)
- usage();
- context = ARG();
- break;
- case 'L':
- list = 1;
- break;
- default:
- usage();
- } ARGEND;
+#define CATEGORY emails
- if (argc != 1 - list)
- usage();
+#define LIST_PARAMS(X)\
+ X('c', "c", context, "context")
- errno = 0;
- user = getpwuid(getuid());
- if (!user)
- eprintf("getpwuid: %s\n", errno ? strerror(errno) : "user does not exist");
-
- if (libcontacts_load_contacts(&contacts, user, 1))
- eprintf("libcontacts_load_contacts:");
- for (i = 0; contacts[i]; i++) {
- if ((emails = contacts[i]->emails)) {
- for (; (email = *emails); emails++) {
- if (!email->address)
- continue;
- if (context && strcmpnul(email->context, context))
- continue;
- if (list)
- printf("%s (%s)\n", contacts[i]->id, email->address);
- else if (!strcmp(email->address, argv[0]))
- printf("%s\n", contacts[i]->id);
- }
- }
- libcontacts_contact_destroy(contacts[i]);
- free(contacts[i]);
- }
- free(contacts);
-
- if (fflush(stdout) || ferror(stdout) || fclose(stdout))
- eprintf("printf:");
-
- return 0;
-}
+#include "common.h"
+IMPLEMENT_FIND_ON_LIST(email, address, "address")