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

Side by Side Diff: base/file_util_posix.cc

Issue 100253002: Don't HANDLE_EINTR(close). Either IGNORE_EINTR(close) or just close. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 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 | Annotate | Revision Log
« no previous file with comments | « base/file_util.h ('k') | base/files/dir_reader_linux.h » ('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/file_util.h" 5 #include "base/file_util.h"
6 6
7 #include <dirent.h> 7 #include <dirent.h>
8 #include <errno.h> 8 #include <errno.h>
9 #include <fcntl.h> 9 #include <fcntl.h>
10 #include <libgen.h> 10 #include <libgen.h>
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after
531 using base::VerifySpecificPathControlledByUser; 531 using base::VerifySpecificPathControlledByUser;
532 532
533 bool CreateTemporaryFile(FilePath* path) { 533 bool CreateTemporaryFile(FilePath* path) {
534 base::ThreadRestrictions::AssertIOAllowed(); // For call to close(). 534 base::ThreadRestrictions::AssertIOAllowed(); // For call to close().
535 FilePath directory; 535 FilePath directory;
536 if (!GetTempDir(&directory)) 536 if (!GetTempDir(&directory))
537 return false; 537 return false;
538 int fd = CreateAndOpenFdForTemporaryFile(directory, path); 538 int fd = CreateAndOpenFdForTemporaryFile(directory, path);
539 if (fd < 0) 539 if (fd < 0)
540 return false; 540 return false;
541 ignore_result(HANDLE_EINTR(close(fd))); 541 close(fd);
542 return true; 542 return true;
543 } 543 }
544 544
545 FILE* CreateAndOpenTemporaryShmemFile(FilePath* path, bool executable) { 545 FILE* CreateAndOpenTemporaryShmemFile(FilePath* path, bool executable) {
546 FilePath directory; 546 FilePath directory;
547 if (!GetShmemTempDir(executable, &directory)) 547 if (!GetShmemTempDir(executable, &directory))
548 return NULL; 548 return NULL;
549 549
550 return CreateAndOpenTemporaryFileInDir(directory, path); 550 return CreateAndOpenTemporaryFileInDir(directory, path);
551 } 551 }
552 552
553 FILE* CreateAndOpenTemporaryFileInDir(const FilePath& dir, FilePath* path) { 553 FILE* CreateAndOpenTemporaryFileInDir(const FilePath& dir, FilePath* path) {
554 int fd = CreateAndOpenFdForTemporaryFile(dir, path); 554 int fd = CreateAndOpenFdForTemporaryFile(dir, path);
555 if (fd < 0) 555 if (fd < 0)
556 return NULL; 556 return NULL;
557 557
558 FILE* file = fdopen(fd, "a+"); 558 FILE* file = fdopen(fd, "a+");
559 if (!file) 559 if (!file)
560 ignore_result(HANDLE_EINTR(close(fd))); 560 close(fd);
561 return file; 561 return file;
562 } 562 }
563 563
564 bool CreateTemporaryFileInDir(const FilePath& dir, FilePath* temp_file) { 564 bool CreateTemporaryFileInDir(const FilePath& dir, FilePath* temp_file) {
565 base::ThreadRestrictions::AssertIOAllowed(); // For call to close(). 565 base::ThreadRestrictions::AssertIOAllowed(); // For call to close().
566 int fd = CreateAndOpenFdForTemporaryFile(dir, temp_file); 566 int fd = CreateAndOpenFdForTemporaryFile(dir, temp_file);
567 return ((fd >= 0) && !HANDLE_EINTR(close(fd))); 567 return ((fd >= 0) && !IGNORE_EINTR(close(fd)));
568 } 568 }
569 569
570 static bool CreateTemporaryDirInDirImpl(const FilePath& base_dir, 570 static bool CreateTemporaryDirInDirImpl(const FilePath& base_dir,
571 const FilePath::StringType& name_tmpl, 571 const FilePath::StringType& name_tmpl,
572 FilePath* new_dir) { 572 FilePath* new_dir) {
573 base::ThreadRestrictions::AssertIOAllowed(); // For call to mkdtemp(). 573 base::ThreadRestrictions::AssertIOAllowed(); // For call to mkdtemp().
574 DCHECK(name_tmpl.find("XXXXXX") != FilePath::StringType::npos) 574 DCHECK(name_tmpl.find("XXXXXX") != FilePath::StringType::npos)
575 << "Directory name template must contain \"XXXXXX\"."; 575 << "Directory name template must contain \"XXXXXX\".";
576 576
577 FilePath sub_dir = base_dir.Append(name_tmpl); 577 FilePath sub_dir = base_dir.Append(name_tmpl);
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
733 return result; 733 return result;
734 } 734 }
735 735
736 int ReadFile(const FilePath& filename, char* data, int size) { 736 int ReadFile(const FilePath& filename, char* data, int size) {
737 base::ThreadRestrictions::AssertIOAllowed(); 737 base::ThreadRestrictions::AssertIOAllowed();
738 int fd = HANDLE_EINTR(open(filename.value().c_str(), O_RDONLY)); 738 int fd = HANDLE_EINTR(open(filename.value().c_str(), O_RDONLY));
739 if (fd < 0) 739 if (fd < 0)
740 return -1; 740 return -1;
741 741
742 ssize_t bytes_read = HANDLE_EINTR(read(fd, data, size)); 742 ssize_t bytes_read = HANDLE_EINTR(read(fd, data, size));
743 if (int ret = HANDLE_EINTR(close(fd)) < 0) 743 if (int ret = IGNORE_EINTR(close(fd)) < 0)
744 return ret; 744 return ret;
745 return bytes_read; 745 return bytes_read;
746 } 746 }
747 747
748 int WriteFile(const FilePath& filename, const char* data, int size) { 748 int WriteFile(const FilePath& filename, const char* data, int size) {
749 base::ThreadRestrictions::AssertIOAllowed(); 749 base::ThreadRestrictions::AssertIOAllowed();
750 int fd = HANDLE_EINTR(creat(filename.value().c_str(), 0666)); 750 int fd = HANDLE_EINTR(creat(filename.value().c_str(), 0666));
751 if (fd < 0) 751 if (fd < 0)
752 return -1; 752 return -1;
753 753
754 int bytes_written = WriteFileDescriptor(fd, data, size); 754 int bytes_written = WriteFileDescriptor(fd, data, size);
755 if (int ret = HANDLE_EINTR(close(fd)) < 0) 755 if (int ret = IGNORE_EINTR(close(fd)) < 0)
756 return ret; 756 return ret;
757 return bytes_written; 757 return bytes_written;
758 } 758 }
759 759
760 int WriteFileDescriptor(const int fd, const char* data, int size) { 760 int WriteFileDescriptor(const int fd, const char* data, int size) {
761 // Allow for partial writes. 761 // Allow for partial writes.
762 ssize_t bytes_written_total = 0; 762 ssize_t bytes_written_total = 0;
763 for (ssize_t bytes_written_partial = 0; bytes_written_total < size; 763 for (ssize_t bytes_written_partial = 0; bytes_written_total < size;
764 bytes_written_total += bytes_written_partial) { 764 bytes_written_total += bytes_written_partial) {
765 bytes_written_partial = 765 bytes_written_partial =
766 HANDLE_EINTR(write(fd, data + bytes_written_total, 766 HANDLE_EINTR(write(fd, data + bytes_written_total,
767 size - bytes_written_total)); 767 size - bytes_written_total));
768 if (bytes_written_partial < 0) 768 if (bytes_written_partial < 0)
769 return -1; 769 return -1;
770 } 770 }
771 771
772 return bytes_written_total; 772 return bytes_written_total;
773 } 773 }
774 774
775 int AppendToFile(const FilePath& filename, const char* data, int size) { 775 int AppendToFile(const FilePath& filename, const char* data, int size) {
776 base::ThreadRestrictions::AssertIOAllowed(); 776 base::ThreadRestrictions::AssertIOAllowed();
777 int fd = HANDLE_EINTR(open(filename.value().c_str(), O_WRONLY | O_APPEND)); 777 int fd = HANDLE_EINTR(open(filename.value().c_str(), O_WRONLY | O_APPEND));
778 if (fd < 0) 778 if (fd < 0)
779 return -1; 779 return -1;
780 780
781 int bytes_written = WriteFileDescriptor(fd, data, size); 781 int bytes_written = WriteFileDescriptor(fd, data, size);
782 if (int ret = HANDLE_EINTR(close(fd)) < 0) 782 if (int ret = IGNORE_EINTR(close(fd)) < 0)
783 return ret; 783 return ret;
784 return bytes_written; 784 return bytes_written;
785 } 785 }
786 786
787 // Gets the current working directory for the process. 787 // Gets the current working directory for the process.
788 bool GetCurrentDirectory(FilePath* dir) { 788 bool GetCurrentDirectory(FilePath* dir) {
789 // getcwd can return ENOENT, which implies it checks against the disk. 789 // getcwd can return ENOENT, which implies it checks against the disk.
790 base::ThreadRestrictions::AssertIOAllowed(); 790 base::ThreadRestrictions::AssertIOAllowed();
791 791
792 char system_buffer[PATH_MAX] = ""; 792 char system_buffer[PATH_MAX] = "";
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
929 #if !defined(OS_MACOSX) 929 #if !defined(OS_MACOSX)
930 // Mac has its own implementation, this is for all other Posix systems. 930 // Mac has its own implementation, this is for all other Posix systems.
931 bool CopyFileUnsafe(const FilePath& from_path, const FilePath& to_path) { 931 bool CopyFileUnsafe(const FilePath& from_path, const FilePath& to_path) {
932 ThreadRestrictions::AssertIOAllowed(); 932 ThreadRestrictions::AssertIOAllowed();
933 int infile = HANDLE_EINTR(open(from_path.value().c_str(), O_RDONLY)); 933 int infile = HANDLE_EINTR(open(from_path.value().c_str(), O_RDONLY));
934 if (infile < 0) 934 if (infile < 0)
935 return false; 935 return false;
936 936
937 int outfile = HANDLE_EINTR(creat(to_path.value().c_str(), 0666)); 937 int outfile = HANDLE_EINTR(creat(to_path.value().c_str(), 0666));
938 if (outfile < 0) { 938 if (outfile < 0) {
939 ignore_result(HANDLE_EINTR(close(infile))); 939 close(infile);
940 return false; 940 return false;
941 } 941 }
942 942
943 const size_t kBufferSize = 32768; 943 const size_t kBufferSize = 32768;
944 std::vector<char> buffer(kBufferSize); 944 std::vector<char> buffer(kBufferSize);
945 bool result = true; 945 bool result = true;
946 946
947 while (result) { 947 while (result) {
948 ssize_t bytes_read = HANDLE_EINTR(read(infile, &buffer[0], buffer.size())); 948 ssize_t bytes_read = HANDLE_EINTR(read(infile, &buffer[0], buffer.size()));
949 if (bytes_read < 0) { 949 if (bytes_read < 0) {
(...skipping 10 matching lines...) Expand all
960 &buffer[bytes_written_per_read], 960 &buffer[bytes_written_per_read],
961 bytes_read - bytes_written_per_read)); 961 bytes_read - bytes_written_per_read));
962 if (bytes_written_partial < 0) { 962 if (bytes_written_partial < 0) {
963 result = false; 963 result = false;
964 break; 964 break;
965 } 965 }
966 bytes_written_per_read += bytes_written_partial; 966 bytes_written_per_read += bytes_written_partial;
967 } while (bytes_written_per_read < bytes_read); 967 } while (bytes_written_per_read < bytes_read);
968 } 968 }
969 969
970 if (HANDLE_EINTR(close(infile)) < 0) 970 if (IGNORE_EINTR(close(infile)) < 0)
971 result = false; 971 result = false;
972 if (HANDLE_EINTR(close(outfile)) < 0) 972 if (IGNORE_EINTR(close(outfile)) < 0)
973 result = false; 973 result = false;
974 974
975 return result; 975 return result;
976 } 976 }
977 #endif // !defined(OS_MACOSX) 977 #endif // !defined(OS_MACOSX)
978 978
979 } // namespace internal 979 } // namespace internal
980 } // namespace base 980 } // namespace base
OLDNEW
« no previous file with comments | « base/file_util.h ('k') | base/files/dir_reader_linux.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698