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

Side by Side Diff: base/posix/unix_domain_socket_linux.cc

Issue 240463005: Stop using chrome-sandbox to determine real pids (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix an embarassing number of compile errors Created 6 years, 8 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 | « base/posix/unix_domain_socket_linux.h ('k') | components/nacl/loader/nacl_helper_linux.cc » ('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 Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/posix/unix_domain_socket_linux.h" 5 #include "base/posix/unix_domain_socket_linux.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <sys/socket.h> 8 #include <sys/socket.h>
9 #include <sys/uio.h> 9 #include <sys/uio.h>
10 #include <unistd.h> 10 #include <unistd.h>
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 142
143 return r; 143 return r;
144 } 144 }
145 145
146 // static 146 // static
147 ssize_t UnixDomainSocket::SendRecvMsg(int fd, 147 ssize_t UnixDomainSocket::SendRecvMsg(int fd,
148 uint8_t* reply, 148 uint8_t* reply,
149 unsigned max_reply_len, 149 unsigned max_reply_len,
150 int* result_fd, 150 int* result_fd,
151 const Pickle& request) { 151 const Pickle& request) {
152 return UnixDomainSocket::SendRecvMsgWithFlags(fd, reply, max_reply_len, 152 const int recvmsg_flags = 0;
153 0, /* recvmsg_flags */ 153 const int request_fd = -1;
154 result_fd, request); 154 return SendRecvMsgImpl(
155 fd, reply, max_reply_len, recvmsg_flags, result_fd, request, request_fd);
155 } 156 }
156 157
157 // static 158 // static
159 ssize_t UnixDomainSocket::SendRecvMsgWithFD(int fd,
160 uint8_t* reply,
161 unsigned max_reply_len,
162 int* result_fd,
163 const Pickle& request,
164 int request_fd) {
165 const int recvmsg_flags = 0;
166 return SendRecvMsgImpl(
167 fd, reply, max_reply_len, recvmsg_flags, result_fd, request, request_fd);
168 }
169
170 // static
158 ssize_t UnixDomainSocket::SendRecvMsgWithFlags(int fd, 171 ssize_t UnixDomainSocket::SendRecvMsgWithFlags(int fd,
159 uint8_t* reply, 172 uint8_t* reply,
160 unsigned max_reply_len, 173 unsigned max_reply_len,
161 int recvmsg_flags, 174 int recvmsg_flags,
162 int* result_fd, 175 int* result_fd,
163 const Pickle& request) { 176 const Pickle& request) {
177 const int request_fd = -1;
178 return SendRecvMsgImpl(
179 fd, reply, max_reply_len, recvmsg_flags, result_fd, request, request_fd);
180 }
181
182 // static
183 ssize_t UnixDomainSocket::SendRecvMsgImpl(int fd,
184 uint8_t* reply,
185 unsigned max_reply_len,
186 int recvmsg_flags,
187 int* result_fd,
188 const Pickle& request,
189 int request_fd) {
164 int fds[2]; 190 int fds[2];
165 191
166 // This socketpair is only used for the IPC and is cleaned up before 192 // This socketpair is only used for the IPC and is cleaned up before
167 // returning. 193 // returning.
168 if (socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fds) == -1) 194 if (socketpair(AF_UNIX, SOCK_SEQPACKET, 0, fds) == -1)
169 return -1; 195 return -1;
170 196
171 std::vector<int> fd_vector; 197 std::vector<int> fd_vector;
172 fd_vector.push_back(fds[1]); 198 fd_vector.push_back(fds[1]);
199 if (request_fd != -1)
200 fd_vector.push_back(request_fd);
173 if (!SendMsg(fd, request.data(), request.size(), fd_vector)) { 201 if (!SendMsg(fd, request.data(), request.size(), fd_vector)) {
174 close(fds[0]); 202 close(fds[0]);
175 close(fds[1]); 203 close(fds[1]);
176 return -1; 204 return -1;
177 } 205 }
178 close(fds[1]); 206 close(fds[1]);
179 207
180 fd_vector.clear(); 208 fd_vector.clear();
181 // When porting to OSX keep in mind it doesn't support MSG_NOSIGNAL, so the 209 // When porting to OSX keep in mind it doesn't support MSG_NOSIGNAL, so the
182 // sender might get a SIGPIPE. 210 // sender might get a SIGPIPE.
(...skipping 12 matching lines...) Expand all
195 NOTREACHED(); 223 NOTREACHED();
196 224
197 return -1; 225 return -1;
198 } 226 }
199 227
200 if (result_fd) 228 if (result_fd)
201 *result_fd = fd_vector.empty() ? -1 : fd_vector[0]; 229 *result_fd = fd_vector.empty() ? -1 : fd_vector[0];
202 230
203 return reply_len; 231 return reply_len;
204 } 232 }
OLDNEW
« no previous file with comments | « base/posix/unix_domain_socket_linux.h ('k') | components/nacl/loader/nacl_helper_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698