| Index: runtime/bin/file_macos.cc
|
| diff --git a/runtime/bin/file_macos.cc b/runtime/bin/file_macos.cc
|
| index 9b7093daff51e3fe6336ad217173c90e1ee9c5e3..73f86a2e24e7f0282cd55123d651798ce49d5263 100644
|
| --- a/runtime/bin/file_macos.cc
|
| +++ b/runtime/bin/file_macos.cc
|
| @@ -106,6 +106,14 @@ off_t File::Length() {
|
|
|
|
|
| File* File::Open(const char* name, FileOpenMode mode) {
|
| + // Report errors for non-regular files.
|
| + struct stat st;
|
| + if (TEMP_FAILURE_RETRY(stat(name, &st)) == 0) {
|
| + if (!S_ISREG(st.st_mode)) {
|
| + errno = (S_ISDIR(st.st_mode)) ? EISDIR : ENOENT;
|
| + return NULL
|
| + }
|
| + }
|
| int flags = O_RDONLY;
|
| if ((mode & kWrite) != 0) {
|
| flags = (O_RDWR | O_CREAT);
|
| @@ -185,6 +193,16 @@ char* File::GetCanonicalPath(const char* pathname) {
|
|
|
|
|
| char* File::GetContainingDirectory(char* pathname) {
|
| + // Report errors for non-regular files.
|
| + struct stat st;
|
| + if (TEMP_FAILURE_RETRY(stat(pathname, &st)) == 0) {
|
| + if (!S_ISREG(st.st_mode)) {
|
| + errno = (S_ISDIR(st.st_mode)) ? EISDIR : ENOENT;
|
| + return NULL;
|
| + }
|
| + } else {
|
| + return NULL;
|
| + }
|
| char* path = NULL;
|
| do {
|
| path = dirname(pathname);
|
|
|