| 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); | 
|  |