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

Side by Side Diff: base/file_util_posix.cc

Issue 1582022: Unpack extensions inside chrome's directory. (Closed)
Patch Set: Final rebase. Created 10 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 | « 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 <fnmatch.h> 10 #include <fnmatch.h>
(...skipping 383 matching lines...) Expand 10 before | Expand all | Expand 10 after
394 return NULL; 394 return NULL;
395 395
396 return fdopen(fd, "a+"); 396 return fdopen(fd, "a+");
397 } 397 }
398 398
399 bool CreateTemporaryFileInDir(const FilePath& dir, FilePath* temp_file) { 399 bool CreateTemporaryFileInDir(const FilePath& dir, FilePath* temp_file) {
400 int fd = CreateAndOpenFdForTemporaryFile(dir, temp_file); 400 int fd = CreateAndOpenFdForTemporaryFile(dir, temp_file);
401 return ((fd >= 0) && !close(fd)); 401 return ((fd >= 0) && !close(fd));
402 } 402 }
403 403
404 static bool CreateTemporaryDirInDirImpl(const FilePath& base_dir,
405 const FilePath::StringType& name_tmpl,
406 FilePath* new_dir) {
407 CHECK(name_tmpl.find("XXXXXX") != FilePath::StringType::npos)
408 << "Directory name template must contain \"XXXXXX\".";
409
410 FilePath sub_dir = base_dir.Append(name_tmpl);
411 std::string sub_dir_string = sub_dir.value();
412
413 // this should be OK since mkdtemp just replaces characters in place
414 char* buffer = const_cast<char*>(sub_dir_string.c_str());
415 char* dtemp = mkdtemp(buffer);
416 if (!dtemp)
417 return false;
418 *new_dir = FilePath(dtemp);
419 return true;
420 }
421
422 bool CreateTemporaryDirInDir(const FilePath& base_dir,
423 const FilePath::StringType& prefix,
424 FilePath* new_dir) {
425 FilePath::StringType mkdtemp_template = prefix;
426 mkdtemp_template.append(FILE_PATH_LITERAL("XXXXXX"));
427 return CreateTemporaryDirInDirImpl(base_dir, mkdtemp_template, new_dir);
428 }
429
404 bool CreateNewTempDirectory(const FilePath::StringType& prefix, 430 bool CreateNewTempDirectory(const FilePath::StringType& prefix,
405 FilePath* new_temp_path) { 431 FilePath* new_temp_path) {
406 FilePath tmpdir; 432 FilePath tmpdir;
407 if (!GetTempDir(&tmpdir)) 433 if (!GetTempDir(&tmpdir))
408 return false; 434 return false;
409 tmpdir = tmpdir.Append(kTempFileName); 435
410 std::string tmpdir_string = tmpdir.value(); 436 return CreateTemporaryDirInDirImpl(tmpdir, kTempFileName, new_temp_path);
411 // this should be OK since mkdtemp just replaces characters in place
412 char* buffer = const_cast<char*>(tmpdir_string.c_str());
413 char* dtemp = mkdtemp(buffer);
414 if (!dtemp)
415 return false;
416 *new_temp_path = FilePath(dtemp);
417 return true;
418 } 437 }
419 438
420 bool CreateDirectory(const FilePath& full_path) { 439 bool CreateDirectory(const FilePath& full_path) {
421 std::vector<FilePath> subpaths; 440 std::vector<FilePath> subpaths;
422 441
423 // Collect a list of all parent directories. 442 // Collect a list of all parent directories.
424 FilePath last_path = full_path; 443 FilePath last_path = full_path;
425 subpaths.push_back(full_path); 444 subpaths.push_back(full_path);
426 for (FilePath path = full_path.DirName(); 445 for (FilePath path = full_path.DirName();
427 path.value() != last_path.value(); path = path.DirName()) { 446 path.value() != last_path.value(); path = path.DirName()) {
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 if (HANDLE_EINTR(close(infile)) < 0) 808 if (HANDLE_EINTR(close(infile)) < 0)
790 result = false; 809 result = false;
791 if (HANDLE_EINTR(close(outfile)) < 0) 810 if (HANDLE_EINTR(close(outfile)) < 0)
792 result = false; 811 result = false;
793 812
794 return result; 813 return result;
795 } 814 }
796 #endif // defined(OS_MACOSX) 815 #endif // defined(OS_MACOSX)
797 816
798 } // namespace file_util 817 } // namespace file_util
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