Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(243)

Side by Side Diff: core/fxcrt/fx_basic_bstring.cpp

Issue 1916303004: CFX_ByteString::Reserve(), ReleaseBuffer() fixes. (Closed) Base URL: https://pdfium.googlesource.com/pdfium.git@master
Patch Set: Remove stray TrimLeft() Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | core/fxcrt/fx_basic_bstring_unittest.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 PDFium Authors. All rights reserved. 1 // Copyright 2014 PDFium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com 5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <cctype> 10 #include <cctype>
(...skipping 258 matching lines...) Expand 10 before | Expand all | Expand 10 after
269 m_pData.Reset(StringData::Create(nNewLength)); 269 m_pData.Reset(StringData::Create(nNewLength));
270 } 270 }
271 271
272 void CFX_ByteString::ReleaseBuffer(FX_STRSIZE nNewLength) { 272 void CFX_ByteString::ReleaseBuffer(FX_STRSIZE nNewLength) {
273 if (!m_pData) 273 if (!m_pData)
274 return; 274 return;
275 275
276 if (nNewLength == -1) 276 if (nNewLength == -1)
277 nNewLength = FXSYS_strlen(m_pData->m_String); 277 nNewLength = FXSYS_strlen(m_pData->m_String);
278 278
279 nNewLength = std::min(nNewLength, m_pData->m_nAllocLength);
279 if (nNewLength == 0) { 280 if (nNewLength == 0) {
280 clear(); 281 clear();
281 return; 282 return;
282 } 283 }
283 284
284 FXSYS_assert(nNewLength <= m_pData->m_nAllocLength); 285 FXSYS_assert(m_pData->m_nRefs == 1);
285 ReallocBeforeWrite(nNewLength);
286 m_pData->m_nDataLength = nNewLength; 286 m_pData->m_nDataLength = nNewLength;
287 m_pData->m_String[nNewLength] = 0; 287 m_pData->m_String[nNewLength] = 0;
288 if (m_pData->m_nAllocLength - nNewLength >= 32) {
289 // Over arbitrary threshold, so pay the price to relocate. Force copy to
290 // always occur by holding a second reference to the string.
291 CFX_ByteString preserve(*this);
292 ReallocBeforeWrite(nNewLength);
293 }
288 } 294 }
289 295
290 void CFX_ByteString::Reserve(FX_STRSIZE len) { 296 void CFX_ByteString::Reserve(FX_STRSIZE len) {
291 GetBuffer(len); 297 GetBuffer(len);
292 ReleaseBuffer(GetLength());
293 } 298 }
294 299
295 FX_CHAR* CFX_ByteString::GetBuffer(FX_STRSIZE nMinBufLength) { 300 FX_CHAR* CFX_ByteString::GetBuffer(FX_STRSIZE nMinBufLength) {
296 if (!m_pData) { 301 if (!m_pData) {
297 if (nMinBufLength == 0) 302 if (nMinBufLength == 0)
298 return nullptr; 303 return nullptr;
299 304
300 m_pData.Reset(StringData::Create(nMinBufLength)); 305 m_pData.Reset(StringData::Create(nMinBufLength));
301 m_pData->m_nDataLength = 0; 306 m_pData->m_nDataLength = 0;
302 m_pData->m_String[0] = 0; 307 m_pData->m_String[0] = 0;
(...skipping 687 matching lines...) Expand 10 before | Expand all | Expand 10 after
990 fraction %= scale; 995 fraction %= scale;
991 scale /= 10; 996 scale /= 10;
992 } 997 }
993 return buf_size; 998 return buf_size;
994 } 999 }
995 CFX_ByteString CFX_ByteString::FormatFloat(FX_FLOAT d, int precision) { 1000 CFX_ByteString CFX_ByteString::FormatFloat(FX_FLOAT d, int precision) {
996 FX_CHAR buf[32]; 1001 FX_CHAR buf[32];
997 FX_STRSIZE len = FX_ftoa(d, buf); 1002 FX_STRSIZE len = FX_ftoa(d, buf);
998 return CFX_ByteString(buf, len); 1003 return CFX_ByteString(buf, len);
999 } 1004 }
OLDNEW
« no previous file with comments | « no previous file | core/fxcrt/fx_basic_bstring_unittest.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698