From f76e9d33b6246358d34cb476dbf197788fe49425 Mon Sep 17 00:00:00 2001 From: Lei Zhang Date: Mon, 26 Jun 2017 13:33:47 -0700 Subject: Clean up CFDE_CSSTextBuf. Change-Id: I8230c2d5e5450ea36ff6d2a4fefc1619a13e9c44 Reviewed-on: https://pdfium-review.googlesource.com/6930 Commit-Queue: Lei Zhang Reviewed-by: Henrique Nakashima --- xfa/fde/css/cfde_csstextbuf.cpp | 48 +++++++++++++++++++++++++---------------- 1 file changed, 30 insertions(+), 18 deletions(-) (limited to 'xfa/fde/css/cfde_csstextbuf.cpp') diff --git a/xfa/fde/css/cfde_csstextbuf.cpp b/xfa/fde/css/cfde_csstextbuf.cpp index 2d8f93f2b3..c408a95b03 100644 --- a/xfa/fde/css/cfde_csstextbuf.cpp +++ b/xfa/fde/css/cfde_csstextbuf.cpp @@ -19,19 +19,11 @@ CFDE_CSSTextBuf::~CFDE_CSSTextBuf() { Reset(); } -void CFDE_CSSTextBuf::Reset() { - if (!m_bExtBuf) { - FX_Free(m_pBuffer); - m_pBuffer = nullptr; - } - m_iDatPos = m_iDatLen = m_iBufLen; -} - -bool CFDE_CSSTextBuf::AttachBuffer(const wchar_t* pBuffer, int32_t iBufLen) { +void CFDE_CSSTextBuf::AttachBuffer(const wchar_t* pBuffer, int32_t iBufLen) { Reset(); m_pBuffer = const_cast(pBuffer); m_iDatLen = m_iBufLen = iBufLen; - return m_bExtBuf = true; + m_bExtBuf = true; } bool CFDE_CSSTextBuf::EstimateSize(int32_t iAllocSize) { @@ -41,20 +33,40 @@ bool CFDE_CSSTextBuf::EstimateSize(int32_t iAllocSize) { return ExpandBuf(iAllocSize); } +bool CFDE_CSSTextBuf::AppendChar(wchar_t wch) { + if (m_iDatLen >= m_iBufLen && !ExpandBuf(m_iBufLen * 2)) + return false; + m_pBuffer[m_iDatLen++] = wch; + return true; +} + +void CFDE_CSSTextBuf::Reset() { + if (!m_bExtBuf) { + FX_Free(m_pBuffer); + m_pBuffer = nullptr; + } + m_iDatPos = m_iDatLen = m_iBufLen; +} + +int32_t CFDE_CSSTextBuf::TrimEnd() { + while (m_iDatLen > 0 && m_pBuffer[m_iDatLen - 1] <= ' ') + --m_iDatLen; + AppendChar(0); + return --m_iDatLen; +} + bool CFDE_CSSTextBuf::ExpandBuf(int32_t iDesiredSize) { if (m_bExtBuf) return false; - if (!m_pBuffer) - m_pBuffer = FX_Alloc(wchar_t, iDesiredSize); - else if (m_iBufLen != iDesiredSize) + + if (m_pBuffer && m_iBufLen == iDesiredSize) + return true; + + if (m_pBuffer) m_pBuffer = FX_Realloc(wchar_t, m_pBuffer, iDesiredSize); else - return true; + m_pBuffer = FX_Alloc(wchar_t, iDesiredSize); - if (!m_pBuffer) { - m_iBufLen = 0; - return false; - } m_iBufLen = iDesiredSize; return true; } -- cgit v1.2.3