changeset 1065:9211bc984285 draft

Cleanup on acpi, switch to default y.
author Rob Landley <rob@landley.net>
date Mon, 09 Sep 2013 11:39:18 -0500
parents 0d7d6fed8141
children 4263a4390758
files toys/other/acpi.c
diffstat 1 files changed, 42 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/toys/other/acpi.c	Mon Sep 09 11:19:59 2013 -0500
+++ b/toys/other/acpi.c	Mon Sep 09 11:39:18 2013 -0500
@@ -1,77 +1,82 @@
 /* acpi.c - show power state
+ *
  * Written by Isaac Dunham, 2013
+ *
  * No standard.
+
 USE_ACPI(NEWTOY(acpi, "ab", TOYFLAG_USR|TOYFLAG_BIN))
 
 config ACPI
   bool "acpi"
-  default n
+  default y
   help
     usage: acpi [-ab]
     
     Show status of power sources.
-    -a   show power adapters
-    -b   show batteries
+
+    -a	show power adapters
+    -b	show batteries
 */
 
 #define FOR_acpi
 #include "toys.h"
 
 GLOBALS(
-int ac;
-int bat;
+  int ac;
+  int bat;
 )
 
-int read_int_at(int dirfd, char *name) {
+int read_int_at(int dirfd, char *name)
+{
   int fd, ret=0;
-  if ((fd=openat(dirfd, name, O_RDONLY)) < 0)
-    return -1;
-  FILE * fil = xfdopen(fd, "r");
-  fscanf(fil, "%d", &ret);
+  FILE *fil;
+
+  if ((fd = openat(dirfd, name, O_RDONLY)) < 0) return -1;
+  fscanf(fil = xfdopen(fd, "r"), "%d", &ret);
   fclose(fil);
+
   return ret;
 }
 
 int acpi_callback(struct dirtree *tree)
 {
+  int dfd;
+
   errno = 0;
 
-  if (tree->name[0]=='.')
-    return 0;
-  if (strlen(dirtree_path(tree, NULL)) < 26) {
-    return (DIRTREE_RECURSE | DIRTREE_SYMFOLLOW);
-  }
-  int dfd=open(dirtree_path(tree, NULL), O_RDONLY);
-  if (dfd > 0) {
-    int fd;
-    if ((fd = openat(dfd, "type", O_RDONLY)) < 0) {
-      close(dfd);
-      return 0;
-    }
-    read(fd, toybuf, 4096);
+  if (tree->name[0]=='.') return 0;
+
+  if (strlen(dirtree_path(tree, NULL)) < 26)
+    return DIRTREE_RECURSE | DIRTREE_SYMFOLLOW;
+
+  if (0 <= (dfd = open(dirtree_path(tree, NULL), O_RDONLY))) {
+    int fd, len;
+
+    if ((fd = openat(dfd, "type", O_RDONLY)) < 0) goto done;
+    len = readall(fd, toybuf, sizeof(toybuf));
     close(fd);
-    if (0 == strncmp(toybuf, "Battery", 7)) {
-      if (toys.optflags & FLAG_b || (!toys.optflags)) {
+    if (len < 1) goto done;
+
+    if (!strncmp(toybuf, "Battery", 7)) {
+      if ((toys.optflags & FLAG_b) || (!toys.optflags)) {
         int cap = 0, curr = 0, max = 0;
+
         if ((cap = read_int_at(dfd, "capacity")) < 0) {
-          if ((max = read_int_at(dfd, "charge_full")) > 0) {
+          if ((max = read_int_at(dfd, "charge_full")) > 0)
             curr = read_int_at(dfd, "charge_now");
-          } else if ((max = read_int_at(dfd, "energy_full")) > 0) {
+          else if ((max = read_int_at(dfd, "energy_full")) > 0)
             curr = read_int_at(dfd, "energy_now");
-          }
-          if (max > 0 && (curr >= 0))
-            cap = 100 * curr / max;
+          if (max > 0 && curr >= 0) cap = 100 * curr / max;
         }
         if (cap >= 0) printf("Battery %d: %d%%\n", TT.bat++, cap);
       }
-    } else {
-      //ac
-      if (toys.optflags & FLAG_a) {
-        int on;
-        if ((on = read_int_at(dfd, "online")) >= 0)
-          printf("Adapter %d: %s-line\n", TT.ac++, (on ? "on" : "off"));
-      }
+    } else if (toys.optflags & FLAG_a) {
+      int on;
+
+      if ((on = read_int_at(dfd, "online")) >= 0)
+        printf("Adapter %d: %s-line\n", TT.ac++, (on ? "on" : "off"));
     }
+done:
     close(dfd);
   }
   return 0;