diff options
Diffstat (limited to 'project/dclib')
| -rw-r--r-- | project/dclib/dclib-basics.c | 17 | ||||
| -rw-r--r-- | project/dclib/dclib-basics.h | 5 | ||||
| -rw-r--r-- | project/dclib/dclib-file.c | 4 | ||||
| -rw-r--r-- | project/dclib/dclib-numeric.c | 20 | ||||
| -rw-r--r-- | project/dclib/lib-dol.c | 11 | ||||
| -rw-r--r-- | project/dclib/lib-dol.h | 4 |
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 ); |
