Make it possible to use wxCharBuffer during program initialization.
wxCharBuffer might be used during static initialization, even if only implicitly. E.g. it is used by wxString::Format() which can be used to initialize a global string. But it uses the global s_untypedNullData variable might not be initialized yet resulting in mysterious failures. Fix this in the usual way by wrapping access to the variable via a function. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63585 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -56,12 +56,8 @@ struct UntypedBufferData
|
|||||||
bool m_owned;
|
bool m_owned;
|
||||||
};
|
};
|
||||||
|
|
||||||
// this has to be defined inside the DLL (and not e.g. as a static variable
|
|
||||||
// inside an inline function) as otherwise MSVC gives link errors when the
|
|
||||||
// functions are effectively inlined (i.e. in non-debug build)
|
|
||||||
//
|
|
||||||
// NB: this is defined in string.cpp and not the (non-existent) buffer.cpp
|
// NB: this is defined in string.cpp and not the (non-existent) buffer.cpp
|
||||||
extern WXDLLIMPEXP_DATA_BASE(UntypedBufferData * const) untypedNullDataPtr;
|
WXDLLIMPEXP_BASE UntypedBufferData * GetUntypedNullData();
|
||||||
|
|
||||||
} // namespace wxPrivate
|
} // namespace wxPrivate
|
||||||
|
|
||||||
@@ -186,7 +182,7 @@ protected:
|
|||||||
// placeholder for NULL string, to simplify this code
|
// placeholder for NULL string, to simplify this code
|
||||||
static Data *GetNullData()
|
static Data *GetNullData()
|
||||||
{
|
{
|
||||||
return static_cast<Data *>(wxPrivate::untypedNullDataPtr);
|
return static_cast<Data *>(wxPrivate::GetUntypedNullData());
|
||||||
}
|
}
|
||||||
|
|
||||||
void IncRef()
|
void IncRef()
|
||||||
|
@@ -57,16 +57,20 @@
|
|||||||
#define wxStringStrlen wxStrlen
|
#define wxStringStrlen wxStrlen
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// define a function declared in wx/buffer.h here as we don't have buffer.cpp
|
||||||
// global variables
|
// and don't want to add it just because of this simple function
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
namespace wxPrivate
|
namespace wxPrivate
|
||||||
{
|
{
|
||||||
|
|
||||||
|
// wxXXXBuffer classes can be (implicitly) used during global statics
|
||||||
|
// initialization so wrap the status UntypedBufferData variable in a function
|
||||||
|
// to make it safe to access it even before all global statics are initialized
|
||||||
|
UntypedBufferData *GetUntypedNullData()
|
||||||
|
{
|
||||||
static UntypedBufferData s_untypedNullData(NULL, 0);
|
static UntypedBufferData s_untypedNullData(NULL, 0);
|
||||||
|
|
||||||
UntypedBufferData * const untypedNullDataPtr = &s_untypedNullData;
|
return &s_untypedNullData;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace wxPrivate
|
} // namespace wxPrivate
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user