desc->ndirs = scandir(_PATH_SYS_MEMORY, &desc->dirs, filter, versionsort);
if (desc->ndirs <= 0)
- err(EXIT_FAILURE, _("Failed to read %s"), _PATH_SYS_MEMORY);
+ goto fail;
ul_path_read_buffer(desc->sysmem, line, sizeof(line), "block_size_bytes");
+
+ errno = 0;
desc->block_size = strtoumax(line, NULL, 16);
+ if (errno)
+ goto fail;
+ return;
+fail:
+ err(EXIT_FAILURE, _("Failed to read %s"), _PATH_SYS_MEMORY);
}
static void parse_single_param(struct chmem_desc *desc, char *str)
continue;
if (!isdigit_string(de->d_name + 4))
continue;
+ errno = 0;
node = strtol(de->d_name + 4, NULL, 10);
+ if (errno)
+ continue;
break;
}
closedir(dir);
return node;
}
-static void memory_block_read_attrs(struct lsmem *lsmem, char *name,
+static int memory_block_read_attrs(struct lsmem *lsmem, char *name,
struct memory_block *blk)
{
char *line = NULL;
- int i, x = 0;
+ int i, x = 0, rc = 0;
memset(blk, 0, sizeof(*blk));
+ errno = 0;
blk->count = 1;
blk->state = MEMORY_STATE_UNKNOWN;
blk->index = strtoumax(name + 6, NULL, 10); /* get <num> of "memory<num>" */
+ if (errno)
+ rc = -errno;
+
if (ul_path_readf_s32(lsmem->sysmem, &x, "%s/removable", name) == 0)
blk->removable = x == 1;
}
free(line);
}
+
+ return rc;
}
static int is_mergeable(struct lsmem *lsmem, struct memory_block *blk)
if (ul_path_read_buffer(lsmem->sysmem, buf, sizeof(buf), "block_size_bytes") <= 0)
err(EXIT_FAILURE, _("failed to read memory block size"));
+
+ errno = 0;
lsmem->block_size = strtoumax(buf, NULL, 16);
+ if (errno)
+ err(EXIT_FAILURE, _("failed to read memory block size"));
for (i = 0; i < lsmem->ndirs; i++) {
memory_block_read_attrs(lsmem, lsmem->dirs[i]->d_name, &blk);