]> git.sur5r.net Git - i3/i3status/commitdiff
clang-format-3.5 -i **/*.[ch], update modeline
authorMichael Stapelberg <michael@stapelberg.de>
Mon, 16 Mar 2015 09:00:32 +0000 (10:00 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 16 Mar 2015 09:01:07 +0000 (10:01 +0100)
From here on, we’ll use clang-format to automatically format the source.

This has worked well in i3, so we are introducing it for i3status.

22 files changed:
.clang-format [new file with mode: 0644]
i3status.c
include/i3status.h
include/queue.h
src/first_network_device.c
src/general.c
src/output.c
src/print_battery_info.c
src/print_cpu_temperature.c
src/print_cpu_usage.c
src/print_ddate.c
src/print_disk_info.c
src/print_eth_info.c
src/print_ip_addr.c
src/print_ipv6_addr.c
src/print_load.c
src/print_path_exists.c
src/print_run_watch.c
src/print_time.c
src/print_volume.c
src/print_wireless_info.c
src/process_runs.c

diff --git a/.clang-format b/.clang-format
new file mode 100644 (file)
index 0000000..1d84013
--- /dev/null
@@ -0,0 +1,10 @@
+BasedOnStyle: google
+AllowShortIfStatementsOnASingleLine: false
+AllowShortLoopsOnASingleLine: false
+AllowShortFunctionsOnASingleLine: None
+AllowShortBlocksOnASingleLine: false
+AlwaysBreakBeforeMultilineStrings: false
+IndentWidth: 4
+PointerBindsToType: false
+ColumnLimit: 0
+SpaceBeforeParens: ControlStatements
index 6491e1c6015371115de7382941fdd96d2820cd89..874993338f0262b5b06c88dc1d7cd9f550ca666f 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * vim:ts=8:expandtab
+ * vim:ts=4:sw=4:expandtab
  *
  * i3status – Generates a status line for dzen2 or xmobar
  *
 
 #include "i3status.h"
 
-#define exit_if_null(pointer, ...) { if (pointer == NULL) die(__VA_ARGS__); }
+#define exit_if_null(pointer, ...) \
+    {                              \
+        if (pointer == NULL)       \
+            die(__VA_ARGS__);      \
+    }
 
 #define CFG_CUSTOM_ALIGN_OPT \
     CFG_STR_CB("align", NULL, CFGF_NONE, parse_align)
 
-#define CFG_COLOR_OPTS(good, degraded, bad) \
-    CFG_STR("color_good", good, CFGF_NONE), \
-    CFG_STR("color_degraded", degraded, CFGF_NONE), \
-    CFG_STR("color_bad", bad, CFGF_NONE)
+#define CFG_COLOR_OPTS(good, degraded, bad)             \
+    CFG_STR("color_good", good, CFGF_NONE),             \
+        CFG_STR("color_degraded", degraded, CFGF_NONE), \
+        CFG_STR("color_bad", bad, CFGF_NONE)
 
 #define CFG_CUSTOM_COLOR_OPTS CFG_COLOR_OPTS(NULL, NULL, NULL)
 
@@ -66,7 +70,7 @@ void **cur_instance;
  *
  */
 void fatalsig(int signum) {
-        exit_upon_signal = true;
+    exit_upon_signal = true;
 }
 
 /*
@@ -82,86 +86,94 @@ void sigusr1(int signum) {
  *
  */
 static bool path_exists(const char *path) {
-        struct stat buf;
-        return (stat(path, &buf) == 0);
+    struct stat buf;
+    return (stat(path, &buf) == 0);
 }
 
 static void *scalloc(size_t size) {
-        void *result = calloc(size, 1);
-        exit_if_null(result, "Error: out of memory (calloc(%zd))\n", size);
-        return result;
+    void *result = calloc(size, 1);
+    exit_if_null(result, "Error: out of memory (calloc(%zd))\n", size);
+    return result;
 }
 
 static char *sstrdup(const char *str) {
-        char *result = strdup(str);
-        exit_if_null(result, "Error: out of memory (strdup())\n");
-        return result;
+    char *result = strdup(str);
+    exit_if_null(result, "Error: out of memory (strdup())\n");
+    return result;
 }
 
 /*
  * Parses the "align" module option (to validate input).
  */
 static int parse_align(cfg_t *context, cfg_opt_t *option, const char *value, void *result) {
-        if (strcasecmp(value, "left") != 0 && strcasecmp(value,"right") != 0 && strcasecmp(value, "center") != 0)
-                die("Invalid alignment attribute found in section %s, line %d: \"%s\"\n"
-                    "Valid attributes are: left, center, right\n", context->name, context->line, value);
+    if (strcasecmp(value, "left") != 0 && strcasecmp(value, "right") != 0 && strcasecmp(value, "center") != 0)
+        die("Invalid alignment attribute found in section %s, line %d: \"%s\"\n"
+            "Valid attributes are: left, center, right\n",
+            context->name, context->line, value);
 
-        const char **cresult = result;
-        *cresult = value;
+    const char **cresult = result;
+    *cresult = value;
 
-        return 0;
+    return 0;
 }
 
 /*
  * Parses the "min_width" module option whose value can either be a string or an integer.
  */
 static int parse_min_width(cfg_t *context, cfg_opt_t *option, const char *value, void *result) {
-        char *end;
-        long num = strtol(value, &end, 10);
-
-        if (num < 0)
-                die("Invalid min_width attribute found in section %s, line %d: %d\n"
-                    "Expected positive integer or string\n", context->name, context->line, num);
-        else if (num == LONG_MIN || num == LONG_MAX || (end && *end != '\0'))
-                num = 0;
-
-        if (strlen(value) == 0)
-                die("Empty min_width attribute found in section %s, line %d\n"
-                    "Expected positive integer or non-empty string\n", context->name, context->line);
-
-        if (strcmp(value, "0") == 0)
-                die("Invalid min_width attribute found in section %s, line %d: \"%s\"\n"
-                    "Expected positive integer or string\n", context->name, context->line, value);
-
-        struct min_width *parsed = scalloc(sizeof(struct min_width));
-        parsed->num = num;
-
-        /* num is preferred, but if it’s 0 (i.e. not valid), store and use
-         * the raw string value */
-        if (num == 0)
-                parsed->str = sstrdup(value);
-
-        struct min_width **cresult = result;
-        *cresult = parsed;
-
-        return 0;
+    char *end;
+    long num = strtol(value, &end, 10);
+
+    if (num < 0)
+        die("Invalid min_width attribute found in section %s, line %d: %d\n"
+            "Expected positive integer or string\n",
+            context->name, context->line, num);
+    else if (num == LONG_MIN || num == LONG_MAX || (end && *end != '\0'))
+        num = 0;
+
+    if (strlen(value) == 0)
+        die("Empty min_width attribute found in section %s, line %d\n"
+            "Expected positive integer or non-empty string\n",
+            context->name, context->line);
+
+    if (strcmp(value, "0") == 0)
+        die("Invalid min_width attribute found in section %s, line %d: \"%s\"\n"
+            "Expected positive integer or string\n",
+            context->name, context->line, value);
+
+    struct min_width *parsed = scalloc(sizeof(struct min_width));
+    parsed->num = num;
+
+    /* num is preferred, but if it’s 0 (i.e. not valid), store and use
+     * the raw string value */
+    if (num == 0)
+        parsed->str = sstrdup(value);
+
+    struct min_width **cresult = result;
+    *cresult = parsed;
+
+    return 0;
 }
 
 /*
  * Validates a color in "#RRGGBB" format
  *
  */
-static int valid_color(const char *value)
-{
-        if (strlen(value) != 7) return 0;
-        if (value[0] != '#') return 0;
-        for (int i = 1; i < 7; ++i) {
-                if (value[i] >= '0' && value[i] <= '9') continue;
-                if (value[i] >= 'a' && value[i] <= 'f') continue;
-                if (value[i] >= 'A' && value[i] <= 'F') continue;
-                return 0;
-        }
-        return 1;
+static int valid_color(const char *value) {
+    if (strlen(value) != 7)
+        return 0;
+    if (value[0] != '#')
+        return 0;
+    for (int i = 1; i < 7; ++i) {
+        if (value[i] >= '0' && value[i] <= '9')
+            continue;
+        if (value[i] >= 'a' && value[i] <= 'f')
+            continue;
+        if (value[i] >= 'A' && value[i] <= 'F')
+            continue;
+        return 0;
+    }
+    return 1;
 }
 
 /*
@@ -171,531 +183,512 @@ static int valid_color(const char *value)
  *
  */
 static char *resolve_tilde(const char *path) {
-        static glob_t globbuf;
-        char *head, *tail, *result = NULL;
-
-        tail = strchr(path, '/');
-        head = strndup(path, tail ? (size_t)(tail - path) : strlen(path));
-
-        int res = glob(head, GLOB_TILDE, NULL, &globbuf);
-        free(head);
-        /* no match, or many wildcard matches are bad */
-        if (res == GLOB_NOMATCH || globbuf.gl_pathc != 1)
-                result = sstrdup(path);
-        else if (res != 0) {
-                die("glob() failed");
-        } else {
-                head = globbuf.gl_pathv[0];
-                result = scalloc(strlen(head) + (tail ? strlen(tail) : 0) + 1);
-                strncpy(result, head, strlen(head));
-                if (tail)
-                        strncat(result, tail, strlen(tail));
-        }
-        globfree(&globbuf);
-
-        return result;
+    static glob_t globbuf;
+    char *head, *tail, *result = NULL;
+
+    tail = strchr(path, '/');
+    head = strndup(path, tail ? (size_t)(tail - path) : strlen(path));
+
+    int res = glob(head, GLOB_TILDE, NULL, &globbuf);
+    free(head);
+    /* no match, or many wildcard matches are bad */
+    if (res == GLOB_NOMATCH || globbuf.gl_pathc != 1)
+        result = sstrdup(path);
+    else if (res != 0) {
+        die("glob() failed");
+    } else {
+        head = globbuf.gl_pathv[0];
+        result = scalloc(strlen(head) + (tail ? strlen(tail) : 0) + 1);
+        strncpy(result, head, strlen(head));
+        if (tail)
+            strncat(result, tail, strlen(tail));
+    }
+    globfree(&globbuf);
+
+    return result;
 }
 
 static char *get_config_path(void) {
-        char *xdg_config_home, *xdg_config_dirs, *config_path;
-
-        /* 1: check the traditional path under the home directory */
-        config_path = resolve_tilde("~/.i3status.conf");
-        if (path_exists(config_path))
-                return config_path;
-
-        /* 2: check for $XDG_CONFIG_HOME/i3status/config */
-        if ((xdg_config_home = getenv("XDG_CONFIG_HOME")) == NULL)
-                xdg_config_home = "~/.config";
-
-        xdg_config_home = resolve_tilde(xdg_config_home);
-        if (asprintf(&config_path, "%s/i3status/config", xdg_config_home) == -1)
-                die("asprintf() failed");
-        free(xdg_config_home);
-
-        if (path_exists(config_path))
-                return config_path;
-        free(config_path);
-
-        /* 3: check the traditional path under /etc */
-        config_path = SYSCONFDIR "/i3status.conf";
-        if (path_exists(config_path))
-            return sstrdup(config_path);
-
-        /* 4: check for $XDG_CONFIG_DIRS/i3status/config */
-        if ((xdg_config_dirs = getenv("XDG_CONFIG_DIRS")) == NULL)
-                xdg_config_dirs = "/etc/xdg";
-
-        char *buf = strdup(xdg_config_dirs);
-        char *tok = strtok(buf, ":");
-        while (tok != NULL) {
-                tok = resolve_tilde(tok);
-                if (asprintf(&config_path, "%s/i3status/config", tok) == -1)
-                        die("asprintf() failed");
-                free(tok);
-                if (path_exists(config_path)) {
-                        free(buf);
-                        return config_path;
-                }
-                free(config_path);
-                tok = strtok(NULL, ":");
+    char *xdg_config_home, *xdg_config_dirs, *config_path;
+
+    /* 1: check the traditional path under the home directory */
+    config_path = resolve_tilde("~/.i3status.conf");
+    if (path_exists(config_path))
+        return config_path;
+
+    /* 2: check for $XDG_CONFIG_HOME/i3status/config */
+    if ((xdg_config_home = getenv("XDG_CONFIG_HOME")) == NULL)
+        xdg_config_home = "~/.config";
+
+    xdg_config_home = resolve_tilde(xdg_config_home);
+    if (asprintf(&config_path, "%s/i3status/config", xdg_config_home) == -1)
+        die("asprintf() failed");
+    free(xdg_config_home);
+
+    if (path_exists(config_path))
+        return config_path;
+    free(config_path);
+
+    /* 3: check the traditional path under /etc */
+    config_path = SYSCONFDIR "/i3status.conf";
+    if (path_exists(config_path))
+        return sstrdup(config_path);
+
+    /* 4: check for $XDG_CONFIG_DIRS/i3status/config */
+    if ((xdg_config_dirs = getenv("XDG_CONFIG_DIRS")) == NULL)
+        xdg_config_dirs = "/etc/xdg";
+
+    char *buf = strdup(xdg_config_dirs);
+    char *tok = strtok(buf, ":");
+    while (tok != NULL) {
+        tok = resolve_tilde(tok);
+        if (asprintf(&config_path, "%s/i3status/config", tok) == -1)
+            die("asprintf() failed");
+        free(tok);
+        if (path_exists(config_path)) {
+            free(buf);
+            return config_path;
         }
-        free(buf);
-
-        die("Unable to find the configuration file (looked at "
-                "~/.i3status.conf, $XDG_CONFIG_HOME/i3status/config, "
-                "/etc/i3status.conf and $XDG_CONFIG_DIRS/i3status/config)");
-        return NULL;
+        free(config_path);
+        tok = strtok(NULL, ":");
+    }
+    free(buf);
+
+    die("Unable to find the configuration file (looked at "
+        "~/.i3status.conf, $XDG_CONFIG_HOME/i3status/config, "
+        "/etc/i3status.conf and $XDG_CONFIG_DIRS/i3status/config)");
+    return NULL;
 }
 
 /*
  * Returns the default separator to use if no custom separator has been specified.
  */
 static char *get_default_separator() {
-        if (output_format == O_DZEN2)
-                return "^p(5;-2)^ro(2)^p()^p(5)";
-        if (output_format == O_I3BAR)
-                // anything besides the empty string indicates that the default separator should be used
-                return "default";
-        return " | ";
+    if (output_format == O_DZEN2)
+        return "^p(5;-2)^ro(2)^p()^p(5)";
+    if (output_format == O_I3BAR)
+        // anything besides the empty string indicates that the default separator should be used
+        return "default";
+    return " | ";
 }
 
 int main(int argc, char *argv[]) {
-        unsigned int j;
-
-        cfg_opt_t general_opts[] = {
-                CFG_STR("output_format", "auto", CFGF_NONE),
-                CFG_BOOL("colors", 1, CFGF_NONE),
-                CFG_STR("separator", "default", CFGF_NONE),
-                CFG_STR("color_separator", "#333333", CFGF_NONE),
-                CFG_INT("interval", 1, CFGF_NONE),
-                CFG_COLOR_OPTS("#00FF00", "#FFFF00", "#FF0000"),
-                CFG_END()
-        };
-
-        cfg_opt_t run_watch_opts[] = {
-                CFG_STR("pidfile", NULL, CFGF_NONE),
-                CFG_STR("format", "%title: %status", CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_COLOR_OPTS,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t path_exists_opts[] = {
-                CFG_STR("path", NULL, CFGF_NONE),
-                CFG_STR("format", "%title: %status", CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_COLOR_OPTS,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t wireless_opts[] = {
-                CFG_STR("format_up", "W: (%quality at %essid, %bitrate) %ip", CFGF_NONE),
-                CFG_STR("format_down", "W: down", CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_COLOR_OPTS,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t ethernet_opts[] = {
-                CFG_STR("format_up", "E: %ip (%speed)", CFGF_NONE),
-                CFG_STR("format_down", "E: down", CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_COLOR_OPTS,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t ipv6_opts[] = {
-                CFG_STR("format_up", "%ip", CFGF_NONE),
-                CFG_STR("format_down", "no IPv6", CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_COLOR_OPTS,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t battery_opts[] = {
-                CFG_STR("format", "%status %percentage %remaining", CFGF_NONE),
-                CFG_STR("format_down", "No battery", CFGF_NONE),
-                CFG_STR("status_chr", "CHR", CFGF_NONE),
-                CFG_STR("status_bat", "BAT", CFGF_NONE),
-                CFG_STR("status_full", "FULL", CFGF_NONE),
-                CFG_STR("path", "/sys/class/power_supply/BAT%d/uevent", CFGF_NONE),
-                CFG_INT("low_threshold", 30, CFGF_NONE),
-                CFG_STR("threshold_type", "time", CFGF_NONE),
-                CFG_BOOL("last_full_capacity", false, CFGF_NONE),
-                CFG_BOOL("integer_battery_capacity", false, CFGF_NONE),
-                CFG_BOOL("hide_seconds", false, CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_COLOR_OPTS,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t time_opts[] = {
-                CFG_STR("format", "%Y-%m-%d %H:%M:%S", CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t tztime_opts[] = {
-                CFG_STR("format", "%Y-%m-%d %H:%M:%S %Z", CFGF_NONE),
-                CFG_STR("timezone", "", CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t ddate_opts[] = {
-                CFG_STR("format", "%{%a, %b %d%}, %Y%N - %H", CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t load_opts[] = {
-                CFG_STR("format", "%1min %5min %15min", CFGF_NONE),
-                CFG_FLOAT("max_threshold", 5, CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_COLOR_OPTS,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t usage_opts[] = {
-                CFG_STR("format", "%usage", CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t temp_opts[] = {
-                CFG_STR("format", "%degrees C", CFGF_NONE),
-                CFG_STR("path", NULL, CFGF_NONE),
-                CFG_INT("max_threshold", 75, CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_COLOR_OPTS,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t disk_opts[] = {
-                CFG_STR("format", "%free", CFGF_NONE),
-                CFG_STR("format_not_mounted", NULL, CFGF_NONE),
-                CFG_STR("prefix_type", "binary", CFGF_NONE),
-                CFG_STR("threshold_type", "percentage_avail", CFGF_NONE),
-                CFG_FLOAT("low_threshold", 0, CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_COLOR_OPTS,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t volume_opts[] = {
-                CFG_STR("format", "♪: %volume", CFGF_NONE),
-                CFG_STR("format_muted", "♪: 0%%", CFGF_NONE),
-                CFG_STR("device", "default", CFGF_NONE),
-                CFG_STR("mixer", "Master", CFGF_NONE),
-                CFG_INT("mixer_idx", 0, CFGF_NONE),
-                CFG_CUSTOM_ALIGN_OPT,
-                CFG_CUSTOM_COLOR_OPTS,
-                CFG_CUSTOM_MIN_WIDTH_OPT,
-                CFG_END()
-        };
-
-        cfg_opt_t opts[] = {
-                CFG_STR_LIST("order", "{}", CFGF_NONE),
-                CFG_SEC("general", general_opts, CFGF_NONE),
-                CFG_SEC("run_watch", run_watch_opts, CFGF_TITLE | CFGF_MULTI),
-                CFG_SEC("path_exists", path_exists_opts, CFGF_TITLE | CFGF_MULTI),
-                CFG_SEC("wireless", wireless_opts, CFGF_TITLE | CFGF_MULTI),
-                CFG_SEC("ethernet", ethernet_opts, CFGF_TITLE | CFGF_MULTI),
-                CFG_SEC("battery", battery_opts, CFGF_TITLE | CFGF_MULTI),
-                CFG_SEC("cpu_temperature", temp_opts, CFGF_TITLE | CFGF_MULTI),
-                CFG_SEC("disk", disk_opts, CFGF_TITLE | CFGF_MULTI),
-                CFG_SEC("volume", volume_opts, CFGF_TITLE | CFGF_MULTI),
-                CFG_SEC("ipv6", ipv6_opts, CFGF_NONE),
-                CFG_SEC("time", time_opts, CFGF_NONE),
-                CFG_SEC("tztime", tztime_opts, CFGF_TITLE | CFGF_MULTI),
-                CFG_SEC("ddate", ddate_opts, CFGF_NONE),
-                CFG_SEC("load", load_opts, CFGF_NONE),
-                CFG_SEC("cpu_usage", usage_opts, CFGF_NONE),
-                CFG_END()
-        };
-
-        char *configfile = NULL;
-        int o, option_index = 0;
-        struct option long_options[] = {
-                {"config", required_argument, 0, 'c'},
-                {"help", no_argument, 0, 'h'},
-                {"version", no_argument, 0, 'v'},
-                {0, 0, 0, 0}
-        };
-
-        struct sigaction action;
-        memset(&action, 0, sizeof(struct sigaction));
-        action.sa_handler = fatalsig;
-
-        /* Exit upon SIGPIPE because when we have nowhere to write to, gathering system
-         * information is pointless. Also exit explicitly on SIGTERM and SIGINT because
-         * only this will trigger a reset of the cursor in the terminal output-format.
-         */
-        sigaction(SIGPIPE, &action, NULL);
-        sigaction(SIGTERM, &action, NULL);
-        sigaction(SIGINT, &action, NULL);
-
-        memset(&action, 0, sizeof(struct sigaction));
-        action.sa_handler = sigusr1;
-        sigaction(SIGUSR1, &action, NULL);
-
-        if (setlocale(LC_ALL, "") == NULL)
-                die("Could not set locale. Please make sure all your LC_* / LANG settings are correct.");
-
-        while ((o = getopt_long(argc, argv, "c:hv", long_options, &option_index)) != -1)
-                if ((char)o == 'c')
-                        configfile = optarg;
-                else if ((char)o == 'h') {
-                        printf("i3status " VERSION " © 2008-2012 Michael Stapelberg and contributors\n"
-                                "Syntax: %s [-c <configfile>] [-h] [-v]\n", argv[0]);
-                        return 0;
-                } else if ((char)o == 'v') {
-                        printf("i3status " VERSION " © 2008-2012 Michael Stapelberg and contributors\n");
-                        return 0;
-                }
-
-
-        if (configfile == NULL)
-                configfile = get_config_path();
-
-        cfg = cfg_init(opts, CFGF_NOCASE);
-        if (cfg_parse(cfg, configfile) == CFG_PARSE_ERROR)
-                return EXIT_FAILURE;
-
-        if (cfg_size(cfg, "order") == 0)
-                die("Your 'order' array is empty. Please fix your config.\n");
-
-        cfg_general = cfg_getsec(cfg, "general");
-        if (cfg_general == NULL)
-                die("Could not get section \"general\"\n");
-
-        char *output_str = cfg_getstr(cfg_general, "output_format");
-        if (strcasecmp(output_str, "auto") == 0) {
-                fprintf(stderr, "i3status: trying to auto-detect output_format setting\n");
-                output_str = auto_detect_format();
-                if (!output_str) {
-                        output_str = "none";
-                        fprintf(stderr, "i3status: falling back to \"none\"\n");
-                } else {
-                        fprintf(stderr, "i3status: auto-detected \"%s\"\n", output_str);
-                }
+    unsigned int j;
+
+    cfg_opt_t general_opts[] = {
+        CFG_STR("output_format", "auto", CFGF_NONE),
+        CFG_BOOL("colors", 1, CFGF_NONE),
+        CFG_STR("separator", "default", CFGF_NONE),
+        CFG_STR("color_separator", "#333333", CFGF_NONE),
+        CFG_INT("interval", 1, CFGF_NONE),
+        CFG_COLOR_OPTS("#00FF00", "#FFFF00", "#FF0000"),
+        CFG_END()};
+
+    cfg_opt_t run_watch_opts[] = {
+        CFG_STR("pidfile", NULL, CFGF_NONE),
+        CFG_STR("format", "%title: %status", CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_COLOR_OPTS,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t path_exists_opts[] = {
+        CFG_STR("path", NULL, CFGF_NONE),
+        CFG_STR("format", "%title: %status", CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_COLOR_OPTS,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t wireless_opts[] = {
+        CFG_STR("format_up", "W: (%quality at %essid, %bitrate) %ip", CFGF_NONE),
+        CFG_STR("format_down", "W: down", CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_COLOR_OPTS,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t ethernet_opts[] = {
+        CFG_STR("format_up", "E: %ip (%speed)", CFGF_NONE),
+        CFG_STR("format_down", "E: down", CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_COLOR_OPTS,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t ipv6_opts[] = {
+        CFG_STR("format_up", "%ip", CFGF_NONE),
+        CFG_STR("format_down", "no IPv6", CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_COLOR_OPTS,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t battery_opts[] = {
+        CFG_STR("format", "%status %percentage %remaining", CFGF_NONE),
+        CFG_STR("format_down", "No battery", CFGF_NONE),
+        CFG_STR("status_chr", "CHR", CFGF_NONE),
+        CFG_STR("status_bat", "BAT", CFGF_NONE),
+        CFG_STR("status_full", "FULL", CFGF_NONE),
+        CFG_STR("path", "/sys/class/power_supply/BAT%d/uevent", CFGF_NONE),
+        CFG_INT("low_threshold", 30, CFGF_NONE),
+        CFG_STR("threshold_type", "time", CFGF_NONE),
+        CFG_BOOL("last_full_capacity", false, CFGF_NONE),
+        CFG_BOOL("integer_battery_capacity", false, CFGF_NONE),
+        CFG_BOOL("hide_seconds", false, CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_COLOR_OPTS,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t time_opts[] = {
+        CFG_STR("format", "%Y-%m-%d %H:%M:%S", CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t tztime_opts[] = {
+        CFG_STR("format", "%Y-%m-%d %H:%M:%S %Z", CFGF_NONE),
+        CFG_STR("timezone", "", CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t ddate_opts[] = {
+        CFG_STR("format", "%{%a, %b %d%}, %Y%N - %H", CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t load_opts[] = {
+        CFG_STR("format", "%1min %5min %15min", CFGF_NONE),
+        CFG_FLOAT("max_threshold", 5, CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_COLOR_OPTS,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t usage_opts[] = {
+        CFG_STR("format", "%usage", CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t temp_opts[] = {
+        CFG_STR("format", "%degrees C", CFGF_NONE),
+        CFG_STR("path", NULL, CFGF_NONE),
+        CFG_INT("max_threshold", 75, CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_COLOR_OPTS,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t disk_opts[] = {
+        CFG_STR("format", "%free", CFGF_NONE),
+        CFG_STR("format_not_mounted", NULL, CFGF_NONE),
+        CFG_STR("prefix_type", "binary", CFGF_NONE),
+        CFG_STR("threshold_type", "percentage_avail", CFGF_NONE),
+        CFG_FLOAT("low_threshold", 0, CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_COLOR_OPTS,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t volume_opts[] = {
+        CFG_STR("format", "♪: %volume", CFGF_NONE),
+        CFG_STR("format_muted", "♪: 0%%", CFGF_NONE),
+        CFG_STR("device", "default", CFGF_NONE),
+        CFG_STR("mixer", "Master", CFGF_NONE),
+        CFG_INT("mixer_idx", 0, CFGF_NONE),
+        CFG_CUSTOM_ALIGN_OPT,
+        CFG_CUSTOM_COLOR_OPTS,
+        CFG_CUSTOM_MIN_WIDTH_OPT,
+        CFG_END()};
+
+    cfg_opt_t opts[] = {
+        CFG_STR_LIST("order", "{}", CFGF_NONE),
+        CFG_SEC("general", general_opts, CFGF_NONE),
+        CFG_SEC("run_watch", run_watch_opts, CFGF_TITLE | CFGF_MULTI),
+        CFG_SEC("path_exists", path_exists_opts, CFGF_TITLE | CFGF_MULTI),
+        CFG_SEC("wireless", wireless_opts, CFGF_TITLE | CFGF_MULTI),
+        CFG_SEC("ethernet", ethernet_opts, CFGF_TITLE | CFGF_MULTI),
+        CFG_SEC("battery", battery_opts, CFGF_TITLE | CFGF_MULTI),
+        CFG_SEC("cpu_temperature", temp_opts, CFGF_TITLE | CFGF_MULTI),
+        CFG_SEC("disk", disk_opts, CFGF_TITLE | CFGF_MULTI),
+        CFG_SEC("volume", volume_opts, CFGF_TITLE | CFGF_MULTI),
+        CFG_SEC("ipv6", ipv6_opts, CFGF_NONE),
+        CFG_SEC("time", time_opts, CFGF_NONE),
+        CFG_SEC("tztime", tztime_opts, CFGF_TITLE | CFGF_MULTI),
+        CFG_SEC("ddate", ddate_opts, CFGF_NONE),
+        CFG_SEC("load", load_opts, CFGF_NONE),
+        CFG_SEC("cpu_usage", usage_opts, CFGF_NONE),
+        CFG_END()};
+
+    char *configfile = NULL;
+    int o, option_index = 0;
+    struct option long_options[] = {
+        {"config", required_argument, 0, 'c'},
+        {"help", no_argument, 0, 'h'},
+        {"version", no_argument, 0, 'v'},
+        {0, 0, 0, 0}};
+
+    struct sigaction action;
+    memset(&action, 0, sizeof(struct sigaction));
+    action.sa_handler = fatalsig;
+
+    /* Exit upon SIGPIPE because when we have nowhere to write to, gathering system
+     * information is pointless. Also exit explicitly on SIGTERM and SIGINT because
+     * only this will trigger a reset of the cursor in the terminal output-format.
+     */
+    sigaction(SIGPIPE, &action, NULL);
+    sigaction(SIGTERM, &action, NULL);
+    sigaction(SIGINT, &action, NULL);
+
+    memset(&action, 0, sizeof(struct sigaction));
+    action.sa_handler = sigusr1;
+    sigaction(SIGUSR1, &action, NULL);
+
+    if (setlocale(LC_ALL, "") == NULL)
+        die("Could not set locale. Please make sure all your LC_* / LANG settings are correct.");
+
+    while ((o = getopt_long(argc, argv, "c:hv", long_options, &option_index)) != -1)
+        if ((char)o == 'c')
+            configfile = optarg;
+        else if ((char)o == 'h') {
+            printf("i3status " VERSION " © 2008-2012 Michael Stapelberg and contributors\n"
+                   "Syntax: %s [-c <configfile>] [-h] [-v]\n",
+                   argv[0]);
+            return 0;
+        } else if ((char)o == 'v') {
+            printf("i3status " VERSION " © 2008-2012 Michael Stapelberg and contributors\n");
+            return 0;
         }
 
-        if (strcasecmp(output_str, "dzen2") == 0)
-                output_format = O_DZEN2;
-        else if (strcasecmp(output_str, "xmobar") == 0)
-                output_format = O_XMOBAR;
-        else if (strcasecmp(output_str, "i3bar") == 0)
-                output_format = O_I3BAR;
-        else if (strcasecmp(output_str, "term") == 0)
-                output_format = O_TERM;
-        else if (strcasecmp(output_str, "none") == 0)
-                output_format = O_NONE;
-        else die("Unknown output format: \"%s\"\n", output_str);
-
-        const char *separator = cfg_getstr(cfg_general, "separator");
-
-        // if no custom separator has been provided, use the default one
-        if (strcasecmp(separator, "default") == 0)
-                separator = get_default_separator();
-
-        if (!valid_color(cfg_getstr(cfg_general, "color_good"))
-                        || !valid_color(cfg_getstr(cfg_general, "color_degraded"))
-                        || !valid_color(cfg_getstr(cfg_general, "color_bad"))
-                        || !valid_color(cfg_getstr(cfg_general, "color_separator")))
-               die("Bad color format");
+    if (configfile == NULL)
+        configfile = get_config_path();
+
+    cfg = cfg_init(opts, CFGF_NOCASE);
+    if (cfg_parse(cfg, configfile) == CFG_PARSE_ERROR)
+        return EXIT_FAILURE;
+
+    if (cfg_size(cfg, "order") == 0)
+        die("Your 'order' array is empty. Please fix your config.\n");
+
+    cfg_general = cfg_getsec(cfg, "general");
+    if (cfg_general == NULL)
+        die("Could not get section \"general\"\n");
+
+    char *output_str = cfg_getstr(cfg_general, "output_format");
+    if (strcasecmp(output_str, "auto") == 0) {
+        fprintf(stderr, "i3status: trying to auto-detect output_format setting\n");
+        output_str = auto_detect_format();
+        if (!output_str) {
+            output_str = "none";
+            fprintf(stderr, "i3status: falling back to \"none\"\n");
+        } else {
+            fprintf(stderr, "i3status: auto-detected \"%s\"\n", output_str);
+        }
+    }
+
+    if (strcasecmp(output_str, "dzen2") == 0)
+        output_format = O_DZEN2;
+    else if (strcasecmp(output_str, "xmobar") == 0)
+        output_format = O_XMOBAR;
+    else if (strcasecmp(output_str, "i3bar") == 0)
+        output_format = O_I3BAR;
+    else if (strcasecmp(output_str, "term") == 0)
+        output_format = O_TERM;
+    else if (strcasecmp(output_str, "none") == 0)
+        output_format = O_NONE;
+    else
+        die("Unknown output format: \"%s\"\n", output_str);
+
+    const char *separator = cfg_getstr(cfg_general, "separator");
+
+    // if no custom separator has been provided, use the default one
+    if (strcasecmp(separator, "default") == 0)
+        separator = get_default_separator();
+
+    if (!valid_color(cfg_getstr(cfg_general, "color_good")) || !valid_color(cfg_getstr(cfg_general, "color_degraded")) || !valid_color(cfg_getstr(cfg_general, "color_bad")) || !valid_color(cfg_getstr(cfg_general, "color_separator")))
+        die("Bad color format");
 
 #if YAJL_MAJOR >= 2
-        yajl_gen json_gen = yajl_gen_alloc(NULL);
+    yajl_gen json_gen = yajl_gen_alloc(NULL);
 #else
-        yajl_gen json_gen = yajl_gen_alloc(NULL, NULL);
+    yajl_gen json_gen = yajl_gen_alloc(NULL, NULL);
 #endif
 
-        if (output_format == O_I3BAR) {
-                /* Initialize the i3bar protocol. See i3/docs/i3bar-protocol
-                 * for details. */
-                printf("{\"version\":1}\n[\n");
-                fflush(stdout);
-                yajl_gen_array_open(json_gen);
-                yajl_gen_clear(json_gen);
+    if (output_format == O_I3BAR) {
+        /* Initialize the i3bar protocol. See i3/docs/i3bar-protocol
+         * for details. */
+        printf("{\"version\":1}\n[\n");
+        fflush(stdout);
+        yajl_gen_array_open(json_gen);
+        yajl_gen_clear(json_gen);
+    }
+    if (output_format == O_TERM) {
+        /* Save the cursor-position and hide the cursor */
+        printf("\033[s\033[?25l");
+        /* Undo at exit */
+        atexit(&reset_cursor);
+    }
+
+    if ((general_socket = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
+        die("Could not create socket\n");
+
+    int interval = cfg_getint(cfg_general, "interval");
+
+    /* One memory page which each plugin can use to buffer output.
+     * Even though it’s unclean, we just assume that the user will not
+     * specify a format string which expands to something longer than 4096
+     * bytes — given that the output of i3status is used to display
+     * information on screen, more than 1024 characters for the full line
+     * (!), not individual plugins, seem very unlikely. */
+    char buffer[4096];
+
+    void **per_instance = calloc(cfg_size(cfg, "order"), sizeof(*per_instance));
+
+    while (1) {
+        if (exit_upon_signal) {
+            fprintf(stderr, "Exiting due to signal.\n");
+            exit(1);
         }
-        if (output_format == O_TERM) {
-                /* Save the cursor-position and hide the cursor */
-                printf("\033[s\033[?25l");
-                /* Undo at exit */
-                atexit(&reset_cursor);
+        struct timeval tv;
+        gettimeofday(&tv, NULL);
+        if (output_format == O_I3BAR)
+            yajl_gen_array_open(json_gen);
+        else if (output_format == O_TERM)
+            /* Restore the cursor-position, clear line */
+            printf("\033[u\033[K");
+        for (j = 0; j < cfg_size(cfg, "order"); j++) {
+            cur_instance = per_instance + j;
+            if (j > 0)
+                print_separator(separator);
+
+            const char *current = cfg_getnstr(cfg, "order", j);
+
+            CASE_SEC("ipv6") {
+                SEC_OPEN_MAP("ipv6");
+                print_ipv6_info(json_gen, buffer, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down"));
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC_TITLE("wireless") {
+                SEC_OPEN_MAP("wireless");
+                const char *interface = NULL;
+                if (strcasecmp(title, "_first_") == 0)
+                    interface = first_eth_interface(NET_TYPE_WIRELESS);
+                if (interface == NULL)
+                    interface = title;
+                print_wireless_info(json_gen, buffer, interface, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down"));
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC_TITLE("ethernet") {
+                SEC_OPEN_MAP("ethernet");
+                const char *interface = NULL;
+                if (strcasecmp(title, "_first_") == 0)
+                    interface = first_eth_interface(NET_TYPE_ETHERNET);
+                if (interface == NULL)
+                    interface = title;
+                print_eth_info(json_gen, buffer, interface, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down"));
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC_TITLE("battery") {
+                SEC_OPEN_MAP("battery");
+                print_battery_info(json_gen, buffer, atoi(title), cfg_getstr(sec, "path"), cfg_getstr(sec, "format"), cfg_getstr(sec, "format_down"), cfg_getstr(sec, "status_chr"), cfg_getstr(sec, "status_bat"), cfg_getstr(sec, "status_full"), cfg_getint(sec, "low_threshold"), cfg_getstr(sec, "threshold_type"), cfg_getbool(sec, "last_full_capacity"), cfg_getbool(sec, "integer_battery_capacity"), cfg_getbool(sec, "hide_seconds"));
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC_TITLE("run_watch") {
+                SEC_OPEN_MAP("run_watch");
+                print_run_watch(json_gen, buffer, title, cfg_getstr(sec, "pidfile"), cfg_getstr(sec, "format"));
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC_TITLE("path_exists") {
+                SEC_OPEN_MAP("path_exists");
+                print_path_exists(json_gen, buffer, title, cfg_getstr(sec, "path"), cfg_getstr(sec, "format"));
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC_TITLE("disk") {
+                SEC_OPEN_MAP("disk_info");
+                print_disk_info(json_gen, buffer, title, cfg_getstr(sec, "format"), cfg_getstr(sec, "format_not_mounted"), cfg_getstr(sec, "prefix_type"), cfg_getstr(sec, "threshold_type"), cfg_getfloat(sec, "low_threshold"));
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC("load") {
+                SEC_OPEN_MAP("load");
+                print_load(json_gen, buffer, cfg_getstr(sec, "format"), cfg_getfloat(sec, "max_threshold"));
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC("time") {
+                SEC_OPEN_MAP("time");
+                print_time(json_gen, buffer, cfg_getstr(sec, "format"), NULL, tv.tv_sec);
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC_TITLE("tztime") {
+                SEC_OPEN_MAP("tztime");
+                print_time(json_gen, buffer, cfg_getstr(sec, "format"), cfg_getstr(sec, "timezone"), tv.tv_sec);
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC("ddate") {
+                SEC_OPEN_MAP("ddate");
+                print_ddate(json_gen, buffer, cfg_getstr(sec, "format"), tv.tv_sec);
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC_TITLE("volume") {
+                SEC_OPEN_MAP("volume");
+                print_volume(json_gen, buffer, cfg_getstr(sec, "format"),
+                             cfg_getstr(sec, "format_muted"),
+                             cfg_getstr(sec, "device"),
+                             cfg_getstr(sec, "mixer"),
+                             cfg_getint(sec, "mixer_idx"));
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC_TITLE("cpu_temperature") {
+                SEC_OPEN_MAP("cpu_temperature");
+                print_cpu_temperature_info(json_gen, buffer, atoi(title), cfg_getstr(sec, "path"), cfg_getstr(sec, "format"), cfg_getint(sec, "max_threshold"));
+                SEC_CLOSE_MAP;
+            }
+
+            CASE_SEC("cpu_usage") {
+                SEC_OPEN_MAP("cpu_usage");
+                print_cpu_usage(json_gen, buffer, cfg_getstr(sec, "format"));
+                SEC_CLOSE_MAP;
+            }
         }
-
-        if ((general_socket = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
-                die("Could not create socket\n");
-
-        int interval = cfg_getint(cfg_general, "interval");
-
-        /* One memory page which each plugin can use to buffer output.
-         * Even though it’s unclean, we just assume that the user will not
-         * specify a format string which expands to something longer than 4096
-         * bytes — given that the output of i3status is used to display
-         * information on screen, more than 1024 characters for the full line
-         * (!), not individual plugins, seem very unlikely. */
-        char buffer[4096];
-
-        void **per_instance = calloc(cfg_size(cfg, "order"), sizeof(*per_instance));
-
-        while (1) {
-                if (exit_upon_signal) {
-                        fprintf(stderr, "Exiting due to signal.\n");
-                        exit(1);
-                }
-                struct timeval tv;
-                gettimeofday(&tv, NULL);
-                if (output_format == O_I3BAR)
-                        yajl_gen_array_open(json_gen);
-                else if (output_format == O_TERM)
-                        /* Restore the cursor-position, clear line */
-                        printf("\033[u\033[K");
-                for (j = 0; j < cfg_size(cfg, "order"); j++) {
-                        cur_instance = per_instance + j;
-                        if (j > 0)
-                                print_separator(separator);
-
-                        const char *current = cfg_getnstr(cfg, "order", j);
-
-                        CASE_SEC("ipv6") {
-                                SEC_OPEN_MAP("ipv6");
-                                print_ipv6_info(json_gen, buffer, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down"));
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC_TITLE("wireless") {
-                                SEC_OPEN_MAP("wireless");
-                                const char *interface = NULL;
-                                if (strcasecmp(title, "_first_") == 0)
-                                        interface = first_eth_interface(NET_TYPE_WIRELESS);
-                                if (interface == NULL)
-                                        interface = title;
-                                print_wireless_info(json_gen, buffer, interface, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down"));
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC_TITLE("ethernet") {
-                                SEC_OPEN_MAP("ethernet");
-                                const char *interface = NULL;
-                                if (strcasecmp(title, "_first_") == 0)
-                                        interface = first_eth_interface(NET_TYPE_ETHERNET);
-                                if (interface == NULL)
-                                        interface = title;
-                                print_eth_info(json_gen, buffer, interface, cfg_getstr(sec, "format_up"), cfg_getstr(sec, "format_down"));
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC_TITLE("battery") {
-                                SEC_OPEN_MAP("battery");
-                                print_battery_info(json_gen, buffer, atoi(title), cfg_getstr(sec, "path"), cfg_getstr(sec, "format"), cfg_getstr(sec, "format_down"), cfg_getstr(sec, "status_chr"), cfg_getstr(sec, "status_bat"), cfg_getstr(sec, "status_full"), cfg_getint(sec, "low_threshold"), cfg_getstr(sec, "threshold_type"), cfg_getbool(sec, "last_full_capacity"), cfg_getbool(sec, "integer_battery_capacity"), cfg_getbool(sec, "hide_seconds"));
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC_TITLE("run_watch") {
-                                SEC_OPEN_MAP("run_watch");
-                                print_run_watch(json_gen, buffer, title, cfg_getstr(sec, "pidfile"), cfg_getstr(sec, "format"));
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC_TITLE("path_exists") {
-                                SEC_OPEN_MAP("path_exists");
-                                print_path_exists(json_gen, buffer, title, cfg_getstr(sec, "path"), cfg_getstr(sec, "format"));
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC_TITLE("disk") {
-                                SEC_OPEN_MAP("disk_info");
-                                print_disk_info(json_gen, buffer, title, cfg_getstr(sec, "format"), cfg_getstr(sec, "format_not_mounted"), cfg_getstr(sec, "prefix_type"), cfg_getstr(sec, "threshold_type"), cfg_getfloat(sec, "low_threshold"));
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC("load") {
-                                SEC_OPEN_MAP("load");
-                                print_load(json_gen, buffer, cfg_getstr(sec, "format"), cfg_getfloat(sec, "max_threshold"));
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC("time") {
-                                SEC_OPEN_MAP("time");
-                                print_time(json_gen, buffer, cfg_getstr(sec, "format"), NULL, tv.tv_sec);
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC_TITLE("tztime") {
-                                SEC_OPEN_MAP("tztime");
-                                print_time(json_gen, buffer, cfg_getstr(sec, "format"), cfg_getstr(sec, "timezone"), tv.tv_sec);
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC("ddate") {
-                                SEC_OPEN_MAP("ddate");
-                                print_ddate(json_gen, buffer, cfg_getstr(sec, "format"), tv.tv_sec);
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC_TITLE("volume") {
-                                SEC_OPEN_MAP("volume");
-                                print_volume(json_gen, buffer, cfg_getstr(sec, "format"),
-                                             cfg_getstr(sec, "format_muted"),
-                                             cfg_getstr(sec, "device"),
-                                             cfg_getstr(sec, "mixer"),
-                                             cfg_getint(sec, "mixer_idx"));
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC_TITLE("cpu_temperature") {
-                                SEC_OPEN_MAP("cpu_temperature");
-                                print_cpu_temperature_info(json_gen, buffer, atoi(title), cfg_getstr(sec, "path"), cfg_getstr(sec, "format"), cfg_getint(sec, "max_threshold"));
-                                SEC_CLOSE_MAP;
-                        }
-
-                        CASE_SEC("cpu_usage") {
-                                SEC_OPEN_MAP("cpu_usage");
-                                print_cpu_usage(json_gen, buffer, cfg_getstr(sec, "format"));
-                                SEC_CLOSE_MAP;
-                        }
-                }
-                if (output_format == O_I3BAR) {
-                        yajl_gen_array_close(json_gen);
-                        const unsigned char *buf;
+        if (output_format == O_I3BAR) {
+            yajl_gen_array_close(json_gen);
+            const unsigned char *buf;
 #if YAJL_MAJOR >= 2
-                        size_t len;
+            size_t len;
 #else
-                        unsigned int len;
+            unsigned int len;
 #endif
-                        yajl_gen_get_buf(json_gen, &buf, &len);
-                        write(STDOUT_FILENO, buf, len);
-                        yajl_gen_clear(json_gen);
-                }
-
-                printf("\n");
-                fflush(stdout);
-
-                /* To provide updates on every full second (as good as possible)
-                 * we don’t use sleep(interval) but we sleep until the next
-                 * second (with microsecond precision) plus (interval-1)
-                 * seconds. We also align to 60 seconds modulo interval such
-                 * that we start with :00 on every new minute. */
-                struct timeval current_timeval;
-                gettimeofday(&current_timeval, NULL);
-                struct timespec ts = {interval - 1 - (current_timeval.tv_sec % interval), (10e5 - current_timeval.tv_usec) * 1000};
-                nanosleep(&ts, NULL);
+            yajl_gen_get_buf(json_gen, &buf, &len);
+            write(STDOUT_FILENO, buf, len);
+            yajl_gen_clear(json_gen);
         }
+
+        printf("\n");
+        fflush(stdout);
+
+        /* To provide updates on every full second (as good as possible)
+         * we don’t use sleep(interval) but we sleep until the next
+         * second (with microsecond precision) plus (interval-1)
+         * seconds. We also align to 60 seconds modulo interval such
+         * that we start with :00 on every new minute. */
+        struct timeval current_timeval;
+        gettimeofday(&current_timeval, NULL);
+        struct timespec ts = {interval - 1 - (current_timeval.tv_sec % interval), (10e5 - current_timeval.tv_usec) * 1000};
+        nanosleep(&ts, NULL);
+    }
 }
index 6e20af3009ae884cfe32cb0b6ac3df9d81a8a318..0985180961645135fc9efed1169fb428ff1ed6d3 100644 (file)
@@ -1,7 +1,11 @@
 #ifndef _I3STATUS_H
 #define _I3STATUS_H
 
-enum { O_DZEN2, O_XMOBAR, O_I3BAR, O_TERM, O_NONE } output_format;
+enum { O_DZEN2,
+       O_XMOBAR,
+       O_I3BAR,
+       O_TERM,
+       O_NONE } output_format;
 
 #include <stdbool.h>
 #include <confuse.h>
@@ -45,105 +49,104 @@ enum { O_DZEN2, O_XMOBAR, O_I3BAR, O_TERM, O_NONE } output_format;
 /* Allows for the definition of a variable without opening a new scope, thus
  * suited for usage in a macro. Idea from wmii. */
 #define with(type, var, init) \
-        for (type var = (type)-1; (var == (type)-1) && ((var=(init)) || 1); )
+    for (type var = (type)-1; (var == (type)-1) && ((var = (init)) || 1);)
 
-#define CASE_SEC(name) \
-        if (BEGINS_WITH(current, name)) \
-                with(cfg_t *, sec, cfg_section = cfg_getsec(cfg, name)) \
-                        if (sec != NULL)
+#define CASE_SEC(name)              \
+    if (BEGINS_WITH(current, name)) \
+    with(cfg_t *, sec, cfg_section = cfg_getsec(cfg, name)) if (sec != NULL)
 
-#define CASE_SEC_TITLE(name) \
-        if (BEGINS_WITH(current, name)) \
-                with(const char *, title, current + strlen(name) + 1) \
-                        with(cfg_t *, sec, cfg_section = cfg_gettsec(cfg, name, title)) \
-                                if (sec != NULL)
+#define CASE_SEC_TITLE(name)                              \
+    if (BEGINS_WITH(current, name))                       \
+    with(const char *, title, current + strlen(name) + 1) \
+        with(cfg_t *, sec, cfg_section = cfg_gettsec(cfg, name, title)) if (sec != NULL)
 
 /* Macro which any plugin can use to output the full_text part (when the output
  * format is JSON) or just output to stdout (any other output format). */
-#define OUTPUT_FULL_TEXT(text) \
-       do { \
-               /* Terminate the output buffer here in any case, so that it’s \
-                * not forgotten in the module */ \
-               *outwalk = '\0'; \
-               if (output_format == O_I3BAR) { \
-                       yajl_gen_string(json_gen, (const unsigned char *)"full_text", strlen("full_text")); \
-                       yajl_gen_string(json_gen, (const unsigned char *)text, strlen(text)); \
-               } else { \
-                       printf("%s", text); \
-               } \
-       } while (0)
-
-#define SEC_OPEN_MAP(name) \
-       do { \
-               if (output_format == O_I3BAR) { \
-                       yajl_gen_map_open(json_gen); \
-                       yajl_gen_string(json_gen, (const unsigned char *)"name", strlen("name")); \
-                       yajl_gen_string(json_gen, (const unsigned char *)name, strlen(name)); \
-               } \
-       } while (0)
-
-#define SEC_CLOSE_MAP \
-       do { \
-               if (output_format == O_I3BAR) { \
-                       char *_align = cfg_getstr(sec, "align"); \
-                       if (_align) { \
-                               yajl_gen_string(json_gen, (const unsigned char *)"align", strlen("align")); \
-                               yajl_gen_string(json_gen, (const unsigned char *)_align, strlen(_align)); \
-                       } \
-                       struct min_width *_width = cfg_getptr(sec, "min_width"); \
-                       if (_width) { \
-                               /* if the value can be parsed as a number, we use the numerical value */ \
-                               if (_width->num > 0) { \
-                                       yajl_gen_string(json_gen, (const unsigned char *)"min_width", strlen("min_width")); \
-                                       yajl_gen_integer(json_gen, _width->num); \
-                               } else { \
-                                       yajl_gen_string(json_gen, (const unsigned char *)"min_width", strlen("min_width")); \
-                                       yajl_gen_string(json_gen, (const unsigned char *)_width->str, strlen(_width->str)); \
-                               } \
-                       } \
-                       const char *_sep = cfg_getstr(cfg_general, "separator"); \
-                       if (strlen(_sep) == 0) {\
-                               yajl_gen_string(json_gen, (const unsigned char *)"separator", strlen("separator")); \
-                               yajl_gen_bool(json_gen, false); \
-                       } \
-                       yajl_gen_map_close(json_gen); \
-               } \
-       } while (0)
-
-#define START_COLOR(colorstr) \
-       do { \
-               if (cfg_getbool(cfg_general, "colors")) { \
-                       const char *_val = NULL; \
-                       if (cfg_section) \
-                               _val = cfg_getstr(cfg_section, colorstr); \
-                       if (!_val) \
-                               _val = cfg_getstr(cfg_general, colorstr); \
-                       if (output_format == O_I3BAR) { \
-                               yajl_gen_string(json_gen, (const unsigned char *)"color", strlen("color")); \
-                               yajl_gen_string(json_gen, (const unsigned char *)_val, strlen(_val)); \
-                       } else { \
-                               outwalk += sprintf(outwalk, "%s", color(colorstr)); \
-                       } \
-               } \
-       } while (0)
-
-#define END_COLOR \
-       do { \
-               if (cfg_getbool(cfg_general, "colors") && output_format != O_I3BAR) { \
-                       outwalk += sprintf(outwalk, "%s", endcolor()); \
-               } \
-       } while (0)
-
-#define INSTANCE(instance) \
-       do { \
-               if (output_format == O_I3BAR) { \
-                       yajl_gen_string(json_gen, (const unsigned char *)"instance", strlen("instance")); \
-                       yajl_gen_string(json_gen, (const unsigned char *)instance, strlen(instance)); \
-               } \
-       } while (0)
-
-
-typedef enum { CS_DISCHARGING, CS_CHARGING, CS_FULL } charging_status_t;
+#define OUTPUT_FULL_TEXT(text)                                                                   \
+    do {                                                                                         \
+        /* Terminate the output buffer here in any case, so that it’s                          \
+         * not forgotten in the module */                                                        \
+        *outwalk = '\0';                                                                         \
+        if (output_format == O_I3BAR) {                                                          \
+            yajl_gen_string(json_gen, (const unsigned char *) "full_text", strlen("full_text")); \
+            yajl_gen_string(json_gen, (const unsigned char *)text, strlen(text));                \
+        } else {                                                                                 \
+            printf("%s", text);                                                                  \
+        }                                                                                        \
+    } while (0)
+
+#define SEC_OPEN_MAP(name)                                                             \
+    do {                                                                               \
+        if (output_format == O_I3BAR) {                                                \
+            yajl_gen_map_open(json_gen);                                               \
+            yajl_gen_string(json_gen, (const unsigned char *) "name", strlen("name")); \
+            yajl_gen_string(json_gen, (const unsigned char *)name, strlen(name));      \
+        }                                                                              \
+    } while (0)
+
+#define SEC_CLOSE_MAP                                                                                    \
+    do {                                                                                                 \
+        if (output_format == O_I3BAR) {                                                                  \
+            char *_align = cfg_getstr(sec, "align");                                                     \
+            if (_align) {                                                                                \
+                yajl_gen_string(json_gen, (const unsigned char *) "align", strlen("align"));             \
+                yajl_gen_string(json_gen, (const unsigned char *)_align, strlen(_align));                \
+            }                                                                                            \
+            struct min_width *_width = cfg_getptr(sec, "min_width");                                     \
+            if (_width) {                                                                                \
+                /* if the value can be parsed as a number, we use the numerical value */                 \
+                if (_width->num > 0) {                                                                   \
+                    yajl_gen_string(json_gen, (const unsigned char *) "min_width", strlen("min_width")); \
+                    yajl_gen_integer(json_gen, _width->num);                                             \
+                } else {                                                                                 \
+                    yajl_gen_string(json_gen, (const unsigned char *) "min_width", strlen("min_width")); \
+                    yajl_gen_string(json_gen, (const unsigned char *)_width->str, strlen(_width->str));  \
+                }                                                                                        \
+            }                                                                                            \
+            const char *_sep = cfg_getstr(cfg_general, "separator");                                     \
+            if (strlen(_sep) == 0) {                                                                     \
+                yajl_gen_string(json_gen, (const unsigned char *) "separator", strlen("separator"));     \
+                yajl_gen_bool(json_gen, false);                                                          \
+            }                                                                                            \
+            yajl_gen_map_close(json_gen);                                                                \
+        }                                                                                                \
+    } while (0)
+
+#define START_COLOR(colorstr)                                                                \
+    do {                                                                                     \
+        if (cfg_getbool(cfg_general, "colors")) {                                            \
+            const char *_val = NULL;                                                         \
+            if (cfg_section)                                                                 \
+                _val = cfg_getstr(cfg_section, colorstr);                                    \
+            if (!_val)                                                                       \
+                _val = cfg_getstr(cfg_general, colorstr);                                    \
+            if (output_format == O_I3BAR) {                                                  \
+                yajl_gen_string(json_gen, (const unsigned char *) "color", strlen("color")); \
+                yajl_gen_string(json_gen, (const unsigned char *)_val, strlen(_val));        \
+            } else {                                                                         \
+                outwalk += sprintf(outwalk, "%s", color(colorstr));                          \
+            }                                                                                \
+        }                                                                                    \
+    } while (0)
+
+#define END_COLOR                                                             \
+    do {                                                                      \
+        if (cfg_getbool(cfg_general, "colors") && output_format != O_I3BAR) { \
+            outwalk += sprintf(outwalk, "%s", endcolor());                    \
+        }                                                                     \
+    } while (0)
+
+#define INSTANCE(instance)                                                                     \
+    do {                                                                                       \
+        if (output_format == O_I3BAR) {                                                        \
+            yajl_gen_string(json_gen, (const unsigned char *) "instance", strlen("instance")); \
+            yajl_gen_string(json_gen, (const unsigned char *)instance, strlen(instance));      \
+        }                                                                                      \
+    } while (0)
+
+typedef enum { CS_DISCHARGING,
+               CS_CHARGING,
+               CS_FULL } charging_status_t;
 
 /*
  * The "min_width" module option may either be defined as a string or a number.
@@ -161,7 +164,7 @@ bool slurp(const char *filename, char *destination, int size);
 /* src/output.c */
 void print_separator(const char *separator);
 char *color(const char *colorstr);
-char *endcolor() __attribute__ ((pure));
+char *endcolor() __attribute__((pure));
 void reset_cursor(void);
 
 /* src/auto_detect_format.c */
@@ -172,8 +175,8 @@ void set_timezone(const char *tz);
 
 /* src/first_network_device.c */
 typedef enum {
-       NET_TYPE_WIRELESS = 0,
-       NET_TYPE_ETHERNET = 1
+    NET_TYPE_WIRELESS = 0,
+    NET_TYPE_ETHERNET = 1
 } net_type_t;
 const char *first_eth_interface(const net_type_t type);
 
index 75bb957aec793b66a6da6763a8d205f7e3e4fe42..3092aad3d6413e2aea97a01b0f3119fe631dc45f 100644 (file)
@@ -32,8 +32,8 @@
  *     @(#)queue.h     8.5 (Berkeley) 8/20/94
  */
 
-#ifndef        _SYS_QUEUE_H_
-#define        _SYS_QUEUE_H_
+#ifndef _SYS_QUEUE_H_
+#define _SYS_QUEUE_H_
 
 /*
  * This file defines five types of data structures: singly-linked lists,
 /*
  * Singly-linked List definitions.
  */
-#define SLIST_HEAD(name, type)                                         \
-struct name {                                                          \
-       struct type *slh_first; /* first element */                     \
-}
+#define SLIST_HEAD(name, type)                      \
+    struct name {                                   \
+        struct type *slh_first; /* first element */ \
+    }
 
-#define        SLIST_HEAD_INITIALIZER(head)                                    \
-       { NULL }
+#define SLIST_HEAD_INITIALIZER(head) \
+    { NULL }
 
-#define SLIST_ENTRY(type)                                              \
-struct {                                                               \
-       struct type *sle_next;  /* next element */                      \
-}
+#define SLIST_ENTRY(type)                         \
+    struct {                                      \
+        struct type *sle_next; /* next element */ \
+    }
 
 /*
  * Singly-linked List access methods.
  */
-#define        SLIST_FIRST(head)       ((head)->slh_first)
-#define        SLIST_END(head)         NULL
-#define        SLIST_EMPTY(head)       (SLIST_FIRST(head) == SLIST_END(head))
-#define        SLIST_NEXT(elm, field)  ((elm)->field.sle_next)
+#define SLIST_FIRST(head) ((head)->slh_first)
+#define SLIST_END(head) NULL
+#define SLIST_EMPTY(head) (SLIST_FIRST(head) == SLIST_END(head))
+#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)
 
-#define        SLIST_FOREACH(var, head, field)                                 \
-       for((var) = SLIST_FIRST(head);                                  \
-           (var) != SLIST_END(head);                                   \
-           (var) = SLIST_NEXT(var, field))
+#define SLIST_FOREACH(var, head, field) \
+    for ((var) = SLIST_FIRST(head);     \
+         (var) != SLIST_END(head);      \
+         (var) = SLIST_NEXT(var, field))
 
-#define        SLIST_FOREACH_PREVPTR(var, varp, head, field)                   \
-       for ((varp) = &SLIST_FIRST((head));                             \
-           ((var) = *(varp)) != SLIST_END(head);                       \
-           (varp) = &SLIST_NEXT((var), field))
+#define SLIST_FOREACH_PREVPTR(var, varp, head, field) \
+    for ((varp) = &SLIST_FIRST((head));               \
+         ((var) = *(varp)) != SLIST_END(head);        \
+         (varp) = &SLIST_NEXT((var), field))
 
 /*
  * Singly-linked List functions.
  */
-#define        SLIST_INIT(head) {                                              \
-       SLIST_FIRST(head) = SLIST_END(head);                            \
-}
-
-#define        SLIST_INSERT_AFTER(slistelm, elm, field) do {                   \
-       (elm)->field.sle_next = (slistelm)->field.sle_next;             \
-       (slistelm)->field.sle_next = (elm);                             \
-} while (0)
-
-#define        SLIST_INSERT_HEAD(head, elm, field) do {                        \
-       (elm)->field.sle_next = (head)->slh_first;                      \
-       (head)->slh_first = (elm);                                      \
-} while (0)
-
-#define        SLIST_REMOVE_NEXT(head, elm, field) do {                        \
-       (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next;  \
-} while (0)
-
-#define        SLIST_REMOVE_HEAD(head, field) do {                             \
-       (head)->slh_first = (head)->slh_first->field.sle_next;          \
-} while (0)
-
-#define SLIST_REMOVE(head, elm, type, field) do {                      \
-       if ((head)->slh_first == (elm)) {                               \
-               SLIST_REMOVE_HEAD((head), field);                       \
-       } else {                                                        \
-               struct type *curelm = (head)->slh_first;                \
-                                                                       \
-               while (curelm->field.sle_next != (elm))                 \
-                       curelm = curelm->field.sle_next;                \
-               curelm->field.sle_next =                                \
-                   curelm->field.sle_next->field.sle_next;             \
-               _Q_INVALIDATE((elm)->field.sle_next);                   \
-       }                                                               \
-} while (0)
+#define SLIST_INIT(head)                     \
+    {                                        \
+        SLIST_FIRST(head) = SLIST_END(head); \
+    }
+
+#define SLIST_INSERT_AFTER(slistelm, elm, field)            \
+    do {                                                    \
+        (elm)->field.sle_next = (slistelm)->field.sle_next; \
+        (slistelm)->field.sle_next = (elm);                 \
+    } while (0)
+
+#define SLIST_INSERT_HEAD(head, elm, field)        \
+    do {                                           \
+        (elm)->field.sle_next = (head)->slh_first; \
+        (head)->slh_first = (elm);                 \
+    } while (0)
+
+#define SLIST_REMOVE_NEXT(head, elm, field)                            \
+    do {                                                               \
+        (elm)->field.sle_next = (elm)->field.sle_next->field.sle_next; \
+    } while (0)
+
+#define SLIST_REMOVE_HEAD(head, field)                         \
+    do {                                                       \
+        (head)->slh_first = (head)->slh_first->field.sle_next; \
+    } while (0)
+
+#define SLIST_REMOVE(head, elm, type, field)                                 \
+    do {                                                                     \
+        if ((head)->slh_first == (elm)) {                                    \
+            SLIST_REMOVE_HEAD((head), field);                                \
+        } else {                                                             \
+            struct type *curelm = (head)->slh_first;                         \
+                                                                             \
+            while (curelm->field.sle_next != (elm))                          \
+                curelm = curelm->field.sle_next;                             \
+            curelm->field.sle_next = curelm->field.sle_next->field.sle_next; \
+            _Q_INVALIDATE((elm)->field.sle_next);                            \
+        }                                                                    \
+    } while (0)
 
 /*
  * List definitions.
  */
-#define LIST_HEAD(name, type)                                          \
-struct name {                                                          \
-       struct type *lh_first;  /* first element */                     \
-}
+#define LIST_HEAD(name, type)                      \
+    struct name {                                  \
+        struct type *lh_first; /* first element */ \
+    }
 
-#define LIST_HEAD_INITIALIZER(head)                                    \
-       { NULL }
+#define LIST_HEAD_INITIALIZER(head) \
+    { NULL }
 
-#define LIST_ENTRY(type)                                               \
-struct {                                                               \
-       struct type *le_next;   /* next element */                      \
-       struct type **le_prev;  /* address of previous next element */  \
-}
+#define LIST_ENTRY(type)                                              \
+    struct {                                                          \
+        struct type *le_next;  /* next element */                     \
+        struct type **le_prev; /* address of previous next element */ \
+    }
 
 /*
  * List access methods
  */
-#define        LIST_FIRST(head)                ((head)->lh_first)
-#define        LIST_END(head)                  NULL
-#define        LIST_EMPTY(head)                (LIST_FIRST(head) == LIST_END(head))
-#define        LIST_NEXT(elm, field)           ((elm)->field.le_next)
+#define LIST_FIRST(head) ((head)->lh_first)
+#define LIST_END(head) NULL
+#define LIST_EMPTY(head) (LIST_FIRST(head) == LIST_END(head))
+#define LIST_NEXT(elm, field) ((elm)->field.le_next)
 
-#define LIST_FOREACH(var, head, field)                                 \
-       for((var) = LIST_FIRST(head);                                   \
-           (var)!= LIST_END(head);                                     \
-           (var) = LIST_NEXT(var, field))
+#define LIST_FOREACH(var, head, field) \
+    for ((var) = LIST_FIRST(head);     \
+         (var) != LIST_END(head);      \
+         (var) = LIST_NEXT(var, field))
 
 /*
  * List functions.
  */
-#define        LIST_INIT(head) do {                                            \
-       LIST_FIRST(head) = LIST_END(head);                              \
-} while (0)
-
-#define LIST_INSERT_AFTER(listelm, elm, field) do {                    \
-       if (((elm)->field.le_next = (listelm)->field.le_next) != NULL)  \
-               (listelm)->field.le_next->field.le_prev =               \
-                   &(elm)->field.le_next;                              \
-       (listelm)->field.le_next = (elm);                               \
-       (elm)->field.le_prev = &(listelm)->field.le_next;               \
-} while (0)
-
-#define        LIST_INSERT_BEFORE(listelm, elm, field) do {                    \
-       (elm)->field.le_prev = (listelm)->field.le_prev;                \
-       (elm)->field.le_next = (listelm);                               \
-       *(listelm)->field.le_prev = (elm);                              \
-       (listelm)->field.le_prev = &(elm)->field.le_next;               \
-} while (0)
-
-#define LIST_INSERT_HEAD(head, elm, field) do {                                \
-       if (((elm)->field.le_next = (head)->lh_first) != NULL)          \
-               (head)->lh_first->field.le_prev = &(elm)->field.le_next;\
-       (head)->lh_first = (elm);                                       \
-       (elm)->field.le_prev = &(head)->lh_first;                       \
-} while (0)
-
-#define LIST_REMOVE(elm, field) do {                                   \
-       if ((elm)->field.le_next != NULL)                               \
-               (elm)->field.le_next->field.le_prev =                   \
-                   (elm)->field.le_prev;                               \
-       *(elm)->field.le_prev = (elm)->field.le_next;                   \
-       _Q_INVALIDATE((elm)->field.le_prev);                            \
-       _Q_INVALIDATE((elm)->field.le_next);                            \
-} while (0)
-
-#define LIST_REPLACE(elm, elm2, field) do {                            \
-       if (((elm2)->field.le_next = (elm)->field.le_next) != NULL)     \
-               (elm2)->field.le_next->field.le_prev =                  \
-                   &(elm2)->field.le_next;                             \
-       (elm2)->field.le_prev = (elm)->field.le_prev;                   \
-       *(elm2)->field.le_prev = (elm2);                                \
-       _Q_INVALIDATE((elm)->field.le_prev);                            \
-       _Q_INVALIDATE((elm)->field.le_next);                            \
-} while (0)
+#define LIST_INIT(head)                    \
+    do {                                   \
+        LIST_FIRST(head) = LIST_END(head); \
+    } while (0)
+
+#define LIST_INSERT_AFTER(listelm, elm, field)                               \
+    do {                                                                     \
+        if (((elm)->field.le_next = (listelm)->field.le_next) != NULL)       \
+            (listelm)->field.le_next->field.le_prev = &(elm)->field.le_next; \
+        (listelm)->field.le_next = (elm);                                    \
+        (elm)->field.le_prev = &(listelm)->field.le_next;                    \
+    } while (0)
+
+#define LIST_INSERT_BEFORE(listelm, elm, field)           \
+    do {                                                  \
+        (elm)->field.le_prev = (listelm)->field.le_prev;  \
+        (elm)->field.le_next = (listelm);                 \
+        *(listelm)->field.le_prev = (elm);                \
+        (listelm)->field.le_prev = &(elm)->field.le_next; \
+    } while (0)
+
+#define LIST_INSERT_HEAD(head, elm, field)                           \
+    do {                                                             \
+        if (((elm)->field.le_next = (head)->lh_first) != NULL)       \
+            (head)->lh_first->field.le_prev = &(elm)->field.le_next; \
+        (head)->lh_first = (elm);                                    \
+        (elm)->field.le_prev = &(head)->lh_first;                    \
+    } while (0)
+
+#define LIST_REMOVE(elm, field)                                         \
+    do {                                                                \
+        if ((elm)->field.le_next != NULL)                               \
+            (elm)->field.le_next->field.le_prev = (elm)->field.le_prev; \
+        *(elm)->field.le_prev = (elm)->field.le_next;                   \
+        _Q_INVALIDATE((elm)->field.le_prev);                            \
+        _Q_INVALIDATE((elm)->field.le_next);                            \
+    } while (0)
+
+#define LIST_REPLACE(elm, elm2, field)                                     \
+    do {                                                                   \
+        if (((elm2)->field.le_next = (elm)->field.le_next) != NULL)        \
+            (elm2)->field.le_next->field.le_prev = &(elm2)->field.le_next; \
+        (elm2)->field.le_prev = (elm)->field.le_prev;                      \
+        *(elm2)->field.le_prev = (elm2);                                   \
+        _Q_INVALIDATE((elm)->field.le_prev);                               \
+        _Q_INVALIDATE((elm)->field.le_next);                               \
+    } while (0)
 
 /*
  * Simple queue definitions.
  */
-#define SIMPLEQ_HEAD(name, type)                                       \
-struct name {                                                          \
-       struct type *sqh_first; /* first element */                     \
-       struct type **sqh_last; /* addr of last next element */         \
-}
+#define SIMPLEQ_HEAD(name, type)                                \
+    struct name {                                               \
+        struct type *sqh_first; /* first element */             \
+        struct type **sqh_last; /* addr of last next element */ \
+    }
 
-#define SIMPLEQ_HEAD_INITIALIZER(head)                                 \
-       { NULL, &(head).sqh_first }
+#define SIMPLEQ_HEAD_INITIALIZER(head) \
+    { NULL, &(head).sqh_first }
 
-#define SIMPLEQ_ENTRY(type)                                            \
-struct {                                                               \
-       struct type *sqe_next;  /* next element */                      \
-}
+#define SIMPLEQ_ENTRY(type)                       \
+    struct {                                      \
+        struct type *sqe_next; /* next element */ \
+    }
 
 /*
  * Simple queue access methods.
  */
-#define        SIMPLEQ_FIRST(head)         ((head)->sqh_first)
-#define        SIMPLEQ_END(head)           NULL
-#define        SIMPLEQ_EMPTY(head)         (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head))
-#define        SIMPLEQ_NEXT(elm, field)    ((elm)->field.sqe_next)
+#define SIMPLEQ_FIRST(head) ((head)->sqh_first)
+#define SIMPLEQ_END(head) NULL
+#define SIMPLEQ_EMPTY(head) (SIMPLEQ_FIRST(head) == SIMPLEQ_END(head))
+#define SIMPLEQ_NEXT(elm, field) ((elm)->field.sqe_next)
 
-#define SIMPLEQ_FOREACH(var, head, field)                              \
-       for((var) = SIMPLEQ_FIRST(head);                                \
-           (var) != SIMPLEQ_END(head);                                 \
-           (var) = SIMPLEQ_NEXT(var, field))
+#define SIMPLEQ_FOREACH(var, head, field) \
+    for ((var) = SIMPLEQ_FIRST(head);     \
+         (var) != SIMPLEQ_END(head);      \
+         (var) = SIMPLEQ_NEXT(var, field))
 
 /*
  * Simple queue functions.
  */
-#define        SIMPLEQ_INIT(head) do {                                         \
-       (head)->sqh_first = NULL;                                       \
-       (head)->sqh_last = &(head)->sqh_first;                          \
-} while (0)
-
-#define SIMPLEQ_INSERT_HEAD(head, elm, field) do {                     \
-       if (((elm)->field.sqe_next = (head)->sqh_first) == NULL)        \
-               (head)->sqh_last = &(elm)->field.sqe_next;              \
-       (head)->sqh_first = (elm);                                      \
-} while (0)
-
-#define SIMPLEQ_INSERT_TAIL(head, elm, field) do {                     \
-       (elm)->field.sqe_next = NULL;                                   \
-       *(head)->sqh_last = (elm);                                      \
-       (head)->sqh_last = &(elm)->field.sqe_next;                      \
-} while (0)
-
-#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field) do {           \
-       if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL)\
-               (head)->sqh_last = &(elm)->field.sqe_next;              \
-       (listelm)->field.sqe_next = (elm);                              \
-} while (0)
-
-#define SIMPLEQ_REMOVE_HEAD(head, field) do {                  \
-       if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \
-               (head)->sqh_last = &(head)->sqh_first;                  \
-} while (0)
+#define SIMPLEQ_INIT(head)                     \
+    do {                                       \
+        (head)->sqh_first = NULL;              \
+        (head)->sqh_last = &(head)->sqh_first; \
+    } while (0)
+
+#define SIMPLEQ_INSERT_HEAD(head, elm, field)                    \
+    do {                                                         \
+        if (((elm)->field.sqe_next = (head)->sqh_first) == NULL) \
+            (head)->sqh_last = &(elm)->field.sqe_next;           \
+        (head)->sqh_first = (elm);                               \
+    } while (0)
+
+#define SIMPLEQ_INSERT_TAIL(head, elm, field)      \
+    do {                                           \
+        (elm)->field.sqe_next = NULL;              \
+        *(head)->sqh_last = (elm);                 \
+        (head)->sqh_last = &(elm)->field.sqe_next; \
+    } while (0)
+
+#define SIMPLEQ_INSERT_AFTER(head, listelm, elm, field)                  \
+    do {                                                                 \
+        if (((elm)->field.sqe_next = (listelm)->field.sqe_next) == NULL) \
+            (head)->sqh_last = &(elm)->field.sqe_next;                   \
+        (listelm)->field.sqe_next = (elm);                               \
+    } while (0)
+
+#define SIMPLEQ_REMOVE_HEAD(head, field)                                     \
+    do {                                                                     \
+        if (((head)->sqh_first = (head)->sqh_first->field.sqe_next) == NULL) \
+            (head)->sqh_last = &(head)->sqh_first;                           \
+    } while (0)
 
 /*
  * Tail queue definitions.
  */
-#define TAILQ_HEAD(name, type)                                         \
-struct name {                                                          \
-       struct type *tqh_first; /* first element */                     \
-       struct type **tqh_last; /* addr of last next element */         \
-}
+#define TAILQ_HEAD(name, type)                                  \
+    struct name {                                               \
+        struct type *tqh_first; /* first element */             \
+        struct type **tqh_last; /* addr of last next element */ \
+    }
 
-#define TAILQ_HEAD_INITIALIZER(head)                                   \
-       { NULL, &(head).tqh_first }
+#define TAILQ_HEAD_INITIALIZER(head) \
+    { NULL, &(head).tqh_first }
 
-#define TAILQ_ENTRY(type)                                              \
-struct {                                                               \
-       struct type *tqe_next;  /* next element */                      \
-       struct type **tqe_prev; /* address of previous next element */  \
-}
+#define TAILQ_ENTRY(type)                                              \
+    struct {                                                           \
+        struct type *tqe_next;  /* next element */                     \
+        struct type **tqe_prev; /* address of previous next element */ \
+    }
 
 /*
  * tail queue access methods
  */
-#define        TAILQ_FIRST(head)               ((head)->tqh_first)
-#define        TAILQ_END(head)                 NULL
-#define        TAILQ_NEXT(elm, field)          ((elm)->field.tqe_next)
-#define TAILQ_LAST(head, headname)                                     \
-       (*(((struct headname *)((head)->tqh_last))->tqh_last))
+#define TAILQ_FIRST(head) ((head)->tqh_first)
+#define TAILQ_END(head) NULL
+#define TAILQ_NEXT(elm, field) ((elm)->field.tqe_next)
+#define TAILQ_LAST(head, headname) \
+    (*(((struct headname *)((head)->tqh_last))->tqh_last))
 /* XXX */
-#define TAILQ_PREV(elm, headname, field)                               \
-       (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
-#define        TAILQ_EMPTY(head)                                               \
-       (TAILQ_FIRST(head) == TAILQ_END(head))
+#define TAILQ_PREV(elm, headname, field) \
+    (*(((struct headname *)((elm)->field.tqe_prev))->tqh_last))
+#define TAILQ_EMPTY(head) \
+    (TAILQ_FIRST(head) == TAILQ_END(head))
 
-#define TAILQ_FOREACH(var, head, field)                                        \
-       for((var) = TAILQ_FIRST(head);                                  \
-           (var) != TAILQ_END(head);                                   \
-           (var) = TAILQ_NEXT(var, field))
+#define TAILQ_FOREACH(var, head, field) \
+    for ((var) = TAILQ_FIRST(head);     \
+         (var) != TAILQ_END(head);      \
+         (var) = TAILQ_NEXT(var, field))
 
-#define TAILQ_FOREACH_REVERSE(var, head, headname, field)              \
-       for((var) = TAILQ_LAST(head, headname);                         \
-           (var) != TAILQ_END(head);                                   \
-           (var) = TAILQ_PREV(var, headname, field))
+#define TAILQ_FOREACH_REVERSE(var, head, headname, field) \
+    for ((var) = TAILQ_LAST(head, headname);              \
+         (var) != TAILQ_END(head);                        \
+         (var) = TAILQ_PREV(var, headname, field))
 
 /*
  * Tail queue functions.
  */
-#define        TAILQ_INIT(head) do {                                           \
-       (head)->tqh_first = NULL;                                       \
-       (head)->tqh_last = &(head)->tqh_first;                          \
-} while (0)
-
-#define TAILQ_INSERT_HEAD(head, elm, field) do {                       \
-       if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)        \
-               (head)->tqh_first->field.tqe_prev =                     \
-                   &(elm)->field.tqe_next;                             \
-       else                                                            \
-               (head)->tqh_last = &(elm)->field.tqe_next;              \
-       (head)->tqh_first = (elm);                                      \
-       (elm)->field.tqe_prev = &(head)->tqh_first;                     \
-} while (0)
-
-#define TAILQ_INSERT_TAIL(head, elm, field) do {                       \
-       (elm)->field.tqe_next = NULL;                                   \
-       (elm)->field.tqe_prev = (head)->tqh_last;                       \
-       *(head)->tqh_last = (elm);                                      \
-       (head)->tqh_last = &(elm)->field.tqe_next;                      \
-} while (0)
-
-#define TAILQ_INSERT_AFTER(head, listelm, elm, field) do {             \
-       if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)\
-               (elm)->field.tqe_next->field.tqe_prev =                 \
-                   &(elm)->field.tqe_next;                             \
-       else                                                            \
-               (head)->tqh_last = &(elm)->field.tqe_next;              \
-       (listelm)->field.tqe_next = (elm);                              \
-       (elm)->field.tqe_prev = &(listelm)->field.tqe_next;             \
-} while (0)
-
-#define        TAILQ_INSERT_BEFORE(listelm, elm, field) do {                   \
-       (elm)->field.tqe_prev = (listelm)->field.tqe_prev;              \
-       (elm)->field.tqe_next = (listelm);                              \
-       *(listelm)->field.tqe_prev = (elm);                             \
-       (listelm)->field.tqe_prev = &(elm)->field.tqe_next;             \
-} while (0)
-
-#define TAILQ_REMOVE(head, elm, field) do {                            \
-       if (((elm)->field.tqe_next) != NULL)                            \
-               (elm)->field.tqe_next->field.tqe_prev =                 \
-                   (elm)->field.tqe_prev;                              \
-       else                                                            \
-               (head)->tqh_last = (elm)->field.tqe_prev;               \
-       *(elm)->field.tqe_prev = (elm)->field.tqe_next;                 \
-       _Q_INVALIDATE((elm)->field.tqe_prev);                           \
-       _Q_INVALIDATE((elm)->field.tqe_next);                           \
-} while (0)
-
-#define TAILQ_REPLACE(head, elm, elm2, field) do {                     \
-       if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL)   \
-               (elm2)->field.tqe_next->field.tqe_prev =                \
-                   &(elm2)->field.tqe_next;                            \
-       else                                                            \
-               (head)->tqh_last = &(elm2)->field.tqe_next;             \
-       (elm2)->field.tqe_prev = (elm)->field.tqe_prev;                 \
-       *(elm2)->field.tqe_prev = (elm2);                               \
-       _Q_INVALIDATE((elm)->field.tqe_prev);                           \
-       _Q_INVALIDATE((elm)->field.tqe_next);                           \
-} while (0)
+#define TAILQ_INIT(head)                       \
+    do {                                       \
+        (head)->tqh_first = NULL;              \
+        (head)->tqh_last = &(head)->tqh_first; \
+    } while (0)
+
+#define TAILQ_INSERT_HEAD(head, elm, field)                             \
+    do {                                                                \
+        if (((elm)->field.tqe_next = (head)->tqh_first) != NULL)        \
+            (head)->tqh_first->field.tqe_prev = &(elm)->field.tqe_next; \
+        else                                                            \
+            (head)->tqh_last = &(elm)->field.tqe_next;                  \
+        (head)->tqh_first = (elm);                                      \
+        (elm)->field.tqe_prev = &(head)->tqh_first;                     \
+    } while (0)
+
+#define TAILQ_INSERT_TAIL(head, elm, field)        \
+    do {                                           \
+        (elm)->field.tqe_next = NULL;              \
+        (elm)->field.tqe_prev = (head)->tqh_last;  \
+        *(head)->tqh_last = (elm);                 \
+        (head)->tqh_last = &(elm)->field.tqe_next; \
+    } while (0)
+
+#define TAILQ_INSERT_AFTER(head, listelm, elm, field)                       \
+    do {                                                                    \
+        if (((elm)->field.tqe_next = (listelm)->field.tqe_next) != NULL)    \
+            (elm)->field.tqe_next->field.tqe_prev = &(elm)->field.tqe_next; \
+        else                                                                \
+            (head)->tqh_last = &(elm)->field.tqe_next;                      \
+        (listelm)->field.tqe_next = (elm);                                  \
+        (elm)->field.tqe_prev = &(listelm)->field.tqe_next;                 \
+    } while (0)
+
+#define TAILQ_INSERT_BEFORE(listelm, elm, field)            \
+    do {                                                    \
+        (elm)->field.tqe_prev = (listelm)->field.tqe_prev;  \
+        (elm)->field.tqe_next = (listelm);                  \
+        *(listelm)->field.tqe_prev = (elm);                 \
+        (listelm)->field.tqe_prev = &(elm)->field.tqe_next; \
+    } while (0)
+
+#define TAILQ_REMOVE(head, elm, field)                                     \
+    do {                                                                   \
+        if (((elm)->field.tqe_next) != NULL)                               \
+            (elm)->field.tqe_next->field.tqe_prev = (elm)->field.tqe_prev; \
+        else                                                               \
+            (head)->tqh_last = (elm)->field.tqe_prev;                      \
+        *(elm)->field.tqe_prev = (elm)->field.tqe_next;                    \
+        _Q_INVALIDATE((elm)->field.tqe_prev);                              \
+        _Q_INVALIDATE((elm)->field.tqe_next);                              \
+    } while (0)
+
+#define TAILQ_REPLACE(head, elm, elm2, field)                                 \
+    do {                                                                      \
+        if (((elm2)->field.tqe_next = (elm)->field.tqe_next) != NULL)         \
+            (elm2)->field.tqe_next->field.tqe_prev = &(elm2)->field.tqe_next; \
+        else                                                                  \
+            (head)->tqh_last = &(elm2)->field.tqe_next;                       \
+        (elm2)->field.tqe_prev = (elm)->field.tqe_prev;                       \
+        *(elm2)->field.tqe_prev = (elm2);                                     \
+        _Q_INVALIDATE((elm)->field.tqe_prev);                                 \
+        _Q_INVALIDATE((elm)->field.tqe_next);                                 \
+    } while (0)
 
 /*
  * Circular queue definitions.
  */
-#define CIRCLEQ_HEAD(name, type)                                       \
-struct name {                                                          \
-       struct type *cqh_first;         /* first element */             \
-       struct type *cqh_last;          /* last element */              \
-}
+#define CIRCLEQ_HEAD(name, type)                    \
+    struct name {                                   \
+        struct type *cqh_first; /* first element */ \
+        struct type *cqh_last;  /* last element */  \
+    }
 
-#define CIRCLEQ_HEAD_INITIALIZER(head)                                 \
-       { CIRCLEQ_END(&head), CIRCLEQ_END(&head) }
+#define CIRCLEQ_HEAD_INITIALIZER(head) \
+    { CIRCLEQ_END(&head), CIRCLEQ_END(&head) }
 
-#define CIRCLEQ_ENTRY(type)                                            \
-struct {                                                               \
-       struct type *cqe_next;          /* next element */              \
-       struct type *cqe_prev;          /* previous element */          \
-}
+#define CIRCLEQ_ENTRY(type)                           \
+    struct {                                          \
+        struct type *cqe_next; /* next element */     \
+        struct type *cqe_prev; /* previous element */ \
+    }
 
 /*
  * Circular queue access methods
  */
-#define        CIRCLEQ_FIRST(head)             ((head)->cqh_first)
-#define        CIRCLEQ_LAST(head)              ((head)->cqh_last)
-#define        CIRCLEQ_END(head)               ((void *)(head))
-#define        CIRCLEQ_NEXT(elm, field)        ((elm)->field.cqe_next)
-#define        CIRCLEQ_PREV(elm, field)        ((elm)->field.cqe_prev)
-#define        CIRCLEQ_EMPTY(head)                                             \
-       (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head))
-
-#define CIRCLEQ_FOREACH(var, head, field)                              \
-       for((var) = CIRCLEQ_FIRST(head);                                \
-           (var) != CIRCLEQ_END(head);                                 \
-           (var) = CIRCLEQ_NEXT(var, field))
-
-#define CIRCLEQ_FOREACH_REVERSE(var, head, field)                      \
-       for((var) = CIRCLEQ_LAST(head);                                 \
-           (var) != CIRCLEQ_END(head);                                 \
-           (var) = CIRCLEQ_PREV(var, field))
+#define CIRCLEQ_FIRST(head) ((head)->cqh_first)
+#define CIRCLEQ_LAST(head) ((head)->cqh_last)
+#define CIRCLEQ_END(head) ((void *)(head))
+#define CIRCLEQ_NEXT(elm, field) ((elm)->field.cqe_next)
+#define CIRCLEQ_PREV(elm, field) ((elm)->field.cqe_prev)
+#define CIRCLEQ_EMPTY(head) \
+    (CIRCLEQ_FIRST(head) == CIRCLEQ_END(head))
+
+#define CIRCLEQ_FOREACH(var, head, field) \
+    for ((var) = CIRCLEQ_FIRST(head);     \
+         (var) != CIRCLEQ_END(head);      \
+         (var) = CIRCLEQ_NEXT(var, field))
+
+#define CIRCLEQ_FOREACH_REVERSE(var, head, field) \
+    for ((var) = CIRCLEQ_LAST(head);              \
+         (var) != CIRCLEQ_END(head);              \
+         (var) = CIRCLEQ_PREV(var, field))
 
 /*
  * Circular queue functions.
  */
-#define        CIRCLEQ_INIT(head) do {                                         \
-       (head)->cqh_first = CIRCLEQ_END(head);                          \
-       (head)->cqh_last = CIRCLEQ_END(head);                           \
-} while (0)
-
-#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field) do {           \
-       (elm)->field.cqe_next = (listelm)->field.cqe_next;              \
-       (elm)->field.cqe_prev = (listelm);                              \
-       if ((listelm)->field.cqe_next == CIRCLEQ_END(head))             \
-               (head)->cqh_last = (elm);                               \
-       else                                                            \
-               (listelm)->field.cqe_next->field.cqe_prev = (elm);      \
-       (listelm)->field.cqe_next = (elm);                              \
-} while (0)
-
-#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field) do {          \
-       (elm)->field.cqe_next = (listelm);                              \
-       (elm)->field.cqe_prev = (listelm)->field.cqe_prev;              \
-       if ((listelm)->field.cqe_prev == CIRCLEQ_END(head))             \
-               (head)->cqh_first = (elm);                              \
-       else                                                            \
-               (listelm)->field.cqe_prev->field.cqe_next = (elm);      \
-       (listelm)->field.cqe_prev = (elm);                              \
-} while (0)
-
-#define CIRCLEQ_INSERT_HEAD(head, elm, field) do {                     \
-       (elm)->field.cqe_next = (head)->cqh_first;                      \
-       (elm)->field.cqe_prev = CIRCLEQ_END(head);                      \
-       if ((head)->cqh_last == CIRCLEQ_END(head))                      \
-               (head)->cqh_last = (elm);                               \
-       else                                                            \
-               (head)->cqh_first->field.cqe_prev = (elm);              \
-       (head)->cqh_first = (elm);                                      \
-} while (0)
-
-#define CIRCLEQ_INSERT_TAIL(head, elm, field) do {                     \
-       (elm)->field.cqe_next = CIRCLEQ_END(head);                      \
-       (elm)->field.cqe_prev = (head)->cqh_last;                       \
-       if ((head)->cqh_first == CIRCLEQ_END(head))                     \
-               (head)->cqh_first = (elm);                              \
-       else                                                            \
-               (head)->cqh_last->field.cqe_next = (elm);               \
-       (head)->cqh_last = (elm);                                       \
-} while (0)
-
-#define        CIRCLEQ_REMOVE(head, elm, field) do {                           \
-       if ((elm)->field.cqe_next == CIRCLEQ_END(head))                 \
-               (head)->cqh_last = (elm)->field.cqe_prev;               \
-       else                                                            \
-               (elm)->field.cqe_next->field.cqe_prev =                 \
-                   (elm)->field.cqe_prev;                              \
-       if ((elm)->field.cqe_prev == CIRCLEQ_END(head))                 \
-               (head)->cqh_first = (elm)->field.cqe_next;              \
-       else                                                            \
-               (elm)->field.cqe_prev->field.cqe_next =                 \
-                   (elm)->field.cqe_next;                              \
-       _Q_INVALIDATE((elm)->field.cqe_prev);                           \
-       _Q_INVALIDATE((elm)->field.cqe_next);                           \
-} while (0)
-
-#define CIRCLEQ_REPLACE(head, elm, elm2, field) do {                   \
-       if (((elm2)->field.cqe_next = (elm)->field.cqe_next) ==         \
-           CIRCLEQ_END(head))                                          \
-               (head)->cqh_last = (elm2);                              \
-       else                                                            \
-               (elm2)->field.cqe_next->field.cqe_prev = (elm2);        \
-       if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) ==         \
-           CIRCLEQ_END(head))                                          \
-               (head)->cqh_first = (elm2);                             \
-       else                                                            \
-               (elm2)->field.cqe_prev->field.cqe_next = (elm2);        \
-       _Q_INVALIDATE((elm)->field.cqe_prev);                           \
-       _Q_INVALIDATE((elm)->field.cqe_next);                           \
-} while (0)
-
-#endif /* !_SYS_QUEUE_H_ */
+#define CIRCLEQ_INIT(head)                     \
+    do {                                       \
+        (head)->cqh_first = CIRCLEQ_END(head); \
+        (head)->cqh_last = CIRCLEQ_END(head);  \
+    } while (0)
+
+#define CIRCLEQ_INSERT_AFTER(head, listelm, elm, field)        \
+    do {                                                       \
+        (elm)->field.cqe_next = (listelm)->field.cqe_next;     \
+        (elm)->field.cqe_prev = (listelm);                     \
+        if ((listelm)->field.cqe_next == CIRCLEQ_END(head))    \
+            (head)->cqh_last = (elm);                          \
+        else                                                   \
+            (listelm)->field.cqe_next->field.cqe_prev = (elm); \
+        (listelm)->field.cqe_next = (elm);                     \
+    } while (0)
+
+#define CIRCLEQ_INSERT_BEFORE(head, listelm, elm, field)       \
+    do {                                                       \
+        (elm)->field.cqe_next = (listelm);                     \
+        (elm)->field.cqe_prev = (listelm)->field.cqe_prev;     \
+        if ((listelm)->field.cqe_prev == CIRCLEQ_END(head))    \
+            (head)->cqh_first = (elm);                         \
+        else                                                   \
+            (listelm)->field.cqe_prev->field.cqe_next = (elm); \
+        (listelm)->field.cqe_prev = (elm);                     \
+    } while (0)
+
+#define CIRCLEQ_INSERT_HEAD(head, elm, field)          \
+    do {                                               \
+        (elm)->field.cqe_next = (head)->cqh_first;     \
+        (elm)->field.cqe_prev = CIRCLEQ_END(head);     \
+        if ((head)->cqh_last == CIRCLEQ_END(head))     \
+            (head)->cqh_last = (elm);                  \
+        else                                           \
+            (head)->cqh_first->field.cqe_prev = (elm); \
+        (head)->cqh_first = (elm);                     \
+    } while (0)
+
+#define CIRCLEQ_INSERT_TAIL(head, elm, field)         \
+    do {                                              \
+        (elm)->field.cqe_next = CIRCLEQ_END(head);    \
+        (elm)->field.cqe_prev = (head)->cqh_last;     \
+        if ((head)->cqh_first == CIRCLEQ_END(head))   \
+            (head)->cqh_first = (elm);                \
+        else                                          \
+            (head)->cqh_last->field.cqe_next = (elm); \
+        (head)->cqh_last = (elm);                     \
+    } while (0)
+
+#define CIRCLEQ_REMOVE(head, elm, field)                                   \
+    do {                                                                   \
+        if ((elm)->field.cqe_next == CIRCLEQ_END(head))                    \
+            (head)->cqh_last = (elm)->field.cqe_prev;                      \
+        else                                                               \
+            (elm)->field.cqe_next->field.cqe_prev = (elm)->field.cqe_prev; \
+        if ((elm)->field.cqe_prev == CIRCLEQ_END(head))                    \
+            (head)->cqh_first = (elm)->field.cqe_next;                     \
+        else                                                               \
+            (elm)->field.cqe_prev->field.cqe_next = (elm)->field.cqe_next; \
+        _Q_INVALIDATE((elm)->field.cqe_prev);                              \
+        _Q_INVALIDATE((elm)->field.cqe_next);                              \
+    } while (0)
+
+#define CIRCLEQ_REPLACE(head, elm, elm2, field)                                    \
+    do {                                                                           \
+        if (((elm2)->field.cqe_next = (elm)->field.cqe_next) == CIRCLEQ_END(head)) \
+            (head)->cqh_last = (elm2);                                             \
+        else                                                                       \
+            (elm2)->field.cqe_next->field.cqe_prev = (elm2);                       \
+        if (((elm2)->field.cqe_prev = (elm)->field.cqe_prev) == CIRCLEQ_END(head)) \
+            (head)->cqh_first = (elm2);                                            \
+        else                                                                       \
+            (elm2)->field.cqe_prev->field.cqe_next = (elm2);                       \
+        _Q_INVALIDATE((elm)->field.cqe_prev);                                      \
+        _Q_INVALIDATE((elm)->field.cqe_next);                                      \
+    } while (0)
+
+#endif /* !_SYS_QUEUE_H_ */
index c160027e1e8b98ef931668a2bcfa83d3d4b16a07..35cd4ff907e15f01bb0bb9566b042919c4d344a9 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <sys/stat.h>
 #include <stdlib.h>
 #include <ifaddrs.h>
@@ -6,34 +6,33 @@
 #include "i3status.h"
 
 const char *first_eth_interface(const net_type_t type) {
-        static char *interface = NULL;
-        struct ifaddrs *ifaddr, *addrp;
-        struct stat stbuf;
-        static char path[1024];
+    static char *interface = NULL;
+    struct ifaddrs *ifaddr, *addrp;
+    struct stat stbuf;
+    static char path[1024];
 
-        getifaddrs(&ifaddr);
+    getifaddrs(&ifaddr);
 
-        if (ifaddr == NULL)
-                return NULL;
+    if (ifaddr == NULL)
+        return NULL;
 
-        free(interface);
-        interface = NULL;
-        for (addrp = ifaddr;
-             addrp != NULL;
-             addrp = addrp->ifa_next) {
-                if (strncasecmp("lo", addrp->ifa_name, strlen("lo")) == 0)
-                        continue;
-                // Skip this interface if it is a wireless interface.
-                snprintf(path, sizeof(path), "/sys/class/net/%s/wireless", addrp->ifa_name);
-                const bool is_wireless = (stat(path, &stbuf) == 0);
-                if (( is_wireless && type == NET_TYPE_ETHERNET) ||
-                    (!is_wireless && type == NET_TYPE_WIRELESS))
-                        continue;
-                interface = strdup(addrp->ifa_name);
-                break;
-        }
+    free(interface);
+    interface = NULL;
+    for (addrp = ifaddr;
+         addrp != NULL;
+         addrp = addrp->ifa_next) {
+        if (strncasecmp("lo", addrp->ifa_name, strlen("lo")) == 0)
+            continue;
+        // Skip this interface if it is a wireless interface.
+        snprintf(path, sizeof(path), "/sys/class/net/%s/wireless", addrp->ifa_name);
+        const bool is_wireless = (stat(path, &stbuf) == 0);
+        if ((is_wireless && type == NET_TYPE_ETHERNET) ||
+            (!is_wireless && type == NET_TYPE_WIRELESS))
+            continue;
+        interface = strdup(addrp->ifa_name);
+        break;
+    }
 
-        freeifaddrs(ifaddr);
-        return interface;
+    freeifaddrs(ifaddr);
+    return interface;
 }
-
index c5b33b46f652142dbfad53fdd7a73463c217fd37..f299a2b807ea8e0772a88bf016c8c06c15eaaf70 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <sys/types.h>
 #include <string.h>
 #include <stdarg.h>
  *
  */
 bool slurp(const char *filename, char *destination, int size) {
-        int fd;
+    int fd;
 
-        if ((fd = open(filename, O_RDONLY)) == -1)
-                return false;
+    if ((fd = open(filename, O_RDONLY)) == -1)
+        return false;
 
-        /* We need one byte for the trailing 0 byte */
-        int n = read(fd, destination, size-1);
-        if (n != -1)
-                destination[n] = '\0';
-        (void)close(fd);
+    /* We need one byte for the trailing 0 byte */
+    int n = read(fd, destination, size - 1);
+    if (n != -1)
+        destination[n] = '\0';
+    (void)close(fd);
 
-        return true;
+    return true;
 }
 
 /*
@@ -35,15 +35,15 @@ bool slurp(const char *filename, char *destination, int size) {
  *
  */
 char *skip_character(char *input, char character, int amount) {
-        char *walk;
-        size_t len = strlen(input);
-        int blanks = 0;
+    char *walk;
+    size_t len = strlen(input);
+    int blanks = 0;
 
-        for (walk = input; ((size_t)(walk - input) < len) && (blanks < amount); walk++)
-                if (*walk == character)
-                        blanks++;
+    for (walk = input; ((size_t)(walk - input) < len) && (blanks < amount); walk++)
+        if (*walk == character)
+            blanks++;
 
-        return (walk == input ? walk : walk-1);
+    return (walk == input ? walk : walk - 1);
 }
 
 /*
@@ -51,12 +51,12 @@ char *skip_character(char *input, char character, int amount) {
  *
  */
 void die(const char *fmt, ...) {
-        char buffer[512];
-        va_list ap;
-        va_start(ap, fmt);
-        (void)vsnprintf(buffer, sizeof(buffer), fmt, ap);
-        va_end(ap);
-
-        fprintf(stderr, "%s", buffer);
-        exit(EXIT_FAILURE);
+    char buffer[512];
+    va_list ap;
+    va_start(ap, fmt);
+    (void)vsnprintf(buffer, sizeof(buffer), fmt, ap);
+    va_end(ap);
+
+    fprintf(stderr, "%s", buffer);
+    exit(EXIT_FAILURE);
 }
index 3a43d582e4599d55444079077b98baf9082abfd4..b2fb1dd758f05a9b9265771305b577b00b6593eb 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <stdbool.h>
 #include <string.h>
 #include <stdio.h>
  *
  */
 char *color(const char *colorstr) {
-        static char colorbuf[32];
-        if (!cfg_getbool(cfg_general, "colors")) {
-                colorbuf[0] = '\0';
-                return colorbuf;
-        }
-        if (output_format == O_DZEN2)
-                (void)snprintf(colorbuf, sizeof(colorbuf), "^fg(%s)", cfg_getstr(cfg_general, colorstr));
-        else if (output_format == O_XMOBAR)
-                (void)snprintf(colorbuf, sizeof(colorbuf), "<fc=%s>", cfg_getstr(cfg_general, colorstr));
-        else if (output_format == O_TERM) {
-                /* The escape-sequence for color is <CSI><col>;1m (bright/bold
-                 * output), where col is a 3-bit rgb-value with b in the
-                 * least-significant bit. We round the given color to the
-                 * nearist 3-bit-depth color and output the escape-sequence */
-                char *str = cfg_getstr(cfg_general, colorstr);
-                int col = strtol(str + 1, NULL, 16);
-                int r = (col & (0xFF << 0)) / 0x80;
-                int g = (col & (0xFF << 8)) / 0x8000;
-                int b = (col & (0xFF << 16)) / 0x800000;
-                col = (r << 2) | (g << 1) | b;
-                (void)snprintf(colorbuf, sizeof(colorbuf), "\033[3%d;1m", col);
-        }
+    static char colorbuf[32];
+    if (!cfg_getbool(cfg_general, "colors")) {
+        colorbuf[0] = '\0';
         return colorbuf;
+    }
+    if (output_format == O_DZEN2)
+        (void)snprintf(colorbuf, sizeof(colorbuf), "^fg(%s)", cfg_getstr(cfg_general, colorstr));
+    else if (output_format == O_XMOBAR)
+        (void)snprintf(colorbuf, sizeof(colorbuf), "<fc=%s>", cfg_getstr(cfg_general, colorstr));
+    else if (output_format == O_TERM) {
+        /* The escape-sequence for color is <CSI><col>;1m (bright/bold
+         * output), where col is a 3-bit rgb-value with b in the
+         * least-significant bit. We round the given color to the
+         * nearist 3-bit-depth color and output the escape-sequence */
+        char *str = cfg_getstr(cfg_general, colorstr);
+        int col = strtol(str + 1, NULL, 16);
+        int r = (col & (0xFF << 0)) / 0x80;
+        int g = (col & (0xFF << 8)) / 0x8000;
+        int b = (col & (0xFF << 16)) / 0x800000;
+        col = (r << 2) | (g << 1) | b;
+        (void)snprintf(colorbuf, sizeof(colorbuf), "\033[3%d;1m", col);
+    }
+    return colorbuf;
 }
 
 /*
@@ -45,30 +45,31 @@ char *color(const char *colorstr) {
  *
  */
 char *endcolor(void) {
-        if (output_format == O_XMOBAR)
-                return "</fc>";
-        else if (output_format == O_TERM)
-                return "\033[0m";
-        else return "";
+    if (output_format == O_XMOBAR)
+        return "</fc>";
+    else if (output_format == O_TERM)
+        return "\033[0m";
+    else
+        return "";
 }
 
 void print_separator(const char *separator) {
-        if (output_format == O_I3BAR || strlen(separator) == 0)
-                return;
+    if (output_format == O_I3BAR || strlen(separator) == 0)
+        return;
 
-        if (output_format == O_DZEN2)
-                printf("^fg(%s)%s^fg()", cfg_getstr(cfg_general, "color_separator"), separator);
-        else if (output_format == O_XMOBAR)
-                printf("<fc=%s>%s</fc>", cfg_getstr(cfg_general, "color_separator"), separator);
-        else if (output_format == O_TERM)
-                printf("%s%s%s", color("color_separator"), separator, endcolor());
-        else if (output_format == O_NONE)
-                printf("%s", separator);
+    if (output_format == O_DZEN2)
+        printf("^fg(%s)%s^fg()", cfg_getstr(cfg_general, "color_separator"), separator);
+    else if (output_format == O_XMOBAR)
+        printf("<fc=%s>%s</fc>", cfg_getstr(cfg_general, "color_separator"), separator);
+    else if (output_format == O_TERM)
+        printf("%s%s%s", color("color_separator"), separator, endcolor());
+    else if (output_format == O_NONE)
+        printf("%s", separator);
 }
 
 /*
  * The term-output hides the cursor. We call this on exit to reset that.
  */
 void reset_cursor(void) {
-        printf("\033[?25h");
+    printf("\033[?25h");
 }
index 0df9b729be8e01039c2c060d3210cfa43672bd83..1126f5712fe03586b3ccdccb18d51d9493228061 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <ctype.h>
 #include <time.h>
 #include <string.h>
  *
  */
 void print_battery_info(yajl_gen json_gen, char *buffer, int number, const char *path, const char *format, const char *format_down, const char *status_chr, const char *status_bat, const char *status_full, int low_threshold, char *threshold_type, bool last_full_capacity, bool integer_battery_capacity, bool hide_seconds) {
-        time_t empty_time;
-        struct tm *empty_tm;
-        char buf[1024];
-        char statusbuf[16];
-        char percentagebuf[16];
-        char remainingbuf[256];
-        char emptytimebuf[256];
-        char consumptionbuf[256];
-        const char *walk, *last;
-        char *outwalk = buffer;
-        bool watt_as_unit = false;
-        bool colorful_output = false;
-        int full_design = -1,
-            remaining = -1,
-            present_rate = -1,
-            voltage = -1;
-        charging_status_t status = CS_DISCHARGING;
-
-        memset(statusbuf, '\0', sizeof(statusbuf));
-        memset(percentagebuf, '\0', sizeof(percentagebuf));
-        memset(remainingbuf, '\0', sizeof(remainingbuf));
-        memset(emptytimebuf, '\0', sizeof(emptytimebuf));
-        memset(consumptionbuf, '\0', sizeof(consumptionbuf));
-
-        static char batpath[512];
-        sprintf(batpath, path, number);
-        INSTANCE(batpath);
+    time_t empty_time;
+    struct tm *empty_tm;
+    char buf[1024];
+    char statusbuf[16];
+    char percentagebuf[16];
+    char remainingbuf[256];
+    char emptytimebuf[256];
+    char consumptionbuf[256];
+    const char *walk, *last;
+    char *outwalk = buffer;
+    bool watt_as_unit = false;
+    bool colorful_output = false;
+    int full_design = -1,
+        remaining = -1,
+        present_rate = -1,
+        voltage = -1;
+    charging_status_t status = CS_DISCHARGING;
+
+    memset(statusbuf, '\0', sizeof(statusbuf));
+    memset(percentagebuf, '\0', sizeof(percentagebuf));
+    memset(remainingbuf, '\0', sizeof(remainingbuf));
+    memset(emptytimebuf, '\0', sizeof(emptytimebuf));
+    memset(consumptionbuf, '\0', sizeof(consumptionbuf));
+
+    static char batpath[512];
+    sprintf(batpath, path, number);
+    INSTANCE(batpath);
 
 #define BATT_STATUS_NAME(status) \
-    (status == CS_CHARGING ? status_chr : \
-        (status == CS_DISCHARGING ? status_bat : status_full))
+    (status == CS_CHARGING ? status_chr : (status == CS_DISCHARGING ? status_bat : status_full))
 
 #if defined(LINUX)
-        if (!slurp(batpath, buf, sizeof(buf))) {
-                OUTPUT_FULL_TEXT(format_down);
-                return;
+    if (!slurp(batpath, buf, sizeof(buf))) {
+        OUTPUT_FULL_TEXT(format_down);
+        return;
+    }
+
+    for (walk = buf, last = buf; (walk - buf) < 1024; walk++) {
+        if (*walk == '\n') {
+            last = walk + 1;
+            continue;
         }
 
-        for (walk = buf, last = buf; (walk-buf) < 1024; walk++) {
-                if (*walk == '\n') {
-                        last = walk+1;
-                        continue;
-                }
-
-                if (*walk != '=')
-                        continue;
-
-                if (BEGINS_WITH(last, "POWER_SUPPLY_ENERGY_NOW")) {
-                        watt_as_unit = true;
-                        remaining = atoi(walk+1);
-                }
-                else if (BEGINS_WITH(last, "POWER_SUPPLY_CHARGE_NOW")) {
-                        watt_as_unit = false;
-                        remaining = atoi(walk+1);
-                }
-                else if (BEGINS_WITH(last, "POWER_SUPPLY_CURRENT_NOW"))
-                        present_rate = abs(atoi(walk+1));
-                else if (BEGINS_WITH(last, "POWER_SUPPLY_VOLTAGE_NOW"))
-                        voltage = abs(atoi(walk+1));
-                /* on some systems POWER_SUPPLY_POWER_NOW does not exist, but actually
-                 * it is the same as POWER_SUPPLY_CURRENT_NOW but with μWh as
-                 * unit instead of μAh. We will calculate it as we need it
-                 * later. */
-                else if (BEGINS_WITH(last, "POWER_SUPPLY_POWER_NOW"))
-                        present_rate = abs(atoi(walk+1));
-                else if (BEGINS_WITH(last, "POWER_SUPPLY_STATUS=Charging"))
-                        status = CS_CHARGING;
-                else if (BEGINS_WITH(last, "POWER_SUPPLY_STATUS=Full"))
-                        status = CS_FULL;
-                else {
-                        /* The only thing left is the full capacity */
-                        if (last_full_capacity) {
-                                if (!BEGINS_WITH(last, "POWER_SUPPLY_ENERGY_FULL") &&
-                                    !BEGINS_WITH(last, "POWER_SUPPLY_CHARGE_FULL"))
-                                        continue;
-                        } else {
-                                if (!BEGINS_WITH(last, "POWER_SUPPLY_CHARGE_FULL_DESIGN") &&
-                                    !BEGINS_WITH(last, "POWER_SUPPLY_ENERGY_FULL_DESIGN"))
-                                        continue;
-                        }
-
-                        full_design = atoi(walk+1);
-                }
-        }
-
-        /* the difference between POWER_SUPPLY_ENERGY_NOW and
-         * POWER_SUPPLY_CHARGE_NOW is the unit of measurement. The energy is
-         * given in mWh, the charge in mAh. So calculate every value given in
-         * ampere to watt */
-        if (!watt_as_unit) {
-            present_rate = (((float)voltage / 1000.0) * ((float)present_rate / 1000.0));
-
-            if (voltage != -1) {
-                remaining = (((float)voltage / 1000.0) * ((float)remaining / 1000.0));
-                full_design = (((float)voltage / 1000.0) * ((float)full_design / 1000.0));
+        if (*walk != '=')
+            continue;
+
+        if (BEGINS_WITH(last, "POWER_SUPPLY_ENERGY_NOW")) {
+            watt_as_unit = true;
+            remaining = atoi(walk + 1);
+        } else if (BEGINS_WITH(last, "POWER_SUPPLY_CHARGE_NOW")) {
+            watt_as_unit = false;
+            remaining = atoi(walk + 1);
+        } else if (BEGINS_WITH(last, "POWER_SUPPLY_CURRENT_NOW"))
+            present_rate = abs(atoi(walk + 1));
+        else if (BEGINS_WITH(last, "POWER_SUPPLY_VOLTAGE_NOW"))
+            voltage = abs(atoi(walk + 1));
+        /* on some systems POWER_SUPPLY_POWER_NOW does not exist, but actually
+         * it is the same as POWER_SUPPLY_CURRENT_NOW but with μWh as
+         * unit instead of μAh. We will calculate it as we need it
+         * later. */
+        else if (BEGINS_WITH(last, "POWER_SUPPLY_POWER_NOW"))
+            present_rate = abs(atoi(walk + 1));
+        else if (BEGINS_WITH(last, "POWER_SUPPLY_STATUS=Charging"))
+            status = CS_CHARGING;
+        else if (BEGINS_WITH(last, "POWER_SUPPLY_STATUS=Full"))
+            status = CS_FULL;
+        else {
+            /* The only thing left is the full capacity */
+            if (last_full_capacity) {
+                if (!BEGINS_WITH(last, "POWER_SUPPLY_ENERGY_FULL") &&
+                    !BEGINS_WITH(last, "POWER_SUPPLY_CHARGE_FULL"))
+                    continue;
+            } else {
+                if (!BEGINS_WITH(last, "POWER_SUPPLY_CHARGE_FULL_DESIGN") &&
+                    !BEGINS_WITH(last, "POWER_SUPPLY_ENERGY_FULL_DESIGN"))
+                    continue;
             }
-        }
 
-        if ((full_design == -1) || (remaining == -1)) {
-                OUTPUT_FULL_TEXT(format_down);
-                return;
+            full_design = atoi(walk + 1);
         }
-
-        (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
-
-        float percentage_remaining = (((float)remaining / (float)full_design) * 100);
-        if (integer_battery_capacity) {
-                (void)snprintf(percentagebuf, sizeof(percentagebuf), "%.00f%%", percentage_remaining);
-        } else {
-                (void)snprintf(percentagebuf, sizeof(percentagebuf), "%.02f%%", percentage_remaining);
+    }
+
+    /* the difference between POWER_SUPPLY_ENERGY_NOW and
+     * POWER_SUPPLY_CHARGE_NOW is the unit of measurement. The energy is
+     * given in mWh, the charge in mAh. So calculate every value given in
+     * ampere to watt */
+    if (!watt_as_unit) {
+        present_rate = (((float)voltage / 1000.0) * ((float)present_rate / 1000.0));
+
+        if (voltage != -1) {
+            remaining = (((float)voltage / 1000.0) * ((float)remaining / 1000.0));
+            full_design = (((float)voltage / 1000.0) * ((float)full_design / 1000.0));
         }
+    }
 
-        if (present_rate > 0) {
-                float remaining_time;
-                int seconds, hours, minutes, seconds_remaining;
-                if (status == CS_CHARGING)
-                        remaining_time = ((float)full_design - (float)remaining) / (float)present_rate;
-                else if (status == CS_DISCHARGING)
-                        remaining_time = ((float)remaining / (float)present_rate);
-                else remaining_time = 0;
-
-                seconds_remaining = (int)(remaining_time * 3600.0);
-
-                hours = seconds_remaining / 3600;
-                seconds = seconds_remaining - (hours * 3600);
-                minutes = seconds / 60;
-                seconds -= (minutes * 60);
-
-                if (status == CS_DISCHARGING && low_threshold > 0) {
-                        if (strcasecmp(threshold_type, "percentage") == 0
-                                && percentage_remaining < low_threshold) {
-                                START_COLOR("color_bad");
-                                colorful_output = true;
-                        } else if (strcasecmp(threshold_type, "time") == 0
-                                && seconds_remaining < 60 * low_threshold) {
-                                START_COLOR("color_bad");
-                                colorful_output = true;
-                        } else {
-                            colorful_output = false;
-                        }
-                }
-
-                if (hide_seconds)
-                        (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d",
-                                max(hours, 0), max(minutes, 0));
-                else
-                        (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d:%02d",
-                                max(hours, 0), max(minutes, 0), max(seconds, 0));
+    if ((full_design == -1) || (remaining == -1)) {
+        OUTPUT_FULL_TEXT(format_down);
+        return;
+    }
 
-                empty_time = time(NULL);
-                empty_time += seconds_remaining;
-                empty_tm = localtime(&empty_time);
+    (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
 
-                if (hide_seconds)
-                        (void)snprintf(emptytimebuf, sizeof(emptytimebuf), "%02d:%02d",
-                                max(empty_tm->tm_hour, 0), max(empty_tm->tm_min, 0));
-                else
-                        (void)snprintf(emptytimebuf, sizeof(emptytimebuf), "%02d:%02d:%02d",
-                                max(empty_tm->tm_hour, 0), max(empty_tm->tm_min, 0), max(empty_tm->tm_sec, 0));
-
-                (void)snprintf(consumptionbuf, sizeof(consumptionbuf), "%1.2fW",
-                        ((float)present_rate / 1000.0 / 1000.0));
-        } else {
-                /* On some systems, present_rate may not exist. Still, make sure
-                 * we colorize the output if threshold_type is set to percentage
-                 * (since we don't have any information on remaining time). */
-                if (status == CS_DISCHARGING && low_threshold > 0) {
-                        if (strcasecmp(threshold_type, "percentage") == 0
-                                && percentage_remaining < low_threshold) {
-                                START_COLOR("color_bad");
-                                colorful_output = true;
-                        }
-                }
-        }
-#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
-        int state;
-        int sysctl_rslt;
-        size_t sysctl_size = sizeof(sysctl_rslt);
+    float percentage_remaining = (((float)remaining / (float)full_design) * 100);
+    if (integer_battery_capacity) {
+        (void)snprintf(percentagebuf, sizeof(percentagebuf), "%.00f%%", percentage_remaining);
+    } else {
+        (void)snprintf(percentagebuf, sizeof(percentagebuf), "%.02f%%", percentage_remaining);
+    }
 
-        if (sysctlbyname(BATT_LIFE, &sysctl_rslt, &sysctl_size, NULL, 0) != 0) {
-                OUTPUT_FULL_TEXT(format_down);
-                return;
-        }
+    if (present_rate > 0) {
+        float remaining_time;
+        int seconds, hours, minutes, seconds_remaining;
+        if (status == CS_CHARGING)
+            remaining_time = ((float)full_design - (float)remaining) / (float)present_rate;
+        else if (status == CS_DISCHARGING)
+            remaining_time = ((float)remaining / (float)present_rate);
+        else
+            remaining_time = 0;
 
-        present_rate = sysctl_rslt;
-        if (sysctlbyname(BATT_TIME, &sysctl_rslt, &sysctl_size, NULL, 0) != 0) {
-                OUTPUT_FULL_TEXT(format_down);
-                return;
-        }
+        seconds_remaining = (int)(remaining_time * 3600.0);
 
-        remaining = sysctl_rslt;
-        if (sysctlbyname(BATT_STATE, &sysctl_rslt, &sysctl_size, NULL,0) != 0) {
-                OUTPUT_FULL_TEXT(format_down);
-                return;
+        hours = seconds_remaining / 3600;
+        seconds = seconds_remaining - (hours * 3600);
+        minutes = seconds / 60;
+        seconds -= (minutes * 60);
+
+        if (status == CS_DISCHARGING && low_threshold > 0) {
+            if (strcasecmp(threshold_type, "percentage") == 0 && percentage_remaining < low_threshold) {
+                START_COLOR("color_bad");
+                colorful_output = true;
+            } else if (strcasecmp(threshold_type, "time") == 0 && seconds_remaining < 60 * low_threshold) {
+                START_COLOR("color_bad");
+                colorful_output = true;
+            } else {
+                colorful_output = false;
+            }
         }
 
-        state = sysctl_rslt;
-        if (state == 0 && present_rate == 100)
-                status = CS_FULL;
-        else if (state == 0 && present_rate < 100)
-                status = CS_CHARGING;
+        if (hide_seconds)
+            (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d",
+                           max(hours, 0), max(minutes, 0));
         else
-                status = CS_DISCHARGING;
+            (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d:%02d",
+                           max(hours, 0), max(minutes, 0), max(seconds, 0));
 
-        full_design = sysctl_rslt;
+        empty_time = time(NULL);
+        empty_time += seconds_remaining;
+        empty_tm = localtime(&empty_time);
 
-        (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
+        if (hide_seconds)
+            (void)snprintf(emptytimebuf, sizeof(emptytimebuf), "%02d:%02d",
+                           max(empty_tm->tm_hour, 0), max(empty_tm->tm_min, 0));
+        else
+            (void)snprintf(emptytimebuf, sizeof(emptytimebuf), "%02d:%02d:%02d",
+                           max(empty_tm->tm_hour, 0), max(empty_tm->tm_min, 0), max(empty_tm->tm_sec, 0));
 
-        (void)snprintf(percentagebuf, sizeof(percentagebuf), "%02d%%",
-                       present_rate);
-
-        if (state == 1) {
-                int hours, minutes;
-                minutes = remaining;
-                hours = minutes / 60;
-                minutes -= (hours * 60);
-                (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02dh%02d",
-                               max(hours, 0), max(minutes, 0));
-               if (strcasecmp(threshold_type, "percentage") == 0
-                   && present_rate < low_threshold) {
-                       START_COLOR("color_bad");
-                       colorful_output = true;
-               } else if (strcasecmp(threshold_type, "time") == 0
-                          && remaining < (u_int) low_threshold) {
-                       START_COLOR("color_bad");
-                       colorful_output = true;
-               }
+        (void)snprintf(consumptionbuf, sizeof(consumptionbuf), "%1.2fW",
+                       ((float)present_rate / 1000.0 / 1000.0));
+    } else {
+        /* On some systems, present_rate may not exist. Still, make sure
+         * we colorize the output if threshold_type is set to percentage
+         * (since we don't have any information on remaining time). */
+        if (status == CS_DISCHARGING && low_threshold > 0) {
+            if (strcasecmp(threshold_type, "percentage") == 0 && percentage_remaining < low_threshold) {
+                START_COLOR("color_bad");
+                colorful_output = true;
+            }
+        }
+    }
+#elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
+    int state;
+    int sysctl_rslt;
+    size_t sysctl_size = sizeof(sysctl_rslt);
+
+    if (sysctlbyname(BATT_LIFE, &sysctl_rslt, &sysctl_size, NULL, 0) != 0) {
+        OUTPUT_FULL_TEXT(format_down);
+        return;
+    }
+
+    present_rate = sysctl_rslt;
+    if (sysctlbyname(BATT_TIME, &sysctl_rslt, &sysctl_size, NULL, 0) != 0) {
+        OUTPUT_FULL_TEXT(format_down);
+        return;
+    }
+
+    remaining = sysctl_rslt;
+    if (sysctlbyname(BATT_STATE, &sysctl_rslt, &sysctl_size, NULL, 0) != 0) {
+        OUTPUT_FULL_TEXT(format_down);
+        return;
+    }
+
+    state = sysctl_rslt;
+    if (state == 0 && present_rate == 100)
+        status = CS_FULL;
+    else if (state == 0 && present_rate < 100)
+        status = CS_CHARGING;
+    else
+        status = CS_DISCHARGING;
+
+    full_design = sysctl_rslt;
+
+    (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
+
+    (void)snprintf(percentagebuf, sizeof(percentagebuf), "%02d%%",
+                   present_rate);
+
+    if (state == 1) {
+        int hours, minutes;
+        minutes = remaining;
+        hours = minutes / 60;
+        minutes -= (hours * 60);
+        (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02dh%02d",
+                       max(hours, 0), max(minutes, 0));
+        if (strcasecmp(threshold_type, "percentage") == 0 && present_rate < low_threshold) {
+            START_COLOR("color_bad");
+            colorful_output = true;
+        } else if (strcasecmp(threshold_type, "time") == 0 && remaining < (u_int)low_threshold) {
+            START_COLOR("color_bad");
+            colorful_output = true;
         }
+    }
 #elif defined(__OpenBSD__)
-       /*
+    /*
         * We're using apm(4) here, which is the interface to acpi(4) on amd64/i386 and
         * the generic interface on macppc/sparc64/zaurus, instead of using sysctl(3) and
         * probing acpi(4) devices.
         */
-       struct apm_power_info apm_info;
-       int apm_fd;
-
-       apm_fd = open("/dev/apm", O_RDONLY);
-       if (apm_fd < 0) {
-               OUTPUT_FULL_TEXT("can't open /dev/apm");
-               return;
-       }
-       if (ioctl(apm_fd, APM_IOC_GETPOWER, &apm_info) < 0)
-               OUTPUT_FULL_TEXT("can't read power info");
-
-       close(apm_fd);
-
-       /* Don't bother to go further if there's no battery present. */
-       if ((apm_info.battery_state == APM_BATTERY_ABSENT) ||
-           (apm_info.battery_state == APM_BATT_UNKNOWN)) {
-               OUTPUT_FULL_TEXT(format_down);
-               return;
-       }
-
-       switch(apm_info.ac_state) {
-       case APM_AC_OFF:
-               status = CS_DISCHARGING;
-               break;
-       case APM_AC_ON:
-               status = CS_CHARGING;
-               break;
-       default:
-               /* If we don't know what's going on, just assume we're discharging. */
-               status = CS_DISCHARGING;
-               break;
-       }
-
-       (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
-       /* integer_battery_capacity is implied as battery_life is already in whole numbers. */
-       (void)snprintf(percentagebuf, sizeof(percentagebuf), "%.00d%%", apm_info.battery_life);
-
-       if (status == CS_DISCHARGING && low_threshold > 0) {
-               if (strcasecmp(threshold_type, "percentage") == 0
-                   && apm_info.battery_life < low_threshold) {
-                       START_COLOR("color_bad");
-                       colorful_output = true;
-               } else if (strcasecmp(threshold_type, "time") == 0
-                          && apm_info.minutes_left < (u_int) low_threshold) {
-                       START_COLOR("color_bad");
-                       colorful_output = true;
-               }
-       }
-
-       /* Can't give a meaningful value for remaining minutes if we're charging. */
-       if (status != CS_CHARGING) {
-               (void)snprintf(remainingbuf, sizeof(remainingbuf), "%d", apm_info.minutes_left);
-       } else {
-               (void)snprintf(remainingbuf, sizeof(remainingbuf), "%s", "(CHR)");
-       }
-
-       if (colorful_output)
-               END_COLOR;
-#elif defined(__NetBSD__)
-        /*
-         * Using envsys(4) via sysmon(4).
-         */
-        int fd, rval, last_full_cap;
-        bool is_found = false;
-        char *sensor_desc;
-        bool is_full = false;
-
-        prop_dictionary_t dict;
-        prop_array_t array;
-        prop_object_iterator_t iter;
-        prop_object_iterator_t iter2;
-        prop_object_t obj, obj2, obj3, obj4, obj5;
-
-        asprintf(&sensor_desc, "acpibat%d", number);
-
-        fd = open("/dev/sysmon", O_RDONLY);
-        if (fd < 0) {
-                OUTPUT_FULL_TEXT("can't open /dev/sysmon");
-                return;
-        }
-
-        rval = prop_dictionary_recv_ioctl(fd, ENVSYS_GETDICTIONARY, &dict);
-        if (rval == -1) {
-                close(fd);
-                return;
+    struct apm_power_info apm_info;
+    int apm_fd;
+
+    apm_fd = open("/dev/apm", O_RDONLY);
+    if (apm_fd < 0) {
+        OUTPUT_FULL_TEXT("can't open /dev/apm");
+        return;
+    }
+    if (ioctl(apm_fd, APM_IOC_GETPOWER, &apm_info) < 0)
+        OUTPUT_FULL_TEXT("can't read power info");
+
+    close(apm_fd);
+
+    /* Don't bother to go further if there's no battery present. */
+    if ((apm_info.battery_state == APM_BATTERY_ABSENT) ||
+        (apm_info.battery_state == APM_BATT_UNKNOWN)) {
+        OUTPUT_FULL_TEXT(format_down);
+        return;
+    }
+
+    switch (apm_info.ac_state) {
+        case APM_AC_OFF:
+            status = CS_DISCHARGING;
+            break;
+        case APM_AC_ON:
+            status = CS_CHARGING;
+            break;
+        default:
+            /* If we don't know what's going on, just assume we're discharging. */
+            status = CS_DISCHARGING;
+            break;
+    }
+
+    (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
+    /* integer_battery_capacity is implied as battery_life is already in whole numbers. */
+    (void)snprintf(percentagebuf, sizeof(percentagebuf), "%.00d%%", apm_info.battery_life);
+
+    if (status == CS_DISCHARGING && low_threshold > 0) {
+        if (strcasecmp(threshold_type, "percentage") == 0 && apm_info.battery_life < low_threshold) {
+            START_COLOR("color_bad");
+            colorful_output = true;
+        } else if (strcasecmp(threshold_type, "time") == 0 && apm_info.minutes_left < (u_int)low_threshold) {
+            START_COLOR("color_bad");
+            colorful_output = true;
         }
+    }
 
-        if (prop_dictionary_count(dict) == 0) {
-                prop_object_release(dict);
-                close(fd);
-                return;
-        }
+    /* Can't give a meaningful value for remaining minutes if we're charging. */
+    if (status != CS_CHARGING) {
+        (void)snprintf(remainingbuf, sizeof(remainingbuf), "%d", apm_info.minutes_left);
+    } else {
+        (void)snprintf(remainingbuf, sizeof(remainingbuf), "%s", "(CHR)");
+    }
 
-        iter = prop_dictionary_iterator(dict);
-        if (iter == NULL) {
-                prop_object_release(dict);
-                close(fd);
-        }
-
-        /* iterate over the dictionary returned by the kernel */
-        while ((obj = prop_object_iterator_next(iter)) != NULL) {
-                /* skip this dict if it's not what we're looking for */
-                if ((strlen(prop_dictionary_keysym_cstring_nocopy(obj)) == strlen(sensor_desc)) &&
-                    (strncmp(sensor_desc,
-                            prop_dictionary_keysym_cstring_nocopy(obj),
-                            strlen(sensor_desc)) != 0))
-                        continue;
-
-                is_found = true;
-
-                array = prop_dictionary_get_keysym(dict, obj);
-                if (prop_object_type(array) != PROP_TYPE_ARRAY) {
-                        prop_object_iterator_release(iter);
-                        prop_object_release(dict);
-                        close(fd);
-                        return;
-                }
-
-                iter2 = prop_array_iterator(array);
-                if (!iter2) {
-                        prop_object_iterator_release(iter);
-                        prop_object_release(dict);
-                        close(fd);
-                        return;
-                }
-
-                /* iterate over array of dicts specific to target battery */
-                while ((obj2 = prop_object_iterator_next(iter2)) != NULL) {
-                        obj3 = prop_dictionary_get(obj2, "description");
-
-                        if (obj3 &&
-                            strlen(prop_string_cstring_nocopy(obj3)) == 8 &&
-                            strncmp("charging",
-                                    prop_string_cstring_nocopy(obj3),
-                                    8) == 0)
-                        {
-                                obj3 = prop_dictionary_get(obj2, "cur-value");
-
-                                if (prop_number_integer_value(obj3))
-                                        status = CS_CHARGING;
-                                else
-                                        status = CS_DISCHARGING;
-
-                                continue;
-                        }
-
-                        if (obj3 &&
-                            strlen(prop_string_cstring_nocopy(obj3)) == 6 &&
-                            strncmp("charge",
-                                    prop_string_cstring_nocopy(obj3),
-                                    6) == 0)
-                        {
-                                obj3 = prop_dictionary_get(obj2, "cur-value");
-                                obj4 = prop_dictionary_get(obj2, "max-value");
-                                obj5 = prop_dictionary_get(obj2, "type");
-
-                                remaining = prop_number_integer_value(obj3);
-                                full_design = prop_number_integer_value(obj4);
-
-                                if (remaining == full_design)
-                                        is_full = true;
-
-                                if (strncmp("Ampere hour",
-                                            prop_string_cstring_nocopy(obj5),
-                                            11) == 0)
-                                        watt_as_unit = false;
-                                else
-                                        watt_as_unit = true;
-
-                                continue;
-                        }
-
-                        if (obj3 &&
-                            strlen(prop_string_cstring_nocopy(obj3)) == 14 &&
-                            strncmp("discharge rate",
-                                    prop_string_cstring_nocopy(obj3),
-                                    14) == 0)
-                        {
-                                obj3 = prop_dictionary_get(obj2, "cur-value");
-                                present_rate = prop_number_integer_value(obj3);
-                                continue;
-                        }
-
-                        if (obj3 &&
-                            strlen(prop_string_cstring_nocopy(obj3)) == 13 &&
-                            strncmp("last full cap",
-                                    prop_string_cstring_nocopy(obj3),
-                                    13) == 0)
-                        {
-                                obj3 = prop_dictionary_get(obj2, "cur-value");
-                                last_full_cap = prop_number_integer_value(obj3);
-                                continue;
-                        }
-
-                        if (obj3 &&
-                            strlen(prop_string_cstring_nocopy(obj3)) == 7 &&
-                            strncmp("voltage",
-                                    prop_string_cstring_nocopy(obj3),
-                                    7) == 0)
-                        {
-                                obj3 = prop_dictionary_get(obj2, "cur-value");
-                                voltage = prop_number_integer_value(obj3);
-                                continue;
-                        }
-                }
-                prop_object_iterator_release(iter2);
-        }
+    if (colorful_output)
+        END_COLOR;
+#elif defined(__NetBSD__)
+    /*
+     * Using envsys(4) via sysmon(4).
+     */
+    int fd, rval, last_full_cap;
+    bool is_found = false;
+    char *sensor_desc;
+    bool is_full = false;
+
+    prop_dictionary_t dict;
+    prop_array_t array;
+    prop_object_iterator_t iter;
+    prop_object_iterator_t iter2;
+    prop_object_t obj, obj2, obj3, obj4, obj5;
+
+    asprintf(&sensor_desc, "acpibat%d", number);
+
+    fd = open("/dev/sysmon", O_RDONLY);
+    if (fd < 0) {
+        OUTPUT_FULL_TEXT("can't open /dev/sysmon");
+        return;
+    }
+
+    rval = prop_dictionary_recv_ioctl(fd, ENVSYS_GETDICTIONARY, &dict);
+    if (rval == -1) {
+        close(fd);
+        return;
+    }
 
-        prop_object_iterator_release(iter);
+    if (prop_dictionary_count(dict) == 0) {
         prop_object_release(dict);
         close(fd);
+        return;
+    }
 
-        if (! is_found) {
-                OUTPUT_FULL_TEXT(format_down);
-                return;
+    iter = prop_dictionary_iterator(dict);
+    if (iter == NULL) {
+        prop_object_release(dict);
+        close(fd);
+    }
+
+    /* iterate over the dictionary returned by the kernel */
+    while ((obj = prop_object_iterator_next(iter)) != NULL) {
+        /* skip this dict if it's not what we're looking for */
+        if ((strlen(prop_dictionary_keysym_cstring_nocopy(obj)) == strlen(sensor_desc)) &&
+            (strncmp(sensor_desc,
+                     prop_dictionary_keysym_cstring_nocopy(obj),
+                     strlen(sensor_desc)) != 0))
+            continue;
+
+        is_found = true;
+
+        array = prop_dictionary_get_keysym(dict, obj);
+        if (prop_object_type(array) != PROP_TYPE_ARRAY) {
+            prop_object_iterator_release(iter);
+            prop_object_release(dict);
+            close(fd);
+            return;
         }
 
-        if (last_full_capacity)
-                full_design = last_full_cap;
-
-        if (! watt_as_unit) {
-                present_rate = (((float)voltage / 1000.0) * ((float)present_rate / 1000.0));
-                remaining = (((float)voltage / 1000.0) * ((float)remaining / 1000.0));
-                full_design = (((float)voltage / 1000.0) * ((float)full_design / 1000.0));
+        iter2 = prop_array_iterator(array);
+        if (!iter2) {
+            prop_object_iterator_release(iter);
+            prop_object_release(dict);
+            close(fd);
+            return;
         }
 
-        float percentage_remaining =
-                (((float)remaining / (float)full_design) * 100);
+        /* iterate over array of dicts specific to target battery */
+        while ((obj2 = prop_object_iterator_next(iter2)) != NULL) {
+            obj3 = prop_dictionary_get(obj2, "description");
 
-        if (integer_battery_capacity)
-                (void)snprintf(percentagebuf,
-                           sizeof(percentagebuf),
-                           "%d%%",
-                           (int) percentage_remaining);
-        else
-                (void)snprintf(percentagebuf,
-                           sizeof(percentagebuf),
-                           "%.02f%%",
-                           percentage_remaining);
-
-        /*
-         * Handle percentage low_threshold here, and time low_threshold when
-         * we have it.
-         */
-        if (status == CS_DISCHARGING && low_threshold > 0) {
-                if (strcasecmp(threshold_type, "percentage") == 0
-                    && (((float)remaining / (float)full_design) * 100) < low_threshold) {
-                        START_COLOR("color_bad");
-                        colorful_output = true;
-                }
-        }
+            if (obj3 &&
+                strlen(prop_string_cstring_nocopy(obj3)) == 8 &&
+                strncmp("charging",
+                        prop_string_cstring_nocopy(obj3),
+                        8) == 0) {
+                obj3 = prop_dictionary_get(obj2, "cur-value");
 
-        if (is_full)
-                (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(CS_FULL));
-        else
-                (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
+                if (prop_number_integer_value(obj3))
+                    status = CS_CHARGING;
+                else
+                    status = CS_DISCHARGING;
 
-        /*
-         * The envsys(4) ACPI routines do not appear to provide a 'time
-         * remaining' figure, so we must deduce it.
-         */
-        float remaining_time;
-        int seconds, hours, minutes, seconds_remaining;
+                continue;
+            }
 
-        if (status == CS_CHARGING)
-                remaining_time = ((float)full_design - (float)remaining)
-                        / (float)present_rate;
-        else if (status == CS_DISCHARGING)
-                remaining_time = ((float)remaining / (float)present_rate);
-        else remaining_time = 0;
+            if (obj3 &&
+                strlen(prop_string_cstring_nocopy(obj3)) == 6 &&
+                strncmp("charge",
+                        prop_string_cstring_nocopy(obj3),
+                        6) == 0) {
+                obj3 = prop_dictionary_get(obj2, "cur-value");
+                obj4 = prop_dictionary_get(obj2, "max-value");
+                obj5 = prop_dictionary_get(obj2, "type");
+
+                remaining = prop_number_integer_value(obj3);
+                full_design = prop_number_integer_value(obj4);
+
+                if (remaining == full_design)
+                    is_full = true;
+
+                if (strncmp("Ampere hour",
+                            prop_string_cstring_nocopy(obj5),
+                            11) == 0)
+                    watt_as_unit = false;
+                else
+                    watt_as_unit = true;
 
-        seconds_remaining = (int)(remaining_time * 3600.0);
+                continue;
+            }
 
-        hours = seconds_remaining / 3600;
-        seconds = seconds_remaining - (hours * 3600);
-        minutes = seconds / 60;
-        seconds -= (minutes * 60);
+            if (obj3 &&
+                strlen(prop_string_cstring_nocopy(obj3)) == 14 &&
+                strncmp("discharge rate",
+                        prop_string_cstring_nocopy(obj3),
+                        14) == 0) {
+                obj3 = prop_dictionary_get(obj2, "cur-value");
+                present_rate = prop_number_integer_value(obj3);
+                continue;
+            }
 
-        if (status != CS_CHARGING) {
-                if (hide_seconds)
-                        (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d",
-                                max(hours, 0), max(minutes, 0));
-                else
-                        (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d:%02d",
-                                max(hours, 0), max(minutes, 0), max(seconds, 0));
-
-                if (low_threshold > 0) {
-                        if (strcasecmp(threshold_type, "time") == 0
-                            && ((float) seconds_remaining / 60.0) < (u_int) low_threshold) {
-                                START_COLOR("color_bad");
-                                colorful_output = true;
-                        }
-                }
-        } else {
-                if (hide_seconds)
-                        (void)snprintf(remainingbuf, sizeof(remainingbuf), "(%02d:%02d until full)",
-                                max(hours, 0), max(minutes, 0));
-                else
-                        (void)snprintf(remainingbuf, sizeof(remainingbuf), "(%02d:%02d:%02d until full)",
-                                max(hours, 0), max(minutes, 0), max(seconds, 0));
+            if (obj3 &&
+                strlen(prop_string_cstring_nocopy(obj3)) == 13 &&
+                strncmp("last full cap",
+                        prop_string_cstring_nocopy(obj3),
+                        13) == 0) {
+                obj3 = prop_dictionary_get(obj2, "cur-value");
+                last_full_cap = prop_number_integer_value(obj3);
+                continue;
+            }
+
+            if (obj3 &&
+                strlen(prop_string_cstring_nocopy(obj3)) == 7 &&
+                strncmp("voltage",
+                        prop_string_cstring_nocopy(obj3),
+                        7) == 0) {
+                obj3 = prop_dictionary_get(obj2, "cur-value");
+                voltage = prop_number_integer_value(obj3);
+                continue;
+            }
+        }
+        prop_object_iterator_release(iter2);
+    }
+
+    prop_object_iterator_release(iter);
+    prop_object_release(dict);
+    close(fd);
+
+    if (!is_found) {
+        OUTPUT_FULL_TEXT(format_down);
+        return;
+    }
+
+    if (last_full_capacity)
+        full_design = last_full_cap;
+
+    if (!watt_as_unit) {
+        present_rate = (((float)voltage / 1000.0) * ((float)present_rate / 1000.0));
+        remaining = (((float)voltage / 1000.0) * ((float)remaining / 1000.0));
+        full_design = (((float)voltage / 1000.0) * ((float)full_design / 1000.0));
+    }
+
+    float percentage_remaining =
+        (((float)remaining / (float)full_design) * 100);
+
+    if (integer_battery_capacity)
+        (void)snprintf(percentagebuf,
+                       sizeof(percentagebuf),
+                       "%d%%",
+                       (int)percentage_remaining);
+    else
+        (void)snprintf(percentagebuf,
+                       sizeof(percentagebuf),
+                       "%.02f%%",
+                       percentage_remaining);
+
+    /*
+     * Handle percentage low_threshold here, and time low_threshold when
+     * we have it.
+     */
+    if (status == CS_DISCHARGING && low_threshold > 0) {
+        if (strcasecmp(threshold_type, "percentage") == 0 && (((float)remaining / (float)full_design) * 100) < low_threshold) {
+            START_COLOR("color_bad");
+            colorful_output = true;
         }
+    }
 
-        empty_time = time(NULL);
-        empty_time += seconds_remaining;
-        empty_tm = localtime(&empty_time);
+    if (is_full)
+        (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(CS_FULL));
+    else
+        (void)snprintf(statusbuf, sizeof(statusbuf), "%s", BATT_STATUS_NAME(status));
 
-        /* No need to show empty time if battery is charging */
-        if (status != CS_CHARGING) {
-                if (hide_seconds)
-                        (void)snprintf(emptytimebuf, sizeof(emptytimebuf), "%02d:%02d",
-                                max(empty_tm->tm_hour, 0), max(empty_tm->tm_min, 0));
-                else
-                        (void)snprintf(emptytimebuf, sizeof(emptytimebuf), "%02d:%02d:%02d",
-                                max(empty_tm->tm_hour, 0), max(empty_tm->tm_min, 0), max(empty_tm->tm_sec, 0));
+    /*
+     * The envsys(4) ACPI routines do not appear to provide a 'time
+     * remaining' figure, so we must deduce it.
+     */
+    float remaining_time;
+    int seconds, hours, minutes, seconds_remaining;
+
+    if (status == CS_CHARGING)
+        remaining_time = ((float)full_design - (float)remaining) / (float)present_rate;
+    else if (status == CS_DISCHARGING)
+        remaining_time = ((float)remaining / (float)present_rate);
+    else
+        remaining_time = 0;
+
+    seconds_remaining = (int)(remaining_time * 3600.0);
+
+    hours = seconds_remaining / 3600;
+    seconds = seconds_remaining - (hours * 3600);
+    minutes = seconds / 60;
+    seconds -= (minutes * 60);
+
+    if (status != CS_CHARGING) {
+        if (hide_seconds)
+            (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d",
+                           max(hours, 0), max(minutes, 0));
+        else
+            (void)snprintf(remainingbuf, sizeof(remainingbuf), "%02d:%02d:%02d",
+                           max(hours, 0), max(minutes, 0), max(seconds, 0));
+
+        if (low_threshold > 0) {
+            if (strcasecmp(threshold_type, "time") == 0 && ((float)seconds_remaining / 60.0) < (u_int)low_threshold) {
+                START_COLOR("color_bad");
+                colorful_output = true;
+            }
         }
+    } else {
+        if (hide_seconds)
+            (void)snprintf(remainingbuf, sizeof(remainingbuf), "(%02d:%02d until full)",
+                           max(hours, 0), max(minutes, 0));
+        else
+            (void)snprintf(remainingbuf, sizeof(remainingbuf), "(%02d:%02d:%02d until full)",
+                           max(hours, 0), max(minutes, 0), max(seconds, 0));
+    }
+
+    empty_time = time(NULL);
+    empty_time += seconds_remaining;
+    empty_tm = localtime(&empty_time);
+
+    /* No need to show empty time if battery is charging */
+    if (status != CS_CHARGING) {
+        if (hide_seconds)
+            (void)snprintf(emptytimebuf, sizeof(emptytimebuf), "%02d:%02d",
+                           max(empty_tm->tm_hour, 0), max(empty_tm->tm_min, 0));
+        else
+            (void)snprintf(emptytimebuf, sizeof(emptytimebuf), "%02d:%02d:%02d",
+                           max(empty_tm->tm_hour, 0), max(empty_tm->tm_min, 0), max(empty_tm->tm_sec, 0));
+    }
 
-        (void)snprintf(consumptionbuf, sizeof(consumptionbuf), "%1.2fW",
-                ((float)present_rate / 1000.0 / 1000.0));
+    (void)snprintf(consumptionbuf, sizeof(consumptionbuf), "%1.2fW",
+                   ((float)present_rate / 1000.0 / 1000.0));
 #endif
 
-#define EAT_SPACE_FROM_OUTPUT_IF_EMPTY(_buf) \
-        do { \
-                if (strlen(_buf) == 0) { \
-                        if (outwalk > buffer && isspace(outwalk[-1])) \
-                                outwalk--; \
-                        else if (isspace(*(walk+1))) \
-                                walk++; \
-                } \
-        } while (0)
-
-        for (walk = format; *walk != '\0'; walk++) {
-                if (*walk != '%') {
-                        *(outwalk++) = *walk;
-                        continue;
-                }
-
-                if (BEGINS_WITH(walk+1, "status")) {
-                        outwalk += sprintf(outwalk, "%s", statusbuf);
-                        walk += strlen("status");
-                } else if (BEGINS_WITH(walk+1, "percentage")) {
-                        outwalk += sprintf(outwalk, "%s", percentagebuf);
-                        walk += strlen("percentage");
-                } else if (BEGINS_WITH(walk+1, "remaining")) {
-                        outwalk += sprintf(outwalk, "%s", remainingbuf);
-                        walk += strlen("remaining");
-                        EAT_SPACE_FROM_OUTPUT_IF_EMPTY(remainingbuf);
-                } else if (BEGINS_WITH(walk+1, "emptytime")) {
-                        outwalk += sprintf(outwalk, "%s", emptytimebuf);
-                        walk += strlen("emptytime");
-                        EAT_SPACE_FROM_OUTPUT_IF_EMPTY(emptytimebuf);
-                } else if (BEGINS_WITH(walk+1, "consumption")) {
-                        outwalk += sprintf(outwalk, "%s", consumptionbuf);
-                        walk += strlen("consumption");
-                        EAT_SPACE_FROM_OUTPUT_IF_EMPTY(consumptionbuf);
-                }
+#define EAT_SPACE_FROM_OUTPUT_IF_EMPTY(_buf)              \
+    do {                                                  \
+        if (strlen(_buf) == 0) {                          \
+            if (outwalk > buffer && isspace(outwalk[-1])) \
+                outwalk--;                                \
+            else if (isspace(*(walk + 1)))                \
+                walk++;                                   \
+        }                                                 \
+    } while (0)
+
+    for (walk = format; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
+        }
+
+        if (BEGINS_WITH(walk + 1, "status")) {
+            outwalk += sprintf(outwalk, "%s", statusbuf);
+            walk += strlen("status");
+        } else if (BEGINS_WITH(walk + 1, "percentage")) {
+            outwalk += sprintf(outwalk, "%s", percentagebuf);
+            walk += strlen("percentage");
+        } else if (BEGINS_WITH(walk + 1, "remaining")) {
+            outwalk += sprintf(outwalk, "%s", remainingbuf);
+            walk += strlen("remaining");
+            EAT_SPACE_FROM_OUTPUT_IF_EMPTY(remainingbuf);
+        } else if (BEGINS_WITH(walk + 1, "emptytime")) {
+            outwalk += sprintf(outwalk, "%s", emptytimebuf);
+            walk += strlen("emptytime");
+            EAT_SPACE_FROM_OUTPUT_IF_EMPTY(emptytimebuf);
+        } else if (BEGINS_WITH(walk + 1, "consumption")) {
+            outwalk += sprintf(outwalk, "%s", consumptionbuf);
+            walk += strlen("consumption");
+            EAT_SPACE_FROM_OUTPUT_IF_EMPTY(consumptionbuf);
         }
+    }
 
-        if (colorful_output)
-                END_COLOR;
+    if (colorful_output)
+        END_COLOR;
 
-        OUTPUT_FULL_TEXT(buffer);
+    OUTPUT_FULL_TEXT(buffer);
 }
index c687474b7671b87d54d2c87983d008c3a0e799a3..f60a5f6c128552e466ae9f1d1109db873262861b 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <stdlib.h>
 #include <limits.h>
 #include <stdio.h>
@@ -13,8 +13,8 @@
 #include <sys/types.h>
 #include <sys/sysctl.h>
 #define TZ_ZEROC 2732
-#define TZ_KELVTOC(x) (((x) - TZ_ZEROC) / 10), abs(((x) - TZ_ZEROC) % 10)
-#define TZ_AVG(x) ((x) - TZ_ZEROC) / 10
+#define TZ_KELVTOC(x) (((x)-TZ_ZEROC) / 10), abs(((x)-TZ_ZEROC) % 10)
+#define TZ_AVG(x) ((x)-TZ_ZEROC) / 10
 #endif
 
 #if defined(__DragonFly__)
 #define MUKTOC(v) ((v - 273150000) / 1000000.0)
 #endif
 
-
 /*
  * Reads the CPU temperature from /sys/class/thermal/thermal_zone%d/temp (or
  * the user provided path) and returns the temperature in degree celcius.
  *
  */
 void print_cpu_temperature_info(yajl_gen json_gen, char *buffer, int zone, const char *path, const char *format, int max_threshold) {
-        char *outwalk = buffer;
+    char *outwalk = buffer;
 #ifdef THERMAL_ZONE
-        const char *walk;
-        bool colorful_output = false;
-        char *thermal_zone;
+    const char *walk;
+    bool colorful_output = false;
+    char *thermal_zone;
 
-        if (path == NULL)
-                asprintf(&thermal_zone, THERMAL_ZONE, zone);
-        else
-                asprintf(&thermal_zone, path, zone);
+    if (path == NULL)
+        asprintf(&thermal_zone, THERMAL_ZONE, zone);
+    else
+        asprintf(&thermal_zone, path, zone);
 
-        INSTANCE(thermal_zone);
+    INSTANCE(thermal_zone);
 
-        for (walk = format; *walk != '\0'; walk++) {
-                if (*walk != '%') {
-                        *(outwalk++) = *walk;
-                        continue;
-                }
+    for (walk = format; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
+        }
 
-                if (BEGINS_WITH(walk+1, "degrees")) {
+        if (BEGINS_WITH(walk + 1, "degrees")) {
 #if defined(LINUX)
-                        static char buf[16];
-                        long int temp;
-                        if (!slurp(thermal_zone, buf, sizeof(buf)))
-                                goto error;
-                        temp = strtol(buf, NULL, 10);
-                        if (temp == LONG_MIN || temp == LONG_MAX || temp <= 0)
-                                *(outwalk++) = '?';
-                        else {
-                                if ((temp/1000) >= max_threshold) {
-                                        START_COLOR("color_bad");
-                                        colorful_output = true;
-                                }
-                                outwalk += sprintf(outwalk, "%ld", (temp/1000));
-                                if (colorful_output) {
-                                        END_COLOR;
-                                        colorful_output = false;
-                                }
-                        }
+            static char buf[16];
+            long int temp;
+            if (!slurp(thermal_zone, buf, sizeof(buf)))
+                goto error;
+            temp = strtol(buf, NULL, 10);
+            if (temp == LONG_MIN || temp == LONG_MAX || temp <= 0)
+                *(outwalk++) = '?';
+            else {
+                if ((temp / 1000) >= max_threshold) {
+                    START_COLOR("color_bad");
+                    colorful_output = true;
+                }
+                outwalk += sprintf(outwalk, "%ld", (temp / 1000));
+                if (colorful_output) {
+                    END_COLOR;
+                    colorful_output = false;
+                }
+            }
 #elif defined(__DragonFly__)
-                       struct sensor th_sensor;
-                       size_t th_sensorlen;
-
-                       th_sensorlen = sizeof(th_sensor);
-
-                       if (sysctlbyname(thermal_zone, &th_sensor, &th_sensorlen, NULL, 0) == -1) {
-                               perror("sysctlbyname");
-                               goto error;
-                       }
-                       if (MUKTOC(th_sensor.value) >= max_threshold) {
-                               START_COLOR("color_bad");
-                               colorful_output = true;
-                       }
-                       outwalk += sprintf(outwalk, "%.2f", MUKTOC(th_sensor.value));
-                       if (colorful_output) {
-                               END_COLOR;
-                               colorful_output = false;
-                       }
+            struct sensor th_sensor;
+            size_t th_sensorlen;
+
+            th_sensorlen = sizeof(th_sensor);
+
+            if (sysctlbyname(thermal_zone, &th_sensor, &th_sensorlen, NULL, 0) == -1) {
+                perror("sysctlbyname");
+                goto error;
+            }
+            if (MUKTOC(th_sensor.value) >= max_threshold) {
+                START_COLOR("color_bad");
+                colorful_output = true;
+            }
+            outwalk += sprintf(outwalk, "%.2f", MUKTOC(th_sensor.value));
+            if (colorful_output) {
+                END_COLOR;
+                colorful_output = false;
+            }
 
 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
-                        int sysctl_rslt;
-                        size_t sysctl_size = sizeof(sysctl_rslt);
-                        if (sysctlbyname(thermal_zone, &sysctl_rslt, &sysctl_size, NULL, 0))
-                                goto error;
-
-                        if (TZ_AVG(sysctl_rslt) >= max_threshold) {
-                                START_COLOR("color_bad");
-                                colorful_output = true;
-                        }
-                        outwalk += sprintf(outwalk, "%d.%d", TZ_KELVTOC(sysctl_rslt));
-                        if (colorful_output) {
-                                END_COLOR;
-                                colorful_output = false;
-                        }
+            int sysctl_rslt;
+            size_t sysctl_size = sizeof(sysctl_rslt);
+            if (sysctlbyname(thermal_zone, &sysctl_rslt, &sysctl_size, NULL, 0))
+                goto error;
+
+            if (TZ_AVG(sysctl_rslt) >= max_threshold) {
+                START_COLOR("color_bad");
+                colorful_output = true;
+            }
+            outwalk += sprintf(outwalk, "%d.%d", TZ_KELVTOC(sysctl_rslt));
+            if (colorful_output) {
+                END_COLOR;
+                colorful_output = false;
+            }
 
 #elif defined(__OpenBSD__)
-        struct sensordev sensordev;
-        struct sensor sensor;
-        size_t sdlen, slen;
-        int dev, numt, mib[5] = { CTL_HW, HW_SENSORS, 0, 0, 0 };
+            struct sensordev sensordev;
+            struct sensor sensor;
+            size_t sdlen, slen;
+            int dev, numt, mib[5] = {CTL_HW, HW_SENSORS, 0, 0, 0};
 
-        sdlen = sizeof(sensordev);
-        slen = sizeof(sensor);
+            sdlen = sizeof(sensordev);
+            slen = sizeof(sensor);
 
-        for (dev = 0; ; dev++) {
+            for (dev = 0;; dev++) {
                 mib[2] = dev;
                 if (sysctl(mib, 3, &sensordev, &sdlen, NULL, 0) == -1) {
-                        if (errno == ENXIO)
-                                continue;
-                        if (errno == ENOENT)
-                                break;
-                        goto error;
+                    if (errno == ENXIO)
+                        continue;
+                    if (errno == ENOENT)
+                        break;
+                    goto error;
                 }
                 /* 'path' is the node within the full path (defaults to acpitz0). */
                 if (BEGINS_WITH(sensordev.xname, thermal_zone)) {
-                        mib[3] = SENSOR_TEMP;
-                        /* Limit to temo0, but should retrieve from a full path... */
-                        for (numt = 0; numt < 1 /*sensordev.maxnumt[SENSOR_TEMP]*/; numt++) {
-                                mib[4] = numt;
-                                if (sysctl(mib, 5, &sensor, &slen, NULL, 0) == -1) {
-                                        if (errno != ENOENT) {
-                                                warn("sysctl");
-                                                continue;
-                                        }
-                                }
-                                if ((int)MUKTOC(sensor.value) >= max_threshold) {
-                                        START_COLOR("color_bad");
-                                        colorful_output = true;
-                                }
-
-                                outwalk += sprintf(outwalk, "%.2f", MUKTOC(sensor.value));
-
-                                if (colorful_output) {
-                                        END_COLOR;
-                                        colorful_output = false;
-                                }
+                    mib[3] = SENSOR_TEMP;
+                    /* Limit to temo0, but should retrieve from a full path... */
+                    for (numt = 0; numt < 1 /*sensordev.maxnumt[SENSOR_TEMP]*/; numt++) {
+                        mib[4] = numt;
+                        if (sysctl(mib, 5, &sensor, &slen, NULL, 0) == -1) {
+                            if (errno != ENOENT) {
+                                warn("sysctl");
+                                continue;
+                            }
+                        }
+                        if ((int)MUKTOC(sensor.value) >= max_threshold) {
+                            START_COLOR("color_bad");
+                            colorful_output = true;
                         }
+
+                        outwalk += sprintf(outwalk, "%.2f", MUKTOC(sensor.value));
+
+                        if (colorful_output) {
+                            END_COLOR;
+                            colorful_output = false;
+                        }
+                    }
                 }
-        }
+            }
 #elif defined(__NetBSD__)
-        int fd, rval;
-        bool err = false;
-        prop_dictionary_t dict;
-        prop_array_t array;
-        prop_object_iterator_t iter;
-        prop_object_iterator_t iter2;
-        prop_object_t obj, obj2, obj3;
-
-        fd = open("/dev/sysmon", O_RDONLY);
-        if (fd == -1)
+            int fd, rval;
+            bool err = false;
+            prop_dictionary_t dict;
+            prop_array_t array;
+            prop_object_iterator_t iter;
+            prop_object_iterator_t iter2;
+            prop_object_t obj, obj2, obj3;
+
+            fd = open("/dev/sysmon", O_RDONLY);
+            if (fd == -1)
                 goto error;
 
-        rval = prop_dictionary_recv_ioctl(fd, ENVSYS_GETDICTIONARY, &dict);
-        if (rval == -1) {
-            err = true;
-            goto error_netbsd1;
-        }
-
-        /* No drivers registered? */
-        if (prop_dictionary_count(dict) == 0) {
-            err = true;
-            goto error_netbsd2;
-        }
-
-        iter = prop_dictionary_iterator(dict);
-        if (iter == NULL) {
-            err = true;
-            goto error_netbsd2;
-        }
-
-        /* iterate over the dictionary returned by the kernel */
-        while ((obj = prop_object_iterator_next(iter)) != NULL) {
+            rval = prop_dictionary_recv_ioctl(fd, ENVSYS_GETDICTIONARY, &dict);
+            if (rval == -1) {
+                err = true;
+                goto error_netbsd1;
+            }
+
+            /* No drivers registered? */
+            if (prop_dictionary_count(dict) == 0) {
+                err = true;
+                goto error_netbsd2;
+            }
+
+            iter = prop_dictionary_iterator(dict);
+            if (iter == NULL) {
+                err = true;
+                goto error_netbsd2;
+            }
+
+            /* iterate over the dictionary returned by the kernel */
+            while ((obj = prop_object_iterator_next(iter)) != NULL) {
                 /* skip this dict if it's not what we're looking for */
                 if ((strlen(prop_dictionary_keysym_cstring_nocopy(obj)) != strlen(thermal_zone)) ||
                     (strncmp(thermal_zone,
                              prop_dictionary_keysym_cstring_nocopy(obj),
                              strlen(thermal_zone)) != 0))
-                        continue;
+                    continue;
 
                 array = prop_dictionary_get_keysym(dict, obj);
                 if (prop_object_type(array) != PROP_TYPE_ARRAY) {
@@ -223,48 +222,48 @@ void print_cpu_temperature_info(yajl_gen json_gen, char *buffer, int zone, const
 
                 /* iterate over array of dicts specific to target sensor */
                 while ((obj2 = prop_object_iterator_next(iter2)) != NULL) {
-                        obj3 = prop_dictionary_get(obj2, "cur-value");
+                    obj3 = prop_dictionary_get(obj2, "cur-value");
 
-                        float temp = MUKTOC(prop_number_integer_value(obj3));
-                        if ((int)temp >= max_threshold) {
-                                START_COLOR("color_bad");
-                                colorful_output = true;
-                        }
+                    float temp = MUKTOC(prop_number_integer_value(obj3));
+                    if ((int)temp >= max_threshold) {
+                        START_COLOR("color_bad");
+                        colorful_output = true;
+                    }
 
-                        outwalk += sprintf(outwalk, "%.2f", temp);
+                    outwalk += sprintf(outwalk, "%.2f", temp);
 
-                        if (colorful_output) {
-                                END_COLOR;
-                                colorful_output = false;
-                        }
+                    if (colorful_output) {
+                        END_COLOR;
+                        colorful_output = false;
+                    }
 
-                        break;
+                    break;
                 }
                 prop_object_iterator_release(iter2);
-        }
-error_netbsd3:
-        prop_object_iterator_release(iter);
-error_netbsd2:
-       prop_object_release(dict);
-error_netbsd1:
-        close(fd);
-        if (err) goto error;
+            }
+        error_netbsd3:
+            prop_object_iterator_release(iter);
+        error_netbsd2:
+            prop_object_release(dict);
+        error_netbsd1:
+            close(fd);
+            if (err)
+                goto error;
 
 #endif
 
-
-                        walk += strlen("degrees");
-                }
+            walk += strlen("degrees");
         }
+    }
 
-        free(thermal_zone);
+    free(thermal_zone);
 
-        OUTPUT_FULL_TEXT(buffer);
-        return;
+    OUTPUT_FULL_TEXT(buffer);
+    return;
 error:
 #endif
-        free(thermal_zone);
+    free(thermal_zone);
 
-        OUTPUT_FULL_TEXT("cant read temp");
-        (void)fputs("i3status: Cannot read temperature. Verify that you have a thermal zone in /sys/class/thermal or disable the cpu_temperature module in your i3status config.\n", stderr);
+    OUTPUT_FULL_TEXT("cant read temp");
+    (void)fputs("i3status: Cannot read temperature. Verify that you have a thermal zone in /sys/class/thermal or disable the cpu_temperature module in your i3status config.\n", stderr);
 }
index 26a9d4f44084a95c887c18f8593606512560981c..68437b3cc9e1836ef755c1e7b251a4c8734de43e 100644 (file)
@@ -1,4 +1,4 @@
-// vim:sw=8:sts=8:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <stdlib.h>
 #include <limits.h>
 #include <stdio.h>
@@ -30,7 +30,7 @@
 #include "i3status.h"
 
 static int prev_total = 0;
-static int prev_idle  = 0;
+static int prev_idle = 0;
 
 /*
  * Reads the CPU utilization from /proc/stat and returns the usage as a
@@ -38,74 +38,74 @@ static int prev_idle  = 0;
  *
  */
 void print_cpu_usage(yajl_gen json_gen, char *buffer, const char *format) {
-        const char *walk;
-        char *outwalk = buffer;
-        char buf[1024];
-        int curr_user = 0, curr_nice = 0, curr_system = 0, curr_idle = 0, curr_total;
-        int diff_idle, diff_total, diff_usage;
+    const char *walk;
+    char *outwalk = buffer;
+    char buf[1024];
+    int curr_user = 0, curr_nice = 0, curr_system = 0, curr_idle = 0, curr_total;
+    int diff_idle, diff_total, diff_usage;
 
 #if defined(LINUX)
-        static char statpath[512];
-        strcpy(statpath, "/proc/stat");
-        if (!slurp(statpath, buf, sizeof(buf)) ||
-            sscanf(buf, "cpu %d %d %d %d", &curr_user, &curr_nice, &curr_system, &curr_idle) != 4)
-                goto error;
+    static char statpath[512];
+    strcpy(statpath, "/proc/stat");
+    if (!slurp(statpath, buf, sizeof(buf)) ||
+        sscanf(buf, "cpu %d %d %d %d", &curr_user, &curr_nice, &curr_system, &curr_idle) != 4)
+        goto error;
 
-        curr_total = curr_user + curr_nice + curr_system + curr_idle;
-        diff_idle  = curr_idle - prev_idle;
-        diff_total = curr_total - prev_total;
-        diff_usage = (diff_total ? (1000 * (diff_total - diff_idle)/diff_total + 5)/10 : 0);
-        prev_total = curr_total;
-        prev_idle  = curr_idle;
+    curr_total = curr_user + curr_nice + curr_system + curr_idle;
+    diff_idle = curr_idle - prev_idle;
+    diff_total = curr_total - prev_total;
+    diff_usage = (diff_total ? (1000 * (diff_total - diff_idle) / diff_total + 5) / 10 : 0);
+    prev_total = curr_total;
+    prev_idle = curr_idle;
 #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
 
 #if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__NetBSD__)
-        size_t size;
-        long cp_time[CPUSTATES];
-        size = sizeof cp_time;
-        if (sysctlbyname("kern.cp_time", &cp_time, &size, NULL, 0) < 0)
-                goto error;
+    size_t size;
+    long cp_time[CPUSTATES];
+    size = sizeof cp_time;
+    if (sysctlbyname("kern.cp_time", &cp_time, &size, NULL, 0) < 0)
+        goto error;
 #else
-       /* This information is taken from the boot cpu, any other cpus are currently ignored. */
-       long cp_time[CPUSTATES];
-       int mib[2];
-       size_t size = sizeof(cp_time);
+    /* This information is taken from the boot cpu, any other cpus are currently ignored. */
+    long cp_time[CPUSTATES];
+    int mib[2];
+    size_t size = sizeof(cp_time);
 
-       mib[0] = CTL_KERN;
-       mib[1] = KERN_CPTIME;
+    mib[0] = CTL_KERN;
+    mib[1] = KERN_CPTIME;
 
-       if (sysctl(mib, 2, cp_time, &size, NULL, 0))
-               goto error;
+    if (sysctl(mib, 2, cp_time, &size, NULL, 0))
+        goto error;
 #endif
 
-        curr_user = cp_time[CP_USER];
-        curr_nice = cp_time[CP_NICE];
-        curr_system = cp_time[CP_SYS];
-        curr_idle = cp_time[CP_IDLE];
-        curr_total = curr_user + curr_nice + curr_system + curr_idle;
-        diff_idle  = curr_idle - prev_idle;
-        diff_total = curr_total - prev_total;
-        diff_usage = (diff_total ? (1000 * (diff_total - diff_idle)/diff_total + 5)/10 : 0);
-        prev_total = curr_total;
-        prev_idle  = curr_idle;
+    curr_user = cp_time[CP_USER];
+    curr_nice = cp_time[CP_NICE];
+    curr_system = cp_time[CP_SYS];
+    curr_idle = cp_time[CP_IDLE];
+    curr_total = curr_user + curr_nice + curr_system + curr_idle;
+    diff_idle = curr_idle - prev_idle;
+    diff_total = curr_total - prev_total;
+    diff_usage = (diff_total ? (1000 * (diff_total - diff_idle) / diff_total + 5) / 10 : 0);
+    prev_total = curr_total;
+    prev_idle = curr_idle;
 #else
-        goto error;
+    goto error;
 #endif
-        for (walk = format; *walk != '\0'; walk++) {
-                if (*walk != '%') {
-                        *(outwalk++) = *walk;
-                        continue;
-                }
+    for (walk = format; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
+        }
 
-                if (BEGINS_WITH(walk+1, "usage")) {
-                        outwalk += sprintf(outwalk, "%02d%%", diff_usage);
-                        walk += strlen("usage");
-                }
+        if (BEGINS_WITH(walk + 1, "usage")) {
+            outwalk += sprintf(outwalk, "%02d%%", diff_usage);
+            walk += strlen("usage");
         }
+    }
 
-        OUTPUT_FULL_TEXT(buffer);
-        return;
+    OUTPUT_FULL_TEXT(buffer);
+    return;
 error:
-        OUTPUT_FULL_TEXT("cant read cpu usage");
-        (void)fputs("i3status: Cannot read CPU usage\n", stderr);
+    OUTPUT_FULL_TEXT("cant read cpu usage");
+    (void)fputs("i3status: Cannot read CPU usage\n", stderr);
 }
index de9a7be468e71d4232bc560963e19d438671784f..1c368b5d03077c7665b0abcc0bb805e2bc31eade 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <time.h>
 #include <stdio.h>
 #include <stdlib.h>
 
 /* define fixed output-Strings */
 char *season_long[5] = {
-        "Chaos",
-        "Discord",
-        "Confusion",
-        "Bureaucracy",
-        "The Aftermath"
-};
+    "Chaos",
+    "Discord",
+    "Confusion",
+    "Bureaucracy",
+    "The Aftermath"};
 
 char *season_short[5] = {
-        "Chs",
-        "Dsc",
-        "Cfn",
-        "Bcy",
-        "Afm"
-};
+    "Chs",
+    "Dsc",
+    "Cfn",
+    "Bcy",
+    "Afm"};
 
 char *day_long[5] = {
-        "Sweetmorn",
-        "Boomtime",
-        "Pungenday",
-        "Prickle-Prickle",
-        "Setting Orange"
-};
+    "Sweetmorn",
+    "Boomtime",
+    "Pungenday",
+    "Prickle-Prickle",
+    "Setting Orange"};
 
 char *day_short[5] = {
-        "SM",
-        "BT",
-        "PD",
-        "PP",
-        "SO"
-};
+    "SM",
+    "BT",
+    "PD",
+    "PP",
+    "SO"};
 
 char *holidays[10] = {
-        "Mungday",
-        "Mojoday",
-        "Syaday",
-        "Zaraday",
-        "Maladay",
-        "Chaoflux",
-        "Discoflux",
-        "Confuflux",
-        "Bureflux",
-        "Afflux"
-};
+    "Mungday",
+    "Mojoday",
+    "Syaday",
+    "Zaraday",
+    "Maladay",
+    "Chaoflux",
+    "Discoflux",
+    "Confuflux",
+    "Bureflux",
+    "Afflux"};
 
 /* A helper-struct, taking the discordian date */
 struct disc_time {
-        int year;
-        int season;
-        int week_day;
-        int season_day;
-        int st_tibs_day;
+    int year;
+    int season;
+    int week_day;
+    int season_day;
+    int st_tibs_day;
 };
 
 /* Print the date *dt in format *format */
 static int format_output(char *outwalk, char *format, struct disc_time *dt) {
-        char *orig_outwalk = outwalk;
-        char *i;
-        char *tibs_end = 0;
-
-        for (i = format; *i != '\0'; i++) {
-                if (*i != '%') {
-                        *(outwalk++) = *i;
-                        continue;
+    char *orig_outwalk = outwalk;
+    char *i;
+    char *tibs_end = 0;
+
+    for (i = format; *i != '\0'; i++) {
+        if (*i != '%') {
+            *(outwalk++) = *i;
+            continue;
+        }
+        switch (*(i + 1)) {
+            /* Weekday in long and abbreviation */
+            case 'A':
+                outwalk += sprintf(outwalk, "%s", day_long[dt->week_day]);
+                break;
+            case 'a':
+                outwalk += sprintf(outwalk, "%s", day_short[dt->week_day]);
+                break;
+            /* Season in long and abbreviation */
+            case 'B':
+                outwalk += sprintf(outwalk, "%s", season_long[dt->season]);
+                break;
+            case 'b':
+                outwalk += sprintf(outwalk, "%s", season_short[dt->season]);
+                break;
+            /* Day of the season (ordinal and cardinal) */
+            case 'd':
+                outwalk += sprintf(outwalk, "%d", dt->season_day + 1);
+                break;
+            case 'e':
+                outwalk += sprintf(outwalk, "%d", dt->season_day + 1);
+                if (dt->season_day > 9 && dt->season_day < 13) {
+                    outwalk += sprintf(outwalk, "th");
+                    break;
+                }
+
+                switch (dt->season_day % 10) {
+                    case 0:
+                        outwalk += sprintf(outwalk, "st");
+                        break;
+                    case 1:
+                        outwalk += sprintf(outwalk, "nd");
+                        break;
+                    case 2:
+                        outwalk += sprintf(outwalk, "rd");
+                        break;
+                    default:
+                        outwalk += sprintf(outwalk, "th");
+                        break;
+                }
+                break;
+            /* YOLD */
+            case 'Y':
+                outwalk += sprintf(outwalk, "%d", dt->year);
+                break;
+            /* Holidays */
+            case 'H':
+                if (dt->season_day == 4) {
+                    outwalk += sprintf(outwalk, "%s", holidays[dt->season]);
                 }
-                switch (*(i+1)) {
-                        /* Weekday in long and abbreviation */
-                        case 'A':
-                                outwalk += sprintf(outwalk, "%s", day_long[dt->week_day]);
-                                break;
-                        case 'a':
-                                outwalk += sprintf(outwalk, "%s", day_short[dt->week_day]);
-                                break;
-                        /* Season in long and abbreviation */
-                        case 'B':
-                                outwalk += sprintf(outwalk, "%s", season_long[dt->season]);
-                                break;
-                        case 'b':
-                                outwalk += sprintf(outwalk, "%s", season_short[dt->season]);
-                                break;
-                        /* Day of the season (ordinal and cardinal) */
-                        case 'd':
-                                outwalk += sprintf(outwalk, "%d", dt->season_day + 1);
-                                break;
-                        case 'e':
-                                outwalk += sprintf(outwalk, "%d", dt->season_day + 1);
-                                if (dt->season_day > 9 && dt->season_day < 13) {
-                                        outwalk += sprintf(outwalk, "th");
-                                        break;
-                                }
-
-                                switch (dt->season_day % 10) {
-                                        case 0:
-                                                outwalk += sprintf(outwalk, "st");
-                                                break;
-                                        case 1:
-                                                outwalk += sprintf(outwalk, "nd");
-                                                break;
-                                        case 2:
-                                                outwalk += sprintf(outwalk, "rd");
-                                                break;
-                                        default:
-                                                outwalk += sprintf(outwalk, "th");
-                                                break;
-                                }
-                                break;
-                        /* YOLD */
-                        case 'Y':
-                                outwalk += sprintf(outwalk, "%d", dt->year);
-                                break;
-                        /* Holidays */
-                        case 'H':
-                                if (dt->season_day == 4) {
-                                        outwalk += sprintf(outwalk, "%s", holidays[dt->season]);
-                                }
-                                if (dt->season_day == 49) {
-                                        outwalk += sprintf(outwalk, "%s", holidays[dt->season + 5]);
-                                }
-                                break;
-                        /* Stop parsing the format string, except on Holidays */
-                        case 'N':
-                                if (dt->season_day != 4 && dt->season_day != 49) {
-                                        return (outwalk - orig_outwalk);
-                                }
-                                break;
-                        /* Newline- and Tabbing-characters */
-                        case 'n':
-                                outwalk += sprintf(outwalk, "\n");
-                                break;
-                        case 't':
-                                outwalk += sprintf(outwalk, "\t");
-                                break;
-                        /* The St. Tib's Day replacement */
-                        case '{':
-                                tibs_end = strstr(i, "%}");
-                                if (tibs_end == NULL) {
-                                        i++;
-                                        break;
-                                }
-                                if (dt->st_tibs_day) {
-                                        /* We outpt "St. Tib's Day... */
-                                        outwalk += sprintf(outwalk, "St. Tib's Day");
-                                } else {
-                                        /* ...or parse the substring between %{ and %} ... */
-                                        *tibs_end = '\0';
-                                        outwalk += format_output(outwalk, i + 2, dt);
-                                        *tibs_end = '%';
-                                }
-                                /* ...and continue with the rest */
-                                i = tibs_end;
-                                break;
-                        case '}':
-                                i++;
-                                break;
-                        default:
-                                /* No escape-sequence, so we just skip */
-                                outwalk += sprintf(outwalk, "%%%c", *(i+1));
-                                break;
+                if (dt->season_day == 49) {
+                    outwalk += sprintf(outwalk, "%s", holidays[dt->season + 5]);
                 }
+                break;
+            /* Stop parsing the format string, except on Holidays */
+            case 'N':
+                if (dt->season_day != 4 && dt->season_day != 49) {
+                    return (outwalk - orig_outwalk);
+                }
+                break;
+            /* Newline- and Tabbing-characters */
+            case 'n':
+                outwalk += sprintf(outwalk, "\n");
+                break;
+            case 't':
+                outwalk += sprintf(outwalk, "\t");
+                break;
+            /* The St. Tib's Day replacement */
+            case '{':
+                tibs_end = strstr(i, "%}");
+                if (tibs_end == NULL) {
+                    i++;
+                    break;
+                }
+                if (dt->st_tibs_day) {
+                    /* We outpt "St. Tib's Day... */
+                    outwalk += sprintf(outwalk, "St. Tib's Day");
+                } else {
+                    /* ...or parse the substring between %{ and %} ... */
+                    *tibs_end = '\0';
+                    outwalk += format_output(outwalk, i + 2, dt);
+                    *tibs_end = '%';
+                }
+                /* ...and continue with the rest */
+                i = tibs_end;
+                break;
+            case '}':
                 i++;
+                break;
+            default:
+                /* No escape-sequence, so we just skip */
+                outwalk += sprintf(outwalk, "%%%c", *(i + 1));
+                break;
         }
-        return (outwalk - orig_outwalk);
+        i++;
+    }
+    return (outwalk - orig_outwalk);
 }
 
 /* Get the current date and convert it to discordian */
 struct disc_time *get_ddate(struct tm *current_tm) {
-        static struct disc_time dt;
-
-        if (current_tm == NULL)
-                return NULL;
-
-        /* We have to know, whether we have to insert St. Tib's Day, so whether it's a leap
-           year in gregorian calendar */
-        int is_leap_year = !(current_tm->tm_year % 4) &&
-                            (!(current_tm->tm_year % 400) || current_tm->tm_year % 100);
-
-        /* If St. Tib's Day has passed, it will be necessary to skip a day. */
-        int yday = current_tm->tm_yday;
-
-        if (is_leap_year && yday == 59) {
-                /* On St. Tibs Day we don't have to define a date */
-                dt.st_tibs_day = 1;
-        } else {
-                dt.st_tibs_day = 0;
-                if (is_leap_year && yday > 59)
-                        yday -= 1;
-
-                dt.season_day = yday % 73;
-                dt.week_day = yday % 5;
-        }
-        dt.year = current_tm->tm_year + 3066;
-        dt.season = yday / 73;
-        return &dt;
+    static struct disc_time dt;
+
+    if (current_tm == NULL)
+        return NULL;
+
+    /* We have to know, whether we have to insert St. Tib's Day, so whether it's a leap
+     * year in gregorian calendar */
+    int is_leap_year = !(current_tm->tm_year % 4) &&
+                       (!(current_tm->tm_year % 400) || current_tm->tm_year % 100);
+
+    /* If St. Tib's Day has passed, it will be necessary to skip a day. */
+    int yday = current_tm->tm_yday;
+
+    if (is_leap_year && yday == 59) {
+        /* On St. Tibs Day we don't have to define a date */
+        dt.st_tibs_day = 1;
+    } else {
+        dt.st_tibs_day = 0;
+        if (is_leap_year && yday > 59)
+            yday -= 1;
+
+        dt.season_day = yday % 73;
+        dt.week_day = yday % 5;
+    }
+    dt.year = current_tm->tm_year + 3066;
+    dt.season = yday / 73;
+    return &dt;
 }
 
 void print_ddate(yajl_gen json_gen, char *buffer, const char *format, time_t t) {
-        char *outwalk = buffer;
-        static char *form = NULL;
-        struct tm current_tm;
-        struct disc_time *dt;
-        set_timezone(NULL);  /* Use local time. */
-        localtime_r(&t, &current_tm);
-        if ((dt = get_ddate(&current_tm)) == NULL)
-                return;
-        if (form == NULL)
-                if ((form = malloc(strlen(format) + 1)) == NULL)
-                        return;
-        strcpy(form, format);
-        outwalk += format_output(outwalk, form, dt);
-        OUTPUT_FULL_TEXT(buffer);
+    char *outwalk = buffer;
+    static char *form = NULL;
+    struct tm current_tm;
+    struct disc_time *dt;
+    set_timezone(NULL); /* Use local time. */
+    localtime_r(&t, &current_tm);
+    if ((dt = get_ddate(&current_tm)) == NULL)
+        return;
+    if (form == NULL)
+        if ((form = malloc(strlen(format) + 1)) == NULL)
+            return;
+    strcpy(form, format);
+    outwalk += format_output(outwalk, form, dt);
+    OUTPUT_FULL_TEXT(buffer);
 }
index e225923a03be01510999f0b48ecb1533766ceb06..b9047e5388e9baa465cd23f334fbdf9755c7f9a9 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 
 #define MAX_EXPONENT 4
 
-static const char * const iec_symbols[MAX_EXPONENT+1] = {"", "Ki", "Mi", "Gi", "Ti"};
-static const char * const si_symbols[MAX_EXPONENT+1] = {"", "k", "M", "G", "T"};
-static const char * const custom_symbols[MAX_EXPONENT+1] = {"", "K", "M", "G", "T"};
+static const char *const iec_symbols[MAX_EXPONENT + 1] = {"", "Ki", "Mi", "Gi", "Ti"};
+static const char *const si_symbols[MAX_EXPONENT + 1] = {"", "k", "M", "G", "T"};
+static const char *const custom_symbols[MAX_EXPONENT + 1] = {"", "K", "M", "G", "T"};
 
 /*
  * Formats bytes according to the given base and set of symbols.
  *
  */
-static int format_bytes(char *outwalk, uint64_t bytes, uint64_t base, const char * const symbols[]) {
-        double size = bytes;
-        int exponent = 0;
-        while (size >= base && exponent < MAX_EXPONENT) {
-                size /= base;
-                exponent += 1;
-        }
-        return sprintf(outwalk, "%.1f %sB", size, symbols[exponent]);
+static int format_bytes(char *outwalk, uint64_t bytes, uint64_t base, const char *const symbols[]) {
+    double size = bytes;
+    int exponent = 0;
+    while (size >= base && exponent < MAX_EXPONENT) {
+        size /= base;
+        exponent += 1;
+    }
+    return sprintf(outwalk, "%.1f %sB", size, symbols[exponent]);
 }
 
 /*
@@ -45,13 +45,13 @@ static int format_bytes(char *outwalk, uint64_t bytes, uint64_t base, const char
  *
  */
 static int print_bytes_human(char *outwalk, uint64_t bytes, const char *prefix_type) {
-        if (strcasecmp(prefix_type, "decimal") == 0) {
-                return format_bytes(outwalk, bytes, DECIMAL_BASE, si_symbols);
-        } else if (strcasecmp(prefix_type, "custom") == 0) {
-                return format_bytes(outwalk, bytes, BINARY_BASE, custom_symbols);
-        } else {
-                return format_bytes(outwalk, bytes, BINARY_BASE, iec_symbols);
-        }
+    if (strcasecmp(prefix_type, "decimal") == 0) {
+        return format_bytes(outwalk, bytes, DECIMAL_BASE, si_symbols);
+    } else if (strcasecmp(prefix_type, "custom") == 0) {
+        return format_bytes(outwalk, bytes, BINARY_BASE, custom_symbols);
+    } else {
+        return format_bytes(outwalk, bytes, BINARY_BASE, iec_symbols);
+    }
 }
 
 /*
@@ -63,44 +63,44 @@ static bool below_threshold(struct statfs buf, const char *prefix_type, const ch
 #else
 static bool below_threshold(struct statvfs buf, const char *prefix_type, const char *threshold_type, const double low_threshold) {
 #endif
-        if (strcasecmp(threshold_type, "percentage_free") == 0) {
-                return 100.0 * (double)buf.f_bfree / (double)buf.f_blocks < low_threshold;
-        } else if (strcasecmp(threshold_type, "percentage_avail") == 0) {
-                return 100.0 * (double)buf.f_bavail / (double)buf.f_blocks < low_threshold;
-        } else if (strcasecmp(threshold_type, "bytes_free") == 0) {
-                return (double)buf.f_bsize * (double)buf.f_bfree < low_threshold;
-        } else if (strcasecmp(threshold_type, "bytes_avail") == 0) {
-                return (double)buf.f_bsize * (double)buf.f_bavail < low_threshold;
-        } else if (threshold_type[0] != '\0' && strncasecmp(threshold_type+1, "bytes_", strlen("bytes_")) == 0) {
-                uint64_t base = strcasecmp(prefix_type, "decimal") == 0 ? DECIMAL_BASE : BINARY_BASE;
-                double factor = 1;
-
-                switch (threshold_type[0]) {
-                case 'T':
-                case 't':
-                        factor *= base;
-                case 'G':
-                case 'g':
-                        factor *= base;
-                case 'M':
-                case 'm':
-                        factor *= base;
-                case 'K':
-                case 'k':
-                        factor *= base;
-                        break;
-                default:
-                        return false;
-                }
-
-                if (strcasecmp(threshold_type+1, "bytes_free") == 0) {
-                        return (double)buf.f_bsize * (double)buf.f_bfree < low_threshold * factor;
-                } else if (strcasecmp(threshold_type+1, "bytes_avail") == 0) {
-                        return (double)buf.f_bsize * (double)buf.f_bavail < low_threshold * factor;
-                }
+    if (strcasecmp(threshold_type, "percentage_free") == 0) {
+        return 100.0 * (double)buf.f_bfree / (double)buf.f_blocks < low_threshold;
+    } else if (strcasecmp(threshold_type, "percentage_avail") == 0) {
+        return 100.0 * (double)buf.f_bavail / (double)buf.f_blocks < low_threshold;
+    } else if (strcasecmp(threshold_type, "bytes_free") == 0) {
+        return (double)buf.f_bsize * (double)buf.f_bfree < low_threshold;
+    } else if (strcasecmp(threshold_type, "bytes_avail") == 0) {
+        return (double)buf.f_bsize * (double)buf.f_bavail < low_threshold;
+    } else if (threshold_type[0] != '\0' && strncasecmp(threshold_type + 1, "bytes_", strlen("bytes_")) == 0) {
+        uint64_t base = strcasecmp(prefix_type, "decimal") == 0 ? DECIMAL_BASE : BINARY_BASE;
+        double factor = 1;
+
+        switch (threshold_type[0]) {
+            case 'T':
+            case 't':
+                factor *= base;
+            case 'G':
+            case 'g':
+                factor *= base;
+            case 'M':
+            case 'm':
+                factor *= base;
+            case 'K':
+            case 'k':
+                factor *= base;
+                break;
+            default:
+                return false;
+        }
+
+        if (strcasecmp(threshold_type + 1, "bytes_free") == 0) {
+            return (double)buf.f_bsize * (double)buf.f_bfree < low_threshold * factor;
+        } else if (strcasecmp(threshold_type + 1, "bytes_avail") == 0) {
+            return (double)buf.f_bsize * (double)buf.f_bavail < low_threshold * factor;
         }
+    }
 
-        return false;
+    return false;
 }
 
 /*
@@ -109,97 +109,97 @@ static bool below_threshold(struct statvfs buf, const char *prefix_type, const c
  *
  */
 void print_disk_info(yajl_gen json_gen, char *buffer, const char *path, const char *format, const char *format_not_mounted, const char *prefix_type, const char *threshold_type, const double low_threshold) {
-        const char *walk;
-        char *outwalk = buffer;
-        bool colorful_output = false;
+    const char *walk;
+    char *outwalk = buffer;
+    bool colorful_output = false;
 
-        INSTANCE(path);
+    INSTANCE(path);
 
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__OpenBSD__) || defined(__DragonFly__)
-        struct statfs buf;
+    struct statfs buf;
 
-        if (statfs(path, &buf) == -1)
-                return;
+    if (statfs(path, &buf) == -1)
+        return;
 #else
-        struct statvfs buf;
-
-        if (statvfs(path, &buf) == -1)
-                return;
-
-        if (format_not_mounted != NULL) {
-                FILE *mntentfile = setmntent("/etc/mtab", "r");
-                struct mntent *m;
-                bool found = false;
-
-                while ((m = getmntent(mntentfile)) != NULL) {
-                        if (strcmp(m->mnt_dir, path) == 0) {
-                                found = true;
-                                break;
-                        }
-                }
-                endmntent(mntentfile);
-
-                if (!found) {
-                        format = format_not_mounted;
-                }
+    struct statvfs buf;
+
+    if (statvfs(path, &buf) == -1)
+        return;
+
+    if (format_not_mounted != NULL) {
+        FILE *mntentfile = setmntent("/etc/mtab", "r");
+        struct mntent *m;
+        bool found = false;
+
+        while ((m = getmntent(mntentfile)) != NULL) {
+            if (strcmp(m->mnt_dir, path) == 0) {
+                found = true;
+                break;
+            }
+        }
+        endmntent(mntentfile);
+
+        if (!found) {
+            format = format_not_mounted;
         }
+    }
 #endif
 
-        if (low_threshold > 0 && below_threshold(buf, prefix_type, threshold_type, low_threshold)) {
-                START_COLOR("color_bad");
-                colorful_output = true;
+    if (low_threshold > 0 && below_threshold(buf, prefix_type, threshold_type, low_threshold)) {
+        START_COLOR("color_bad");
+        colorful_output = true;
+    }
+
+    for (walk = format; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
+        }
+
+        if (BEGINS_WITH(walk + 1, "free")) {
+            outwalk += print_bytes_human(outwalk, (uint64_t)buf.f_bsize * (uint64_t)buf.f_bfree, prefix_type);
+            walk += strlen("free");
+        }
+
+        if (BEGINS_WITH(walk + 1, "used")) {
+            outwalk += print_bytes_human(outwalk, (uint64_t)buf.f_bsize * ((uint64_t)buf.f_blocks - (uint64_t)buf.f_bfree), prefix_type);
+            walk += strlen("used");
+        }
+
+        if (BEGINS_WITH(walk + 1, "total")) {
+            outwalk += print_bytes_human(outwalk, (uint64_t)buf.f_bsize * (uint64_t)buf.f_blocks, prefix_type);
+            walk += strlen("total");
+        }
+
+        if (BEGINS_WITH(walk + 1, "avail")) {
+            outwalk += print_bytes_human(outwalk, (uint64_t)buf.f_bsize * (uint64_t)buf.f_bavail, prefix_type);
+            walk += strlen("avail");
+        }
+
+        if (BEGINS_WITH(walk + 1, "percentage_free")) {
+            outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)buf.f_bfree / (double)buf.f_blocks);
+            walk += strlen("percentage_free");
+        }
+
+        if (BEGINS_WITH(walk + 1, "percentage_used_of_avail")) {
+            outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)(buf.f_blocks - buf.f_bavail) / (double)buf.f_blocks);
+            walk += strlen("percentage_used_of_avail");
+        }
+
+        if (BEGINS_WITH(walk + 1, "percentage_used")) {
+            outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)(buf.f_blocks - buf.f_bfree) / (double)buf.f_blocks);
+            walk += strlen("percentage_used");
         }
 
-        for (walk = format; *walk != '\0'; walk++) {
-                if (*walk != '%') {
-                        *(outwalk++) = *walk;
-                        continue;
-                }
-
-                if (BEGINS_WITH(walk+1, "free")) {
-                        outwalk += print_bytes_human(outwalk, (uint64_t)buf.f_bsize * (uint64_t)buf.f_bfree, prefix_type);
-                        walk += strlen("free");
-                }
-
-                if (BEGINS_WITH(walk+1, "used")) {
-                        outwalk += print_bytes_human(outwalk, (uint64_t)buf.f_bsize * ((uint64_t)buf.f_blocks - (uint64_t)buf.f_bfree), prefix_type);
-                        walk += strlen("used");
-                }
-
-                if (BEGINS_WITH(walk+1, "total")) {
-                        outwalk += print_bytes_human(outwalk, (uint64_t)buf.f_bsize * (uint64_t)buf.f_blocks, prefix_type);
-                        walk += strlen("total");
-                }
-
-                if (BEGINS_WITH(walk+1, "avail")) {
-                        outwalk += print_bytes_human(outwalk, (uint64_t)buf.f_bsize * (uint64_t)buf.f_bavail, prefix_type);
-                        walk += strlen("avail");
-                }
-
-                if (BEGINS_WITH(walk+1, "percentage_free")) {
-                        outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)buf.f_bfree / (double)buf.f_blocks);
-                        walk += strlen("percentage_free");
-                }
-
-                if (BEGINS_WITH(walk+1, "percentage_used_of_avail")) {
-                        outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)(buf.f_blocks - buf.f_bavail) / (double)buf.f_blocks);
-                        walk += strlen("percentage_used_of_avail");
-                }
-
-                if (BEGINS_WITH(walk+1, "percentage_used")) {
-                        outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)(buf.f_blocks - buf.f_bfree) / (double)buf.f_blocks);
-                        walk += strlen("percentage_used");
-                }
-
-                if (BEGINS_WITH(walk+1, "percentage_avail")) {
-                        outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)buf.f_bavail / (double)buf.f_blocks);
-                        walk += strlen("percentage_avail");
-                }
+        if (BEGINS_WITH(walk + 1, "percentage_avail")) {
+            outwalk += sprintf(outwalk, "%.01f%%", 100.0 * (double)buf.f_bavail / (double)buf.f_blocks);
+            walk += strlen("percentage_avail");
         }
+    }
 
-        if (colorful_output)
-                END_COLOR;
+    if (colorful_output)
+        END_COLOR;
 
-        *outwalk = '\0';
-        OUTPUT_FULL_TEXT(buffer);
+    *outwalk = '\0';
+    OUTPUT_FULL_TEXT(buffer);
 }
index c446da499fb45bb549b955d6721a402bfb5e9777..af5a75788f7cf17d4d0f3b9154781e83abc0e5d6 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <string.h>
 #include <limits.h>
 #include <stdio.h>
 #if defined(LINUX)
 #include <linux/ethtool.h>
 #include <linux/sockios.h>
-#define PART_ETHSPEED  "E: %s (%d Mbit/s)"
+#define PART_ETHSPEED "E: %s (%d Mbit/s)"
 #endif
 
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
 #include <net/if_media.h>
-#define IFM_TYPE_MATCH(dt, t)                       \
-        (IFM_TYPE((dt)) == 0 || IFM_TYPE((dt)) == IFM_TYPE((t)))
+#define IFM_TYPE_MATCH(dt, t) \
+    (IFM_TYPE((dt)) == 0 || IFM_TYPE((dt)) == IFM_TYPE((t)))
 
-#define PART_ETHSPEED  "E: %s (%s)"
+#define PART_ETHSPEED "E: %s (%s)"
 #endif
 
 #if defined(__OpenBSD__) || defined(__NetBSD__)
 
 static int print_eth_speed(char *outwalk, const char *interface) {
 #if defined(LINUX)
-        /* This code path requires root privileges */
-        int ethspeed = 0;
-        struct ifreq ifr;
-        struct ethtool_cmd ecmd;
-
-        ecmd.cmd = ETHTOOL_GSET;
-        (void)memset(&ifr, 0, sizeof(ifr));
-        ifr.ifr_data = (caddr_t)&ecmd;
-        (void)strcpy(ifr.ifr_name, interface);
-        if (ioctl(general_socket, SIOCETHTOOL, &ifr) == 0) {
-                ethspeed = (ecmd.speed == USHRT_MAX ? 0 : ecmd.speed);
-                return sprintf(outwalk, "%d Mbit/s", ethspeed);
-        } else return sprintf(outwalk, "?");
+    /* This code path requires root privileges */
+    int ethspeed = 0;
+    struct ifreq ifr;
+    struct ethtool_cmd ecmd;
+
+    ecmd.cmd = ETHTOOL_GSET;
+    (void)memset(&ifr, 0, sizeof(ifr));
+    ifr.ifr_data = (caddr_t)&ecmd;
+    (void)strcpy(ifr.ifr_name, interface);
+    if (ioctl(general_socket, SIOCETHTOOL, &ifr) == 0) {
+        ethspeed = (ecmd.speed == USHRT_MAX ? 0 : ecmd.speed);
+        return sprintf(outwalk, "%d Mbit/s", ethspeed);
+    } else
+        return sprintf(outwalk, "?");
 #elif defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(__DragonFly__)
-        char *ethspeed;
-        struct ifmediareq ifm;
-        (void)memset(&ifm, 0, sizeof(ifm));
-        (void)strncpy(ifm.ifm_name, interface, sizeof(ifm.ifm_name));
-        int ret = ioctl(general_socket, SIOCGIFMEDIA, (caddr_t)&ifm);
-
-        /* Get the description of the media type, partially taken from
-         * FreeBSD's ifconfig */
-        const struct ifmedia_description *desc;
-        struct ifmedia_description ifm_subtype_descriptions[] =
-                IFM_SUBTYPE_ETHERNET_DESCRIPTIONS;
-
-        for (desc = ifm_subtype_descriptions;
-             desc->ifmt_string != NULL;
-             desc++) {
-            if (IFM_TYPE_MATCH(desc->ifmt_word, ifm.ifm_active) &&
-                IFM_SUBTYPE(desc->ifmt_word) == IFM_SUBTYPE(ifm.ifm_active))
-                break;
-        }
-        ethspeed = (desc->ifmt_string != NULL ? desc->ifmt_string : "?");
-        return sprintf(outwalk, "%s", ethspeed);
+    char *ethspeed;
+    struct ifmediareq ifm;
+    (void)memset(&ifm, 0, sizeof(ifm));
+    (void)strncpy(ifm.ifm_name, interface, sizeof(ifm.ifm_name));
+    int ret = ioctl(general_socket, SIOCGIFMEDIA, (caddr_t)&ifm);
+
+    /* Get the description of the media type, partially taken from
+     * FreeBSD's ifconfig */
+    const struct ifmedia_description *desc;
+    struct ifmedia_description ifm_subtype_descriptions[] =
+        IFM_SUBTYPE_ETHERNET_DESCRIPTIONS;
+
+    for (desc = ifm_subtype_descriptions;
+         desc->ifmt_string != NULL;
+         desc++) {
+        if (IFM_TYPE_MATCH(desc->ifmt_word, ifm.ifm_active) &&
+            IFM_SUBTYPE(desc->ifmt_word) == IFM_SUBTYPE(ifm.ifm_active))
+            break;
+    }
+    ethspeed = (desc->ifmt_string != NULL ? desc->ifmt_string : "?");
+    return sprintf(outwalk, "%s", ethspeed);
 #elif defined(__OpenBSD__) || defined(__NetBSD__)
-       char *ethspeed;
-       struct ifmediareq ifmr;
+    char *ethspeed;
+    struct ifmediareq ifmr;
 
-       (void) memset(&ifmr, 0, sizeof(ifmr));
-       (void) strlcpy(ifmr.ifm_name, interface, sizeof(ifmr.ifm_name));
+    (void)memset(&ifmr, 0, sizeof(ifmr));
+    (void)strlcpy(ifmr.ifm_name, interface, sizeof(ifmr.ifm_name));
 
-       if (ioctl(general_socket, SIOCGIFMEDIA, (caddr_t)&ifmr) < 0) {
-                if (errno != E2BIG)
-                       return sprintf(outwalk, "?");
-       }
+    if (ioctl(general_socket, SIOCGIFMEDIA, (caddr_t)&ifmr) < 0) {
+        if (errno != E2BIG)
+            return sprintf(outwalk, "?");
+    }
 
-       struct ifmedia_description *desc;
-       struct ifmedia_description ifm_subtype_descriptions[] =
-           IFM_SUBTYPE_DESCRIPTIONS;
+    struct ifmedia_description *desc;
+    struct ifmedia_description ifm_subtype_descriptions[] =
+        IFM_SUBTYPE_DESCRIPTIONS;
 
-        for (desc = ifm_subtype_descriptions; desc->ifmt_string != NULL; desc++) {
-               /*
+    for (desc = ifm_subtype_descriptions; desc->ifmt_string != NULL; desc++) {
+        /*
                 * Skip these non-informative values and go right ahead to the
                 * actual speeds.
                 */
-               if (BEGINS_WITH(desc->ifmt_string, "autoselect") ||
-                   BEGINS_WITH(desc->ifmt_string, "auto"))
-                       continue;
+        if (BEGINS_WITH(desc->ifmt_string, "autoselect") ||
+            BEGINS_WITH(desc->ifmt_string, "auto"))
+            continue;
 
-               if (IFM_TYPE_MATCH(desc->ifmt_word, ifmr.ifm_active) &&
-                   IFM_SUBTYPE(desc->ifmt_word) == IFM_SUBTYPE(ifmr.ifm_active))
-                       break;
-        }
-        ethspeed = (desc->ifmt_string != NULL ? desc->ifmt_string : "?");
-        return sprintf(outwalk, "%s", ethspeed);
+        if (IFM_TYPE_MATCH(desc->ifmt_word, ifmr.ifm_active) &&
+            IFM_SUBTYPE(desc->ifmt_word) == IFM_SUBTYPE(ifmr.ifm_active))
+            break;
+    }
+    ethspeed = (desc->ifmt_string != NULL ? desc->ifmt_string : "?");
+    return sprintf(outwalk, "%s", ethspeed);
 
 #else
-       return sprintf(outwalk, "?");
+    return sprintf(outwalk, "?");
 #endif
 }
 
@@ -111,36 +112,36 @@ static int print_eth_speed(char *outwalk, const char *interface) {
  *
  */
 void print_eth_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down) {
-        const char *walk;
-        const char *ip_address = get_ip_addr(interface);
-        char *outwalk = buffer;
+    const char *walk;
+    const char *ip_address = get_ip_addr(interface);
+    char *outwalk = buffer;
+
+    INSTANCE(interface);
+
+    if (ip_address == NULL) {
+        START_COLOR("color_bad");
+        outwalk += sprintf(outwalk, "%s", format_down);
+        goto out;
+    }
 
-        INSTANCE(interface);
+    START_COLOR("color_good");
 
-        if (ip_address == NULL) {
-                START_COLOR("color_bad");
-                outwalk += sprintf(outwalk, "%s", format_down);
-                goto out;
+    for (walk = format_up; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
         }
 
-        START_COLOR("color_good");
-
-        for (walk = format_up; *walk != '\0'; walk++) {
-                if (*walk != '%') {
-                        *(outwalk++) = *walk;
-                        continue;
-                }
-
-                if (BEGINS_WITH(walk+1, "ip")) {
-                        outwalk += sprintf(outwalk, "%s", ip_address);
-                        walk += strlen("ip");
-                } else if (BEGINS_WITH(walk+1, "speed")) {
-                        outwalk += print_eth_speed(outwalk, interface);
-                        walk += strlen("speed");
-                }
+        if (BEGINS_WITH(walk + 1, "ip")) {
+            outwalk += sprintf(outwalk, "%s", ip_address);
+            walk += strlen("ip");
+        } else if (BEGINS_WITH(walk + 1, "speed")) {
+            outwalk += print_eth_speed(outwalk, interface);
+            walk += strlen("speed");
         }
+    }
 
 out:
-        END_COLOR;
-        OUTPUT_FULL_TEXT(buffer);
+    END_COLOR;
+    OUTPUT_FULL_TEXT(buffer);
 }
index 909a8b261b697c4b1166dc937a2c0628963117d8..09b0992ac6e0b15175c49c05ab276bd1fd37af7e 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
  *
  */
 const char *get_ip_addr(const char *interface) {
-        static char part[512];
-        socklen_t len = sizeof(struct sockaddr_in);
-        memset(part, 0, sizeof(part));
+    static char part[512];
+    socklen_t len = sizeof(struct sockaddr_in);
+    memset(part, 0, sizeof(part));
 
-        struct ifaddrs *ifaddr, *addrp;
-        bool found = false;
+    struct ifaddrs *ifaddr, *addrp;
+    bool found = false;
 
-        getifaddrs(&ifaddr);
+    getifaddrs(&ifaddr);
 
-        if (ifaddr == NULL)
-                return NULL;
+    if (ifaddr == NULL)
+        return NULL;
 
-        /* Skip until we are at the AF_INET address of interface */
-        for (addrp = ifaddr;
+    /* Skip until we are at the AF_INET address of interface */
+    for (addrp = ifaddr;
 
-             (addrp != NULL &&
-              (strcmp(addrp->ifa_name, interface) != 0 ||
-               addrp->ifa_addr == NULL ||
-               addrp->ifa_addr->sa_family != AF_INET));
+         (addrp != NULL &&
+          (strcmp(addrp->ifa_name, interface) != 0 ||
+           addrp->ifa_addr == NULL ||
+           addrp->ifa_addr->sa_family != AF_INET));
 
-             addrp = addrp->ifa_next) {
-                /* Check if the interface is down */
-                if (strcmp(addrp->ifa_name, interface) != 0)
-                        continue;
-                found = true;
-                if ((addrp->ifa_flags & IFF_RUNNING) == 0) {
-                        freeifaddrs(ifaddr);
-                        return NULL;
-                }
+         addrp = addrp->ifa_next) {
+        /* Check if the interface is down */
+        if (strcmp(addrp->ifa_name, interface) != 0)
+            continue;
+        found = true;
+        if ((addrp->ifa_flags & IFF_RUNNING) == 0) {
+            freeifaddrs(ifaddr);
+            return NULL;
         }
+    }
 
-        if (addrp == NULL) {
-                freeifaddrs(ifaddr);
-                return (found ? "no IP" : NULL);
-        }
-
-        int ret;
-        if ((ret = getnameinfo(addrp->ifa_addr, len, part, sizeof(part), NULL, 0, NI_NUMERICHOST)) != 0) {
-                fprintf(stderr, "i3status: getnameinfo(): %s\n", gai_strerror(ret));
-                freeifaddrs(ifaddr);
-                return "no IP";
-        }
+    if (addrp == NULL) {
+        freeifaddrs(ifaddr);
+        return (found ? "no IP" : NULL);
+    }
 
+    int ret;
+    if ((ret = getnameinfo(addrp->ifa_addr, len, part, sizeof(part), NULL, 0, NI_NUMERICHOST)) != 0) {
+        fprintf(stderr, "i3status: getnameinfo(): %s\n", gai_strerror(ret));
         freeifaddrs(ifaddr);
-        return part;
-}
+        return "no IP";
+    }
 
+    freeifaddrs(ifaddr);
+    return part;
+}
index 7ff9c97120aa16bd4f94918bb4f2fcb76dcb414d..a24119f74797a5414653745043a73c49114595fd 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <sys/types.h>
 #include <sys/socket.h>
 #include <netinet/in.h>
 #include "i3status.h"
 
 static char *get_sockname(struct addrinfo *addr) {
-        static char buf[INET6_ADDRSTRLEN+1];
-        struct sockaddr_storage local;
-        int ret;
-        int fd;
-
-        if ((fd = socket(addr->ai_family, SOCK_DGRAM, 0)) == -1) {
-                perror("socket()");
-                return NULL;
-        }
-
-        /* Since the socket was created with SOCK_DGRAM, this is
-         * actually not establishing a connection or generating
-         * any other network traffic. Instead, as a side-effect,
-         * it saves the local address with which packets would
-         * be sent to the destination. */
-        if (connect(fd, addr->ai_addr, addr->ai_addrlen) == -1) {
-                /* We don’t display the error here because most
-                 * likely, there just is no IPv6 connectivity.
-                 * Thus, don’t spam the user’s console but just
-                 * try the next address. */
-                (void)close(fd);
-                return NULL;
-        }
+    static char buf[INET6_ADDRSTRLEN + 1];
+    struct sockaddr_storage local;
+    int ret;
+    int fd;
 
-        socklen_t local_len = sizeof(struct sockaddr_storage);
-        if (getsockname(fd, (struct sockaddr*)&local, &local_len) == -1) {
-                perror("getsockname()");
-                (void)close(fd);
-                return NULL;
-        }
+    if ((fd = socket(addr->ai_family, SOCK_DGRAM, 0)) == -1) {
+        perror("socket()");
+        return NULL;
+    }
+
+    /* Since the socket was created with SOCK_DGRAM, this is
+     * actually not establishing a connection or generating
+     * any other network traffic. Instead, as a side-effect,
+     * it saves the local address with which packets would
+     * be sent to the destination. */
+    if (connect(fd, addr->ai_addr, addr->ai_addrlen) == -1) {
+        /* We don’t display the error here because most
+         * likely, there just is no IPv6 connectivity.
+         * Thus, don’t spam the user’s console but just
+         * try the next address. */
+        (void)close(fd);
+        return NULL;
+    }
 
-        memset(buf, 0, INET6_ADDRSTRLEN + 1);
-        if ((ret = getnameinfo((struct sockaddr*)&local, local_len,
-                               buf, sizeof(buf), NULL, 0,
-                               NI_NUMERICHOST)) != 0) {
-                fprintf(stderr, "i3status: getnameinfo(): %s\n", gai_strerror(ret));
-                (void)close(fd);
-                return NULL;
-        }
+    socklen_t local_len = sizeof(struct sockaddr_storage);
+    if (getsockname(fd, (struct sockaddr *)&local, &local_len) == -1) {
+        perror("getsockname()");
+        (void)close(fd);
+        return NULL;
+    }
 
+    memset(buf, 0, INET6_ADDRSTRLEN + 1);
+    if ((ret = getnameinfo((struct sockaddr *)&local, local_len,
+                           buf, sizeof(buf), NULL, 0,
+                           NI_NUMERICHOST)) != 0) {
+        fprintf(stderr, "i3status: getnameinfo(): %s\n", gai_strerror(ret));
         (void)close(fd);
-        return buf;
+        return NULL;
+    }
+
+    (void)close(fd);
+    return buf;
 }
 
 /*
@@ -65,82 +65,82 @@ static char *get_sockname(struct addrinfo *addr) {
  * The char * is statically allocated and mustn't be freed
  */
 static char *get_ipv6_addr(void) {
-        struct addrinfo hints;
-        struct addrinfo *result, *resp;
-        static struct addrinfo *cached = NULL;
-
-        /* To save dns lookups (if they are not cached locally) and creating
-         * sockets, we save the fd and keep it open. */
-        if (cached != NULL)
-                return get_sockname(cached);
-
-        memset(&hints, 0, sizeof(struct addrinfo));
-        hints.ai_family = AF_INET6;
-        hints.ai_socktype = SOCK_DGRAM;
-
-        /* We use the public IPv6 of the K root server here. It doesn’t matter
-         * which IPv6 address we use (we don’t even send any packets), as long
-         * as it’s considered global by the kernel.
-         * NB: We don’t use a hostname since that would trigger a DNS lookup.
-         * By using an IPv6 address, getaddrinfo() will *not* do a DNS lookup,
-         * but return the address in the appropriate struct. */
-        if (getaddrinfo("2001:7fd::1", "domain", &hints, &result) != 0) {
-                /* We don’t display the error here because most
-                 * likely, there just is no connectivity.
-                 * Thus, don’t spam the user’s console. */
-                return NULL;
-        }
-
-        for (resp = result; resp != NULL; resp = resp->ai_next) {
-                char *addr_string = get_sockname(resp);
-                /* If we could not get our own address and there is more than
-                 * one result for resolving k.root-servers.net, we cannot
-                 * cache. Otherwise, no matter if we got IPv6 connectivity or
-                 * not, we will cache the (single) result and are done. */
-                if (!addr_string && result->ai_next != NULL)
-                        continue;
-
-                if ((cached = malloc(sizeof(struct addrinfo))) == NULL)
-                        return NULL;
-                memcpy(cached, resp, sizeof(struct addrinfo));
-                if ((cached->ai_addr = malloc(resp->ai_addrlen)) == NULL) {
-                        cached = NULL;
-                        return NULL;
-                }
-                memcpy(cached->ai_addr, resp->ai_addr, resp->ai_addrlen);
-                freeaddrinfo(result);
-                return addr_string;
+    struct addrinfo hints;
+    struct addrinfo *result, *resp;
+    static struct addrinfo *cached = NULL;
+
+    /* To save dns lookups (if they are not cached locally) and creating
+     * sockets, we save the fd and keep it open. */
+    if (cached != NULL)
+        return get_sockname(cached);
+
+    memset(&hints, 0, sizeof(struct addrinfo));
+    hints.ai_family = AF_INET6;
+    hints.ai_socktype = SOCK_DGRAM;
+
+    /* We use the public IPv6 of the K root server here. It doesn’t matter
+     * which IPv6 address we use (we don’t even send any packets), as long
+     * as it’s considered global by the kernel.
+     * NB: We don’t use a hostname since that would trigger a DNS lookup.
+     * By using an IPv6 address, getaddrinfo() will *not* do a DNS lookup,
+     * but return the address in the appropriate struct. */
+    if (getaddrinfo("2001:7fd::1", "domain", &hints, &result) != 0) {
+        /* We don’t display the error here because most
+         * likely, there just is no connectivity.
+         * Thus, don’t spam the user’s console. */
+        return NULL;
+    }
+
+    for (resp = result; resp != NULL; resp = resp->ai_next) {
+        char *addr_string = get_sockname(resp);
+        /* If we could not get our own address and there is more than
+         * one result for resolving k.root-servers.net, we cannot
+         * cache. Otherwise, no matter if we got IPv6 connectivity or
+         * not, we will cache the (single) result and are done. */
+        if (!addr_string && result->ai_next != NULL)
+            continue;
+
+        if ((cached = malloc(sizeof(struct addrinfo))) == NULL)
+            return NULL;
+        memcpy(cached, resp, sizeof(struct addrinfo));
+        if ((cached->ai_addr = malloc(resp->ai_addrlen)) == NULL) {
+            cached = NULL;
+            return NULL;
         }
-
+        memcpy(cached->ai_addr, resp->ai_addr, resp->ai_addrlen);
         freeaddrinfo(result);
-        return NULL;
+        return addr_string;
+    }
+
+    freeaddrinfo(result);
+    return NULL;
 }
 
 void print_ipv6_info(yajl_gen json_gen, char *buffer, const char *format_up, const char *format_down) {
-        const char *walk;
-        char *addr_string = get_ipv6_addr();
-        char *outwalk = buffer;
-
-        if (addr_string == NULL) {
-                START_COLOR("color_bad");
-                outwalk += sprintf(outwalk, "%s", format_down);
-                END_COLOR;
-                OUTPUT_FULL_TEXT(buffer);
-                return;
-        }
+    const char *walk;
+    char *addr_string = get_ipv6_addr();
+    char *outwalk = buffer;
 
-        START_COLOR("color_good");
-        for (walk = format_up; *walk != '\0'; walk++) {
-                if (*walk != '%') {
-                        *(outwalk++) = *walk;
-                        continue;
-                }
-
-                if (BEGINS_WITH(walk+1, "ip")) {
-                        outwalk += sprintf(outwalk, "%s", addr_string);
-                        walk += strlen("ip");
-                }
-        }
+    if (addr_string == NULL) {
+        START_COLOR("color_bad");
+        outwalk += sprintf(outwalk, "%s", format_down);
         END_COLOR;
         OUTPUT_FULL_TEXT(buffer);
+        return;
+    }
+
+    START_COLOR("color_good");
+    for (walk = format_up; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
+        }
+
+        if (BEGINS_WITH(walk + 1, "ip")) {
+            outwalk += sprintf(outwalk, "%s", addr_string);
+            walk += strlen("ip");
+        }
+    }
+    END_COLOR;
+    OUTPUT_FULL_TEXT(buffer);
 }
index 6e61ae694bcee3b52746c294ce14a577c170fda0..7ba4ae1a9534428cf3181f592b776130fe0b788f 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include "i3status.h"
 #include <stdlib.h>
 #include <stdio.h>
@@ -7,51 +7,51 @@
 #include <yajl/yajl_version.h>
 
 void print_load(yajl_gen json_gen, char *buffer, const char *format, const float max_threshold) {
-        char *outwalk = buffer;
-        /* Get load */
+    char *outwalk = buffer;
+/* Get load */
 
 #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__) || defined(linux) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__APPLE__) || defined(sun) || defined(__DragonFly__)
-        double loadavg[3];
-        const char *walk;
-        bool colorful_output = false;
-
-        if (getloadavg(loadavg, 3) == -1)
-                goto error;
-
-        for (walk = format; *walk != '\0'; walk++) {
-                if (*walk != '%') {
-                        *(outwalk++) = *walk;
-                        continue;
-                }
-                if (loadavg[0] >= max_threshold) {
-                        START_COLOR("color_bad");
-                        colorful_output = true;
-                }
-
-                if (BEGINS_WITH(walk+1, "1min")) {
-                        outwalk += sprintf(outwalk, "%1.2f", loadavg[0]);
-                        walk += strlen("1min");
-                }
-
-                if (BEGINS_WITH(walk+1, "5min")) {
-                        outwalk += sprintf(outwalk, "%1.2f", loadavg[1]);
-                        walk += strlen("5min");
-                }
-
-                if (BEGINS_WITH(walk+1, "15min")) {
-                        outwalk += sprintf(outwalk, "%1.2f", loadavg[2]);
-                        walk += strlen("15min");
-                }
-                if (colorful_output)
-                        END_COLOR;
+    double loadavg[3];
+    const char *walk;
+    bool colorful_output = false;
+
+    if (getloadavg(loadavg, 3) == -1)
+        goto error;
+
+    for (walk = format; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
+        }
+        if (loadavg[0] >= max_threshold) {
+            START_COLOR("color_bad");
+            colorful_output = true;
+        }
+
+        if (BEGINS_WITH(walk + 1, "1min")) {
+            outwalk += sprintf(outwalk, "%1.2f", loadavg[0]);
+            walk += strlen("1min");
+        }
+
+        if (BEGINS_WITH(walk + 1, "5min")) {
+            outwalk += sprintf(outwalk, "%1.2f", loadavg[1]);
+            walk += strlen("5min");
+        }
+
+        if (BEGINS_WITH(walk + 1, "15min")) {
+            outwalk += sprintf(outwalk, "%1.2f", loadavg[2]);
+            walk += strlen("15min");
         }
+        if (colorful_output)
+            END_COLOR;
+    }
 
-        *outwalk = '\0';
-        OUTPUT_FULL_TEXT(buffer);
+    *outwalk = '\0';
+    OUTPUT_FULL_TEXT(buffer);
 
-        return;
+    return;
 error:
 #endif
-        OUTPUT_FULL_TEXT("cant read load");
-        (void)fputs("i3status: Cannot read system load using getloadavg()\n", stderr);
+    OUTPUT_FULL_TEXT("cant read load");
+    (void)fputs("i3status: Cannot read system load using getloadavg()\n", stderr);
 }
index a2fcb149b041dcb163e1f71761c8e7ea49c3c606..1b231e6f78ef6afa140852bfa1c5cde23718ce1e 100644 (file)
@@ -1,3 +1,4 @@
+// vim:ts=4:sw=4:expandtab
 #include <stdio.h>
 #include <string.h>
 #include <yajl/yajl_gen.h>
@@ -6,30 +7,30 @@
 #include "i3status.h"
 
 void print_path_exists(yajl_gen json_gen, char *buffer, const char *title, const char *path, const char *format) {
-        const char *walk;
-        char *outwalk = buffer;
-        struct stat st;
-        const bool exists = (stat(path, &st) == 0);
+    const char *walk;
+    char *outwalk = buffer;
+    struct stat st;
+    const bool exists = (stat(path, &st) == 0);
 
-        INSTANCE(path);
+    INSTANCE(path);
 
-        START_COLOR((exists ? "color_good" : "color_bad"));
+    START_COLOR((exists ? "color_good" : "color_bad"));
 
-        for (walk = format; *walk != '\0'; walk++) {
-                if (*walk != '%') {
-                        *(outwalk++) = *walk;
-                        continue;
-                }
+    for (walk = format; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
+        }
 
-                if (BEGINS_WITH(walk+1, "title")) {
-                        outwalk += sprintf(outwalk, "%s", title);
-                        walk += strlen("title");
-                } else if (BEGINS_WITH(walk+1, "status")) {
-                        outwalk += sprintf(outwalk, "%s", (exists ? "yes" : "no"));
-                        walk += strlen("status");
-                }
+        if (BEGINS_WITH(walk + 1, "title")) {
+            outwalk += sprintf(outwalk, "%s", title);
+            walk += strlen("title");
+        } else if (BEGINS_WITH(walk + 1, "status")) {
+            outwalk += sprintf(outwalk, "%s", (exists ? "yes" : "no"));
+            walk += strlen("status");
         }
+    }
 
-        END_COLOR;
-        OUTPUT_FULL_TEXT(buffer);
+    END_COLOR;
+    OUTPUT_FULL_TEXT(buffer);
 }
index bc0d6dc1635037bd5fbf54b7ec04f2f0131ba2dd..3d1ec3fa4922a62248ecf83e1c6782fb84acc09d 100644 (file)
@@ -1,3 +1,4 @@
+// vim:ts=4:sw=4:expandtab
 #include <stdio.h>
 #include <string.h>
 #include <yajl/yajl_gen.h>
@@ -5,29 +6,29 @@
 #include "i3status.h"
 
 void print_run_watch(yajl_gen json_gen, char *buffer, const char *title, const char *pidfile, const char *format) {
-       bool running = process_runs(pidfile);
-       const char *walk;
-       char *outwalk = buffer;
+    bool running = process_runs(pidfile);
+    const char *walk;
+    char *outwalk = buffer;
 
-       INSTANCE(pidfile);
+    INSTANCE(pidfile);
 
-       START_COLOR((running ? "color_good" : "color_bad"));
+    START_COLOR((running ? "color_good" : "color_bad"));
 
-        for (walk = format; *walk != '\0'; walk++) {
-                if (*walk != '%') {
-                       *(outwalk++) = *walk;
-                        continue;
-                }
+    for (walk = format; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
+        }
 
-                if (BEGINS_WITH(walk+1, "title")) {
-                       outwalk += sprintf(outwalk, "%s", title);
-                        walk += strlen("title");
-                } else if (BEGINS_WITH(walk+1, "status")) {
-                       outwalk += sprintf(outwalk, "%s", (running ? "yes" : "no"));
-                        walk += strlen("status");
-                }
+        if (BEGINS_WITH(walk + 1, "title")) {
+            outwalk += sprintf(outwalk, "%s", title);
+            walk += strlen("title");
+        } else if (BEGINS_WITH(walk + 1, "status")) {
+            outwalk += sprintf(outwalk, "%s", (running ? "yes" : "no"));
+            walk += strlen("status");
         }
+    }
 
-       END_COLOR;
-       OUTPUT_FULL_TEXT(buffer);
+    END_COLOR;
+    OUTPUT_FULL_TEXT(buffer);
 }
index d19d08b86daed1a14ee2c3c691b73ace16049c73..edbc828588a380643930e1e986d14751c66bd52c 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <time.h>
 #include <stdio.h>
 #include <stdlib.h>
@@ -13,34 +13,34 @@ static const char *local_timezone = NULL;
 static const char *current_timezone = NULL;
 
 void set_timezone(const char *tz) {
-        if (!local_timezone_init) {
-                /* First call, initialize. */
-                local_timezone = getenv("TZ");
-                local_timezone_init = true;
-        }
-        if (tz == NULL || tz[0] == '\0') {
-                /* User wants localtime. */
-                tz = local_timezone;
-        }
-        if (tz != current_timezone) {
-                if (tz) {
-                        setenv("TZ", tz, 1);
-                } else {
-                        unsetenv("TZ");
-                }
-                tzset();
-                current_timezone = tz;
+    if (!local_timezone_init) {
+        /* First call, initialize. */
+        local_timezone = getenv("TZ");
+        local_timezone_init = true;
+    }
+    if (tz == NULL || tz[0] == '\0') {
+        /* User wants localtime. */
+        tz = local_timezone;
+    }
+    if (tz != current_timezone) {
+        if (tz) {
+            setenv("TZ", tz, 1);
+        } else {
+            unsetenv("TZ");
         }
+        tzset();
+        current_timezone = tz;
+    }
 }
 
 void print_time(yajl_gen json_gen, char *buffer, const char *format, const char *tz, time_t t) {
-        char *outwalk = buffer;
-        struct tm tm;
+    char *outwalk = buffer;
+    struct tm tm;
 
-        /* Convert time and format output. */
-        set_timezone(tz);
-        localtime_r(&t, &tm);
-        outwalk += strftime(outwalk, 4095, format, &tm);
-        *outwalk = '\0';
-        OUTPUT_FULL_TEXT(buffer);
+    /* Convert time and format output. */
+    set_timezone(tz);
+    localtime_r(&t, &tm);
+    outwalk += strftime(outwalk, 4095, format, &tm);
+    *outwalk = '\0';
+    OUTPUT_FULL_TEXT(buffer);
 }
index 93868e36da6f3353fbd79ae13f038f4bf4f606a8..ef1c913212b5eda50f96d33fb704649555996b0b 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <time.h>
 #include <string.h>
 #include <stdlib.h>
 #include "queue.h"
 
 void print_volume(yajl_gen json_gen, char *buffer, const char *fmt, const char *fmt_muted, const char *device, const char *mixer, int mixer_idx) {
-        char *outwalk = buffer;
-       int pbval = 1;
-
-        /* Printing volume only works with ALSA at the moment */
-        if (output_format == O_I3BAR) {
-                char *instance;
-                asprintf(&instance, "%s.%s.%d", device, mixer, mixer_idx);
-                INSTANCE(instance);
-                free(instance);
-        }
+    char *outwalk = buffer;
+    int pbval = 1;
+
+    /* Printing volume only works with ALSA at the moment */
+    if (output_format == O_I3BAR) {
+        char *instance;
+        asprintf(&instance, "%s.%s.%d", device, mixer, mixer_idx);
+        INSTANCE(instance);
+        free(instance);
+    }
 #ifdef LINUX
-       int err;
-       snd_mixer_t *m;
-       snd_mixer_selem_id_t *sid;
-       snd_mixer_elem_t *elem;
-       long min, max, val;
-       int avg;
-
-       if ((err = snd_mixer_open(&m, 0)) < 0) {
-               fprintf(stderr, "i3status: ALSA: Cannot open mixer: %s\n", snd_strerror(err));
-               goto out;
-       }
-
-       /* Attach this mixer handle to the given device */
-       if ((err = snd_mixer_attach(m, device)) < 0) {
-               fprintf(stderr, "i3status: ALSA: Cannot attach mixer to device: %s\n", snd_strerror(err));
-               snd_mixer_close(m);
-               goto out;
-       }
-
-       /* Register this mixer */
-       if ((err = snd_mixer_selem_register(m, NULL, NULL)) < 0) {
-               fprintf(stderr, "i3status: ALSA: snd_mixer_selem_register: %s\n", snd_strerror(err));
-               snd_mixer_close(m);
-               goto out;
-       }
-
-       if ((err = snd_mixer_load(m)) < 0) {
-               fprintf(stderr, "i3status: ALSA: snd_mixer_load: %s\n", snd_strerror(err));
-               snd_mixer_close(m);
-               goto out;
-       }
-
-       snd_mixer_selem_id_malloc(&sid);
-       if (sid == NULL) {
-               snd_mixer_close(m);
-               goto out;
-       }
-
-       /* Find the given mixer */
-       snd_mixer_selem_id_set_index(sid, mixer_idx);
-       snd_mixer_selem_id_set_name(sid, mixer);
-       if (!(elem = snd_mixer_find_selem(m, sid))) {
-               fprintf(stderr, "i3status: ALSA: Cannot find mixer %s (index %i)\n",
-                       snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid));
-               snd_mixer_close(m);
-               snd_mixer_selem_id_free(sid);
-               goto out;
-       }
-
-       /* Get the volume range to convert the volume later */
-       snd_mixer_selem_get_playback_volume_range(elem, &min, &max);
-
-       snd_mixer_handle_events (m);
-       snd_mixer_selem_get_playback_volume (elem, 0, &val);
-       if (max != 100) {
-               float avgf = ((float)val / max) * 100;
-               avg = (int)avgf;
-               avg = (avgf - avg < 0.5 ? avg : (avg+1));
-       } else avg = (int)val;
-
-       /* Check for mute */
-       if (snd_mixer_selem_has_playback_switch(elem)) {
-               if ((err = snd_mixer_selem_get_playback_switch(elem, 0, &pbval)) < 0)
-                       fprintf (stderr, "i3status: ALSA: playback_switch: %s\n", snd_strerror(err));
-               if (!pbval)  {
-                       START_COLOR("color_degraded");
-                       fmt = fmt_muted;
-               }
-       }
-
-       snd_mixer_close(m);
-       snd_mixer_selem_id_free(sid);
-
-       const char *walk = fmt;
-       for (; *walk != '\0'; walk++) {
-               if (*walk != '%') {
-                        *(outwalk++) = *walk;
-                       continue;
-               }
-               if (BEGINS_WITH(walk+1, "%")) {
-                       outwalk += sprintf(outwalk, "%%");
-                       walk += strlen("%");
-               }
-               if (BEGINS_WITH(walk+1, "volume")) {
-                       outwalk += sprintf(outwalk, "%d%%", avg);
-                       walk += strlen("volume");
-               }
-       }
+    int err;
+    snd_mixer_t *m;
+    snd_mixer_selem_id_t *sid;
+    snd_mixer_elem_t *elem;
+    long min, max, val;
+    int avg;
+
+    if ((err = snd_mixer_open(&m, 0)) < 0) {
+        fprintf(stderr, "i3status: ALSA: Cannot open mixer: %s\n", snd_strerror(err));
+        goto out;
+    }
+
+    /* Attach this mixer handle to the given device */
+    if ((err = snd_mixer_attach(m, device)) < 0) {
+        fprintf(stderr, "i3status: ALSA: Cannot attach mixer to device: %s\n", snd_strerror(err));
+        snd_mixer_close(m);
+        goto out;
+    }
+
+    /* Register this mixer */
+    if ((err = snd_mixer_selem_register(m, NULL, NULL)) < 0) {
+        fprintf(stderr, "i3status: ALSA: snd_mixer_selem_register: %s\n", snd_strerror(err));
+        snd_mixer_close(m);
+        goto out;
+    }
+
+    if ((err = snd_mixer_load(m)) < 0) {
+        fprintf(stderr, "i3status: ALSA: snd_mixer_load: %s\n", snd_strerror(err));
+        snd_mixer_close(m);
+        goto out;
+    }
+
+    snd_mixer_selem_id_malloc(&sid);
+    if (sid == NULL) {
+        snd_mixer_close(m);
+        goto out;
+    }
+
+    /* Find the given mixer */
+    snd_mixer_selem_id_set_index(sid, mixer_idx);
+    snd_mixer_selem_id_set_name(sid, mixer);
+    if (!(elem = snd_mixer_find_selem(m, sid))) {
+        fprintf(stderr, "i3status: ALSA: Cannot find mixer %s (index %i)\n",
+                snd_mixer_selem_id_get_name(sid), snd_mixer_selem_id_get_index(sid));
+        snd_mixer_close(m);
+        snd_mixer_selem_id_free(sid);
+        goto out;
+    }
+
+    /* Get the volume range to convert the volume later */
+    snd_mixer_selem_get_playback_volume_range(elem, &min, &max);
+
+    snd_mixer_handle_events(m);
+    snd_mixer_selem_get_playback_volume(elem, 0, &val);
+    if (max != 100) {
+        float avgf = ((float)val / max) * 100;
+        avg = (int)avgf;
+        avg = (avgf - avg < 0.5 ? avg : (avg + 1));
+    } else
+        avg = (int)val;
+
+    /* Check for mute */
+    if (snd_mixer_selem_has_playback_switch(elem)) {
+        if ((err = snd_mixer_selem_get_playback_switch(elem, 0, &pbval)) < 0)
+            fprintf(stderr, "i3status: ALSA: playback_switch: %s\n", snd_strerror(err));
+        if (!pbval) {
+            START_COLOR("color_degraded");
+            fmt = fmt_muted;
+        }
+    }
+
+    snd_mixer_close(m);
+    snd_mixer_selem_id_free(sid);
+
+    const char *walk = fmt;
+    for (; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
+        }
+        if (BEGINS_WITH(walk + 1, "%")) {
+            outwalk += sprintf(outwalk, "%%");
+            walk += strlen("%");
+        }
+        if (BEGINS_WITH(walk + 1, "volume")) {
+            outwalk += sprintf(outwalk, "%d%%", avg);
+            walk += strlen("volume");
+        }
+    }
 #endif
 #if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
-        char *mixerpath;
-        char defaultmixer[] = "/dev/mixer";
-        int mixfd, vol, devmask = 0;
-        pbval = 1;
-
-        if (mixer_idx > 0)
-                asprintf(&mixerpath, "/dev/mixer%d", mixer_idx);
-        else
-                mixerpath = defaultmixer;
-
-        if ((mixfd = open(mixerpath, O_RDWR)) < 0)
-                return;
-
-        if (mixer_idx > 0)
-                free(mixerpath);
-
-        if (ioctl(mixfd, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)
-                return;
-        if (ioctl(mixfd, MIXER_READ(0),&vol) == -1)
-                return;
-
-        if (((vol & 0x7f) == 0) && (((vol >> 8) & 0x7f) == 0)) {
-                START_COLOR("color_degraded");
-                pbval = 0;
+    char *mixerpath;
+    char defaultmixer[] = "/dev/mixer";
+    int mixfd, vol, devmask = 0;
+    pbval = 1;
+
+    if (mixer_idx > 0)
+        asprintf(&mixerpath, "/dev/mixer%d", mixer_idx);
+    else
+        mixerpath = defaultmixer;
+
+    if ((mixfd = open(mixerpath, O_RDWR)) < 0)
+        return;
+
+    if (mixer_idx > 0)
+        free(mixerpath);
+
+    if (ioctl(mixfd, SOUND_MIXER_READ_DEVMASK, &devmask) == -1)
+        return;
+    if (ioctl(mixfd, MIXER_READ(0), &vol) == -1)
+        return;
+
+    if (((vol & 0x7f) == 0) && (((vol >> 8) & 0x7f) == 0)) {
+        START_COLOR("color_degraded");
+        pbval = 0;
+    }
+
+    const char *walk = fmt;
+    for (; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
         }
-
-        const char *walk = fmt;
-        for (; *walk != '\0'; walk++) {
-                if (*walk != '%') {
-                        *(outwalk++) = *walk;
-                        continue;
-                }
-                if (BEGINS_WITH(walk+1, "%")) {
-                        outwalk += sprintf(outwalk, "%%");
-                        walk += strlen("%");
-                }
-                if (BEGINS_WITH(walk+1, "volume")) {
-                        outwalk += sprintf(outwalk, "%d%%", vol & 0x7f);
-                        walk += strlen("volume");
-                }
+        if (BEGINS_WITH(walk + 1, "%")) {
+            outwalk += sprintf(outwalk, "%%");
+            walk += strlen("%");
+        }
+        if (BEGINS_WITH(walk + 1, "volume")) {
+            outwalk += sprintf(outwalk, "%d%%", vol & 0x7f);
+            walk += strlen("volume");
         }
-        close(mixfd);
+    }
+    close(mixfd);
 #endif
 
 out:
-        *outwalk = '\0';
-        if (!pbval)
-               END_COLOR;
-        OUTPUT_FULL_TEXT(buffer);
+    *outwalk = '\0';
+    if (!pbval)
+        END_COLOR;
+    OUTPUT_FULL_TEXT(buffer);
 }
index 7f7c52e3f615e9cdf159dc81785b00c0304df7d7..eae942b9c6dfa95271b7e8444f068398a8b2ab64 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <stdio.h>
 #include <string.h>
 #include <yajl/yajl_gen.h>
 
 #include "i3status.h"
 
-#define WIRELESS_INFO_FLAG_HAS_ESSID                    (1 << 0)
-#define WIRELESS_INFO_FLAG_HAS_QUALITY                  (1 << 1)
-#define WIRELESS_INFO_FLAG_HAS_SIGNAL                   (1 << 2)
-#define WIRELESS_INFO_FLAG_HAS_NOISE                    (1 << 3)
-#define WIRELESS_INFO_FLAG_HAS_FREQUENCY                (1 << 4)
+#define WIRELESS_INFO_FLAG_HAS_ESSID (1 << 0)
+#define WIRELESS_INFO_FLAG_HAS_QUALITY (1 << 1)
+#define WIRELESS_INFO_FLAG_HAS_SIGNAL (1 << 2)
+#define WIRELESS_INFO_FLAG_HAS_NOISE (1 << 3)
+#define WIRELESS_INFO_FLAG_HAS_FREQUENCY (1 << 4)
 
 #define PERCENT_VALUE(value, total) ((int)(value * 100 / (float)total + 0.5f))
 
 typedef struct {
-        int flags;
-        char essid[IW_ESSID_MAX_SIZE + 1];
-        int quality;
-        int quality_max;
-        int quality_average;
-        int signal_level;
-        int signal_level_max;
-        int noise_level;
-        int noise_level_max;
-        int bitrate;
-        double frequency;
+    int flags;
+    char essid[IW_ESSID_MAX_SIZE + 1];
+    int quality;
+    int quality_max;
+    int quality_average;
+    int signal_level;
+    int signal_level_max;
+    int noise_level;
+    int noise_level_max;
+    int bitrate;
+    double frequency;
 } wireless_info_t;
 
 static int get_wireless_info(const char *interface, wireless_info_t *info) {
-        memset(info, 0, sizeof(wireless_info_t));
+    memset(info, 0, sizeof(wireless_info_t));
 
 #ifdef LINUX
-        int skfd = iw_sockets_open();
-        if (skfd < 0) {
-                perror("iw_sockets_open");
-                return 0;
-        }
-
-        wireless_config wcfg;
-        if (iw_get_basic_config(skfd, interface, &wcfg) < 0) {
-            close(skfd);
-            return 0;
-        }
-
-        if (wcfg.has_essid && wcfg.essid_on) {
-                info->flags |= WIRELESS_INFO_FLAG_HAS_ESSID;
-                strncpy(&info->essid[0], wcfg.essid, IW_ESSID_MAX_SIZE);
-                info->essid[IW_ESSID_MAX_SIZE] = '\0';
-        }
-
-        if (wcfg.has_freq) {
-                info->frequency = wcfg.freq;
-                info->flags |= WIRELESS_INFO_FLAG_HAS_FREQUENCY;
-        }
-
-        /* If the function iw_get_stats does not return proper stats, the
-           wifi is considered as down.
-           Since ad-hoc network does not have theses stats, we need to return
-           here for this mode. */
-        if (wcfg.mode == 1) {
-                close(skfd);
-                return 1;
-        }
+    int skfd = iw_sockets_open();
+    if (skfd < 0) {
+        perror("iw_sockets_open");
+        return 0;
+    }
+
+    wireless_config wcfg;
+    if (iw_get_basic_config(skfd, interface, &wcfg) < 0) {
+        close(skfd);
+        return 0;
+    }
 
-        /* Wireless quality is a relative value in a driver-specific range.
-           Signal and noise level can be either relative or absolute values
-           in dBm. Furthermore, noise and quality can be expressed directly
-           in dBm or in RCPI (802.11k), which we convert to dBm. When those
-           values are expressed directly in dBm, they range from -192 to 63,
-           and since the values are packed into 8 bits, we need to perform
-           8-bit arithmetic on them. Assume absolute values if everything
-           else fails (driver bug). */
-
-        iwrange range;
-        if (iw_get_range_info(skfd, interface, &range) < 0) {
-                close(skfd);
-                return 0;
-        }
+    if (wcfg.has_essid && wcfg.essid_on) {
+        info->flags |= WIRELESS_INFO_FLAG_HAS_ESSID;
+        strncpy(&info->essid[0], wcfg.essid, IW_ESSID_MAX_SIZE);
+        info->essid[IW_ESSID_MAX_SIZE] = '\0';
+    }
+
+    if (wcfg.has_freq) {
+        info->frequency = wcfg.freq;
+        info->flags |= WIRELESS_INFO_FLAG_HAS_FREQUENCY;
+    }
+
+    /* If the function iw_get_stats does not return proper stats, the
+     * wifi is considered as down.
+     * Since ad-hoc network does not have theses stats, we need to return
+     * here for this mode. */
+    if (wcfg.mode == 1) {
+        close(skfd);
+        return 1;
+    }
+
+    /* Wireless quality is a relative value in a driver-specific range.
+     * Signal and noise level can be either relative or absolute values
+     * in dBm. Furthermore, noise and quality can be expressed directly
+     * in dBm or in RCPI (802.11k), which we convert to dBm. When those
+     * values are expressed directly in dBm, they range from -192 to 63,
+     * and since the values are packed into 8 bits, we need to perform
+     * 8-bit arithmetic on them. Assume absolute values if everything
+     * else fails (driver bug). */
+
+    iwrange range;
+    if (iw_get_range_info(skfd, interface, &range) < 0) {
+        close(skfd);
+        return 0;
+    }
 
-        iwstats stats;
-        if (iw_get_stats(skfd, interface, &stats, &range, 1) < 0) {
-                close(skfd);
-                return 0;
+    iwstats stats;
+    if (iw_get_stats(skfd, interface, &stats, &range, 1) < 0) {
+        close(skfd);
+        return 0;
+    }
+
+    if (stats.qual.level != 0 || (stats.qual.updated & (IW_QUAL_DBM | IW_QUAL_RCPI))) {
+        if (!(stats.qual.updated & IW_QUAL_QUAL_INVALID)) {
+            info->quality = stats.qual.qual;
+            info->quality_max = range.max_qual.qual;
+            info->quality_average = range.avg_qual.qual;
+            info->flags |= WIRELESS_INFO_FLAG_HAS_QUALITY;
         }
 
-        if (stats.qual.level != 0 || (stats.qual.updated & (IW_QUAL_DBM | IW_QUAL_RCPI))) {
-                if (!(stats.qual.updated & IW_QUAL_QUAL_INVALID)) {
-                        info->quality = stats.qual.qual;
-                        info->quality_max = range.max_qual.qual;
-                        info->quality_average = range.avg_qual.qual;
-                        info->flags |= WIRELESS_INFO_FLAG_HAS_QUALITY;
-                }
-
-                if (stats.qual.updated & IW_QUAL_RCPI) {
-                        if (!(stats.qual.updated & IW_QUAL_LEVEL_INVALID)) {
-                                info->signal_level = stats.qual.level / 2.0 - 110 + 0.5;
-                                info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL;
-                        }
-                        if (!(stats.qual.updated & IW_QUAL_NOISE_INVALID)) {
-                                info->noise_level = stats.qual.noise / 2.0 - 110 + 0.5;
-                                info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE;
-                        }
-                }
-                else {
-                        if ((stats.qual.updated & IW_QUAL_DBM) || stats.qual.level > range.max_qual.level) {
-                                if (!(stats.qual.updated & IW_QUAL_LEVEL_INVALID)) {
-                                        info->signal_level = stats.qual.level;
-                                        if (info->signal_level > 63)
-                                                info->signal_level -= 256;
-                                        info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL;
-                                }
-                                if (!(stats.qual.updated & IW_QUAL_NOISE_INVALID)) {
-                                        info->noise_level = stats.qual.noise;
-                                        if (info->noise_level > 63)
-                                                info->noise_level -= 256;
-                                        info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE;
-                                }
-                        }
-                        else {
-                                if (!(stats.qual.updated & IW_QUAL_LEVEL_INVALID)) {
-                                        info->signal_level = stats.qual.level;
-                                        info->signal_level_max = range.max_qual.level;
-                                        info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL;
-                                }
-                                if (!(stats.qual.updated & IW_QUAL_NOISE_INVALID)) {
-                                        info->noise_level = stats.qual.noise;
-                                        info->noise_level_max = range.max_qual.noise;
-                                        info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE;
-                                }
-                        }
+        if (stats.qual.updated & IW_QUAL_RCPI) {
+            if (!(stats.qual.updated & IW_QUAL_LEVEL_INVALID)) {
+                info->signal_level = stats.qual.level / 2.0 - 110 + 0.5;
+                info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL;
+            }
+            if (!(stats.qual.updated & IW_QUAL_NOISE_INVALID)) {
+                info->noise_level = stats.qual.noise / 2.0 - 110 + 0.5;
+                info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE;
+            }
+        } else {
+            if ((stats.qual.updated & IW_QUAL_DBM) || stats.qual.level > range.max_qual.level) {
+                if (!(stats.qual.updated & IW_QUAL_LEVEL_INVALID)) {
+                    info->signal_level = stats.qual.level;
+                    if (info->signal_level > 63)
+                        info->signal_level -= 256;
+                    info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL;
                 }
-        }
-        else {
-                if (!(stats.qual.updated & IW_QUAL_QUAL_INVALID)) {
-                        info->quality = stats.qual.qual;
-                        info->flags |= WIRELESS_INFO_FLAG_HAS_QUALITY;
+                if (!(stats.qual.updated & IW_QUAL_NOISE_INVALID)) {
+                    info->noise_level = stats.qual.noise;
+                    if (info->noise_level > 63)
+                        info->noise_level -= 256;
+                    info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE;
                 }
+            } else {
                 if (!(stats.qual.updated & IW_QUAL_LEVEL_INVALID)) {
-                        info->quality = stats.qual.level;
-                        info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL;
+                    info->signal_level = stats.qual.level;
+                    info->signal_level_max = range.max_qual.level;
+                    info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL;
                 }
                 if (!(stats.qual.updated & IW_QUAL_NOISE_INVALID)) {
-                        info->quality = stats.qual.noise;
-                        info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE;
+                    info->noise_level = stats.qual.noise;
+                    info->noise_level_max = range.max_qual.noise;
+                    info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE;
                 }
+            }
+        }
+    } else {
+        if (!(stats.qual.updated & IW_QUAL_QUAL_INVALID)) {
+            info->quality = stats.qual.qual;
+            info->flags |= WIRELESS_INFO_FLAG_HAS_QUALITY;
+        }
+        if (!(stats.qual.updated & IW_QUAL_LEVEL_INVALID)) {
+            info->quality = stats.qual.level;
+            info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL;
         }
+        if (!(stats.qual.updated & IW_QUAL_NOISE_INVALID)) {
+            info->quality = stats.qual.noise;
+            info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE;
+        }
+    }
 
-        struct iwreq wrq;
-        if (iw_get_ext(skfd, interface, SIOCGIWRATE, &wrq) >= 0)
-                info->bitrate = wrq.u.bitrate.value;
+    struct iwreq wrq;
+    if (iw_get_ext(skfd, interface, SIOCGIWRATE, &wrq) >= 0)
+        info->bitrate = wrq.u.bitrate.value;
 
-        close(skfd);
-        return 1;
+    close(skfd);
+    return 1;
 #endif
 #if defined(__FreeBSD__) || defined(__DragonFly__)
-        int s, len, inwid;
-        uint8_t buf[24 * 1024], *cp;
-        struct ieee80211req na;
-        char network_id[IEEE80211_NWID_LEN + 1];
-
-        if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
-                return (0);
-
-        memset(&na, 0, sizeof(na));
-        strlcpy(na.i_name, interface, sizeof(na.i_name));
-        na.i_type = IEEE80211_IOC_SSID;
-        na.i_data = &info->essid[0];
-        na.i_len = IEEE80211_NWID_LEN + 1;
-        if ((inwid = ioctl(s, SIOCG80211, (caddr_t)&na)) == -1) {
-                close(s);
-                return (0);
-        }
-        if (inwid == 0) {
-                if (na.i_len <= IEEE80211_NWID_LEN)
-                        len = na.i_len + 1;
-                else
-                        len = IEEE80211_NWID_LEN + 1;
-                info->essid[len -1] = '\0';
-        } else {
-                close(s);
-                return (0);
-        }
-        info->flags |= WIRELESS_INFO_FLAG_HAS_ESSID;
+    int s, len, inwid;
+    uint8_t buf[24 * 1024], *cp;
+    struct ieee80211req na;
+    char network_id[IEEE80211_NWID_LEN + 1];
+
+    if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
+        return (0);
+
+    memset(&na, 0, sizeof(na));
+    strlcpy(na.i_name, interface, sizeof(na.i_name));
+    na.i_type = IEEE80211_IOC_SSID;
+    na.i_data = &info->essid[0];
+    na.i_len = IEEE80211_NWID_LEN + 1;
+    if ((inwid = ioctl(s, SIOCG80211, (caddr_t)&na)) == -1) {
+        close(s);
+        return (0);
+    }
+    if (inwid == 0) {
+        if (na.i_len <= IEEE80211_NWID_LEN)
+            len = na.i_len + 1;
+        else
+            len = IEEE80211_NWID_LEN + 1;
+        info->essid[len - 1] = '\0';
+    } else {
+        close(s);
+        return (0);
+    }
+    info->flags |= WIRELESS_INFO_FLAG_HAS_ESSID;
+
+    memset(&na, 0, sizeof(na));
+    strlcpy(na.i_name, interface, sizeof(na.i_name));
+    na.i_type = IEEE80211_IOC_SCAN_RESULTS;
+    na.i_data = buf;
+    na.i_len = sizeof(buf);
+
+    if (ioctl(s, SIOCG80211, (caddr_t)&na) == -1) {
+        printf("fail\n");
+        close(s);
+        return (0);
+    }
+
+    close(s);
+    len = na.i_len;
+    cp = buf;
+    struct ieee80211req_scan_result *sr;
+    uint8_t *vp;
+    sr = (struct ieee80211req_scan_result *)cp;
+    vp = (u_int8_t *)(sr + 1);
+    strlcpy(network_id, (const char *)vp, sr->isr_ssid_len + 1);
+    if (!strcmp(network_id, &info->essid[0])) {
+        info->signal_level = sr->isr_rssi;
+        info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL;
+        info->noise_level = sr->isr_noise;
+        info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE;
+        info->quality = sr->isr_intval;
+        info->flags |= WIRELESS_INFO_FLAG_HAS_QUALITY;
+    }
+
+    return 1;
+#endif
+#ifdef __OpenBSD__
+    struct ifreq ifr;
+    struct ieee80211_bssid bssid;
+    struct ieee80211_nwid nwid;
+    struct ieee80211_nodereq nr;
 
-        memset(&na, 0, sizeof(na));
-        strlcpy(na.i_name, interface, sizeof(na.i_name));
-        na.i_type = IEEE80211_IOC_SCAN_RESULTS;
-        na.i_data = buf;
-        na.i_len = sizeof(buf);
+    struct ether_addr ea;
 
-        if (ioctl(s, SIOCG80211, (caddr_t)&na) == -1) {
-                printf("fail\n");
-                close(s);
-                return (0);
-        }
+    int s, len, ibssid, inwid;
+    u_int8_t zero_bssid[IEEE80211_ADDR_LEN];
+
+    if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
+        return (0);
+
+    memset(&ifr, 0, sizeof(ifr));
+    ifr.ifr_data = (caddr_t)&nwid;
+    (void)strlcpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name));
+    inwid = ioctl(s, SIOCG80211NWID, (caddr_t)&ifr);
 
+    memset(&bssid, 0, sizeof(bssid));
+    strlcpy(bssid.i_name, interface, sizeof(bssid.i_name));
+    ibssid = ioctl(s, SIOCG80211BSSID, &bssid);
+
+    if (ibssid != 0 || inwid != 0) {
         close(s);
-        len = na.i_len;
-        cp = buf;
-        struct ieee80211req_scan_result *sr;
-        uint8_t *vp;
-        sr = (struct ieee80211req_scan_result *)cp;
-        vp = (u_int8_t *)(sr + 1);
-        strlcpy(network_id, (const char *)vp, sr->isr_ssid_len + 1);
-        if (!strcmp(network_id, &info->essid[0])) {
-                info->signal_level = sr->isr_rssi;
+        return 0;
+    }
+
+    /* NWID */
+    {
+        if (nwid.i_len <= IEEE80211_NWID_LEN)
+            len = nwid.i_len + 1;
+        else
+            len = IEEE80211_NWID_LEN + 1;
+
+        strncpy(&info->essid[0], nwid.i_nwid, len);
+        info->essid[IW_ESSID_MAX_SIZE] = '\0';
+        info->flags |= WIRELESS_INFO_FLAG_HAS_ESSID;
+    }
+
+    /* Signal strength */
+    {
+        memset(&zero_bssid, 0, sizeof(zero_bssid));
+        if (ibssid == 0 && memcmp(bssid.i_bssid, zero_bssid, IEEE80211_ADDR_LEN) != 0) {
+            memcpy(&ea.ether_addr_octet, bssid.i_bssid, sizeof(ea.ether_addr_octet));
+
+            bzero(&nr, sizeof(nr));
+            bcopy(bssid.i_bssid, &nr.nr_macaddr, sizeof(nr.nr_macaddr));
+            strlcpy(nr.nr_ifname, interface, sizeof(nr.nr_ifname));
+
+            if (ioctl(s, SIOCG80211NODE, &nr) == 0 && nr.nr_rssi) {
+                if (nr.nr_max_rssi)
+                    info->signal_level_max = IEEE80211_NODEREQ_RSSI(&nr);
+                else
+                    info->signal_level = nr.nr_rssi;
+
                 info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL;
-                info->noise_level = sr->isr_noise;
-                info->flags |= WIRELESS_INFO_FLAG_HAS_NOISE;
-                info->quality = sr->isr_intval;
-                info->flags |= WIRELESS_INFO_FLAG_HAS_QUALITY;
+            }
         }
+    }
 
-        return 1;
+    close(s);
+    return 1;
 #endif
-#ifdef __OpenBSD__
-       struct ifreq ifr;
-       struct ieee80211_bssid bssid;
-       struct ieee80211_nwid nwid;
-       struct ieee80211_nodereq nr;
-
-       struct ether_addr ea;
-
-        int s, len, ibssid, inwid;
-       u_int8_t zero_bssid[IEEE80211_ADDR_LEN];
-
-       if ((s = socket(AF_INET, SOCK_DGRAM, 0)) == -1)
-               return (0);
-
-        memset(&ifr, 0, sizeof(ifr));
-        ifr.ifr_data = (caddr_t)&nwid;
-       (void)strlcpy(ifr.ifr_name, interface, sizeof(ifr.ifr_name));
-        inwid = ioctl(s, SIOCG80211NWID, (caddr_t)&ifr);
-
-       memset(&bssid, 0, sizeof(bssid));
-       strlcpy(bssid.i_name, interface, sizeof(bssid.i_name));
-       ibssid = ioctl(s, SIOCG80211BSSID, &bssid);
-
-       if (ibssid != 0 || inwid != 0) {
-               close(s);
-               return 0;
-       }
-
-       /* NWID */
-       {
-               if (nwid.i_len <= IEEE80211_NWID_LEN)
-                       len = nwid.i_len + 1;
-               else
-                       len = IEEE80211_NWID_LEN + 1;
-
-               strncpy(&info->essid[0], nwid.i_nwid, len);
-               info->essid[IW_ESSID_MAX_SIZE] = '\0';
-               info->flags |= WIRELESS_INFO_FLAG_HAS_ESSID;
-       }
-
-       /* Signal strength */
-       {
-               memset(&zero_bssid, 0, sizeof(zero_bssid));
-               if (ibssid == 0 && memcmp(bssid.i_bssid, zero_bssid, IEEE80211_ADDR_LEN) != 0) {
-                       memcpy(&ea.ether_addr_octet, bssid.i_bssid, sizeof(ea.ether_addr_octet));
-
-                       bzero(&nr, sizeof(nr));
-                       bcopy(bssid.i_bssid, &nr.nr_macaddr, sizeof(nr.nr_macaddr));
-                       strlcpy(nr.nr_ifname, interface, sizeof(nr.nr_ifname));
-
-                       if (ioctl(s, SIOCG80211NODE, &nr) == 0 && nr.nr_rssi) {
-                               if (nr.nr_max_rssi)
-                                       info->signal_level_max = IEEE80211_NODEREQ_RSSI(&nr);
-                               else
-                                       info->signal_level = nr.nr_rssi;
-
-                               info->flags |= WIRELESS_INFO_FLAG_HAS_SIGNAL;
-                       }
-               }
-       }
-
-       close(s);
-       return 1;
-#endif
-       return 0;
+    return 0;
 }
 
 void print_wireless_info(yajl_gen json_gen, char *buffer, const char *interface, const char *format_up, const char *format_down) {
-        const char *walk;
-        char *outwalk = buffer;
-        wireless_info_t info;
-
-        INSTANCE(interface);
-
-       const char *ip_address = get_ip_addr(interface);
-       if (ip_address == NULL) {
-               START_COLOR("color_bad");
-               outwalk += sprintf(outwalk, "%s", format_down);
-               goto out;
-       }
-
-        if (get_wireless_info(interface, &info)) {
-                walk = format_up;
-                if (info.flags & WIRELESS_INFO_FLAG_HAS_QUALITY)
-                        START_COLOR((info.quality < info.quality_average ? "color_degraded" : "color_good"));
-                else
-                        START_COLOR("color_good");
-        } else {
-                walk = format_down;
-                START_COLOR("color_bad");
+    const char *walk;
+    char *outwalk = buffer;
+    wireless_info_t info;
+
+    INSTANCE(interface);
+
+    const char *ip_address = get_ip_addr(interface);
+    if (ip_address == NULL) {
+        START_COLOR("color_bad");
+        outwalk += sprintf(outwalk, "%s", format_down);
+        goto out;
+    }
+
+    if (get_wireless_info(interface, &info)) {
+        walk = format_up;
+        if (info.flags & WIRELESS_INFO_FLAG_HAS_QUALITY)
+            START_COLOR((info.quality < info.quality_average ? "color_degraded" : "color_good"));
+        else
+            START_COLOR("color_good");
+    } else {
+        walk = format_down;
+        START_COLOR("color_bad");
+    }
+
+    for (; *walk != '\0'; walk++) {
+        if (*walk != '%') {
+            *(outwalk++) = *walk;
+            continue;
         }
 
-        for (; *walk != '\0'; walk++) {
-                if (*walk != '%') {
-                        *(outwalk++) = *walk;
-                        continue;
-                }
-
-                if (BEGINS_WITH(walk+1, "quality")) {
-                        if (info.flags & WIRELESS_INFO_FLAG_HAS_QUALITY) {
-                                if (info.quality_max)
-                                        outwalk += sprintf(outwalk, "%03d%%", PERCENT_VALUE(info.quality, info.quality_max));
-                                else
-                                        outwalk += sprintf(outwalk, "%d", info.quality);
-                        } else {
-                                *(outwalk++) = '?';
-                        }
-                        walk += strlen("quality");
-                }
+        if (BEGINS_WITH(walk + 1, "quality")) {
+            if (info.flags & WIRELESS_INFO_FLAG_HAS_QUALITY) {
+                if (info.quality_max)
+                    outwalk += sprintf(outwalk, "%03d%%", PERCENT_VALUE(info.quality, info.quality_max));
+                else
+                    outwalk += sprintf(outwalk, "%d", info.quality);
+            } else {
+                *(outwalk++) = '?';
+            }
+            walk += strlen("quality");
+        }
 
-                if (BEGINS_WITH(walk+1, "signal")) {
-                        if (info.flags & WIRELESS_INFO_FLAG_HAS_SIGNAL) {
-                                if (info.signal_level_max)
-                                        outwalk += sprintf(outwalk, "%03d%%", PERCENT_VALUE(info.signal_level, info.signal_level_max));
-                                else
-                                        outwalk += sprintf(outwalk, "%d dBm", info.signal_level);
-                        } else {
-                                *(outwalk++) = '?';
-                        }
-                        walk += strlen("signal");
-                }
+        if (BEGINS_WITH(walk + 1, "signal")) {
+            if (info.flags & WIRELESS_INFO_FLAG_HAS_SIGNAL) {
+                if (info.signal_level_max)
+                    outwalk += sprintf(outwalk, "%03d%%", PERCENT_VALUE(info.signal_level, info.signal_level_max));
+                else
+                    outwalk += sprintf(outwalk, "%d dBm", info.signal_level);
+            } else {
+                *(outwalk++) = '?';
+            }
+            walk += strlen("signal");
+        }
 
-                if (BEGINS_WITH(walk+1, "noise")) {
-                        if (info.flags & WIRELESS_INFO_FLAG_HAS_NOISE) {
-                                if (info.noise_level_max)
-                                        outwalk += sprintf(outwalk, "%03d%%", PERCENT_VALUE(info.noise_level, info.noise_level_max));
-                                else
-                                        outwalk += sprintf(outwalk, "%d dBm", info.noise_level);
-                        } else {
-                                *(outwalk++) = '?';
-                        }
-                        walk += strlen("noise");
-                }
+        if (BEGINS_WITH(walk + 1, "noise")) {
+            if (info.flags & WIRELESS_INFO_FLAG_HAS_NOISE) {
+                if (info.noise_level_max)
+                    outwalk += sprintf(outwalk, "%03d%%", PERCENT_VALUE(info.noise_level, info.noise_level_max));
+                else
+                    outwalk += sprintf(outwalk, "%d dBm", info.noise_level);
+            } else {
+                *(outwalk++) = '?';
+            }
+            walk += strlen("noise");
+        }
 
-                if (BEGINS_WITH(walk+1, "essid")) {
-                        if (info.flags & WIRELESS_INFO_FLAG_HAS_ESSID)
-                                outwalk += sprintf(outwalk, "%s", info.essid);
-                        else
-                                *(outwalk++) = '?';
-                        walk += strlen("essid");
-                }
+        if (BEGINS_WITH(walk + 1, "essid")) {
+            if (info.flags & WIRELESS_INFO_FLAG_HAS_ESSID)
+                outwalk += sprintf(outwalk, "%s", info.essid);
+            else
+                *(outwalk++) = '?';
+            walk += strlen("essid");
+        }
 
-                if (BEGINS_WITH(walk+1, "frequency")) {
-                        if (info.flags & WIRELESS_INFO_FLAG_HAS_FREQUENCY)
-                                outwalk += sprintf(outwalk, "%1.1f GHz", info.frequency / 1e9);
-                        else
-                                *(outwalk++) = '?';
-                        walk += strlen("frequency");
-                }
+        if (BEGINS_WITH(walk + 1, "frequency")) {
+            if (info.flags & WIRELESS_INFO_FLAG_HAS_FREQUENCY)
+                outwalk += sprintf(outwalk, "%1.1f GHz", info.frequency / 1e9);
+            else
+                *(outwalk++) = '?';
+            walk += strlen("frequency");
+        }
 
-                if (BEGINS_WITH(walk+1, "ip")) {
-                       outwalk += sprintf(outwalk, "%s", ip_address);
-                       walk += strlen("ip");
-                }
+        if (BEGINS_WITH(walk + 1, "ip")) {
+            outwalk += sprintf(outwalk, "%s", ip_address);
+            walk += strlen("ip");
+        }
 
 #ifdef LINUX
-                if (BEGINS_WITH(walk+1, "bitrate")) {
-                        char br_buffer[128];
+        if (BEGINS_WITH(walk + 1, "bitrate")) {
+            char br_buffer[128];
 
-                        iw_print_bitrate(br_buffer, sizeof(br_buffer), info.bitrate);
+            iw_print_bitrate(br_buffer, sizeof(br_buffer), info.bitrate);
 
-                        outwalk += sprintf(outwalk, "%s", br_buffer);
-                        walk += strlen("bitrate");
-                }
-#endif
+            outwalk += sprintf(outwalk, "%s", br_buffer);
+            walk += strlen("bitrate");
         }
+#endif
+    }
 
 out:
-        END_COLOR;
-        OUTPUT_FULL_TEXT(buffer);
+    END_COLOR;
+    OUTPUT_FULL_TEXT(buffer);
 }
index 1836507aeabc866a07eb1e78d8107948d7d9bfc0..b5e8f110c5ac2cd77e9be07ceea7ce2ecbe39c42 100644 (file)
@@ -1,4 +1,4 @@
-// vim:ts=8:sw=8:expandtab
+// vim:ts=4:sw=4:expandtab
 #include <stdbool.h>
 #include <glob.h>
 #include <string.h>
  *
  */
 bool process_runs(const char *path) {
-        static char pidbuf[16];
-        static glob_t globbuf;
-        memset(pidbuf, 0, sizeof(pidbuf));
+    static char pidbuf[16];
+    static glob_t globbuf;
+    memset(pidbuf, 0, sizeof(pidbuf));
 
-        if (glob(path, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0)
-                die("glob() failed\n");
-        if (globbuf.gl_pathc == 0) {
-                /* No glob matches, the specified path does not contain a wildcard. */
-                globfree(&globbuf);
-                if (!slurp(path, pidbuf, sizeof(pidbuf)))
-                        return false;
-                return (kill(strtol(pidbuf, NULL, 10), 0) == 0 || errno == EPERM);
+    if (glob(path, GLOB_NOCHECK | GLOB_TILDE, NULL, &globbuf) < 0)
+        die("glob() failed\n");
+    if (globbuf.gl_pathc == 0) {
+        /* No glob matches, the specified path does not contain a wildcard. */
+        globfree(&globbuf);
+        if (!slurp(path, pidbuf, sizeof(pidbuf)))
+            return false;
+        return (kill(strtol(pidbuf, NULL, 10), 0) == 0 || errno == EPERM);
+    }
+    for (size_t i = 0; i < globbuf.gl_pathc; i++) {
+        if (!slurp(globbuf.gl_pathv[i], pidbuf, sizeof(pidbuf))) {
+            globfree(&globbuf);
+            return false;
         }
-        for (size_t i = 0; i < globbuf.gl_pathc; i++) {
-                if (!slurp(globbuf.gl_pathv[i], pidbuf, sizeof(pidbuf))) {
-                        globfree(&globbuf);
-                        return false;
-                }
-                if (kill(strtol(pidbuf, NULL, 10), 0) == 0 || errno == EPERM) {
-                        globfree(&globbuf);
-                        return true;
-                }
+        if (kill(strtol(pidbuf, NULL, 10), 0) == 0 || errno == EPERM) {
+            globfree(&globbuf);
+            return true;
         }
-        globfree(&globbuf);
+    }
+    globfree(&globbuf);
 
-        return false;
+    return false;
 }