@@ -90,7 +90,7 @@ ZEND_GET_MODULE(sysvshm)
9090/* TODO: Make this thread-safe. */
9191sysvshm_module php_sysvshm ;
9292
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 );
9494static zend_long php_check_shm_data (sysvshm_chunk_head * ptr , zend_long key );
9595static void php_remove_shm_data (sysvshm_chunk_head * ptr , zend_long shm_varpos );
9696
@@ -235,7 +235,6 @@ PHP_FUNCTION(shm_remove)
235235PHP_FUNCTION (shm_put_var )
236236{
237237 zval * shm_id , * arg_var ;
238- int ret ;
239238 zend_long shm_key ;
240239 sysvshm_shm * shm_list_ptr ;
241240 smart_str shm_var = {0 };
@@ -262,13 +261,15 @@ PHP_FUNCTION(shm_put_var)
262261 RETURN_THROWS ();
263262 }
264263
264+ ZEND_ASSERT (shm_var .s != NULL );
265+
265266 /* 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 );
267268
268269 /* free string */
269270 smart_str_free (& shm_var );
270271
271- if (ret == -1 ) {
272+ if (! ret ) {
272273 php_error_docref (NULL , E_WARNING , "Not enough shared memory left" );
273274 RETURN_FALSE ;
274275 }
@@ -366,32 +367,31 @@ PHP_FUNCTION(shm_remove_var)
366367}
367368/* }}} */
368369
369- /* {{{ php_put_shm_data
370+ /* {{{
370371 * 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 )
372373{
373374 sysvshm_chunk * shm_var ;
374- zend_long total_size ;
375375 zend_long shm_varpos ;
376376
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 */
378378
379379 if ((shm_varpos = php_check_shm_data (ptr , key )) > 0 ) {
380380 php_remove_shm_data (ptr , shm_varpos );
381381 }
382382
383383 if (ptr -> free < total_size ) {
384- return -1 ; /* not enough memory */
384+ return false ; /* not enough memory */
385385 }
386386
387387 shm_var = (sysvshm_chunk * ) ((char * ) ptr + ptr -> end );
388388 shm_var -> key = key ;
389- shm_var -> length = len ;
389+ shm_var -> length = ZSTR_LEN ( data ) ;
390390 shm_var -> next = total_size ;
391- memcpy (& (shm_var -> mem ), data , len );
391+ memcpy (& (shm_var -> mem ), ZSTR_VAL ( data ), ZSTR_LEN ( data ) );
392392 ptr -> end += total_size ;
393393 ptr -> free -= total_size ;
394- return 0 ;
394+ return true ;
395395}
396396/* }}} */
397397
0 commit comments