Store RR entries in Directory Record for each File Section.

Linux do not mount correctly images where RR entries are only stored in 
last File Section Directory Entry.
This commit is contained in:
Vreixo Formoso 2008-08-19 03:46:41 +02:00
parent f9e15054db
commit 643dbef05c
1 changed files with 11 additions and 11 deletions

View File

@ -119,11 +119,11 @@ size_t calc_dir_size(Ecma119Image *t, Ecma119Node *dir, size_t *ce)
size_t remaining; size_t remaining;
int section, nsections; int section, nsections;
Ecma119Node *child = dir->info.dir->children[i]; Ecma119Node *child = dir->info.dir->children[i];
size_t dirent_len = calc_dirent_len(t, child);
nsections = (child->type == ECMA119_FILE) ? child->info.file->nsections : 1; nsections = (child->type == ECMA119_FILE) ? child->info.file->nsections : 1;
for (section = 0; section < nsections; ++section) { for (section = 0; section < nsections; ++section) {
if (t->rockridge && section == nsections - 1) { size_t dirent_len = calc_dirent_len(t, child);
if (t->rockridge) {
dirent_len += rrip_calc_len(t, child, 0, 255 - dirent_len, &ce_len); dirent_len += rrip_calc_len(t, child, 0, 255 - dirent_len, &ce_len);
*ce += ce_len; *ce += ce_len;
} }
@ -294,10 +294,9 @@ void write_one_dir_record(Ecma119Image *t, Ecma119Node *node, int file_id,
rec->len_fi[0] = len_fi; rec->len_fi[0] = len_fi;
/* /*
* and finally write the SUSP fields. On a multi-extent file, they are only * and finally write the SUSP fields.
* needed in the last extent.
*/ */
if (info != NULL && multi_extend == 0) { if (info != NULL) {
rrip_write_susp_fields(t, info, buf + len_dr); rrip_write_susp_fields(t, info, buf + len_dr);
} }
} }
@ -457,18 +456,19 @@ int write_one_dir(Ecma119Image *t, Ecma119Node *dir)
int section, nsections; int section, nsections;
Ecma119Node *child = dir->info.dir->children[i]; Ecma119Node *child = dir->info.dir->children[i];
/* compute len of directory entry */
fi_len = strlen(child->iso_name); fi_len = strlen(child->iso_name);
len = fi_len + 33 + (fi_len % 2 ? 0 : 1);
if (need_version_number(t, child)) {
len += 2;
}
nsections = (child->type == ECMA119_FILE) ? child->info.file->nsections : 1; nsections = (child->type == ECMA119_FILE) ? child->info.file->nsections : 1;
for (section = 0; section < nsections; ++section) { for (section = 0; section < nsections; ++section) {
/* compute len of directory entry */
len = fi_len + 33 + (fi_len % 2 ? 0 : 1);
if (need_version_number(t, child)) {
len += 2;
}
/* get the SUSP fields if rockridge is enabled */ /* get the SUSP fields if rockridge is enabled */
if (t->rockridge && section == nsections - 1) { if (t->rockridge) {
ret = rrip_get_susp_fields(t, child, 0, 255 - len, &info); ret = rrip_get_susp_fields(t, child, 0, 255 - len, &info);
if (ret < 0) { if (ret < 0) {
return ret; return ret;