Fix bug with RR NM and SL entries.
This commit is contained in:
parent
49344b3ca9
commit
6509134411
@ -332,8 +332,8 @@ int rrip_add_SL(Ecma119Image *t, struct susp_info *susp,
|
|||||||
SL[4] = 1; /* CONTINUE */
|
SL[4] = 1; /* CONTINUE */
|
||||||
pos = 5;
|
pos = 5;
|
||||||
for (j = written; j < i; j++) {
|
for (j = written; j < i; j++) {
|
||||||
memcpy(&SL[pos], comp[j], comp[j][2]);
|
memcpy(&SL[pos], comp[j], comp[j][1] + 2);
|
||||||
pos += comp[j][2];
|
pos += comp[j][1] + 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -348,7 +348,7 @@ int rrip_add_SL(Ecma119Image *t, struct susp_info *susp,
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
written = i - 1;
|
written = i - 1;
|
||||||
total_comp_len = comp[i][1];
|
total_comp_len = comp[i][1] + 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -796,10 +796,10 @@ int rrip_get_susp_fields(Ecma119Image *t, Ecma119Node *n, int type,
|
|||||||
nm_type = 0;
|
nm_type = 0;
|
||||||
} else {
|
} else {
|
||||||
/* the NM will be divided in a CE */
|
/* the NM will be divided in a CE */
|
||||||
sua_free = 0;
|
|
||||||
nm_type = 1;
|
nm_type = 1;
|
||||||
namelen = namelen - (sua_free - 5 - 28);
|
namelen = namelen - (sua_free - 5 - 28);
|
||||||
ce_len = 5 + namelen;
|
ce_len = 5 + namelen;
|
||||||
|
sua_free = 0;
|
||||||
}
|
}
|
||||||
if (n->type == ECMA119_SYMLINK) {
|
if (n->type == ECMA119_SYMLINK) {
|
||||||
/*
|
/*
|
||||||
@ -964,21 +964,16 @@ int rrip_get_susp_fields(Ecma119Image *t, Ecma119Node *n, int type,
|
|||||||
goto add_susp_cleanup;
|
goto add_susp_cleanup;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Write the NM part that fits in SUA... */
|
/*
|
||||||
size_t len = info->suf_len - 28 - 5;
|
* Write the NM part that fits in SUA... Note that CE
|
||||||
|
* entry and NM in the continuation area is added below
|
||||||
|
*/
|
||||||
|
size_t len = space - info->suf_len - 28 - 5;
|
||||||
ret = rrip_add_NM(t, info, name, len, 1, 0);
|
ret = rrip_add_NM(t, info, name, len, 1, 0);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
goto add_susp_cleanup;
|
goto add_susp_cleanup;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
* ..and the part that goes to continuation area. Note that CE
|
|
||||||
* entry in SUA in added below
|
|
||||||
*/
|
|
||||||
name += len;
|
name += len;
|
||||||
ret = rrip_add_NM(t, info, name, strlen(name), 0, 0);
|
|
||||||
if (ret < 0) {
|
|
||||||
goto add_susp_cleanup;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ce_len > 0) {
|
if (ce_len > 0) {
|
||||||
@ -988,6 +983,17 @@ int rrip_get_susp_fields(Ecma119Image *t, Ecma119Node *n, int type,
|
|||||||
goto add_susp_cleanup;
|
goto add_susp_cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nm_type == 1) {
|
||||||
|
/*
|
||||||
|
* ..and the part that goes to continuation area.
|
||||||
|
*/
|
||||||
|
ret = rrip_add_NM(t, info, name, strlen(name), 0, 1);
|
||||||
|
if (ret < 0) {
|
||||||
|
goto add_susp_cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (n->type == ECMA119_SYMLINK) {
|
if (n->type == ECMA119_SYMLINK) {
|
||||||
|
|
||||||
/* add the SL entry (or entries) */
|
/* add the SL entry (or entries) */
|
||||||
|
Loading…
Reference in New Issue
Block a user