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

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

Issue 8431028: Implement async file API on top of isolates. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Fix type mismatch. Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « runtime/bin/directory_impl.dart ('k') | runtime/bin/file.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2011, 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 9
10 #include "include/dart_api.h" 10 #include "include/dart_api.h"
(...skipping 22 matching lines...) Expand all
33 if (bytes_read < 0) { 33 if (bytes_read < 0) {
34 return false; 34 return false;
35 } 35 }
36 remaining -= bytes_read; // Reduce the number of remaining bytes. 36 remaining -= bytes_read; // Reduce the number of remaining bytes.
37 current_buffer += bytes_read; // Move the buffer forward. 37 current_buffer += bytes_read; // Move the buffer forward.
38 } 38 }
39 return true; 39 return true;
40 } 40 }
41 41
42 42
43 static File* GetFileHandle(Dart_Handle fileobj) { 43 void FUNCTION_NAME(File_Open)(Dart_NativeArguments args) {
44 intptr_t value =
45 DartUtils::GetIntegerInstanceField(fileobj, DartUtils::kIdFieldName);
46 File* file = reinterpret_cast<File*>(value);
47 return file;
48 }
49
50
51 void FUNCTION_NAME(File_OpenFile)(Dart_NativeArguments args) {
52 Dart_EnterScope(); 44 Dart_EnterScope();
53 Dart_Handle fileobj = Dart_GetNativeArgument(args, 0);
54 const char* filename = 45 const char* filename =
55 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); 46 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
56 bool writable = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 2)); 47 bool writable = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 1));
57 File* file = File::OpenFile(filename, writable); 48 File* file = File::OpenFile(filename, writable);
58 DartUtils::SetIntegerInstanceField(fileobj, 49 Dart_SetReturnValue(args, Dart_NewInteger(reinterpret_cast<intptr_t>(file)));
59 DartUtils::kIdFieldName,
60 reinterpret_cast<intptr_t>(file));
61 Dart_SetReturnValue(args, Dart_NewBoolean(file != NULL));
62 Dart_ExitScope(); 50 Dart_ExitScope();
63 } 51 }
64 52
65 53
66 void FUNCTION_NAME(File_Exists)(Dart_NativeArguments args) { 54 void FUNCTION_NAME(File_Exists)(Dart_NativeArguments args) {
67 Dart_EnterScope(); 55 Dart_EnterScope();
68 const char* filename = 56 const char* filename =
69 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); 57 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 0));
70 bool exists = File::FileExists(filename); 58 bool exists = File::FileExists(filename);
71 Dart_SetReturnValue(args, Dart_NewBoolean(exists)); 59 Dart_SetReturnValue(args, Dart_NewBoolean(exists));
72 Dart_ExitScope(); 60 Dart_ExitScope();
73 } 61 }
74 62
75 63
76 void FUNCTION_NAME(File_Close)(Dart_NativeArguments args) { 64 void FUNCTION_NAME(File_Close)(Dart_NativeArguments args) {
77 Dart_EnterScope(); 65 Dart_EnterScope();
78 intptr_t return_value = -1; 66 intptr_t return_value = -1;
79 Dart_Handle fileobj = Dart_GetNativeArgument(args, 0); 67 intptr_t value =
80 File* file = GetFileHandle(fileobj); 68 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
69 File* file = reinterpret_cast<File*>(value);
81 if (file != NULL) { 70 if (file != NULL) {
82 DartUtils::SetIntegerInstanceField(fileobj, DartUtils::kIdFieldName, 0);
83 delete file; 71 delete file;
84 return_value = 0; 72 return_value = 0;
85 } 73 }
86 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 74 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
87 Dart_ExitScope(); 75 Dart_ExitScope();
88 } 76 }
89 77
90 78
91 void FUNCTION_NAME(File_ReadByte)(Dart_NativeArguments args) { 79 void FUNCTION_NAME(File_ReadByte)(Dart_NativeArguments args) {
92 Dart_EnterScope(); 80 Dart_EnterScope();
93 intptr_t return_value = -1; 81 intptr_t return_value = -1;
94 File* file = GetFileHandle(Dart_GetNativeArgument(args, 0)); 82 intptr_t value =
83 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
84 File* file = reinterpret_cast<File*>(value);
95 if (file != NULL) { 85 if (file != NULL) {
96 uint8_t buffer; 86 uint8_t buffer;
97 int bytes_read = file->Read(reinterpret_cast<void*>(&buffer), 1); 87 int bytes_read = file->Read(reinterpret_cast<void*>(&buffer), 1);
98 if (bytes_read >= 0) { 88 if (bytes_read >= 0) {
99 return_value = static_cast<intptr_t>(buffer); 89 return_value = static_cast<intptr_t>(buffer);
100 } 90 }
101 } 91 }
102 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 92 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
103 Dart_ExitScope(); 93 Dart_ExitScope();
104 } 94 }
105 95
106 96
107 void FUNCTION_NAME(File_WriteByte)(Dart_NativeArguments args) { 97 void FUNCTION_NAME(File_WriteByte)(Dart_NativeArguments args) {
108 Dart_EnterScope(); 98 Dart_EnterScope();
109 intptr_t return_value = -1; 99 intptr_t return_value = -1;
110 File* file = GetFileHandle(Dart_GetNativeArgument(args, 0)); 100 intptr_t value =
101 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
102 File* file = reinterpret_cast<File*>(value);
111 if (file != NULL) { 103 if (file != NULL) {
112 int64_t value = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1)); 104 int64_t value = DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 1));
113 uint8_t buffer = static_cast<uint8_t>(value & 0xff); 105 uint8_t buffer = static_cast<uint8_t>(value & 0xff);
114 int bytes_written = file->Write(reinterpret_cast<void*>(&buffer), 1); 106 int bytes_written = file->Write(reinterpret_cast<void*>(&buffer), 1);
115 if (bytes_written >= 0) { 107 if (bytes_written >= 0) {
116 return_value = bytes_written; 108 return_value = bytes_written;
117 } 109 }
118 } 110 }
119 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 111 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
120 Dart_ExitScope(); 112 Dart_ExitScope();
121 } 113 }
122 114
123 115
124 void FUNCTION_NAME(File_WriteString)(Dart_NativeArguments args) { 116 void FUNCTION_NAME(File_WriteString)(Dart_NativeArguments args) {
125 Dart_EnterScope(); 117 Dart_EnterScope();
126 intptr_t return_value = -1; 118 intptr_t return_value = -1;
127 File* file = GetFileHandle(Dart_GetNativeArgument(args, 0)); 119 intptr_t value =
120 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
121 File* file = reinterpret_cast<File*>(value);
128 if (file != NULL) { 122 if (file != NULL) {
129 const char* str = 123 const char* str =
130 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1)); 124 DartUtils::GetStringValue(Dart_GetNativeArgument(args, 1));
131 int bytes_written = file->Write(reinterpret_cast<const void*>(str), 125 int bytes_written = file->Write(reinterpret_cast<const void*>(str),
132 strlen(str)); 126 strlen(str));
133 if (bytes_written >= 0) { 127 if (bytes_written >= 0) {
134 return_value = bytes_written; 128 return_value = bytes_written;
135 } 129 }
136 } 130 }
137 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 131 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
138 Dart_ExitScope(); 132 Dart_ExitScope();
139 } 133 }
140 134
141 135
142 void FUNCTION_NAME(File_ReadList)(Dart_NativeArguments args) { 136 void FUNCTION_NAME(File_ReadList)(Dart_NativeArguments args) {
143 Dart_EnterScope(); 137 Dart_EnterScope();
144 intptr_t return_value = -1; 138 intptr_t return_value = -1;
145 File* file = GetFileHandle(Dart_GetNativeArgument(args, 0)); 139 intptr_t value =
140 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
141 File* file = reinterpret_cast<File*>(value);
146 if (file != NULL) { 142 if (file != NULL) {
147 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); 143 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1);
148 ASSERT(Dart_IsArray(buffer_obj)); 144 ASSERT(Dart_IsArray(buffer_obj));
149 int64_t offset = 145 int64_t offset =
150 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)); 146 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2));
151 int64_t length = 147 int64_t length =
152 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); 148 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3));
153 intptr_t array_len = 0; 149 intptr_t array_len = 0;
154 Dart_Handle result = Dart_GetLength(buffer_obj, &array_len); 150 Dart_Handle result = Dart_GetLength(buffer_obj, &array_len);
155 ASSERT(Dart_IsValid(result)); 151 ASSERT(Dart_IsValid(result));
(...skipping 13 matching lines...) Expand all
169 delete[] buffer; 165 delete[] buffer;
170 } 166 }
171 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 167 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
172 Dart_ExitScope(); 168 Dart_ExitScope();
173 } 169 }
174 170
175 171
176 void FUNCTION_NAME(File_WriteList)(Dart_NativeArguments args) { 172 void FUNCTION_NAME(File_WriteList)(Dart_NativeArguments args) {
177 Dart_EnterScope(); 173 Dart_EnterScope();
178 intptr_t return_value = -1; 174 intptr_t return_value = -1;
179 File* file = GetFileHandle(Dart_GetNativeArgument(args, 0)); 175 intptr_t value =
176 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
177 File* file = reinterpret_cast<File*>(value);
180 if (file != NULL) { 178 if (file != NULL) {
181 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1); 179 Dart_Handle buffer_obj = Dart_GetNativeArgument(args, 1);
182 ASSERT(Dart_IsArray(buffer_obj)); 180 ASSERT(Dart_IsArray(buffer_obj));
183 int64_t offset = 181 int64_t offset =
184 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2)); 182 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 2));
185 int64_t length = 183 int64_t length =
186 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3)); 184 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 3));
187 intptr_t buffer_len = 0; 185 intptr_t buffer_len = 0;
188 Dart_Handle result = Dart_GetLength(buffer_obj, &buffer_len); 186 Dart_Handle result = Dart_GetLength(buffer_obj, &buffer_len);
189 ASSERT(Dart_IsValid(result)); 187 ASSERT(Dart_IsValid(result));
190 ASSERT((offset + length) <= buffer_len); 188 ASSERT((offset + length) <= buffer_len);
191 uint8_t* buffer = new uint8_t[length]; 189 uint8_t* buffer = new uint8_t[length];
192 result = Dart_ArrayGet(buffer_obj, offset, buffer, length); 190 result = Dart_ArrayGet(buffer_obj, offset, buffer, length);
193 ASSERT(Dart_IsValid(result)); 191 ASSERT(Dart_IsValid(result));
194 int total_bytes_written = 192 int total_bytes_written =
195 file->Write(reinterpret_cast<void*>(buffer), length); 193 file->Write(reinterpret_cast<void*>(buffer), length);
196 if (total_bytes_written >= 0) { 194 if (total_bytes_written >= 0) {
197 return_value = total_bytes_written; 195 return_value = total_bytes_written;
198 } 196 }
199 delete[] buffer; 197 delete[] buffer;
200 } 198 }
201 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 199 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
202 Dart_ExitScope(); 200 Dart_ExitScope();
203 } 201 }
204 202
205 203
206 void FUNCTION_NAME(File_Position)(Dart_NativeArguments args) { 204 void FUNCTION_NAME(File_Position)(Dart_NativeArguments args) {
207 Dart_EnterScope(); 205 Dart_EnterScope();
208 intptr_t return_value = -1; 206 intptr_t return_value = -1;
209 File* file = GetFileHandle(Dart_GetNativeArgument(args, 0)); 207 intptr_t value =
208 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
209 File* file = reinterpret_cast<File*>(value);
210 if (file != NULL) { 210 if (file != NULL) {
211 return_value = file->Position(); 211 return_value = file->Position();
212 } 212 }
213 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 213 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
214 Dart_ExitScope(); 214 Dart_ExitScope();
215 } 215 }
216 216
217 217
218 void FUNCTION_NAME(File_Length)(Dart_NativeArguments args) { 218 void FUNCTION_NAME(File_Length)(Dart_NativeArguments args) {
219 Dart_EnterScope(); 219 Dart_EnterScope();
220 intptr_t return_value = -1; 220 intptr_t return_value = -1;
221 File* file = GetFileHandle(Dart_GetNativeArgument(args, 0)); 221 intptr_t value =
222 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
223 File* file = reinterpret_cast<File*>(value);
222 if (file != NULL) { 224 if (file != NULL) {
223 return_value = file->Length(); 225 return_value = file->Length();
224 } 226 }
225 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 227 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
226 Dart_ExitScope(); 228 Dart_ExitScope();
227 } 229 }
228 230
229 231
230 void FUNCTION_NAME(File_Flush)(Dart_NativeArguments args) { 232 void FUNCTION_NAME(File_Flush)(Dart_NativeArguments args) {
231 Dart_EnterScope(); 233 Dart_EnterScope();
232 intptr_t return_value = -1; 234 intptr_t return_value = -1;
233 File* file = GetFileHandle(Dart_GetNativeArgument(args, 0)); 235 intptr_t value =
236 DartUtils::GetIntegerValue(Dart_GetNativeArgument(args, 0));
237 File* file = reinterpret_cast<File*>(value);
234 if (file != NULL) { 238 if (file != NULL) {
235 file->Flush(); 239 file->Flush();
236 return_value = 0; 240 return_value = 0;
237 } 241 }
238 Dart_SetReturnValue(args, Dart_NewInteger(return_value)); 242 Dart_SetReturnValue(args, Dart_NewInteger(return_value));
239 Dart_ExitScope(); 243 Dart_ExitScope();
240 } 244 }
OLDNEW
« no previous file with comments | « runtime/bin/directory_impl.dart ('k') | runtime/bin/file.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698