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

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

Issue 1520063002: Get rid of most instance of 'foo == NULL' (Closed) Base URL: https://pdfium.googlesource.com/pdfium@bstr_isnull
Patch Set: rebase Created 5 years 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 | « core/src/fxcrt/fx_basic_array.cpp ('k') | core/src/fxcrt/fx_basic_gcc.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> // For offsetof(). 7 #include <stddef.h> // For offsetof().
8 #include <cctype> 8 #include <cctype>
9 9
10 #include "core/include/fxcrt/fx_basic.h" 10 #include "core/include/fxcrt/fx_basic.h"
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
101 m_pData = NULL; 101 m_pData = NULL;
102 } 102 }
103 } 103 }
104 CFX_ByteString::CFX_ByteString(char ch) { 104 CFX_ByteString::CFX_ByteString(char ch) {
105 m_pData = StringData::Create(1); 105 m_pData = StringData::Create(1);
106 if (m_pData) { 106 if (m_pData) {
107 m_pData->m_String[0] = ch; 107 m_pData->m_String[0] = ch;
108 } 108 }
109 } 109 }
110 CFX_ByteString::CFX_ByteString(const CFX_ByteString& stringSrc) { 110 CFX_ByteString::CFX_ByteString(const CFX_ByteString& stringSrc) {
111 if (stringSrc.m_pData == NULL) { 111 if (!stringSrc.m_pData) {
112 m_pData = NULL; 112 m_pData = NULL;
113 return; 113 return;
114 } 114 }
115 if (stringSrc.m_pData->m_nRefs >= 0) { 115 if (stringSrc.m_pData->m_nRefs >= 0) {
116 m_pData = stringSrc.m_pData; 116 m_pData = stringSrc.m_pData;
117 m_pData->Retain(); 117 m_pData->Retain();
118 } else { 118 } else {
119 m_pData = NULL; 119 m_pData = NULL;
120 *this = stringSrc; 120 *this = stringSrc;
121 } 121 }
(...skipping 14 matching lines...) Expand all
136 return; 136 return;
137 } 137 }
138 m_pData = StringData::Create(nNewLen); 138 m_pData = StringData::Create(nNewLen);
139 if (m_pData) { 139 if (m_pData) {
140 FXSYS_memcpy(m_pData->m_String, str1.GetCStr(), str1.GetLength()); 140 FXSYS_memcpy(m_pData->m_String, str1.GetCStr(), str1.GetLength());
141 FXSYS_memcpy(m_pData->m_String + str1.GetLength(), str2.GetCStr(), 141 FXSYS_memcpy(m_pData->m_String + str1.GetLength(), str2.GetCStr(),
142 str2.GetLength()); 142 str2.GetLength());
143 } 143 }
144 } 144 }
145 const CFX_ByteString& CFX_ByteString::operator=(const FX_CHAR* lpsz) { 145 const CFX_ByteString& CFX_ByteString::operator=(const FX_CHAR* lpsz) {
146 if (lpsz == NULL || lpsz[0] == 0) { 146 if (!lpsz || lpsz[0] == 0) {
147 Empty(); 147 Empty();
148 } else { 148 } else {
149 AssignCopy(FXSYS_strlen(lpsz), lpsz); 149 AssignCopy(FXSYS_strlen(lpsz), lpsz);
150 } 150 }
151 return *this; 151 return *this;
152 } 152 }
153 const CFX_ByteString& CFX_ByteString::operator=(const CFX_ByteStringC& str) { 153 const CFX_ByteString& CFX_ByteString::operator=(const CFX_ByteStringC& str) {
154 if (str.IsEmpty()) { 154 if (str.IsEmpty()) {
155 Empty(); 155 Empty();
156 } else { 156 } else {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 if (lpsz) { 196 if (lpsz) {
197 ConcatInPlace(FXSYS_strlen(lpsz), lpsz); 197 ConcatInPlace(FXSYS_strlen(lpsz), lpsz);
198 } 198 }
199 return *this; 199 return *this;
200 } 200 }
201 const CFX_ByteString& CFX_ByteString::operator+=(char ch) { 201 const CFX_ByteString& CFX_ByteString::operator+=(char ch) {
202 ConcatInPlace(1, &ch); 202 ConcatInPlace(1, &ch);
203 return *this; 203 return *this;
204 } 204 }
205 const CFX_ByteString& CFX_ByteString::operator+=(const CFX_ByteString& string) { 205 const CFX_ByteString& CFX_ByteString::operator+=(const CFX_ByteString& string) {
206 if (string.m_pData == NULL) { 206 if (!string.m_pData) {
207 return *this; 207 return *this;
208 } 208 }
209 ConcatInPlace(string.m_pData->m_nDataLength, string.m_pData->m_String); 209 ConcatInPlace(string.m_pData->m_nDataLength, string.m_pData->m_String);
210 return *this; 210 return *this;
211 } 211 }
212 const CFX_ByteString& CFX_ByteString::operator+=( 212 const CFX_ByteString& CFX_ByteString::operator+=(
213 const CFX_ByteStringC& string) { 213 const CFX_ByteStringC& string) {
214 if (string.IsEmpty()) { 214 if (string.IsEmpty()) {
215 return *this; 215 return *this;
216 } 216 }
217 ConcatInPlace(string.GetLength(), string.GetCStr()); 217 ConcatInPlace(string.GetLength(), string.GetCStr());
218 return *this; 218 return *this;
219 } 219 }
220 bool CFX_ByteString::Equal(const char* ptr) const { 220 bool CFX_ByteString::Equal(const char* ptr) const {
221 if (!m_pData) { 221 if (!m_pData) {
222 return !ptr || ptr[0] == '\0'; 222 return !ptr || ptr[0] == '\0';
223 } 223 }
224 if (!ptr) { 224 if (!ptr) {
225 return m_pData->m_nDataLength == 0; 225 return m_pData->m_nDataLength == 0;
226 } 226 }
227 return FXSYS_strlen(ptr) == m_pData->m_nDataLength && 227 return FXSYS_strlen(ptr) == m_pData->m_nDataLength &&
228 FXSYS_memcmp(ptr, m_pData->m_String, m_pData->m_nDataLength) == 0; 228 FXSYS_memcmp(ptr, m_pData->m_String, m_pData->m_nDataLength) == 0;
229 } 229 }
230 bool CFX_ByteString::Equal(const CFX_ByteStringC& str) const { 230 bool CFX_ByteString::Equal(const CFX_ByteStringC& str) const {
231 if (m_pData == NULL) { 231 if (!m_pData) {
232 return str.IsEmpty(); 232 return str.IsEmpty();
233 } 233 }
234 return m_pData->m_nDataLength == str.GetLength() && 234 return m_pData->m_nDataLength == str.GetLength() &&
235 FXSYS_memcmp(m_pData->m_String, str.GetCStr(), str.GetLength()) == 0; 235 FXSYS_memcmp(m_pData->m_String, str.GetCStr(), str.GetLength()) == 0;
236 } 236 }
237 bool CFX_ByteString::Equal(const CFX_ByteString& other) const { 237 bool CFX_ByteString::Equal(const CFX_ByteString& other) const {
238 if (IsEmpty()) { 238 if (IsEmpty()) {
239 return other.IsEmpty(); 239 return other.IsEmpty();
240 } 240 }
241 if (other.IsEmpty()) { 241 if (other.IsEmpty()) {
242 return false; 242 return false;
243 } 243 }
244 return other.m_pData->m_nDataLength == m_pData->m_nDataLength && 244 return other.m_pData->m_nDataLength == m_pData->m_nDataLength &&
245 FXSYS_memcmp(other.m_pData->m_String, m_pData->m_String, 245 FXSYS_memcmp(other.m_pData->m_String, m_pData->m_String,
246 m_pData->m_nDataLength) == 0; 246 m_pData->m_nDataLength) == 0;
247 } 247 }
248 void CFX_ByteString::Empty() { 248 void CFX_ByteString::Empty() {
249 if (m_pData) { 249 if (m_pData) {
250 m_pData->Release(); 250 m_pData->Release();
251 m_pData = NULL; 251 m_pData = NULL;
252 } 252 }
253 } 253 }
254 bool CFX_ByteString::EqualNoCase(const CFX_ByteStringC& str) const { 254 bool CFX_ByteString::EqualNoCase(const CFX_ByteStringC& str) const {
255 if (m_pData == NULL) { 255 if (!m_pData) {
256 return str.IsEmpty(); 256 return str.IsEmpty();
257 } 257 }
258 FX_STRSIZE len = str.GetLength(); 258 FX_STRSIZE len = str.GetLength();
259 if (m_pData->m_nDataLength != len) { 259 if (m_pData->m_nDataLength != len) {
260 return false; 260 return false;
261 } 261 }
262 const uint8_t* pThis = (const uint8_t*)m_pData->m_String; 262 const uint8_t* pThis = (const uint8_t*)m_pData->m_String;
263 const uint8_t* pThat = str.GetPtr(); 263 const uint8_t* pThat = str.GetPtr();
264 for (FX_STRSIZE i = 0; i < len; i++) { 264 for (FX_STRSIZE i = 0; i < len; i++) {
265 if ((*pThis) != (*pThat)) { 265 if ((*pThis) != (*pThat)) {
(...skipping 15 matching lines...) Expand all
281 return true; 281 return true;
282 } 282 }
283 void CFX_ByteString::AssignCopy(FX_STRSIZE nSrcLen, 283 void CFX_ByteString::AssignCopy(FX_STRSIZE nSrcLen,
284 const FX_CHAR* lpszSrcData) { 284 const FX_CHAR* lpszSrcData) {
285 AllocBeforeWrite(nSrcLen); 285 AllocBeforeWrite(nSrcLen);
286 FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen); 286 FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen);
287 m_pData->m_nDataLength = nSrcLen; 287 m_pData->m_nDataLength = nSrcLen;
288 m_pData->m_String[nSrcLen] = 0; 288 m_pData->m_String[nSrcLen] = 0;
289 } 289 }
290 void CFX_ByteString::CopyBeforeWrite() { 290 void CFX_ByteString::CopyBeforeWrite() {
291 if (m_pData == NULL || m_pData->m_nRefs <= 1) { 291 if (!m_pData || m_pData->m_nRefs <= 1) {
292 return; 292 return;
293 } 293 }
294 StringData* pData = m_pData; 294 StringData* pData = m_pData;
295 m_pData->Release(); 295 m_pData->Release();
296 FX_STRSIZE nDataLength = pData->m_nDataLength; 296 FX_STRSIZE nDataLength = pData->m_nDataLength;
297 m_pData = StringData::Create(nDataLength); 297 m_pData = StringData::Create(nDataLength);
298 if (m_pData) { 298 if (m_pData) {
299 FXSYS_memcpy(m_pData->m_String, pData->m_String, nDataLength + 1); 299 FXSYS_memcpy(m_pData->m_String, pData->m_String, nDataLength + 1);
300 } 300 }
301 } 301 }
302 void CFX_ByteString::AllocBeforeWrite(FX_STRSIZE nLen) { 302 void CFX_ByteString::AllocBeforeWrite(FX_STRSIZE nLen) {
303 if (m_pData && m_pData->m_nRefs <= 1 && m_pData->m_nAllocLength >= nLen) { 303 if (m_pData && m_pData->m_nRefs <= 1 && m_pData->m_nAllocLength >= nLen) {
304 return; 304 return;
305 } 305 }
306 Empty(); 306 Empty();
307 m_pData = StringData::Create(nLen); 307 m_pData = StringData::Create(nLen);
308 } 308 }
309 void CFX_ByteString::ReleaseBuffer(FX_STRSIZE nNewLength) { 309 void CFX_ByteString::ReleaseBuffer(FX_STRSIZE nNewLength) {
310 if (m_pData == NULL) { 310 if (!m_pData) {
311 return; 311 return;
312 } 312 }
313 CopyBeforeWrite(); 313 CopyBeforeWrite();
314 if (nNewLength == -1) { 314 if (nNewLength == -1) {
315 nNewLength = FXSYS_strlen((const FX_CHAR*)m_pData->m_String); 315 nNewLength = FXSYS_strlen((const FX_CHAR*)m_pData->m_String);
316 } 316 }
317 if (nNewLength == 0) { 317 if (nNewLength == 0) {
318 Empty(); 318 Empty();
319 return; 319 return;
320 } 320 }
321 FXSYS_assert(nNewLength <= m_pData->m_nAllocLength); 321 FXSYS_assert(nNewLength <= m_pData->m_nAllocLength);
322 m_pData->m_nDataLength = nNewLength; 322 m_pData->m_nDataLength = nNewLength;
323 m_pData->m_String[nNewLength] = 0; 323 m_pData->m_String[nNewLength] = 0;
324 } 324 }
325 void CFX_ByteString::Reserve(FX_STRSIZE len) { 325 void CFX_ByteString::Reserve(FX_STRSIZE len) {
326 GetBuffer(len); 326 GetBuffer(len);
327 ReleaseBuffer(GetLength()); 327 ReleaseBuffer(GetLength());
328 } 328 }
329 FX_CHAR* CFX_ByteString::GetBuffer(FX_STRSIZE nMinBufLength) { 329 FX_CHAR* CFX_ByteString::GetBuffer(FX_STRSIZE nMinBufLength) {
330 if (m_pData == NULL && nMinBufLength == 0) { 330 if (!m_pData && nMinBufLength == 0) {
331 return NULL; 331 return NULL;
332 } 332 }
333 if (m_pData && m_pData->m_nRefs <= 1 && 333 if (m_pData && m_pData->m_nRefs <= 1 &&
334 m_pData->m_nAllocLength >= nMinBufLength) { 334 m_pData->m_nAllocLength >= nMinBufLength) {
335 return m_pData->m_String; 335 return m_pData->m_String;
336 } 336 }
337 if (m_pData == NULL) { 337 if (!m_pData) {
338 m_pData = StringData::Create(nMinBufLength); 338 m_pData = StringData::Create(nMinBufLength);
339 if (!m_pData) { 339 if (!m_pData) {
340 return NULL; 340 return NULL;
341 } 341 }
342 m_pData->m_nDataLength = 0; 342 m_pData->m_nDataLength = 0;
343 m_pData->m_String[0] = 0; 343 m_pData->m_String[0] = 0;
344 return m_pData->m_String; 344 return m_pData->m_String;
345 } 345 }
346 StringData* pOldData = m_pData; 346 StringData* pOldData = m_pData;
347 FX_STRSIZE nOldLen = pOldData->m_nDataLength; 347 FX_STRSIZE nOldLen = pOldData->m_nDataLength;
348 if (nMinBufLength < nOldLen) { 348 if (nMinBufLength < nOldLen) {
349 nMinBufLength = nOldLen; 349 nMinBufLength = nOldLen;
350 } 350 }
351 m_pData = StringData::Create(nMinBufLength); 351 m_pData = StringData::Create(nMinBufLength);
352 if (!m_pData) { 352 if (!m_pData) {
353 return NULL; 353 return NULL;
354 } 354 }
355 FXSYS_memcpy(m_pData->m_String, pOldData->m_String, (nOldLen + 1)); 355 FXSYS_memcpy(m_pData->m_String, pOldData->m_String, (nOldLen + 1));
356 m_pData->m_nDataLength = nOldLen; 356 m_pData->m_nDataLength = nOldLen;
357 pOldData->Release(); 357 pOldData->Release();
358 return m_pData->m_String; 358 return m_pData->m_String;
359 } 359 }
360 FX_STRSIZE CFX_ByteString::Delete(FX_STRSIZE nIndex, FX_STRSIZE nCount) { 360 FX_STRSIZE CFX_ByteString::Delete(FX_STRSIZE nIndex, FX_STRSIZE nCount) {
361 if (m_pData == NULL) { 361 if (!m_pData) {
362 return 0; 362 return 0;
363 } 363 }
364 if (nIndex < 0) { 364 if (nIndex < 0) {
365 nIndex = 0; 365 nIndex = 0;
366 } 366 }
367 FX_STRSIZE nOldLength = m_pData->m_nDataLength; 367 FX_STRSIZE nOldLength = m_pData->m_nDataLength;
368 if (nCount > 0 && nIndex < nOldLength) { 368 if (nCount > 0 && nIndex < nOldLength) {
369 FX_STRSIZE mLength = nIndex + nCount; 369 FX_STRSIZE mLength = nIndex + nCount;
370 if (mLength >= nOldLength) { 370 if (mLength >= nOldLength) {
371 m_pData->m_nDataLength = nIndex; 371 m_pData->m_nDataLength = nIndex;
372 return m_pData->m_nDataLength; 372 return m_pData->m_nDataLength;
373 } 373 }
374 CopyBeforeWrite(); 374 CopyBeforeWrite();
375 int nBytesToCopy = nOldLength - mLength + 1; 375 int nBytesToCopy = nOldLength - mLength + 1;
376 FXSYS_memmove(m_pData->m_String + nIndex, m_pData->m_String + mLength, 376 FXSYS_memmove(m_pData->m_String + nIndex, m_pData->m_String + mLength,
377 nBytesToCopy); 377 nBytesToCopy);
378 m_pData->m_nDataLength = nOldLength - nCount; 378 m_pData->m_nDataLength = nOldLength - nCount;
379 } 379 }
380 return m_pData->m_nDataLength; 380 return m_pData->m_nDataLength;
381 } 381 }
382 void CFX_ByteString::ConcatInPlace(FX_STRSIZE nSrcLen, 382 void CFX_ByteString::ConcatInPlace(FX_STRSIZE nSrcLen,
383 const FX_CHAR* lpszSrcData) { 383 const FX_CHAR* lpszSrcData) {
384 if (nSrcLen == 0 || lpszSrcData == NULL) { 384 if (nSrcLen == 0 || !lpszSrcData) {
385 return; 385 return;
386 } 386 }
387 if (m_pData == NULL) { 387 if (!m_pData) {
388 m_pData = StringData::Create(nSrcLen); 388 m_pData = StringData::Create(nSrcLen);
389 if (!m_pData) { 389 if (!m_pData) {
390 return; 390 return;
391 } 391 }
392 FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen); 392 FXSYS_memcpy(m_pData->m_String, lpszSrcData, nSrcLen);
393 return; 393 return;
394 } 394 }
395 if (m_pData->m_nRefs > 1 || 395 if (m_pData->m_nRefs > 1 ||
396 m_pData->m_nDataLength + nSrcLen > m_pData->m_nAllocLength) { 396 m_pData->m_nDataLength + nSrcLen > m_pData->m_nAllocLength) {
397 ConcatCopy(m_pData->m_nDataLength, m_pData->m_String, nSrcLen, lpszSrcData); 397 ConcatCopy(m_pData->m_nDataLength, m_pData->m_String, nSrcLen, lpszSrcData);
(...skipping 15 matching lines...) Expand all
413 // Don't release until done copying, might be one of the arguments. 413 // Don't release until done copying, might be one of the arguments.
414 StringData* pOldData = m_pData; 414 StringData* pOldData = m_pData;
415 m_pData = StringData::Create(nNewLen); 415 m_pData = StringData::Create(nNewLen);
416 if (m_pData) { 416 if (m_pData) {
417 memcpy(m_pData->m_String, lpszSrc1Data, nSrc1Len); 417 memcpy(m_pData->m_String, lpszSrc1Data, nSrc1Len);
418 memcpy(m_pData->m_String + nSrc1Len, lpszSrc2Data, nSrc2Len); 418 memcpy(m_pData->m_String + nSrc1Len, lpszSrc2Data, nSrc2Len);
419 } 419 }
420 pOldData->Release(); 420 pOldData->Release();
421 } 421 }
422 CFX_ByteString CFX_ByteString::Mid(FX_STRSIZE nFirst) const { 422 CFX_ByteString CFX_ByteString::Mid(FX_STRSIZE nFirst) const {
423 if (m_pData == NULL) { 423 if (!m_pData) {
424 return CFX_ByteString(); 424 return CFX_ByteString();
425 } 425 }
426 return Mid(nFirst, m_pData->m_nDataLength - nFirst); 426 return Mid(nFirst, m_pData->m_nDataLength - nFirst);
427 } 427 }
428 CFX_ByteString CFX_ByteString::Mid(FX_STRSIZE nFirst, FX_STRSIZE nCount) const { 428 CFX_ByteString CFX_ByteString::Mid(FX_STRSIZE nFirst, FX_STRSIZE nCount) const {
429 if (nFirst < 0) { 429 if (nFirst < 0) {
430 nFirst = 0; 430 nFirst = 0;
431 } 431 }
432 if (nCount < 0) { 432 if (nCount < 0) {
433 nCount = 0; 433 nCount = 0;
(...skipping 12 matching lines...) Expand all
446 return dest; 446 return dest;
447 } 447 }
448 void CFX_ByteString::AllocCopy(CFX_ByteString& dest, 448 void CFX_ByteString::AllocCopy(CFX_ByteString& dest,
449 FX_STRSIZE nCopyLen, 449 FX_STRSIZE nCopyLen,
450 FX_STRSIZE nCopyIndex) const { 450 FX_STRSIZE nCopyIndex) const {
451 // |FX_STRSIZE| is currently typedef'd as in |int|. TODO(palmer): It 451 // |FX_STRSIZE| is currently typedef'd as in |int|. TODO(palmer): It
452 // should be a |size_t|, or at least unsigned. 452 // should be a |size_t|, or at least unsigned.
453 if (nCopyLen == 0 || nCopyLen < 0) { 453 if (nCopyLen == 0 || nCopyLen < 0) {
454 return; 454 return;
455 } 455 }
456 ASSERT(dest.m_pData == NULL); 456 ASSERT(!dest.m_pData);
457 dest.m_pData = StringData::Create(nCopyLen); 457 dest.m_pData = StringData::Create(nCopyLen);
458 if (dest.m_pData) { 458 if (dest.m_pData) {
459 FXSYS_memcpy(dest.m_pData->m_String, m_pData->m_String + nCopyIndex, 459 FXSYS_memcpy(dest.m_pData->m_String, m_pData->m_String + nCopyIndex,
460 nCopyLen); 460 nCopyLen);
461 } 461 }
462 } 462 }
463 #define FORCE_ANSI 0x10000 463 #define FORCE_ANSI 0x10000
464 #define FORCE_UNICODE 0x20000 464 #define FORCE_UNICODE 0x20000
465 #define FORCE_INT64 0x40000 465 #define FORCE_INT64 0x40000
466 void CFX_ByteString::FormatV(const FX_CHAR* lpszFormat, va_list argList) { 466 void CFX_ByteString::FormatV(const FX_CHAR* lpszFormat, va_list argList) {
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 nItemLen = 2; 551 nItemLen = 2;
552 va_arg(argList, int); 552 va_arg(argList, int);
553 break; 553 break;
554 case 'c' | FORCE_UNICODE: 554 case 'c' | FORCE_UNICODE:
555 case 'C' | FORCE_UNICODE: 555 case 'C' | FORCE_UNICODE:
556 nItemLen = 2; 556 nItemLen = 2;
557 va_arg(argList, int); 557 va_arg(argList, int);
558 break; 558 break;
559 case 's': { 559 case 's': {
560 const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*); 560 const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*);
561 if (pstrNextArg == NULL) { 561 if (pstrNextArg) {
562 nItemLen = 6;
563 } else {
564 nItemLen = FXSYS_strlen(pstrNextArg); 562 nItemLen = FXSYS_strlen(pstrNextArg);
565 if (nItemLen < 1) { 563 if (nItemLen < 1) {
566 nItemLen = 1; 564 nItemLen = 1;
567 } 565 }
566 } else {
567 nItemLen = 6;
568 } 568 }
569 } break; 569 } break;
570 case 'S': { 570 case 'S': {
571 FX_WCHAR* pstrNextArg = va_arg(argList, FX_WCHAR*); 571 FX_WCHAR* pstrNextArg = va_arg(argList, FX_WCHAR*);
572 if (pstrNextArg == NULL) { 572 if (pstrNextArg) {
573 nItemLen = 6;
574 } else {
575 nItemLen = FXSYS_wcslen(pstrNextArg); 573 nItemLen = FXSYS_wcslen(pstrNextArg);
576 if (nItemLen < 1) { 574 if (nItemLen < 1) {
577 nItemLen = 1; 575 nItemLen = 1;
578 } 576 }
577 } else {
578 nItemLen = 6;
579 } 579 }
580 } break; 580 } break;
581 case 's' | FORCE_ANSI: 581 case 's' | FORCE_ANSI:
582 case 'S' | FORCE_ANSI: { 582 case 'S' | FORCE_ANSI: {
583 const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*); 583 const FX_CHAR* pstrNextArg = va_arg(argList, const FX_CHAR*);
584 if (pstrNextArg == NULL) { 584 if (pstrNextArg) {
585 nItemLen = 6;
586 } else {
587 nItemLen = FXSYS_strlen(pstrNextArg); 585 nItemLen = FXSYS_strlen(pstrNextArg);
588 if (nItemLen < 1) { 586 if (nItemLen < 1) {
589 nItemLen = 1; 587 nItemLen = 1;
590 } 588 }
589 } else {
590 nItemLen = 6;
591 } 591 }
592 } break; 592 } break;
593 case 's' | FORCE_UNICODE: 593 case 's' | FORCE_UNICODE:
594 case 'S' | FORCE_UNICODE: { 594 case 'S' | FORCE_UNICODE: {
595 FX_WCHAR* pstrNextArg = va_arg(argList, FX_WCHAR*); 595 FX_WCHAR* pstrNextArg = va_arg(argList, FX_WCHAR*);
596 if (pstrNextArg == NULL) { 596 if (pstrNextArg) {
597 nItemLen = 6;
598 } else {
599 nItemLen = FXSYS_wcslen(pstrNextArg); 597 nItemLen = FXSYS_wcslen(pstrNextArg);
600 if (nItemLen < 1) { 598 if (nItemLen < 1) {
601 nItemLen = 1; 599 nItemLen = 1;
602 } 600 }
601 } else {
602 nItemLen = 6;
603 } 603 }
604 } break; 604 } break;
605 } 605 }
606 if (nItemLen != 0) { 606 if (nItemLen != 0) {
607 if (nPrecision != 0 && nItemLen > nPrecision) { 607 if (nPrecision != 0 && nItemLen > nPrecision) {
608 nItemLen = nPrecision; 608 nItemLen = nPrecision;
609 } 609 }
610 if (nItemLen < nWidth) { 610 if (nItemLen < nWidth) {
611 nItemLen = nWidth; 611 nItemLen = nWidth;
612 } 612 }
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 FX_STRSIZE CFX_ByteString::Insert(FX_STRSIZE nIndex, FX_CHAR ch) { 684 FX_STRSIZE CFX_ByteString::Insert(FX_STRSIZE nIndex, FX_CHAR ch) {
685 CopyBeforeWrite(); 685 CopyBeforeWrite();
686 if (nIndex < 0) { 686 if (nIndex < 0) {
687 nIndex = 0; 687 nIndex = 0;
688 } 688 }
689 FX_STRSIZE nNewLength = m_pData ? m_pData->m_nDataLength : 0; 689 FX_STRSIZE nNewLength = m_pData ? m_pData->m_nDataLength : 0;
690 if (nIndex > nNewLength) { 690 if (nIndex > nNewLength) {
691 nIndex = nNewLength; 691 nIndex = nNewLength;
692 } 692 }
693 nNewLength++; 693 nNewLength++;
694 if (m_pData == NULL || m_pData->m_nAllocLength < nNewLength) { 694 if (!m_pData || m_pData->m_nAllocLength < nNewLength) {
695 StringData* pOldData = m_pData; 695 StringData* pOldData = m_pData;
696 const FX_CHAR* pstr = m_pData->m_String; 696 const FX_CHAR* pstr = m_pData->m_String;
697 m_pData = StringData::Create(nNewLength); 697 m_pData = StringData::Create(nNewLength);
698 if (!m_pData) { 698 if (!m_pData) {
699 return 0; 699 return 0;
700 } 700 }
701 if (pOldData) { 701 if (pOldData) {
702 FXSYS_memmove(m_pData->m_String, pstr, (pOldData->m_nDataLength + 1)); 702 FXSYS_memmove(m_pData->m_String, pstr, (pOldData->m_nDataLength + 1));
703 pOldData->Release(); 703 pOldData->Release();
704 } else { 704 } else {
705 m_pData->m_String[0] = 0; 705 m_pData->m_String[0] = 0;
706 } 706 }
707 } 707 }
708 FXSYS_memmove(m_pData->m_String + nIndex + 1, m_pData->m_String + nIndex, 708 FXSYS_memmove(m_pData->m_String + nIndex + 1, m_pData->m_String + nIndex,
709 (nNewLength - nIndex)); 709 (nNewLength - nIndex));
710 m_pData->m_String[nIndex] = ch; 710 m_pData->m_String[nIndex] = ch;
711 m_pData->m_nDataLength = nNewLength; 711 m_pData->m_nDataLength = nNewLength;
712 return nNewLength; 712 return nNewLength;
713 } 713 }
714 CFX_ByteString CFX_ByteString::Right(FX_STRSIZE nCount) const { 714 CFX_ByteString CFX_ByteString::Right(FX_STRSIZE nCount) const {
715 if (m_pData == NULL) { 715 if (!m_pData) {
716 return CFX_ByteString(); 716 return CFX_ByteString();
717 } 717 }
718 if (nCount < 0) { 718 if (nCount < 0) {
719 nCount = 0; 719 nCount = 0;
720 } 720 }
721 if (nCount >= m_pData->m_nDataLength) { 721 if (nCount >= m_pData->m_nDataLength) {
722 return *this; 722 return *this;
723 } 723 }
724 CFX_ByteString dest; 724 CFX_ByteString dest;
725 AllocCopy(dest, nCount, m_pData->m_nDataLength - nCount); 725 AllocCopy(dest, nCount, m_pData->m_nDataLength - nCount);
726 return dest; 726 return dest;
727 } 727 }
728 CFX_ByteString CFX_ByteString::Left(FX_STRSIZE nCount) const { 728 CFX_ByteString CFX_ByteString::Left(FX_STRSIZE nCount) const {
729 if (m_pData == NULL) { 729 if (!m_pData) {
730 return CFX_ByteString(); 730 return CFX_ByteString();
731 } 731 }
732 if (nCount < 0) { 732 if (nCount < 0) {
733 nCount = 0; 733 nCount = 0;
734 } 734 }
735 if (nCount >= m_pData->m_nDataLength) { 735 if (nCount >= m_pData->m_nDataLength) {
736 return *this; 736 return *this;
737 } 737 }
738 CFX_ByteString dest; 738 CFX_ByteString dest;
739 AllocCopy(dest, nCount, 0); 739 AllocCopy(dest, nCount, 0);
740 return dest; 740 return dest;
741 } 741 }
742 FX_STRSIZE CFX_ByteString::Find(FX_CHAR ch, FX_STRSIZE nStart) const { 742 FX_STRSIZE CFX_ByteString::Find(FX_CHAR ch, FX_STRSIZE nStart) const {
743 if (m_pData == NULL) { 743 if (!m_pData) {
744 return -1; 744 return -1;
745 } 745 }
746 FX_STRSIZE nLength = m_pData->m_nDataLength; 746 FX_STRSIZE nLength = m_pData->m_nDataLength;
747 if (nStart >= nLength) { 747 if (nStart >= nLength) {
748 return -1; 748 return -1;
749 } 749 }
750 const FX_CHAR* lpsz = FXSYS_strchr(m_pData->m_String + nStart, ch); 750 const FX_CHAR* lpsz = FXSYS_strchr(m_pData->m_String + nStart, ch);
751 return (lpsz == NULL) ? -1 : (int)(lpsz - m_pData->m_String); 751 return lpsz ? (int)(lpsz - m_pData->m_String) : -1;
752 } 752 }
753 FX_STRSIZE CFX_ByteString::ReverseFind(FX_CHAR ch) const { 753 FX_STRSIZE CFX_ByteString::ReverseFind(FX_CHAR ch) const {
754 if (m_pData == NULL) { 754 if (!m_pData) {
755 return -1; 755 return -1;
756 } 756 }
757 FX_STRSIZE nLength = m_pData->m_nDataLength; 757 FX_STRSIZE nLength = m_pData->m_nDataLength;
758 while (nLength) { 758 while (nLength) {
759 if (m_pData->m_String[nLength - 1] == ch) { 759 if (m_pData->m_String[nLength - 1] == ch) {
760 return nLength - 1; 760 return nLength - 1;
761 } 761 }
762 nLength--; 762 nLength--;
763 } 763 }
764 return -1; 764 return -1;
(...skipping 16 matching lines...) Expand all
781 if (i == len2) { 781 if (i == len2) {
782 return str1; 782 return str1;
783 } 783 }
784 } 784 }
785 str1++; 785 str1++;
786 } 786 }
787 return NULL; 787 return NULL;
788 } 788 }
789 FX_STRSIZE CFX_ByteString::Find(const CFX_ByteStringC& lpszSub, 789 FX_STRSIZE CFX_ByteString::Find(const CFX_ByteStringC& lpszSub,
790 FX_STRSIZE nStart) const { 790 FX_STRSIZE nStart) const {
791 if (m_pData == NULL) { 791 if (!m_pData) {
792 return -1; 792 return -1;
793 } 793 }
794 FX_STRSIZE nLength = m_pData->m_nDataLength; 794 FX_STRSIZE nLength = m_pData->m_nDataLength;
795 if (nStart > nLength) { 795 if (nStart > nLength) {
796 return -1; 796 return -1;
797 } 797 }
798 const FX_CHAR* lpsz = 798 const FX_CHAR* lpsz =
799 FX_strstr(m_pData->m_String + nStart, m_pData->m_nDataLength - nStart, 799 FX_strstr(m_pData->m_String + nStart, m_pData->m_nDataLength - nStart,
800 lpszSub.GetCStr(), lpszSub.GetLength()); 800 lpszSub.GetCStr(), lpszSub.GetLength());
801 return (lpsz == NULL) ? -1 : (int)(lpsz - m_pData->m_String); 801 return lpsz ? (int)(lpsz - m_pData->m_String) : -1;
802 } 802 }
803 void CFX_ByteString::MakeLower() { 803 void CFX_ByteString::MakeLower() {
804 if (m_pData == NULL) { 804 if (!m_pData) {
805 return; 805 return;
806 } 806 }
807 CopyBeforeWrite(); 807 CopyBeforeWrite();
808 if (GetLength() < 1) { 808 if (GetLength() < 1) {
809 return; 809 return;
810 } 810 }
811 FXSYS_strlwr(m_pData->m_String); 811 FXSYS_strlwr(m_pData->m_String);
812 } 812 }
813 void CFX_ByteString::MakeUpper() { 813 void CFX_ByteString::MakeUpper() {
814 if (m_pData == NULL) { 814 if (!m_pData) {
815 return; 815 return;
816 } 816 }
817 CopyBeforeWrite(); 817 CopyBeforeWrite();
818 if (GetLength() < 1) { 818 if (GetLength() < 1) {
819 return; 819 return;
820 } 820 }
821 FXSYS_strupr(m_pData->m_String); 821 FXSYS_strupr(m_pData->m_String);
822 } 822 }
823 FX_STRSIZE CFX_ByteString::Remove(FX_CHAR chRemove) { 823 FX_STRSIZE CFX_ByteString::Remove(FX_CHAR chRemove) {
824 if (m_pData == NULL) { 824 if (!m_pData) {
825 return 0; 825 return 0;
826 } 826 }
827 CopyBeforeWrite(); 827 CopyBeforeWrite();
828 if (GetLength() < 1) { 828 if (GetLength() < 1) {
829 return 0; 829 return 0;
830 } 830 }
831 FX_CHAR* pstrSource = m_pData->m_String; 831 FX_CHAR* pstrSource = m_pData->m_String;
832 FX_CHAR* pstrDest = m_pData->m_String; 832 FX_CHAR* pstrDest = m_pData->m_String;
833 FX_CHAR* pstrEnd = m_pData->m_String + m_pData->m_nDataLength; 833 FX_CHAR* pstrEnd = m_pData->m_String + m_pData->m_nDataLength;
834 while (pstrSource < pstrEnd) { 834 while (pstrSource < pstrEnd) {
835 if (*pstrSource != chRemove) { 835 if (*pstrSource != chRemove) {
836 *pstrDest = *pstrSource; 836 *pstrDest = *pstrSource;
837 pstrDest++; 837 pstrDest++;
838 } 838 }
839 pstrSource++; 839 pstrSource++;
840 } 840 }
841 *pstrDest = 0; 841 *pstrDest = 0;
842 FX_STRSIZE nCount = (FX_STRSIZE)(pstrSource - pstrDest); 842 FX_STRSIZE nCount = (FX_STRSIZE)(pstrSource - pstrDest);
843 m_pData->m_nDataLength -= nCount; 843 m_pData->m_nDataLength -= nCount;
844 return nCount; 844 return nCount;
845 } 845 }
846 FX_STRSIZE CFX_ByteString::Replace(const CFX_ByteStringC& lpszOld, 846 FX_STRSIZE CFX_ByteString::Replace(const CFX_ByteStringC& lpszOld,
847 const CFX_ByteStringC& lpszNew) { 847 const CFX_ByteStringC& lpszNew) {
848 if (m_pData == NULL) { 848 if (!m_pData) {
849 return 0; 849 return 0;
850 } 850 }
851 if (lpszOld.IsEmpty()) { 851 if (lpszOld.IsEmpty()) {
852 return 0; 852 return 0;
853 } 853 }
854 FX_STRSIZE nSourceLen = lpszOld.GetLength(); 854 FX_STRSIZE nSourceLen = lpszOld.GetLength();
855 FX_STRSIZE nReplacementLen = lpszNew.GetLength(); 855 FX_STRSIZE nReplacementLen = lpszNew.GetLength();
856 FX_STRSIZE nCount = 0; 856 FX_STRSIZE nCount = 0;
857 const FX_CHAR* pStart = m_pData->m_String; 857 const FX_CHAR* pStart = m_pData->m_String;
858 FX_CHAR* pEnd = m_pData->m_String + m_pData->m_nDataLength; 858 FX_CHAR* pEnd = m_pData->m_String + m_pData->m_nDataLength;
859 while (1) { 859 while (1) {
860 const FX_CHAR* pTarget = FX_strstr(pStart, (FX_STRSIZE)(pEnd - pStart), 860 const FX_CHAR* pTarget = FX_strstr(pStart, (FX_STRSIZE)(pEnd - pStart),
861 lpszOld.GetCStr(), nSourceLen); 861 lpszOld.GetCStr(), nSourceLen);
862 if (pTarget == NULL) { 862 if (!pTarget) {
863 break; 863 break;
864 } 864 }
865 nCount++; 865 nCount++;
866 pStart = pTarget + nSourceLen; 866 pStart = pTarget + nSourceLen;
867 } 867 }
868 if (nCount == 0) { 868 if (nCount == 0) {
869 return 0; 869 return 0;
870 } 870 }
871 FX_STRSIZE nNewLength = 871 FX_STRSIZE nNewLength =
872 m_pData->m_nDataLength + (nReplacementLen - nSourceLen) * nCount; 872 m_pData->m_nDataLength + (nReplacementLen - nSourceLen) * nCount;
(...skipping 15 matching lines...) Expand all
888 FXSYS_memcpy(pDest, lpszNew.GetCStr(), lpszNew.GetLength()); 888 FXSYS_memcpy(pDest, lpszNew.GetCStr(), lpszNew.GetLength());
889 pDest += lpszNew.GetLength(); 889 pDest += lpszNew.GetLength();
890 pStart = pTarget + nSourceLen; 890 pStart = pTarget + nSourceLen;
891 } 891 }
892 FXSYS_memcpy(pDest, pStart, pEnd - pStart); 892 FXSYS_memcpy(pDest, pStart, pEnd - pStart);
893 m_pData->Release(); 893 m_pData->Release();
894 m_pData = pNewData; 894 m_pData = pNewData;
895 return nCount; 895 return nCount;
896 } 896 }
897 void CFX_ByteString::SetAt(FX_STRSIZE nIndex, FX_CHAR ch) { 897 void CFX_ByteString::SetAt(FX_STRSIZE nIndex, FX_CHAR ch) {
898 if (m_pData == NULL) { 898 if (!m_pData) {
899 return; 899 return;
900 } 900 }
901 FXSYS_assert(nIndex >= 0); 901 FXSYS_assert(nIndex >= 0);
902 FXSYS_assert(nIndex < m_pData->m_nDataLength); 902 FXSYS_assert(nIndex < m_pData->m_nDataLength);
903 CopyBeforeWrite(); 903 CopyBeforeWrite();
904 m_pData->m_String[nIndex] = ch; 904 m_pData->m_String[nIndex] = ch;
905 } 905 }
906 CFX_WideString CFX_ByteString::UTF8Decode() const { 906 CFX_WideString CFX_ByteString::UTF8Decode() const {
907 CFX_UTF8Decoder decoder; 907 CFX_UTF8Decoder decoder;
908 for (FX_STRSIZE i = 0; i < GetLength(); i++) { 908 for (FX_STRSIZE i = 0; i < GetLength(); i++) {
909 decoder.Input((uint8_t)m_pData->m_String[i]); 909 decoder.Input((uint8_t)m_pData->m_String[i]);
910 } 910 }
911 return decoder.GetResult(); 911 return decoder.GetResult();
912 } 912 }
913 CFX_ByteString CFX_ByteString::FromUnicode(const FX_WCHAR* str, 913 CFX_ByteString CFX_ByteString::FromUnicode(const FX_WCHAR* str,
914 FX_STRSIZE len) { 914 FX_STRSIZE len) {
915 if (len < 0) { 915 if (len < 0) {
916 len = FXSYS_wcslen(str); 916 len = FXSYS_wcslen(str);
917 } 917 }
918 CFX_ByteString bstr; 918 CFX_ByteString bstr;
919 bstr.ConvertFrom(CFX_WideString(str, len)); 919 bstr.ConvertFrom(CFX_WideString(str, len));
920 return bstr; 920 return bstr;
921 } 921 }
922 CFX_ByteString CFX_ByteString::FromUnicode(const CFX_WideString& str) { 922 CFX_ByteString CFX_ByteString::FromUnicode(const CFX_WideString& str) {
923 return FromUnicode(str.c_str(), str.GetLength()); 923 return FromUnicode(str.c_str(), str.GetLength());
924 } 924 }
925 void CFX_ByteString::ConvertFrom(const CFX_WideString& str, 925 void CFX_ByteString::ConvertFrom(const CFX_WideString& str,
926 CFX_CharMap* pCharMap) { 926 CFX_CharMap* pCharMap) {
927 if (pCharMap == NULL) { 927 if (!pCharMap) {
928 pCharMap = CFX_CharMap::GetDefaultMapper(); 928 pCharMap = CFX_CharMap::GetDefaultMapper();
929 } 929 }
930 *this = (*pCharMap->m_GetByteString)(pCharMap, str); 930 *this = (*pCharMap->m_GetByteString)(pCharMap, str);
931 } 931 }
932 int CFX_ByteString::Compare(const CFX_ByteStringC& str) const { 932 int CFX_ByteString::Compare(const CFX_ByteStringC& str) const {
933 if (m_pData == NULL) { 933 if (!m_pData) {
934 return str.IsEmpty() ? 0 : -1; 934 return str.IsEmpty() ? 0 : -1;
935 } 935 }
936 int this_len = m_pData->m_nDataLength; 936 int this_len = m_pData->m_nDataLength;
937 int that_len = str.GetLength(); 937 int that_len = str.GetLength();
938 int min_len = this_len < that_len ? this_len : that_len; 938 int min_len = this_len < that_len ? this_len : that_len;
939 for (int i = 0; i < min_len; i++) { 939 for (int i = 0; i < min_len; i++) {
940 if ((uint8_t)m_pData->m_String[i] < str.GetAt(i)) { 940 if ((uint8_t)m_pData->m_String[i] < str.GetAt(i)) {
941 return -1; 941 return -1;
942 } 942 }
943 if ((uint8_t)m_pData->m_String[i] > str.GetAt(i)) { 943 if ((uint8_t)m_pData->m_String[i] > str.GetAt(i)) {
944 return 1; 944 return 1;
945 } 945 }
946 } 946 }
947 if (this_len < that_len) { 947 if (this_len < that_len) {
948 return -1; 948 return -1;
949 } 949 }
950 if (this_len > that_len) { 950 if (this_len > that_len) {
951 return 1; 951 return 1;
952 } 952 }
953 return 0; 953 return 0;
954 } 954 }
955 void CFX_ByteString::TrimRight(const CFX_ByteStringC& lpszTargets) { 955 void CFX_ByteString::TrimRight(const CFX_ByteStringC& lpszTargets) {
956 if (m_pData == NULL || lpszTargets.IsEmpty()) { 956 if (!m_pData || lpszTargets.IsEmpty()) {
957 return; 957 return;
958 } 958 }
959 CopyBeforeWrite(); 959 CopyBeforeWrite();
960 FX_STRSIZE pos = GetLength(); 960 FX_STRSIZE pos = GetLength();
961 if (pos < 1) { 961 if (pos < 1) {
962 return; 962 return;
963 } 963 }
964 while (pos) { 964 while (pos) {
965 FX_STRSIZE i = 0; 965 FX_STRSIZE i = 0;
966 while (i < lpszTargets.GetLength() && 966 while (i < lpszTargets.GetLength() &&
(...skipping 10 matching lines...) Expand all
977 m_pData->m_nDataLength = pos; 977 m_pData->m_nDataLength = pos;
978 } 978 }
979 } 979 }
980 void CFX_ByteString::TrimRight(FX_CHAR chTarget) { 980 void CFX_ByteString::TrimRight(FX_CHAR chTarget) {
981 TrimRight(CFX_ByteStringC(chTarget)); 981 TrimRight(CFX_ByteStringC(chTarget));
982 } 982 }
983 void CFX_ByteString::TrimRight() { 983 void CFX_ByteString::TrimRight() {
984 TrimRight("\x09\x0a\x0b\x0c\x0d\x20"); 984 TrimRight("\x09\x0a\x0b\x0c\x0d\x20");
985 } 985 }
986 void CFX_ByteString::TrimLeft(const CFX_ByteStringC& lpszTargets) { 986 void CFX_ByteString::TrimLeft(const CFX_ByteStringC& lpszTargets) {
987 if (m_pData == NULL) { 987 if (!m_pData) {
988 return; 988 return;
989 } 989 }
990 if (lpszTargets.IsEmpty()) { 990 if (lpszTargets.IsEmpty()) {
991 return; 991 return;
992 } 992 }
993 CopyBeforeWrite(); 993 CopyBeforeWrite();
994 FX_STRSIZE len = GetLength(); 994 FX_STRSIZE len = GetLength();
995 if (len < 1) { 995 if (len < 1) {
996 return; 996 return;
997 } 997 }
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1087 fraction %= scale; 1087 fraction %= scale;
1088 scale /= 10; 1088 scale /= 10;
1089 } 1089 }
1090 return buf_size; 1090 return buf_size;
1091 } 1091 }
1092 CFX_ByteString CFX_ByteString::FormatFloat(FX_FLOAT d, int precision) { 1092 CFX_ByteString CFX_ByteString::FormatFloat(FX_FLOAT d, int precision) {
1093 FX_CHAR buf[32]; 1093 FX_CHAR buf[32];
1094 FX_STRSIZE len = FX_ftoa(d, buf); 1094 FX_STRSIZE len = FX_ftoa(d, buf);
1095 return CFX_ByteString(buf, len); 1095 return CFX_ByteString(buf, len);
1096 } 1096 }
OLDNEW
« no previous file with comments | « core/src/fxcrt/fx_basic_array.cpp ('k') | core/src/fxcrt/fx_basic_gcc.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698