added 1 changeset to branch 'refs/remotes/mmadia-github/separate-build-environment' old head: 801d46ec2c481cef601771f271efa0816a4cf081 new head: 9479a5c77407b9406b405fa2cf0ab3d4e72aca30 ---------------------------------------------------------------------------- 9479a5c: Updated src/build/libroot/find_directory.cpp Added some TODO: handle struct stat and stat(). [ Matt Madia <mattmadia@xxxxxxxxx> ] ---------------------------------------------------------------------------- Commit: 9479a5c77407b9406b405fa2cf0ab3d4e72aca30 Author: Matt Madia <mattmadia@xxxxxxxxx> Date: Thu Aug 9 01:49:05 2012 UTC ---------------------------------------------------------------------------- 2 files changed, 27 insertions(+), 22 deletions(-) headers/build/posix_target/sys/target_stat.h | 2 + src/build/libroot/find_directory.cpp | 47 ++++++++++++---------- ---------------------------------------------------------------------------- diff --git a/headers/build/posix_target/sys/target_stat.h b/headers/build/posix_target/sys/target_stat.h index 56768cf..1839fc9 100644 --- a/headers/build/posix_target/sys/target_stat.h +++ b/headers/build/posix_target/sys/target_stat.h @@ -10,6 +10,7 @@ #include <target_time.h> +// TODO: #8730 -- how to handle 'stat'? struct stat { _haiku_build_dev_t st_dev; /* device ID that this file resides on */ _haiku_build_ino_t st_ino; /* this file's serial inode ID */ @@ -114,6 +115,7 @@ _HAIKU_BUILD_DECLARE_FUNCTION(int, chmod, _HAIKU_BUILD_DECLARE_FUNCTION(int, fchmod, (int fd, _haiku_build_mode_t mode)) _HAIKU_BUILD_DECLARE_FUNCTION(int, fchmodat, (int fd, const char *path, _haiku_build_mode_t mode, int flag)) +// TODO: #8730 -- how to handle 'stat'? _HAIKU_BUILD_DECLARE_FUNCTION(int, stat, (const char *path, struct stat *st)) _HAIKU_BUILD_DECLARE_FUNCTION(int, fstat, (int fd, struct stat *st)) _HAIKU_BUILD_DECLARE_FUNCTION(int, lstat, (const char *path, struct stat *st)) diff --git a/src/build/libroot/find_directory.cpp b/src/build/libroot/find_directory.cpp index c04b0b2..bd86032 100644 --- a/src/build/libroot/find_directory.cpp +++ b/src/build/libroot/find_directory.cpp @@ -25,31 +25,32 @@ /*! make dir and its parents if needed */ static int -create_path(const char *path, mode_t mode) +create_path(const char *path, _haiku_build_mode_t mode) { - char buffer[B_PATH_NAME_LENGTH + 1]; + char buffer[_HAIKU_BUILD_B_PATH_NAME_LENGTH + 1]; int pathLength; int i = 0; - if (path == NULL || ((pathLength = strlen(path)) > B_PATH_NAME_LENGTH)) - return EINVAL; + if (path == _HAIKU_BUILD_NULL || ((pathLength = _haiku_build_strlen(path)) > _HAIKU_BUILD_B_PATH_NAME_LENGTH)) + return _HAIKU_BUILD_EINVAL; while (++i < pathLength) { - const char *slash = strchr(&path[i], '/'); + const char *slash = _haiku_build_strchr(&path[i], '/'); + // TODO: #8730 -- how to handle 'stat'? struct stat st; - if (slash == NULL) + if (slash == _HAIKU_BUILD_NULL) i = pathLength; else if (i != slash - path) i = slash - path; else continue; - strlcpy(buffer, path, i + 1); + _haiku_build_strlcpy(buffer, path, i + 1); if (stat(buffer, &st) < 0) { - errno = 0; - if (mkdir(buffer, mode) < 0) - return errno; + _haiku_build_errno = 0; + if (_haiku_build_mkdir(buffer, mode) < 0) + return _haiku_build_errno; } } @@ -57,40 +58,42 @@ create_path(const char *path, mode_t mode) } -status_t -find_directory(directory_which which, dev_t device, bool createIt, - char *returnedPath, int32 pathLength) +_haiku_build_status_t +find_directory(_HAIKU_BUILD_IDENTIFIER(directory_which) which, + _haiku_build_dev_t device, bool createIt, char *returnedPath, + _haiku_build_int32 pathLength) { // we support only the handful of paths we need const char* path; switch (which) { - case B_COMMON_TEMP_DIRECTORY: + case _HAIKU_BUILD_IDENTIFIER(B_COMMON_TEMP_DIRECTORY): path = HAIKU_BUILD_GENERATED_DIRECTORY "/tmp"; break; - case B_COMMON_SETTINGS_DIRECTORY: + case _HAIKU_BUILD_IDENTIFIER(B_COMMON_SETTINGS_DIRECTORY): path = HAIKU_BUILD_GENERATED_DIRECTORY "/common/settings"; break; - case B_COMMON_CACHE_DIRECTORY: + case _HAIKU_BUILD_IDENTIFIER(B_COMMON_CACHE_DIRECTORY): path = HAIKU_BUILD_GENERATED_DIRECTORY "/common/cache"; break; - case B_USER_SETTINGS_DIRECTORY: + case _HAIKU_BUILD_IDENTIFIER(B_USER_SETTINGS_DIRECTORY): path = HAIKU_BUILD_GENERATED_DIRECTORY "/user/settings"; break; - case B_USER_CACHE_DIRECTORY: + case _HAIKU_BUILD_IDENTIFIER(B_USER_CACHE_DIRECTORY): path = HAIKU_BUILD_GENERATED_DIRECTORY "/user/cache"; break; default: - return B_BAD_VALUE; + return _HAIKU_BUILD_B_BAD_VALUE; } // create, if necessary - status_t error = B_OK; + _haiku_build_status_t error = _HAIKU_BUILD_B_OK; + // TODO: #8730 -- how to handle 'stat'? struct stat st; if (createIt && stat(path, &st) < 0) error = create_path(path, 0755); - if (error == B_OK) - strlcpy(returnedPath, path, pathLength); + if (error == _HAIKU_BUILD_B_OK) + _haiku_build_strlcpy(returnedPath, path, pathLength); return error; }