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

Side by Side Diff: runtime/bin/directory.cc

Issue 10414046: Add support for directory renaming to dart:io. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Address review comments Created 8 years, 7 months 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/bin/directory.h ('k') | runtime/bin/directory.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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 }
OLDNEW
« no previous file with comments | « runtime/bin/directory.h ('k') | runtime/bin/directory.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698