Commit 68db7b1f authored by antirez's avatar antirez
Browse files

Use unsigned integers in SDS header.

This raises the max string to 4GB without any downside.
parent cf85b5ba
...@@ -123,7 +123,7 @@ void sdsclear(sds s) { ...@@ -123,7 +123,7 @@ void sdsclear(sds s) {
/* Enlarge the free space at the end of the sds string so that the caller /* Enlarge the free space at the end of the sds string so that the caller
* is sure that after calling this function can overwrite up to addlen * is sure that after calling this function can overwrite up to addlen
* bytes after the end of the string, plus one more byte for nul term. * bytes after the end of the string, plus one more byte for nul term.
* *
* Note: this does not change the *length* of the sds string as returned * Note: this does not change the *length* of the sds string as returned
* by sdslen(), but only the free buffer space we have. */ * by sdslen(), but only the free buffer space we have. */
sds sdsMakeRoomFor(sds s, size_t addlen) { sds sdsMakeRoomFor(sds s, size_t addlen) {
...@@ -200,7 +200,10 @@ size_t sdsAllocSize(sds s) { ...@@ -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, ...) { ...@@ -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;
......
...@@ -39,8 +39,8 @@ ...@@ -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[];
}; };
......
...@@ -200,7 +200,10 @@ size_t sdsAllocSize(sds s) { ...@@ -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, ...) { ...@@ -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;
......
...@@ -39,8 +39,8 @@ ...@@ -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[];
}; };
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment