File tree 2 files changed +13
-3
lines changed
2 files changed +13
-3
lines changed Original file line number Diff line number Diff line change @@ -130,9 +130,9 @@ String::~String() {
130
130
131
131
inline void String::init (void ) {
132
132
setSSO (false );
133
+ setBuffer (nullptr );
133
134
setCapacity (0 );
134
135
setLen (0 );
135
- setBuffer (nullptr );
136
136
}
137
137
138
138
void String::invalidate (void ) {
Original file line number Diff line number Diff line change @@ -301,9 +301,19 @@ class String {
301
301
inline unsigned int len () const { return isSSO () ? sso.len : ptr.len ; }
302
302
inline unsigned int capacity () const { return isSSO () ? (unsigned int )SSOSIZE - 1 : ptr.cap ; } // Size of max string not including terminal NUL
303
303
inline void setSSO (bool set) { sso.isSSO = set; }
304
- inline void setLen (int len) { if (isSSO ()) sso.len = len; else ptr.len = len; }
304
+ inline void setLen (int len) {
305
+ if (isSSO ()) {
306
+ sso.len = len;
307
+ sso.buff [len] = 0 ;
308
+ } else {
309
+ ptr.len = len;
310
+ if (ptr.buff ) {
311
+ ptr.buff [len] = 0 ;
312
+ }
313
+ }
314
+ }
305
315
inline void setCapacity (int cap) { if (!isSSO ()) ptr.cap = cap; }
306
- inline void setBuffer (char *buff) { if (!isSSO ()) ptr.buff = buff; }
316
+ inline void setBuffer (char *buff) { if (!isSSO ()) ptr.buff = buff; }
307
317
// Buffer accessor functions
308
318
inline const char *buffer () const { return (const char *)(isSSO () ? sso.buff : ptr.buff ); }
309
319
inline char *wbuffer () const { return isSSO () ? const_cast <char *>(sso.buff ) : ptr.buff ; } // Writable version of buffer
You can’t perform that action at this time.
0 commit comments