| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 37 | 37 |
| 38 #if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) | 38 #if defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) |
| 39 #include <ctype.h> | 39 #include <ctype.h> |
| 40 #include <algorithm> | 40 #include <algorithm> |
| 41 #endif | 41 #endif |
| 42 | 42 |
| 43 #if defined(__native_client__) && !defined(__GLIBC__) | 43 #if defined(__native_client__) && !defined(__GLIBC__) |
| 44 #include <sys/syslimits.h> | 44 #include <sys/syslimits.h> |
| 45 #endif | 45 #endif |
| 46 | 46 |
| 47 #include "webrtc/base/arraysize.h" |
| 47 #include "webrtc/base/fileutils.h" | 48 #include "webrtc/base/fileutils.h" |
| 48 #include "webrtc/base/pathutils.h" | 49 #include "webrtc/base/pathutils.h" |
| 49 #include "webrtc/base/stream.h" | 50 #include "webrtc/base/stream.h" |
| 50 #include "webrtc/base/stringutils.h" | 51 #include "webrtc/base/stringutils.h" |
| 51 | 52 |
| 52 #if defined(WEBRTC_IOS) | 53 #if defined(WEBRTC_IOS) |
| 53 // Defined in iosfilesystem.mm. No header file to discourage use | 54 // Defined in iosfilesystem.mm. No header file to discourage use |
| 54 // elsewhere; other places should use GetApp{Data,Temp}Folder() in | 55 // elsewhere; other places should use GetApp{Data,Temp}Folder() in |
| 55 // this file. Don't copy/paste. I mean it. | 56 // this file. Don't copy/paste. I mean it. |
| 56 char* IOSDataDirectory(); | 57 char* IOSDataDirectory(); |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 } | 170 } |
| 170 | 171 |
| 171 bool UnixFilesystem::GetTemporaryFolder(Pathname &pathname, bool create, | 172 bool UnixFilesystem::GetTemporaryFolder(Pathname &pathname, bool create, |
| 172 const std::string *append) { | 173 const std::string *append) { |
| 173 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) | 174 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) |
| 174 FSRef fr; | 175 FSRef fr; |
| 175 if (0 != FSFindFolder(kOnAppropriateDisk, kTemporaryFolderType, | 176 if (0 != FSFindFolder(kOnAppropriateDisk, kTemporaryFolderType, |
| 176 kCreateFolder, &fr)) | 177 kCreateFolder, &fr)) |
| 177 return false; | 178 return false; |
| 178 unsigned char buffer[NAME_MAX+1]; | 179 unsigned char buffer[NAME_MAX+1]; |
| 179 if (0 != FSRefMakePath(&fr, buffer, ARRAY_SIZE(buffer))) | 180 if (0 != FSRefMakePath(&fr, buffer, arraysize(buffer))) |
| 180 return false; | 181 return false; |
| 181 pathname.SetPathname(reinterpret_cast<char*>(buffer), ""); | 182 pathname.SetPathname(reinterpret_cast<char*>(buffer), ""); |
| 182 #elif defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) | 183 #elif defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) |
| 183 ASSERT(provided_app_temp_folder_ != NULL); | 184 ASSERT(provided_app_temp_folder_ != NULL); |
| 184 pathname.SetPathname(provided_app_temp_folder_, ""); | 185 pathname.SetPathname(provided_app_temp_folder_, ""); |
| 185 #else // !WEBRTC_MAC || WEBRTC_IOS && !WEBRTC_ANDROID | 186 #else // !WEBRTC_MAC || WEBRTC_IOS && !WEBRTC_ANDROID |
| 186 if (const char* tmpdir = getenv("TMPDIR")) { | 187 if (const char* tmpdir = getenv("TMPDIR")) { |
| 187 pathname.SetPathname(tmpdir, ""); | 188 pathname.SetPathname(tmpdir, ""); |
| 188 } else if (const char* tmp = getenv("TMP")) { | 189 } else if (const char* tmp = getenv("TMP")) { |
| 189 pathname.SetPathname(tmp, ""); | 190 pathname.SetPathname(tmp, ""); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 296 const char* const kTempPrefixes[] = { | 297 const char* const kTempPrefixes[] = { |
| 297 #if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) | 298 #if defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) |
| 298 provided_app_temp_folder_, | 299 provided_app_temp_folder_, |
| 299 #else | 300 #else |
| 300 "/tmp/", "/var/tmp/", | 301 "/tmp/", "/var/tmp/", |
| 301 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) | 302 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) |
| 302 "/private/tmp/", "/private/var/tmp/", "/private/var/folders/", | 303 "/private/tmp/", "/private/var/tmp/", "/private/var/folders/", |
| 303 #endif // WEBRTC_MAC && !defined(WEBRTC_IOS) | 304 #endif // WEBRTC_MAC && !defined(WEBRTC_IOS) |
| 304 #endif // WEBRTC_ANDROID || WEBRTC_IOS | 305 #endif // WEBRTC_ANDROID || WEBRTC_IOS |
| 305 }; | 306 }; |
| 306 for (size_t i = 0; i < ARRAY_SIZE(kTempPrefixes); ++i) { | 307 for (size_t i = 0; i < arraysize(kTempPrefixes); ++i) { |
| 307 if (0 == strncmp(pathname.pathname().c_str(), kTempPrefixes[i], | 308 if (0 == strncmp(pathname.pathname().c_str(), kTempPrefixes[i], |
| 308 strlen(kTempPrefixes[i]))) | 309 strlen(kTempPrefixes[i]))) |
| 309 return true; | 310 return true; |
| 310 } | 311 } |
| 311 return false; | 312 return false; |
| 312 } | 313 } |
| 313 | 314 |
| 314 bool UnixFilesystem::IsFile(const Pathname& pathname) { | 315 bool UnixFilesystem::IsFile(const Pathname& pathname) { |
| 315 struct stat st; | 316 struct stat st; |
| 316 int res = ::stat(pathname.pathname().c_str(), &st); | 317 int res = ::stat(pathname.pathname().c_str(), &st); |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 370 if (success) | 371 if (success) |
| 371 path->SetPathname(path8); | 372 path->SetPathname(path8); |
| 372 return success; | 373 return success; |
| 373 #elif defined(__native_client__) | 374 #elif defined(__native_client__) |
| 374 return false; | 375 return false; |
| 375 #elif IOS | 376 #elif IOS |
| 376 IOSAppName(path); | 377 IOSAppName(path); |
| 377 return true; | 378 return true; |
| 378 #else // WEBRTC_MAC && !defined(WEBRTC_IOS) | 379 #else // WEBRTC_MAC && !defined(WEBRTC_IOS) |
| 379 char buffer[PATH_MAX + 2]; | 380 char buffer[PATH_MAX + 2]; |
| 380 ssize_t len = readlink("/proc/self/exe", buffer, ARRAY_SIZE(buffer) - 1); | 381 ssize_t len = readlink("/proc/self/exe", buffer, arraysize(buffer) - 1); |
| 381 if ((len <= 0) || (len == PATH_MAX + 1)) | 382 if ((len <= 0) || (len == PATH_MAX + 1)) |
| 382 return false; | 383 return false; |
| 383 buffer[len] = '\0'; | 384 buffer[len] = '\0'; |
| 384 path->SetPathname(buffer); | 385 path->SetPathname(buffer); |
| 385 return true; | 386 return true; |
| 386 #endif // WEBRTC_MAC && !defined(WEBRTC_IOS) | 387 #endif // WEBRTC_MAC && !defined(WEBRTC_IOS) |
| 387 } | 388 } |
| 388 | 389 |
| 389 bool UnixFilesystem::GetAppDataFolder(Pathname* path, bool per_user) { | 390 bool UnixFilesystem::GetAppDataFolder(Pathname* path, bool per_user) { |
| 390 ASSERT(!organization_name_.empty()); | 391 ASSERT(!organization_name_.empty()); |
| 391 ASSERT(!application_name_.empty()); | 392 ASSERT(!application_name_.empty()); |
| 392 | 393 |
| 393 // First get the base directory for app data. | 394 // First get the base directory for app data. |
| 394 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) | 395 #if defined(WEBRTC_MAC) && !defined(WEBRTC_IOS) |
| 395 if (per_user) { | 396 if (per_user) { |
| 396 // Use ~/Library/Application Support/<orgname>/<appname>/ | 397 // Use ~/Library/Application Support/<orgname>/<appname>/ |
| 397 FSRef fr; | 398 FSRef fr; |
| 398 if (0 != FSFindFolder(kUserDomain, kApplicationSupportFolderType, | 399 if (0 != FSFindFolder(kUserDomain, kApplicationSupportFolderType, |
| 399 kCreateFolder, &fr)) | 400 kCreateFolder, &fr)) |
| 400 return false; | 401 return false; |
| 401 unsigned char buffer[NAME_MAX+1]; | 402 unsigned char buffer[NAME_MAX+1]; |
| 402 if (0 != FSRefMakePath(&fr, buffer, ARRAY_SIZE(buffer))) | 403 if (0 != FSRefMakePath(&fr, buffer, arraysize(buffer))) |
| 403 return false; | 404 return false; |
| 404 path->SetPathname(reinterpret_cast<char*>(buffer), ""); | 405 path->SetPathname(reinterpret_cast<char*>(buffer), ""); |
| 405 } else { | 406 } else { |
| 406 // TODO | 407 // TODO |
| 407 return false; | 408 return false; |
| 408 } | 409 } |
| 409 #elif defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) // && !WEBRTC_MAC || WEBRT
C_IOS | 410 #elif defined(WEBRTC_ANDROID) || defined(WEBRTC_IOS) // && !WEBRTC_MAC || WEBRT
C_IOS |
| 410 ASSERT(provided_app_data_folder_ != NULL); | 411 ASSERT(provided_app_data_folder_ != NULL); |
| 411 path->SetPathname(provided_app_data_folder_, ""); | 412 path->SetPathname(provided_app_data_folder_, ""); |
| 412 #elif defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) // && !WEBRTC_MAC && !W
EBRTC_IOS && !WEBRTC_ANDROID | 413 #elif defined(WEBRTC_LINUX) && !defined(WEBRTC_ANDROID) // && !WEBRTC_MAC && !W
EBRTC_IOS && !WEBRTC_ANDROID |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 480 #else | 481 #else |
| 481 ASSERT(!application_name_.empty()); | 482 ASSERT(!application_name_.empty()); |
| 482 // TODO: Consider whether we are worried about thread safety. | 483 // TODO: Consider whether we are worried about thread safety. |
| 483 if (app_temp_path_ != NULL && strlen(app_temp_path_) > 0) { | 484 if (app_temp_path_ != NULL && strlen(app_temp_path_) > 0) { |
| 484 path->SetPathname(app_temp_path_); | 485 path->SetPathname(app_temp_path_); |
| 485 return true; | 486 return true; |
| 486 } | 487 } |
| 487 | 488 |
| 488 // Create a random directory as /tmp/<appname>-<pid>-<timestamp> | 489 // Create a random directory as /tmp/<appname>-<pid>-<timestamp> |
| 489 char buffer[128]; | 490 char buffer[128]; |
| 490 sprintfn(buffer, ARRAY_SIZE(buffer), "-%d-%d", | 491 sprintfn(buffer, arraysize(buffer), "-%d-%d", |
| 491 static_cast<int>(getpid()), | 492 static_cast<int>(getpid()), |
| 492 static_cast<int>(time(0))); | 493 static_cast<int>(time(0))); |
| 493 std::string folder(application_name_); | 494 std::string folder(application_name_); |
| 494 folder.append(buffer); | 495 folder.append(buffer); |
| 495 if (!GetTemporaryFolder(*path, true, &folder)) | 496 if (!GetTemporaryFolder(*path, true, &folder)) |
| 496 return false; | 497 return false; |
| 497 | 498 |
| 498 delete [] app_temp_path_; | 499 delete [] app_temp_path_; |
| 499 app_temp_path_ = CopyString(path->pathname()); | 500 app_temp_path_ = CopyString(path->pathname()); |
| 500 // TODO: atexit(DeleteFolderAndContents(app_temp_path_)); | 501 // TODO: atexit(DeleteFolderAndContents(app_temp_path_)); |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 564 | 565 |
| 565 } // namespace rtc | 566 } // namespace rtc |
| 566 | 567 |
| 567 #if defined(__native_client__) | 568 #if defined(__native_client__) |
| 568 extern "C" int __attribute__((weak)) | 569 extern "C" int __attribute__((weak)) |
| 569 link(const char* oldpath, const char* newpath) { | 570 link(const char* oldpath, const char* newpath) { |
| 570 errno = EACCES; | 571 errno = EACCES; |
| 571 return -1; | 572 return -1; |
| 572 } | 573 } |
| 573 #endif | 574 #endif |
| OLD | NEW |