HiveBrain v1.2.0
Get Started
← Back to all entries
patterncMinor

Casting const pointer to non-const pointer when using struct iovec

Submitted by: @import:stackexchange-codereview··
0
Viewed 0 times
structiovecnonconstcastingpointerusingwhen

Problem

struct iovec is defined in ` by the following way:

/* Structure for scatter/gather I/O.  */
struct iovec
  {
    void *iov_base; /* Pointer to data.  */
    size_t iov_len; /* Length of data.  */
  };


Now I do ugly casting from
const void to void:

int send_frame_once( int fd, const struct iovec* iov, size_t iovlen );

int send_frame( int fd, const void* buffer, size_t len )
{
    struct iovec iov;
    iov.iov_base = (void*)buffer;       /* const iov cast */
    iov.iov_len  = len;
    return send_frame_once( fd, &iov, 1 );
}


Is that necessary kludge?
Or should I remove
const keyword from declaration of send_frame` function. Like this:

int send_frame( int fd, void* buffer, size_t len )

Solution

I think you should keep it. const is not only meant for the compiler, but also for anybody reading your code. Even with the void* cast, you're still saying to readers "Trust me, I'm not touching your buffer!" and this is a valuable information that should not be discarded.

Context

StackExchange Code Review Q#9547, answer score: 7

Revisions (0)

No revisions yet.