OLD | NEW |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |