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

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

Issue 14907002: dart:io | Implement asynchronous versions of FileSystemEntity methods. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Add implementation of FileSystemEntity.type, and refactor error handling. Created 7 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/file.h ('k') | runtime/bin/file_system_entity_patch.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) 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/io_buffer.h" 9 #include "bin/io_buffer.h"
10 #include "bin/thread.h" 10 #include "bin/thread.h"
(...skipping 1071 matching lines...) Expand 10 before | Expand all | Expand 10 after
1082 free(target); 1082 free(target);
1083 return result; 1083 return result;
1084 } else { 1084 } else {
1085 return CObject::NewOSError(); 1085 return CObject::NewOSError();
1086 } 1086 }
1087 } 1087 }
1088 return CObject::IllegalArgumentError(); 1088 return CObject::IllegalArgumentError();
1089 } 1089 }
1090 1090
1091 1091
1092 static CObject* FileTypeRequest(const CObjectArray& request) {
1093 if (request.Length() == 3 &&
1094 request[1]->IsString() &&
1095 request[2]->IsBool()) {
1096 CObjectString path(request[1]);
1097 CObjectBool follow_links(request[2]);
1098 File::Type type = File::GetType(path.CString(), follow_links.Value());
1099 return new CObjectInt32(CObject::NewInt32(type));
1100 }
1101 return CObject::IllegalArgumentError();
1102 }
1103
1104
1105 static CObject* FileIdenticalRequest(const CObjectArray& request) {
1106 if (request.Length() == 3 &&
1107 request[1]->IsString() &&
1108 request[2]->IsString()) {
1109 CObjectString path1(request[1]);
1110 CObjectString path2(request[2]);
1111 File::Identical result = File::AreIdentical(path1.CString(),
1112 path2.CString());
1113 if (result == File::kError) {
1114 return CObject::NewOSError();
1115 } else if (result == File::kIdentical) {
1116 return CObject::True();
1117 } else {
1118 return CObject::False();
1119 }
1120 }
1121 return CObject::IllegalArgumentError();
1122 }
1123
1124
1092 static void FileService(Dart_Port dest_port_id, 1125 static void FileService(Dart_Port dest_port_id,
1093 Dart_Port reply_port_id, 1126 Dart_Port reply_port_id,
1094 Dart_CObject* message) { 1127 Dart_CObject* message) {
1095 CObject* response = CObject::IllegalArgumentError(); 1128 CObject* response = CObject::IllegalArgumentError();
1096 CObjectArray request(message); 1129 CObjectArray request(message);
1097 if (message->type == Dart_CObject::kArray) { 1130 if (message->type == Dart_CObject::kArray) {
1098 if (request.Length() > 1 && request[0]->IsInt32()) { 1131 if (request.Length() > 1 && request[0]->IsInt32()) {
1099 CObjectInt32 requestType(request[0]); 1132 CObjectInt32 requestType(request[0]);
1100 switch (requestType.Value()) { 1133 switch (requestType.Value()) {
1101 case File::kExistsRequest: 1134 case File::kExistsRequest:
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
1157 break; 1190 break;
1158 case File::kDeleteLinkRequest: 1191 case File::kDeleteLinkRequest:
1159 response = FileDeleteLinkRequest(request); 1192 response = FileDeleteLinkRequest(request);
1160 break; 1193 break;
1161 case File::kCreateLinkRequest: 1194 case File::kCreateLinkRequest:
1162 response = FileCreateLinkRequest(request); 1195 response = FileCreateLinkRequest(request);
1163 break; 1196 break;
1164 case File::kLinkTargetRequest: 1197 case File::kLinkTargetRequest:
1165 response = FileLinkTargetRequest(request); 1198 response = FileLinkTargetRequest(request);
1166 break; 1199 break;
1200 case File::kTypeRequest:
1201 response = FileTypeRequest(request);
1202 break;
1203 case File::kIdenticalRequest:
1204 response = FileIdenticalRequest(request);
1205 break;
1167 default: 1206 default:
1168 UNREACHABLE(); 1207 UNREACHABLE();
1169 } 1208 }
1170 } 1209 }
1171 } 1210 }
1172 1211
1173 Dart_PostCObject(reply_port_id, response->AsApiCObject()); 1212 Dart_PostCObject(reply_port_id, response->AsApiCObject());
1174 } 1213 }
1175 1214
1176 1215
1177 Dart_Port File::GetServicePort() { 1216 Dart_Port File::GetServicePort() {
1178 return file_service_.GetServicePort(); 1217 return file_service_.GetServicePort();
1179 } 1218 }
1180 1219
1181 1220
1182 void FUNCTION_NAME(File_NewServicePort)(Dart_NativeArguments args) { 1221 void FUNCTION_NAME(File_NewServicePort)(Dart_NativeArguments args) {
1183 Dart_EnterScope(); 1222 Dart_EnterScope();
1184 Dart_SetReturnValue(args, Dart_Null()); 1223 Dart_SetReturnValue(args, Dart_Null());
1185 Dart_Port service_port = File::GetServicePort(); 1224 Dart_Port service_port = File::GetServicePort();
1186 if (service_port != ILLEGAL_PORT) { 1225 if (service_port != ILLEGAL_PORT) {
1187 // Return a send port for the service port. 1226 // Return a send port for the service port.
1188 Dart_Handle send_port = Dart_NewSendPort(service_port); 1227 Dart_Handle send_port = Dart_NewSendPort(service_port);
1189 Dart_SetReturnValue(args, send_port); 1228 Dart_SetReturnValue(args, send_port);
1190 } 1229 }
1191 Dart_ExitScope(); 1230 Dart_ExitScope();
1192 } 1231 }
1193 1232
1194 } // namespace bin 1233 } // namespace bin
1195 } // namespace dart 1234 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/bin/file.h ('k') | runtime/bin/file_system_entity_patch.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698