mirror of
https://github.com/holub/mame
synced 2025-04-20 23:42:22 +03:00
Fixed reported memory leak in debug build.
This commit is contained in:
parent
92f475be80
commit
38d43fc7fd
@ -14,7 +14,7 @@
|
||||
|
||||
pblockpool pstring::m_pool;
|
||||
|
||||
pstring::str_t *pstring::m_zero = NULL;
|
||||
pstring::str_t pstring::m_zero;
|
||||
|
||||
/*
|
||||
* Uncomment the following to override defaults
|
||||
@ -155,7 +155,7 @@ pstring pstring::vprintf(va_list args) const
|
||||
void pstring::sfree(str_t *s)
|
||||
{
|
||||
s->m_ref_count--;
|
||||
if (s->m_ref_count == 0)
|
||||
if (s->m_ref_count == 0 && s != &m_zero)
|
||||
m_pool.dealloc(s);
|
||||
}
|
||||
|
||||
@ -178,9 +178,6 @@ pstring pstring::sprintf(const char *format, ...)
|
||||
void pstring::resetmem()
|
||||
{
|
||||
// Release the 0 string
|
||||
if (m_zero != NULL)
|
||||
sfree(m_zero);
|
||||
m_zero = NULL;
|
||||
m_pool.m_shutdown = true;
|
||||
m_pool.resetmem();
|
||||
}
|
||||
|
@ -97,6 +97,7 @@ public:
|
||||
inline const char *cstr() const { return m_ptr->str(); }
|
||||
|
||||
// concatenation operators
|
||||
pstring& operator+=(const char c) { char buf[2] = { c, 0 }; pcat(buf); return *this; }
|
||||
pstring& operator+=(const pstring &string) { pcat(string.cstr()); return *this; }
|
||||
friend pstring operator+(const pstring &lhs, const pstring &rhs) { return pstring(lhs) += rhs; }
|
||||
friend pstring operator+(const pstring &lhs, const char *rhs) { return pstring(lhs) += rhs; }
|
||||
@ -132,6 +133,13 @@ public:
|
||||
return (result != NULL) ? (result - cstr()) : -1;
|
||||
}
|
||||
|
||||
inline int find(const char search, int start = 0) const
|
||||
{
|
||||
int alen = len();
|
||||
const char *result = strchr(cstr() + MIN(start, alen), search);
|
||||
return (result != NULL) ? (result - cstr()) : -1;
|
||||
}
|
||||
|
||||
// various
|
||||
|
||||
inline bool startsWith(const pstring &arg) const { return (pcmp(cstr(), arg.cstr(), arg.len()) == 0); }
|
||||
@ -166,6 +174,7 @@ protected:
|
||||
|
||||
struct str_t
|
||||
{
|
||||
str_t() : m_ref_count(1), m_len(0) { m_str[0] = 0; }
|
||||
str_t(int alen) : m_ref_count(1), m_len(alen) { m_str[0] = 0; }
|
||||
|
||||
char *str() { return &m_str[0]; }
|
||||
@ -183,11 +192,7 @@ protected:
|
||||
private:
|
||||
inline void init()
|
||||
{
|
||||
if (m_zero == NULL)
|
||||
{
|
||||
m_zero = new(pstring::m_pool, 0) pstring::str_t(0);
|
||||
}
|
||||
m_ptr = m_zero;
|
||||
m_ptr = &m_zero;
|
||||
m_ptr->m_ref_count++;
|
||||
}
|
||||
|
||||
@ -225,7 +230,7 @@ private:
|
||||
static str_t *salloc(int n);
|
||||
static void sfree(str_t *s);
|
||||
|
||||
static str_t *m_zero;
|
||||
static str_t m_zero;
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user