@@ -196,9 +196,8 @@ ZEND_API zend_always_inline zend_string *zend_string_init(const char *str, size_
196
196
ZSTR_VAL (ret )[len ] = '\0' ;
197
197
return ret ;
198
198
}
199
- END_EXTERN_C ()
200
199
201
- static zend_always_inline zend_string * zend_string_safe_alloc (size_t n , size_t m , size_t l , bool persistent )
200
+ ZEND_API zend_always_inline zend_string * zend_string_safe_alloc (size_t n , size_t m , size_t l , bool persistent )
202
201
{
203
202
zend_string * ret = (zend_string * )safe_pemalloc (n , m , ZEND_MM_ALIGNED_SIZE (_ZSTR_STRUCT_SIZE (l )), persistent );
204
203
@@ -209,7 +208,7 @@ static zend_always_inline zend_string *zend_string_safe_alloc(size_t n, size_t m
209
208
return ret ;
210
209
}
211
210
212
- static zend_always_inline zend_string * zend_string_init_fast (const char * str , size_t len )
211
+ ZEND_API zend_always_inline zend_string * zend_string_init_fast (const char * str , size_t len )
213
212
{
214
213
if (len > 1 ) {
215
214
return zend_string_init (str , len , 0 );
@@ -220,7 +219,6 @@ static zend_always_inline zend_string *zend_string_init_fast(const char *str, si
220
219
}
221
220
}
222
221
223
- BEGIN_EXTERN_C ()
224
222
ZEND_API inline zend_string * zend_string_copy (zend_string * s )
225
223
{
226
224
if (!ZSTR_IS_INTERNED (s )) {
@@ -270,34 +268,33 @@ ZEND_API zend_always_inline zend_string *zend_string_realloc(zend_string *s, siz
270
268
}
271
269
return ret ;
272
270
}
273
- END_EXTERN_C ()
274
271
275
- static zend_always_inline zend_string * zend_string_extend (zend_string * s , size_t len , bool persistent )
272
+ ZEND_API zend_always_inline zend_string * zend_string_safe_realloc (zend_string * s , size_t n , size_t m , size_t l , bool persistent )
276
273
{
277
274
zend_string * ret ;
278
275
279
- ZEND_ASSERT (len >= ZSTR_LEN (s ));
280
276
if (!ZSTR_IS_INTERNED (s )) {
281
- if (EXPECTED ( GC_REFCOUNT (s ) == 1 ) ) {
282
- ret = (zend_string * )perealloc (s , ZEND_MM_ALIGNED_SIZE (_ZSTR_STRUCT_SIZE (len )), persistent );
283
- ZSTR_LEN (ret ) = len ;
277
+ if (GC_REFCOUNT (s ) == 1 ) {
278
+ ret = (zend_string * )safe_perealloc (s , n , m , ZEND_MM_ALIGNED_SIZE (_ZSTR_STRUCT_SIZE (l )), persistent );
279
+ ZSTR_LEN (ret ) = ( n * m ) + l ;
284
280
zend_string_forget_hash_val (ret );
285
281
return ret ;
286
282
}
287
283
}
288
- ret = zend_string_alloc ( len , persistent );
289
- memcpy (ZSTR_VAL (ret ), ZSTR_VAL (s ), ZSTR_LEN (s ) + 1 );
284
+ ret = zend_string_safe_alloc ( n , m , l , persistent );
285
+ memcpy (ZSTR_VAL (ret ), ZSTR_VAL (s ), MIN (( n * m ) + l , ZSTR_LEN (s ) ) + 1 );
290
286
if (!ZSTR_IS_INTERNED (s )) {
291
287
GC_DELREF (s );
292
288
}
293
289
return ret ;
294
290
}
291
+ END_EXTERN_C ()
295
292
296
- static zend_always_inline zend_string * zend_string_truncate (zend_string * s , size_t len , bool persistent )
293
+ static zend_always_inline zend_string * zend_string_extend (zend_string * s , size_t len , bool persistent )
297
294
{
298
295
zend_string * ret ;
299
296
300
- ZEND_ASSERT (len < = ZSTR_LEN (s ));
297
+ ZEND_ASSERT (len > = ZSTR_LEN (s ));
301
298
if (!ZSTR_IS_INTERNED (s )) {
302
299
if (EXPECTED (GC_REFCOUNT (s ) == 1 )) {
303
300
ret = (zend_string * )perealloc (s , ZEND_MM_ALIGNED_SIZE (_ZSTR_STRUCT_SIZE (len )), persistent );
@@ -307,33 +304,35 @@ static zend_always_inline zend_string *zend_string_truncate(zend_string *s, size
307
304
}
308
305
}
309
306
ret = zend_string_alloc (len , persistent );
310
- memcpy (ZSTR_VAL (ret ), ZSTR_VAL (s ), len + 1 );
307
+ memcpy (ZSTR_VAL (ret ), ZSTR_VAL (s ), ZSTR_LEN ( s ) + 1 );
311
308
if (!ZSTR_IS_INTERNED (s )) {
312
309
GC_DELREF (s );
313
310
}
314
311
return ret ;
315
312
}
316
313
317
- static zend_always_inline zend_string * zend_string_safe_realloc (zend_string * s , size_t n , size_t m , size_t l , bool persistent )
314
+ static zend_always_inline zend_string * zend_string_truncate (zend_string * s , size_t len , bool persistent )
318
315
{
319
316
zend_string * ret ;
320
317
318
+ ZEND_ASSERT (len <= ZSTR_LEN (s ));
321
319
if (!ZSTR_IS_INTERNED (s )) {
322
- if (GC_REFCOUNT (s ) == 1 ) {
323
- ret = (zend_string * )safe_perealloc (s , n , m , ZEND_MM_ALIGNED_SIZE (_ZSTR_STRUCT_SIZE (l )), persistent );
324
- ZSTR_LEN (ret ) = ( n * m ) + l ;
320
+ if (EXPECTED ( GC_REFCOUNT (s ) == 1 ) ) {
321
+ ret = (zend_string * )perealloc (s , ZEND_MM_ALIGNED_SIZE (_ZSTR_STRUCT_SIZE (len )), persistent );
322
+ ZSTR_LEN (ret ) = len ;
325
323
zend_string_forget_hash_val (ret );
326
324
return ret ;
327
325
}
328
326
}
329
- ret = zend_string_safe_alloc ( n , m , l , persistent );
330
- memcpy (ZSTR_VAL (ret ), ZSTR_VAL (s ), MIN (( n * m ) + l , ZSTR_LEN ( s )) + 1 );
327
+ ret = zend_string_alloc ( len , persistent );
328
+ memcpy (ZSTR_VAL (ret ), ZSTR_VAL (s ), len + 1 );
331
329
if (!ZSTR_IS_INTERNED (s )) {
332
330
GC_DELREF (s );
333
331
}
334
332
return ret ;
335
333
}
336
334
335
+ /* These functions have noinline variants */
337
336
static zend_always_inline void zend_string_free (zend_string * s )
338
337
{
339
338
if (!ZSTR_IS_INTERNED (s )) {
@@ -373,6 +372,7 @@ static zend_always_inline void zend_string_release_ex(zend_string *s, bool persi
373
372
}
374
373
}
375
374
}
375
+ /* }}} */
376
376
377
377
BEGIN_EXTERN_C ()
378
378
ZEND_API zend_always_inline bool zend_string_equals_cstr (const zend_string * s1 , const char * s2 , size_t s2_length )
0 commit comments