diff options
| author | Wiimm <wiimm@wiimm.de> | 2021-04-24 09:10:02 +0200 |
|---|---|---|
| committer | Wiimm <wiimm@wiimm.de> | 2021-04-24 09:10:02 +0200 |
| commit | f33ad95520f6c6bb8f192c8bcd1c17cf40ba6b6b (patch) | |
| tree | 60c229f3f17eb965fda2bfa19021559123af65b4 /project/src/lib-brres.c | |
| parent | 4f14fc871ab525488d821e132f80da99841d5646 (diff) | |
SZS v2.25a
Diffstat (limited to 'project/src/lib-brres.c')
| -rw-r--r-- | project/src/lib-brres.c | 34 |
1 files changed, 23 insertions, 11 deletions
diff --git a/project/src/lib-brres.c b/project/src/lib-brres.c index 10ab6d4..4bb1058 100644 --- a/project/src/lib-brres.c +++ b/project/src/lib-brres.c @@ -710,8 +710,6 @@ enumError CreateBRRES if ( f_ptr->dir_id != dir_id ) continue; - noPRINT("*** %d %3u %s\n",f_ptr->is_dir,f_ptr->dir_id,f_ptr->path); - //--- write name data IsolateFilename(path_buf,sizeof(path_buf),f_ptr->path,f_ptr->fform); @@ -849,22 +847,36 @@ static int iterate_brres_group { it->name = 0; ccp name = ""; - uint name_len = 0; + int name_len = 0; uint new_path_len = path_len; const uint name_off = it->endian->rd32(&entry->name_off); - if (name_off) + + if ( name_off && name_off < szs->size ) { it->name = name = (ccp)grp + name_off; name_len = it->endian->rd32(name-4); - if ( path_len + name_len < sizeof(it->path)-2 ) - { - it->trail_path = it->path+path_len; - memcpy(it->trail_path,name,name_len); - new_path_len += name_len; - it->path[new_path_len] = 0; - } + if ( name_len < 0 ) + name_len = strlen(name); + if ( name_len < 1 || name_off + name_len > szs->size ) + name_len = 0; + } + + char name_buf[20]; + if ( name_len < 1 ) + { + name_len = snprintf(name_buf,sizeof(name_buf),"_file_%zu",entry-grp->entry); + name = name_buf; + it->name = 0; } + if ( path_len + name_len < sizeof(it->path)-2 ) + { + it->trail_path = it->path+path_len; + memcpy(it->trail_path,name,name_len); + new_path_len += name_len; + it->path[new_path_len] = 0; + } + const u8 * data = (u8*)grp + it->endian->rd32(&entry->data_off); it->index++; if ( data < it->root_end ) |
