1 /* 2 * Copyright (C) 2007-2014 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #if defined(_WIN32) 18 19 #include <unistd.h> 20 21 #include <log/uio.h> 22 23 #include "log_portability.h" 24 25 LIBLOG_ABI_PUBLIC int readv(int fd, struct iovec* vecs, int count) { 26 int total = 0; 27 28 for (; count > 0; count--, vecs++) { 29 char* buf = vecs->iov_base; 30 int len = vecs->iov_len; 31 32 while (len > 0) { 33 int ret = read(fd, buf, len); 34 if (ret < 0) { 35 if (total == 0) total = -1; 36 goto Exit; 37 } 38 if (ret == 0) goto Exit; 39 40 total += ret; 41 buf += ret; 42 len -= ret; 43 } 44 } 45 Exit: 46 return total; 47 } 48 49 LIBLOG_ABI_PUBLIC int writev(int fd, const struct iovec* vecs, int count) { 50 int total = 0; 51 52 for (; count > 0; count--, vecs++) { 53 const char* buf = vecs->iov_base; 54 int len = vecs->iov_len; 55 56 while (len > 0) { 57 int ret = write(fd, buf, len); 58 if (ret < 0) { 59 if (total == 0) total = -1; 60 goto Exit; 61 } 62 if (ret == 0) goto Exit; 63 64 total += ret; 65 buf += ret; 66 len -= ret; 67 } 68 } 69 Exit: 70 return total; 71 } 72 73 #endif 74