mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-25 16:37:42 +01:00
Merge branch 'master' of https://github.com/CloverHackyColor/CloverBootloader
This commit is contained in:
commit
fab5d07b37
@ -102,37 +102,37 @@ typedef struct PrintfParams {
|
|||||||
|
|
||||||
|
|
||||||
#if PRINTF_UTF8_OUTPUT_SUPPORT == 1
|
#if PRINTF_UTF8_OUTPUT_SUPPORT == 1
|
||||||
// Print a char as is. Not analyse is made to check if it's a utf8 partial char
|
// Print a char as is. No analyse is made to check if it's a utf8 partial char
|
||||||
// c is an int for prototype compatibility, but must be < 255
|
// c is an int for prototype compatibility, but must be < 255
|
||||||
static void print_char(int c, PrintfParams* printfParams)
|
static void print_char(int c, PrintfParams* printfParams)
|
||||||
{
|
{
|
||||||
#if PRINTF_LITE_TIMESTAMP_SUPPORT == 1
|
#if PRINTF_LITE_TIMESTAMP_SUPPORT == 1
|
||||||
if ( printfParams->newlinePtr )
|
if ( printfParams->newlinePtr )
|
||||||
{
|
|
||||||
if ( *printfParams->newlinePtr )
|
|
||||||
{
|
{
|
||||||
*printfParams->newlinePtr = 0; // to do BEFORE call to printTimeStamp
|
if ( *printfParams->newlinePtr )
|
||||||
if ( printfParams->timestamp ) print_timestamp(printfParams);
|
{
|
||||||
}
|
*printfParams->newlinePtr = 0; // to do BEFORE call to printTimeStamp
|
||||||
#if PRINTF_EMIT_CR == 1
|
if ( printfParams->timestamp ) print_timestamp(printfParams);
|
||||||
if ( c == '\n' ) print_char('\r', printfParams);
|
}
|
||||||
#endif
|
#if PRINTF_EMIT_CR == 1
|
||||||
#if PRINTF_LITE_BUF_SIZE > 1
|
if ( c == '\n' ) print_char('\r', printfParams);
|
||||||
printfParams->buf.buf[(printfParams->bufIdx)++] = (char)c;
|
#endif
|
||||||
#else
|
#if PRINTF_LITE_BUF_SIZE > 1
|
||||||
printfParams->transmitBufCallBack(&c, 1);
|
|
||||||
#endif
|
|
||||||
if ( c == '\n' ) *printfParams->newlinePtr = 1;
|
|
||||||
}else{
|
|
||||||
#if PRINTF_EMIT_CR == 1
|
|
||||||
if ( c == '\n' ) print_char('\r', printfParams);
|
|
||||||
#endif
|
|
||||||
#if PRINTF_LITE_BUF_SIZE > 1
|
|
||||||
printfParams->buf.buf[(printfParams->bufIdx)++] = (char)c;
|
printfParams->buf.buf[(printfParams->bufIdx)++] = (char)c;
|
||||||
#else
|
#else
|
||||||
printfParams->transmitBufCallBack(&c, 1);
|
printfParams->transmitBufCallBack(&c, 1);
|
||||||
#endif
|
#endif
|
||||||
}
|
if ( c == '\n' ) *printfParams->newlinePtr = 1;
|
||||||
|
}else{
|
||||||
|
#if PRINTF_EMIT_CR == 1
|
||||||
|
if ( c == '\n' ) print_char('\r', printfParams);
|
||||||
|
#endif
|
||||||
|
#if PRINTF_LITE_BUF_SIZE > 1
|
||||||
|
printfParams->buf.buf[(printfParams->bufIdx)++] = (char)c;
|
||||||
|
#else
|
||||||
|
printfParams->transmitBufCallBack(&c, 1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
#if PRINTF_EMIT_CR == 1
|
#if PRINTF_EMIT_CR == 1
|
||||||
@ -160,36 +160,45 @@ static void print_char(int c, PrintfParams* printfParams)
|
|||||||
static void print_wchar(int c, PrintfParams* printfParams)
|
static void print_wchar(int c, PrintfParams* printfParams)
|
||||||
{
|
{
|
||||||
#if PRINTF_LITE_TIMESTAMP_SUPPORT == 1
|
#if PRINTF_LITE_TIMESTAMP_SUPPORT == 1
|
||||||
if ( printfParams->newlinePtr )
|
if ( printfParams->newlinePtr )
|
||||||
{
|
|
||||||
if ( *printfParams->newlinePtr )
|
|
||||||
{
|
{
|
||||||
*printfParams->newlinePtr = 0; // to do BEFORE call to printTimeStamp
|
if ( *printfParams->newlinePtr )
|
||||||
if ( printfParams->timestamp ) print_timestamp(printfParams);
|
{
|
||||||
|
*printfParams->newlinePtr = 0; // to do BEFORE call to printTimeStamp
|
||||||
|
if ( printfParams->timestamp ) print_timestamp(printfParams);
|
||||||
|
}
|
||||||
|
#if PRINTF_EMIT_CR == 1
|
||||||
|
if ( c == '\n' ) print_wchar('\r', printfParams);
|
||||||
|
#endif
|
||||||
|
#if PRINTF_LITE_BUF_SIZE > 1
|
||||||
|
printfParams->buf.wbuf[(printfParams->bufIdx)++] = (wchar_t)c;
|
||||||
|
#else
|
||||||
|
printfParams->transmitWBufCallBack(&c, 1);
|
||||||
|
#endif
|
||||||
|
if ( c == '\n' ) {
|
||||||
|
*printfParams->newlinePtr = 1;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
#if PRINTF_EMIT_CR == 1
|
||||||
|
if ( c == '\n' ) print_wchar('\r', printfParams);
|
||||||
|
#endif
|
||||||
|
#if PRINTF_LITE_BUF_SIZE > 1
|
||||||
|
printfParams->buf.wbuf[(printfParams->bufIdx)++] = (wchar_t)c;
|
||||||
|
#else
|
||||||
|
printfParams->transmitWBufCallBack(&c, 1);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
#if PRINTF_LITE_BUF_SIZE > 1
|
|
||||||
printfParams->buf.wbuf[(printfParams->bufIdx)++] = (wchar_t)c;
|
|
||||||
#else
|
|
||||||
printfParams->transmitWBufCallBack(&c, 1);
|
|
||||||
#endif
|
|
||||||
if ( c == '\n' ) {
|
|
||||||
*printfParams->newlinePtr = 1;
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
#if PRINTF_LITE_BUF_SIZE > 1
|
|
||||||
printfParams->buf.wbuf[(printfParams->bufIdx)++] = (wchar_t)c;
|
|
||||||
#else
|
|
||||||
printfParams->transmitWBufCallBack(&c, 1);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
#if PRINTF_LITE_BUF_SIZE > 1
|
#if PRINTF_EMIT_CR == 1
|
||||||
printfParams->buf.wbuf[(printfParams->bufIdx)++] = (wchar_t)c; // cast suposed to be safe, as this function must be called
|
if ( c == '\n' ) print_wchar('\r', printfParams);
|
||||||
#else
|
#endif
|
||||||
printfParams->transmitWBufCallBack(&c, 1);
|
#if PRINTF_LITE_BUF_SIZE > 1
|
||||||
#endif
|
printfParams->buf.wbuf[(printfParams->bufIdx)++] = (wchar_t)c; // cast suposed to be safe, as this function must be called
|
||||||
}
|
#else
|
||||||
|
printfParams->transmitWBufCallBack(&c, 1);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
#if PRINTF_LITE_BUF_SIZE > 1
|
#if PRINTF_LITE_BUF_SIZE > 1
|
||||||
if ( printfParams->bufIdx == PRINTF_LITE_BUF_SIZE ) {
|
if ( printfParams->bufIdx == PRINTF_LITE_BUF_SIZE ) {
|
||||||
|
@ -33,7 +33,7 @@ const XString NullXString;
|
|||||||
|
|
||||||
void XString::Init(xsize aSize)
|
void XString::Init(xsize aSize)
|
||||||
{
|
{
|
||||||
m_data = (char*)malloc( (aSize+1)*sizeof(char) ); /* le 0 terminal n'est pas compté dans mSize */
|
m_data = (char*)malloc( (aSize+1)*sizeof(char) ); /* le 0 terminal n'est pas compté dans m_allocatedSize */
|
||||||
if ( !m_data ) {
|
if ( !m_data ) {
|
||||||
DebugLog(2, "XString::Init(%llu) : Xalloc returned NULL. Cpu halted\n", (aSize+1)*sizeof(char));
|
DebugLog(2, "XString::Init(%llu) : Xalloc returned NULL. Cpu halted\n", (aSize+1)*sizeof(char));
|
||||||
panic();
|
panic();
|
||||||
@ -51,7 +51,7 @@ XString::XString()
|
|||||||
XString::~XString()
|
XString::~XString()
|
||||||
{
|
{
|
||||||
//Debugf("Destructeur :%s\n", c);
|
//Debugf("Destructeur :%s\n", c);
|
||||||
delete m_data;
|
delete m_data; // delete nullptr do nothing
|
||||||
}
|
}
|
||||||
|
|
||||||
void XString::setLength(xsize len)
|
void XString::setLength(xsize len)
|
||||||
@ -67,7 +67,7 @@ char *XString::CheckSize(xsize nNewSize, xsize nGrowBy)
|
|||||||
{
|
{
|
||||||
|
|
||||||
nNewSize += nGrowBy;
|
nNewSize += nGrowBy;
|
||||||
m_data = (char*)realloc(m_data, (nNewSize+1)*sizeof(char), m_allocatedSize*sizeof(wchar_t));
|
m_data = (char*)realloc(m_data, (nNewSize+1)*sizeof(char), m_allocatedSize*sizeof(wchar_t)); // realloc is identical to malloc if m_data is NULL
|
||||||
if ( !m_data ) {
|
if ( !m_data ) {
|
||||||
DBG("XString::CheckSize(%d, %d) : Xrealloc(%d, %d, %d) returned NULL. System halted\n", nNewSize, nGrowBy, m_size, (nNewSize+1)*sizeof(char), c);
|
DBG("XString::CheckSize(%d, %d) : Xrealloc(%d, %d, %d) returned NULL. System halted\n", nNewSize, nGrowBy, m_size, (nNewSize+1)*sizeof(char), c);
|
||||||
panic();
|
panic();
|
||||||
@ -349,6 +349,14 @@ XString::XString(const XString &aString)
|
|||||||
StrnCpy(aString.data(), aString.length());
|
StrnCpy(aString.data(), aString.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
XString::XString(XString&& aString) // Move constructor
|
||||||
|
{
|
||||||
|
m_data = aString.m_data;
|
||||||
|
m_allocatedSize = aString.m_allocatedSize;
|
||||||
|
aString.m_data = 0;
|
||||||
|
aString.m_allocatedSize = 0;
|
||||||
|
}
|
||||||
|
|
||||||
//// Deactivate assignment during refactoring to avoid confusion
|
//// Deactivate assignment during refactoring to avoid confusion
|
||||||
//XString::XString(const wchar_t *S)
|
//XString::XString(const wchar_t *S)
|
||||||
//{
|
//{
|
||||||
@ -828,23 +836,16 @@ const XString &XString::operator =(const XString &aString)
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __AFXWIN_H__
|
XString& XString::operator =(XString&& aString)
|
||||||
const XString &XString::operator =(const CString &aCString)
|
|
||||||
{
|
{
|
||||||
//TRACE("Operator =const CString&\n");
|
delete m_data; // delete does nothing if m_data is NULL
|
||||||
StrnCpy(aCString, aCString.GetLength());
|
m_data = aString.m_data;
|
||||||
|
m_allocatedSize = aString.m_allocatedSize;
|
||||||
|
aString.m_data = 0;
|
||||||
|
aString.m_allocatedSize = 0;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _WX_WXSTRINGH__
|
|
||||||
const XString &XString::operator =(const wxString &awxString)
|
|
||||||
{
|
|
||||||
//TRACE("Operator =const wxString&\n");
|
|
||||||
StrnCpy(awxString.mb_str(), awxString.length());
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
//
|
//
|
||||||
//const XString &XString::operator =(const XConstString &aConstString)
|
//const XString &XString::operator =(const XConstString &aConstString)
|
||||||
//{
|
//{
|
||||||
@ -1082,7 +1083,7 @@ XString ToUpper(const char *S)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Deactivate assignment during refactoring to avoid confusion
|
// Deactivate during refactoring to avoid confusion
|
||||||
//XString CleanCtrl(const XString &S)
|
//XString CleanCtrl(const XString &S)
|
||||||
//{
|
//{
|
||||||
// XString ReturnValue;
|
// XString ReturnValue;
|
||||||
|
@ -43,6 +43,8 @@ class XString
|
|||||||
void Init(xsize aSize=0);
|
void Init(xsize aSize=0);
|
||||||
XString();
|
XString();
|
||||||
XString(const XString &aString);
|
XString(const XString &aString);
|
||||||
|
XString(XString&& aString); // Move constructor
|
||||||
|
|
||||||
|
|
||||||
// XString(const XConstString &aConstString);
|
// XString(const XConstString &aConstString);
|
||||||
// XString(const char *S);
|
// XString(const char *S);
|
||||||
@ -124,7 +126,8 @@ class XString
|
|||||||
const XString& takeValueFrom(const char* S, xsize count) { StrnCpy(S, count); return *this; }
|
const XString& takeValueFrom(const char* S, xsize count) { StrnCpy(S, count); return *this; }
|
||||||
const XString& takeValueFrom(const wchar_t* S) { SPrintf("%ls", S); return *this; }
|
const XString& takeValueFrom(const wchar_t* S) { SPrintf("%ls", S); return *this; }
|
||||||
|
|
||||||
const XString &operator =(const XString &aString);
|
const XString& operator =(const XString& aString);
|
||||||
|
XString& operator =(XString&& aString);
|
||||||
// const XString &operator =(const XConstString &aConstString);
|
// const XString &operator =(const XConstString &aConstString);
|
||||||
|
|
||||||
// Deactivate assignment during refactoring to avoid confusion
|
// Deactivate assignment during refactoring to avoid confusion
|
||||||
@ -226,7 +229,9 @@ class XString
|
|||||||
// OpÈrateur +
|
// OpÈrateur +
|
||||||
// Chaines
|
// Chaines
|
||||||
friend XString operator + (const XString& p1, const XString& p2) { XString s; s=p1; s+=p2; return s; }
|
friend XString operator + (const XString& p1, const XString& p2) { XString s; s=p1; s+=p2; return s; }
|
||||||
friend XString operator + (const XString& p1, const char *p2 ) { XString s; s=p1; s+=p2; return s; }
|
// friend XString operator + (const XString& p1, const char *p2 ) { XString s; s=p1; s+=p2; return s; }
|
||||||
|
XString operator + (const char *p2 ) { XString s(*this); s+=p2; return s; }
|
||||||
|
|
||||||
friend XString operator + (const char *p1, const XString& p2) { XString s; s.takeValueFrom(p1); s+=p2; return s; }
|
friend XString operator + (const char *p1, const XString& p2) { XString s; s.takeValueFrom(p1); s+=p2; return s; }
|
||||||
// friend XString operator + (const XConstString& p1, const XString& p2) { XString s; s=p1; s+=p2; return s; }
|
// friend XString operator + (const XConstString& p1, const XString& p2) { XString s; s=p1; s+=p2; return s; }
|
||||||
// friend XString operator + (const XString& p1, const XConstString& p2) { XString s; s=p1; s+=p2; return s; }
|
// friend XString operator + (const XString& p1, const XConstString& p2) { XString s; s=p1; s+=p2; return s; }
|
||||||
|
@ -4,12 +4,13 @@
|
|||||||
#include "global_test.h"
|
#include "global_test.h"
|
||||||
|
|
||||||
|
|
||||||
//#include <wchar.h>
|
|
||||||
|
|
||||||
|
|
||||||
int XString_tests()
|
int XString_tests()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#ifdef JIEF_DEBUG
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef JIEF_DEBUG
|
#ifdef JIEF_DEBUG
|
||||||
// DebugLog(2, "XStringW_tests -> Enter\n");
|
// DebugLog(2, "XStringW_tests -> Enter\n");
|
||||||
#endif
|
#endif
|
||||||
@ -48,6 +49,19 @@ int XString_tests()
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// Move assignment.
|
||||||
|
{
|
||||||
|
XString str1;
|
||||||
|
str1.takeValueFrom("str1");
|
||||||
|
XString str2(str1 + "b");
|
||||||
|
str2 += "a"; // this is more efficient than str2 = str2 + "a", of course
|
||||||
|
if ( str2 != "str1ba" ) return 120;
|
||||||
|
str2 = str2 + "a";
|
||||||
|
if ( str2 != "str1baa" ) return 121;
|
||||||
|
str2 = str1 + "a"; // this must call the move assignment operator
|
||||||
|
if ( str2 != "str1a" ) return 122;
|
||||||
|
}
|
||||||
|
|
||||||
// check [] operator
|
// check [] operator
|
||||||
{
|
{
|
||||||
XString str;
|
XString str;
|
||||||
|
Loading…
Reference in New Issue
Block a user