Util-Linux package development
 help / color / mirror / Atom feed
From: Karel Zak <kzak@redhat.com>
To: Sami Kerola <kerolasa@iki.fi>
Cc: util-linux@vger.kernel.org
Subject: Re: [PATCH 02/13] rtcwake: enumerate constant mode strings
Date: Tue, 24 Feb 2015 13:34:30 +0100	[thread overview]
Message-ID: <20150224123430.GQ19430@ws.net.home> (raw)
In-Reply-To: <1424616139-638-3-git-send-email-kerolasa@iki.fi>

On Sun, Feb 22, 2015 at 02:42:08PM +0000, Sami Kerola wrote:
> Signed-off-by: Sami Kerola <kerolasa@iki.fi>
> ---
>  sys-utils/rtcwake.c | 126 ++++++++++++++++++++++++++++++++--------------------
>  1 file changed, 78 insertions(+), 48 deletions(-)
> 
> diff --git a/sys-utils/rtcwake.c b/sys-utils/rtcwake.c
> index 8b5f69c..372e620 100644
> --- a/sys-utils/rtcwake.c
> +++ b/sys-utils/rtcwake.c
> @@ -52,7 +52,37 @@
>  #define RTC_PATH		"/sys/class/rtc/%s/device/power/wakeup"
>  #define SYS_POWER_STATE_PATH	"/sys/power/state"
>  #define DEFAULT_DEVICE		"/dev/rtc0"
> -#define DEFAULT_MODE		"standby"
> +
> +enum rtc_modes {	/* manual page --mode option explains these. */
> +	STANDBY_MODE = 0,
> +	MEM_MODE,
> +	FREEZE_MODE,
> +	DISK_MODE,	/* end of Documentation/power/states.txt modes  */
> +	OFF_MODE,
> +	NO_MODE,
> +	ON_MODE,	/* smaller <- read the code */
> +	DISABLE_MODE,	/* greater <- to understand */
> +	SHOW_MODE,
> +	ERROR_MODE	/* invalid user input */
> +};

Please, don't use ERROR_MODE or so, just return -EINVAL from the
parser.

> +static int get_mode(const char *optarg)
> +{
> +	if (!strcmp(optarg, mode_str[STANDBY_MODE]))
> +		return STANDBY_MODE;
> +	if (!strcmp(optarg, mode_str[MEM_MODE]))
> +		return MEM_MODE;
> +	if (!strcmp(optarg, mode_str[DISK_MODE]))
> +		return DISK_MODE;
> +	if (!strcmp(optarg, mode_str[ON_MODE]))
> +		return ON_MODE;
> +	if (!strcmp(optarg, mode_str[NO_MODE]))
> +		return NO_MODE;
> +	if (!strcmp(optarg, mode_str[OFF_MODE]))
> +		return OFF_MODE;
> +	if (!strcmp(optarg, mode_str[FREEZE_MODE]))
> +		return FREEZE_MODE;
> +	if (!strcmp(optarg, mode_str[DISABLE_MODE]))
> +		return DISABLE_MODE;
> +	if (!strcmp(optarg, mode_str[SHOW_MODE]))
> +		return SHOW_MODE;

 {
    for (i = 0; i < ARRAY_SIZE(mode_str); i++)
         if (strcmp(optarg, mode_str[i])
             return i;

    return -EINVAL;
 }

> -	if (!alarm && !seconds && strcmp(suspend,"disable") &&
> -				  strcmp(suspend,"show")) {
> -
> +	if (!alarm && !seconds && suspend < DISABLE_MODE) {

 this ("<") is pretty fragile, use

         && (suspend != DISABLE_MODE || suspend != SHOW_MODE)

>  		warnx(_("must provide wake time (see -t and -s options)"));
>  		usage(stderr);

...

> -	if (strcmp(suspend, "show") && strcmp(suspend, "disable")) {
> -		if (strcmp(suspend, "no") && strcmp(suspend, "on") &&
> -		    strcmp(suspend, "off") && is_suspend_available(suspend) <= 0) {
> -			errx(EXIT_FAILURE, _("suspend to \"%s\" unavailable"), suspend);
> +	if (suspend < DISABLE_MODE) {
> +		if (suspend < OFF_MODE && is_suspend_available(suspend) <= 0) {
> +			errx(EXIT_FAILURE, _("suspend to \"%s\" unavailable"),
> +			     mode_str[suspend]);
  		}

 the same situation

    Karel

-- 
 Karel Zak  <kzak@redhat.com>
 http://karelzak.blogspot.com

  reply	other threads:[~2015-02-24 12:34 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-02-22 14:42 [PATCH 00/13] pull: rtcwake changes Sami Kerola
2015-02-22 14:42 ` [PATCH 01/13] rtcwake: add rtcwake_control and remove global variables Sami Kerola
2015-02-22 14:42 ` [PATCH 02/13] rtcwake: enumerate constant mode strings Sami Kerola
2015-02-24 12:34   ` Karel Zak [this message]
2015-03-01 12:23     ` Sami Kerola
2015-02-22 14:42 ` [PATCH 03/13] rtcwake: replace long if else statement with switch case Sami Kerola
2015-02-22 14:42 ` [PATCH 04/13] rtcwake: remove RTC_ALM_READ and RTC_ALM_SET compatibility Sami Kerola
2015-02-23 20:37   ` Benno Schulenberg
2015-03-01 11:24     ` Sami Kerola
2015-02-22 14:42 ` [PATCH 05/13] rtcwake: improve read_clock_mode() Sami Kerola
2015-02-22 14:42 ` [PATCH 06/13] rtcwake: add human readable --date timestamp format Sami Kerola
2015-02-23 20:32   ` Benno Schulenberg
2015-02-22 14:42 ` [PATCH 07/13] rtcwake: fix preprocessor redefinition Sami Kerola
2015-02-22 14:42 ` [PATCH 08/13] rtcwake: clean up struct tm initializations Sami Kerola
2015-02-22 14:42 ` [PATCH 09/13] rtcwake: do not overwrite device name Sami Kerola
2015-02-24 13:00   ` Karel Zak
2015-03-01 12:24     ` Sami Kerola
2015-02-22 14:42 ` [PATCH 10/13] bash-completion: add freeze mode to rtcwake Sami Kerola
2015-02-24 13:01   ` Karel Zak
2015-03-01 12:26     ` Sami Kerola
2015-02-22 14:42 ` [PATCH 11/13] rtcwake: improve coding style Sami Kerola
2015-02-23 20:40   ` Benno Schulenberg
2015-03-01 11:33     ` Sami Kerola
2015-03-02 20:48       ` Benno Schulenberg
2015-02-22 14:42 ` [PATCH 12/13] rtcwake: make some command line options mutually exclusive Sami Kerola
2015-02-22 14:42 ` [PATCH 13/13] rtcwake: read accepted mode strings from /sys/power/state Sami Kerola
2015-06-02 12:48 ` [PATCH 00/13] pull: rtcwake changes Karel Zak
2015-06-07 20:41   ` Sami Kerola
2015-06-29 13:21     ` Karel Zak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150224123430.GQ19430@ws.net.home \
    --to=kzak@redhat.com \
    --cc=kerolasa@iki.fi \
    --cc=util-linux@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox