Hi folks,
I'm starting to learn a little C, and I figured I'd learn from the
masters ;-) I needed to read in some data from the network, and I
figured the safe_* calls would be a good example of how to do it correctly.
So, I took a look, and found:
static void safe_read(int fd, void *buffer, unsigned size)
{
int n = 0;
while (n < size) {
int ret = xread(fd, (char *) buffer + n, size - n);
if (ret < 0)
die("read error (%s)", strerror(errno));
if (!ret)
die("The remote end hung up unexpectedly");
n += ret;
}
}
Surely size and 'n' should have the same signed-ness?
And, in fact, shouldn't they actually be size_t, rather than 'int',
since xread is defined as:
static inline ssize_t xread(int fd, void *buf, size_t len)
{
ssize_t nr;
while (1) {
nr = read(fd, buf, len);
if ((nr < 0) && (errno == EAGAIN || errno == EINTR))
continue;
return nr;
}
}
And finally, 'ret' in safe_read should be a 'ssize_t', not an int, right?
Or is it just a case that we don't really care, since we control the
ranges of the values, and the underlying types are int anyway? Patches
to follow if I get an indication that anyone cares, otherwise I'd be
posting my question to a C newbies group. ;-)
Rogan
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html