Improve networking type correctness

read() and write() return ssize_t (signed long), not int.

For other offsets, we can use the unsigned size_t type instead
of a signed offset (since our replication offsets and buffer
positions are never negative).
This commit is contained in:
Matt Stancliff 2015-01-18 16:46:25 -05:00
parent f704360462
commit 53c082ec39
5 changed files with 13 additions and 12 deletions

View File

@ -391,7 +391,7 @@ int anetUnixNonBlockConnect(char *err, char *path)
* (unless error or EOF condition is encountered) */ * (unless error or EOF condition is encountered) */
int anetRead(int fd, char *buf, int count) int anetRead(int fd, char *buf, int count)
{ {
int nread, totlen = 0; ssize_t nread, totlen = 0;
while(totlen != count) { while(totlen != count) {
nread = read(fd,buf,count-totlen); nread = read(fd,buf,count-totlen);
if (nread == 0) return totlen; if (nread == 0) return totlen;
@ -406,7 +406,7 @@ int anetRead(int fd, char *buf, int count)
* (unless error is encountered) */ * (unless error is encountered) */
int anetWrite(int fd, char *buf, int count) int anetWrite(int fd, char *buf, int count)
{ {
int nwritten, totlen = 0; ssize_t nwritten, totlen = 0;
while(totlen != count) { while(totlen != count) {
nwritten = write(fd,buf,count-totlen); nwritten = write(fd,buf,count-totlen);
if (nwritten == 0) return totlen; if (nwritten == 0) return totlen;

View File

@ -4462,7 +4462,7 @@ try_again:
{ {
sds buf = cmd.io.buffer.ptr; sds buf = cmd.io.buffer.ptr;
size_t pos = 0, towrite; size_t pos = 0, towrite;
int nwritten = 0; ssize_t nwritten = 0;
while ((towrite = sdslen(buf)-pos) > 0) { while ((towrite = sdslen(buf)-pos) > 0) {
towrite = (towrite > (64*1024) ? (64*1024) : towrite); towrite = (towrite > (64*1024) ? (64*1024) : towrite);

View File

@ -797,7 +797,8 @@ void freeClientsInAsyncFreeQueue(void) {
void sendReplyToClient(aeEventLoop *el, int fd, void *privdata, int mask) { void sendReplyToClient(aeEventLoop *el, int fd, void *privdata, int mask) {
redisClient *c = privdata; redisClient *c = privdata;
int nwritten = 0, totwritten = 0, objlen; ssize_t nwritten = 0, totwritten = 0;
size_t objlen;
size_t objmem; size_t objmem;
robj *o; robj *o;
REDIS_NOTUSED(el); REDIS_NOTUSED(el);
@ -1621,7 +1622,7 @@ int checkClientOutputBufferLimits(redisClient *c) {
* called from contexts where the client can't be freed safely, i.e. from the * called from contexts where the client can't be freed safely, i.e. from the
* lower level functions pushing data inside the client output buffers. */ * lower level functions pushing data inside the client output buffers. */
void asyncCloseClientOnOutputBufferLimitReached(redisClient *c) { void asyncCloseClientOnOutputBufferLimitReached(redisClient *c) {
redisAssert(c->reply_bytes < ULONG_MAX-(1024*64)); redisAssert(c->reply_bytes < SIZE_MAX-(1024*64));
if (c->reply_bytes == 0 || c->flags & REDIS_CLOSE_ASAP) return; if (c->reply_bytes == 0 || c->flags & REDIS_CLOSE_ASAP) return;
if (checkClientOutputBufferLimits(c)) { if (checkClientOutputBufferLimits(c)) {
sds client = catClientInfoString(sdsempty(),c); sds client = catClientInfoString(sdsempty(),c);

View File

@ -86,7 +86,7 @@ typedef struct _client {
char **randptr; /* Pointers to :rand: strings inside the command buf */ char **randptr; /* Pointers to :rand: strings inside the command buf */
size_t randlen; /* Number of pointers in client->randptr */ size_t randlen; /* Number of pointers in client->randptr */
size_t randfree; /* Number of unused pointers in client->randptr */ size_t randfree; /* Number of unused pointers in client->randptr */
unsigned int written; /* Bytes of 'obuf' already written */ size_t written; /* Bytes of 'obuf' already written */
long long start; /* Start time of a request */ long long start; /* Start time of a request */
long long latency; /* Request latency */ long long latency; /* Request latency */
int pending; /* Number of pending requests (replies to consume) */ int pending; /* Number of pending requests (replies to consume) */
@ -266,7 +266,7 @@ static void writeHandler(aeEventLoop *el, int fd, void *privdata, int mask) {
if (sdslen(c->obuf) > c->written) { if (sdslen(c->obuf) > c->written) {
void *ptr = c->obuf+c->written; void *ptr = c->obuf+c->written;
int nwritten = write(c->context->fd,ptr,sdslen(c->obuf)-c->written); ssize_t nwritten = write(c->context->fd,ptr,sdslen(c->obuf)-c->written);
if (nwritten == -1) { if (nwritten == -1) {
if (errno != EPIPE) if (errno != EPIPE)
fprintf(stderr, "Writing to socket: %s\n", strerror(errno)); fprintf(stderr, "Writing to socket: %s\n", strerror(errno));

View File

@ -542,8 +542,8 @@ typedef struct redisClient {
int multibulklen; /* number of multi bulk arguments left to read */ int multibulklen; /* number of multi bulk arguments left to read */
long bulklen; /* length of bulk argument in multi bulk request */ long bulklen; /* length of bulk argument in multi bulk request */
list *reply; list *reply;
unsigned long reply_bytes; /* Tot bytes of objects in reply list */ size_t reply_bytes; /* Tot bytes of objects in reply list */
int sentlen; /* Amount of bytes already sent in the current size_t sentlen; /* Amount of bytes already sent in the current
buffer or object being sent. */ buffer or object being sent. */
time_t ctime; /* Client creation time */ time_t ctime; /* Client creation time */
time_t lastinteraction; /* time of the last interaction, used for timeout */ time_t lastinteraction; /* time of the last interaction, used for timeout */
@ -553,8 +553,8 @@ typedef struct redisClient {
int replstate; /* replication state if this is a slave */ int replstate; /* replication state if this is a slave */
int repl_put_online_on_ack; /* Install slave write handler on ACK. */ int repl_put_online_on_ack; /* Install slave write handler on ACK. */
int repldbfd; /* replication DB file descriptor */ int repldbfd; /* replication DB file descriptor */
off_t repldboff; /* replication DB file offset */ size_t repldboff; /* replication DB file offset */
off_t repldbsize; /* replication DB file size */ size_t repldbsize; /* replication DB file size */
sds replpreamble; /* replication DB preamble. */ sds replpreamble; /* replication DB preamble. */
long long reploff; /* replication offset if this is our master */ long long reploff; /* replication offset if this is our master */
long long repl_ack_off; /* replication ack offset, if this is a slave */ long long repl_ack_off; /* replication ack offset, if this is a slave */
@ -571,7 +571,7 @@ typedef struct redisClient {
sds peerid; /* Cached peer ID. */ sds peerid; /* Cached peer ID. */
/* Response buffer */ /* Response buffer */
int bufpos; size_t bufpos;
char buf[REDIS_REPLY_CHUNK_BYTES]; char buf[REDIS_REPLY_CHUNK_BYTES];
} redisClient; } redisClient;