OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 #include "bin/directory.h" | 5 #include "bin/directory.h" |
6 | 6 |
7 #include "bin/dartutils.h" | 7 #include "bin/dartutils.h" |
8 #include "bin/thread.h" | 8 #include "bin/thread.h" |
9 #include "include/dart_api.h" | 9 #include "include/dart_api.h" |
10 #include "platform/assert.h" | 10 #include "platform/assert.h" |
(...skipping 20 matching lines...) Expand all Loading... |
31 Dart_EnterScope(); | 31 Dart_EnterScope(); |
32 Dart_Handle path = Dart_GetNativeArgument(args, 0); | 32 Dart_Handle path = Dart_GetNativeArgument(args, 0); |
33 Directory::ExistsResult result = | 33 Directory::ExistsResult result = |
34 Directory::Exists(DartUtils::GetStringValue(path)); | 34 Directory::Exists(DartUtils::GetStringValue(path)); |
35 if (result == Directory::EXISTS) { | 35 if (result == Directory::EXISTS) { |
36 Dart_SetReturnValue(args, Dart_NewInteger(kExists)); | 36 Dart_SetReturnValue(args, Dart_NewInteger(kExists)); |
37 } else if (result == Directory::DOES_NOT_EXIST) { | 37 } else if (result == Directory::DOES_NOT_EXIST) { |
38 Dart_SetReturnValue(args, Dart_NewInteger(kDoesNotExist)); | 38 Dart_SetReturnValue(args, Dart_NewInteger(kDoesNotExist)); |
39 } else { | 39 } else { |
40 Dart_Handle err = DartUtils::NewDartOSError(); | 40 Dart_Handle err = DartUtils::NewDartOSError(); |
41 if (Dart_IsError(err)) { | 41 if (Dart_IsError(err)) Dart_PropagateError(err); |
42 Dart_PropagateError(err); | |
43 } | |
44 Dart_SetReturnValue(args, err); | 42 Dart_SetReturnValue(args, err); |
45 } | 43 } |
46 Dart_ExitScope(); | 44 Dart_ExitScope(); |
47 } | 45 } |
48 | 46 |
49 | 47 |
50 void FUNCTION_NAME(Directory_Create)(Dart_NativeArguments args) { | 48 void FUNCTION_NAME(Directory_Create)(Dart_NativeArguments args) { |
51 Dart_EnterScope(); | 49 Dart_EnterScope(); |
52 Dart_Handle path = Dart_GetNativeArgument(args, 0); | 50 Dart_Handle path = Dart_GetNativeArgument(args, 0); |
53 if (Directory::Create(DartUtils::GetStringValue(path))) { | 51 if (Directory::Create(DartUtils::GetStringValue(path))) { |
54 Dart_SetReturnValue(args, Dart_True()); | 52 Dart_SetReturnValue(args, Dart_True()); |
55 } else { | 53 } else { |
56 Dart_Handle err = DartUtils::NewDartOSError(); | 54 Dart_Handle err = DartUtils::NewDartOSError(); |
57 if (Dart_IsError(err)) { | 55 if (Dart_IsError(err)) Dart_PropagateError(err); |
58 Dart_PropagateError(err); | |
59 } | |
60 Dart_SetReturnValue(args, err); | 56 Dart_SetReturnValue(args, err); |
61 } | 57 } |
62 Dart_ExitScope(); | 58 Dart_ExitScope(); |
63 } | 59 } |
64 | 60 |
65 | 61 |
66 void FUNCTION_NAME(Directory_CreateTemp)(Dart_NativeArguments args) { | 62 void FUNCTION_NAME(Directory_CreateTemp)(Dart_NativeArguments args) { |
67 Dart_EnterScope(); | 63 Dart_EnterScope(); |
68 Dart_Handle path = Dart_GetNativeArgument(args, 0); | 64 Dart_Handle path = Dart_GetNativeArgument(args, 0); |
69 char* result = Directory::CreateTemp(DartUtils::GetStringValue(path)); | 65 char* result = Directory::CreateTemp(DartUtils::GetStringValue(path)); |
70 if (result != NULL) { | 66 if (result != NULL) { |
71 Dart_SetReturnValue(args, Dart_NewString(result)); | 67 Dart_SetReturnValue(args, Dart_NewString(result)); |
72 free(result); | 68 free(result); |
73 } else { | 69 } else { |
74 Dart_Handle err = DartUtils::NewDartOSError(); | 70 Dart_Handle err = DartUtils::NewDartOSError(); |
75 if (Dart_IsError(err)) { | 71 if (Dart_IsError(err)) Dart_PropagateError(err); |
76 Dart_PropagateError(err); | |
77 } | |
78 Dart_SetReturnValue(args, err); | 72 Dart_SetReturnValue(args, err); |
79 } | 73 } |
80 Dart_ExitScope(); | 74 Dart_ExitScope(); |
81 } | 75 } |
82 | 76 |
83 | 77 |
84 void FUNCTION_NAME(Directory_Delete)(Dart_NativeArguments args) { | 78 void FUNCTION_NAME(Directory_Delete)(Dart_NativeArguments args) { |
85 Dart_EnterScope(); | 79 Dart_EnterScope(); |
86 Dart_Handle path = Dart_GetNativeArgument(args, 0); | 80 Dart_Handle path = Dart_GetNativeArgument(args, 0); |
87 Dart_Handle recursive = Dart_GetNativeArgument(args, 1); | 81 Dart_Handle recursive = Dart_GetNativeArgument(args, 1); |
88 if (Directory::Delete(DartUtils::GetStringValue(path), | 82 if (Directory::Delete(DartUtils::GetStringValue(path), |
89 DartUtils::GetBooleanValue(recursive))) { | 83 DartUtils::GetBooleanValue(recursive))) { |
90 Dart_SetReturnValue(args, Dart_True()); | 84 Dart_SetReturnValue(args, Dart_True()); |
91 } else { | 85 } else { |
92 Dart_Handle err = DartUtils::NewDartOSError(); | 86 Dart_Handle err = DartUtils::NewDartOSError(); |
93 if (Dart_IsError(err)) { | 87 if (Dart_IsError(err)) Dart_PropagateError(err); |
94 Dart_PropagateError(err); | |
95 } | |
96 Dart_SetReturnValue(args, err); | 88 Dart_SetReturnValue(args, err); |
97 } | 89 } |
98 Dart_ExitScope(); | 90 Dart_ExitScope(); |
| 91 } |
| 92 |
| 93 |
| 94 void FUNCTION_NAME(Directory_Rename)(Dart_NativeArguments args) { |
| 95 Dart_EnterScope(); |
| 96 Dart_Handle path = Dart_GetNativeArgument(args, 0); |
| 97 Dart_Handle newPath = Dart_GetNativeArgument(args, 1); |
| 98 if (Directory::Rename(DartUtils::GetStringValue(path), |
| 99 DartUtils::GetStringValue(newPath))) { |
| 100 Dart_SetReturnValue(args, Dart_True()); |
| 101 } else { |
| 102 Dart_Handle err = DartUtils::NewDartOSError(); |
| 103 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 104 Dart_SetReturnValue(args, err); |
| 105 } |
| 106 Dart_ExitScope(); |
99 } | 107 } |
100 | 108 |
101 | 109 |
102 static CObject* DirectoryCreateRequest(const CObjectArray& request) { | 110 static CObject* DirectoryCreateRequest(const CObjectArray& request) { |
103 if (request.Length() == 2 && request[1]->IsString()) { | 111 if (request.Length() == 2 && request[1]->IsString()) { |
104 CObjectString path(request[1]); | 112 CObjectString path(request[1]); |
105 if (Directory::Create(path.CString())) { | 113 if (Directory::Create(path.CString())) { |
106 return CObject::True(); | 114 return CObject::True(); |
107 } else { | 115 } else { |
108 return CObject::NewOSError(); | 116 return CObject::NewOSError(); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 Dart_PostCObject(response_port, response->AsApiCObject()); | 192 Dart_PostCObject(response_port, response->AsApiCObject()); |
185 | 193 |
186 response = new CObjectArray(CObject::NewArray(2)); | 194 response = new CObjectArray(CObject::NewArray(2)); |
187 response->SetAt( | 195 response->SetAt( |
188 0, new CObjectInt32(CObject::NewInt32(DirectoryListing::kListDone))); | 196 0, new CObjectInt32(CObject::NewInt32(DirectoryListing::kListDone))); |
189 response->SetAt(1, CObject::False()); | 197 response->SetAt(1, CObject::False()); |
190 return response; | 198 return response; |
191 } | 199 } |
192 | 200 |
193 | 201 |
| 202 static CObject* DirectoryRenameRequest(const CObjectArray& request, |
| 203 Dart_Port response_port) { |
| 204 if (request.Length() == 3 && |
| 205 request[1]->IsString() && |
| 206 request[2]->IsString()) { |
| 207 CObjectString path(request[1]); |
| 208 CObjectString new_path(request[2]); |
| 209 bool completed = Directory::Rename(path.CString(), new_path.CString()); |
| 210 if (completed) return CObject::True(); |
| 211 return CObject::NewOSError(); |
| 212 } |
| 213 return CObject::IllegalArgumentError(); |
| 214 } |
| 215 |
| 216 |
194 void DirectoryService(Dart_Port dest_port_id, | 217 void DirectoryService(Dart_Port dest_port_id, |
195 Dart_Port reply_port_id, | 218 Dart_Port reply_port_id, |
196 Dart_CObject* message) { | 219 Dart_CObject* message) { |
197 CObject* response = CObject::False(); | 220 CObject* response = CObject::False(); |
198 CObjectArray request(message); | 221 CObjectArray request(message); |
199 if (message->type == Dart_CObject::kArray) { | 222 if (message->type == Dart_CObject::kArray) { |
200 if (request.Length() > 1 && request[0]->IsInt32()) { | 223 if (request.Length() > 1 && request[0]->IsInt32()) { |
201 CObjectInt32 requestType(request[0]); | 224 CObjectInt32 requestType(request[0]); |
202 switch (requestType.Value()) { | 225 switch (requestType.Value()) { |
203 case Directory::kCreateRequest: | 226 case Directory::kCreateRequest: |
204 response = DirectoryCreateRequest(request); | 227 response = DirectoryCreateRequest(request); |
205 break; | 228 break; |
206 case Directory::kDeleteRequest: | 229 case Directory::kDeleteRequest: |
207 response = DirectoryDeleteRequest(request); | 230 response = DirectoryDeleteRequest(request); |
208 break; | 231 break; |
209 case Directory::kExistsRequest: | 232 case Directory::kExistsRequest: |
210 response = DirectoryExistsRequest(request); | 233 response = DirectoryExistsRequest(request); |
211 break; | 234 break; |
212 case Directory::kCreateTempRequest: | 235 case Directory::kCreateTempRequest: |
213 response = DirectoryCreateTempRequest(request); | 236 response = DirectoryCreateTempRequest(request); |
214 break; | 237 break; |
215 case Directory::kListRequest: | 238 case Directory::kListRequest: |
216 response = DirectoryListRequest(request, reply_port_id); | 239 response = DirectoryListRequest(request, reply_port_id); |
217 break; | 240 break; |
| 241 case Directory::kRenameRequest: |
| 242 response = DirectoryRenameRequest(request, reply_port_id); |
| 243 break; |
218 default: | 244 default: |
219 UNREACHABLE(); | 245 UNREACHABLE(); |
220 } | 246 } |
221 } | 247 } |
222 } | 248 } |
223 | 249 |
224 Dart_PostCObject(reply_port_id, response->AsApiCObject()); | 250 Dart_PostCObject(reply_port_id, response->AsApiCObject()); |
225 } | 251 } |
226 | 252 |
227 | 253 |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
290 bool DirectoryListing::HandleError(const char* dir_name) { | 316 bool DirectoryListing::HandleError(const char* dir_name) { |
291 // TODO(sgjesse): Pass flags to indicate whether error | 317 // TODO(sgjesse): Pass flags to indicate whether error |
292 // responses are needed. | 318 // responses are needed. |
293 CObject* err = CObject::NewOSError(); | 319 CObject* err = CObject::NewOSError(); |
294 CObjectArray* response = new CObjectArray(CObject::NewArray(3)); | 320 CObjectArray* response = new CObjectArray(CObject::NewArray(3)); |
295 response->SetAt(0, new CObjectInt32(CObject::NewInt32(kListError))); | 321 response->SetAt(0, new CObjectInt32(CObject::NewInt32(kListError))); |
296 response->SetAt(1, new CObjectString(CObject::NewString(dir_name))); | 322 response->SetAt(1, new CObjectString(CObject::NewString(dir_name))); |
297 response->SetAt(2, err); | 323 response->SetAt(2, err); |
298 return Dart_PostCObject(response_port_, response->AsApiCObject()); | 324 return Dart_PostCObject(response_port_, response->AsApiCObject()); |
299 } | 325 } |
OLD | NEW |