Chromium Code Reviews| OLD | NEW |
|---|---|
| 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/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/thread.h" | 9 #include "bin/thread.h" |
| 10 #include "bin/utils.h" | 10 #include "bin/utils.h" |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 72 // reading. This is to prevent the opening of directories as | 72 // reading. This is to prevent the opening of directories as |
| 73 // files. Directories can be opened for reading using the posix | 73 // files. Directories can be opened for reading using the posix |
| 74 // 'open' call. | 74 // 'open' call. |
| 75 File* file = NULL; | 75 File* file = NULL; |
| 76 file = File::Open(filename, file_mode); | 76 file = File::Open(filename, file_mode); |
| 77 if (file != NULL) { | 77 if (file != NULL) { |
| 78 Dart_SetReturnValue(args, | 78 Dart_SetReturnValue(args, |
| 79 Dart_NewInteger(reinterpret_cast<intptr_t>(file))); | 79 Dart_NewInteger(reinterpret_cast<intptr_t>(file))); |
| 80 } else { | 80 } else { |
| 81 Dart_Handle err = DartUtils::NewDartOSError(); | 81 Dart_Handle err = DartUtils::NewDartOSError(); |
| 82 if (Dart_IsError(err)) { | 82 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 83 Dart_PropagateError(err); | |
| 84 } | |
| 85 Dart_SetReturnValue(args, err); | 83 Dart_SetReturnValue(args, err); |
| 86 } | 84 } |
| 87 Dart_ExitScope(); | 85 Dart_ExitScope(); |
| 88 } | 86 } |
| 89 | 87 |
| 90 | 88 |
| 91 void FUNCTION_NAME(File_Exists)(Dart_NativeArguments args) { | 89 void FUNCTION_NAME(File_Exists)(Dart_NativeArguments args) { |
| 92 Dart_EnterScope(); | 90 Dart_EnterScope(); |
| 93 const char* filename = | 91 const char* filename = |
| 94 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); | 92 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); |
| 95 bool exists = File::Exists(filename); | 93 bool exists = File::Exists(filename); |
| 96 Dart_SetReturnValue(args, Dart_NewBoolean(exists)); | 94 Dart_SetReturnValue(args, Dart_NewBoolean(exists)); |
| 97 Dart_ExitScope(); | 95 Dart_ExitScope(); |
| 98 } | 96 } |
| 99 | 97 |
| 100 | 98 |
| 101 void FUNCTION_NAME(File_Close)(Dart_NativeArguments args) { | 99 void FUNCTION_NAME(File_Close)(Dart_NativeArguments args) { |
| 102 Dart_EnterScope(); | 100 Dart_EnterScope(); |
| 103 intptr_t return_value = -1; | |
| 104 intptr_t value = | 101 intptr_t value = |
| 105 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 102 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 106 File* file = reinterpret_cast<File*>(value); | 103 File* file = reinterpret_cast<File*>(value); |
| 107 if (file != NULL) { | 104 ASSERT(file != NULL); |
| 108 delete file; | 105 delete file; |
| 109 return_value = 0; | 106 Dart_SetReturnValue(args, Dart_NewInteger(0)); |
| 110 } | |
| 111 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); | |
| 112 Dart_ExitScope(); | 107 Dart_ExitScope(); |
| 113 } | 108 } |
| 114 | 109 |
| 115 | 110 |
| 116 void FUNCTION_NAME(File_ReadByte)(Dart_NativeArguments args) { | 111 void FUNCTION_NAME(File_ReadByte)(Dart_NativeArguments args) { |
| 117 Dart_EnterScope(); | 112 Dart_EnterScope(); |
| 118 intptr_t value = | 113 intptr_t value = |
| 119 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 114 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 120 File* file = reinterpret_cast<File*>(value); | 115 File* file = reinterpret_cast<File*>(value); |
| 121 if (file != NULL) { | 116 ASSERT(file != NULL); |
| 122 uint8_t buffer; | 117 uint8_t buffer; |
| 123 int bytes_read = file->Read(reinterpret_cast<void*>(&buffer), 1); | 118 int bytes_read = file->Read(reinterpret_cast<void*>(&buffer), 1); |
| 124 if (bytes_read == 1) { | 119 if (bytes_read == 1) { |
| 125 Dart_SetReturnValue(args, Dart_NewInteger(buffer)); | 120 Dart_SetReturnValue(args, Dart_NewInteger(buffer)); |
| 126 } else if (bytes_read == 0) { | 121 } else if (bytes_read == 0) { |
| 127 Dart_SetReturnValue(args, Dart_NewInteger(-1)); | 122 Dart_SetReturnValue(args, Dart_NewInteger(-1)); |
| 128 } else { | 123 } else { |
| 129 Dart_Handle err = DartUtils::NewDartOSError(); | 124 Dart_Handle err = DartUtils::NewDartOSError(); |
| 130 if (Dart_IsError(err)) { | 125 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 131 Dart_PropagateError(err); | 126 Dart_SetReturnValue(args, err); |
| 132 } | |
| 133 Dart_SetReturnValue(args, err); | |
| 134 } | |
| 135 } | 127 } |
| 136 Dart_ExitScope(); | 128 Dart_ExitScope(); |
| 137 } | 129 } |
| 138 | 130 |
| 139 | 131 |
| 140 void FUNCTION_NAME(File_WriteByte)(Dart_NativeArguments args) { | 132 void FUNCTION_NAME(File_WriteByte)(Dart_NativeArguments args) { |
| 141 Dart_EnterScope(); | 133 Dart_EnterScope(); |
| 142 intptr_t value = | 134 intptr_t file_ptr = |
| 143 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 135 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 144 File* file = reinterpret_cast<File*>(value); | 136 File* file = reinterpret_cast<File*>(file_ptr); |
| 145 if (file != NULL) { | 137 ASSERT(file != NULL); |
|
Søren Gjesse
2012/05/16 11:54:11
How about adding a function to do this
int64_t va
Mads Ager (google)
2012/05/16 12:45:19
Maybe we should just change GetIntegerValue to do
| |
| 146 int64_t value = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1)); | 138 Dart_Handle value_handle = Dart_GetNativeArgument(args, 1); |
| 139 bool valid_argument = Dart_IsInteger(value_handle); | |
| 140 if (valid_argument) { | |
| 141 Dart_IntegerFitsIntoInt64(value_handle, &valid_argument); | |
| 142 } | |
| 143 if (valid_argument) { | |
| 144 int64_t value = DartUtils::GetIntegerValue(value_handle); | |
| 147 uint8_t buffer = static_cast<uint8_t>(value & 0xff); | 145 uint8_t buffer = static_cast<uint8_t>(value & 0xff); |
| 148 int bytes_written = file->Write(reinterpret_cast<void*>(&buffer), 1); | 146 int bytes_written = file->Write(reinterpret_cast<void*>(&buffer), 1); |
| 149 if (bytes_written >= 0) { | 147 if (bytes_written >= 0) { |
| 150 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written)); | 148 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written)); |
| 151 } else { | 149 } else { |
| 152 Dart_Handle err = DartUtils::NewDartOSError(); | 150 Dart_Handle err = DartUtils::NewDartOSError(); |
| 153 if (Dart_IsError(err)) { | 151 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 154 Dart_PropagateError(err); | |
| 155 } | |
| 156 Dart_SetReturnValue(args, err); | 152 Dart_SetReturnValue(args, err); |
| 157 } | 153 } |
| 154 } else { | |
| 155 OSError os_error(-1, "Invalid argument", OSError::kUnknown); | |
| 156 Dart_Handle err = DartUtils::NewDartOSError(&os_error); | |
| 157 if (Dart_IsError(err)) Dart_PropagateError(err); | |
| 158 Dart_SetReturnValue(args, err); | |
| 158 } | 159 } |
| 159 Dart_ExitScope(); | 160 Dart_ExitScope(); |
| 160 } | 161 } |
| 161 | 162 |
| 162 | 163 |
| 163 void FUNCTION_NAME(File_WriteString)(Dart_NativeArguments args) { | 164 void FUNCTION_NAME(File_WriteString)(Dart_NativeArguments args) { |
| 164 Dart_EnterScope(); | 165 Dart_EnterScope(); |
| 165 intptr_t value = | 166 intptr_t value = |
| 166 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 167 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 167 File* file = reinterpret_cast<File*>(value); | 168 File* file = reinterpret_cast<File*>(value); |
| 168 if (file != NULL) { | 169 ASSERT(file != NULL); |
| 169 const char* str = | 170 const char* str = |
| 170 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); | 171 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); |
| 171 int bytes_written = file->Write(reinterpret_cast<const void*>(str), | 172 int bytes_written = file->Write(reinterpret_cast<const void*>(str), |
| 172 strlen(str)); | 173 strlen(str)); |
| 173 if (bytes_written >= 0) { | 174 if (bytes_written >= 0) { |
| 174 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written)); | 175 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written)); |
| 175 } else { | 176 } else { |
| 176 Dart_Handle err = DartUtils::NewDartOSError(); | 177 Dart_Handle err = DartUtils::NewDartOSError(); |
| 177 if (Dart_IsError(err)) { | 178 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 178 Dart_PropagateError(err); | 179 Dart_SetReturnValue(args, err); |
| 179 } | |
| 180 Dart_SetReturnValue(args, err); | |
| 181 } | |
| 182 } | 180 } |
| 183 Dart_ExitScope(); | 181 Dart_ExitScope(); |
| 184 } | 182 } |
| 185 | 183 |
| 186 | 184 |
| 187 void FUNCTION_NAME(File_ReadList)(Dart_NativeArguments args) { | 185 void FUNCTION_NAME(File_ReadList)(Dart_NativeArguments args) { |
| 188 Dart_EnterScope(); | 186 Dart_EnterScope(); |
| 189 intptr_t value = | 187 intptr_t value = |
| 190 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 188 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 191 File* file = reinterpret_cast<File*>(value); | 189 File* file = reinterpret_cast<File*>(value); |
| 192 if (file != NULL) { | 190 ASSERT(file != NULL); |
| 193 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); | 191 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); |
| 194 ASSERT(Dart_IsList(buffer_obj)); | 192 ASSERT(Dart_IsList(buffer_obj)); |
| 195 int64_t offset = | 193 int64_t offset = |
| 196 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)); | 194 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)); |
| 197 int64_t length = | 195 int64_t length = |
| 198 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); | 196 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); |
| 199 intptr_t array_len = 0; | 197 intptr_t array_len = 0; |
| 200 Dart_Handle result = Dart_ListLength(buffer_obj, &array_len); | 198 Dart_Handle result = Dart_ListLength(buffer_obj, &array_len); |
| 199 if (Dart_IsError(result)) Dart_PropagateError(result); | |
| 200 ASSERT((offset + length) <= array_len); | |
| 201 uint8_t* buffer = new uint8_t[length]; | |
| 202 int bytes_read = file->Read(reinterpret_cast<void*>(buffer), length); | |
| 203 if (bytes_read >= 0) { | |
| 204 result = | |
|
Søren Gjesse
2012/05/16 11:54:11
Fits one line?
Mads Ager (google)
2012/05/16 12:45:19
Done.
| |
| 205 Dart_ListSetAsBytes(buffer_obj, offset, buffer, bytes_read); | |
| 201 if (Dart_IsError(result)) { | 206 if (Dart_IsError(result)) { |
| 207 delete[] buffer; | |
| 202 Dart_PropagateError(result); | 208 Dart_PropagateError(result); |
| 203 } | 209 } |
| 204 ASSERT((offset + length) <= array_len); | 210 Dart_SetReturnValue(args, Dart_NewInteger(bytes_read)); |
| 205 uint8_t* buffer = new uint8_t[length]; | 211 } else { |
| 206 int bytes_read = file->Read(reinterpret_cast<void*>(buffer), length); | 212 Dart_Handle err = DartUtils::NewDartOSError(); |
| 207 if (bytes_read >= 0) { | 213 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 208 result = | 214 Dart_SetReturnValue(args, err); |
| 209 Dart_ListSetAsBytes(buffer_obj, offset, buffer, bytes_read); | |
| 210 if (Dart_IsError(result)) { | |
| 211 delete[] buffer; | |
| 212 Dart_PropagateError(result); | |
| 213 } | |
| 214 Dart_SetReturnValue(args, Dart_NewInteger(bytes_read)); | |
| 215 } else { | |
| 216 Dart_Handle err = DartUtils::NewDartOSError(); | |
| 217 if (Dart_IsError(err)) { | |
| 218 Dart_PropagateError(err); | |
| 219 } | |
| 220 Dart_SetReturnValue(args, err); | |
| 221 } | |
| 222 delete[] buffer; | |
| 223 } | 215 } |
| 216 delete[] buffer; | |
| 224 Dart_ExitScope(); | 217 Dart_ExitScope(); |
| 225 } | 218 } |
| 226 | 219 |
| 227 | 220 |
| 228 void FUNCTION_NAME(File_WriteList)(Dart_NativeArguments args) { | 221 void FUNCTION_NAME(File_WriteList)(Dart_NativeArguments args) { |
| 229 Dart_EnterScope(); | 222 Dart_EnterScope(); |
| 230 intptr_t value = | 223 intptr_t value = |
| 231 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 224 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 232 File* file = reinterpret_cast<File*>(value); | 225 File* file = reinterpret_cast<File*>(value); |
| 233 if (file != NULL) { | 226 ASSERT(file != NULL); |
| 234 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); | 227 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); |
| 235 ASSERT(Dart_IsList(buffer_obj)); | 228 ASSERT(Dart_IsList(buffer_obj)); |
| 236 int64_t offset = | 229 int64_t offset = |
| 237 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)); | 230 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)); |
|
Søren Gjesse
2012/05/16 11:54:11
Shouldn't we check more here? DartUtils::GetIntege
Mads Ager (google)
2012/05/16 12:45:19
Oh, yes, here and many other places. I just haven'
| |
| 238 int64_t length = | 231 int64_t length = |
| 239 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); | 232 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); |
| 240 intptr_t buffer_len = 0; | 233 intptr_t buffer_len = 0; |
| 241 Dart_Handle result = Dart_ListLength(buffer_obj, &buffer_len); | 234 Dart_Handle result = Dart_ListLength(buffer_obj, &buffer_len); |
| 242 if (Dart_IsError(result)) { | 235 if (Dart_IsError(result)) Dart_PropagateError(result); |
| 243 Dart_PropagateError(result); | 236 ASSERT((offset + length) <= buffer_len); |
| 244 } | 237 uint8_t* buffer = new uint8_t[length]; |
| 245 ASSERT((offset + length) <= buffer_len); | 238 result = Dart_ListGetAsBytes(buffer_obj, offset, buffer, length); |
| 246 uint8_t* buffer = new uint8_t[length]; | 239 if (Dart_IsError(result)) { |
| 247 result = Dart_ListGetAsBytes(buffer_obj, offset, buffer, length); | |
| 248 if (Dart_IsError(result)) { | |
| 249 delete[] buffer; | |
| 250 Dart_PropagateError(result); | |
| 251 } | |
| 252 int bytes_written = file->Write(reinterpret_cast<void*>(buffer), length); | |
| 253 if (bytes_written >= 0) { | |
| 254 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written)); | |
| 255 } else { | |
| 256 Dart_Handle err = DartUtils::NewDartOSError(); | |
| 257 if (Dart_IsError(err)) { | |
| 258 Dart_PropagateError(err); | |
| 259 } | |
| 260 Dart_SetReturnValue(args, err); | |
| 261 } | |
| 262 delete[] buffer; | 240 delete[] buffer; |
| 241 Dart_PropagateError(result); | |
| 263 } | 242 } |
| 243 int bytes_written = file->Write(reinterpret_cast<void*>(buffer), length); | |
| 244 if (bytes_written >= 0) { | |
| 245 Dart_SetReturnValue(args, Dart_NewInteger(bytes_written)); | |
| 246 } else { | |
| 247 Dart_Handle err = DartUtils::NewDartOSError(); | |
| 248 if (Dart_IsError(err)) Dart_PropagateError(err); | |
| 249 Dart_SetReturnValue(args, err); | |
| 250 } | |
| 251 delete[] buffer; | |
| 264 Dart_ExitScope(); | 252 Dart_ExitScope(); |
| 265 } | 253 } |
| 266 | 254 |
| 267 | 255 |
| 268 void FUNCTION_NAME(File_Position)(Dart_NativeArguments args) { | 256 void FUNCTION_NAME(File_Position)(Dart_NativeArguments args) { |
| 269 Dart_EnterScope(); | 257 Dart_EnterScope(); |
| 270 intptr_t value = | 258 intptr_t value = |
| 271 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 259 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 272 File* file = reinterpret_cast<File*>(value); | 260 File* file = reinterpret_cast<File*>(value); |
| 273 if (file != NULL) { | 261 ASSERT(file != NULL); |
| 274 intptr_t return_value = file->Position(); | 262 intptr_t return_value = file->Position(); |
| 275 if (return_value >= 0) { | 263 if (return_value >= 0) { |
| 276 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); | 264 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); |
| 277 } else { | 265 } else { |
| 278 Dart_Handle err = DartUtils::NewDartOSError(); | 266 Dart_Handle err = DartUtils::NewDartOSError(); |
| 279 if (Dart_IsError(err)) { | 267 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 280 Dart_PropagateError(err); | 268 Dart_SetReturnValue(args, err); |
| 281 } | |
| 282 Dart_SetReturnValue(args, err); | |
| 283 } | |
| 284 } | 269 } |
| 285 Dart_ExitScope(); | 270 Dart_ExitScope(); |
| 286 } | 271 } |
| 287 | 272 |
| 288 | 273 |
| 289 void FUNCTION_NAME(File_SetPosition)(Dart_NativeArguments args) { | 274 void FUNCTION_NAME(File_SetPosition)(Dart_NativeArguments args) { |
| 290 Dart_EnterScope(); | 275 Dart_EnterScope(); |
| 291 intptr_t value = | 276 intptr_t value = |
| 292 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 277 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 293 File* file = reinterpret_cast<File*>(value); | 278 File* file = reinterpret_cast<File*>(value); |
| 294 if (file != NULL) { | 279 ASSERT(file != NULL); |
| 295 int64_t position = | 280 Dart_Handle pos_handle = Dart_GetNativeArgument(args, 1); |
| 296 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1)); | 281 bool valid_argument = false; |
| 282 if (Dart_IsInteger(pos_handle)) { | |
| 283 Dart_IntegerFitsIntoInt64(pos_handle, &valid_argument); | |
| 284 } | |
| 285 if (valid_argument) { | |
| 286 int64_t position = DartUtils::GetIntegerValue(pos_handle); | |
| 297 if (file->SetPosition(position)) { | 287 if (file->SetPosition(position)) { |
| 298 Dart_SetReturnValue(args, Dart_True()); | 288 Dart_SetReturnValue(args, Dart_True()); |
| 299 } else { | 289 } else { |
| 300 Dart_Handle err = DartUtils::NewDartOSError(); | 290 Dart_Handle err = DartUtils::NewDartOSError(); |
| 301 if (Dart_IsError(err)) { | 291 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 302 Dart_PropagateError(err); | |
| 303 } | |
| 304 Dart_SetReturnValue(args, err); | 292 Dart_SetReturnValue(args, err); |
| 305 } | 293 } |
| 294 } else { | |
| 295 OSError os_error(-1, "Invalid argument", OSError::kUnknown); | |
| 296 Dart_Handle err = DartUtils::NewDartOSError(&os_error); | |
| 297 if (Dart_IsError(err)) Dart_PropagateError(err); | |
| 298 Dart_SetReturnValue(args, err); | |
| 306 } | 299 } |
| 307 Dart_ExitScope(); | 300 Dart_ExitScope(); |
| 308 } | 301 } |
| 309 | 302 |
| 310 | 303 |
| 311 void FUNCTION_NAME(File_Truncate)(Dart_NativeArguments args) { | 304 void FUNCTION_NAME(File_Truncate)(Dart_NativeArguments args) { |
| 312 Dart_EnterScope(); | 305 Dart_EnterScope(); |
| 313 intptr_t value = | 306 intptr_t value = |
| 314 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 307 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 315 File* file = reinterpret_cast<File*>(value); | 308 File* file = reinterpret_cast<File*>(value); |
| 316 if (file != NULL) { | 309 ASSERT(file != NULL); |
| 317 int64_t length = | 310 int64_t length = |
| 318 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1)); | 311 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1)); |
| 319 if (file->Truncate(length)) { | 312 if (file->Truncate(length)) { |
| 320 Dart_SetReturnValue(args, Dart_True()); | 313 Dart_SetReturnValue(args, Dart_True()); |
| 321 } else { | 314 } else { |
| 322 Dart_Handle err = DartUtils::NewDartOSError(); | 315 Dart_Handle err = DartUtils::NewDartOSError(); |
| 323 if (Dart_IsError(err)) { | 316 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 324 Dart_PropagateError(err); | 317 Dart_SetReturnValue(args, err); |
| 325 } | |
| 326 Dart_SetReturnValue(args, err); | |
| 327 } | |
| 328 } | 318 } |
| 329 Dart_ExitScope(); | 319 Dart_ExitScope(); |
| 330 } | 320 } |
| 331 | 321 |
| 332 | 322 |
| 333 void FUNCTION_NAME(File_Length)(Dart_NativeArguments args) { | 323 void FUNCTION_NAME(File_Length)(Dart_NativeArguments args) { |
| 334 Dart_EnterScope(); | 324 Dart_EnterScope(); |
| 335 intptr_t value = | 325 intptr_t value = |
| 336 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 326 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 337 File* file = reinterpret_cast<File*>(value); | 327 File* file = reinterpret_cast<File*>(value); |
| 338 if (file != NULL) { | 328 ASSERT(file != NULL); |
| 339 intptr_t return_value = file->Length(); | 329 intptr_t return_value = file->Length(); |
| 340 if (return_value >= 0) { | 330 if (return_value >= 0) { |
| 341 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); | 331 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); |
| 342 } else { | 332 } else { |
| 343 Dart_Handle err = DartUtils::NewDartOSError(); | 333 Dart_Handle err = DartUtils::NewDartOSError(); |
| 344 if (Dart_IsError(err)) { | 334 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 345 Dart_PropagateError(err); | 335 Dart_SetReturnValue(args, err); |
| 346 } | |
| 347 Dart_SetReturnValue(args, err); | |
| 348 } | |
| 349 } | 336 } |
| 350 Dart_ExitScope(); | 337 Dart_ExitScope(); |
| 351 } | 338 } |
| 352 | 339 |
| 353 | 340 |
| 354 void FUNCTION_NAME(File_LengthFromName)(Dart_NativeArguments args) { | 341 void FUNCTION_NAME(File_LengthFromName)(Dart_NativeArguments args) { |
| 355 Dart_EnterScope(); | 342 Dart_EnterScope(); |
| 356 const char* name = | 343 const char* name = |
| 357 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); | 344 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); |
| 358 intptr_t return_value = File::LengthFromName(name); | 345 intptr_t return_value = File::LengthFromName(name); |
| 359 if (return_value >= 0) { | 346 if (return_value >= 0) { |
| 360 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); | 347 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); |
| 361 } else { | 348 } else { |
| 362 Dart_Handle err = DartUtils::NewDartOSError(); | 349 Dart_Handle err = DartUtils::NewDartOSError(); |
| 363 if (Dart_IsError(err)) { | 350 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 364 Dart_PropagateError(err); | |
| 365 } | |
| 366 Dart_SetReturnValue(args, err); | 351 Dart_SetReturnValue(args, err); |
| 367 } | 352 } |
| 368 Dart_ExitScope(); | 353 Dart_ExitScope(); |
| 369 } | 354 } |
| 370 | 355 |
| 371 | 356 |
| 372 void FUNCTION_NAME(File_Flush)(Dart_NativeArguments args) { | 357 void FUNCTION_NAME(File_Flush)(Dart_NativeArguments args) { |
| 373 Dart_EnterScope(); | 358 Dart_EnterScope(); |
| 374 intptr_t value = | 359 intptr_t value = |
| 375 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 360 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 376 File* file = reinterpret_cast<File*>(value); | 361 File* file = reinterpret_cast<File*>(value); |
| 377 if (file != NULL) { | 362 ASSERT(file != NULL); |
| 378 if (file->Flush()) { | 363 if (file->Flush()) { |
| 379 Dart_SetReturnValue(args, Dart_True()); | 364 Dart_SetReturnValue(args, Dart_True()); |
| 380 } else { | 365 } else { |
| 381 Dart_Handle err = DartUtils::NewDartOSError(); | 366 Dart_Handle err = DartUtils::NewDartOSError(); |
| 382 if (Dart_IsError(err)) { | 367 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 383 Dart_PropagateError(err); | 368 Dart_SetReturnValue(args, err); |
| 384 } | |
| 385 Dart_SetReturnValue(args, err); | |
| 386 } | |
| 387 } | 369 } |
| 388 Dart_ExitScope(); | 370 Dart_ExitScope(); |
| 389 } | 371 } |
| 390 | 372 |
| 391 | 373 |
| 392 void FUNCTION_NAME(File_Create)(Dart_NativeArguments args) { | 374 void FUNCTION_NAME(File_Create)(Dart_NativeArguments args) { |
| 393 Dart_EnterScope(); | 375 Dart_EnterScope(); |
| 394 const char* str = | 376 const char* str = |
| 395 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); | 377 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); |
| 396 bool result = File::Create(str); | 378 bool result = File::Create(str); |
| 397 if (result) { | 379 if (result) { |
| 398 Dart_SetReturnValue(args, Dart_NewBoolean(result)); | 380 Dart_SetReturnValue(args, Dart_NewBoolean(result)); |
| 399 } else { | 381 } else { |
| 400 Dart_Handle err = DartUtils::NewDartOSError(); | 382 Dart_Handle err = DartUtils::NewDartOSError(); |
| 401 if (Dart_IsError(err)) { | 383 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 402 Dart_PropagateError(err); | |
| 403 } | |
| 404 Dart_SetReturnValue(args, err); | 384 Dart_SetReturnValue(args, err); |
| 405 } | 385 } |
| 406 Dart_ExitScope(); | 386 Dart_ExitScope(); |
| 407 } | 387 } |
| 408 | 388 |
| 409 | 389 |
| 410 void FUNCTION_NAME(File_Delete)(Dart_NativeArguments args) { | 390 void FUNCTION_NAME(File_Delete)(Dart_NativeArguments args) { |
| 411 Dart_EnterScope(); | 391 Dart_EnterScope(); |
| 412 const char* str = | 392 const char* str = |
| 413 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); | 393 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); |
| 414 bool result = File::Delete(str); | 394 bool result = File::Delete(str); |
| 415 if (result) { | 395 if (result) { |
| 416 Dart_SetReturnValue(args, Dart_NewBoolean(result)); | 396 Dart_SetReturnValue(args, Dart_NewBoolean(result)); |
| 417 } else { | 397 } else { |
| 418 Dart_Handle err = DartUtils::NewDartOSError(); | 398 Dart_Handle err = DartUtils::NewDartOSError(); |
| 419 if (Dart_IsError(err)) { | 399 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 420 Dart_PropagateError(err); | |
| 421 } | |
| 422 Dart_SetReturnValue(args, err); | 400 Dart_SetReturnValue(args, err); |
| 423 } | 401 } |
| 424 Dart_ExitScope(); | 402 Dart_ExitScope(); |
| 425 } | 403 } |
| 426 | 404 |
| 427 | 405 |
| 428 void FUNCTION_NAME(File_Directory)(Dart_NativeArguments args) { | 406 void FUNCTION_NAME(File_Directory)(Dart_NativeArguments args) { |
| 429 Dart_EnterScope(); | 407 Dart_EnterScope(); |
| 430 const char* str = | 408 const char* str = |
| 431 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); | 409 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); |
| 432 char* str_copy = strdup(str); | 410 char* str_copy = strdup(str); |
| 433 char* path = File::GetContainingDirectory(str_copy); | 411 char* path = File::GetContainingDirectory(str_copy); |
| 434 free(str_copy); | 412 free(str_copy); |
| 435 if (path != NULL) { | 413 if (path != NULL) { |
| 436 Dart_SetReturnValue(args, Dart_NewString(path)); | 414 Dart_SetReturnValue(args, Dart_NewString(path)); |
| 437 free(path); | 415 free(path); |
| 438 } else { | 416 } else { |
| 439 Dart_Handle err = DartUtils::NewDartOSError(); | 417 Dart_Handle err = DartUtils::NewDartOSError(); |
| 440 if (Dart_IsError(err)) { | 418 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 441 Dart_PropagateError(err); | |
| 442 } | |
| 443 Dart_SetReturnValue(args, err); | 419 Dart_SetReturnValue(args, err); |
| 444 } | 420 } |
| 445 Dart_ExitScope(); | 421 Dart_ExitScope(); |
| 446 } | 422 } |
| 447 | 423 |
| 448 | 424 |
| 449 void FUNCTION_NAME(File_FullPath)(Dart_NativeArguments args) { | 425 void FUNCTION_NAME(File_FullPath)(Dart_NativeArguments args) { |
| 450 Dart_EnterScope(); | 426 Dart_EnterScope(); |
| 451 const char* str = | 427 const char* str = |
| 452 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); | 428 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0)); |
| 453 char* path = File::GetCanonicalPath(str); | 429 char* path = File::GetCanonicalPath(str); |
| 454 if (path != NULL) { | 430 if (path != NULL) { |
| 455 Dart_SetReturnValue(args, Dart_NewString(path)); | 431 Dart_SetReturnValue(args, Dart_NewString(path)); |
| 456 free(path); | 432 free(path); |
| 457 } else { | 433 } else { |
| 458 Dart_Handle err = DartUtils::NewDartOSError(); | 434 Dart_Handle err = DartUtils::NewDartOSError(); |
| 459 if (Dart_IsError(err)) { | 435 if (Dart_IsError(err)) Dart_PropagateError(err); |
| 460 Dart_PropagateError(err); | |
| 461 } | |
| 462 Dart_SetReturnValue(args, err); | 436 Dart_SetReturnValue(args, err); |
| 463 } | 437 } |
| 464 Dart_ExitScope(); | 438 Dart_ExitScope(); |
| 465 } | 439 } |
| 466 | 440 |
| 467 | 441 |
| 468 void FUNCTION_NAME(File_OpenStdio)(Dart_NativeArguments args) { | 442 void FUNCTION_NAME(File_OpenStdio)(Dart_NativeArguments args) { |
| 469 Dart_EnterScope(); | 443 Dart_EnterScope(); |
| 470 int fd = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); | 444 int fd = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0)); |
| 471 File* file = File::OpenStdio(fd); | 445 File* file = File::OpenStdio(fd); |
| (...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 593 } | 567 } |
| 594 } | 568 } |
| 595 return CObject::Null(); | 569 return CObject::Null(); |
| 596 } | 570 } |
| 597 | 571 |
| 598 | 572 |
| 599 static CObject* FileCloseRequest(const CObjectArray& request) { | 573 static CObject* FileCloseRequest(const CObjectArray& request) { |
| 600 intptr_t return_value = -1; | 574 intptr_t return_value = -1; |
| 601 if (request.Length() == 2 && request[1]->IsIntptr()) { | 575 if (request.Length() == 2 && request[1]->IsIntptr()) { |
| 602 File* file = CObjectToFilePointer(request[1]); | 576 File* file = CObjectToFilePointer(request[1]); |
| 603 if (file != NULL) { | 577 ASSERT(file != NULL); |
| 604 delete file; | 578 delete file; |
| 605 return_value = 0; | 579 return_value = 0; |
| 606 } | |
| 607 } | 580 } |
| 608 return new CObjectIntptr(CObject::NewIntptr(return_value)); | 581 return new CObjectIntptr(CObject::NewIntptr(return_value)); |
| 609 } | 582 } |
| 610 | 583 |
| 611 | 584 |
| 612 static CObject* FilePositionRequest(const CObjectArray& request) { | 585 static CObject* FilePositionRequest(const CObjectArray& request) { |
| 613 if (request.Length() == 2 && request[1]->IsIntptr()) { | 586 if (request.Length() == 2 && request[1]->IsIntptr()) { |
| 614 File* file = CObjectToFilePointer(request[1]); | 587 File* file = CObjectToFilePointer(request[1]); |
| 615 if (file != NULL && !file->IsClosed()) { | 588 ASSERT(file != NULL); |
| 589 if (!file->IsClosed()) { | |
| 616 intptr_t return_value = file->Position(); | 590 intptr_t return_value = file->Position(); |
| 617 if (return_value >= 0) { | 591 if (return_value >= 0) { |
| 618 return new CObjectIntptr(CObject::NewIntptr(return_value)); | 592 return new CObjectIntptr(CObject::NewIntptr(return_value)); |
| 619 } else { | 593 } else { |
| 620 return CObject::NewOSError(); | 594 return CObject::NewOSError(); |
| 621 } | 595 } |
| 622 } else { | 596 } else { |
| 623 return CObject::FileClosedError(); | 597 return CObject::FileClosedError(); |
| 624 } | 598 } |
| 625 } | 599 } |
| 626 return CObject::IllegalArgumentError(); | 600 return CObject::IllegalArgumentError(); |
| 627 } | 601 } |
| 628 | 602 |
| 629 | 603 |
| 630 static CObject* FileSetPositionRequest(const CObjectArray& request) { | 604 static CObject* FileSetPositionRequest(const CObjectArray& request) { |
| 631 if (request.Length() == 3 && | 605 if (request.Length() == 3 && |
| 632 request[1]->IsIntptr() && | 606 request[1]->IsIntptr() && |
| 633 request[2]->IsInt32OrInt64()) { | 607 request[2]->IsInt32OrInt64()) { |
| 634 File* file = CObjectToFilePointer(request[1]); | 608 File* file = CObjectToFilePointer(request[1]); |
| 635 if (file != NULL && !file->IsClosed()) { | 609 ASSERT(file != NULL); |
| 610 if (!file->IsClosed()) { | |
| 636 int64_t position = CObjectInt32OrInt64ToInt64(request[2]); | 611 int64_t position = CObjectInt32OrInt64ToInt64(request[2]); |
| 637 if (file->SetPosition(position)) { | 612 if (file->SetPosition(position)) { |
| 638 return CObject::True(); | 613 return CObject::True(); |
| 639 } else { | 614 } else { |
| 640 return CObject::NewOSError(); | 615 return CObject::NewOSError(); |
| 641 } | 616 } |
| 642 } else { | 617 } else { |
| 643 return CObject::FileClosedError(); | 618 return CObject::FileClosedError(); |
| 644 } | 619 } |
| 645 } | 620 } |
| 646 return CObject::IllegalArgumentError(); | 621 return CObject::IllegalArgumentError(); |
| 647 } | 622 } |
| 648 | 623 |
| 649 | 624 |
| 650 static CObject* FileTruncateRequest(const CObjectArray& request) { | 625 static CObject* FileTruncateRequest(const CObjectArray& request) { |
| 651 if (request.Length() == 3 && | 626 if (request.Length() == 3 && |
| 652 request[1]->IsIntptr() && | 627 request[1]->IsIntptr() && |
| 653 request[2]->IsInt32OrInt64()) { | 628 request[2]->IsInt32OrInt64()) { |
| 654 File* file = CObjectToFilePointer(request[1]); | 629 File* file = CObjectToFilePointer(request[1]); |
| 655 if (file != NULL && !file->IsClosed()) { | 630 ASSERT(file != NULL); |
| 631 if (!file->IsClosed()) { | |
| 656 int64_t length = CObjectInt32OrInt64ToInt64(request[2]); | 632 int64_t length = CObjectInt32OrInt64ToInt64(request[2]); |
| 657 if (file->Truncate(length)) { | 633 if (file->Truncate(length)) { |
| 658 return CObject::True(); | 634 return CObject::True(); |
| 659 } else { | 635 } else { |
| 660 return CObject::NewOSError(); | 636 return CObject::NewOSError(); |
| 661 } | 637 } |
| 662 } else { | 638 } else { |
| 663 return CObject::FileClosedError(); | 639 return CObject::FileClosedError(); |
| 664 } | 640 } |
| 665 } | 641 } |
| 666 return CObject::IllegalArgumentError(); | 642 return CObject::IllegalArgumentError(); |
| 667 } | 643 } |
| 668 | 644 |
| 669 | 645 |
| 670 static CObject* FileLengthRequest(const CObjectArray& request) { | 646 static CObject* FileLengthRequest(const CObjectArray& request) { |
| 671 if (request.Length() == 2 && request[1]->IsIntptr()) { | 647 if (request.Length() == 2 && request[1]->IsIntptr()) { |
| 672 File* file = CObjectToFilePointer(request[1]); | 648 File* file = CObjectToFilePointer(request[1]); |
| 673 if (file != NULL && !file->IsClosed()) { | 649 ASSERT(file != NULL); |
| 650 if (!file->IsClosed()) { | |
| 674 intptr_t return_value = file->Length(); | 651 intptr_t return_value = file->Length(); |
| 675 if (return_value >= 0) { | 652 if (return_value >= 0) { |
| 676 return new CObjectIntptr(CObject::NewIntptr(return_value)); | 653 return new CObjectIntptr(CObject::NewIntptr(return_value)); |
| 677 } else { | 654 } else { |
| 678 return CObject::NewOSError(); | 655 return CObject::NewOSError(); |
| 679 } | 656 } |
| 680 } else { | 657 } else { |
| 681 return CObject::FileClosedError(); | 658 return CObject::FileClosedError(); |
| 682 } | 659 } |
| 683 } | 660 } |
| 684 return CObject::IllegalArgumentError(); | 661 return CObject::IllegalArgumentError(); |
| 685 } | 662 } |
| 686 | 663 |
| 687 | 664 |
| 688 static CObject* FileLengthFromNameRequest(const CObjectArray& request) { | 665 static CObject* FileLengthFromNameRequest(const CObjectArray& request) { |
| 689 if (request.Length() == 2 && request[1]->IsString()) { | 666 if (request.Length() == 2 && request[1]->IsString()) { |
| 690 CObjectString filename(request[1]); | 667 CObjectString filename(request[1]); |
| 691 intptr_t return_value = File::LengthFromName(filename.CString()); | 668 intptr_t return_value = File::LengthFromName(filename.CString()); |
| 692 if (return_value >= 0) { | 669 if (return_value >= 0) { |
| 693 return new CObjectIntptr(CObject::NewIntptr(return_value)); | 670 return new CObjectIntptr(CObject::NewIntptr(return_value)); |
| 694 } else { | 671 } else { |
| 695 return CObject::NewOSError(); | 672 return CObject::NewOSError(); |
| 696 } | 673 } |
| 697 } | 674 } |
| 698 return CObject::IllegalArgumentError(); | 675 return CObject::IllegalArgumentError(); |
| 699 } | 676 } |
| 700 | 677 |
| 701 | 678 |
| 702 static CObject* FileFlushRequest(const CObjectArray& request) { | 679 static CObject* FileFlushRequest(const CObjectArray& request) { |
| 703 intptr_t return_value = -1; | |
| 704 if (request.Length() == 2 && request[1]->IsIntptr()) { | 680 if (request.Length() == 2 && request[1]->IsIntptr()) { |
| 705 File* file = CObjectToFilePointer(request[1]); | 681 File* file = CObjectToFilePointer(request[1]); |
| 706 if (file != NULL && !file->IsClosed()) { | 682 ASSERT(file != NULL); |
| 683 if (!file->IsClosed()) { | |
| 707 if (file->Flush()) { | 684 if (file->Flush()) { |
| 708 return CObject::True(); | 685 return CObject::True(); |
| 709 } else { | 686 } else { |
| 710 return CObject::NewOSError(); | 687 return CObject::NewOSError(); |
| 711 } | 688 } |
| 712 } else { | 689 } else { |
| 713 return CObject::FileClosedError(); | 690 return CObject::FileClosedError(); |
| 714 } | 691 } |
| 715 } | 692 } |
| 716 return CObject::IllegalArgumentError(); | 693 return CObject::IllegalArgumentError(); |
| 717 return new CObjectIntptr(CObject::NewIntptr(return_value)); | |
| 718 } | 694 } |
| 719 | 695 |
| 720 | 696 |
| 721 static CObject* FileReadByteRequest(const CObjectArray& request) { | 697 static CObject* FileReadByteRequest(const CObjectArray& request) { |
| 722 if (request.Length() == 2 && request[1]->IsIntptr()) { | 698 if (request.Length() == 2 && request[1]->IsIntptr()) { |
| 723 File* file = CObjectToFilePointer(request[1]); | 699 File* file = CObjectToFilePointer(request[1]); |
| 724 if (file != NULL && !file->IsClosed()) { | 700 ASSERT(file != NULL); |
| 701 if (!file->IsClosed()) { | |
| 725 uint8_t buffer; | 702 uint8_t buffer; |
| 726 int bytes_read = file->Read(reinterpret_cast<void*>(&buffer), 1); | 703 int bytes_read = file->Read(reinterpret_cast<void*>(&buffer), 1); |
| 727 if (bytes_read > 0) { | 704 if (bytes_read > 0) { |
| 728 return new CObjectIntptr(CObject::NewIntptr(buffer)); | 705 return new CObjectIntptr(CObject::NewIntptr(buffer)); |
| 729 } else if (bytes_read == 0) { | 706 } else if (bytes_read == 0) { |
| 730 return new CObjectIntptr(CObject::NewIntptr(-1)); | 707 return new CObjectIntptr(CObject::NewIntptr(-1)); |
| 731 } else { | 708 } else { |
| 732 return CObject::NewOSError(); | 709 return CObject::NewOSError(); |
| 733 } | 710 } |
| 734 } else { | 711 } else { |
| 735 return CObject::FileClosedError(); | 712 return CObject::FileClosedError(); |
| 736 } | 713 } |
| 737 } | 714 } |
| 738 return CObject::IllegalArgumentError(); | 715 return CObject::IllegalArgumentError(); |
| 739 } | 716 } |
| 740 | 717 |
| 741 | 718 |
| 742 static CObject* FileWriteByteRequest(const CObjectArray& request) { | 719 static CObject* FileWriteByteRequest(const CObjectArray& request) { |
| 743 if (request.Length() == 3 && | 720 if (request.Length() == 3 && |
| 744 request[1]->IsIntptr() && | 721 request[1]->IsIntptr() && |
| 745 request[2]->IsInt32OrInt64()) { | 722 request[2]->IsInt32OrInt64()) { |
| 746 File* file = CObjectToFilePointer(request[1]); | 723 File* file = CObjectToFilePointer(request[1]); |
| 747 if (file != NULL && !file->IsClosed()) { | 724 ASSERT(file != NULL); |
| 725 if (!file->IsClosed()) { | |
| 748 int64_t byte = CObjectInt32OrInt64ToInt64(request[2]); | 726 int64_t byte = CObjectInt32OrInt64ToInt64(request[2]); |
| 749 uint8_t buffer = static_cast<uint8_t>(byte & 0xff); | 727 uint8_t buffer = static_cast<uint8_t>(byte & 0xff); |
| 750 int bytes_written = file->Write(reinterpret_cast<void*>(&buffer), 1); | 728 int bytes_written = file->Write(reinterpret_cast<void*>(&buffer), 1); |
| 751 if (bytes_written > 0) { | 729 if (bytes_written > 0) { |
| 752 return new CObjectIntptr(CObject::NewIntptr(bytes_written)); | 730 return new CObjectIntptr(CObject::NewIntptr(bytes_written)); |
| 753 } else { | 731 } else { |
| 754 return CObject::NewOSError(); | 732 return CObject::NewOSError(); |
| 755 } | 733 } |
| 756 } else { | 734 } else { |
| 757 return CObject::FileClosedError(); | 735 return CObject::FileClosedError(); |
| 758 } | 736 } |
| 759 } | 737 } |
| 760 return CObject::IllegalArgumentError(); | 738 return CObject::IllegalArgumentError(); |
| 761 } | 739 } |
| 762 | 740 |
| 763 | 741 |
| 764 static CObject* FileReadListRequest(const CObjectArray& request) { | 742 static CObject* FileReadListRequest(const CObjectArray& request) { |
| 765 if (request.Length() == 3 && | 743 if (request.Length() == 3 && |
| 766 request[1]->IsIntptr() && | 744 request[1]->IsIntptr() && |
| 767 request[2]->IsInt32OrInt64()) { | 745 request[2]->IsInt32OrInt64()) { |
| 768 File* file = CObjectToFilePointer(request[1]); | 746 File* file = CObjectToFilePointer(request[1]); |
| 769 if (file != NULL && !file->IsClosed()) { | 747 ASSERT(file != NULL); |
| 748 if (!file->IsClosed()) { | |
| 770 int64_t length = CObjectInt32OrInt64ToInt64(request[2]); | 749 int64_t length = CObjectInt32OrInt64ToInt64(request[2]); |
| 771 CObjectUint8Array* byte_array = | 750 CObjectUint8Array* byte_array = |
| 772 new CObjectUint8Array(CObject::NewUint8Array(length)); | 751 new CObjectUint8Array(CObject::NewUint8Array(length)); |
| 773 void* buffer = reinterpret_cast<void*>(byte_array->Buffer()); | 752 void* buffer = reinterpret_cast<void*>(byte_array->Buffer()); |
| 774 int bytes_read = file->Read(buffer, byte_array->Length()); | 753 int bytes_read = file->Read(buffer, byte_array->Length()); |
| 775 if (bytes_read >= 0) { | 754 if (bytes_read >= 0) { |
| 776 CObjectArray* result = new CObjectArray(CObject::NewArray(3)); | 755 CObjectArray* result = new CObjectArray(CObject::NewArray(3)); |
| 777 result->SetAt(0, new CObjectIntptr(CObject::NewInt32(0))); | 756 result->SetAt(0, new CObjectIntptr(CObject::NewInt32(0))); |
| 778 result->SetAt(1, new CObjectIntptr(CObject::NewIntptr(bytes_read))); | 757 result->SetAt(1, new CObjectIntptr(CObject::NewIntptr(bytes_read))); |
| 779 result->SetAt(2, byte_array); | 758 result->SetAt(2, byte_array); |
| 780 return result; | 759 return result; |
| 781 } else { | 760 } else { |
| 782 return CObject::NewOSError(); | 761 return CObject::NewOSError(); |
| 783 } | 762 } |
| 784 } else { | 763 } else { |
| 785 return CObject::FileClosedError(); | 764 return CObject::FileClosedError(); |
| 786 } | 765 } |
| 787 } | 766 } |
| 788 return CObject::IllegalArgumentError(); | 767 return CObject::IllegalArgumentError(); |
| 789 } | 768 } |
| 790 | 769 |
| 791 | 770 |
| 792 static CObject* FileWriteListRequest(const CObjectArray& request) { | 771 static CObject* FileWriteListRequest(const CObjectArray& request) { |
| 793 if (request.Length() == 5 && | 772 if (request.Length() == 5 && |
| 794 request[1]->IsIntptr() && | 773 request[1]->IsIntptr() && |
| 795 (request[2]->IsUint8Array() || request[2]->IsArray()) && | 774 (request[2]->IsUint8Array() || request[2]->IsArray()) && |
| 796 request[3]->IsInt32OrInt64() && | 775 request[3]->IsInt32OrInt64() && |
| 797 request[4]->IsInt32OrInt64()) { | 776 request[4]->IsInt32OrInt64()) { |
| 798 File* file = CObjectToFilePointer(request[1]); | 777 File* file = CObjectToFilePointer(request[1]); |
| 799 if (file != NULL && !file->IsClosed()) { | 778 ASSERT(file != NULL); |
| 779 if (!file->IsClosed()) { | |
| 800 int64_t offset = CObjectInt32OrInt64ToInt64(request[3]); | 780 int64_t offset = CObjectInt32OrInt64ToInt64(request[3]); |
| 801 int64_t length = CObjectInt32OrInt64ToInt64(request[4]); | 781 int64_t length = CObjectInt32OrInt64ToInt64(request[4]); |
| 802 uint8_t* buffer_start; | 782 uint8_t* buffer_start; |
| 803 if (request[2]->IsUint8Array()) { | 783 if (request[2]->IsUint8Array()) { |
| 804 CObjectUint8Array byte_array(request[2]); | 784 CObjectUint8Array byte_array(request[2]); |
| 805 buffer_start = byte_array.Buffer() + offset; | 785 buffer_start = byte_array.Buffer() + offset; |
| 806 } else { | 786 } else { |
| 807 CObjectArray array(request[2]); | 787 CObjectArray array(request[2]); |
| 808 buffer_start = new uint8_t[length]; | 788 buffer_start = new uint8_t[length]; |
| 809 for (int i = 0; i < length; i++) { | 789 for (int i = 0; i < length; i++) { |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 834 } | 814 } |
| 835 return CObject::IllegalArgumentError(); | 815 return CObject::IllegalArgumentError(); |
| 836 } | 816 } |
| 837 | 817 |
| 838 | 818 |
| 839 static CObject* FileWriteStringRequest(const CObjectArray& request) { | 819 static CObject* FileWriteStringRequest(const CObjectArray& request) { |
| 840 if (request.Length() == 3 && | 820 if (request.Length() == 3 && |
| 841 request[1]->IsIntptr() && | 821 request[1]->IsIntptr() && |
| 842 request[2]->IsString()) { | 822 request[2]->IsString()) { |
| 843 File* file = CObjectToFilePointer(request[1]); | 823 File* file = CObjectToFilePointer(request[1]); |
| 844 if (file != NULL && !file->IsClosed()) { | 824 ASSERT(file != NULL); |
| 825 if (!file->IsClosed()) { | |
| 845 CObjectString str(request[2]); | 826 CObjectString str(request[2]); |
| 846 const void* buffer = reinterpret_cast<const void*>(str.CString()); | 827 const void* buffer = reinterpret_cast<const void*>(str.CString()); |
| 847 int64_t bytes_written = file->Write(buffer, str.Length()); | 828 int64_t bytes_written = file->Write(buffer, str.Length()); |
| 848 return new CObjectInt64(CObject::NewInt64(bytes_written)); | 829 return new CObjectInt64(CObject::NewInt64(bytes_written)); |
| 849 } else { | 830 } else { |
| 850 return CObject::FileClosedError(); | 831 return CObject::FileClosedError(); |
| 851 } | 832 } |
| 852 } | 833 } |
| 853 return CObject::IllegalArgumentError(); | 834 return CObject::IllegalArgumentError(); |
| 854 } | 835 } |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 956 Dart_EnterScope(); | 937 Dart_EnterScope(); |
| 957 Dart_SetReturnValue(args, Dart_Null()); | 938 Dart_SetReturnValue(args, Dart_Null()); |
| 958 Dart_Port service_port = File::GetServicePort(); | 939 Dart_Port service_port = File::GetServicePort(); |
| 959 if (service_port != kIllegalPort) { | 940 if (service_port != kIllegalPort) { |
| 960 // Return a send port for the service port. | 941 // Return a send port for the service port. |
| 961 Dart_Handle send_port = Dart_NewSendPort(service_port); | 942 Dart_Handle send_port = Dart_NewSendPort(service_port); |
| 962 Dart_SetReturnValue(args, send_port); | 943 Dart_SetReturnValue(args, send_port); |
| 963 } | 944 } |
| 964 Dart_ExitScope(); | 945 Dart_ExitScope(); |
| 965 } | 946 } |
| OLD | NEW |