aboutsummaryrefslogtreecommitdiffstats
path: root/find-contact-by-email.c
diff options
context:
space:
mode:
authorMattias Andrée <maandree@kth.se>2021-04-12 13:37:59 +0200
committerMattias Andrée <maandree@kth.se>2021-04-12 13:37:59 +0200
commitfa88a28e46b7ac2d3dcd1938e5e4708157d08b22 (patch)
treec3ca4f98374328f37d71d1079f9e1f7406ed84d8 /find-contact-by-email.c
parentMinor fix to set-contact-photos (diff)
downloadcontacts-fa88a28e46b7ac2d3dcd1938e5e4708157d08b22.tar.gz
contacts-fa88a28e46b7ac2d3dcd1938e5e4708157d08b22.tar.bz2
contacts-fa88a28e46b7ac2d3dcd1938e5e4708157d08b22.tar.xz
Deduplicate code and make some small improvements
Signed-off-by: Mattias Andrée <maandree@kth.se>
Diffstat (limited to 'find-contact-by-email.c')
-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")