Chromium Code Reviews| Index: runtime/bin/directory_android.cc | 
| diff --git a/runtime/bin/directory_posix.cc b/runtime/bin/directory_android.cc | 
| similarity index 93% | 
| copy from runtime/bin/directory_posix.cc | 
| copy to runtime/bin/directory_android.cc | 
| index 7adb80f9156ab2d308131aee2181243b35b85a27..aad6aed0acf988dc701c3a4113812f4fc0cf40be 100644 | 
| --- a/runtime/bin/directory_posix.cc | 
| +++ b/runtime/bin/directory_android.cc | 
| @@ -376,7 +376,23 @@ Directory::ExistsResult Directory::Exists(const char* dir_name) { | 
| char* Directory::Current() { | 
| - return getcwd(NULL, 0); | 
| + // Android's getcwd adheres closely to the POSIX standard. It won't | 
| + // allocate memory. We need to make our own copy. | 
| + | 
| + char buffer[PATH_MAX]; | 
| + if (NULL == getcwd(buffer, PATH_MAX)) { | 
| + return NULL; | 
| + } | 
| + | 
| + size_t length = strlen(buffer); | 
| 
 
cshapiro
2012/08/07 20:56:54
Instead of all of this code, would a single call t
 
jackpal
2012/08/07 21:43:26
Done.
 
 | 
| + char* result = reinterpret_cast<char*>(malloc(length + 1)); | 
| + if (result == NULL) { | 
| + return NULL; | 
| + } | 
| + | 
| + strncpy(result, buffer, length); | 
| + result[length] = '\0'; | 
| + return result; | 
| } | 
| @@ -386,6 +402,21 @@ bool Directory::Create(const char* dir_name) { | 
| return (TEMP_FAILURE_RETRY(mkdir(dir_name, 0777)) == 0); | 
| } | 
| +// Android doesn't currenpty provide mkdtemp | 
| + | 
| 
 
cshapiro
2012/08/07 20:56:54
No need for an empty line here.
 
jackpal
2012/08/07 21:43:26
Done.
 
 | 
| +static char* android_mkdtemp(char* _template) { | 
| 
 
cshapiro
2012/08/07 20:56:54
This should be named Mkdtemp or something else tha
 
jackpal
2012/08/07 21:43:26
Done.
 
 | 
| + printf("mkdtemp %s\n", _template); | 
| + if (mktemp(_template) == NULL) { | 
| + printf("mktemp failed\n"); | 
| + return NULL; | 
| + } | 
| + if (mkdir(_template, 0700) != 0) { | 
| + printf("mkdir failed\n"); | 
| + return NULL; | 
| + } | 
| + printf("Success\n"); | 
| + return _template; | 
| +} | 
| char* Directory::CreateTemp(const char* const_template) { | 
| // Returns a new, unused directory name, modifying the contents of | 
| @@ -406,7 +437,7 @@ char* Directory::CreateTemp(const char* const_template) { | 
| } | 
| char* result; | 
| do { | 
| - result = mkdtemp(path); | 
| + result = android_mkdtemp(path); | 
| 
 
cshapiro
2012/08/07 20:56:54
ditto
 
jackpal
2012/08/07 21:43:26
Done.
 
 | 
| } while (result == NULL && errno == EINTR); | 
| if (result == NULL) { | 
| free(path); | 
| @@ -415,7 +446,6 @@ char* Directory::CreateTemp(const char* const_template) { | 
| return path; | 
| } | 
| 
 
cshapiro
2012/08/07 20:56:54
Definitions are separated by 2 spaces.  You should
 
jackpal
2012/08/07 21:43:26
Done.
 
 | 
| - | 
| bool Directory::Delete(const char* dir_name, bool recursive) { | 
| if (!recursive) { | 
| return (TEMP_FAILURE_RETRY(remove(dir_name)) == 0); |