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

Side by Side Diff: base/file_util_posix.cc

Issue 204683002: Make the shmem-specific functions in file_util.h POSIX-only. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « base/file_util.h ('k') | base/file_util_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/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 445 matching lines...) Expand 10 before | Expand all | Expand 10 after
456 #if defined(OS_ANDROID) 456 #if defined(OS_ANDROID)
457 return PathService::Get(base::DIR_CACHE, path); 457 return PathService::Get(base::DIR_CACHE, path);
458 #else 458 #else
459 *path = FilePath("/tmp"); 459 *path = FilePath("/tmp");
460 #endif 460 #endif
461 } 461 }
462 return true; 462 return true;
463 } 463 }
464 #endif // !defined(OS_MACOSX) 464 #endif // !defined(OS_MACOSX)
465 465
466 #if !defined(OS_MACOSX) && !defined(OS_ANDROID)
467 // This is implemented in file_util_mac.mm and file_util_android.cc for those
468 // platforms.
469 bool GetShmemTempDir(bool executable, FilePath* path) {
470 #if defined(OS_LINUX)
471 bool use_dev_shm = true;
472 if (executable) {
473 static const bool s_dev_shm_executable = DetermineDevShmExecutable();
474 use_dev_shm = s_dev_shm_executable;
475 }
476 if (use_dev_shm) {
477 *path = FilePath("/dev/shm");
478 return true;
479 }
480 #endif
481 return GetTempDir(path);
482 }
483 #endif // !defined(OS_MACOSX) && !defined(OS_ANDROID)
484
485 #if !defined(OS_MACOSX) // Mac implementation is in file_util_mac.mm. 466 #if !defined(OS_MACOSX) // Mac implementation is in file_util_mac.mm.
486 FilePath GetHomeDir() { 467 FilePath GetHomeDir() {
487 #if defined(OS_CHROMEOS) 468 #if defined(OS_CHROMEOS)
488 if (SysInfo::IsRunningOnChromeOS()) 469 if (SysInfo::IsRunningOnChromeOS())
489 return FilePath("/home/chronos/user"); 470 return FilePath("/home/chronos/user");
490 #endif 471 #endif
491 472
492 const char* home_dir = getenv("HOME"); 473 const char* home_dir = getenv("HOME");
493 if (home_dir && home_dir[0]) 474 if (home_dir && home_dir[0])
494 return FilePath(home_dir); 475 return FilePath(home_dir);
(...skipping 26 matching lines...) Expand all
521 FilePath directory; 502 FilePath directory;
522 if (!GetTempDir(&directory)) 503 if (!GetTempDir(&directory))
523 return false; 504 return false;
524 int fd = CreateAndOpenFdForTemporaryFile(directory, path); 505 int fd = CreateAndOpenFdForTemporaryFile(directory, path);
525 if (fd < 0) 506 if (fd < 0)
526 return false; 507 return false;
527 close(fd); 508 close(fd);
528 return true; 509 return true;
529 } 510 }
530 511
531 FILE* CreateAndOpenTemporaryShmemFile(FilePath* path, bool executable) {
532 FilePath directory;
533 if (!GetShmemTempDir(executable, &directory))
534 return NULL;
535
536 return CreateAndOpenTemporaryFileInDir(directory, path);
537 }
538
539 FILE* CreateAndOpenTemporaryFileInDir(const FilePath& dir, FilePath* path) { 512 FILE* CreateAndOpenTemporaryFileInDir(const FilePath& dir, FilePath* path) {
540 int fd = CreateAndOpenFdForTemporaryFile(dir, path); 513 int fd = CreateAndOpenFdForTemporaryFile(dir, path);
541 if (fd < 0) 514 if (fd < 0)
542 return NULL; 515 return NULL;
543 516
544 FILE* file = fdopen(fd, "a+"); 517 FILE* file = fdopen(fd, "a+");
545 if (!file) 518 if (!file)
546 close(fd); 519 close(fd);
547 return file; 520 return file;
548 } 521 }
(...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after
840 return VerifyPathControlledByUser( 813 return VerifyPathControlledByUser(
841 kFileSystemRoot, path, kRootUid, allowed_group_ids); 814 kFileSystemRoot, path, kRootUid, allowed_group_ids);
842 } 815 }
843 #endif // defined(OS_MACOSX) && !defined(OS_IOS) 816 #endif // defined(OS_MACOSX) && !defined(OS_IOS)
844 817
845 int GetMaximumPathComponentLength(const FilePath& path) { 818 int GetMaximumPathComponentLength(const FilePath& path) {
846 ThreadRestrictions::AssertIOAllowed(); 819 ThreadRestrictions::AssertIOAllowed();
847 return pathconf(path.value().c_str(), _PC_NAME_MAX); 820 return pathconf(path.value().c_str(), _PC_NAME_MAX);
848 } 821 }
849 822
823 #if !defined(OS_MACOSX) && !defined(OS_ANDROID)
824 // This is implemented in file_util_mac.mm and file_util_android.cc for those
825 // platforms.
826 bool GetShmemTempDir(bool executable, FilePath* path) {
827 #if defined(OS_LINUX)
828 bool use_dev_shm = true;
829 if (executable) {
830 static const bool s_dev_shm_executable = DetermineDevShmExecutable();
831 use_dev_shm = s_dev_shm_executable;
832 }
833 if (use_dev_shm) {
834 *path = FilePath("/dev/shm");
835 return true;
836 }
837 #endif
838 return GetTempDir(path);
839 }
840 #endif // !defined(OS_MACOSX) && !defined(OS_ANDROID)
841
842 FILE* CreateAndOpenTemporaryShmemFile(FilePath* path, bool executable) {
843 FilePath directory;
844 if (!GetShmemTempDir(executable, &directory))
845 return NULL;
846
847 return CreateAndOpenTemporaryFileInDir(directory, path);
848 }
849
850 // ----------------------------------------------------------------------------- 850 // -----------------------------------------------------------------------------
851 851
852 namespace internal { 852 namespace internal {
853 853
854 bool MoveUnsafe(const FilePath& from_path, const FilePath& to_path) { 854 bool MoveUnsafe(const FilePath& from_path, const FilePath& to_path) {
855 ThreadRestrictions::AssertIOAllowed(); 855 ThreadRestrictions::AssertIOAllowed();
856 // Windows compatibility: if to_path exists, from_path and to_path 856 // Windows compatibility: if to_path exists, from_path and to_path
857 // must be the same type, either both files, or both directories. 857 // must be the same type, either both files, or both directories.
858 stat_wrapper_t to_file_info; 858 stat_wrapper_t to_file_info;
859 if (CallStat(to_path.value().c_str(), &to_file_info) == 0) { 859 if (CallStat(to_path.value().c_str(), &to_file_info) == 0) {
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 result = false; 921 result = false;
922 if (IGNORE_EINTR(close(outfile)) < 0) 922 if (IGNORE_EINTR(close(outfile)) < 0)
923 result = false; 923 result = false;
924 924
925 return result; 925 return result;
926 } 926 }
927 #endif // !defined(OS_MACOSX) 927 #endif // !defined(OS_MACOSX)
928 928
929 } // namespace internal 929 } // namespace internal
930 } // namespace base 930 } // namespace base
OLDNEW
« no previous file with comments | « base/file_util.h ('k') | base/file_util_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698