summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xbacklight.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/xbacklight.c b/xbacklight.c
index 1d6d987..b7c8011 100644
--- a/xbacklight.c
+++ b/xbacklight.c
@@ -26,6 +26,7 @@
#include <stdio.h>
#include <stdlib.h>
+#include <errno.h>
#include <xcb/xcb.h>
#include <xcb/xcb_util.h>
@@ -59,6 +60,16 @@ usage (int exitcode)
exit (exitcode);
}
+static double
+atof_or_die (char *str)
+{
+ double retval;
+ errno = 0;
+ retval = strtod(str, NULL);
+ if (errno) usage(1);
+ return retval;
+}
+
static void
missing_arg (const char *option)
{
@@ -150,39 +161,39 @@ main (int argc, char **argv)
{
if (++i >= argc) missing_arg (argv[i-1]);
op = Set;
- value = atof (argv[i]);
+ value = atof_or_die (argv[i]);
continue;
}
if (argv[i][0] == '=' && isdigit (argv[i][1]))
{
op = Set;
- value = atof (argv[i] + 1);
+ value = atof_or_die (argv[i] + 1);
continue;
}
if (!strcmp (argv[i], "-inc") || !strcmp (argv[i], "+"))
{
if (++i >= argc) missing_arg (argv[i-1]);
op = Inc;
- value = atof (argv[i]);
+ value = atof_or_die (argv[i]);
continue;
}
if (argv[i][0] == '+' && isdigit (argv[i][1]))
{
op = Inc;
- value = atof (argv[i] + 1);
+ value = atof_or_die (argv[i] + 1);
continue;
}
if (!strcmp (argv[i], "-dec") || !strcmp (argv[i], "-"))
{
if (++i >= argc) missing_arg (argv[i-1]);
op = Dec;
- value = atof (argv[i]);
+ value = atof_or_die (argv[i]);
continue;
}
if (argv[i][0] == '-' && isdigit (argv[i][1]))
{
op = Dec;
- value = atof (argv[i] + 1);
+ value = atof_or_die (argv[i] + 1);
continue;
}
if (!strcmp (argv[i], "-get") || !strcmp (argv[i], "-g"))