@@ -49,7 +49,6 @@ void ffStrbufPrependC(FFstrbuf* strbuf, char c);
4949void ffStrbufInsertNC (FFstrbuf * strbuf , uint32_t index , uint32_t num , char c );
5050
5151void ffStrbufSetNS (FFstrbuf * strbuf , uint32_t length , const char * value );
52- void ffStrbufSet (FFstrbuf * strbuf , const FFstrbuf * value );
5352FF_C_PRINTF (2 , 3 ) void ffStrbufSetF (FFstrbuf * strbuf , const char * format , ...);
5453
5554void ffStrbufTrimLeft (FFstrbuf * strbuf , char c );
@@ -102,8 +101,13 @@ FF_C_NODISCARD static inline FFstrbuf ffStrbufCreateA(uint32_t allocate)
102101
103102static inline void ffStrbufInitCopy (FFstrbuf * __restrict strbuf , const FFstrbuf * __restrict src )
104103{
105- ffStrbufInitA (strbuf , src -> allocated );
106- ffStrbufAppend (strbuf , src );
104+ if (src -> allocated == 0 ) // static string
105+ memcpy (strbuf , src , sizeof (FFstrbuf ));
106+ else
107+ {
108+ ffStrbufInitA (strbuf , src -> allocated );
109+ ffStrbufAppend (strbuf , src );
110+ }
107111}
108112
109113FF_C_NODISCARD static inline FFstrbuf ffStrbufCreateCopy (const FFstrbuf * src )
@@ -209,6 +213,17 @@ static inline void ffStrbufSetS(FFstrbuf* strbuf, const char* value)
209213 ffStrbufAppendNS (strbuf , (uint32_t ) strlen (value ), value );
210214}
211215
216+ static inline void ffStrbufSet (FFstrbuf * strbuf , const FFstrbuf * value )
217+ {
218+ assert (value && value != strbuf );
219+ if (strbuf -> allocated == 0 && value -> allocated == 0 )
220+ {
221+ memcpy (strbuf , value , sizeof (FFstrbuf ));
222+ return ;
223+ }
224+ ffStrbufSetNS (strbuf , value -> length , value -> chars );
225+ }
226+
212227static inline void ffStrbufInit (FFstrbuf * strbuf )
213228{
214229 extern char * CHAR_NULL_PTR ;
0 commit comments