| Index: base/file_util_posix.cc
|
| ===================================================================
|
| --- base/file_util_posix.cc (revision 25593)
|
| +++ base/file_util_posix.cc (working copy)
|
| @@ -82,6 +82,19 @@
|
|
|
| namespace file_util {
|
|
|
| +#if defined(OS_FREEBSD)
|
| +typedef struct stat stat_wrapper_t;
|
| +static int CallStat(const char *path, stat_wrapper_t *sb) {
|
| + return stat(path, sb);
|
| +}
|
| +#else
|
| +typedef struct stat64 stat_wrapper_t;
|
| +static int CallStat(const char *path, stat_wrapper_t *sb) {
|
| + return stat64(path, sb);
|
| +}
|
| +#endif
|
| +
|
| +
|
| #if defined(GOOGLE_CHROME_BUILD)
|
| static const char* kTempFileName = "com.google.chrome.XXXXXX";
|
| #else
|
| @@ -114,7 +127,7 @@
|
|
|
| DIR* dir = opendir(path.value().c_str());
|
| if (dir) {
|
| -#if !defined(OS_LINUX) && !defined(OS_MACOSX)
|
| +#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_FREEBSD)
|
| #error Depending on the definition of struct dirent, additional space for \
|
| pathname may be needed
|
| #endif
|
| @@ -125,8 +138,8 @@
|
| (strcmp(ent->d_name, "..") == 0))
|
| continue;
|
|
|
| - struct stat64 st;
|
| - int test = stat64(path.Append(ent->d_name).value().c_str(), &st);
|
| + stat_wrapper_t st;
|
| + int test = CallStat(path.Append(ent->d_name).value().c_str(), &st);
|
| if (test != 0) {
|
| LOG(ERROR) << "stat64 failed: " << strerror(errno);
|
| continue;
|
| @@ -160,8 +173,8 @@
|
| // here.
|
| bool Delete(const FilePath& path, bool recursive) {
|
| const char* path_str = path.value().c_str();
|
| - struct stat64 file_info;
|
| - int test = stat64(path_str, &file_info);
|
| + stat_wrapper_t file_info;
|
| + int test = CallStat(path_str, &file_info);
|
| if (test != 0) {
|
| // The Windows version defines this condition as success.
|
| bool ret = (errno == ENOENT || errno == ENOTDIR);
|
| @@ -302,19 +315,19 @@
|
| }
|
|
|
| bool PathExists(const FilePath& path) {
|
| - struct stat64 file_info;
|
| - return (stat64(path.value().c_str(), &file_info) == 0);
|
| + stat_wrapper_t file_info;
|
| + return CallStat(path.value().c_str(), &file_info) == 0;
|
| }
|
|
|
| bool PathIsWritable(const FilePath& path) {
|
| FilePath test_path(path);
|
| - struct stat64 file_info;
|
| - if (stat64(test_path.value().c_str(), &file_info) != 0) {
|
| + stat_wrapper_t file_info;
|
| + if (CallStat(test_path.value().c_str(), &file_info) != 0) {
|
| // If the path doesn't exist, test the parent dir.
|
| test_path = test_path.DirName();
|
| // If the parent dir doesn't exist, then return false (the path is not
|
| // directly writable).
|
| - if (stat64(test_path.value().c_str(), &file_info) != 0)
|
| + if (CallStat(test_path.value().c_str(), &file_info) != 0)
|
| return false;
|
| }
|
| if (S_IWOTH & file_info.st_mode)
|
| @@ -327,8 +340,8 @@
|
| }
|
|
|
| bool DirectoryExists(const FilePath& path) {
|
| - struct stat64 file_info;
|
| - if (stat64(path.value().c_str(), &file_info) == 0)
|
| + stat_wrapper_t file_info;
|
| + if (CallStat(path.value().c_str(), &file_info) == 0)
|
| return S_ISDIR(file_info.st_mode);
|
| return false;
|
| }
|
| @@ -460,8 +473,8 @@
|
| }
|
|
|
| bool GetFileInfo(const FilePath& file_path, FileInfo* results) {
|
| - struct stat64 file_info;
|
| - if (stat64(file_path.value().c_str(), &file_info) != 0)
|
| + stat_wrapper_t file_info;
|
| + if (CallStat(file_path.value().c_str(), &file_info) != 0)
|
| return false;
|
| results->is_directory = S_ISDIR(file_info.st_mode);
|
| results->size = file_info.st_size;
|
| @@ -637,7 +650,7 @@
|
| if (!dir)
|
| return false;
|
|
|
| -#if !defined(OS_LINUX) && !defined(OS_MACOSX)
|
| +#if !defined(OS_LINUX) && !defined(OS_MACOSX) && !defined(OS_FREEBSD)
|
| #error Depending on the definition of struct dirent, additional space for \
|
| pathname may be needed
|
| #endif
|
|
|