mirror of
https://github.com/Fledge68/WiiFlow_Lite.git
synced 2025-02-20 05:52:41 +01:00
-set main dol optimize level back to -O2
-set optimize level of booter from -Os to -O1 -added back name addition for gamecube game disc 2 -made gprintf, fmt and sfmt a bit more safe -removed unneeded char for list check, just wastes memory
This commit is contained in:
parent
fb7cdc4d75
commit
3d2363bd78
@ -55,7 +55,7 @@ ios := 249
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# options for code generation
|
# options for code generation
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
CFLAGS = -g -O1 -Wall -Wextra -Wno-multichar $(MACHDEP) $(INCLUDE) -DHAVE_CONFIG_H
|
CFLAGS = -g -O2 -Wall -Wextra -Wno-multichar $(MACHDEP) $(INCLUDE) -DHAVE_CONFIG_H
|
||||||
CXXFLAGS = $(CFLAGS)
|
CXXFLAGS = $(CFLAGS)
|
||||||
|
|
||||||
LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80620000,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size
|
LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80620000,-wrap,malloc,-wrap,free,-wrap,memalign,-wrap,calloc,-wrap,realloc,-wrap,malloc_usable_size
|
||||||
|
@ -23,7 +23,7 @@ INCLUDES := source
|
|||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
# options for code generation
|
# options for code generation
|
||||||
#---------------------------------------------------------------------------------
|
#---------------------------------------------------------------------------------
|
||||||
CFLAGS = -g -Os -Wall -Wextra -Wno-multichar $(MACHDEP) $(INCLUDE) -DHAVE_CONFIG_H
|
CFLAGS = -g -O1 -Wall -Wextra -Wno-multichar $(MACHDEP) $(INCLUDE) -DHAVE_CONFIG_H
|
||||||
CXXFLAGS = $(CFLAGS)
|
CXXFLAGS = $(CFLAGS)
|
||||||
|
|
||||||
LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80A00000
|
LDFLAGS = -g $(MACHDEP) -Wl,-Map,$(notdir $@).map,--section-start,.init=0x80A00000
|
||||||
|
@ -17,7 +17,8 @@ bool geckoinit = false;
|
|||||||
bool textVideoInit = false;
|
bool textVideoInit = false;
|
||||||
bool bufferMessages = true;
|
bool bufferMessages = true;
|
||||||
bool WriteToSD = false;
|
bool WriteToSD = false;
|
||||||
char tmpfilebuffer[1024];
|
#define SDWRITE_SIZE 1024
|
||||||
|
char sdwritebuffer[SDWRITE_SIZE];
|
||||||
|
|
||||||
static ssize_t __out_write(struct _reent *r __attribute__((unused)), int fd __attribute__((unused)), const char *ptr, size_t len)
|
static ssize_t __out_write(struct _reent *r __attribute__((unused)), int fd __attribute__((unused)), const char *ptr, size_t len)
|
||||||
{
|
{
|
||||||
@ -65,36 +66,39 @@ static void USBGeckoOutput()
|
|||||||
devoptab_list[STD_ERR] = &gecko_out;
|
devoptab_list[STD_ERR] = &gecko_out;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void WriteToFile(char* tmp, int len)
|
static void WriteToFile(const char* tmp, size_t len)
|
||||||
{
|
{
|
||||||
if(!bufferMessages)
|
if(!bufferMessages)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if((strlen(tmpfilebuffer) + len) < 1024)
|
if((strlen(sdwritebuffer) + len) < SDWRITE_SIZE)
|
||||||
strcat(tmpfilebuffer, tmp);
|
strcat(sdwritebuffer, tmp);
|
||||||
|
|
||||||
if(WriteToSD)
|
if(WriteToSD)
|
||||||
{
|
{
|
||||||
FILE *outfile = fopen("sd:/wiiflow.log", "a");
|
FILE *outfile = fopen("sd:/wiiflow.log", "a");
|
||||||
if(outfile)
|
if(outfile)
|
||||||
{
|
{
|
||||||
fwrite(tmpfilebuffer, 1, strlen(tmpfilebuffer), outfile);
|
fwrite(sdwritebuffer, 1, strlen(sdwritebuffer), outfile);
|
||||||
memset(tmpfilebuffer, 0, 1024);
|
memset(sdwritebuffer, 0, SDWRITE_SIZE);
|
||||||
fclose(outfile);
|
fclose(outfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
char gprintfBuffer[256];
|
#define GPRINTF_SIZE 256
|
||||||
|
static char gprintfBuffer[GPRINTF_SIZE];
|
||||||
void gprintf(const char *format, ...)
|
void gprintf(const char *format, ...)
|
||||||
{
|
{
|
||||||
va_list va;
|
va_list va;
|
||||||
va_start(va, format);
|
va_start(va, format);
|
||||||
int len = vsnprintf(gprintfBuffer, 255, format, va);
|
size_t len = vsnprintf(gprintfBuffer, GPRINTF_SIZE - 1, format, va);
|
||||||
|
gprintfBuffer[GPRINTF_SIZE - 1] = '\0';
|
||||||
|
va_end(va);
|
||||||
|
|
||||||
__out_write(NULL, 0, gprintfBuffer, len);
|
__out_write(NULL, 0, gprintfBuffer, len);
|
||||||
WifiGecko_Send(gprintfBuffer, len);
|
WifiGecko_Send(gprintfBuffer, len);
|
||||||
WriteToFile(gprintfBuffer, len);
|
WriteToFile(gprintfBuffer, len);
|
||||||
va_end(va);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char ascii(char s)
|
char ascii(char s)
|
||||||
@ -137,14 +141,15 @@ void ghexdump(void *d, int len)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *initstr = "USB Gecko inited.\n";
|
static const char *initstr = "USB Gecko inited.\n";
|
||||||
bool InitGecko()
|
bool InitGecko()
|
||||||
{
|
{
|
||||||
if(geckoinit)
|
if(geckoinit)
|
||||||
return geckoinit;
|
return geckoinit;
|
||||||
|
|
||||||
USBGeckoOutput();
|
USBGeckoOutput();
|
||||||
memset(tmpfilebuffer, 0, 1024);
|
memset(sdwritebuffer, 0, SDWRITE_SIZE);
|
||||||
|
memset(gprintfBuffer, 0, GPRINTF_SIZE);
|
||||||
|
|
||||||
#ifdef sd_write_log
|
#ifdef sd_write_log
|
||||||
WriteToSD = true;
|
WriteToSD = true;
|
||||||
|
@ -1,16 +1,18 @@
|
|||||||
|
|
||||||
#include "text.hpp"
|
#include "text.hpp"
|
||||||
|
|
||||||
int currentStr = 0;
|
int currentStr = 0;
|
||||||
char fmt_buffer[MAX_USES][MAX_MSG_SIZE];
|
static char fmt_buffer[MAX_USES][MAX_MSG_SIZE];
|
||||||
char general_buffer[MAX_MSG_SIZE];
|
static char general_buffer[MAX_MSG_SIZE];
|
||||||
|
|
||||||
// Simplified use of sprintf
|
// Simplified use of sprintf
|
||||||
const char *fmt(const char *format, ...)
|
char *fmt(const char *format, ...)
|
||||||
{
|
{
|
||||||
va_list va;
|
va_list va;
|
||||||
va_start(va, format);
|
va_start(va, format);
|
||||||
currentStr = (currentStr + 1) % MAX_USES;
|
currentStr = (currentStr + 1) % MAX_USES;
|
||||||
vsnprintf(fmt_buffer[currentStr], MAX_MSG_SIZE - 1, format, va);
|
vsnprintf(fmt_buffer[currentStr], MAX_MSG_SIZE - 1, format, va);
|
||||||
|
fmt_buffer[currentStr][MAX_MSG_SIZE - 1] = '\0';
|
||||||
va_end(va);
|
va_end(va);
|
||||||
return fmt_buffer[currentStr];
|
return fmt_buffer[currentStr];
|
||||||
}
|
}
|
||||||
@ -19,7 +21,8 @@ string sfmt(const char *format, ...)
|
|||||||
{
|
{
|
||||||
va_list va;
|
va_list va;
|
||||||
va_start(va, format);
|
va_start(va, format);
|
||||||
int len = vsnprintf(general_buffer, MAX_MSG_SIZE - 1, format, va);
|
size_t len = vsnprintf(general_buffer, MAX_MSG_SIZE - 1, format, va);
|
||||||
|
general_buffer[MAX_MSG_SIZE - 1] = '\0';
|
||||||
va_end(va);
|
va_end(va);
|
||||||
return string(general_buffer, len);
|
return string(general_buffer, len);
|
||||||
}
|
}
|
||||||
@ -80,6 +83,7 @@ wstringEx wfmt(const wstringEx &format, ...)
|
|||||||
va_list va;
|
va_list va;
|
||||||
va_start(va, format);
|
va_start(va, format);
|
||||||
vsnprintf(general_buffer, MAX_MSG_SIZE - 1, format.toUTF8().c_str(), va);
|
vsnprintf(general_buffer, MAX_MSG_SIZE - 1, format.toUTF8().c_str(), va);
|
||||||
|
general_buffer[MAX_MSG_SIZE - 1] = '\0';
|
||||||
va_end(va);
|
va_end(va);
|
||||||
wstringEx wide_buffer;
|
wstringEx wide_buffer;
|
||||||
wide_buffer.fromUTF8(general_buffer);
|
wide_buffer.fromUTF8(general_buffer);
|
||||||
|
@ -61,7 +61,7 @@ enum {
|
|||||||
MAX_USES = 8,
|
MAX_USES = 8,
|
||||||
};
|
};
|
||||||
|
|
||||||
const char *fmt(const char *format, ...);
|
char *fmt(const char *format, ...);
|
||||||
std::string sfmt(const char *format, ...);
|
std::string sfmt(const char *format, ...);
|
||||||
wstringEx wfmt(const wstringEx &format, ...);
|
wstringEx wfmt(const wstringEx &format, ...);
|
||||||
bool checkFmt(const wstringEx &ref, const wstringEx &format);
|
bool checkFmt(const wstringEx &ref, const wstringEx &format);
|
||||||
|
@ -68,7 +68,7 @@ static void AddISO(const char *GameID, const char *GameTitle, const char *GamePa
|
|||||||
memset((void*)&ListElement, 0, sizeof(dir_discHdr));
|
memset((void*)&ListElement, 0, sizeof(dir_discHdr));
|
||||||
ListElement.index = m_gameList.size();
|
ListElement.index = m_gameList.size();
|
||||||
if(GameID != NULL) strncpy(ListElement.id, GameID, 6);
|
if(GameID != NULL) strncpy(ListElement.id, GameID, 6);
|
||||||
if(GamePath != NULL) strncpy(ListElement.path, GamePath, sizeof(ListElement.path));
|
if(GamePath != NULL) strncpy(ListElement.path, GamePath, sizeof(ListElement.path) - 1);
|
||||||
ListElement.casecolor = CustomTitles.getColor("COVERS", ListElement.id, GameColor).intVal();
|
ListElement.casecolor = CustomTitles.getColor("COVERS", ListElement.id, GameColor).intVal();
|
||||||
string CustomTitle = CustomTitles.getString("TITLES", ListElement.id);
|
string CustomTitle = CustomTitles.getString("TITLES", ListElement.id);
|
||||||
if(gameTDB.IsLoaded())
|
if(gameTDB.IsLoaded())
|
||||||
@ -116,6 +116,7 @@ static void Create_Wii_EXT_List(char *FullPath)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static u8 gc_disc[1];
|
||||||
static const char *FST_APPEND = "sys/boot.bin";
|
static const char *FST_APPEND = "sys/boot.bin";
|
||||||
static const u8 FST_APPEND_SIZE = strlen(FST_APPEND);
|
static const u8 FST_APPEND_SIZE = strlen(FST_APPEND);
|
||||||
static void Create_GC_List(char *FullPath)
|
static void Create_GC_List(char *FullPath)
|
||||||
@ -124,15 +125,22 @@ static void Create_GC_List(char *FullPath)
|
|||||||
if(!fp && strstr(FullPath, "/root") != NULL) //fst folder
|
if(!fp && strstr(FullPath, "/root") != NULL) //fst folder
|
||||||
{
|
{
|
||||||
*(strstr(FullPath, "/root") + 1) = '\0';
|
*(strstr(FullPath, "/root") + 1) = '\0';
|
||||||
if(strlen(FullPath) + FST_APPEND_SIZE < 256) strcat(FullPath, FST_APPEND);
|
if(strlen(FullPath) + FST_APPEND_SIZE < MAX_MSG_SIZE) strcat(FullPath, FST_APPEND);
|
||||||
fp = fopen(FullPath, "rb");
|
fp = fopen(FullPath, "rb");
|
||||||
}
|
}
|
||||||
if(fp)
|
if(fp)
|
||||||
{
|
{
|
||||||
fread((void*)&GCGameHeader, 1, sizeof(gc_discHdr), fp);
|
fread((void*)&GCGameHeader, 1, sizeof(gc_discHdr), fp);
|
||||||
if(GCGameHeader.magic == GC_MAGIC)
|
if(GCGameHeader.magic == GC_MAGIC)
|
||||||
|
{
|
||||||
AddISO((const char*)GCGameHeader.id, (const char*)GCGameHeader.title,
|
AddISO((const char*)GCGameHeader.id, (const char*)GCGameHeader.title,
|
||||||
FullPath, 0, TYPE_GC_GAME);
|
FullPath, 0, TYPE_GC_GAME);
|
||||||
|
/* Check for disc 2 */
|
||||||
|
fseek(fp, 6, SEEK_SET);
|
||||||
|
fread(gc_disc, 1, 1, fp);
|
||||||
|
if(gc_disc[0])
|
||||||
|
wcslcat(m_gameList.back().title, L" disc 2", 63);
|
||||||
|
}
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -141,7 +149,7 @@ static void Create_Plugin_List(char *FullPath)
|
|||||||
{
|
{
|
||||||
memset((void*)&ListElement, 0, sizeof(dir_discHdr));
|
memset((void*)&ListElement, 0, sizeof(dir_discHdr));
|
||||||
|
|
||||||
strncpy(ListElement.path, FullPath, sizeof(ListElement.path));
|
strncpy(ListElement.path, FullPath, sizeof(ListElement.path) - 1);
|
||||||
strncpy(ListElement.id, "PLUGIN", 6);
|
strncpy(ListElement.id, "PLUGIN", 6);
|
||||||
*strchr(FullPath, '.') = '\0';
|
*strchr(FullPath, '.') = '\0';
|
||||||
mbstowcs(ListElement.title, strrchr(FullPath, '/') + 1, 63);
|
mbstowcs(ListElement.title, strrchr(FullPath, '/') + 1, 63);
|
||||||
@ -160,7 +168,7 @@ static void Create_Homebrew_List(char *FullPath)
|
|||||||
memset((void*)&ListElement, 0, sizeof(dir_discHdr));
|
memset((void*)&ListElement, 0, sizeof(dir_discHdr));
|
||||||
ListElement.index = m_gameList.size();
|
ListElement.index = m_gameList.size();
|
||||||
*strrchr(FullPath, '/') = '\0';
|
*strrchr(FullPath, '/') = '\0';
|
||||||
strncpy(ListElement.path, FullPath, sizeof(ListElement.path));
|
strncpy(ListElement.path, FullPath, sizeof(ListElement.path) - 1);
|
||||||
strncpy(ListElement.id, "HB_APP", 6);
|
strncpy(ListElement.id, "HB_APP", 6);
|
||||||
|
|
||||||
static const char *FolderTitle = strrchr(FullPath, '/') + 1;
|
static const char *FolderTitle = strrchr(FullPath, '/') + 1;
|
||||||
@ -267,6 +275,7 @@ void GetFiles(const char *Path, const vector<string>& FileTypes,
|
|||||||
FileAdder AddFile, bool CompareFolders, u32 max_depth, u32 depth)
|
FileAdder AddFile, bool CompareFolders, u32 max_depth, u32 depth)
|
||||||
{
|
{
|
||||||
static const char *NewFileName = NULL;
|
static const char *NewFileName = NULL;
|
||||||
|
static char *FullPathChar = NULL;
|
||||||
static dirent *pent = NULL;
|
static dirent *pent = NULL;
|
||||||
static DIR *pdir = NULL;
|
static DIR *pdir = NULL;
|
||||||
vector<string> SubPaths;
|
vector<string> SubPaths;
|
||||||
@ -274,15 +283,11 @@ void GetFiles(const char *Path, const vector<string>& FileTypes,
|
|||||||
pdir = opendir(Path);
|
pdir = opendir(Path);
|
||||||
if(pdir == NULL)
|
if(pdir == NULL)
|
||||||
return;
|
return;
|
||||||
char FullPathChar[256];
|
|
||||||
if(FullPathChar == NULL)
|
|
||||||
return;
|
|
||||||
memset(FullPathChar, 0, 256);
|
|
||||||
while((pent = readdir(pdir)) != NULL)
|
while((pent = readdir(pdir)) != NULL)
|
||||||
{
|
{
|
||||||
if(pent->d_name[0] == '.')
|
if(pent->d_name[0] == '.')
|
||||||
continue;
|
continue;
|
||||||
strncpy(FullPathChar, fmt("%s/%s", Path, pent->d_name), 255);
|
FullPathChar = fmt("%s/%s", Path, pent->d_name);
|
||||||
if(pent->d_type == DT_DIR)
|
if(pent->d_type == DT_DIR)
|
||||||
{
|
{
|
||||||
if(CompareFolders && IsFileSupported(pent->d_name, FileTypes))
|
if(CompareFolders && IsFileSupported(pent->d_name, FileTypes))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user