Use unsigned integers in SDS header.

This raises the max string to 4GB without any downside.
This commit is contained in:
antirez 2014-08-12 15:17:28 +02:00
parent cf85b5ba81
commit 68db7b1f56
4 changed files with 15 additions and 9 deletions

7
deps/hiredis/sds.c vendored
View File

@ -200,7 +200,10 @@ size_t sdsAllocSize(sds s) {
void sdsIncrLen(sds s, int incr) { void sdsIncrLen(sds s, int incr) {
struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr))); struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr)));
assert(sh->free >= incr); if (incr >= 0)
assert(sh->free >= (unsigned int)incr);
else
assert(sh->len >= (unsigned int)(-incr));
sh->len += incr; sh->len += incr;
sh->free -= incr; sh->free -= incr;
assert(sh->free >= 0); assert(sh->free >= 0);
@ -457,7 +460,7 @@ sds sdscatfmt(sds s, char const *fmt, ...) {
i = initlen; /* Position of the next byte to write to dest str. */ i = initlen; /* Position of the next byte to write to dest str. */
while(*f) { while(*f) {
char next, *str; char next, *str;
int l; unsigned int l;
long long num; long long num;
unsigned long long unum; unsigned long long unum;

4
deps/hiredis/sds.h vendored
View File

@ -39,8 +39,8 @@
typedef char *sds; typedef char *sds;
struct sdshdr { struct sdshdr {
int len; unsigned int len;
int free; unsigned int free;
char buf[]; char buf[];
}; };

View File

@ -200,7 +200,10 @@ size_t sdsAllocSize(sds s) {
void sdsIncrLen(sds s, int incr) { void sdsIncrLen(sds s, int incr) {
struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr))); struct sdshdr *sh = (void*) (s-(sizeof(struct sdshdr)));
assert(sh->free >= incr); if (incr >= 0)
assert(sh->free >= (unsigned int)incr);
else
assert(sh->len >= (unsigned int)(-incr));
sh->len += incr; sh->len += incr;
sh->free -= incr; sh->free -= incr;
assert(sh->free >= 0); assert(sh->free >= 0);
@ -458,7 +461,7 @@ sds sdscatfmt(sds s, char const *fmt, ...) {
i = initlen; /* Position of the next byte to write to dest str. */ i = initlen; /* Position of the next byte to write to dest str. */
while(*f) { while(*f) {
char next, *str; char next, *str;
int l; unsigned int l;
long long num; long long num;
unsigned long long unum; unsigned long long unum;

View File

@ -39,8 +39,8 @@
typedef char *sds; typedef char *sds;
struct sdshdr { struct sdshdr {
int len; unsigned int len;
int free; unsigned int free;
char buf[]; char buf[];
}; };