Return-Path: X-Original-To: notmuch@notmuchmail.org Delivered-To: notmuch@notmuchmail.org Received: from localhost (localhost [127.0.0.1]) by olra.theworths.org (Postfix) with ESMTP id 17394431FD5 for ; Fri, 9 Mar 2012 14:33:41 -0800 (PST) X-Virus-Scanned: Debian amavisd-new at olra.theworths.org X-Amavis-Alert: BAD HEADER SECTION, Duplicate header field: "References" X-Spam-Flag: NO X-Spam-Score: -0.7 X-Spam-Level: X-Spam-Status: No, score=-0.7 tagged_above=-999 required=5 tests=[RCVD_IN_DNSWL_LOW=-0.7] autolearn=disabled Received: from olra.theworths.org ([127.0.0.1]) by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id JfYLo7ukg+9l for ; Fri, 9 Mar 2012 14:33:40 -0800 (PST) Received: from mail-lpp01m010-f53.google.com (mail-lpp01m010-f53.google.com [209.85.215.53]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) (No client certificate requested) by olra.theworths.org (Postfix) with ESMTPS id C2DEC431FBC for ; Fri, 9 Mar 2012 14:33:39 -0800 (PST) Received: by lahc1 with SMTP id c1so2252405lah.26 for ; Fri, 09 Mar 2012 14:33:38 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20120113; h=from:to:cc:subject:date:message-id:x-mailer:in-reply-to:references :in-reply-to:references:x-gm-message-state; bh=tsCtHOpkj9Trncg1WOhNl12I7F6DJUEhYBaBz+mB3Js=; b=LkZRvxTSdW+muycYtagYQPCSMDuGC/QqTip6d+gx51ccEmBUir5q2fPLiZp7kXRcfo HO9a5pk0To/CQDlCkvY415SxNk4B7lgi5WM3VpJaJ67ruLQoVvC7+wdbOj5B56MuPaOU W4xPuYCiiL8saGVoIabcJpu5FcMErOmJJer1agckUpP0T8KFC0J2klty15uM0VmTrMJ7 Qhm6ei1Im7DVjVMW66hsOvEubJYV63t24gvARdKODNKt8EsucmAJX/14CpPs7ewqBe7T Pmi9O0KtL/Wa2kuWV62gPGe77evHXySo/Fh0CGBoL9rUCMieYK8rpjNIEPGSZZ7MLJeS KnvQ== Received: by 10.112.104.37 with SMTP id gb5mr1422457lbb.97.1331332418203; Fri, 09 Mar 2012 14:33:38 -0800 (PST) Received: from localhost (dsl-hkibrasgw4-fe50f800-253.dhcp.inet.fi. [84.248.80.253]) by mx.google.com with ESMTPS id hv2sm7989056lbb.9.2012.03.09.14.33.36 (version=SSLv3 cipher=OTHER); Fri, 09 Mar 2012 14:33:37 -0800 (PST) From: Jani Nikula To: notmuch@notmuchmail.org, markwalters1009@gmail.com Subject: [PATCH 1/3] command-line-arguments: allow true and false keywords for booleans Date: Sat, 10 Mar 2012 00:33:28 +0200 Message-Id: <461127379f76af5ec6f53ede0ac173e37aae392d.1331329406.git.jani@nikula.org> X-Mailer: git-send-email 1.7.5.4 In-Reply-To: References: <87399iicit.fsf@qmul.ac.uk> In-Reply-To: References: X-Gm-Message-State: ALoCoQm9tJjYYVxBry5UkmGHImpuTnx2PGNQeQDRO3BQM7EljfVbO6YUOFX5favBmG+SJOKIYZ0G X-BeenThere: notmuch@notmuchmail.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: "Use and development of the notmuch mail system." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Mar 2012 22:33:41 -0000 Add support for --arg=true and --arg=false for NOTMUCH_OPT_BOOLEAN arguments to be able to disable a boolean argument. Plain --arg remains unchanged, meaning true. Signed-off-by: Jani Nikula --- command-line-arguments.c | 36 ++++++++++++++++++++++++++++++------ 1 files changed, 30 insertions(+), 6 deletions(-) diff --git a/command-line-arguments.c b/command-line-arguments.c index e711414..1bdb881 100644 --- a/command-line-arguments.c +++ b/command-line-arguments.c @@ -28,6 +28,27 @@ _process_keyword_arg (const notmuch_opt_desc_t *arg_desc, const char *arg_str) { return FALSE; } +static notmuch_bool_t +_process_boolean_arg (const notmuch_opt_desc_t *arg_desc, const char *arg_str) +{ + notmuch_bool_t value = TRUE; + + if (arg_str) { + if (strcmp (arg_str, "true") == 0) { + value = TRUE; + } else if (strcmp (arg_str, "false") == 0) { + value = FALSE; + } else { + fprintf (stderr, "unknown boolean: %s\n", arg_str); + return FALSE; + } + } + + *((notmuch_bool_t *)arg_desc->output_var) = value; + + return TRUE; +} + /* Search for the {pos_arg_index}th position argument, return FALSE if that does not exist. @@ -79,11 +100,15 @@ parse_option (const char *arg, * delimiter, and a non-zero length value */ - if (try->opt_type != NOTMUCH_OPT_BOOLEAN) { - if (next != '=' && next != ':') return FALSE; - if (value[0] == 0) return FALSE; + if (next == '=' || next == ':') { + if (value[0] == '\0') + return FALSE; + } else if (next == '\0') { + value = NULL; + if (try->opt_type != NOTMUCH_OPT_BOOLEAN) + return FALSE; } else { - if (next != 0) return FALSE; + return FALSE; } if (try->output_var == NULL) @@ -94,8 +119,7 @@ parse_option (const char *arg, return _process_keyword_arg (try, value); break; case NOTMUCH_OPT_BOOLEAN: - *((notmuch_bool_t *)try->output_var) = TRUE; - return TRUE; + return _process_boolean_arg (try, value); break; case NOTMUCH_OPT_INT: *((int *)try->output_var) = strtol (value, &endptr, 10); -- 1.7.5.4