diff options
-rw-r--r-- | libkmod/libkmod-config.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/libkmod/libkmod-config.c b/libkmod/libkmod-config.c index ac9c888..6ea93c7 100644 --- a/libkmod/libkmod-config.c +++ b/libkmod/libkmod-config.c @@ -509,23 +509,23 @@ static void kcmdline_parse_result(struct kmod_config *config, char *modname, static int kmod_config_parse_kcmdline(struct kmod_config *config) { char buf[KCMD_LINE_SIZE]; - int fd, err; - char *p, *modname, *param = NULL, *value = NULL; + FILE *file; + size_t len; + char *p, *modname, *param = NULL, *value = NULL; - fd = open("/proc/cmdline", O_RDONLY|O_CLOEXEC); - if (fd < 0) { - err = -errno; + file = fopen("/proc/cmdline", "r"); + if (file == NULL) { DBG(config->ctx, "could not open '/proc/cmdline' for reading: %m\n"); - return err; + return -errno; } - err = read_str_safe(fd, buf, sizeof(buf)); - close(fd); - if (err < 0) { - ERR(config->ctx, "could not read from '/proc/cmdline': %s\n", - strerror(-err)); - return err; + len = fread(buf, 1, sizeof(buf), file); + if (len == 0 || ferror(file)) { + fclose(file); + ERR(config->ctx, "could not read from '/proc/cmdline': %m\n"); + return -errno; } + fclose(file); for (p = buf, modname = buf; *p != '\0' && *p != '\n'; p++) { switch (*p) { |