diff options
Diffstat (limited to 'ot_iovec.c')
| -rw-r--r-- | ot_iovec.c | 21 |
1 files changed, 20 insertions, 1 deletions
| @@ -35,6 +35,26 @@ void *iovec_increase( int *iovec_entries, struct iovec **iovector, size_t new_al | |||
| 35 | return new_data; | 35 | return new_data; |
| 36 | } | 36 | } |
| 37 | 37 | ||
| 38 | void *iovec_append( int *iovec_entries, struct iovec **iovector, struct iovec *append_iovector) { | ||
| 39 | int new_entries = *iovec_entries + 1; | ||
| 40 | struct iovec *new_vec = realloc( *iovector, new_entries * sizeof( struct iovec ) ); | ||
| 41 | if( !new_vec ) | ||
| 42 | return NULL; | ||
| 43 | |||
| 44 | /* Take over data from appended iovec */ | ||
| 45 | new_vec[*iovec_entries].iov_base = append_iovector->iov_base; | ||
| 46 | new_vec[*iovec_entries].iov_len = append_iovector->iov_len; | ||
| 47 | |||
| 48 | append_iovector->iov_base = NULL; | ||
| 49 | append_iovector->iov_len = 0; | ||
| 50 | |||
| 51 | *iovector = new_vec; | ||
| 52 | *iovec_entries = new_entries; | ||
| 53 | |||
| 54 | return new_vec; | ||
| 55 | } | ||
| 56 | |||
| 57 | |||
| 38 | void iovec_free( int *iovec_entries, struct iovec **iovector ) { | 58 | void iovec_free( int *iovec_entries, struct iovec **iovector ) { |
| 39 | int i; | 59 | int i; |
| 40 | for( i=0; i<*iovec_entries; ++i ) | 60 | for( i=0; i<*iovec_entries; ++i ) |
| @@ -64,7 +84,6 @@ void *iovec_fix_increase_or_free( int *iovec_entries, struct iovec **iovector, v | |||
| 64 | return new_data; | 84 | return new_data; |
| 65 | } | 85 | } |
| 66 | 86 | ||
| 67 | |||
| 68 | size_t iovec_length( const int *iovec_entries, const struct iovec **iovector ) { | 87 | size_t iovec_length( const int *iovec_entries, const struct iovec **iovector ) { |
| 69 | size_t length = 0; | 88 | size_t length = 0; |
| 70 | int i; | 89 | int i; |
