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

Side by Side Diff: base/files/file_path.cc

Issue 1446363003: Deleted OS_WIN and all Windows specific files from base. (Closed) Base URL: https://github.com/domokit/mojo.git@base_tests
Patch Set: Created 5 years, 1 month 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 | « base/files/file_path.h ('k') | base/files/file_path_unittest.cc » ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium 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 #include "base/files/file_path.h" 5 #include "base/files/file_path.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 #include <algorithm> 8 #include <algorithm>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/pickle.h" 12 #include "base/pickle.h"
13 13
14 // These includes are just for the *Hack functions, and should be removed 14 // These includes are just for the *Hack functions, and should be removed
15 // when those functions are removed. 15 // when those functions are removed.
16 #include "base/strings/string_piece.h" 16 #include "base/strings/string_piece.h"
17 #include "base/strings/string_util.h" 17 #include "base/strings/string_util.h"
18 #include "base/strings/sys_string_conversions.h" 18 #include "base/strings/sys_string_conversions.h"
19 #include "base/strings/utf_string_conversions.h" 19 #include "base/strings/utf_string_conversions.h"
20 20
21 #if defined(OS_MACOSX) 21 #if defined(OS_MACOSX)
22 #include "base/mac/scoped_cftyperef.h" 22 #include "base/mac/scoped_cftyperef.h"
23 #include "base/third_party/icu/icu_utf.h" 23 #include "base/third_party/icu/icu_utf.h"
24 #endif 24 #endif
25 25
26 #if defined(OS_WIN) 26 #if defined(OS_MACOSX)
27 #include <windows.h>
28 #elif defined(OS_MACOSX)
29 #include <CoreFoundation/CoreFoundation.h> 27 #include <CoreFoundation/CoreFoundation.h>
30 #endif 28 #endif
31 29
32 namespace base { 30 namespace base {
33 31
34 typedef FilePath::StringType StringType; 32 typedef FilePath::StringType StringType;
35 33
36 namespace { 34 namespace {
37 35
38 const char* const kCommonDoubleExtensionSuffixes[] = { "gz", "z", "bz2", "bz" }; 36 const char* const kCommonDoubleExtensionSuffixes[] = { "gz", "z", "bz2", "bz" };
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
414 StringType ext = Extension(); 412 StringType ext = Extension();
415 StringType ret = RemoveExtension().value(); 413 StringType ret = RemoveExtension().value();
416 ret.append(suffix); 414 ret.append(suffix);
417 ret.append(ext); 415 ret.append(ext);
418 return FilePath(ret); 416 return FilePath(ret);
419 } 417 }
420 418
421 FilePath FilePath::InsertBeforeExtensionASCII(const StringPiece& suffix) 419 FilePath FilePath::InsertBeforeExtensionASCII(const StringPiece& suffix)
422 const { 420 const {
423 DCHECK(IsStringASCII(suffix)); 421 DCHECK(IsStringASCII(suffix));
424 #if defined(OS_WIN)
425 return InsertBeforeExtension(ASCIIToUTF16(suffix.as_string()));
426 #elif defined(OS_POSIX)
427 return InsertBeforeExtension(suffix.as_string()); 422 return InsertBeforeExtension(suffix.as_string());
428 #endif
429 } 423 }
430 424
431 FilePath FilePath::AddExtension(const StringType& extension) const { 425 FilePath FilePath::AddExtension(const StringType& extension) const {
432 if (IsEmptyOrSpecialCase(BaseName().value())) 426 if (IsEmptyOrSpecialCase(BaseName().value()))
433 return FilePath(); 427 return FilePath();
434 428
435 // If the new extension is "" or ".", then just return the current FilePath. 429 // If the new extension is "" or ".", then just return the current FilePath.
436 if (extension.empty() || extension == StringType(1, kExtensionSeparator)) 430 if (extension.empty() || extension == StringType(1, kExtensionSeparator))
437 return *this; 431 return *this;
438 432
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
515 new_path.path_.append(*appended); 509 new_path.path_.append(*appended);
516 return new_path; 510 return new_path;
517 } 511 }
518 512
519 FilePath FilePath::Append(const FilePath& component) const { 513 FilePath FilePath::Append(const FilePath& component) const {
520 return Append(component.value()); 514 return Append(component.value());
521 } 515 }
522 516
523 FilePath FilePath::AppendASCII(const StringPiece& component) const { 517 FilePath FilePath::AppendASCII(const StringPiece& component) const {
524 DCHECK(base::IsStringASCII(component)); 518 DCHECK(base::IsStringASCII(component));
525 #if defined(OS_WIN)
526 return Append(ASCIIToUTF16(component.as_string()));
527 #elif defined(OS_POSIX)
528 return Append(component.as_string()); 519 return Append(component.as_string());
529 #endif
530 } 520 }
531 521
532 bool FilePath::IsAbsolute() const { 522 bool FilePath::IsAbsolute() const {
533 return IsPathAbsolute(path_); 523 return IsPathAbsolute(path_);
534 } 524 }
535 525
536 bool FilePath::EndsWithSeparator() const { 526 bool FilePath::EndsWithSeparator() const {
537 if (empty()) 527 if (empty())
538 return false; 528 return false;
539 return IsSeparator(path_[path_.size() - 1]); 529 return IsSeparator(path_[path_.size() - 1]);
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 609
620 // static 610 // static
621 FilePath FilePath::FromUTF16Unsafe(const string16& utf16) { 611 FilePath FilePath::FromUTF16Unsafe(const string16& utf16) {
622 #if defined(SYSTEM_NATIVE_UTF8) 612 #if defined(SYSTEM_NATIVE_UTF8)
623 return FilePath(UTF16ToUTF8(utf16)); 613 return FilePath(UTF16ToUTF8(utf16));
624 #else 614 #else
625 return FilePath(SysWideToNativeMB(UTF16ToWide(utf16))); 615 return FilePath(SysWideToNativeMB(UTF16ToWide(utf16)));
626 #endif 616 #endif
627 } 617 }
628 618
629 #elif defined(OS_WIN)
630 string16 FilePath::LossyDisplayName() const {
631 return path_;
632 }
633
634 std::string FilePath::MaybeAsASCII() const {
635 if (base::IsStringASCII(path_))
636 return UTF16ToASCII(path_);
637 return std::string();
638 }
639
640 std::string FilePath::AsUTF8Unsafe() const {
641 return WideToUTF8(value());
642 }
643
644 string16 FilePath::AsUTF16Unsafe() const {
645 return value();
646 }
647
648 // static
649 FilePath FilePath::FromUTF8Unsafe(const std::string& utf8) {
650 return FilePath(UTF8ToWide(utf8));
651 }
652
653 // static
654 FilePath FilePath::FromUTF16Unsafe(const string16& utf16) {
655 return FilePath(utf16);
656 }
657 #endif 619 #endif
658 620
659 void FilePath::WriteToPickle(Pickle* pickle) const { 621 void FilePath::WriteToPickle(Pickle* pickle) const {
660 #if defined(OS_WIN)
661 pickle->WriteString16(path_);
662 #else
663 pickle->WriteString(path_); 622 pickle->WriteString(path_);
664 #endif
665 } 623 }
666 624
667 bool FilePath::ReadFromPickle(PickleIterator* iter) { 625 bool FilePath::ReadFromPickle(PickleIterator* iter) {
668 #if defined(OS_WIN)
669 if (!iter->ReadString16(&path_))
670 return false;
671 #else
672 if (!iter->ReadString(&path_)) 626 if (!iter->ReadString(&path_))
673 return false; 627 return false;
674 #endif
675 628
676 if (path_.find(kStringTerminator) != StringType::npos) 629 if (path_.find(kStringTerminator) != StringType::npos)
677 return false; 630 return false;
678 631
679 return true; 632 return true;
680 } 633 }
681 634
682 #if defined(OS_WIN) 635 #if defined(OS_MACOSX)
683 // Windows specific implementation of file string comparisons
684
685 int FilePath::CompareIgnoreCase(const StringType& string1,
686 const StringType& string2) {
687 // Perform character-wise upper case comparison rather than using the
688 // fully Unicode-aware CompareString(). For details see:
689 // http://blogs.msdn.com/michkap/archive/2005/10/17/481600.aspx
690 StringType::const_iterator i1 = string1.begin();
691 StringType::const_iterator i2 = string2.begin();
692 StringType::const_iterator string1end = string1.end();
693 StringType::const_iterator string2end = string2.end();
694 for ( ; i1 != string1end && i2 != string2end; ++i1, ++i2) {
695 wchar_t c1 =
696 (wchar_t)LOWORD(::CharUpperW((LPWSTR)(DWORD_PTR)MAKELONG(*i1, 0)));
697 wchar_t c2 =
698 (wchar_t)LOWORD(::CharUpperW((LPWSTR)(DWORD_PTR)MAKELONG(*i2, 0)));
699 if (c1 < c2)
700 return -1;
701 if (c1 > c2)
702 return 1;
703 }
704 if (i1 != string1end)
705 return 1;
706 if (i2 != string2end)
707 return -1;
708 return 0;
709 }
710
711 #elif defined(OS_MACOSX)
712 // Mac OS X specific implementation of file string comparisons 636 // Mac OS X specific implementation of file string comparisons
713 637
714 // cf. http://developer.apple.com/mac/library/technotes/tn/tn1150.html#UnicodeSu btleties 638 // cf. http://developer.apple.com/mac/library/technotes/tn/tn1150.html#UnicodeSu btleties
715 // 639 //
716 // "When using CreateTextEncoding to create a text encoding, you should set 640 // "When using CreateTextEncoding to create a text encoding, you should set
717 // the TextEncodingBase to kTextEncodingUnicodeV2_0, set the 641 // the TextEncodingBase to kTextEncodingUnicodeV2_0, set the
718 // TextEncodingVariant to kUnicodeCanonicalDecompVariant, and set the 642 // TextEncodingVariant to kUnicodeCanonicalDecompVariant, and set the
719 // TextEncodingFormat to kUnicode16BitFormat. Using these values ensures that 643 // TextEncodingFormat to kUnicode16BitFormat. Using these values ensures that
720 // the Unicode will be in the same form as on an HFS Plus volume, even as the 644 // the Unicode will be in the same form as on an HFS Plus volume, even as the
721 // Unicode standard evolves." 645 // Unicode standard evolves."
(...skipping 589 matching lines...) Expand 10 before | Expand all | Expand 10 after
1311 #endif 1235 #endif
1312 } 1236 }
1313 1237
1314 #if defined(OS_ANDROID) 1238 #if defined(OS_ANDROID)
1315 bool FilePath::IsContentUri() const { 1239 bool FilePath::IsContentUri() const {
1316 return StartsWithASCII(path_, "content://", false /*case_sensitive*/); 1240 return StartsWithASCII(path_, "content://", false /*case_sensitive*/);
1317 } 1241 }
1318 #endif 1242 #endif
1319 1243
1320 } // namespace base 1244 } // namespace base
OLDNEW
« no previous file with comments | « base/files/file_path.h ('k') | base/files/file_path_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698