new-acpi-battery.c - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
new-acpi-battery.c (1208B) | |
--- | |
1 char * | |
2 readfile(char *base, char *file) | |
3 { | |
4 char *path, line[513]; | |
5 FILE *fd; | |
6 | |
7 memset(line, 0, sizeof(line)); | |
8 | |
9 path = smprintf("%s/%s", base, file); | |
10 fd = fopen(path, "r"); | |
11 if (fd == NULL) | |
12 return NULL; | |
13 free(path); | |
14 | |
15 if (fgets(line, sizeof(line)-1, fd) == NULL) | |
16 return NULL; | |
17 fclose(fd); | |
18 | |
19 return smprintf("%s", line); | |
20 } | |
21 | |
22 /* | |
23 * Linux seems to change the filenames after suspend/hibernate | |
24 * according to a random scheme. So just check for both possibilities. | |
25 */ | |
26 char * | |
27 getbattery(char *base) | |
28 { | |
29 char *co; | |
30 int descap, remcap; | |
31 | |
32 descap = -1; | |
33 remcap = -1; | |
34 | |
35 co = readfile(base, "present"); | |
36 if (co == NULL || co[0] != '1') { | |
37 if (co != NULL) free(co); | |
38 return smprintf("not present"); | |
39 } | |
40 free(co); | |
41 | |
42 co = readfile(base, "charge_full_design"); | |
43 if (co == NULL) { | |
44 co = readfile(base, "energy_full_design"); | |
45 if (co == NULL) | |
46 return smprintf(""); | |
47 } | |
48 sscanf(co, "%d", &descap); | |
49 free(co); | |
50 | |
51 co = readfile(base, "charge_now"); | |
52 if (co == NULL) { | |
53 co = readfile(base, "energy_now"); | |
54 if (co == NULL) | |
55 return smprintf(""); | |
56 } | |
57 sscanf(co, "%d", &remcap); | |
58 free(co); | |
59 | |
60 if (remcap < 0 || descap < 0) | |
61 return smprintf("invalid"); | |
62 | |
63 return smprintf("%.0f", ((float)remcap / (float)descap) * 100); | |
64 } | |
65 |