aboutsummaryrefslogtreecommitdiff
path: root/project/dclib
diff options
context:
space:
mode:
authorWiimm <wiimm@wiimm.de>2021-05-08 11:35:32 +0200
committerWiimm <wiimm@wiimm.de>2021-05-08 11:35:32 +0200
commit9ae8841ec4720e74173e2f72fac33f0848bbf435 (patch)
treecdce547c82e5f4e0078e908ad1b86a152bd24c45 /project/dclib
parentf33ad95520f6c6bb8f192c8bcd1c17cf40ba6b6b (diff)
SZS v2.26a
Diffstat (limited to '')
-rw-r--r--project/dclib/dclib-basics.c17
-rw-r--r--project/dclib/dclib-basics.h5
-rw-r--r--project/dclib/dclib-file.c4
-rw-r--r--project/dclib/dclib-numeric.c20
-rw-r--r--project/dclib/lib-dol.c11
-rw-r--r--project/dclib/lib-dol.h4
6 files changed, 49 insertions, 12 deletions
diff --git a/project/dclib/dclib-basics.c b/project/dclib/dclib-basics.c
index bf0496c..fdea8fc 100644
--- a/project/dclib/dclib-basics.c
+++ b/project/dclib/dclib-basics.c
@@ -697,7 +697,7 @@ ccp PathCatPP ( char * buf, size_t bufsize, ccp path1, ccp path2 )
// concatenate path + path; returns path1 | path2 | buf
if ( !path1 || !*path1 )
- return path2 ? path2 : "";
+ return path2 ? path2 : EmptyString;
if ( !path2 || !*path2 )
return path1;
@@ -714,6 +714,21 @@ ccp PathCatPP ( char * buf, size_t bufsize, ccp path1, ccp path2 )
///////////////////////////////////////////////////////////////////////////////
+ccp PathCatDirP ( char * buf, size_t bufsize, ccp path1, ccp path2 )
+{
+ // concatenate path + path; returns path1 | path2 | buf
+
+ if ( !path1 || !*path1 )
+ return path2 ? path2 : EmptyString;
+
+ if ( !path2 || !*path2 || !IsDirectory(path1,0) )
+ return path1;
+
+ return PathCatPP(buf,bufsize,path1,path2);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+
ccp PathAllocPP ( ccp path1, ccp path2 )
{
char buf[PATH_MAX];
diff --git a/project/dclib/dclib-basics.h b/project/dclib/dclib-basics.h
index 80913e7..95e47bb 100644
--- a/project/dclib/dclib-basics.h
+++ b/project/dclib/dclib-basics.h
@@ -565,12 +565,14 @@ void be16n ( u16 * dest, const u16 * src, int n );
void be32n ( u32 * dest, const u32 * src, int n );
void bef4n ( float32 * dest, const float32 * src, int n );
void le16n ( u16 * dest, const u16 * src, int n );
+void le32n ( u32 * dest, const u32 * src, int n );
void lef4n ( float32 * dest, const float32 * src, int n );
void write_be16n ( u16 * dest, const u16 * src, int n );
void write_be32n ( u32 * dest, const u32 * src, int n );
void write_bef4n ( float32 * dest, const float32 * src, int n );
void write_le16n ( u16 * dest, const u16 * src, int n );
+void write_le32n ( u32 * dest, const u32 * src, int n );
void write_lef4n ( float32 * dest, const float32 * src, int n );
//-----------------------------------------------------------------------------
@@ -1368,6 +1370,9 @@ ccp PathAllocPPE ( ccp path1, ccp path2, ccp ext );
static inline ccp PathCatPPE ( char *buf, size_t bufsize, ccp path1, ccp path2, ccp ext )
{ return PathCatBufPPE(buf,bufsize,path1,path2,ext); }
+// like PathCatPP(), but ignores path2, if path1 is not empty and not a directory
+ccp PathCatDirP ( char * buf, size_t bufsize, ccp path1, ccp path2 );
+
// Same as PathCatPP*(), but use 'base' as prefix for relative paths.
// If 'base' is NULL (but not empty), use getcwd() instead.
// PathCatBufBP() and PathCatBP() are special: path can be part of buf
diff --git a/project/dclib/dclib-file.c b/project/dclib/dclib-file.c
index 1b287f8..f58ace1 100644
--- a/project/dclib/dclib-file.c
+++ b/project/dclib/dclib-file.c
@@ -1584,8 +1584,8 @@ enumError LoadFileAlloc
if ( size == -1 )
{
if ( silent < 2 )
- ERROR0(ERR_SYNTAX,"File not found: %s\n",path);
- return ERR_SYNTAX;
+ ERROR0(ERR_CANT_OPEN,"File not found: %s\n",path);
+ return ERR_CANT_OPEN;
}
if ( max_size && size > max_size )
diff --git a/project/dclib/dclib-numeric.c b/project/dclib/dclib-numeric.c
index 01fd734..50fd266 100644
--- a/project/dclib/dclib-numeric.c
+++ b/project/dclib/dclib-numeric.c
@@ -679,6 +679,16 @@ void le16n ( u16 * dest, const u16 * src, int n )
*dest++ = le16(src++);
}
+void le32n ( u32 * dest, const u32 * src, int n )
+{
+ DASSERT( dest );
+ DASSERT( n >= 0 );
+ DASSERT( src || !n );
+
+ while ( n-- > 0 )
+ *dest++ = le32(src++);
+}
+
void lef4n ( float32 * dest, const float32 * src, int n )
{
DASSERT( dest );
@@ -699,6 +709,16 @@ void write_le16n ( u16 * dest, const u16 * src, int n )
write_le16(dest++,*src++);
}
+void write_le32n ( u32 * dest, const u32 * src, int n )
+{
+ DASSERT( dest );
+ DASSERT( n >= 0 );
+ DASSERT( src || !n );
+
+ while ( n-- > 0 )
+ write_le32(dest++,*src++);
+}
+
void write_lef4n ( float32 * dest, const float32 * src, int n )
{
DASSERT( dest );
diff --git a/project/dclib/lib-dol.c b/project/dclib/lib-dol.c
index cbe7a7d..d671193 100644
--- a/project/dclib/lib-dol.c
+++ b/project/dclib/lib-dol.c
@@ -548,6 +548,8 @@ u32 GetDolOffsetByAddr
{
DASSERT(dol_head);
+ addr &= ~0x40000000; // remove mirror bit
+
int sect;
for ( sect = 0; sect < DOL_N_SECTIONS; sect++ )
{
@@ -585,7 +587,7 @@ u32 GetDolOffsetByAddr
u32 GetDolAddrByOffset
(
const dol_header_t *dol_head, // valid DOL header
- u32 off, // address to search
+ u32 off, // offset to search
u32 size, // >0: wanted size
u32 *valid_size // not NULL: return valid size
)
@@ -632,7 +634,7 @@ uint AddDolAddrByOffset
const dol_header_t *dol_head, // valid DOL header
MemMap_t *mm, // valid destination mem map, not cleared
bool use_tie, // TRUE: use InsertMemMapTie()
- u32 off, // address to search
+ u32 off, // offset to search
u32 size // size, may overlay multiple sections
)
{
@@ -1199,10 +1201,5 @@ void ResetWCH ( wch_control_t * wc )
//
///////////////////////////////////////////////////////////////////////////////
-/////////////// virtual dumps ///////////////
-///////////////////////////////////////////////////////////////////////////////
-
-//
-///////////////////////////////////////////////////////////////////////////////
/////////////// E N D ///////////////
///////////////////////////////////////////////////////////////////////////////
diff --git a/project/dclib/lib-dol.h b/project/dclib/lib-dol.h
index 50452e9..0f03e25 100644
--- a/project/dclib/lib-dol.h
+++ b/project/dclib/lib-dol.h
@@ -261,7 +261,7 @@ u32 GetDolOffsetByAddr
u32 GetDolAddrByOffset
(
const dol_header_t *dol_head, // valid DOL header
- u32 off, // address to search
+ u32 off, // offset to search
u32 size, // >0: wanted size
u32 *valid_size // not NULL: return valid size
);
@@ -273,7 +273,7 @@ uint AddDolAddrByOffset
const dol_header_t *dol_head, // valid DOL header
MemMap_t *mm, // valid destination mem map, not cleared
bool use_tie, // TRUE: use InsertMemMapTie()
- u32 off, // address to search
+ u32 off, // offset to search
u32 size // size, may overlay multiple sections
);