aboutsummaryrefslogtreecommitdiff
path: root/libpsn00b
diff options
context:
space:
mode:
authorspicyjpeg <88942473+spicyjpeg@users.noreply.github.com>2021-09-27 20:11:10 +0200
committerspicyjpeg <88942473+spicyjpeg@users.noreply.github.com>2021-09-27 20:11:10 +0200
commit0e3278a087daa25cba541d7c1dae19dfd4e2d422 (patch)
treedbd8ea7b2f3398865a396d3f425a6ab4ba4bed94 /libpsn00b
parent5bc36dfcfc64e48401a9c6472062020681b3511f (diff)
downloadpsn00bsdk-0e3278a087daa25cba541d7c1dae19dfd4e2d422.tar.gz
Misc MSVC/CMake fixes, also fixed childexec example
Diffstat (limited to 'libpsn00b')
-rw-r--r--libpsn00b/cmake/sdk.cmake41
-rw-r--r--libpsn00b/lzp/compress.c10
-rw-r--r--libpsn00b/lzp/crc.c8
-rw-r--r--libpsn00b/lzp/lzp.c32
-rw-r--r--libpsn00b/lzp/lzp.h18
-rw-r--r--libpsn00b/lzp/lzqlp.h23
-rw-r--r--libpsn00b/lzp/qlp.c24
7 files changed, 86 insertions, 70 deletions
diff --git a/libpsn00b/cmake/sdk.cmake b/libpsn00b/cmake/sdk.cmake
index 82e921c..4c2f330 100644
--- a/libpsn00b/cmake/sdk.cmake
+++ b/libpsn00b/cmake/sdk.cmake
@@ -22,23 +22,29 @@ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
#set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
-# Tell CMake not to run the linker when compiling test programs. This dodges
-# missing C++ standard library errors.
-set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+# Tell CMake not to run the linker when compiling test programs, and to pass
+# toolchain settings to the generated test projects. This dodges missing C++
+# standard library errors.
+set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY)
+set(CMAKE_TRY_COMPILE_PLATFORM_VARIABLES PSN00BSDK_TC PSN00BSDK_TARGET)
## Toolchain path setup
-# Attempt to find GCC. PSN00BSDK_TC can be left unset if the toolchain can be
-# found in the PATH environment variable.
+# Attempt to find GCC using a list of common installation locations.
+# PSN00BSDK_TC can be left unset if the toolchain can be found in any of these
+# or in the PATH environment variable.
find_program(
_gcc ${PSN00BSDK_TARGET}-gcc
HINTS
${PSN00BSDK_TC}/bin
${PSN00BSDK_TC}/../bin
+ # Same as ${CMAKE_INSTALL_PREFIX}/${PSN00BSDK_TARGET}/bin
${CMAKE_CURRENT_LIST_DIR}/../../../${PSN00BSDK_TARGET}/bin
PATHS
"C:/Program Files/${PSN00BSDK_TARGET}/bin"
+ "C:/Program Files (x86)/${PSN00BSDK_TARGET}/bin"
"C:/${PSN00BSDK_TARGET}/bin"
+ /opt/${PSN00BSDK_TARGET}/bin
/usr/local/${PSN00BSDK_TARGET}/bin
/usr/${PSN00BSDK_TARGET}/bin
NO_CACHE REQUIRED
@@ -57,18 +63,23 @@ endif()
## Toolchain executables
+# ${CMAKE_EXECUTABLE_SUFFIX} seems not to work in toolchain scripts, so we
+# can't rely on it to determine the host OS extension for executables. The best
+# workaround I found is to extract the extension from the path returned by
+# find_program() using a regex.
set(_prefix ${_bin}/${PSN00BSDK_TARGET})
+string(REGEX MATCH ".+-gcc(.*)$" _dummy ${_gcc})
-set(CMAKE_ASM_COMPILER ${_prefix}-gcc${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_C_COMPILER ${_prefix}-gcc${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_CXX_COMPILER ${_prefix}-g++${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_AR ${_prefix}-ar${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_LINKER ${_prefix}-ld${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_RANLIB ${_prefix}-ranlib${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_OBJCOPY ${_prefix}-objcopy${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_SIZE ${_prefix}-size${CMAKE_EXECUTABLE_SUFFIX})
-set(CMAKE_STRIP ${_prefix}-strip${CMAKE_EXECUTABLE_SUFFIX})
-set(TOOLCHAIN_NM ${_prefix}-nm${CMAKE_EXECUTABLE_SUFFIX})
+set(CMAKE_ASM_COMPILER ${_prefix}-gcc${CMAKE_MATCH_1})
+set(CMAKE_C_COMPILER ${_prefix}-gcc${CMAKE_MATCH_1})
+set(CMAKE_CXX_COMPILER ${_prefix}-g++${CMAKE_MATCH_1})
+set(CMAKE_AR ${_prefix}-ar${CMAKE_MATCH_1})
+set(CMAKE_LINKER ${_prefix}-ld${CMAKE_MATCH_1})
+set(CMAKE_RANLIB ${_prefix}-ranlib${CMAKE_MATCH_1})
+set(CMAKE_OBJCOPY ${_prefix}-objcopy${CMAKE_MATCH_1})
+set(CMAKE_SIZE ${_prefix}-size${CMAKE_MATCH_1})
+set(CMAKE_STRIP ${_prefix}-strip${CMAKE_MATCH_1})
+set(TOOLCHAIN_NM ${_prefix}-nm${CMAKE_MATCH_1})
## SDK setup
diff --git a/libpsn00b/lzp/compress.c b/libpsn00b/lzp/compress.c
index 5f2b78c..5969dd6 100644
--- a/libpsn00b/lzp/compress.c
+++ b/libpsn00b/lzp/compress.c
@@ -107,7 +107,7 @@ int get_penalty(int a, int b) {
}
-int lzCompress(void* outBuff, void* inBuff, int inSize, int level) {
+int lzCompress(void* outBuff, const void* inBuff, int inSize, int level) {
#if LZP_USE_MALLOC == FALSE
int head[HASH1_SIZE+HASH2_SIZE];
@@ -347,7 +347,7 @@ void lzResetHashSizes() {
#endif // LZP_NO_COMPRESS
-int lzDecompress(void* outBuff, void* inBuff, int inSize) {
+int lzDecompress(void* outBuff, const void* inBuff, int inSize) {
int p=0;
int len;
@@ -355,7 +355,7 @@ int lzDecompress(void* outBuff, void* inBuff, int inSize) {
int s;
int windowSize;
- inPtr = (unsigned char*)inBuff;
+ inPtr = (const unsigned char*)inBuff;
outPtr = (unsigned char*)outBuff;
inBytes = 0;
outBytes = 0;
@@ -408,7 +408,7 @@ int lzDecompress(void* outBuff, void* inBuff, int inSize) {
}
-int lzDecompressLen(void* outBuff, int outSize, void* inBuff, int inSize) {
+int lzDecompressLen(void* outBuff, int outSize, const void* inBuff, int inSize) {
int p=0;
int len;
@@ -416,7 +416,7 @@ int lzDecompressLen(void* outBuff, int outSize, void* inBuff, int inSize) {
int s;
int windowSize;
- inPtr = (unsigned char*)inBuff;
+ inPtr = (const unsigned char*)inBuff;
outPtr = (unsigned char*)outBuff;
inBytes = 0;
outBytes = 0;
diff --git a/libpsn00b/lzp/crc.c b/libpsn00b/lzp/crc.c
index c5ab702..7cc7bf3 100644
--- a/libpsn00b/lzp/crc.c
+++ b/libpsn00b/lzp/crc.c
@@ -49,7 +49,7 @@ void initTable32(unsigned int* table) {
}
-unsigned short lzCRC16(void* buff, int bytes, unsigned short crc) {
+unsigned short lzCRC16(const void* buff, int bytes, unsigned short crc) {
int i;
unsigned short tmp, short_c;
@@ -59,7 +59,7 @@ unsigned short lzCRC16(void* buff, int bytes, unsigned short crc) {
for(i=0; i<bytes; i++) {
- short_c = 0x00ff & (unsigned short)((unsigned char*)buff)[i];
+ short_c = 0x00ff & (unsigned short)((const unsigned char*)buff)[i];
tmp = crc ^ short_c;
crc = (crc >> 8) ^ crcTable[tmp&0xff];
@@ -70,10 +70,10 @@ unsigned short lzCRC16(void* buff, int bytes, unsigned short crc) {
}
-unsigned int lzCRC32(void* buff, int bytes, unsigned int crc) {
+unsigned int lzCRC32(const void* buff, int bytes, unsigned int crc) {
int i;
- unsigned char* byteBuff = (unsigned char*)buff;
+ unsigned char* byteBuff = (const unsigned char*)buff;
unsigned int byte;
unsigned int crcTable[256];
diff --git a/libpsn00b/lzp/lzp.c b/libpsn00b/lzp/lzp.c
index 1f4fea4..9f2da48 100644
--- a/libpsn00b/lzp/lzp.c
+++ b/libpsn00b/lzp/lzp.c
@@ -17,7 +17,7 @@ static char* lcase(char* text) {
}
-int lzpSearchFile(const char* fileName, void* lzpack) {
+int lzpSearchFile(const char* fileName, const LZP_HEAD* lzpack) {
int i;
char searchName[16];
@@ -27,8 +27,8 @@ int lzpSearchFile(const char* fileName, void* lzpack) {
strcpy(searchName, fileName);
lcase(searchName);
- fileEntry = (LZP_FILE*)(lzpack+4);
- for(i=0; i<((LZP_HEAD*)lzpack)->numFiles; i++) {
+ fileEntry = (LZP_FILE*)(((const char*)lzpack)+sizeof(LZP_HEAD));
+ for(i=0; i<(lzpack->numFiles); i++) {
strcpy(compareName, fileEntry[i].fileName);
lcase(compareName);
@@ -42,44 +42,44 @@ int lzpSearchFile(const char* fileName, void* lzpack) {
}
-LZP_FILE* lzpFileEntry(void* lzpack, int fileNum) {
+const LZP_FILE* lzpFileEntry(const LZP_HEAD* lzpack, int fileNum) {
- if (strncmp("LZP", ((LZP_HEAD*)lzpack)->id, 3) != 0)
+ if (strncmp("LZP", lzpack->id, 3) != 0)
return(NULL);
- if ((fileNum < 0) || (fileNum > (((LZP_HEAD*)lzpack)->numFiles-1)))
+ if ((fileNum < 0) || (fileNum > (lzpack->numFiles-1)))
return(NULL);
- return(&((LZP_FILE*)(lzpack+4))[fileNum]);
+ return &((LZP_FILE*)(((const char*)lzpack)+sizeof(LZP_HEAD)))[fileNum];
}
-int lzpFileSize(void* lzpack, int fileNum) {
+int lzpFileSize(const LZP_HEAD* lzpack, int fileNum) {
- if (strncmp("LZP", ((LZP_HEAD*)lzpack)->id, 3) != 0)
+ if (strncmp("LZP", lzpack->id, 3) != 0)
return 0;
- if ((fileNum < 0) || (fileNum > (((LZP_HEAD*)lzpack)->numFiles-1)))
+ if ((fileNum < 0) || (fileNum > (lzpack->numFiles-1)))
return 0;
- return ((LZP_FILE*)(lzpack+4))[fileNum].fileSize;
+ return ((LZP_FILE*)(((const char*)lzpack)+sizeof(LZP_HEAD)))[fileNum].fileSize;
}
-int lzpUnpackFile(void* buff, void* lzpack, int fileNum) {
+int lzpUnpackFile(void* buff, const LZP_HEAD* lzpack, int fileNum) {
- LZP_FILE* fileEntry = &((LZP_FILE*)(lzpack+4))[fileNum];
+ LZP_FILE* fileEntry = &((LZP_FILE*)(((const char*)lzpack)+sizeof(LZP_HEAD)))[fileNum];
int unpackedSize;
// Check ID header
- if (strncmp("LZP", ((LZP_HEAD*)lzpack)->id, 3) != 0)
+ if (strncmp("LZP", lzpack->id, 3) != 0)
return(LZP_ERR_INVALID_PACK);
// Do a CRC16 check of the compressed data's integrity
- if (lzCRC32(lzpack+fileEntry->offset, fileEntry->packedSize, LZP_CRC32_REMAINDER) != fileEntry->crc)
+ if (lzCRC32(((const char*)lzpack)+fileEntry->offset, fileEntry->packedSize, LZP_CRC32_REMAINDER) != fileEntry->crc)
return(LZP_ERR_CRC_MISMATCH);
// Decompress data to the specified address
- unpackedSize = lzDecompress(buff, lzpack+fileEntry->offset, fileEntry->packedSize);
+ unpackedSize = lzDecompress(buff, ((const char*)lzpack)+fileEntry->offset, fileEntry->packedSize);
if (unpackedSize < 0)
return(unpackedSize);
diff --git a/libpsn00b/lzp/lzp.h b/libpsn00b/lzp/lzp.h
index ffd7933..cfeeb72 100644
--- a/libpsn00b/lzp/lzp.h
+++ b/libpsn00b/lzp/lzp.h
@@ -111,7 +111,7 @@ extern "C" {
*
* \returns The size of the compressed data in bytes.
*/
-int lzCompress(void* outBuff, void* inBuff, int inSize, int level);
+int lzCompress(void* outBuff, const void* inBuff, int inSize, int level);
/*! Decompress a compressed block of data.
*
@@ -130,9 +130,9 @@ int lzCompress(void* outBuff, void* inBuff, int inSize, int level);
* \returns Size of decompressed data in bytes or LZP_ERR_DECOMPRESS if a
* decompression error occurred.
*/
-int lzDecompress(void* outBuff, void* inBuff, int inSize);
+int lzDecompress(void* outBuff, const void* inBuff, int inSize);
-int lzDecompressLen(void* outBuff, int outSize, void* inBuff, int inSize);
+int lzDecompressLen(void* outBuff, int outSize, const void* inBuff, int inSize);
/*! Sets the sizes of hash tables for data compression.
*
@@ -162,7 +162,7 @@ void lzResetHashSizes();
*
* \returns CRC16 hash of specified buffer.
*/
-unsigned short lzCRC16(void* buff, int bytes, unsigned short crc);
+unsigned short lzCRC16(const void* buff, int bytes, unsigned short crc);
/*! Calculates a CRC32 hash of the specified buffer.
*
@@ -172,7 +172,7 @@ unsigned short lzCRC16(void* buff, int bytes, unsigned short crc);
*
* \returns CRC32 hash of specified buffer.
*/
-unsigned int lzCRC32(void* buff, int bytes, unsigned int crc);
+unsigned int lzCRC32(const void* buff, int bytes, unsigned int crc);
/*! @} */
@@ -189,9 +189,9 @@ unsigned int lzCRC32(void* buff, int bytes, unsigned int crc);
*
* \returns File index of found file or one of \ref libraryErrorCodes if an error occurred.
*/
-int lzpSearchFile(const char* fileName, void* lzpack);
+int lzpSearchFile(const char* fileName, const LZP_HEAD* lzpack);
-int lzpFileSize(void* lzpack, int fileNum);
+int lzpFileSize(const LZP_HEAD* lzpack, int fileNum);
/*! Get a pointer to a file entry inside of an LZP archive.
*
@@ -200,7 +200,7 @@ int lzpFileSize(void* lzpack, int fileNum);
*
* \returns A pointer to an LZP_FILE struct or NULL if an error occurred.
*/
-LZP_FILE* lzpFileEntry(void* lzpack, int fileNum);
+const LZP_FILE* lzpFileEntry(const LZP_HEAD* lzpack, int fileNum);
/*! Unpacks a file from an LZP archive to the specified memory buffer.
*
@@ -210,7 +210,7 @@ LZP_FILE* lzpFileEntry(void* lzpack, int fileNum);
*
* \returns Size of decompressed file in bytes or one of \ref libraryErrorCodes if an error occurred.
*/
-int lzpUnpackFile(void* buff, void* lzpack, int fileNum);
+int lzpUnpackFile(void* buff, const LZP_HEAD* lzpack, int fileNum);
/*! @} */
diff --git a/libpsn00b/lzp/lzqlp.h b/libpsn00b/lzp/lzqlp.h
index fae6438..5b70b40 100644
--- a/libpsn00b/lzp/lzqlp.h
+++ b/libpsn00b/lzp/lzqlp.h
@@ -1,6 +1,11 @@
#ifndef _QLP_H
#define _QLP_H
+#include <sys/types.h>
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
#define PACK_ERR_NONE 0
#define PACK_ERR_INVALID -1
#define PACK_ERR_NOTFOUND -2
@@ -8,19 +13,19 @@
#define PACK_ERR_READ_FAULT -4
typedef struct {
- char id[3];
- unsigned char numfiles;
+ char id[3];
+ u_char numfiles;
} QLP_HEAD;
typedef struct {
- char name[16];
- unsigned int size;
- unsigned int offs;
+ char name[16];
+ u_int size;
+ u_int offs;
} QLP_FILE;
-int qlpFileCount(void* qlpfile);
-QLP_FILE* qlpFileEntry(int index, void* qlpfile);
-void* qlpFileAddr(int index, void* qlpfile);
-int qlpFindFile(char* fileName, void* qlpfile);
+int qlpFileCount(const QLP_HEAD* qlpfile);
+const QLP_FILE* qlpFileEntry(int index, const QLP_HEAD* qlpfile);
+const void* qlpFileAddr(int index, const QLP_HEAD* qlpfile);
+int qlpFindFile(char* fileName, const QLP_HEAD* qlpfile);
#endif // _QLP_H \ No newline at end of file
diff --git a/libpsn00b/lzp/qlp.c b/libpsn00b/lzp/qlp.c
index 3be8356..e54f99f 100644
--- a/libpsn00b/lzp/qlp.c
+++ b/libpsn00b/lzp/qlp.c
@@ -14,34 +14,34 @@ static char* lcase(char* str) {
}
-int qlpFileCount(void* qlpfile) {
+int qlpFileCount(const QLP_HEAD* qlpfile) {
- if (strncmp(((QLP_HEAD*)qlpfile)->id, "QLP", 3) != 0)
+ if (strncmp(qlpfile->id, "QLP", 3) != 0)
return(PACK_ERR_INVALID);
- return(((QLP_HEAD*)qlpfile)->numfiles);
+ return(qlpfile->numfiles);
}
-QLP_FILE* qlpFileEntry(int index, void* qlpfile) {
+const QLP_FILE* qlpFileEntry(int index, const QLP_HEAD* qlpfile) {
- if (strncmp(((QLP_HEAD*)qlpfile)->id, "QLP", 3) != 0)
+ if (strncmp(qlpfile->id, "QLP", 3) != 0)
return(NULL);
- if (index > ((QLP_HEAD*)qlpfile)->numfiles)
+ if (index > qlpfile->numfiles)
return(NULL);
- return(&((QLP_FILE*)(qlpfile+4))[index]);
+ return(&((QLP_FILE*)(((const char*)qlpfile)+sizeof(QLP_HEAD)))[index]);
}
-void* qlpFileAddr(int index, void* qlpfile) {
+const void* qlpFileAddr(int index, const QLP_HEAD* qlpfile) {
- return( qlpfile+((QLP_FILE*)(qlpfile+4))[index].offs );
+ return( ((const char*)qlpfile)+((QLP_FILE*)(((const char*)qlpfile)+sizeof(QLP_HEAD)))[index].offs );
}
-int qlpFindFile(char* fileName, void* qlpfile) {
+int qlpFindFile(char* fileName, const QLP_HEAD* qlpfile) {
int i;
char nameBuff[2][16];
@@ -49,9 +49,9 @@ int qlpFindFile(char* fileName, void* qlpfile) {
strcpy(nameBuff[0], fileName);
lcase(nameBuff[0]);
- for(i=0; i<((QLP_HEAD*)qlpfile)->numfiles; i++) {
+ for(i=0; i<(qlpfile->numfiles); i++) {
- strcpy(nameBuff[1], ((QLP_FILE*)(qlpfile+4))[i].name);
+ strcpy(nameBuff[1], ((QLP_FILE*)(((const char*)qlpfile)+sizeof(QLP_HEAD)))[i].name);
lcase(nameBuff[1]);
if (strcmp(nameBuff[0], nameBuff[1]) == 0)