static int opendir(struct exfat* ef, const struct exfat_node* dir,
struct iterator* it)
{
+ char buffer[UTF8_BYTES(EXFAT_NAME_MAX) + 1];
+
if (!(dir->flags & EXFAT_ATTRIB_DIR))
- exfat_bug("not a directory");
+ {
+ exfat_get_name(dir, buffer, sizeof(buffer) - 1);
+ exfat_bug("'%s' is not a directory", buffer);
+ }
it->cluster = dir->start_cluster;
it->offset = 0;
it->chunk = malloc(CLUSTER_SIZE(*ef->sb));
if (it->chunk == NULL)
{
- exfat_error("out of memory");
+ exfat_error("failed to allocate memory for directory cluster");
return -ENOMEM;
}
if (exfat_pread(ef->dev, it->chunk, CLUSTER_SIZE(*ef->sb),
exfat_c2o(ef, it->cluster)) < 0)
{
free(it->chunk);
- exfat_error("failed to read directory cluster %#x", it->cluster);
+ exfat_get_name(dir, buffer, sizeof(buffer) - 1);
+ exfat_error("failed to read '%s' directory cluster %#x", buffer,
+ it->cluster);
return -EIO;
}
return 0;
uint16_t reference_checksum, uint64_t valid_size)
{
char buffer[UTF8_BYTES(EXFAT_NAME_MAX) + 1];
+ bool ret = true;
/*
Validate checksum first. If it's invalid all other fields probably
exfat_get_name(node, buffer, sizeof(buffer) - 1);
exfat_error("'%s' has invalid checksum (%#hx != %#hx)", buffer,
actual_checksum, reference_checksum);
- return false;
+ ret = false;
}
/*
exfat_get_name(node, buffer, sizeof(buffer) - 1);
exfat_error("'%s' has valid size (%"PRIu64") greater than size "
"(%"PRIu64")", buffer, valid_size, node->size);
- return false;
+ ret = false;
}
- return true;
+ return ret;
}
static void decompress_upcase(uint16_t* output, const le16_t* source,