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

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

Issue 22303002: Auto create ApiLocalScope before calling native functions, this ensures that (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: Created 7 years, 4 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
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"
11 11
12 12
13 namespace dart { 13 namespace dart {
14 namespace bin { 14 namespace bin {
15 15
16 // Forward declaration. 16 // Forward declaration.
17 static void DirectoryService(Dart_Port, Dart_Port, Dart_CObject*); 17 static void DirectoryService(Dart_Port, Dart_Port, Dart_CObject*);
18 18
19 NativeService Directory::directory_service_("DirectoryService", 19 NativeService Directory::directory_service_("DirectoryService",
20 DirectoryService, 20 DirectoryService,
21 16); 21 16);
22 22
23 23
24 void FUNCTION_NAME(Directory_Current)(Dart_NativeArguments args) { 24 void FUNCTION_NAME(Directory_Current)(Dart_NativeArguments args) {
25 Dart_EnterScope();
26 char* current = Directory::Current(); 25 char* current = Directory::Current();
27 if (current != NULL) { 26 if (current != NULL) {
28 Dart_SetReturnValue(args, DartUtils::NewString(current)); 27 Dart_SetReturnValue(args, DartUtils::NewString(current));
29 free(current); 28 free(current);
30 } 29 }
31 Dart_ExitScope();
32 } 30 }
33 31
34 32
35 void FUNCTION_NAME(Directory_SetCurrent)(Dart_NativeArguments args) { 33 void FUNCTION_NAME(Directory_SetCurrent)(Dart_NativeArguments args) {
36 Dart_EnterScope();
37 int argc = Dart_GetNativeArgumentCount(args); 34 int argc = Dart_GetNativeArgumentCount(args);
38 Dart_Handle path; 35 Dart_Handle path;
39 if (argc == 1) { 36 if (argc == 1) {
40 path = Dart_GetNativeArgument(args, 0); 37 path = Dart_GetNativeArgument(args, 0);
41 } 38 }
42 if (argc != 1 || !Dart_IsString(path)) { 39 if (argc != 1 || !Dart_IsString(path)) {
43 Dart_SetReturnValue(args, DartUtils::NewDartArgumentError(NULL)); 40 Dart_SetReturnValue(args, DartUtils::NewDartArgumentError(NULL));
44 } else { 41 } else {
45 if (Directory::SetCurrent(DartUtils::GetStringValue(path))) { 42 if (Directory::SetCurrent(DartUtils::GetStringValue(path))) {
46 Dart_SetReturnValue(args, Dart_True()); 43 Dart_SetReturnValue(args, Dart_True());
47 } else { 44 } else {
48 Dart_Handle err = DartUtils::NewDartOSError(); 45 Dart_Handle err = DartUtils::NewDartOSError();
49 if (Dart_IsError(err)) Dart_PropagateError(err); 46 if (Dart_IsError(err)) Dart_PropagateError(err);
50 Dart_SetReturnValue(args, err); 47 Dart_SetReturnValue(args, err);
51 } 48 }
52 } 49 }
53 Dart_ExitScope();
54 } 50 }
55 51
56 52
57 void FUNCTION_NAME(Directory_Exists)(Dart_NativeArguments args) { 53 void FUNCTION_NAME(Directory_Exists)(Dart_NativeArguments args) {
58 static const int kExists = 1; 54 static const int kExists = 1;
59 static const int kDoesNotExist = 0; 55 static const int kDoesNotExist = 0;
60 Dart_EnterScope();
61 Dart_Handle path = Dart_GetNativeArgument(args, 0); 56 Dart_Handle path = Dart_GetNativeArgument(args, 0);
62 Directory::ExistsResult result = 57 Directory::ExistsResult result =
63 Directory::Exists(DartUtils::GetStringValue(path)); 58 Directory::Exists(DartUtils::GetStringValue(path));
64 if (result == Directory::EXISTS) { 59 if (result == Directory::EXISTS) {
65 Dart_SetReturnValue(args, Dart_NewInteger(kExists)); 60 Dart_SetReturnValue(args, Dart_NewInteger(kExists));
66 } else if (result == Directory::DOES_NOT_EXIST) { 61 } else if (result == Directory::DOES_NOT_EXIST) {
67 Dart_SetReturnValue(args, Dart_NewInteger(kDoesNotExist)); 62 Dart_SetReturnValue(args, Dart_NewInteger(kDoesNotExist));
68 } else { 63 } else {
69 Dart_Handle err = DartUtils::NewDartOSError(); 64 Dart_Handle err = DartUtils::NewDartOSError();
70 if (Dart_IsError(err)) Dart_PropagateError(err); 65 if (Dart_IsError(err)) Dart_PropagateError(err);
71 Dart_SetReturnValue(args, err); 66 Dart_SetReturnValue(args, err);
72 } 67 }
73 Dart_ExitScope();
74 } 68 }
75 69
76 70
77 void FUNCTION_NAME(Directory_Create)(Dart_NativeArguments args) { 71 void FUNCTION_NAME(Directory_Create)(Dart_NativeArguments args) {
78 Dart_EnterScope();
79 Dart_Handle path = Dart_GetNativeArgument(args, 0); 72 Dart_Handle path = Dart_GetNativeArgument(args, 0);
80 if (Directory::Create(DartUtils::GetStringValue(path))) { 73 if (Directory::Create(DartUtils::GetStringValue(path))) {
81 Dart_SetReturnValue(args, Dart_True()); 74 Dart_SetReturnValue(args, Dart_True());
82 } else { 75 } else {
83 Dart_Handle err = DartUtils::NewDartOSError(); 76 Dart_Handle err = DartUtils::NewDartOSError();
84 if (Dart_IsError(err)) Dart_PropagateError(err); 77 if (Dart_IsError(err)) Dart_PropagateError(err);
85 Dart_SetReturnValue(args, err); 78 Dart_SetReturnValue(args, err);
86 } 79 }
87 Dart_ExitScope();
88 } 80 }
89 81
90 82
91 void FUNCTION_NAME(Directory_CreateTemp)(Dart_NativeArguments args) { 83 void FUNCTION_NAME(Directory_CreateTemp)(Dart_NativeArguments args) {
92 Dart_EnterScope();
93 Dart_Handle path = Dart_GetNativeArgument(args, 0); 84 Dart_Handle path = Dart_GetNativeArgument(args, 0);
94 char* result = Directory::CreateTemp(DartUtils::GetStringValue(path)); 85 char* result = Directory::CreateTemp(DartUtils::GetStringValue(path));
95 if (result != NULL) { 86 if (result != NULL) {
96 Dart_SetReturnValue(args, DartUtils::NewString(result)); 87 Dart_SetReturnValue(args, DartUtils::NewString(result));
97 free(result); 88 free(result);
98 } else { 89 } else {
99 Dart_Handle err = DartUtils::NewDartOSError(); 90 Dart_Handle err = DartUtils::NewDartOSError();
100 if (Dart_IsError(err)) Dart_PropagateError(err); 91 if (Dart_IsError(err)) Dart_PropagateError(err);
101 Dart_SetReturnValue(args, err); 92 Dart_SetReturnValue(args, err);
102 } 93 }
103 Dart_ExitScope();
104 } 94 }
105 95
106 96
107 void FUNCTION_NAME(Directory_Delete)(Dart_NativeArguments args) { 97 void FUNCTION_NAME(Directory_Delete)(Dart_NativeArguments args) {
108 Dart_EnterScope();
109 Dart_Handle path = Dart_GetNativeArgument(args, 0); 98 Dart_Handle path = Dart_GetNativeArgument(args, 0);
110 Dart_Handle recursive = Dart_GetNativeArgument(args, 1); 99 Dart_Handle recursive = Dart_GetNativeArgument(args, 1);
111 if (Directory::Delete(DartUtils::GetStringValue(path), 100 if (Directory::Delete(DartUtils::GetStringValue(path),
112 DartUtils::GetBooleanValue(recursive))) { 101 DartUtils::GetBooleanValue(recursive))) {
113 Dart_SetReturnValue(args, Dart_True()); 102 Dart_SetReturnValue(args, Dart_True());
114 } else { 103 } else {
115 Dart_Handle err = DartUtils::NewDartOSError(); 104 Dart_Handle err = DartUtils::NewDartOSError();
116 if (Dart_IsError(err)) Dart_PropagateError(err); 105 if (Dart_IsError(err)) Dart_PropagateError(err);
117 Dart_SetReturnValue(args, err); 106 Dart_SetReturnValue(args, err);
118 } 107 }
119 Dart_ExitScope();
120 } 108 }
121 109
122 110
123 void FUNCTION_NAME(Directory_Rename)(Dart_NativeArguments args) { 111 void FUNCTION_NAME(Directory_Rename)(Dart_NativeArguments args) {
124 Dart_EnterScope();
125 Dart_Handle path = Dart_GetNativeArgument(args, 0); 112 Dart_Handle path = Dart_GetNativeArgument(args, 0);
126 Dart_Handle newPath = Dart_GetNativeArgument(args, 1); 113 Dart_Handle newPath = Dart_GetNativeArgument(args, 1);
127 if (Directory::Rename(DartUtils::GetStringValue(path), 114 if (Directory::Rename(DartUtils::GetStringValue(path),
128 DartUtils::GetStringValue(newPath))) { 115 DartUtils::GetStringValue(newPath))) {
129 Dart_SetReturnValue(args, Dart_True()); 116 Dart_SetReturnValue(args, Dart_True());
130 } else { 117 } else {
131 Dart_Handle err = DartUtils::NewDartOSError(); 118 Dart_Handle err = DartUtils::NewDartOSError();
132 if (Dart_IsError(err)) Dart_PropagateError(err); 119 if (Dart_IsError(err)) Dart_PropagateError(err);
133 Dart_SetReturnValue(args, err); 120 Dart_SetReturnValue(args, err);
134 } 121 }
135 Dart_ExitScope();
136 } 122 }
137 123
138 124
139 void FUNCTION_NAME(Directory_List)(Dart_NativeArguments args) { 125 void FUNCTION_NAME(Directory_List)(Dart_NativeArguments args) {
140 Dart_EnterScope();
141 Dart_Handle path = Dart_GetNativeArgument(args, 0); 126 Dart_Handle path = Dart_GetNativeArgument(args, 0);
142 Dart_Handle recursive = Dart_GetNativeArgument(args, 1); 127 Dart_Handle recursive = Dart_GetNativeArgument(args, 1);
143 // Create the list to hold the directory listing here, and pass it to the 128 // Create the list to hold the directory listing here, and pass it to the
144 // SyncDirectoryListing object, which adds elements to it. 129 // SyncDirectoryListing object, which adds elements to it.
145 Dart_Handle follow_links = Dart_GetNativeArgument(args, 2); 130 Dart_Handle follow_links = Dart_GetNativeArgument(args, 2);
146 // Create the list to hold the directory listing here, and pass it to the 131 // Create the list to hold the directory listing here, and pass it to the
147 // SyncDirectoryListing object, which adds elements to it. 132 // SyncDirectoryListing object, which adds elements to it.
148 Dart_Handle results = 133 Dart_Handle results =
149 Dart_New(DartUtils::GetDartType(DartUtils::kCoreLibURL, "List"), 134 Dart_New(DartUtils::GetDartType(DartUtils::kCoreLibURL, "List"),
150 Dart_Null(), 135 Dart_Null(),
151 0, 136 0,
152 NULL); 137 NULL);
153 SyncDirectoryListing sync_listing(results, 138 SyncDirectoryListing sync_listing(results,
154 DartUtils::GetStringValue(path), 139 DartUtils::GetStringValue(path),
155 DartUtils::GetBooleanValue(recursive), 140 DartUtils::GetBooleanValue(recursive),
156 DartUtils::GetBooleanValue(follow_links)); 141 DartUtils::GetBooleanValue(follow_links));
157 Directory::List(&sync_listing); 142 Directory::List(&sync_listing);
158 Dart_SetReturnValue(args, results); 143 Dart_SetReturnValue(args, results);
159 Dart_ExitScope();
160 } 144 }
161 145
162 146
163 static CObject* DirectoryCreateRequest(const CObjectArray& request) { 147 static CObject* DirectoryCreateRequest(const CObjectArray& request) {
164 if (request.Length() == 2 && request[1]->IsString()) { 148 if (request.Length() == 2 && request[1]->IsString()) {
165 CObjectString path(request[1]); 149 CObjectString path(request[1]);
166 if (Directory::Create(path.CString())) { 150 if (Directory::Create(path.CString())) {
167 return CObject::True(); 151 return CObject::True();
168 } else { 152 } else {
169 return CObject::NewOSError(); 153 return CObject::NewOSError();
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
349 Dart_PostCObject(reply_port_id, response->AsApiCObject()); 333 Dart_PostCObject(reply_port_id, response->AsApiCObject());
350 } 334 }
351 335
352 336
353 Dart_Port Directory::GetServicePort() { 337 Dart_Port Directory::GetServicePort() {
354 return directory_service_.GetServicePort(); 338 return directory_service_.GetServicePort();
355 } 339 }
356 340
357 341
358 void FUNCTION_NAME(Directory_NewServicePort)(Dart_NativeArguments args) { 342 void FUNCTION_NAME(Directory_NewServicePort)(Dart_NativeArguments args) {
359 Dart_EnterScope();
360 Dart_SetReturnValue(args, Dart_Null()); 343 Dart_SetReturnValue(args, Dart_Null());
361 Dart_Port service_port = Directory::GetServicePort(); 344 Dart_Port service_port = Directory::GetServicePort();
362 if (service_port != ILLEGAL_PORT) { 345 if (service_port != ILLEGAL_PORT) {
363 // Return a send port for the service port. 346 // Return a send port for the service port.
364 Dart_Handle send_port = Dart_NewSendPort(service_port); 347 Dart_Handle send_port = Dart_NewSendPort(service_port);
365 Dart_SetReturnValue(args, send_port); 348 Dart_SetReturnValue(args, send_port);
366 } 349 }
367 Dart_ExitScope();
368 } 350 }
369 351
370 352
371 bool AsyncDirectoryListing::AddFileSystemEntityToResponse(Response type, 353 bool AsyncDirectoryListing::AddFileSystemEntityToResponse(Response type,
372 char* arg) { 354 char* arg) {
373 array_->SetAt(index_++, new CObjectInt32(CObject::NewInt32(type))); 355 array_->SetAt(index_++, new CObjectInt32(CObject::NewInt32(type)));
374 if (arg != NULL) { 356 if (arg != NULL) {
375 array_->SetAt(index_++, new CObjectString(CObject::NewString(arg))); 357 array_->SetAt(index_++, new CObjectString(CObject::NewString(arg)));
376 } else { 358 } else {
377 array_->SetAt(index_++, CObject::Null()); 359 array_->SetAt(index_++, CObject::Null());
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
485 if (listing->error()) { 467 if (listing->error()) {
486 listing->HandleError("Invalid path"); 468 listing->HandleError("Invalid path");
487 listing->HandleDone(); 469 listing->HandleDone();
488 } else { 470 } else {
489 while (ListNext(listing)) {} 471 while (ListNext(listing)) {}
490 } 472 }
491 } 473 }
492 474
493 } // namespace bin 475 } // namespace bin
494 } // namespace dart 476 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/crypto.cc ('k') | runtime/bin/eventhandler.cc » ('j') | runtime/vm/ast.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698