mirror of
https://github.com/coop-deluxe/sm64coopdx.git
synced 2024-11-21 19:45:10 +00:00
Add crash preventions to DynOS_Tex_Get
This commit is contained in:
parent
57af112f37
commit
a2fd2983b2
8 changed files with 20 additions and 1341 deletions
|
@ -734,10 +734,10 @@ void Print(const char *aFmt, Args... aArgs) {
|
|||
}
|
||||
|
||||
template <typename... Args>
|
||||
void PrintConsole(const char *aFmt, Args... aArgs) {
|
||||
void PrintConsole(enum ConsoleMessageLevel level, const char *aFmt, Args... aArgs) {
|
||||
snprintf(gDjuiConsoleTmpBuffer, CONSOLE_MAX_TMP_BUFFER, aFmt, aArgs...);
|
||||
sys_swap_backslashes(gDjuiConsoleTmpBuffer);
|
||||
djui_console_message_create(gDjuiConsoleTmpBuffer, CONSOLE_MESSAGE_INFO);
|
||||
djui_console_message_create(gDjuiConsoleTmpBuffer, level);
|
||||
}
|
||||
|
||||
template <typename... Args>
|
||||
|
@ -750,7 +750,7 @@ void PrintError(const char *aFmt, Args... aArgs) {
|
|||
#define PrintDataError(...) { \
|
||||
if (aGfxData->mErrorCount == 0) Print(" ERROR!"); \
|
||||
Print(__VA_ARGS__); \
|
||||
PrintConsole(__VA_ARGS__); \
|
||||
PrintConsole(CONSOLE_MESSAGE_ERROR, __VA_ARGS__); \
|
||||
aGfxData->mErrorCount++; \
|
||||
}
|
||||
|
||||
|
|
|
@ -188,7 +188,7 @@ static void DynOS_Actor_Generate(const SysPath &aPackFolder, Array<Pair<u64, Str
|
|||
|
||||
// Parse data
|
||||
PrintNoNewLine("%s.bin: Model identifier: %X - Processing... ", _GeoRootName.begin(), _GfxData->mModelIdentifier);
|
||||
PrintConsole("%s.bin: Model identifier: %X - Processing... ", _GeoRootName.begin(), _GfxData->mModelIdentifier);
|
||||
PrintConsole(CONSOLE_MESSAGE_INFO, "%s.bin: Model identifier: %X - Processing... ", _GeoRootName.begin(), _GfxData->mModelIdentifier);
|
||||
DynOS_Geo_Parse(_GfxData, _GeoNode, true);
|
||||
|
||||
// Init animation data
|
||||
|
|
|
@ -2626,7 +2626,7 @@ static void DynOS_Bhv_Generate(const SysPath &aPackFolder, Array<Pair<u64, Strin
|
|||
|
||||
// Parse data
|
||||
PrintNoNewLine("%s.bhv: Model identifier: %X - Processing... ", _BhvRootName.begin(), _GfxData->mModelIdentifier);
|
||||
PrintConsole("%s.bhv: Model identifier: %X - Processing... ", _BhvRootName.begin(), _GfxData->mModelIdentifier);
|
||||
PrintConsole(CONSOLE_MESSAGE_INFO, "%s.bhv: Model identifier: %X - Processing... ", _BhvRootName.begin(), _GfxData->mModelIdentifier);
|
||||
DynOS_Bhv_Parse(_GfxData, _BhvNode, true);
|
||||
|
||||
// Write if no error
|
||||
|
|
|
@ -706,7 +706,7 @@ void DynOS_Col_Generate(const SysPath &aPackFolder, Array<Pair<u64, String>> _Ac
|
|||
|
||||
// Parse data
|
||||
PrintNoNewLine("%s.col: Model identifier: %X - Processing... ", _ColRootName.begin(), _GfxData->mModelIdentifier);
|
||||
PrintConsole("%s.col: Model identifier: %X - Processing... ", _ColRootName.begin(), _GfxData->mModelIdentifier);
|
||||
PrintConsole(CONSOLE_MESSAGE_INFO, "%s.col: Model identifier: %X - Processing... ", _ColRootName.begin(), _GfxData->mModelIdentifier);
|
||||
DynOS_Col_Parse(_GfxData, _ColNode, true);
|
||||
|
||||
// Write if no error
|
||||
|
|
|
@ -1097,7 +1097,7 @@ static bool DynOS_Lvl_GeneratePack_Internal(const SysPath &aPackFolder, Array<Pa
|
|||
|
||||
// Parse data
|
||||
PrintNoNewLine("%s.lvl: Model identifier: %X - Processing... ", _LvlRootName.begin(), _GfxData->mModelIdentifier);
|
||||
PrintConsole("%s.lvl: Model identifier: %X - Processing... ", _LvlRootName.begin(), _GfxData->mModelIdentifier);
|
||||
PrintConsole(CONSOLE_MESSAGE_INFO, "%s.lvl: Model identifier: %X - Processing... ", _LvlRootName.begin(), _GfxData->mModelIdentifier);
|
||||
DynOS_Lvl_Parse(_GfxData, _LvlRoot, true);
|
||||
|
||||
// Force all of the movtexs, collisions, and trajectories into the compiled lvl
|
||||
|
|
|
@ -462,6 +462,19 @@ bool DynOS_Tex_Get(const char* aTexName, struct TextureInfo* aOutTexInfo) {
|
|||
// load the texture if it hasn't been yet
|
||||
if (_Data->mRawData.begin() == NULL) {
|
||||
u8 *_RawData = stbi_load_from_memory(_Data->mPngData.begin(), _Data->mPngData.Count(), &_Data->mRawWidth, &_Data->mRawHeight, NULL, 4);
|
||||
// texture data is corrupted
|
||||
if (_RawData == NULL) {
|
||||
PrintError("Attempted to load corrupted tex file: %s", aTexName);
|
||||
PrintConsole(CONSOLE_MESSAGE_ERROR, "Attempted to load corrupted tex file: %s", aTexName);
|
||||
return false;
|
||||
}
|
||||
// texture width or height is NPOT
|
||||
if (!(_Data->mRawWidth > 0 && _Data->mRawWidth & (_Data->mRawWidth - 1) == 0) ||
|
||||
!(_Data->mRawHeight > 0 && _Data->mRawHeight & (_Data->mRawHeight - 1) == 0)) {
|
||||
PrintError("Attempted to load tex file with non power of two width or height: %s", aTexName);
|
||||
PrintConsole(CONSOLE_MESSAGE_ERROR, "Attempted to load tex file with non power of two width or height: %s", aTexName);
|
||||
return false;
|
||||
}
|
||||
_Data->mRawFormat = G_IM_FMT_RGBA;
|
||||
_Data->mRawSize = G_IM_SIZ_32b;
|
||||
_Data->mRawData = Array<u8>(_RawData, _RawData + (_Data->mRawWidth * _Data->mRawHeight * 4));
|
||||
|
|
1224
src/pc/configini.c
1224
src/pc/configini.c
File diff suppressed because it is too large
Load diff
|
@ -1,110 +0,0 @@
|
|||
/*
|
||||
libconfigini - an ini formatted configuration parser library
|
||||
Copyright (C) 2013-present Taner YILMAZ <taner44@gmail.com>
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions
|
||||
are met:
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in the
|
||||
documentation and/or other materials provided with the distribution.
|
||||
3. Neither the name of copyright holders nor the names of its
|
||||
contributors may be used to endorse or promote products derived
|
||||
from this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
|
||||
TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDERS OR CONTRIBUTORS
|
||||
BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef CONFIGINI_H_
|
||||
#define CONFIGINI_H_
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
|
||||
typedef struct Config Config;
|
||||
|
||||
|
||||
#define CONFIG_SECTION_FLAT NULL /* config is flat data (has no section) */
|
||||
|
||||
|
||||
/**
|
||||
* \brief Return types
|
||||
*/
|
||||
typedef enum
|
||||
{
|
||||
CONFIG_OK, /* ok (no error) */
|
||||
CONFIG_ERR_FILE, /* file io error (file not exists, cannot open file, ...) */
|
||||
CONFIG_ERR_NO_SECTION, /* section does not exist */
|
||||
CONFIG_ERR_NO_KEY, /* key does not exist */
|
||||
CONFIG_ERR_MEMALLOC, /* memory allocation failed */
|
||||
CONFIG_ERR_INVALID_PARAM, /* invalid parametrs (as NULL) */
|
||||
CONFIG_ERR_INVALID_VALUE, /* value of key is invalid (inconsistent data, empty data) */
|
||||
CONFIG_ERR_PARSING, /* parsing error of data (does not fit to config format) */
|
||||
} ConfigRet;
|
||||
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
Config* ConfigNew (void);
|
||||
void ConfigFree (Config *cfg);
|
||||
|
||||
const char *ConfigRetToString (ConfigRet ret);
|
||||
|
||||
ConfigRet ConfigRead (FILE *fp, Config **cfg);
|
||||
ConfigRet ConfigReadFile (const char *filename, Config **cfg);
|
||||
|
||||
ConfigRet ConfigPrint (const Config *cfg, FILE *stream);
|
||||
ConfigRet ConfigPrintToFile (const Config *cfg, char *filename);
|
||||
ConfigRet ConfigPrintSettings (const Config *cfg, FILE *stream);
|
||||
|
||||
int ConfigGetSectionCount (const Config *cfg);
|
||||
int ConfigGetKeyCount (const Config *cfg, const char *sect);
|
||||
|
||||
ConfigRet ConfigSetCommentCharset(Config *cfg, const char *comment_ch);
|
||||
ConfigRet ConfigSetKeyValSepChar (Config *cfg, char ch);
|
||||
ConfigRet ConfigSetBoolString (Config *cfg, const char *true_str, const char *false_str);
|
||||
|
||||
ConfigRet ConfigReadString (const Config *cfg, const char *sect, const char *key, char * val, int size, const char * dfl_val);
|
||||
ConfigRet ConfigReadInt (const Config *cfg, const char *sect, const char *key, int * val, int dfl_val);
|
||||
ConfigRet ConfigReadUnsignedInt (const Config *cfg, const char *sect, const char *key, unsigned int *val, unsigned int dfl_val);
|
||||
ConfigRet ConfigReadFloat (const Config *cfg, const char *sect, const char *key, float * val, float dfl_val);
|
||||
ConfigRet ConfigReadDouble (const Config *cfg, const char *sect, const char *key, double * val, double dfl_val);
|
||||
ConfigRet ConfigReadBool (const Config *cfg, const char *sect, const char *key, bool * val, bool dfl_val);
|
||||
|
||||
ConfigRet ConfigAddString (Config *cfg, const char *sect, const char *key, const char *val);
|
||||
ConfigRet ConfigAddInt (Config *cfg, const char *sect, const char *key, int val);
|
||||
ConfigRet ConfigAddUnsignedInt (Config *cfg, const char *sect, const char *key, unsigned int val);
|
||||
ConfigRet ConfigAddFloat (Config *cfg, const char *sect, const char *key, float val);
|
||||
ConfigRet ConfigAddDouble (Config *cfg, const char *sect, const char *key, double val);
|
||||
ConfigRet ConfigAddBool (Config *cfg, const char *sect, const char *key, bool val);
|
||||
|
||||
bool ConfigHasSection (const Config *cfg, const char *sect);
|
||||
|
||||
ConfigRet ConfigRemoveSection (Config *cfg, const char *sect);
|
||||
ConfigRet ConfigRemoveKey (Config *cfg, const char *sect, const char *key);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* CONFIGINI_H_ */
|
Loading…
Reference in a new issue