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

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

Issue 1665993002: Prefer Dart_SetReturnValue over Dart_PropagateError when it makes sense. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 10 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
« no previous file with comments | « runtime/bin/directory.cc ('k') | runtime/bin/file_system_watcher.cc » ('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) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, 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/file.h" 5 #include "bin/file.h"
6 6
7 #include "bin/builtin.h" 7 #include "bin/builtin.h"
8 #include "bin/dartutils.h" 8 #include "bin/dartutils.h"
9 #include "bin/embedded_dart_io.h" 9 #include "bin/embedded_dart_io.h"
10 #include "bin/io_buffer.h" 10 #include "bin/io_buffer.h"
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 // Check that the file exists before opening it only for 129 // Check that the file exists before opening it only for
130 // reading. This is to prevent the opening of directories as 130 // reading. This is to prevent the opening of directories as
131 // files. Directories can be opened for reading using the posix 131 // files. Directories can be opened for reading using the posix
132 // 'open' call. 132 // 'open' call.
133 File* file = NULL; 133 File* file = NULL;
134 file = File::Open(filename, file_mode); 134 file = File::Open(filename, file_mode);
135 if (file != NULL) { 135 if (file != NULL) {
136 Dart_SetReturnValue(args, 136 Dart_SetReturnValue(args,
137 Dart_NewInteger(reinterpret_cast<intptr_t>(file))); 137 Dart_NewInteger(reinterpret_cast<intptr_t>(file)));
138 } else { 138 } else {
139 Dart_Handle err = DartUtils::NewDartOSError(); 139 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
140 if (Dart_IsError(err)) Dart_PropagateError(err);
141 Dart_SetReturnValue(args, err);
142 } 140 }
143 } 141 }
144 142
145 143
146 void FUNCTION_NAME(File_Exists)(Dart_NativeArguments args) { 144 void FUNCTION_NAME(File_Exists)(Dart_NativeArguments args) {
147 const char* filename = 145 const char* filename =
148 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 146 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
149 bool exists = File::Exists(filename); 147 bool exists = File::Exists(filename);
150 Dart_SetReturnValue(args, Dart_NewBoolean(exists)); 148 Dart_SetReturnValue(args, Dart_NewBoolean(exists));
151 } 149 }
(...skipping 17 matching lines...) Expand all
169 void FUNCTION_NAME(File_ReadByte)(Dart_NativeArguments args) { 167 void FUNCTION_NAME(File_ReadByte)(Dart_NativeArguments args) {
170 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0)); 168 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0));
171 ASSERT(file != NULL); 169 ASSERT(file != NULL);
172 uint8_t buffer; 170 uint8_t buffer;
173 int64_t bytes_read = file->Read(reinterpret_cast<void*>(&buffer), 1); 171 int64_t bytes_read = file->Read(reinterpret_cast<void*>(&buffer), 1);
174 if (bytes_read == 1) { 172 if (bytes_read == 1) {
175 Dart_SetReturnValue(args, Dart_NewInteger(buffer)); 173 Dart_SetReturnValue(args, Dart_NewInteger(buffer));
176 } else if (bytes_read == 0) { 174 } else if (bytes_read == 0) {
177 Dart_SetReturnValue(args, Dart_NewInteger(-1)); 175 Dart_SetReturnValue(args, Dart_NewInteger(-1));
178 } else { 176 } else {
179 Dart_Handle err = DartUtils::NewDartOSError(); 177 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
180 if (Dart_IsError(err)) Dart_PropagateError(err);
181 Dart_SetReturnValue(args, err);
182 } 178 }
183 } 179 }
184 180
185 181
186 void FUNCTION_NAME(File_WriteByte)(Dart_NativeArguments args) { 182 void FUNCTION_NAME(File_WriteByte)(Dart_NativeArguments args) {
187 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0)); 183 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0));
188 ASSERT(file != NULL); 184 ASSERT(file != NULL);
189 int64_t byte = 0; 185 int64_t byte = 0;
190 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &byte)) { 186 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &byte)) {
191 uint8_t buffer = static_cast<uint8_t>(byte & 0xff); 187 uint8_t buffer = static_cast<uint8_t>(byte & 0xff);
192 bool success = file->WriteFully(reinterpret_cast<void*>(&buffer), 1); 188 bool success = file->WriteFully(reinterpret_cast<void*>(&buffer), 1);
193 if (success) { 189 if (success) {
194 Dart_SetReturnValue(args, Dart_NewInteger(1)); 190 Dart_SetReturnValue(args, Dart_NewInteger(1));
195 } else { 191 } else {
196 Dart_Handle err = DartUtils::NewDartOSError(); 192 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
197 if (Dart_IsError(err)) Dart_PropagateError(err);
198 Dart_SetReturnValue(args, err);
199 } 193 }
200 } else { 194 } else {
201 OSError os_error(-1, "Invalid argument", OSError::kUnknown); 195 OSError os_error(-1, "Invalid argument", OSError::kUnknown);
202 Dart_Handle err = DartUtils::NewDartOSError(&os_error); 196 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
203 if (Dart_IsError(err)) Dart_PropagateError(err);
204 Dart_SetReturnValue(args, err);
205 } 197 }
206 } 198 }
207 199
208 200
209 void FUNCTION_NAME(File_Read)(Dart_NativeArguments args) { 201 void FUNCTION_NAME(File_Read)(Dart_NativeArguments args) {
210 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0)); 202 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0));
211 ASSERT(file != NULL); 203 ASSERT(file != NULL);
212 Dart_Handle length_object = Dart_GetNativeArgument(args, 1); 204 Dart_Handle length_object = Dart_GetNativeArgument(args, 1);
213 int64_t length = 0; 205 int64_t length = 0;
214 if (DartUtils::GetInt64Value(length_object, &length)) { 206 if (DartUtils::GetInt64Value(length_object, &length)) {
215 uint8_t* buffer = NULL; 207 uint8_t* buffer = NULL;
216 Dart_Handle external_array = IOBuffer::Allocate(length, &buffer); 208 Dart_Handle external_array = IOBuffer::Allocate(length, &buffer);
217 int64_t bytes_read = file->Read(reinterpret_cast<void*>(buffer), length); 209 int64_t bytes_read = file->Read(reinterpret_cast<void*>(buffer), length);
218 if (bytes_read < 0) { 210 if (bytes_read < 0) {
219 Dart_Handle err = DartUtils::NewDartOSError(); 211 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
220 if (Dart_IsError(err)) Dart_PropagateError(err);
221 Dart_SetReturnValue(args, err);
222 } else { 212 } else {
223 if (bytes_read < length) { 213 if (bytes_read < length) {
224 const int kNumArgs = 3; 214 const int kNumArgs = 3;
225 Dart_Handle dart_args[kNumArgs]; 215 Dart_Handle dart_args[kNumArgs];
226 dart_args[0] = external_array; 216 dart_args[0] = external_array;
227 dart_args[1] = Dart_NewInteger(0); 217 dart_args[1] = Dart_NewInteger(0);
228 dart_args[2] = Dart_NewInteger(bytes_read); 218 dart_args[2] = Dart_NewInteger(bytes_read);
229 // TODO(sgjesse): Cache the _makeUint8ListView function somewhere. 219 // TODO(sgjesse): Cache the _makeUint8ListView function somewhere.
230 Dart_Handle io_lib = 220 Dart_Handle io_lib =
231 Dart_LookupLibrary(DartUtils::NewString("dart:io")); 221 Dart_LookupLibrary(DartUtils::NewString("dart:io"));
232 if (Dart_IsError(io_lib)) Dart_PropagateError(io_lib); 222 if (Dart_IsError(io_lib)) Dart_PropagateError(io_lib);
233 Dart_Handle array_view = 223 Dart_Handle array_view =
234 Dart_Invoke(io_lib, 224 Dart_Invoke(io_lib,
235 DartUtils::NewString("_makeUint8ListView"), 225 DartUtils::NewString("_makeUint8ListView"),
236 kNumArgs, 226 kNumArgs,
237 dart_args); 227 dart_args);
238 if (Dart_IsError(array_view)) Dart_PropagateError(array_view);
239 Dart_SetReturnValue(args, array_view); 228 Dart_SetReturnValue(args, array_view);
240 } else { 229 } else {
241 Dart_SetReturnValue(args, external_array); 230 Dart_SetReturnValue(args, external_array);
242 } 231 }
243 } 232 }
244 } else { 233 } else {
245 OSError os_error(-1, "Invalid argument", OSError::kUnknown); 234 OSError os_error(-1, "Invalid argument", OSError::kUnknown);
246 Dart_Handle err = DartUtils::NewDartOSError(&os_error); 235 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
247 if (Dart_IsError(err)) Dart_PropagateError(err);
248 Dart_SetReturnValue(args, err);
249 } 236 }
250 } 237 }
251 238
252 239
253 void FUNCTION_NAME(File_ReadInto)(Dart_NativeArguments args) { 240 void FUNCTION_NAME(File_ReadInto)(Dart_NativeArguments args) {
254 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0)); 241 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0));
255 ASSERT(file != NULL); 242 ASSERT(file != NULL);
256 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); 243 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1);
257 ASSERT(Dart_IsList(buffer_obj)); 244 ASSERT(Dart_IsList(buffer_obj));
258 // start and end arguments are checked in Dart code to be 245 // start and end arguments are checked in Dart code to be
259 // integers and have the property that end <= 246 // integers and have the property that end <=
260 // list.length. Therefore, it is safe to extract their value as 247 // list.length. Therefore, it is safe to extract their value as
261 // intptr_t. 248 // intptr_t.
262 intptr_t start = 249 intptr_t start =
263 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 2)); 250 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 2));
264 intptr_t end = 251 intptr_t end =
265 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 3)); 252 DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 3));
266 intptr_t length = end - start; 253 intptr_t length = end - start;
267 intptr_t array_len = 0; 254 intptr_t array_len = 0;
268 Dart_Handle result = Dart_ListLength(buffer_obj, &array_len); 255 Dart_Handle result = Dart_ListLength(buffer_obj, &array_len);
269 if (Dart_IsError(result)) Dart_PropagateError(result); 256 if (Dart_IsError(result)) Dart_PropagateError(result);
270 ASSERT(end <= array_len); 257 ASSERT(end <= array_len);
271 uint8_t* buffer = new uint8_t[length]; 258 uint8_t* buffer = new uint8_t[length];
272 int64_t bytes_read = file->Read(reinterpret_cast<void*>(buffer), length); 259 int64_t bytes_read = file->Read(reinterpret_cast<void*>(buffer), length);
273 if (bytes_read >= 0) { 260 if (bytes_read >= 0) {
274 result = Dart_ListSetAsBytes(buffer_obj, start, buffer, bytes_read); 261 result = Dart_ListSetAsBytes(buffer_obj, start, buffer, bytes_read);
275 if (Dart_IsError(result)) { 262 if (Dart_IsError(result)) {
276 delete[] buffer; 263 Dart_SetReturnValue(args, result);
277 Dart_PropagateError(result); 264 } else {
265 Dart_SetReturnValue(args, Dart_NewInteger(bytes_read));
278 } 266 }
279 Dart_SetReturnValue(args, Dart_NewInteger(bytes_read));
280 } else { 267 } else {
281 Dart_Handle err = DartUtils::NewDartOSError(); 268 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
282 if (Dart_IsError(err)) Dart_PropagateError(err);
283 Dart_SetReturnValue(args, err);
284 } 269 }
285 delete[] buffer; 270 delete[] buffer;
286 } 271 }
287 272
288 273
289 void FUNCTION_NAME(File_WriteFrom)(Dart_NativeArguments args) { 274 void FUNCTION_NAME(File_WriteFrom)(Dart_NativeArguments args) {
290 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0)); 275 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0));
291 ASSERT(file != NULL); 276 ASSERT(file != NULL);
292 277
293 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); 278 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1);
(...skipping 22 matching lines...) Expand all
316 ASSERT(buffer != NULL); 301 ASSERT(buffer != NULL);
317 302
318 // Write all the data out into the file. 303 // Write all the data out into the file.
319 bool success = file->WriteFully(buffer, length); 304 bool success = file->WriteFully(buffer, length);
320 305
321 // Release the direct pointer acquired above. 306 // Release the direct pointer acquired above.
322 result = Dart_TypedDataReleaseData(buffer_obj); 307 result = Dart_TypedDataReleaseData(buffer_obj);
323 if (Dart_IsError(result)) Dart_PropagateError(result); 308 if (Dart_IsError(result)) Dart_PropagateError(result);
324 309
325 if (!success) { 310 if (!success) {
326 Dart_Handle err = DartUtils::NewDartOSError(); 311 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
327 if (Dart_IsError(err)) Dart_PropagateError(err);
328 Dart_SetReturnValue(args, err);
329 } else { 312 } else {
330 Dart_SetReturnValue(args, Dart_Null()); 313 Dart_SetReturnValue(args, Dart_Null());
331 } 314 }
332 } 315 }
333 316
334 317
335 void FUNCTION_NAME(File_Position)(Dart_NativeArguments args) { 318 void FUNCTION_NAME(File_Position)(Dart_NativeArguments args) {
336 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0)); 319 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0));
337 ASSERT(file != NULL); 320 ASSERT(file != NULL);
338 intptr_t return_value = file->Position(); 321 intptr_t return_value = file->Position();
339 if (return_value >= 0) { 322 if (return_value >= 0) {
340 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 323 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
341 } else { 324 } else {
342 Dart_Handle err = DartUtils::NewDartOSError(); 325 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
343 if (Dart_IsError(err)) Dart_PropagateError(err);
344 Dart_SetReturnValue(args, err);
345 } 326 }
346 } 327 }
347 328
348 329
349 void FUNCTION_NAME(File_SetPosition)(Dart_NativeArguments args) { 330 void FUNCTION_NAME(File_SetPosition)(Dart_NativeArguments args) {
350 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0)); 331 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0));
351 ASSERT(file != NULL); 332 ASSERT(file != NULL);
352 int64_t position = 0; 333 int64_t position = 0;
353 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &position)) { 334 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &position)) {
354 if (file->SetPosition(position)) { 335 if (file->SetPosition(position)) {
355 Dart_SetReturnValue(args, Dart_True()); 336 Dart_SetReturnValue(args, Dart_True());
356 } else { 337 } else {
357 Dart_Handle err = DartUtils::NewDartOSError(); 338 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
358 if (Dart_IsError(err)) Dart_PropagateError(err);
359 Dart_SetReturnValue(args, err);
360 } 339 }
361 } else { 340 } else {
362 OSError os_error(-1, "Invalid argument", OSError::kUnknown); 341 OSError os_error(-1, "Invalid argument", OSError::kUnknown);
363 Dart_Handle err = DartUtils::NewDartOSError(&os_error); 342 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
364 if (Dart_IsError(err)) Dart_PropagateError(err);
365 Dart_SetReturnValue(args, err);
366 } 343 }
367 } 344 }
368 345
369 346
370 void FUNCTION_NAME(File_Truncate)(Dart_NativeArguments args) { 347 void FUNCTION_NAME(File_Truncate)(Dart_NativeArguments args) {
371 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0)); 348 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0));
372 ASSERT(file != NULL); 349 ASSERT(file != NULL);
373 int64_t length = 0; 350 int64_t length = 0;
374 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &length)) { 351 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &length)) {
375 if (file->Truncate(length)) { 352 if (file->Truncate(length)) {
376 Dart_SetReturnValue(args, Dart_True()); 353 Dart_SetReturnValue(args, Dart_True());
377 } else { 354 } else {
378 Dart_Handle err = DartUtils::NewDartOSError(); 355 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
379 if (Dart_IsError(err)) Dart_PropagateError(err);
380 Dart_SetReturnValue(args, err);
381 } 356 }
382 } else { 357 } else {
383 OSError os_error(-1, "Invalid argument", OSError::kUnknown); 358 OSError os_error(-1, "Invalid argument", OSError::kUnknown);
384 Dart_Handle err = DartUtils::NewDartOSError(&os_error); 359 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
385 if (Dart_IsError(err)) Dart_PropagateError(err);
386 Dart_SetReturnValue(args, err);
387 } 360 }
388 } 361 }
389 362
390 363
391 void FUNCTION_NAME(File_Length)(Dart_NativeArguments args) { 364 void FUNCTION_NAME(File_Length)(Dart_NativeArguments args) {
392 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0)); 365 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0));
393 ASSERT(file != NULL); 366 ASSERT(file != NULL);
394 int64_t return_value = file->Length(); 367 int64_t return_value = file->Length();
395 if (return_value >= 0) { 368 if (return_value >= 0) {
396 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 369 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
397 } else { 370 } else {
398 Dart_Handle err = DartUtils::NewDartOSError(); 371 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
399 if (Dart_IsError(err)) Dart_PropagateError(err);
400 Dart_SetReturnValue(args, err);
401 } 372 }
402 } 373 }
403 374
404 375
405 void FUNCTION_NAME(File_LengthFromPath)(Dart_NativeArguments args) { 376 void FUNCTION_NAME(File_LengthFromPath)(Dart_NativeArguments args) {
406 const char* path = 377 const char* path =
407 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 378 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
408 int64_t return_value = File::LengthFromPath(path); 379 int64_t return_value = File::LengthFromPath(path);
409 if (return_value >= 0) { 380 if (return_value >= 0) {
410 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 381 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
411 } else { 382 } else {
412 Dart_Handle err = DartUtils::NewDartOSError(); 383 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
413 if (Dart_IsError(err)) Dart_PropagateError(err);
414 Dart_SetReturnValue(args, err);
415 } 384 }
416 } 385 }
417 386
418 387
419 void FUNCTION_NAME(File_LastModified)(Dart_NativeArguments args) { 388 void FUNCTION_NAME(File_LastModified)(Dart_NativeArguments args) {
420 const char* name = 389 const char* name =
421 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 390 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
422 int64_t return_value = File::LastModified(name); 391 int64_t return_value = File::LastModified(name);
423 if (return_value >= 0) { 392 if (return_value >= 0) {
424 Dart_SetReturnValue(args, Dart_NewInteger(return_value * kMSPerSecond)); 393 Dart_SetReturnValue(args, Dart_NewInteger(return_value * kMSPerSecond));
425 } else { 394 } else {
426 Dart_Handle err = DartUtils::NewDartOSError(); 395 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
427 if (Dart_IsError(err)) Dart_PropagateError(err);
428 Dart_SetReturnValue(args, err);
429 } 396 }
430 } 397 }
431 398
432 399
433 void FUNCTION_NAME(File_Flush)(Dart_NativeArguments args) { 400 void FUNCTION_NAME(File_Flush)(Dart_NativeArguments args) {
434 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0)); 401 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0));
435 ASSERT(file != NULL); 402 ASSERT(file != NULL);
436 if (file->Flush()) { 403 if (file->Flush()) {
437 Dart_SetReturnValue(args, Dart_True()); 404 Dart_SetReturnValue(args, Dart_True());
438 } else { 405 } else {
439 Dart_Handle err = DartUtils::NewDartOSError(); 406 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
440 if (Dart_IsError(err)) Dart_PropagateError(err);
441 Dart_SetReturnValue(args, err);
442 } 407 }
443 } 408 }
444 409
445 410
446 void FUNCTION_NAME(File_Lock)(Dart_NativeArguments args) { 411 void FUNCTION_NAME(File_Lock)(Dart_NativeArguments args) {
447 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0)); 412 File* file = GetFilePointer(Dart_GetNativeArgument(args, 0));
448 ASSERT(file != NULL); 413 ASSERT(file != NULL);
449 int64_t lock; 414 int64_t lock;
450 int64_t start; 415 int64_t start;
451 int64_t end; 416 int64_t end;
452 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &lock) && 417 if (DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 1), &lock) &&
453 DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &start) && 418 DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 2), &start) &&
454 DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 3), &end)) { 419 DartUtils::GetInt64Value(Dart_GetNativeArgument(args, 3), &end)) {
455 if ((lock >= File::kLockMin) && (lock <= File::kLockMax) && 420 if ((lock >= File::kLockMin) && (lock <= File::kLockMax) &&
456 (start >= 0) && (end == -1 || end > start)) { 421 (start >= 0) && (end == -1 || end > start)) {
457 if (file->Lock(static_cast<File::LockType>(lock), start, end)) { 422 if (file->Lock(static_cast<File::LockType>(lock), start, end)) {
458 Dart_SetReturnValue(args, Dart_True()); 423 Dart_SetReturnValue(args, Dart_True());
459 } else { 424 } else {
460 Dart_Handle err = DartUtils::NewDartOSError(); 425 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
461 if (Dart_IsError(err)) Dart_PropagateError(err);
462 Dart_SetReturnValue(args, err);
463 } 426 }
464 return; 427 return;
465 } 428 }
466 } 429 }
467
468 OSError os_error(-1, "Invalid argument", OSError::kUnknown); 430 OSError os_error(-1, "Invalid argument", OSError::kUnknown);
469 Dart_Handle err = DartUtils::NewDartOSError(&os_error); 431 Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
470 if (Dart_IsError(err)) Dart_PropagateError(err);
471 Dart_SetReturnValue(args, err);
472 } 432 }
473 433
474 434
475 void FUNCTION_NAME(File_Create)(Dart_NativeArguments args) { 435 void FUNCTION_NAME(File_Create)(Dart_NativeArguments args) {
476 const char* str = 436 const char* str =
477 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 437 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
478 bool result = File::Create(str); 438 bool result = File::Create(str);
479 if (result) { 439 if (result) {
480 Dart_SetReturnValue(args, Dart_NewBoolean(result)); 440 Dart_SetReturnValue(args, Dart_NewBoolean(result));
481 } else { 441 } else {
482 Dart_Handle err = DartUtils::NewDartOSError(); 442 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
483 if (Dart_IsError(err)) Dart_PropagateError(err);
484 Dart_SetReturnValue(args, err);
485 } 443 }
486 } 444 }
487 445
488 446
489 void FUNCTION_NAME(File_CreateLink)(Dart_NativeArguments args) { 447 void FUNCTION_NAME(File_CreateLink)(Dart_NativeArguments args) {
490 if (Dart_IsString(Dart_GetNativeArgument(args, 0)) && 448 if (Dart_IsString(Dart_GetNativeArgument(args, 0)) &&
491 Dart_IsString(Dart_GetNativeArgument(args, 1))) { 449 Dart_IsString(Dart_GetNativeArgument(args, 1))) {
492 const char* name = 450 const char* name =
493 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 451 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
494 const char* target = 452 const char* target =
495 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); 453 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1));
496 if (!File::CreateLink(name, target)) { 454 if (!File::CreateLink(name, target)) {
497 Dart_Handle err = DartUtils::NewDartOSError(); 455 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
498 if (Dart_IsError(err)) Dart_PropagateError(err);
499 Dart_SetReturnValue(args, err);
500 } 456 }
501 } else { 457 } else {
502 Dart_Handle err = DartUtils::NewDartArgumentError( 458 Dart_Handle err = DartUtils::NewDartArgumentError(
503 "Non-string argument to Link.create"); 459 "Non-string argument to Link.create");
504 if (Dart_IsError(err)) Dart_PropagateError(err);
505 Dart_SetReturnValue(args, err); 460 Dart_SetReturnValue(args, err);
506 } 461 }
507 } 462 }
508 463
509 464
510 void FUNCTION_NAME(File_LinkTarget)(Dart_NativeArguments args) { 465 void FUNCTION_NAME(File_LinkTarget)(Dart_NativeArguments args) {
511 if (Dart_IsString(Dart_GetNativeArgument(args, 0))) { 466 if (Dart_IsString(Dart_GetNativeArgument(args, 0))) {
512 const char* name = 467 const char* name =
513 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 468 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
514 char* target = File::LinkTarget(name); 469 char* target = File::LinkTarget(name);
515 if (target == NULL) { 470 if (target == NULL) {
516 Dart_Handle err = DartUtils::NewDartOSError(); 471 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
517 if (Dart_IsError(err)) Dart_PropagateError(err);
518 Dart_SetReturnValue(args, err);
519 } else { 472 } else {
520 Dart_SetReturnValue(args, DartUtils::NewString(target)); 473 Dart_SetReturnValue(args, DartUtils::NewString(target));
521 free(target); 474 free(target);
522 } 475 }
523 } else { 476 } else {
524 Dart_Handle err = DartUtils::NewDartArgumentError( 477 Dart_Handle err = DartUtils::NewDartArgumentError(
525 "Non-string argument to Link.target"); 478 "Non-string argument to Link.target");
526 if (Dart_IsError(err)) Dart_PropagateError(err);
527 Dart_SetReturnValue(args, err); 479 Dart_SetReturnValue(args, err);
528 } 480 }
529 } 481 }
530 482
531 483
532 void FUNCTION_NAME(File_Delete)(Dart_NativeArguments args) { 484 void FUNCTION_NAME(File_Delete)(Dart_NativeArguments args) {
533 const char* str = 485 const char* str =
534 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 486 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
535 bool result = File::Delete(str); 487 bool result = File::Delete(str);
536 if (result) { 488 if (result) {
537 Dart_SetReturnValue(args, Dart_NewBoolean(result)); 489 Dart_SetReturnValue(args, Dart_NewBoolean(result));
538 } else { 490 } else {
539 Dart_Handle err = DartUtils::NewDartOSError(); 491 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
540 if (Dart_IsError(err)) Dart_PropagateError(err);
541 Dart_SetReturnValue(args, err);
542 } 492 }
543 } 493 }
544 494
545 495
546 void FUNCTION_NAME(File_DeleteLink)(Dart_NativeArguments args) { 496 void FUNCTION_NAME(File_DeleteLink)(Dart_NativeArguments args) {
547 const char* str = 497 const char* str =
548 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 498 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
549 bool result = File::DeleteLink(str); 499 bool result = File::DeleteLink(str);
550 if (result) { 500 if (result) {
551 Dart_SetReturnValue(args, Dart_NewBoolean(result)); 501 Dart_SetReturnValue(args, Dart_NewBoolean(result));
552 } else { 502 } else {
553 Dart_Handle err = DartUtils::NewDartOSError(); 503 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
554 if (Dart_IsError(err)) Dart_PropagateError(err);
555 Dart_SetReturnValue(args, err);
556 } 504 }
557 } 505 }
558 506
559 507
560 void FUNCTION_NAME(File_Rename)(Dart_NativeArguments args) { 508 void FUNCTION_NAME(File_Rename)(Dart_NativeArguments args) {
561 const char* old_path = 509 const char* old_path =
562 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 510 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
563 const char* new_path = 511 const char* new_path =
564 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); 512 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1));
565 bool result = File::Rename(old_path, new_path); 513 bool result = File::Rename(old_path, new_path);
566 if (result) { 514 if (result) {
567 Dart_SetReturnValue(args, Dart_NewBoolean(result)); 515 Dart_SetReturnValue(args, Dart_NewBoolean(result));
568 } else { 516 } else {
569 Dart_Handle err = DartUtils::NewDartOSError(); 517 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
570 if (Dart_IsError(err)) Dart_PropagateError(err);
571 Dart_SetReturnValue(args, err);
572 } 518 }
573 } 519 }
574 520
575 521
576 void FUNCTION_NAME(File_RenameLink)(Dart_NativeArguments args) { 522 void FUNCTION_NAME(File_RenameLink)(Dart_NativeArguments args) {
577 const char* old_path = 523 const char* old_path =
578 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 524 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
579 const char* new_path = 525 const char* new_path =
580 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); 526 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1));
581 bool result = File::RenameLink(old_path, new_path); 527 bool result = File::RenameLink(old_path, new_path);
582 if (result) { 528 if (result) {
583 Dart_SetReturnValue(args, Dart_NewBoolean(result)); 529 Dart_SetReturnValue(args, Dart_NewBoolean(result));
584 } else { 530 } else {
585 Dart_Handle err = DartUtils::NewDartOSError(); 531 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
586 if (Dart_IsError(err)) Dart_PropagateError(err);
587 Dart_SetReturnValue(args, err);
588 } 532 }
589 } 533 }
590 534
591 535
592 void FUNCTION_NAME(File_Copy)(Dart_NativeArguments args) { 536 void FUNCTION_NAME(File_Copy)(Dart_NativeArguments args) {
593 const char* old_path = 537 const char* old_path =
594 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 538 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
595 const char* new_path = 539 const char* new_path =
596 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); 540 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1));
597 bool result = File::Copy(old_path, new_path); 541 bool result = File::Copy(old_path, new_path);
598 if (result) { 542 if (result) {
599 Dart_SetReturnValue(args, Dart_NewBoolean(result)); 543 Dart_SetReturnValue(args, Dart_NewBoolean(result));
600 } else { 544 } else {
601 Dart_Handle err = DartUtils::NewDartOSError(); 545 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
602 if (Dart_IsError(err)) Dart_PropagateError(err);
603 Dart_SetReturnValue(args, err);
604 } 546 }
605 } 547 }
606 548
607 549
608 void FUNCTION_NAME(File_ResolveSymbolicLinks)(Dart_NativeArguments args) { 550 void FUNCTION_NAME(File_ResolveSymbolicLinks)(Dart_NativeArguments args) {
609 const char* str = 551 const char* str =
610 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 552 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
611 char* path = File::GetCanonicalPath(str); 553 char* path = File::GetCanonicalPath(str);
612 if (path != NULL) { 554 if (path != NULL) {
613 Dart_SetReturnValue(args, DartUtils::NewString(path)); 555 Dart_SetReturnValue(args, DartUtils::NewString(path));
614 free(path); 556 free(path);
615 } else { 557 } else {
616 Dart_Handle err = DartUtils::NewDartOSError(); 558 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
617 if (Dart_IsError(err)) Dart_PropagateError(err);
618 Dart_SetReturnValue(args, err);
619 } 559 }
620 } 560 }
621 561
622 562
623 void FUNCTION_NAME(File_OpenStdio)(Dart_NativeArguments args) { 563 void FUNCTION_NAME(File_OpenStdio)(Dart_NativeArguments args) {
624 int64_t fd = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); 564 int64_t fd = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
625 ASSERT(fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO); 565 ASSERT(fd == STDIN_FILENO || fd == STDOUT_FILENO || fd == STDERR_FILENO);
626 File* file = File::OpenStdio(static_cast<int>(fd)); 566 File* file = File::OpenStdio(static_cast<int>(fd));
627 Dart_SetReturnValue(args, Dart_NewInteger(reinterpret_cast<intptr_t>(file))); 567 Dart_SetReturnValue(args, Dart_NewInteger(reinterpret_cast<intptr_t>(file)));
628 } 568 }
(...skipping 12 matching lines...) Expand all
641 Dart_IsBoolean(Dart_GetNativeArgument(args, 1))) { 581 Dart_IsBoolean(Dart_GetNativeArgument(args, 1))) {
642 const char* str = 582 const char* str =
643 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 583 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
644 bool follow_links = 584 bool follow_links =
645 DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 1)); 585 DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 1));
646 File::Type type = File::GetType(str, follow_links); 586 File::Type type = File::GetType(str, follow_links);
647 Dart_SetReturnValue(args, Dart_NewInteger(static_cast<int>(type))); 587 Dart_SetReturnValue(args, Dart_NewInteger(static_cast<int>(type)));
648 } else { 588 } else {
649 Dart_Handle err = DartUtils::NewDartArgumentError( 589 Dart_Handle err = DartUtils::NewDartArgumentError(
650 "Non-string argument to FileSystemEntity.type"); 590 "Non-string argument to FileSystemEntity.type");
651 if (Dart_IsError(err)) Dart_PropagateError(err);
652 Dart_SetReturnValue(args, err); 591 Dart_SetReturnValue(args, err);
653 } 592 }
654 } 593 }
655 594
656 595
657 void FUNCTION_NAME(File_Stat)(Dart_NativeArguments args) { 596 void FUNCTION_NAME(File_Stat)(Dart_NativeArguments args) {
658 if (Dart_IsString(Dart_GetNativeArgument(args, 0))) { 597 if (Dart_IsString(Dart_GetNativeArgument(args, 0))) {
659 const char* path = 598 const char* path =
660 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 599 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
661 600
662 int64_t stat_data[File::kStatSize]; 601 int64_t stat_data[File::kStatSize];
663 File::Stat(path, stat_data); 602 File::Stat(path, stat_data);
664 if (stat_data[File::kType] == File::kDoesNotExist) { 603 if (stat_data[File::kType] == File::kDoesNotExist) {
665 Dart_Handle err = DartUtils::NewDartOSError(); 604 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
666 if (Dart_IsError(err)) Dart_PropagateError(err);
667 Dart_SetReturnValue(args, err);
668 } else { 605 } else {
669 Dart_Handle returned_data = Dart_NewTypedData(Dart_TypedData_kInt64, 606 Dart_Handle returned_data = Dart_NewTypedData(Dart_TypedData_kInt64,
670 File::kStatSize); 607 File::kStatSize);
671 if (Dart_IsError(returned_data)) Dart_PropagateError(returned_data); 608 if (Dart_IsError(returned_data)) Dart_PropagateError(returned_data);
672 Dart_TypedData_Type data_type_unused; 609 Dart_TypedData_Type data_type_unused;
673 void* data_location; 610 void* data_location;
674 intptr_t data_length_unused; 611 intptr_t data_length_unused;
675 Dart_Handle status = Dart_TypedDataAcquireData(returned_data, 612 Dart_Handle status = Dart_TypedDataAcquireData(returned_data,
676 &data_type_unused, 613 &data_type_unused,
677 &data_location, 614 &data_location,
678 &data_length_unused); 615 &data_length_unused);
679 if (Dart_IsError(status)) Dart_PropagateError(status); 616 if (Dart_IsError(status)) Dart_PropagateError(status);
680 memmove(data_location, stat_data, File::kStatSize * sizeof(int64_t)); 617 memmove(data_location, stat_data, File::kStatSize * sizeof(int64_t));
681 status = Dart_TypedDataReleaseData(returned_data); 618 status = Dart_TypedDataReleaseData(returned_data);
682 if (Dart_IsError(status)) Dart_PropagateError(status); 619 if (Dart_IsError(status)) Dart_PropagateError(status);
683 Dart_SetReturnValue(args, returned_data); 620 Dart_SetReturnValue(args, returned_data);
684 } 621 }
685 } else { 622 } else {
686 Dart_Handle err = DartUtils::NewDartArgumentError( 623 Dart_Handle err = DartUtils::NewDartArgumentError(
687 "Non-string argument to FileSystemEntity.stat"); 624 "Non-string argument to FileSystemEntity.stat");
688 if (Dart_IsError(err)) Dart_PropagateError(err);
689 Dart_SetReturnValue(args, err); 625 Dart_SetReturnValue(args, err);
690 } 626 }
691 } 627 }
692 628
693 629
694 void FUNCTION_NAME(File_AreIdentical)(Dart_NativeArguments args) { 630 void FUNCTION_NAME(File_AreIdentical)(Dart_NativeArguments args) {
695 if (Dart_IsString(Dart_GetNativeArgument(args, 0)) && 631 if (Dart_IsString(Dart_GetNativeArgument(args, 0)) &&
696 Dart_IsString(Dart_GetNativeArgument(args, 1))) { 632 Dart_IsString(Dart_GetNativeArgument(args, 1))) {
697 const char* path_1 = 633 const char* path_1 =
698 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 634 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
699 const char* path_2 = 635 const char* path_2 =
700 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); 636 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1));
701 File::Identical result = File::AreIdentical(path_1, path_2); 637 File::Identical result = File::AreIdentical(path_1, path_2);
702 if (result == File::kError) { 638 if (result == File::kError) {
703 Dart_Handle err = DartUtils::NewDartOSError(); 639 Dart_SetReturnValue(args, DartUtils::NewDartOSError());
704 if (Dart_IsError(err)) Dart_PropagateError(err);
705 Dart_SetReturnValue(args, err);
706 } else { 640 } else {
707 Dart_SetReturnValue(args, Dart_NewBoolean(result == File::kIdentical)); 641 Dart_SetReturnValue(args, Dart_NewBoolean(result == File::kIdentical));
708 } 642 }
709 } else { 643 } else {
710 Dart_Handle err = DartUtils::NewDartArgumentError( 644 Dart_Handle err = DartUtils::NewDartArgumentError(
711 "Non-string argument to FileSystemEntity.identical"); 645 "Non-string argument to FileSystemEntity.identical");
712 if (Dart_IsError(err)) Dart_PropagateError(err);
713 Dart_SetReturnValue(args, err); 646 Dart_SetReturnValue(args, err);
714 } 647 }
715 } 648 }
716 649
717 650
718 static int64_t CObjectInt32OrInt64ToInt64(CObject* cobject) { 651 static int64_t CObjectInt32OrInt64ToInt64(CObject* cobject) {
719 ASSERT(cobject->IsInt32OrInt64()); 652 ASSERT(cobject->IsInt32OrInt64());
720 int64_t result; 653 int64_t result;
721 if (cobject->IsInt32()) { 654 if (cobject->IsInt32()) {
722 CObjectInt32 value(cobject); 655 CObjectInt32 value(cobject);
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after
1297 } 1230 }
1298 } else { 1231 } else {
1299 return CObject::FileClosedError(); 1232 return CObject::FileClosedError();
1300 } 1233 }
1301 } 1234 }
1302 return CObject::IllegalArgumentError(); 1235 return CObject::IllegalArgumentError();
1303 } 1236 }
1304 1237
1305 } // namespace bin 1238 } // namespace bin
1306 } // namespace dart 1239 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/directory.cc ('k') | runtime/bin/file_system_watcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698