| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "chromeos/process_proxy/process_proxy.h" | 5 #include "chromeos/process_proxy/process_proxy.h" |
| 6 | 6 |
| 7 #include <fcntl.h> | 7 #include <fcntl.h> |
| 8 #include <stdlib.h> | 8 #include <stdlib.h> |
| 9 #include <sys/ioctl.h> | 9 #include <sys/ioctl.h> |
| 10 | 10 |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 if (callback_set_) | 125 if (callback_set_) |
| 126 callback_.Run(type, output); | 126 callback_.Run(type, output); |
| 127 } | 127 } |
| 128 | 128 |
| 129 bool ProcessProxy::StopWatching() { | 129 bool ProcessProxy::StopWatching() { |
| 130 if (!watcher_started_) | 130 if (!watcher_started_) |
| 131 return true; | 131 return true; |
| 132 // Signal Watcher that we are done. We use self-pipe trick to unblock watcher. | 132 // Signal Watcher that we are done. We use self-pipe trick to unblock watcher. |
| 133 // Anything may be written to the pipe. | 133 // Anything may be written to the pipe. |
| 134 const char message[] = "q"; | 134 const char message[] = "q"; |
| 135 return file_util::WriteFileDescriptor(shutdown_pipe_[PIPE_END_WRITE], | 135 return base::WriteFileDescriptor(shutdown_pipe_[PIPE_END_WRITE], |
| 136 message, sizeof(message)); | 136 message, sizeof(message)); |
| 137 } | 137 } |
| 138 | 138 |
| 139 void ProcessProxy::Close() { | 139 void ProcessProxy::Close() { |
| 140 if (!process_launched_) | 140 if (!process_launched_) |
| 141 return; | 141 return; |
| 142 | 142 |
| 143 process_launched_ = false; | 143 process_launched_ = false; |
| 144 callback_set_ = false; | 144 callback_set_ = false; |
| 145 callback_ = ProcessOutputCallback(); | 145 callback_ = ProcessOutputCallback(); |
| 146 callback_runner_ = NULL; | 146 callback_runner_ = NULL; |
| 147 | 147 |
| 148 base::KillProcess(pid_, 0, true /* wait */); | 148 base::KillProcess(pid_, 0, true /* wait */); |
| 149 | 149 |
| 150 // TODO(tbarzic): What if this fails? | 150 // TODO(tbarzic): What if this fails? |
| 151 StopWatching(); | 151 StopWatching(); |
| 152 | 152 |
| 153 CloseAllFdPairs(); | 153 CloseAllFdPairs(); |
| 154 } | 154 } |
| 155 | 155 |
| 156 bool ProcessProxy::Write(const std::string& text) { | 156 bool ProcessProxy::Write(const std::string& text) { |
| 157 if (!process_launched_) | 157 if (!process_launched_) |
| 158 return false; | 158 return false; |
| 159 | 159 |
| 160 // We don't want to write '\0' to the pipe. | 160 // We don't want to write '\0' to the pipe. |
| 161 size_t data_size = text.length() * sizeof(*text.c_str()); | 161 size_t data_size = text.length() * sizeof(*text.c_str()); |
| 162 int bytes_written = | 162 int bytes_written = |
| 163 file_util::WriteFileDescriptor(pt_pair_[PT_MASTER_FD], | 163 base::WriteFileDescriptor(pt_pair_[PT_MASTER_FD], |
| 164 text.c_str(), data_size); | 164 text.c_str(), data_size); |
| 165 return (bytes_written == static_cast<int>(data_size)); | 165 return (bytes_written == static_cast<int>(data_size)); |
| 166 } | 166 } |
| 167 | 167 |
| 168 bool ProcessProxy::OnTerminalResize(int width, int height) { | 168 bool ProcessProxy::OnTerminalResize(int width, int height) { |
| 169 if (width < 0 || height < 0) | 169 if (width < 0 || height < 0) |
| 170 return false; | 170 return false; |
| 171 | 171 |
| 172 winsize ws; | 172 winsize ws; |
| 173 // Number of rows. | 173 // Number of rows. |
| 174 ws.ws_row = height; | 174 ws.ws_row = height; |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 ClearFdPair(pt_pair_); | 254 ClearFdPair(pt_pair_); |
| 255 ClearFdPair(shutdown_pipe_); | 255 ClearFdPair(shutdown_pipe_); |
| 256 } | 256 } |
| 257 | 257 |
| 258 void ProcessProxy::ClearFdPair(int* pipe) { | 258 void ProcessProxy::ClearFdPair(int* pipe) { |
| 259 pipe[PIPE_END_READ] = kInvalidFd; | 259 pipe[PIPE_END_READ] = kInvalidFd; |
| 260 pipe[PIPE_END_WRITE] = kInvalidFd; | 260 pipe[PIPE_END_WRITE] = kInvalidFd; |
| 261 } | 261 } |
| 262 | 262 |
| 263 } // namespace chromeos | 263 } // namespace chromeos |
| OLD | NEW |