@@ -90,7 +90,7 @@ ZEND_GET_MODULE(sysvshm)
90
90
/* TODO: Make this thread-safe. */
91
91
sysvshm_module php_sysvshm ;
92
92
93
- static int php_put_shm_data (sysvshm_chunk_head * ptr , zend_long key , const char * data , zend_long len );
93
+ static bool php_put_shm_data (sysvshm_chunk_head * ptr , zend_long key , const zend_string * data );
94
94
static zend_long php_check_shm_data (sysvshm_chunk_head * ptr , zend_long key );
95
95
static void php_remove_shm_data (sysvshm_chunk_head * ptr , zend_long shm_varpos );
96
96
@@ -235,7 +235,6 @@ PHP_FUNCTION(shm_remove)
235
235
PHP_FUNCTION (shm_put_var )
236
236
{
237
237
zval * shm_id , * arg_var ;
238
- int ret ;
239
238
zend_long shm_key ;
240
239
sysvshm_shm * shm_list_ptr ;
241
240
smart_str shm_var = {0 };
@@ -262,13 +261,15 @@ PHP_FUNCTION(shm_put_var)
262
261
RETURN_THROWS ();
263
262
}
264
263
264
+ ZEND_ASSERT (shm_var .s != NULL );
265
+
265
266
/* insert serialized variable into shared memory */
266
- ret = php_put_shm_data (shm_list_ptr -> ptr , shm_key , shm_var .s ? ZSTR_VAL ( shm_var . s ) : NULL , shm_var . s ? ZSTR_LEN ( shm_var . s ) : 0 );
267
+ bool ret = php_put_shm_data (shm_list_ptr -> ptr , shm_key , shm_var .s );
267
268
268
269
/* free string */
269
270
smart_str_free (& shm_var );
270
271
271
- if (ret == -1 ) {
272
+ if (! ret ) {
272
273
php_error_docref (NULL , E_WARNING , "Not enough shared memory left" );
273
274
RETURN_FALSE ;
274
275
}
@@ -366,32 +367,31 @@ PHP_FUNCTION(shm_remove_var)
366
367
}
367
368
/* }}} */
368
369
369
- /* {{{ php_put_shm_data
370
+ /* {{{
370
371
* inserts an ascii-string into shared memory */
371
- static int php_put_shm_data (sysvshm_chunk_head * ptr , zend_long key , const char * data , zend_long len )
372
+ static bool php_put_shm_data (sysvshm_chunk_head * ptr , zend_long key , const zend_string * data )
372
373
{
373
374
sysvshm_chunk * shm_var ;
374
- zend_long total_size ;
375
375
zend_long shm_varpos ;
376
376
377
- total_size = ((zend_long ) (len + sizeof (sysvshm_chunk ) - 1 ) / sizeof (zend_long )) * sizeof (zend_long ) + sizeof (zend_long ); /* zend_long alligment */
377
+ size_t total_size = ((zend_long ) (ZSTR_LEN ( data ) + sizeof (sysvshm_chunk ) - 1 ) / sizeof (zend_long )) * sizeof (zend_long ) + sizeof (zend_long ); /* zend_long alligment */
378
378
379
379
if ((shm_varpos = php_check_shm_data (ptr , key )) > 0 ) {
380
380
php_remove_shm_data (ptr , shm_varpos );
381
381
}
382
382
383
383
if (ptr -> free < total_size ) {
384
- return -1 ; /* not enough memory */
384
+ return false ; /* not enough memory */
385
385
}
386
386
387
387
shm_var = (sysvshm_chunk * ) ((char * ) ptr + ptr -> end );
388
388
shm_var -> key = key ;
389
- shm_var -> length = len ;
389
+ shm_var -> length = ZSTR_LEN ( data ) ;
390
390
shm_var -> next = total_size ;
391
- memcpy (& (shm_var -> mem ), data , len );
391
+ memcpy (& (shm_var -> mem ), ZSTR_VAL ( data ), ZSTR_LEN ( data ) );
392
392
ptr -> end += total_size ;
393
393
ptr -> free -= total_size ;
394
- return 0 ;
394
+ return true ;
395
395
}
396
396
/* }}} */
397
397
0 commit comments