Skip to content

Commit fa0f29f

Browse files
committed
Fix various int/size_t discrepancies
Removes warnings on windows. Fixes at least one bug, negating an unsigned int.
1 parent dfa33e6 commit fa0f29f

File tree

7 files changed

+47
-45
lines changed

7 files changed

+47
-45
lines changed

async.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ static void *callbackValDup(void *privdata, const void *src) {
7575
}
7676

7777
static int callbackKeyCompare(void *privdata, const void *key1, const void *key2) {
78-
int l1, l2;
78+
size_t l1, l2;
7979
((void) privdata);
8080

8181
l1 = sdslen((const sds)key1);

dict.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ static int _dictInit(dict *ht, dictType *type, void *privDataPtr);
5151

5252
/* Generic hash function (a popular one from Bernstein).
5353
* I tested a few and this was the best. */
54-
static unsigned int dictGenHashFunction(const unsigned char *buf, int len) {
54+
static unsigned int dictGenHashFunction(const unsigned char *buf, size_t len) {
5555
unsigned int hash = 5381;
5656

5757
while (len--)

dict.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ typedef struct dictIterator {
111111
#define dictSize(ht) ((ht)->used)
112112

113113
/* API */
114-
static unsigned int dictGenHashFunction(const unsigned char *buf, int len);
114+
static unsigned int dictGenHashFunction(const unsigned char *buf, size_t len);
115115
static dict *dictCreate(dictType *type, void *privDataPtr);
116116
static int dictExpand(dict *ht, unsigned long size);
117117
static int dictAdd(dict *ht, void *key, void *val);

hiredis.c

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -312,12 +312,12 @@ static size_t bulklen(size_t len) {
312312
int redisvFormatCommand(char **target, const char *format, va_list ap) {
313313
const char *c = format;
314314
char *cmd = NULL; /* final command */
315-
int pos; /* position in final command */
315+
size_t pos; /* position in final command */
316316
sds curarg, newarg; /* current argument */
317317
int touched = 0; /* was the current argument touched? */
318318
char **curargv = NULL, **newargv = NULL;
319319
int argc = 0;
320-
int totlen = 0;
320+
size_t totlen = 0;
321321
int error_type = 0; /* 0 = no error; -1 = memory error; -2 = format error */
322322
int j;
323323

@@ -516,7 +516,7 @@ int redisvFormatCommand(char **target, const char *format, va_list ap) {
516516

517517
hi_free(curargv);
518518
*target = cmd;
519-
return totlen;
519+
return (int)totlen;
520520

521521
format_err:
522522
error_type = -2;
@@ -576,7 +576,7 @@ int redisFormatSdsCommandArgv(sds *target, int argc, const char **argv,
576576
const size_t *argvlen)
577577
{
578578
sds cmd, aux;
579-
unsigned long long totlen;
579+
size_t totlen;
580580
int j;
581581
size_t len;
582582

@@ -617,7 +617,7 @@ int redisFormatSdsCommandArgv(sds *target, int argc, const char **argv,
617617
assert(sdslen(cmd)==totlen);
618618

619619
*target = cmd;
620-
return totlen;
620+
return (int) totlen; /* should use ssize_t */
621621
}
622622

623623
void redisFreeSdsCommand(sds cmd) {
@@ -631,9 +631,10 @@ void redisFreeSdsCommand(sds cmd) {
631631
*/
632632
int redisFormatCommandArgv(char **target, int argc, const char **argv, const size_t *argvlen) {
633633
char *cmd = NULL; /* final command */
634-
int pos; /* position in final command */
634+
size_t pos; /* position in final command */
635635
size_t len;
636-
int totlen, j;
636+
size_t totlen;
637+
int j;
637638

638639
/* Abort on a NULL target */
639640
if (target == NULL)
@@ -664,7 +665,7 @@ int redisFormatCommandArgv(char **target, int argc, const char **argv, const siz
664665
cmd[pos] = '\0';
665666

666667
*target = cmd;
667-
return totlen;
668+
return (int)totlen; /* should really use ssize_t */
668669
}
669670

670671
void redisFreeCommand(char *cmd) {
@@ -939,7 +940,7 @@ redisPushFn *redisSetPushCallback(redisContext *c, redisPushFn *fn) {
939940
* see if there is a reply available. */
940941
int redisBufferRead(redisContext *c) {
941942
char buf[1024*16];
942-
int nread;
943+
ssize_t nread;
943944

944945
/* Return early when the context has seen an error. */
945946
if (c->err)

net.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ static int redisContextWaitReady(redisContext *c, long msec) {
272272
}
273273

274274
int redisCheckConnectDone(redisContext *c, int *completed) {
275-
int rc = connect(c->fd, (const struct sockaddr *)c->saddr, c->addrlen);
275+
int rc = connect(c->fd, (const struct sockaddr *)c->saddr, (socklen_t)c->addrlen);
276276
if (rc == 0) {
277277
*completed = 1;
278278
return REDIS_OK;
@@ -315,7 +315,7 @@ int redisCheckSocketError(redisContext *c) {
315315

316316
int redisContextSetTimeout(redisContext *c, const struct timeval tv) {
317317
const void *to_ptr = &tv;
318-
size_t to_sz = sizeof(tv);
318+
socklen_t to_sz = sizeof(tv);
319319

320320
if (setsockopt(c->fd,SOL_SOCKET,SO_RCVTIMEO,to_ptr,to_sz) == -1) {
321321
__redisSetErrorFromErrno(c,REDIS_ERR_IO,"setsockopt(SO_RCVTIMEO)");
@@ -457,7 +457,7 @@ static int _redisContextConnectTcp(redisContext *c, const char *addr, int port,
457457
}
458458

459459
for (b = bservinfo; b != NULL; b = b->ai_next) {
460-
if (bind(s,b->ai_addr,b->ai_addrlen) != -1) {
460+
if (bind(s,b->ai_addr,(socklen_t)b->ai_addrlen) != -1) {
461461
bound = 1;
462462
break;
463463
}
@@ -480,7 +480,7 @@ static int _redisContextConnectTcp(redisContext *c, const char *addr, int port,
480480
memcpy(c->saddr, p->ai_addr, p->ai_addrlen);
481481
c->addrlen = p->ai_addrlen;
482482

483-
if (connect(s,p->ai_addr,p->ai_addrlen) == -1) {
483+
if (connect(s,p->ai_addr,(socklen_t)p->ai_addrlen) == -1) {
484484
if (errno == EHOSTUNREACH) {
485485
redisNetClose(c);
486486
continue;
@@ -600,13 +600,13 @@ int redisContextConnectUnix(redisContext *c, const char *path, const struct time
600600

601601
c->flags |= REDIS_CONNECTED;
602602
return REDIS_OK;
603+
oom:
604+
__redisSetError(c, REDIS_ERR_OOM, "Out of memory");
605+
return REDIS_ERR;
603606
#else
604607
/* We currently do not support Unix sockets for Windows. */
605608
/* TODO(m): https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/ */
606609
errno = EPROTONOSUPPORT;
607610
return REDIS_ERR;
608611
#endif /* _WIN32 */
609-
oom:
610-
__redisSetError(c, REDIS_ERR_OOM, "Out of memory");
611-
return REDIS_ERR;
612612
}

read.c

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ static int string2ll(const char *s, size_t slen, long long *value) {
213213
if (negative) {
214214
if (v > ((unsigned long long)(-(LLONG_MIN+1))+1)) /* Overflow. */
215215
return REDIS_ERR;
216-
if (value != NULL) *value = -v;
216+
if (value != NULL) *value = -(long long)v;
217217
} else {
218218
if (v > LLONG_MAX) /* Overflow. */
219219
return REDIS_ERR;
@@ -222,9 +222,9 @@ static int string2ll(const char *s, size_t slen, long long *value) {
222222
return REDIS_OK;
223223
}
224224

225-
static char *readLine(redisReader *r, int *_len) {
225+
static char *readLine(redisReader *r, size_t *_len) {
226226
char *p, *s;
227-
int len;
227+
size_t len;
228228

229229
p = r->buf+r->pos;
230230
s = seekNewline(p,(r->len-r->pos));
@@ -269,7 +269,7 @@ static int processLineItem(redisReader *r) {
269269
redisReadTask *cur = r->task[r->ridx];
270270
void *obj;
271271
char *p;
272-
int len;
272+
size_t len;
273273

274274
if ((p = readLine(r,&len)) != NULL) {
275275
if (cur->type == REDIS_REPLY_INTEGER) {
@@ -290,7 +290,7 @@ static int processLineItem(redisReader *r) {
290290
char buf[326], *eptr;
291291
double d;
292292

293-
if ((size_t)len >= sizeof(buf)) {
293+
if (len >= sizeof(buf)) {
294294
__redisReaderSetError(r,REDIS_ERR_PROTOCOL,
295295
"Double value is too large");
296296
return REDIS_ERR;
@@ -349,7 +349,7 @@ static int processLineItem(redisReader *r) {
349349
} else if (cur->type == REDIS_REPLY_BIGNUM) {
350350
/* Ensure all characters are decimal digits (with possible leading
351351
* minus sign). */
352-
for (int i = 0; i < len; i++) {
352+
for (size_t i = 0; i < len; i++) {
353353
/* XXX Consider: Allow leading '+'? Error on leading '0's? */
354354
if (i == 0 && p[0] == '-') continue;
355355
if (p[i] < '0' || p[i] > '9') {
@@ -364,7 +364,7 @@ static int processLineItem(redisReader *r) {
364364
obj = (void*)REDIS_REPLY_BIGNUM;
365365
} else {
366366
/* Type will be error or status. */
367-
for (int i = 0; i < len; i++) {
367+
for (size_t i = 0; i < len; i++) {
368368
if (p[i] == '\r' || p[i] == '\n') {
369369
__redisReaderSetError(r,REDIS_ERR_PROTOCOL,
370370
"Bad simple string value");
@@ -396,7 +396,7 @@ static int processBulkItem(redisReader *r) {
396396
void *obj = NULL;
397397
char *p, *s;
398398
long long len;
399-
unsigned long bytelen;
399+
size_t bytelen;
400400
int success = 0;
401401

402402
p = r->buf+r->pos;
@@ -439,7 +439,7 @@ static int processBulkItem(redisReader *r) {
439439
if (r->fn && r->fn->createString)
440440
obj = r->fn->createString(cur,s+2,len);
441441
else
442-
obj = (void*)(long)cur->type;
442+
obj = (void*)(intptr_t)cur->type;
443443
success = 1;
444444
}
445445
}
@@ -494,7 +494,8 @@ static int processAggregateItem(redisReader *r) {
494494
void *obj;
495495
char *p;
496496
long long elements;
497-
int root = 0, len;
497+
int root = 0;
498+
size_t len;
498499

499500
if (r->ridx == r->tasks - 1) {
500501
if (redisReaderGrow(r) == REDIS_ERR)
@@ -536,7 +537,7 @@ static int processAggregateItem(redisReader *r) {
536537
if (r->fn && r->fn->createArray)
537538
obj = r->fn->createArray(cur,elements);
538539
else
539-
obj = (void*)(long)cur->type;
540+
obj = (void*)(intptr_t)cur->type;
540541

541542
if (obj == NULL) {
542543
__redisReaderSetErrorOOM(r);

sds.c

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -98,27 +98,27 @@ sds sdsnewlen(const void *init, size_t initlen) {
9898
fp = ((unsigned char*)s)-1;
9999
switch(type) {
100100
case SDS_TYPE_5: {
101-
*fp = type | (initlen << SDS_TYPE_BITS);
101+
*fp = type | ((char)initlen << SDS_TYPE_BITS);
102102
break;
103103
}
104104
case SDS_TYPE_8: {
105105
SDS_HDR_VAR(8,s);
106-
sh->len = initlen;
107-
sh->alloc = initlen;
106+
sh->len = (uint8_t) initlen;
107+
sh->alloc = (uint8_t) initlen;
108108
*fp = type;
109109
break;
110110
}
111111
case SDS_TYPE_16: {
112112
SDS_HDR_VAR(16,s);
113-
sh->len = initlen;
114-
sh->alloc = initlen;
113+
sh->len = (uint16_t)initlen;
114+
sh->alloc = (uint16_t)initlen;
115115
*fp = type;
116116
break;
117117
}
118118
case SDS_TYPE_32: {
119119
SDS_HDR_VAR(32,s);
120-
sh->len = initlen;
121-
sh->alloc = initlen;
120+
sh->len = (uint32_t)initlen;
121+
sh->alloc = (uint32_t)initlen;
122122
*fp = type;
123123
break;
124124
}
@@ -174,7 +174,7 @@ void sdsfree(sds s) {
174174
* the output will be "6" as the string was modified but the logical length
175175
* remains 6 bytes. */
176176
void sdsupdatelen(sds s) {
177-
int reallen = strlen(s);
177+
size_t reallen = strlen(s);
178178
sdssetlen(s, reallen);
179179
}
180180

@@ -428,7 +428,7 @@ sds sdscpy(sds s, const char *t) {
428428
* The function returns the length of the null-terminated string
429429
* representation stored at 's'. */
430430
#define SDS_LLSTR_SIZE 21
431-
int sdsll2str(char *s, long long value) {
431+
size_t sdsll2str(char *s, long long value) {
432432
char *p, aux;
433433
unsigned long long v;
434434
size_t l;
@@ -460,7 +460,7 @@ int sdsll2str(char *s, long long value) {
460460
}
461461

462462
/* Identical sdsll2str(), but for unsigned long long type. */
463-
int sdsull2str(char *s, unsigned long long v) {
463+
size_t sdsull2str(char *s, unsigned long long v) {
464464
char *p, aux;
465465
size_t l;
466466

@@ -494,7 +494,7 @@ int sdsull2str(char *s, unsigned long long v) {
494494
*/
495495
sds sdsfromlonglong(long long value) {
496496
char buf[SDS_LLSTR_SIZE];
497-
int len = sdsll2str(buf,value);
497+
size_t len = sdsll2str(buf,value);
498498

499499
return sdsnewlen(buf,len);
500500
}
@@ -580,7 +580,7 @@ sds sdscatprintf(sds s, const char *fmt, ...) {
580580
*/
581581
sds sdscatfmt(sds s, char const *fmt, ...) {
582582
const char *f = fmt;
583-
int i;
583+
size_t i;
584584
va_list ap;
585585

586586
va_start(ap,fmt);
@@ -755,14 +755,14 @@ int sdsrange(sds s, ssize_t start, ssize_t end) {
755755

756756
/* Apply tolower() to every character of the sds string 's'. */
757757
void sdstolower(sds s) {
758-
int len = sdslen(s), j;
758+
size_t len = sdslen(s), j;
759759

760760
for (j = 0; j < len; j++) s[j] = tolower(s[j]);
761761
}
762762

763763
/* Apply toupper() to every character of the sds string 's'. */
764764
void sdstoupper(sds s) {
765-
int len = sdslen(s), j;
765+
size_t len = sdslen(s), j;
766766

767767
for (j = 0; j < len; j++) s[j] = toupper(s[j]);
768768
}
@@ -786,7 +786,7 @@ int sdscmp(const sds s1, const sds s2) {
786786
l2 = sdslen(s2);
787787
minlen = (l1 < l2) ? l1 : l2;
788788
cmp = memcmp(s1,s2,minlen);
789-
if (cmp == 0) return l1-l2;
789+
if (cmp == 0) return l1 < l2 ? -1 : 1;
790790
return cmp;
791791
}
792792

0 commit comments

Comments
 (0)