| OLD | NEW | 
|---|
| 1 // Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 #if !defined(DART_IO_DISABLED) | 5 #if !defined(DART_IO_DISABLED) | 
| 6 | 6 | 
| 7 #include "platform/globals.h" | 7 #include "platform/globals.h" | 
| 8 #if defined(TARGET_OS_FUCHSIA) | 8 #if defined(TARGET_OS_FUCHSIA) | 
| 9 | 9 | 
| 10 #include "bin/process.h" | 10 #include "bin/process.h" | 
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 434   int e = errno; | 434   int e = errno; | 
| 435   VOID_NO_RETRY_EXPECTED(close(out)); | 435   VOID_NO_RETRY_EXPECTED(close(out)); | 
| 436   VOID_NO_RETRY_EXPECTED(close(err)); | 436   VOID_NO_RETRY_EXPECTED(close(err)); | 
| 437   VOID_NO_RETRY_EXPECTED(close(exit_event)); | 437   VOID_NO_RETRY_EXPECTED(close(exit_event)); | 
| 438   VOID_NO_RETRY_EXPECTED(close(epoll_fd)); | 438   VOID_NO_RETRY_EXPECTED(close(epoll_fd)); | 
| 439   errno = e; | 439   errno = e; | 
| 440   return false; | 440   return false; | 
| 441 } | 441 } | 
| 442 | 442 | 
| 443 | 443 | 
| 444 class BufferList : public BufferListBase { |  | 
| 445  public: |  | 
| 446   BufferList() {} |  | 
| 447 |  | 
| 448   bool Read(int fd, intptr_t available) { |  | 
| 449     // Read all available bytes. |  | 
| 450     while (available > 0) { |  | 
| 451       if (free_size_ == 0) { |  | 
| 452         Allocate(); |  | 
| 453       } |  | 
| 454       ASSERT(free_size_ > 0); |  | 
| 455       ASSERT(free_size_ <= kBufferSize); |  | 
| 456       intptr_t block_size = dart::Utils::Minimum(free_size_, available); |  | 
| 457       intptr_t bytes = NO_RETRY_EXPECTED( |  | 
| 458           read(fd, reinterpret_cast<void*>(FreeSpaceAddress()), block_size)); |  | 
| 459       if (bytes < 0) { |  | 
| 460         return false; |  | 
| 461       } |  | 
| 462       data_size_ += bytes; |  | 
| 463       free_size_ -= bytes; |  | 
| 464       available -= bytes; |  | 
| 465     } |  | 
| 466     return true; |  | 
| 467   } |  | 
| 468 |  | 
| 469  private: |  | 
| 470   DISALLOW_COPY_AND_ASSIGN(BufferList); |  | 
| 471 }; |  | 
| 472 |  | 
| 473 |  | 
| 474 bool Process::Wait(intptr_t pid, | 444 bool Process::Wait(intptr_t pid, | 
| 475                    intptr_t in, | 445                    intptr_t in, | 
| 476                    intptr_t out, | 446                    intptr_t out, | 
| 477                    intptr_t err, | 447                    intptr_t err, | 
| 478                    intptr_t exit_event, | 448                    intptr_t exit_event, | 
| 479                    ProcessResult* result) { | 449                    ProcessResult* result) { | 
| 480   VOID_NO_RETRY_EXPECTED(close(in)); | 450   VOID_NO_RETRY_EXPECTED(close(in)); | 
| 481 | 451 | 
| 482   // There is no return from this function using Dart_PropagateError | 452   // There is no return from this function using Dart_PropagateError | 
| 483   // as memory used by the buffer lists is freed through their | 453   // as memory used by the buffer lists is freed through their | 
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 563         VOID_NO_RETRY_EXPECTED( | 533         VOID_NO_RETRY_EXPECTED( | 
| 564             epoll_ctl(epoll_fd, EPOLL_CTL_DEL, events[i].data.fd, NULL)); | 534             epoll_ctl(epoll_fd, EPOLL_CTL_DEL, events[i].data.fd, NULL)); | 
| 565       } | 535       } | 
| 566     } | 536     } | 
| 567   } | 537   } | 
| 568   VOID_NO_RETRY_EXPECTED(close(epoll_fd)); | 538   VOID_NO_RETRY_EXPECTED(close(epoll_fd)); | 
| 569 | 539 | 
| 570   // All handles closed and all data read. | 540   // All handles closed and all data read. | 
| 571   result->set_stdout_data(out_data.GetData()); | 541   result->set_stdout_data(out_data.GetData()); | 
| 572   result->set_stderr_data(err_data.GetData()); | 542   result->set_stderr_data(err_data.GetData()); | 
|  | 543   DEBUG_ASSERT(out_data.IsEmpty()); | 
|  | 544   DEBUG_ASSERT(err_data.IsEmpty()); | 
| 573 | 545 | 
| 574   // Calculate the exit code. | 546   // Calculate the exit code. | 
| 575   intptr_t exit_code = exit_code_data.ints[0]; | 547   intptr_t exit_code = exit_code_data.ints[0]; | 
| 576   intptr_t negative = exit_code_data.ints[1]; | 548   intptr_t negative = exit_code_data.ints[1]; | 
| 577   if (negative != 0) { | 549   if (negative != 0) { | 
| 578     exit_code = -exit_code; | 550     exit_code = -exit_code; | 
| 579   } | 551   } | 
| 580   result->set_exit_code(exit_code); | 552   result->set_exit_code(exit_code); | 
| 581 | 553 | 
| 582   return true; | 554   return true; | 
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 840 void Process::ClearSignalHandler(intptr_t signal) { | 812 void Process::ClearSignalHandler(intptr_t signal) { | 
| 841   UNIMPLEMENTED(); | 813   UNIMPLEMENTED(); | 
| 842 } | 814 } | 
| 843 | 815 | 
| 844 }  // namespace bin | 816 }  // namespace bin | 
| 845 }  // namespace dart | 817 }  // namespace dart | 
| 846 | 818 | 
| 847 #endif  // defined(TARGET_OS_FUCHSIA) | 819 #endif  // defined(TARGET_OS_FUCHSIA) | 
| 848 | 820 | 
| 849 #endif  // !defined(DART_IO_DISABLED) | 821 #endif  // !defined(DART_IO_DISABLED) | 
| OLD | NEW | 
|---|