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

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

Issue 10382194: Add more API fuzzing and fix the issues encountered. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 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 | « no previous file | runtime/bin/file_impl.dart » ('j') | runtime/bin/file_impl.dart » ('J')
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/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
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
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
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
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 }
OLDNEW
« no previous file with comments | « no previous file | runtime/bin/file_impl.dart » ('j') | runtime/bin/file_impl.dart » ('J')

Powered by Google App Engine
This is Rietveld 408576698