add buffer_tosa check to marshal.c
failed attempt to improve scan_ulongn, results in essentially same code but the C code looks slighly better so I'm keeping it
This commit is contained in:
parent
cf3dc34288
commit
9b6671efee
@ -14,10 +14,8 @@ size_t scan_ulongn(const char* src,size_t n,unsigned long int* dest) {
|
|||||||
* so instead of *10 we do (l<<3) (i.e. *8) + (l<<1) (i.e. *2)
|
* so instead of *10 we do (l<<3) (i.e. *8) + (l<<1) (i.e. *2)
|
||||||
* and check for overflow on all the intermediate steps */
|
* and check for overflow on all the intermediate steps */
|
||||||
n=l<<3; if ((n>>3)!=l) break;
|
n=l<<3; if ((n>>3)!=l) break;
|
||||||
if (n+(l<<1) < n) break;
|
if (n+(l<<1)+c < n) break;
|
||||||
n+=l<<1;
|
l=n+(l<<1)+c;
|
||||||
if (n+c < n) break;
|
|
||||||
l=n+c;
|
|
||||||
++tmp;
|
++tmp;
|
||||||
}
|
}
|
||||||
if (tmp-src) *dest=l;
|
if (tmp-src) *dest=l;
|
||||||
|
@ -398,12 +398,22 @@ int main() {
|
|||||||
{
|
{
|
||||||
buffer b;
|
buffer b;
|
||||||
stralloc s;
|
stralloc s;
|
||||||
|
size_t i;
|
||||||
buffer_fromsa(&b,&sa);
|
buffer_fromsa(&b,&sa);
|
||||||
stralloc_init(&s);
|
stralloc_init(&s);
|
||||||
assert(buffer_getline_sa(&b,&s)==1 && stralloc_equals(&s,"foo\n"));
|
assert(buffer_getline_sa(&b,&s)==1 && stralloc_equals(&s,"foo\n"));
|
||||||
assert(buffer_getnewline_sa(&b,&s)==1 && stralloc_equals(&s,"bar\r\n"));
|
assert(buffer_getnewline_sa(&b,&s)==1 && stralloc_equals(&s,"bar\r\n"));
|
||||||
assert(buffer_getnewline_sa(&b,&s)==0 && stralloc_equals(&s,"baz"));
|
assert(buffer_getnewline_sa(&b,&s)==0 && stralloc_equals(&s,"baz"));
|
||||||
buffer_close(&b);
|
buffer_close(&b);
|
||||||
|
|
||||||
|
stralloc_free(&s);
|
||||||
|
buffer_tosa(&b,&s);
|
||||||
|
for (i=0; i<100; ++i)
|
||||||
|
buffer_puts(&b,"foo bar baz!\n");
|
||||||
|
buffer_flush(&b);
|
||||||
|
assert(s.len==100*sizeof("foo bar baz!"));
|
||||||
|
for (i=0; i<100; ++i)
|
||||||
|
assert(byte_equal(s.s+i*sizeof("foo bar baz!"),sizeof("foo bar baz!"),"foo bar baz!\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user