dwmstatus/new-acpi-battery.c

56 lines
867 B
C

char *
readfile(char *base, char *file)
{
char *path, line[513];
FILE *fd;
memset(line, 0, sizeof(line));
path = smprintf("%s/%s", base, file);
fd = fopen(path, "r");
if (fd == NULL) {
perror("fopen");
exit(1);
}
free(path);
if (fgets(line, sizeof(line)-1, fd) == NULL) {
perror("fgets");
exit(1);
}
fclose(fd);
return smprintf("%s", line);
}
char *
getbattery(char *base)
{
char *co;
int descap, remcap;
descap = -1;
remcap = -1;
co = readfile(base, "present");
if (co[0] != '1') {
free(co);
return smprintf("not present");
}
free(co);
co = readfile(base, "charge_full_design");
sscanf(co, "%d", &descap);
free(co);
co = readfile(base, "charge_now");
sscanf(co, "%d", &remcap);
free(co);
if (remcap < 0 || descap < 0)
return smprintf("invalid");
return smprintf("%.0f", ((float)remcap / (float)descap) * 100);
}