modules/battery: Add open_battery()

When calling initialize() or update_status() we first need to check/get
the file descriptor for the battery. To avoid writing the same code
twice this commit separates the code into a function.
This commit is contained in:
Nicholas Sudsgaard 2025-03-06 14:17:43 +09:00
parent e68ed8d843
commit ce8605dd30

View file

@ -254,24 +254,31 @@ readint_from_fd(int fd)
return ret; return ret;
} }
static int
open_battery(struct private *m)
{
int pw_fd = open("/sys/class/power_supply", O_RDONLY | O_CLOEXEC);
if (pw_fd < 0) {
LOG_ERRNO("/sys/class/power_supply");
return -1;
}
int base_dir_fd = openat(pw_fd, m->battery, O_RDONLY | O_CLOEXEC);
if (base_dir_fd < 0)
LOG_ERRNO("/sys/class/power_supply/%s", m->battery);
close(pw_fd);
return base_dir_fd;
}
static bool static bool
initialize(struct private *m) initialize(struct private *m)
{ {
char line_buf[512]; char line_buf[512];
int pw_fd = open("/sys/class/power_supply", O_RDONLY | O_CLOEXEC); int base_dir_fd = open_battery(m);
if (pw_fd < 0) { if (base_dir_fd < 0)
LOG_ERRNO("/sys/class/power_supply");
return false; return false;
}
int base_dir_fd = openat(pw_fd, m->battery, O_RDONLY | O_CLOEXEC);
close(pw_fd);
if (base_dir_fd < 0) {
LOG_ERRNO("/sys/class/power_supply/%s", m->battery);
return false;
}
{ {
int fd = openat(base_dir_fd, "manufacturer", O_RDONLY | O_CLOEXEC); int fd = openat(base_dir_fd, "manufacturer", O_RDONLY | O_CLOEXEC);
@ -362,19 +369,9 @@ update_status(struct module *mod)
{ {
struct private *m = mod->private; struct private *m = mod->private;
int pw_fd = open("/sys/class/power_supply", O_RDONLY | O_CLOEXEC); int base_dir_fd = open_battery(m);
if (pw_fd < 0) { if (base_dir_fd < 0)
LOG_ERRNO("/sys/class/power_supply");
return false; return false;
}
int base_dir_fd = openat(pw_fd, m->battery, O_RDONLY | O_CLOEXEC);
close(pw_fd);
if (base_dir_fd < 0) {
LOG_ERRNO("/sys/class/power_supply/%s", m->battery);
return false;
}
int status_fd = openat(base_dir_fd, "status", O_RDONLY | O_CLOEXEC); int status_fd = openat(base_dir_fd, "status", O_RDONLY | O_CLOEXEC);
if (status_fd < 0) { if (status_fd < 0) {