Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Unified Diff: runtime/bin/directory_win.cc

Issue 11275281: Update dart:io to convert strings between UTF8 and current code page (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address comments Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | runtime/bin/file_win.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: runtime/bin/directory_win.cc
diff --git a/runtime/bin/directory_win.cc b/runtime/bin/directory_win.cc
index 436f9875b091c933e93d29a2f6442a000566d7eb..9508dae6c6ec644aa847f7cf65a4e9e9c58cf67d 100644
--- a/runtime/bin/directory_win.cc
+++ b/runtime/bin/directory_win.cc
@@ -53,7 +53,9 @@ static bool HandleDir(char* dir_name,
if (written != strlen(dir_name)) {
return false;
}
- bool ok = listing->HandleDirectory(path);
+ char* utf8_path = StringUtils::SystemStringToUtf8(path);
+ bool ok = listing->HandleDirectory(utf8_path);
+ free(utf8_path);
if (!ok) return ok;
if (recursive) {
return ListRecursively(path, recursive, listing);
@@ -74,7 +76,10 @@ static bool HandleFile(char* file_name,
if (written != strlen(file_name)) {
return false;
};
- return listing->HandleFile(path);
+ char* utf8_path = StringUtils::SystemStringToUtf8(path);
+ bool ok = listing->HandleFile(utf8_path);
+ free(utf8_path);
+ return ok;
}
@@ -125,7 +130,9 @@ static bool ComputeFullSearchPath(const char* dir_name,
static void PostError(DirectoryListing* listing,
const char* dir_name) {
- listing->HandleError(dir_name);
+ const char* utf8_path = StringUtils::SystemStringToUtf8(dir_name);
+ listing->HandleError(utf8_path);
+ free(const_cast<char*>(utf8_path));
}
@@ -314,44 +321,61 @@ static bool DeleteRecursively(const char* dir_name) {
bool Directory::List(const char* dir_name,
bool recursive,
DirectoryListing* listing) {
- bool completed = ListRecursively(dir_name, recursive, listing);
+ const char* system_name = StringUtils::Utf8ToSystemString(dir_name);
+ bool completed = ListRecursively(system_name, recursive, listing);
+ free(const_cast<char*>(system_name));
return completed;
}
-Directory::ExistsResult Directory::Exists(const char* dir_name) {
+static Directory::ExistsResult ExistsHelper(const char* dir_name) {
DWORD attributes = GetFileAttributes(dir_name);
if (attributes == INVALID_FILE_ATTRIBUTES) {
DWORD last_error = GetLastError();
if (last_error == ERROR_FILE_NOT_FOUND ||
last_error == ERROR_PATH_NOT_FOUND) {
- return DOES_NOT_EXIST;
+ return Directory::DOES_NOT_EXIST;
} else {
// We might not be able to get the file attributes for other
// reasons such as lack of permissions. In that case we do
// not know if the directory exists.
- return UNKNOWN;
+ return Directory::UNKNOWN;
}
}
bool exists = (attributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
- return exists ? EXISTS : DOES_NOT_EXIST;
+ return exists ? Directory::EXISTS : Directory::DOES_NOT_EXIST;
+}
+
+
+Directory::ExistsResult Directory::Exists(const char* dir_name) {
+ const char* system_name = StringUtils::Utf8ToSystemString(dir_name);
+ Directory::ExistsResult result = ExistsHelper(system_name);
+ free(const_cast<char*>(system_name));
+ return result;
}
char* Directory::Current() {
- char* result;
int length = GetCurrentDirectory(0, NULL);
- result = reinterpret_cast<char*>(malloc(length + 1));
- GetCurrentDirectory(length + 1, result);
+ char* current = reinterpret_cast<char*>(malloc(length + 1));
+ GetCurrentDirectory(length + 1, current);
+ char* result = StringUtils::SystemStringToUtf8(current);
+ free(current);
return result;
}
bool Directory::Create(const char* dir_name) {
+ const char* system_name = StringUtils::Utf8ToSystemString(dir_name);
// If the directory already exists and is a directory do not
// attempt to create it again and treat it as a success.
- if (Exists(dir_name) == EXISTS) return true;
- return (CreateDirectory(dir_name, NULL) != 0);
+ if (ExistsHelper(system_name) == EXISTS) {
+ free(const_cast<char*>(system_name));
+ return true;
+ }
+ int create_status = CreateDirectory(system_name, NULL);
+ free(const_cast<char*>(system_name));
+ return (create_status != 0);
}
@@ -369,7 +393,10 @@ char* Directory::CreateTemp(const char* const_template) {
return NULL;
}
} else {
- snprintf(path, MAX_PATH, "%s", const_template);
+ const char* system_template =
+ StringUtils::Utf8ToSystemString(const_template);
+ snprintf(path, MAX_PATH, "%s", system_template);
+ free(const_cast<char*>(system_template));
path_length = strlen(path);
}
// Length of tempdir-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx is 44.
@@ -401,30 +428,44 @@ char* Directory::CreateTemp(const char* const_template) {
free(path);
return NULL;
}
- return path;
+ char* result = StringUtils::SystemStringToUtf8(path);
+ free(path);
+ return result;
}
bool Directory::Delete(const char* dir_name, bool recursive) {
+ bool result = false;
+ const char* system_dir_name =
+ StringUtils::Utf8ToSystemString(dir_name);
if (!recursive) {
- return (RemoveDirectory(dir_name) != 0);
+ result = (RemoveDirectory(system_dir_name) != 0);
} else {
- return DeleteRecursively(dir_name);
+ result = DeleteRecursively(system_dir_name);
}
+ free(const_cast<char*>(system_dir_name));
+ return result;
}
bool Directory::Rename(const char* path, const char* new_path) {
- ExistsResult exists = Exists(path);
+ const char* system_path = StringUtils::Utf8ToSystemString(path);
+ const char* system_new_path =
+ StringUtils::Utf8ToSystemString(new_path);
+ ExistsResult exists = ExistsHelper(system_path);
if (exists != EXISTS) return false;
- ExistsResult new_exists = Exists(new_path);
+ ExistsResult new_exists = ExistsHelper(system_new_path);
// MoveFile does not allow replacing exising directories. Therefore,
// if the new_path is currently a directory we need to delete it
// first.
if (new_exists == EXISTS) {
- bool success = DeleteRecursively(new_path);
+ bool success = DeleteRecursively(system_new_path);
if (!success) return false;
}
DWORD flags = MOVEFILE_WRITE_THROUGH;
- return (MoveFileEx(path, new_path, flags) != 0);
+ int move_status =
+ MoveFileEx(system_path, system_new_path, flags);
+ free(const_cast<char*>(system_path));
+ free(const_cast<char*>(system_new_path));
+ return (move_status != 0);
}
« no previous file with comments | « no previous file | runtime/bin/file_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698