Index: runtime/bin/directory.cc |
diff --git a/runtime/bin/directory.cc b/runtime/bin/directory.cc |
index 3b969935bb61cccf191e4862b5fcf15902141009..8b1e57c31a0b3bfaaa32aa6594c870b952d64040 100644 |
--- a/runtime/bin/directory.cc |
+++ b/runtime/bin/directory.cc |
@@ -38,9 +38,7 @@ void FUNCTION_NAME(Directory_Exists)(Dart_NativeArguments args) { |
Dart_SetReturnValue(args, Dart_NewInteger(kDoesNotExist)); |
} else { |
Dart_Handle err = DartUtils::NewDartOSError(); |
- if (Dart_IsError(err)) { |
- Dart_PropagateError(err); |
- } |
+ if (Dart_IsError(err)) Dart_PropagateError(err); |
Dart_SetReturnValue(args, err); |
} |
Dart_ExitScope(); |
@@ -54,9 +52,7 @@ void FUNCTION_NAME(Directory_Create)(Dart_NativeArguments args) { |
Dart_SetReturnValue(args, Dart_True()); |
} else { |
Dart_Handle err = DartUtils::NewDartOSError(); |
- if (Dart_IsError(err)) { |
- Dart_PropagateError(err); |
- } |
+ if (Dart_IsError(err)) Dart_PropagateError(err); |
Dart_SetReturnValue(args, err); |
} |
Dart_ExitScope(); |
@@ -72,9 +68,7 @@ void FUNCTION_NAME(Directory_CreateTemp)(Dart_NativeArguments args) { |
free(result); |
} else { |
Dart_Handle err = DartUtils::NewDartOSError(); |
- if (Dart_IsError(err)) { |
- Dart_PropagateError(err); |
- } |
+ if (Dart_IsError(err)) Dart_PropagateError(err); |
Dart_SetReturnValue(args, err); |
} |
Dart_ExitScope(); |
@@ -90,9 +84,23 @@ void FUNCTION_NAME(Directory_Delete)(Dart_NativeArguments args) { |
Dart_SetReturnValue(args, Dart_True()); |
} else { |
Dart_Handle err = DartUtils::NewDartOSError(); |
- if (Dart_IsError(err)) { |
- Dart_PropagateError(err); |
- } |
+ if (Dart_IsError(err)) Dart_PropagateError(err); |
+ Dart_SetReturnValue(args, err); |
+ } |
+ Dart_ExitScope(); |
+} |
+ |
+ |
+void FUNCTION_NAME(Directory_Rename)(Dart_NativeArguments args) { |
+ Dart_EnterScope(); |
+ Dart_Handle path = Dart_GetNativeArgument(args, 0); |
+ Dart_Handle newPath = Dart_GetNativeArgument(args, 1); |
+ if (Directory::Rename(DartUtils::GetStringValue(path), |
+ DartUtils::GetStringValue(newPath))) { |
+ Dart_SetReturnValue(args, Dart_True()); |
+ } else { |
+ Dart_Handle err = DartUtils::NewDartOSError(); |
+ if (Dart_IsError(err)) Dart_PropagateError(err); |
Dart_SetReturnValue(args, err); |
} |
Dart_ExitScope(); |
@@ -191,6 +199,21 @@ static CObject* DirectoryListRequest(const CObjectArray& request, |
} |
+static CObject* DirectoryRenameRequest(const CObjectArray& request, |
+ Dart_Port response_port) { |
+ if (request.Length() == 3 && |
+ request[1]->IsString() && |
+ request[2]->IsString()) { |
+ CObjectString path(request[1]); |
+ CObjectString new_path(request[2]); |
+ bool completed = Directory::Rename(path.CString(), new_path.CString()); |
+ if (completed) return CObject::True(); |
+ return CObject::NewOSError(); |
+ } |
+ return CObject::IllegalArgumentError(); |
+} |
+ |
+ |
void DirectoryService(Dart_Port dest_port_id, |
Dart_Port reply_port_id, |
Dart_CObject* message) { |
@@ -215,6 +238,9 @@ void DirectoryService(Dart_Port dest_port_id, |
case Directory::kListRequest: |
response = DirectoryListRequest(request, reply_port_id); |
break; |
+ case Directory::kRenameRequest: |
+ response = DirectoryRenameRequest(request, reply_port_id); |
+ break; |
default: |
UNREACHABLE(); |
} |