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

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

Issue 15018011: dart:io | Add FileSystemEntity.stat() and FileStat class. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix Windows failures. 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
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 564 matching lines...) Expand 10 before | Expand all | Expand 10 after
575 } else { 575 } else {
576 Dart_Handle err = DartUtils::NewDartArgumentError( 576 Dart_Handle err = DartUtils::NewDartArgumentError(
577 "Non-string argument to FileSystemEntity.type"); 577 "Non-string argument to FileSystemEntity.type");
578 if (Dart_IsError(err)) Dart_PropagateError(err); 578 if (Dart_IsError(err)) Dart_PropagateError(err);
579 Dart_SetReturnValue(args, err); 579 Dart_SetReturnValue(args, err);
580 } 580 }
581 Dart_ExitScope(); 581 Dart_ExitScope();
582 } 582 }
583 583
584 584
585 void FUNCTION_NAME(File_Stat)(Dart_NativeArguments args) {
586 Dart_EnterScope();
587 if (Dart_IsString(Dart_GetNativeArgument(args, 0))) {
588 const char* path =
589 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
590
591 int64_t stat_data[File::kStatSize];
592 File::Stat(path, stat_data);
593 Dart_Handle returned_data = Dart_NewTypedData(kInt64, File::kStatSize);
594 if (Dart_IsError(returned_data)) Dart_PropagateError(returned_data);
595 Dart_TypedData_Type data_type_unused;
596 void* data_location;
597 intptr_t data_length_unused;
598 Dart_Handle status = Dart_TypedDataAcquireData(returned_data,
599 &data_type_unused,
600 &data_location,
601 &data_length_unused);
602 if (Dart_IsError(status)) Dart_PropagateError(status);
603 memmove(data_location, stat_data, File::kStatSize * sizeof(int64_t));
604 status = Dart_TypedDataReleaseData(returned_data);
605 if (Dart_IsError(status)) Dart_PropagateError(status);
606 Dart_SetReturnValue(args, returned_data);
607 } else {
608 Dart_Handle err = DartUtils::NewDartArgumentError(
609 "Non-string argument to FileSystemEntity.type");
Søren Gjesse 2013/05/14 13:50:36 .type -> .stat
Bill Hesse 2013/05/14 16:33:58 Done.
610 if (Dart_IsError(err)) Dart_PropagateError(err);
611 Dart_SetReturnValue(args, err);
612 }
613 Dart_ExitScope();
614 }
615
616
585 void FUNCTION_NAME(File_AreIdentical)(Dart_NativeArguments args) { 617 void FUNCTION_NAME(File_AreIdentical)(Dart_NativeArguments args) {
586 Dart_EnterScope(); 618 Dart_EnterScope();
587 if (Dart_IsString(Dart_GetNativeArgument(args, 0)) && 619 if (Dart_IsString(Dart_GetNativeArgument(args, 0)) &&
588 Dart_IsString(Dart_GetNativeArgument(args, 1))) { 620 Dart_IsString(Dart_GetNativeArgument(args, 1))) {
589 const char* path_1 = 621 const char* path_1 =
590 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); 622 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
591 const char* path_2 = 623 const char* path_2 =
592 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); 624 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1));
593 File::Identical result = File::AreIdentical(path_1, path_2); 625 File::Identical result = File::AreIdentical(path_1, path_2);
594 if (result == File::kError) { 626 if (result == File::kError) {
(...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after
1115 } else if (result == File::kIdentical) { 1147 } else if (result == File::kIdentical) {
1116 return CObject::True(); 1148 return CObject::True();
1117 } else { 1149 } else {
1118 return CObject::False(); 1150 return CObject::False();
1119 } 1151 }
1120 } 1152 }
1121 return CObject::IllegalArgumentError(); 1153 return CObject::IllegalArgumentError();
1122 } 1154 }
1123 1155
1124 1156
1157 static CObject* FileStatRequest(const CObjectArray& request) {
1158 if (request.Length() == 2 &&
1159 request[1]->IsString()) {
1160 int64_t data[File::kStatSize];
1161 CObjectString path(request[1]);
1162 File::Stat(path.CString(), data);
1163 CObjectArray* result =
1164 new CObjectArray(CObject::NewArray(File::kStatSize));
1165 for (int i = 0; i < File::kStatSize; ++i) {
1166 result->SetAt(i, new CObjectInt64(CObject::NewInt64(data[i])));
1167 }
1168 CObjectArray* wrapper = new CObjectArray(CObject::NewArray(2));
1169 wrapper->SetAt(0, new CObjectInt32(CObject::NewInt32(CObject::kSuccess)));
1170 wrapper->SetAt(1, result);
1171 return wrapper;
1172 }
1173 return CObject::IllegalArgumentError();
1174 }
1175
1176
1125 static void FileService(Dart_Port dest_port_id, 1177 static void FileService(Dart_Port dest_port_id,
1126 Dart_Port reply_port_id, 1178 Dart_Port reply_port_id,
1127 Dart_CObject* message) { 1179 Dart_CObject* message) {
1128 CObject* response = CObject::IllegalArgumentError(); 1180 CObject* response = CObject::IllegalArgumentError();
1129 CObjectArray request(message); 1181 CObjectArray request(message);
1130 if (message->type == Dart_CObject::kArray) { 1182 if (message->type == Dart_CObject::kArray) {
1131 if (request.Length() > 1 && request[0]->IsInt32()) { 1183 if (request.Length() > 1 && request[0]->IsInt32()) {
1132 CObjectInt32 requestType(request[0]); 1184 CObjectInt32 requestType(request[0]);
1133 switch (requestType.Value()) { 1185 switch (requestType.Value()) {
1134 case File::kExistsRequest: 1186 case File::kExistsRequest:
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
1196 break; 1248 break;
1197 case File::kLinkTargetRequest: 1249 case File::kLinkTargetRequest:
1198 response = FileLinkTargetRequest(request); 1250 response = FileLinkTargetRequest(request);
1199 break; 1251 break;
1200 case File::kTypeRequest: 1252 case File::kTypeRequest:
1201 response = FileTypeRequest(request); 1253 response = FileTypeRequest(request);
1202 break; 1254 break;
1203 case File::kIdenticalRequest: 1255 case File::kIdenticalRequest:
1204 response = FileIdenticalRequest(request); 1256 response = FileIdenticalRequest(request);
1205 break; 1257 break;
1258 case File::kStatRequest:
1259 response = FileStatRequest(request);
1260 break;
1206 default: 1261 default:
1207 UNREACHABLE(); 1262 UNREACHABLE();
1208 } 1263 }
1209 } 1264 }
1210 } 1265 }
1211 1266
1212 Dart_PostCObject(reply_port_id, response->AsApiCObject()); 1267 Dart_PostCObject(reply_port_id, response->AsApiCObject());
1213 } 1268 }
1214 1269
1215 1270
1216 Dart_Port File::GetServicePort() { 1271 Dart_Port File::GetServicePort() {
1217 return file_service_.GetServicePort(); 1272 return file_service_.GetServicePort();
1218 } 1273 }
1219 1274
1220 1275
1221 void FUNCTION_NAME(File_NewServicePort)(Dart_NativeArguments args) { 1276 void FUNCTION_NAME(File_NewServicePort)(Dart_NativeArguments args) {
1222 Dart_EnterScope(); 1277 Dart_EnterScope();
1223 Dart_SetReturnValue(args, Dart_Null()); 1278 Dart_SetReturnValue(args, Dart_Null());
1224 Dart_Port service_port = File::GetServicePort(); 1279 Dart_Port service_port = File::GetServicePort();
1225 if (service_port != ILLEGAL_PORT) { 1280 if (service_port != ILLEGAL_PORT) {
1226 // Return a send port for the service port. 1281 // Return a send port for the service port.
1227 Dart_Handle send_port = Dart_NewSendPort(service_port); 1282 Dart_Handle send_port = Dart_NewSendPort(service_port);
1228 Dart_SetReturnValue(args, send_port); 1283 Dart_SetReturnValue(args, send_port);
1229 } 1284 }
1230 Dart_ExitScope(); 1285 Dart_ExitScope();
1231 } 1286 }
1232 1287
1233 } // namespace bin 1288 } // namespace bin
1234 } // namespace dart 1289 } // namespace dart
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698