Bug PHP 5.3.0 не правильно парсятся integer параметры FreeeBSD 7.2RELEASE /64

Alexandre

PHPПенсионер
Bug PHP 5.3.0 не правильно парсятся integer параметры FreeeBSD 7.2RELEASE /64

баг наблюдается на 64 бит Ось, на 32 бит все нормально
PHP:
 // метод $myClass->foo( 'bar', 1,2  );
zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osll", 
   &zo, xx_class_entry,
   &name, &name_len, &c1, &c2 );
   php_printf( "c1=%d, c2=%d"  );  // result 0, 2

// если сделать 
метод $myClass->foo( 'bar', 1,2 ,3,4 );
zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Osllll", 
   &zo, xx_class_entry,
   &name, &name_len, &c1, &c2,&c3, &c4 );
   php_printf( "c1=%d, c2=%d c3=%d, c4=%d"  );  // result 0  2 0 4
т.е. парсится через параметр, если парсим подряд int

хотелось бы это как-то отписать разработчикам
и проверить на других Ось
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Щас набегут известные товарищи с криками "ты чо не знаешь как хранится целое число на 64 битной платформе?????1111!!"
 

флоппик

promotor fidei
Команда форума
Партнер клуба
лучше б ты сделал reproduce case. Тогда бы помог не только я.
 

fixxxer

К.О.
Партнер клуба
PHP:
static PHP_FUNCTION(test_zzz)                                                                                                                          
{                                                                                                                                                       
    long x[3];                                                                                                                                          
    if (FAILURE == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "llll", &x[0], &x[1], &x[2], &x[3])) {                                              
        RETURN_NULL();                                                                                                                                  
    }                                                                                                                                                   
    php_printf("%ld %ld %ld %ld\n", x[0], x[1], x[2], x[3]);                                                                                            
}

./sapi/cli/php -r '$x=new test;$x->zzz(10,20,30,40);'
10 20 30 40
что я делаю не так? :)

php 5.3.1 freebsd 8.0-amd64
 

Alexandre

PHPПенсионер
спасибо, хорошее решение,
действительно, надо попробовать использовать лонги, а я использовал инт...
 

fixxxer

К.О.
Партнер клуба
а, ну если у тебя инты были, то совершенно логично все и происходило =)

"l" = long ptr
 

Alexandre

PHPПенсионер
да были инты,
хотя не понятно почему они не работали. порядок байт?
 
Сверху