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

Side by Side Diff: util/mach/exc_server_variants.cc

Issue 700143004: C++11: Use type aliases instead of typedefs (Closed) Base URL: https://chromium.googlesource.com/crashpad/crashpad@master
Patch Set: Created 6 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
« no previous file with comments | « util/file/fd_io.cc ('k') | util/mach/exc_server_variants_test.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 2014 The Crashpad Authors. All rights reserved. 1 // Copyright 2014 The Crashpad Authors. All rights reserved.
2 // 2 //
3 // Licensed under the Apache License, Version 2.0 (the "License"); 3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License. 4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at 5 // You may obtain a copy of the License at
6 // 6 //
7 // http://www.apache.org/licenses/LICENSE-2.0 7 // http://www.apache.org/licenses/LICENSE-2.0
8 // 8 //
9 // Unless required by applicable law or agreed to in writing, software 9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS, 10 // distributed under the License is distributed on an "AS IS" BASIS,
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 }; 145 };
146 146
147 // The MIG-generated __MIG_check__Request__*() functions are not declared as 147 // The MIG-generated __MIG_check__Request__*() functions are not declared as
148 // accepting const data, but they could have been because they in fact do not 148 // accepting const data, but they could have been because they in fact do not
149 // modify the data. These wrapper functions are provided to bridge the const gap 149 // modify the data. These wrapper functions are provided to bridge the const gap
150 // between the code in this file, which is const-correct and treats request 150 // between the code in this file, which is const-correct and treats request
151 // message data as const, and those generated functions. 151 // message data as const, and those generated functions.
152 152
153 kern_return_t MIGCheckRequestExceptionRaise( 153 kern_return_t MIGCheckRequestExceptionRaise(
154 const __Request__exception_raise_t* in_request) { 154 const __Request__exception_raise_t* in_request) {
155 typedef __Request__exception_raise_t Request; 155 using Request = __Request__exception_raise_t;
156 return __MIG_check__Request__exception_raise_t( 156 return __MIG_check__Request__exception_raise_t(
157 const_cast<Request*>(in_request)); 157 const_cast<Request*>(in_request));
158 } 158 }
159 159
160 kern_return_t MIGCheckRequestExceptionRaiseState( 160 kern_return_t MIGCheckRequestExceptionRaiseState(
161 const __Request__exception_raise_state_t* in_request, 161 const __Request__exception_raise_state_t* in_request,
162 const __Request__exception_raise_state_t** in_request_1) { 162 const __Request__exception_raise_state_t** in_request_1) {
163 typedef __Request__exception_raise_state_t Request; 163 using Request = __Request__exception_raise_state_t;
164 return __MIG_check__Request__exception_raise_state_t( 164 return __MIG_check__Request__exception_raise_state_t(
165 const_cast<Request*>(in_request), const_cast<Request**>(in_request_1)); 165 const_cast<Request*>(in_request), const_cast<Request**>(in_request_1));
166 } 166 }
167 167
168 kern_return_t MIGCheckRequestExceptionRaiseStateIdentity( 168 kern_return_t MIGCheckRequestExceptionRaiseStateIdentity(
169 const __Request__exception_raise_state_identity_t* in_request, 169 const __Request__exception_raise_state_identity_t* in_request,
170 const __Request__exception_raise_state_identity_t** in_request_1) { 170 const __Request__exception_raise_state_identity_t** in_request_1) {
171 typedef __Request__exception_raise_state_identity_t Request; 171 using Request = __Request__exception_raise_state_identity_t;
172 return __MIG_check__Request__exception_raise_state_identity_t( 172 return __MIG_check__Request__exception_raise_state_identity_t(
173 const_cast<Request*>(in_request), const_cast<Request**>(in_request_1)); 173 const_cast<Request*>(in_request), const_cast<Request**>(in_request_1));
174 } 174 }
175 175
176 kern_return_t MIGCheckRequestMachExceptionRaise( 176 kern_return_t MIGCheckRequestMachExceptionRaise(
177 const __Request__mach_exception_raise_t* in_request) { 177 const __Request__mach_exception_raise_t* in_request) {
178 typedef __Request__mach_exception_raise_t Request; 178 using Request = __Request__mach_exception_raise_t;
179 return __MIG_check__Request__mach_exception_raise_t( 179 return __MIG_check__Request__mach_exception_raise_t(
180 const_cast<Request*>(in_request)); 180 const_cast<Request*>(in_request));
181 } 181 }
182 182
183 kern_return_t MIGCheckRequestMachExceptionRaiseState( 183 kern_return_t MIGCheckRequestMachExceptionRaiseState(
184 const __Request__mach_exception_raise_state_t* in_request, 184 const __Request__mach_exception_raise_state_t* in_request,
185 const __Request__mach_exception_raise_state_t** in_request_1) { 185 const __Request__mach_exception_raise_state_t** in_request_1) {
186 typedef __Request__mach_exception_raise_state_t Request; 186 using Request = __Request__mach_exception_raise_state_t;
187 return __MIG_check__Request__mach_exception_raise_state_t( 187 return __MIG_check__Request__mach_exception_raise_state_t(
188 const_cast<Request*>(in_request), const_cast<Request**>(in_request_1)); 188 const_cast<Request*>(in_request), const_cast<Request**>(in_request_1));
189 } 189 }
190 190
191 kern_return_t MIGCheckRequestMachExceptionRaiseStateIdentity( 191 kern_return_t MIGCheckRequestMachExceptionRaiseStateIdentity(
192 const __Request__mach_exception_raise_state_identity_t* in_request, 192 const __Request__mach_exception_raise_state_identity_t* in_request,
193 const __Request__mach_exception_raise_state_identity_t** in_request_1) { 193 const __Request__mach_exception_raise_state_identity_t** in_request_1) {
194 typedef __Request__mach_exception_raise_state_identity_t Request; 194 using Request = __Request__mach_exception_raise_state_identity_t;
195 return __MIG_check__Request__mach_exception_raise_state_identity_t( 195 return __MIG_check__Request__mach_exception_raise_state_identity_t(
196 const_cast<Request*>(in_request), const_cast<Request**>(in_request_1)); 196 const_cast<Request*>(in_request), const_cast<Request**>(in_request_1));
197 } 197 }
198 198
199 } // namespace 199 } // namespace
200 200
201 namespace crashpad { 201 namespace crashpad {
202 namespace internal { 202 namespace internal {
203 203
204 ExcServer::ExcServer(ExcServer::Interface* interface) 204 ExcServer::ExcServer(ExcServer::Interface* interface)
205 : MachMessageServer::Interface(), 205 : MachMessageServer::Interface(),
206 interface_(interface) { 206 interface_(interface) {
207 } 207 }
208 208
209 bool ExcServer::MachMessageServerFunction(const mach_msg_header_t* in_header, 209 bool ExcServer::MachMessageServerFunction(const mach_msg_header_t* in_header,
210 mach_msg_header_t* out_header, 210 mach_msg_header_t* out_header,
211 bool* destroy_complex_request) { 211 bool* destroy_complex_request) {
212 PrepareReplyFromRequest(in_header, out_header); 212 PrepareReplyFromRequest(in_header, out_header);
213 213
214 switch (in_header->msgh_id) { 214 switch (in_header->msgh_id) {
215 case kMachMessageIDExceptionRaise: { 215 case kMachMessageIDExceptionRaise: {
216 // exception_raise(), catch_exception_raise(). 216 // exception_raise(), catch_exception_raise().
217 typedef __Request__exception_raise_t Request; 217 using Request = __Request__exception_raise_t;
218 const Request* in_request = reinterpret_cast<const Request*>(in_header); 218 const Request* in_request = reinterpret_cast<const Request*>(in_header);
219 kern_return_t kr = MIGCheckRequestExceptionRaise(in_request); 219 kern_return_t kr = MIGCheckRequestExceptionRaise(in_request);
220 if (kr != MACH_MSG_SUCCESS) { 220 if (kr != MACH_MSG_SUCCESS) {
221 SetReplyError(out_header, kr); 221 SetReplyError(out_header, kr);
222 return true; 222 return true;
223 } 223 }
224 224
225 typedef __Reply__exception_raise_t Reply; 225 using Reply = __Reply__exception_raise_t;
226 Reply* out_reply = reinterpret_cast<Reply*>(out_header); 226 Reply* out_reply = reinterpret_cast<Reply*>(out_header);
227 out_reply->RetCode = 227 out_reply->RetCode =
228 interface_->CatchExceptionRaise(in_header->msgh_local_port, 228 interface_->CatchExceptionRaise(in_header->msgh_local_port,
229 in_request->thread.name, 229 in_request->thread.name,
230 in_request->task.name, 230 in_request->task.name,
231 in_request->exception, 231 in_request->exception,
232 in_request->code, 232 in_request->code,
233 in_request->codeCnt, 233 in_request->codeCnt,
234 destroy_complex_request); 234 destroy_complex_request);
235 if (out_reply->RetCode != KERN_SUCCESS) { 235 if (out_reply->RetCode != KERN_SUCCESS) {
236 return true; 236 return true;
237 } 237 }
238 238
239 out_header->msgh_size = sizeof(*out_reply); 239 out_header->msgh_size = sizeof(*out_reply);
240 return true; 240 return true;
241 } 241 }
242 242
243 case kMachMessageIDExceptionRaiseState: { 243 case kMachMessageIDExceptionRaiseState: {
244 // exception_raise_state(), catch_exception_raise_state(). 244 // exception_raise_state(), catch_exception_raise_state().
245 typedef __Request__exception_raise_state_t Request; 245 using Request = __Request__exception_raise_state_t;
246 const Request* in_request = reinterpret_cast<const Request*>(in_header); 246 const Request* in_request = reinterpret_cast<const Request*>(in_header);
247 247
248 // in_request_1 is used for the portion of the request after the codes, 248 // in_request_1 is used for the portion of the request after the codes,
249 // which in theory can be variable-length. The check function will set it. 249 // which in theory can be variable-length. The check function will set it.
250 const Request* in_request_1; 250 const Request* in_request_1;
251 kern_return_t kr = 251 kern_return_t kr =
252 MIGCheckRequestExceptionRaiseState(in_request, &in_request_1); 252 MIGCheckRequestExceptionRaiseState(in_request, &in_request_1);
253 if (kr != MACH_MSG_SUCCESS) { 253 if (kr != MACH_MSG_SUCCESS) {
254 SetReplyError(out_header, kr); 254 SetReplyError(out_header, kr);
255 return true; 255 return true;
256 } 256 }
257 257
258 typedef __Reply__exception_raise_state_t Reply; 258 using Reply = __Reply__exception_raise_state_t;
259 Reply* out_reply = reinterpret_cast<Reply*>(out_header); 259 Reply* out_reply = reinterpret_cast<Reply*>(out_header);
260 out_reply->flavor = in_request_1->flavor; 260 out_reply->flavor = in_request_1->flavor;
261 out_reply->new_stateCnt = arraysize(out_reply->new_state); 261 out_reply->new_stateCnt = arraysize(out_reply->new_state);
262 out_reply->RetCode = 262 out_reply->RetCode =
263 interface_->CatchExceptionRaiseState(in_header->msgh_local_port, 263 interface_->CatchExceptionRaiseState(in_header->msgh_local_port,
264 in_request->exception, 264 in_request->exception,
265 in_request->code, 265 in_request->code,
266 in_request->codeCnt, 266 in_request->codeCnt,
267 &out_reply->flavor, 267 &out_reply->flavor,
268 in_request_1->old_state, 268 in_request_1->old_state,
269 in_request_1->old_stateCnt, 269 in_request_1->old_stateCnt,
270 out_reply->new_state, 270 out_reply->new_state,
271 &out_reply->new_stateCnt); 271 &out_reply->new_stateCnt);
272 if (out_reply->RetCode != KERN_SUCCESS) { 272 if (out_reply->RetCode != KERN_SUCCESS) {
273 return true; 273 return true;
274 } 274 }
275 275
276 out_header->msgh_size = 276 out_header->msgh_size =
277 sizeof(*out_reply) - sizeof(out_reply->new_state) + 277 sizeof(*out_reply) - sizeof(out_reply->new_state) +
278 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt; 278 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt;
279 return true; 279 return true;
280 } 280 }
281 281
282 case kMachMessageIDExceptionRaiseStateIdentity: { 282 case kMachMessageIDExceptionRaiseStateIdentity: {
283 // exception_raise_state_identity(), 283 // exception_raise_state_identity(),
284 // catch_exception_raise_state_identity(). 284 // catch_exception_raise_state_identity().
285 typedef __Request__exception_raise_state_identity_t Request; 285 using Request = __Request__exception_raise_state_identity_t;
286 const Request* in_request = reinterpret_cast<const Request*>(in_header); 286 const Request* in_request = reinterpret_cast<const Request*>(in_header);
287 287
288 // in_request_1 is used for the portion of the request after the codes, 288 // in_request_1 is used for the portion of the request after the codes,
289 // which in theory can be variable-length. The check function will set it. 289 // which in theory can be variable-length. The check function will set it.
290 const Request* in_request_1; 290 const Request* in_request_1;
291 kern_return_t kr = 291 kern_return_t kr =
292 MIGCheckRequestExceptionRaiseStateIdentity(in_request, &in_request_1); 292 MIGCheckRequestExceptionRaiseStateIdentity(in_request, &in_request_1);
293 if (kr != MACH_MSG_SUCCESS) { 293 if (kr != MACH_MSG_SUCCESS) {
294 SetReplyError(out_header, kr); 294 SetReplyError(out_header, kr);
295 return true; 295 return true;
296 } 296 }
297 297
298 typedef __Reply__exception_raise_state_identity_t Reply; 298 using Reply = __Reply__exception_raise_state_identity_t;
299 Reply* out_reply = reinterpret_cast<Reply*>(out_header); 299 Reply* out_reply = reinterpret_cast<Reply*>(out_header);
300 out_reply->flavor = in_request_1->flavor; 300 out_reply->flavor = in_request_1->flavor;
301 out_reply->new_stateCnt = arraysize(out_reply->new_state); 301 out_reply->new_stateCnt = arraysize(out_reply->new_state);
302 out_reply->RetCode = interface_->CatchExceptionRaiseStateIdentity( 302 out_reply->RetCode = interface_->CatchExceptionRaiseStateIdentity(
303 in_header->msgh_local_port, 303 in_header->msgh_local_port,
304 in_request->thread.name, 304 in_request->thread.name,
305 in_request->task.name, 305 in_request->task.name,
306 in_request->exception, 306 in_request->exception,
307 in_request->code, 307 in_request->code,
308 in_request->codeCnt, 308 in_request->codeCnt,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
342 342
343 bool MachExcServer::MachMessageServerFunction( 343 bool MachExcServer::MachMessageServerFunction(
344 const mach_msg_header_t* in_header, 344 const mach_msg_header_t* in_header,
345 mach_msg_header_t* out_header, 345 mach_msg_header_t* out_header,
346 bool* destroy_complex_request) { 346 bool* destroy_complex_request) {
347 PrepareReplyFromRequest(in_header, out_header); 347 PrepareReplyFromRequest(in_header, out_header);
348 348
349 switch (in_header->msgh_id) { 349 switch (in_header->msgh_id) {
350 case kMachMessageIDMachExceptionRaise: { 350 case kMachMessageIDMachExceptionRaise: {
351 // mach_exception_raise(), catch_mach_exception_raise(). 351 // mach_exception_raise(), catch_mach_exception_raise().
352 typedef __Request__mach_exception_raise_t Request; 352 using Request = __Request__mach_exception_raise_t;
353 const Request* in_request = reinterpret_cast<const Request*>(in_header); 353 const Request* in_request = reinterpret_cast<const Request*>(in_header);
354 kern_return_t kr = MIGCheckRequestMachExceptionRaise(in_request); 354 kern_return_t kr = MIGCheckRequestMachExceptionRaise(in_request);
355 if (kr != MACH_MSG_SUCCESS) { 355 if (kr != MACH_MSG_SUCCESS) {
356 SetReplyError(out_header, kr); 356 SetReplyError(out_header, kr);
357 return true; 357 return true;
358 } 358 }
359 359
360 typedef __Reply__mach_exception_raise_t Reply; 360 using Reply = __Reply__mach_exception_raise_t;
361 Reply* out_reply = reinterpret_cast<Reply*>(out_header); 361 Reply* out_reply = reinterpret_cast<Reply*>(out_header);
362 out_reply->RetCode = 362 out_reply->RetCode =
363 interface_->CatchMachExceptionRaise(in_header->msgh_local_port, 363 interface_->CatchMachExceptionRaise(in_header->msgh_local_port,
364 in_request->thread.name, 364 in_request->thread.name,
365 in_request->task.name, 365 in_request->task.name,
366 in_request->exception, 366 in_request->exception,
367 in_request->code, 367 in_request->code,
368 in_request->codeCnt, 368 in_request->codeCnt,
369 destroy_complex_request); 369 destroy_complex_request);
370 if (out_reply->RetCode != KERN_SUCCESS) { 370 if (out_reply->RetCode != KERN_SUCCESS) {
371 return true; 371 return true;
372 } 372 }
373 373
374 out_header->msgh_size = sizeof(*out_reply); 374 out_header->msgh_size = sizeof(*out_reply);
375 return true; 375 return true;
376 } 376 }
377 377
378 case kMachMessageIDMachExceptionRaiseState: { 378 case kMachMessageIDMachExceptionRaiseState: {
379 // mach_exception_raise_state(), catch_mach_exception_raise_state(). 379 // mach_exception_raise_state(), catch_mach_exception_raise_state().
380 typedef __Request__mach_exception_raise_state_t Request; 380 using Request = __Request__mach_exception_raise_state_t;
381 const Request* in_request = reinterpret_cast<const Request*>(in_header); 381 const Request* in_request = reinterpret_cast<const Request*>(in_header);
382 382
383 // in_request_1 is used for the portion of the request after the codes, 383 // in_request_1 is used for the portion of the request after the codes,
384 // which in theory can be variable-length. The check function will set it. 384 // which in theory can be variable-length. The check function will set it.
385 const Request* in_request_1; 385 const Request* in_request_1;
386 kern_return_t kr = 386 kern_return_t kr =
387 MIGCheckRequestMachExceptionRaiseState(in_request, &in_request_1); 387 MIGCheckRequestMachExceptionRaiseState(in_request, &in_request_1);
388 if (kr != MACH_MSG_SUCCESS) { 388 if (kr != MACH_MSG_SUCCESS) {
389 SetReplyError(out_header, kr); 389 SetReplyError(out_header, kr);
390 return true; 390 return true;
391 } 391 }
392 392
393 typedef __Reply__mach_exception_raise_state_t Reply; 393 using Reply = __Reply__mach_exception_raise_state_t;
394 Reply* out_reply = reinterpret_cast<Reply*>(out_header); 394 Reply* out_reply = reinterpret_cast<Reply*>(out_header);
395 out_reply->flavor = in_request_1->flavor; 395 out_reply->flavor = in_request_1->flavor;
396 out_reply->new_stateCnt = arraysize(out_reply->new_state); 396 out_reply->new_stateCnt = arraysize(out_reply->new_state);
397 out_reply->RetCode = 397 out_reply->RetCode =
398 interface_->CatchMachExceptionRaiseState(in_header->msgh_local_port, 398 interface_->CatchMachExceptionRaiseState(in_header->msgh_local_port,
399 in_request->exception, 399 in_request->exception,
400 in_request->code, 400 in_request->code,
401 in_request->codeCnt, 401 in_request->codeCnt,
402 &out_reply->flavor, 402 &out_reply->flavor,
403 in_request_1->old_state, 403 in_request_1->old_state,
404 in_request_1->old_stateCnt, 404 in_request_1->old_stateCnt,
405 out_reply->new_state, 405 out_reply->new_state,
406 &out_reply->new_stateCnt); 406 &out_reply->new_stateCnt);
407 if (out_reply->RetCode != KERN_SUCCESS) { 407 if (out_reply->RetCode != KERN_SUCCESS) {
408 return true; 408 return true;
409 } 409 }
410 410
411 out_header->msgh_size = 411 out_header->msgh_size =
412 sizeof(*out_reply) - sizeof(out_reply->new_state) + 412 sizeof(*out_reply) - sizeof(out_reply->new_state) +
413 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt; 413 sizeof(out_reply->new_state[0]) * out_reply->new_stateCnt;
414 return true; 414 return true;
415 } 415 }
416 416
417 case kMachMessageIDMachExceptionRaiseStateIdentity: { 417 case kMachMessageIDMachExceptionRaiseStateIdentity: {
418 // mach_exception_raise_state_identity(), 418 // mach_exception_raise_state_identity(),
419 // catch_mach_exception_raise_state_identity(). 419 // catch_mach_exception_raise_state_identity().
420 typedef __Request__mach_exception_raise_state_identity_t Request; 420 using Request = __Request__mach_exception_raise_state_identity_t;
421 const Request* in_request = reinterpret_cast<const Request*>(in_header); 421 const Request* in_request = reinterpret_cast<const Request*>(in_header);
422 422
423 // in_request_1 is used for the portion of the request after the codes, 423 // in_request_1 is used for the portion of the request after the codes,
424 // which in theory can be variable-length. The check function will set it. 424 // which in theory can be variable-length. The check function will set it.
425 const Request* in_request_1; 425 const Request* in_request_1;
426 kern_return_t kr = MIGCheckRequestMachExceptionRaiseStateIdentity( 426 kern_return_t kr = MIGCheckRequestMachExceptionRaiseStateIdentity(
427 in_request, &in_request_1); 427 in_request, &in_request_1);
428 if (kr != MACH_MSG_SUCCESS) { 428 if (kr != MACH_MSG_SUCCESS) {
429 SetReplyError(out_header, kr); 429 SetReplyError(out_header, kr);
430 return true; 430 return true;
431 } 431 }
432 432
433 typedef __Reply__mach_exception_raise_state_identity_t Reply; 433 using Reply = __Reply__mach_exception_raise_state_identity_t;
434 Reply* out_reply = reinterpret_cast<Reply*>(out_header); 434 Reply* out_reply = reinterpret_cast<Reply*>(out_header);
435 out_reply->flavor = in_request_1->flavor; 435 out_reply->flavor = in_request_1->flavor;
436 out_reply->new_stateCnt = arraysize(out_reply->new_state); 436 out_reply->new_stateCnt = arraysize(out_reply->new_state);
437 out_reply->RetCode = interface_->CatchMachExceptionRaiseStateIdentity( 437 out_reply->RetCode = interface_->CatchMachExceptionRaiseStateIdentity(
438 in_header->msgh_local_port, 438 in_header->msgh_local_port,
439 in_request->thread.name, 439 in_request->thread.name,
440 in_request->task.name, 440 in_request->task.name,
441 in_request->exception, 441 in_request->exception,
442 in_request->code, 442 in_request->code,
443 in_request->codeCnt, 443 in_request->codeCnt,
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
753 kern_return_t ExcServerSuccessfulReturnValue(exception_behavior_t behavior, 753 kern_return_t ExcServerSuccessfulReturnValue(exception_behavior_t behavior,
754 bool set_thread_state) { 754 bool set_thread_state) {
755 if (!set_thread_state && ExceptionBehaviorHasState(behavior)) { 755 if (!set_thread_state && ExceptionBehaviorHasState(behavior)) {
756 return MACH_RCV_PORT_DIED; 756 return MACH_RCV_PORT_DIED;
757 } 757 }
758 758
759 return KERN_SUCCESS; 759 return KERN_SUCCESS;
760 } 760 }
761 761
762 } // namespace crashpad 762 } // namespace crashpad
OLDNEW
« no previous file with comments | « util/file/fd_io.cc ('k') | util/mach/exc_server_variants_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698