diff options
Diffstat (limited to 'find-contact-by-email.c')
-rw-r--r-- | find-contact-by-email.c | 64 |
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") |