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); }