Correctly compute directoty size on Joliet and ISO-9660:1999 trees.
This commit is contained in:
parent
ce0949a585
commit
f9e15054db
@ -549,14 +549,19 @@ size_t calc_dir_size(Ecma119Image *t, Iso1999Node *dir)
|
|||||||
|
|
||||||
for (i = 0; i < dir->info.dir->nchildren; ++i) {
|
for (i = 0; i < dir->info.dir->nchildren; ++i) {
|
||||||
size_t remaining;
|
size_t remaining;
|
||||||
|
int section, nsections;
|
||||||
Iso1999Node *child = dir->info.dir->children[i];
|
Iso1999Node *child = dir->info.dir->children[i];
|
||||||
size_t dirent_len = calc_dirent_len(t, child);
|
size_t dirent_len = calc_dirent_len(t, child);
|
||||||
remaining = BLOCK_SIZE - (len % BLOCK_SIZE);
|
|
||||||
if (dirent_len > remaining) {
|
nsections = (child->type == ISO1999_FILE) ? child->info.file->nsections : 1;
|
||||||
/* child directory entry doesn't fit on block */
|
for (section = 0; section < nsections; ++section) {
|
||||||
len += remaining + dirent_len;
|
remaining = BLOCK_SIZE - (len % BLOCK_SIZE);
|
||||||
} else {
|
if (dirent_len > remaining) {
|
||||||
len += dirent_len;
|
/* child directory entry doesn't fit on block */
|
||||||
|
len += remaining + dirent_len;
|
||||||
|
} else {
|
||||||
|
len += dirent_len;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -580,14 +580,19 @@ size_t calc_dir_size(Ecma119Image *t, JolietNode *dir)
|
|||||||
|
|
||||||
for (i = 0; i < dir->info.dir->nchildren; ++i) {
|
for (i = 0; i < dir->info.dir->nchildren; ++i) {
|
||||||
size_t remaining;
|
size_t remaining;
|
||||||
|
int section, nsections;
|
||||||
JolietNode *child = dir->info.dir->children[i];
|
JolietNode *child = dir->info.dir->children[i];
|
||||||
size_t dirent_len = calc_dirent_len(t, child);
|
size_t dirent_len = calc_dirent_len(t, child);
|
||||||
remaining = BLOCK_SIZE - (len % BLOCK_SIZE);
|
|
||||||
if (dirent_len > remaining) {
|
nsections = (child->type == JOLIET_FILE) ? child->info.file->nsections : 1;
|
||||||
/* child directory entry doesn't fit on block */
|
for (section = 0; section < nsections; ++section) {
|
||||||
len += remaining + dirent_len;
|
remaining = BLOCK_SIZE - (len % BLOCK_SIZE);
|
||||||
} else {
|
if (dirent_len > remaining) {
|
||||||
len += dirent_len;
|
/* child directory entry doesn't fit on block */
|
||||||
|
len += remaining + dirent_len;
|
||||||
|
} else {
|
||||||
|
len += dirent_len;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user