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

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

Issue 23444037: dart:io | Change File.fullPath to FileSystemEntity.resolveSymbolicLinks. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Document resolution of link\.. on Windows. Created 7 years, 3 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/file.h"
8 #include "bin/thread.h" 9 #include "bin/thread.h"
9 #include "include/dart_api.h" 10 #include "include/dart_api.h"
10 #include "platform/assert.h" 11 #include "platform/assert.h"
11 12
12 13
13 namespace dart { 14 namespace dart {
14 namespace bin { 15 namespace bin {
15 16
16 // Forward declaration. 17 // Forward declaration.
17 static void DirectoryService(Dart_Port, Dart_Port, Dart_CObject*); 18 static void DirectoryService(Dart_Port, Dart_Port, Dart_CObject*);
(...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after
284 CObjectString path(request[1]); 285 CObjectString path(request[1]);
285 CObjectString new_path(request[2]); 286 CObjectString new_path(request[2]);
286 bool completed = Directory::Rename(path.CString(), new_path.CString()); 287 bool completed = Directory::Rename(path.CString(), new_path.CString());
287 if (completed) return CObject::True(); 288 if (completed) return CObject::True();
288 return CObject::NewOSError(); 289 return CObject::NewOSError();
289 } 290 }
290 return CObject::IllegalArgumentError(); 291 return CObject::IllegalArgumentError();
291 } 292 }
292 293
293 294
295 static CObject* DirectoryResolveSymbolicLinksRequest(
Anders Johnsen 2013/09/09 12:24:48 Why don't we use the file.cc version for all paths
Bill Hesse 2013/09/13 06:34:13 Done.
296 const CObjectArray& request) {
297 if (request.Length() == 2 && request[1]->IsString()) {
298 CObjectString filename(request[1]);
299 char* result = File::GetCanonicalPath(filename.CString());
300 if (result != NULL) {
301 CObject* path = new CObjectString(CObject::NewString(result));
302 free(result);
303 return path;
304 } else {
305 return CObject::NewOSError();
306 }
307 }
308 return CObject::IllegalArgumentError();
309 }
310
311
294 static void DirectoryService(Dart_Port dest_port_id, 312 static void DirectoryService(Dart_Port dest_port_id,
295 Dart_Port reply_port_id, 313 Dart_Port reply_port_id,
296 Dart_CObject* message) { 314 Dart_CObject* message) {
297 CObject* response = CObject::IllegalArgumentError(); 315 CObject* response = CObject::IllegalArgumentError();
298 CObjectArray request(message); 316 CObjectArray request(message);
299 if (message->type == Dart_CObject_kArray) { 317 if (message->type == Dart_CObject_kArray) {
300 if (request.Length() > 1 && request[0]->IsInt32()) { 318 if (request.Length() > 1 && request[0]->IsInt32()) {
301 CObjectInt32 requestType(request[0]); 319 CObjectInt32 requestType(request[0]);
302 switch (requestType.Value()) { 320 switch (requestType.Value()) {
303 case Directory::kCreateRequest: 321 case Directory::kCreateRequest:
(...skipping 13 matching lines...) Expand all
317 break; 335 break;
318 case Directory::kListNextRequest: 336 case Directory::kListNextRequest:
319 response = DirectoryListNextRequest(request); 337 response = DirectoryListNextRequest(request);
320 break; 338 break;
321 case Directory::kListStopRequest: 339 case Directory::kListStopRequest:
322 response = DirectoryListStopRequest(request); 340 response = DirectoryListStopRequest(request);
323 break; 341 break;
324 case Directory::kRenameRequest: 342 case Directory::kRenameRequest:
325 response = DirectoryRenameRequest(request, reply_port_id); 343 response = DirectoryRenameRequest(request, reply_port_id);
326 break; 344 break;
345 case Directory::kResolveSymbolicLinksRequest:
346 response = DirectoryResolveSymbolicLinksRequest(request);
347 break;
327 default: 348 default:
328 UNREACHABLE(); 349 UNREACHABLE();
329 } 350 }
330 } 351 }
331 } 352 }
332 353
333 Dart_PostCObject(reply_port_id, response->AsApiCObject()); 354 Dart_PostCObject(reply_port_id, response->AsApiCObject());
334 } 355 }
335 356
336 357
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
467 if (listing->error()) { 488 if (listing->error()) {
468 listing->HandleError("Invalid path"); 489 listing->HandleError("Invalid path");
469 listing->HandleDone(); 490 listing->HandleDone();
470 } else { 491 } else {
471 while (ListNext(listing)) {} 492 while (ListNext(listing)) {}
472 } 493 }
473 } 494 }
474 495
475 } // namespace bin 496 } // namespace bin
476 } // namespace dart 497 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/directory.h ('k') | runtime/bin/file.h » ('j') | runtime/bin/file_win.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698