зеркало из https://github.com/mozilla/gecko-dev.git
Bug 785026 - Merge file_util_linux.cc into file_util_posix.cc. r=cjones
This commit is contained in:
Родитель
ba185448ca
Коммит
f9928b922f
|
@ -215,7 +215,6 @@ ifdef OS_LINUX # {
|
|||
CPPSRCS += \
|
||||
atomicops_internals_x86_gcc.cc \
|
||||
base_paths_linux.cc \
|
||||
file_util_linux.cc \
|
||||
file_version_info_linux.cc \
|
||||
idle_timer_none.cc \
|
||||
process_util_linux.cc \
|
||||
|
|
|
@ -1,85 +0,0 @@
|
|||
// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style license that can be
|
||||
// found in the LICENSE file.
|
||||
|
||||
#include "base/file_util.h"
|
||||
|
||||
#include <fcntl.h>
|
||||
#if defined(ANDROID) || defined(OS_POSIX)
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "base/eintr_wrapper.h"
|
||||
#include "base/file_path.h"
|
||||
#include "base/string_util.h"
|
||||
|
||||
namespace file_util {
|
||||
|
||||
bool GetTempDir(FilePath* path) {
|
||||
const char* tmp = getenv("TMPDIR");
|
||||
if (tmp)
|
||||
*path = FilePath(tmp);
|
||||
else
|
||||
*path = FilePath("/tmp");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GetShmemTempDir(FilePath* path) {
|
||||
#ifdef ANDROID
|
||||
return GetTempDir(path);
|
||||
#else
|
||||
*path = FilePath("/dev/shm");
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CopyFile(const FilePath& from_path, const FilePath& to_path) {
|
||||
int infile = open(from_path.value().c_str(), O_RDONLY);
|
||||
if (infile < 0)
|
||||
return false;
|
||||
|
||||
int outfile = creat(to_path.value().c_str(), 0666);
|
||||
if (outfile < 0) {
|
||||
close(infile);
|
||||
return false;
|
||||
}
|
||||
|
||||
const size_t kBufferSize = 32768;
|
||||
std::vector<char> buffer(kBufferSize);
|
||||
bool result = true;
|
||||
|
||||
while (result) {
|
||||
ssize_t bytes_read = HANDLE_EINTR(read(infile, &buffer[0], buffer.size()));
|
||||
if (bytes_read < 0) {
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
if (bytes_read == 0)
|
||||
break;
|
||||
// Allow for partial writes
|
||||
ssize_t bytes_written_per_read = 0;
|
||||
do {
|
||||
ssize_t bytes_written_partial = HANDLE_EINTR(write(
|
||||
outfile,
|
||||
&buffer[bytes_written_per_read],
|
||||
bytes_read - bytes_written_per_read));
|
||||
if (bytes_written_partial < 0) {
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
bytes_written_per_read += bytes_written_partial;
|
||||
} while (bytes_written_per_read < bytes_read);
|
||||
}
|
||||
|
||||
if (HANDLE_EINTR(close(infile)) < 0)
|
||||
result = false;
|
||||
if (HANDLE_EINTR(close(outfile)) < 0)
|
||||
result = false;
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
} // namespace file_util
|
|
@ -22,6 +22,8 @@
|
|||
#include <unistd.h>
|
||||
|
||||
#include <fstream>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "base/basictypes.h"
|
||||
#include "base/eintr_wrapper.h"
|
||||
|
@ -519,6 +521,72 @@ bool SetCurrentDirectory(const FilePath& path) {
|
|||
return !ret;
|
||||
}
|
||||
|
||||
#if !defined(OS_MACOSX)
|
||||
bool GetTempDir(FilePath* path) {
|
||||
const char* tmp = getenv("TMPDIR");
|
||||
if (tmp)
|
||||
*path = FilePath(tmp);
|
||||
else
|
||||
*path = FilePath("/tmp");
|
||||
return true;
|
||||
}
|
||||
|
||||
bool GetShmemTempDir(FilePath* path) {
|
||||
#if defined(OS_LINUX) && !defined(ANDROID)
|
||||
*path = FilePath("/dev/shm");
|
||||
return true;
|
||||
#else
|
||||
return GetTempDir(path);
|
||||
#endif
|
||||
}
|
||||
|
||||
bool CopyFile(const FilePath& from_path, const FilePath& to_path) {
|
||||
int infile = open(from_path.value().c_str(), O_RDONLY);
|
||||
if (infile < 0)
|
||||
return false;
|
||||
|
||||
int outfile = creat(to_path.value().c_str(), 0666);
|
||||
if (outfile < 0) {
|
||||
close(infile);
|
||||
return false;
|
||||
}
|
||||
|
||||
const size_t kBufferSize = 32768;
|
||||
std::vector<char> buffer(kBufferSize);
|
||||
bool result = true;
|
||||
|
||||
while (result) {
|
||||
ssize_t bytes_read = HANDLE_EINTR(read(infile, &buffer[0], buffer.size()));
|
||||
if (bytes_read < 0) {
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
if (bytes_read == 0)
|
||||
break;
|
||||
// Allow for partial writes
|
||||
ssize_t bytes_written_per_read = 0;
|
||||
do {
|
||||
ssize_t bytes_written_partial = HANDLE_EINTR(write(
|
||||
outfile,
|
||||
&buffer[bytes_written_per_read],
|
||||
bytes_read - bytes_written_per_read));
|
||||
if (bytes_written_partial < 0) {
|
||||
result = false;
|
||||
break;
|
||||
}
|
||||
bytes_written_per_read += bytes_written_partial;
|
||||
} while (bytes_written_per_read < bytes_read);
|
||||
}
|
||||
|
||||
if (HANDLE_EINTR(close(infile)) < 0)
|
||||
result = false;
|
||||
if (HANDLE_EINTR(close(outfile)) < 0)
|
||||
result = false;
|
||||
|
||||
return result;
|
||||
}
|
||||
#endif // !defined(OS_MACOSX)
|
||||
|
||||
///////////////////////////////////////////////
|
||||
// FileEnumerator
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче