ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/JSON-XS/XS.xs
(Generate patch)

Comparing JSON-XS/XS.xs (file contents):
Revision 1.94 by root, Thu Nov 20 03:59:53 2008 UTC vs.
Revision 1.95 by root, Sun Feb 22 06:55:28 2009 UTC

195need (enc_t *enc, STRLEN len) 195need (enc_t *enc, STRLEN len)
196{ 196{
197 if (expect_false (enc->cur + len >= enc->end)) 197 if (expect_false (enc->cur + len >= enc->end))
198 { 198 {
199 STRLEN cur = enc->cur - (char *)SvPVX (enc->sv); 199 STRLEN cur = enc->cur - (char *)SvPVX (enc->sv);
200 SvGROW (enc->sv, cur + len + 1); 200 SvGROW (enc->sv, cur + (len < (cur >> 2) ? cur >> 2 : len) + 1);
201 enc->cur = SvPVX (enc->sv) + cur; 201 enc->cur = SvPVX (enc->sv) + cur;
202 enc->end = SvPVX (enc->sv) + SvLEN (enc->sv) - 1; 202 enc->end = SvPVX (enc->sv) + SvLEN (enc->sv) - 1;
203 } 203 }
204} 204}
205 205
970 { 970 {
971 STRLEN len = cur - buf; 971 STRLEN len = cur - buf;
972 972
973 if (sv) 973 if (sv)
974 { 974 {
975 SvGROW (sv, SvCUR (sv) + len + 1); 975 STRLEN cur = SvCUR (sv);
976
977 if (SvLEN (sv) <= cur + len)
978 SvGROW (sv, cur + (len < (cur >> 2) ? cur >> 2 : len) + 1);
979
976 memcpy (SvPVX (sv) + SvCUR (sv), buf, len); 980 memcpy (SvPVX (sv) + SvCUR (sv), buf, len);
977 SvCUR_set (sv, SvCUR (sv) + len); 981 SvCUR_set (sv, SvCUR (sv) + len);
978 } 982 }
979 else 983 else
980 sv = newSVpvn (buf, len); 984 sv = newSVpvn (buf, len);
1805 } 1809 }
1806 1810
1807 { 1811 {
1808 STRLEN len; 1812 STRLEN len;
1809 const char *str = SvPV (jsonstr, len); 1813 const char *str = SvPV (jsonstr, len);
1810 SvGROW (self->incr_text, SvCUR (self->incr_text) + len + 1); 1814 STRLEN cur = SvCUR (self->incr_text);
1815
1816 if (SvLEN (self->incr_text) <= cur + len)
1817 SvGROW (self->incr_text, cur + (len < (cur >> 2) ? cur >> 2 : len) + 1);
1818
1811 Move (str, SvEND (self->incr_text), len, char); 1819 Move (str, SvEND (self->incr_text), len, char);
1812 SvCUR_set (self->incr_text, SvCUR (self->incr_text) + len); 1820 SvCUR_set (self->incr_text, SvCUR (self->incr_text) + len);
1813 *SvEND (self->incr_text) = 0; // this should basically be a nop, too, but make sure it's there 1821 *SvEND (self->incr_text) = 0; // this should basically be a nop, too, but make sure it's there
1814 } 1822 }
1815 } 1823 }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines