OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "apps/moterm/moterm_driver.h" | 5 #include "apps/moterm/moterm_driver.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <limits> | 8 #include <limits> |
9 | 9 |
10 #include "base/logging.h" | 10 #include "base/logging.h" |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 client_->OnDataReceived(translated_bytes.data(), | 180 client_->OnDataReceived(translated_bytes.data(), |
181 static_cast<uint32_t>(translated_bytes.size())); | 181 static_cast<uint32_t>(translated_bytes.size())); |
182 } | 182 } |
183 | 183 |
184 void MotermDriver::Close(const CloseCallback& callback) { | 184 void MotermDriver::Close(const CloseCallback& callback) { |
185 if (is_closed_) { | 185 if (is_closed_) { |
186 callback.Run(mojo::files::ERROR_CLOSED); | 186 callback.Run(mojo::files::ERROR_CLOSED); |
187 return; | 187 return; |
188 } | 188 } |
189 | 189 |
| 190 is_closed_ = true; |
190 callback.Run(mojo::files::ERROR_OK); | 191 callback.Run(mojo::files::ERROR_OK); |
191 | 192 |
192 // TODO(vtl): Call pending read callbacks? | 193 // TODO(vtl): Call pending read callbacks? |
193 | 194 |
194 client_->OnClosed(); | 195 client_->OnClosed(); |
195 } | 196 } |
196 | 197 |
197 void MotermDriver::Read(uint32_t num_bytes_to_read, | 198 void MotermDriver::Read(uint32_t num_bytes_to_read, |
198 int64_t offset, | 199 int64_t offset, |
199 mojo::files::Whence whence, | 200 mojo::files::Whence whence, |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 // TODO(vtl): Is this the "right" behavior? | 234 // TODO(vtl): Is this the "right" behavior? |
234 callback.Run(mojo::files::ERROR_INVALID_ARGUMENT, 0); | 235 callback.Run(mojo::files::ERROR_INVALID_ARGUMENT, 0); |
235 return; | 236 return; |
236 } | 237 } |
237 | 238 |
238 if (!bytes_to_write.size()) { | 239 if (!bytes_to_write.size()) { |
239 callback.Run(mojo::files::ERROR_OK, 0); | 240 callback.Run(mojo::files::ERROR_OK, 0); |
240 return; | 241 return; |
241 } | 242 } |
242 | 243 |
243 HandleOutput(static_cast<const uint8_t*>(&bytes_to_write.front()), | 244 HandleOutput(&bytes_to_write.front(), bytes_to_write.size()); |
244 bytes_to_write.size()); | |
245 | 245 |
246 // TODO(vtl): Is this OK if the client detached (and we're destroyed?). | 246 // TODO(vtl): Is this OK if the client detached (and we're destroyed?). |
247 callback.Run(mojo::files::ERROR_OK, | 247 callback.Run(mojo::files::ERROR_OK, |
248 static_cast<uint32_t>(bytes_to_write.size())); | 248 static_cast<uint32_t>(bytes_to_write.size())); |
249 } | 249 } |
250 | 250 |
251 void MotermDriver::ReadToStream(mojo::ScopedDataPipeProducerHandle source, | 251 void MotermDriver::ReadToStream(mojo::ScopedDataPipeProducerHandle source, |
252 int64_t offset, | 252 int64_t offset, |
253 mojo::files::Whence whence, | 253 mojo::files::Whence whence, |
254 int64_t num_bytes_to_read, | 254 int64_t num_bytes_to_read, |
(...skipping 227 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
482 } | 482 } |
483 if (1 + kVEOFIdx < in_values.size()) { | 483 if (1 + kVEOFIdx < in_values.size()) { |
484 uint32_t value = in_values[1 + kVEOFIdx]; | 484 uint32_t value = in_values[1 + kVEOFIdx]; |
485 if (value > std::numeric_limits<uint8_t>::max()) | 485 if (value > std::numeric_limits<uint8_t>::max()) |
486 return mojo::files::ERROR_INVALID_ARGUMENT; | 486 return mojo::files::ERROR_INVALID_ARGUMENT; |
487 veof_ = static_cast<uint8_t>(value); | 487 veof_ = static_cast<uint8_t>(value); |
488 } | 488 } |
489 | 489 |
490 return mojo::files::ERROR_OK; | 490 return mojo::files::ERROR_OK; |
491 } | 491 } |
OLD | NEW |