iov.c (4c87aefe) | iov.c (154972af) |
---|---|
1/*- 2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3 * 4 * Copyright (c) 2016 Jakub Klama <jceel@FreeBSD.org>. 5 * Copyright (c) 2018 Alexander Motin <mav@FreeBSD.org> 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 105 unchanged lines hidden (view full) --- 114 memcpy(*buf + ptr, iov[i].iov_base, iov[i].iov_len); 115 ptr += iov[i].iov_len; 116 } 117 118 return (total); 119} 120 121ssize_t | 1/*- 2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD 3 * 4 * Copyright (c) 2016 Jakub Klama <jceel@FreeBSD.org>. 5 * Copyright (c) 2018 Alexander Motin <mav@FreeBSD.org> 6 * All rights reserved. 7 * 8 * Redistribution and use in source and binary forms, with or without --- 105 unchanged lines hidden (view full) --- 114 memcpy(*buf + ptr, iov[i].iov_base, iov[i].iov_len); 115 ptr += iov[i].iov_len; 116 } 117 118 return (total); 119} 120 121ssize_t |
122buf_to_iov(const void *buf, size_t buflen, struct iovec *iov, int niov, | 122buf_to_iov(const void *buf, size_t buflen, const struct iovec *iov, int niov, |
123 size_t seek) 124{ 125 struct iovec *diov; | 123 size_t seek) 124{ 125 struct iovec *diov; |
126 int ndiov, i; | |
127 size_t off = 0, len; | 126 size_t off = 0, len; |
127 int i; |
|
128 | 128 |
129#ifndef __FreeBSD__ 130 diov = NULL; 131#endif 132 |
|
129 if (seek > 0) { | 133 if (seek > 0) { |
134 int ndiov; 135 |
|
130 diov = malloc(sizeof(struct iovec) * niov); 131 seek_iov(iov, niov, diov, &ndiov, seek); | 136 diov = malloc(sizeof(struct iovec) * niov); 137 seek_iov(iov, niov, diov, &ndiov, seek); |
132 } else { 133 diov = iov; 134 ndiov = niov; | 138 iov = diov; 139 niov = ndiov; |
135 } 136 | 140 } 141 |
137 for (i = 0; i < ndiov && off < buflen; i++) { 138 len = MIN(diov[i].iov_len, buflen - off); 139 memcpy(diov[i].iov_base, buf + off, len); | 142 for (i = 0; i < niov && off < buflen; i++) { 143 len = MIN(iov[i].iov_len, buflen - off); 144 memcpy(iov[i].iov_base, buf + off, len); |
140 off += len; 141 } 142 143 if (seek > 0) 144 free(diov); 145 146 return ((ssize_t)off); 147} 148 | 145 off += len; 146 } 147 148 if (seek > 0) 149 free(diov); 150 151 return ((ssize_t)off); 152} 153 |