diff options
Diffstat (limited to 'ext/sybase_ct')
-rw-r--r-- | ext/sybase_ct/config.m4 | 45 | ||||
-rw-r--r-- | ext/sybase_ct/php_sybase_ct.c | 62 |
2 files changed, 78 insertions, 29 deletions
diff --git a/ext/sybase_ct/config.m4 b/ext/sybase_ct/config.m4 index 4b64dc23d..aba6f478d 100644 --- a/ext/sybase_ct/config.m4 +++ b/ext/sybase_ct/config.m4 @@ -1,5 +1,5 @@ dnl -dnl $Id: config.m4 261867 2008-07-01 17:03:46Z felipe $ +dnl $Id: config.m4 301036 2010-07-07 10:15:24Z thekid $ dnl PHP_ARG_WITH(sybase-ct, for Sybase-CT support, @@ -31,9 +31,50 @@ if test "$PHP_SYBASE_CT" != "no"; then fi PHP_ADD_LIBPATH($SYBASE_CT_LIBDIR, SYBASE_CT_SHARED_LIBADD) - if test -f $SYBASE_CT_INCDIR/tds.h; then + if test -f $SYBASE_CT_INCDIR/tds.h || test -f $SYBASE_CT_INCDIR/tds_sysdep_public.h; then PHP_ADD_LIBRARY(ct,, SYBASE_CT_SHARED_LIBADD) SYBASE_CT_LIBS="-L$SYBASE_CT_LIBDIR -lct" + elif test -f $SYBASE_CT_INCDIR/libsybct64; then + PHP_ADD_LIBRARY(sybcs64,, SYBASE_CT_SHARED_LIBADD) + PHP_ADD_LIBRARY(sybct64,, SYBASE_CT_SHARED_LIBADD) + PHP_ADD_LIBRARY(sybcomn64,, SYBASE_CT_SHARED_LIBADD) + PHP_ADD_LIBRARY(sybintl64,, SYBASE_CT_SHARED_LIBADD) + + ac_solid_uname_s=`uname -s 2>/dev/null` + case $ac_solid_uname_s in + *OSF*) ;; # Tru64/DEC OSF does NOT use the SYB_LP64 define + *) CFLAGS="${CFLAGS} -DSYB_LP64" ;; # + esac + SYBASE_CT_LIBS="-L$SYBASE_CT_LIBDIR -lsybcs64 -lsybct64 -lsybcomn64 -lsybintl64" + + PHP_CHECK_LIBRARY(sybtcl64, netg_errstr, [ + PHP_ADD_LIBRARY(sybtcl64,,SYBASE_CT_SHARED_LIBADD) + ],[ + PHP_ADD_LIBRARY(sybtcl64,,SYBASE_CT_SHARED_LIBADD) + ],[ + $SYBASE_CT_LIBS + ]) + + PHP_CHECK_LIBRARY(insck64, insck__getVdate, [PHP_ADD_LIBRARY(insck64,, SYBASE_CT_SHARED_LIBADD)],[],[-L$SYBASE_CT_LIBDIR]) + PHP_CHECK_LIBRARY(insck64, bsd_tcp, [PHP_ADD_LIBRARY(insck64,, SYBASE_CT_SHARED_LIBADD)],[],[-L$SYBASE_CT_LIBDIR]) + elif test -f $SYBASE_CT_INCDIR/libsybct; then + PHP_ADD_LIBRARY(sybcs,, SYBASE_CT_SHARED_LIBADD) + PHP_ADD_LIBRARY(sybct,, SYBASE_CT_SHARED_LIBADD) + PHP_ADD_LIBRARY(sybcomn,, SYBASE_CT_SHARED_LIBADD) + PHP_ADD_LIBRARY(sybintl,, SYBASE_CT_SHARED_LIBADD) + + SYBASE_CT_LIBS="-L$SYBASE_CT_LIBDIR -lsybcs -lsybct -lsybcomn -lsybintl" + + PHP_CHECK_LIBRARY(sybtcl, netg_errstr, [ + PHP_ADD_LIBRARY(sybtcl,,SYBASE_CT_SHARED_LIBADD) + ],[ + PHP_ADD_LIBRARY(sybtcl,,SYBASE_CT_SHARED_LIBADD) + ],[ + $SYBASE_CT_LIBS + ]) + + PHP_CHECK_LIBRARY(insck, insck__getVdate, [PHP_ADD_LIBRARY(insck,, SYBASE_CT_SHARED_LIBADD)],[],[-L$SYBASE_CT_LIBDIR]) + PHP_CHECK_LIBRARY(insck, bsd_tcp, [PHP_ADD_LIBRARY(insck,, SYBASE_CT_SHARED_LIBADD)],[],[-L$SYBASE_CT_LIBDIR]) else PHP_ADD_LIBRARY(cs,, SYBASE_CT_SHARED_LIBADD) PHP_ADD_LIBRARY(ct,, SYBASE_CT_SHARED_LIBADD) diff --git a/ext/sybase_ct/php_sybase_ct.c b/ext/sybase_ct/php_sybase_ct.c index 8871988df..8382a0eab 100644 --- a/ext/sybase_ct/php_sybase_ct.c +++ b/ext/sybase_ct/php_sybase_ct.c @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_sybase_ct.c 293036 2010-01-03 09:23:27Z sebastian $ */ +/* $Id: php_sybase_ct.c 300764 2010-06-26 16:03:39Z felipe $ */ #ifdef HAVE_CONFIG_H @@ -180,31 +180,30 @@ const zend_function_entry sybase_functions[] = { PHP_FE(sybase_deadlock_retry_count, arginfo_sybase_deadlock_retry_count) #if !defined(PHP_WIN32) && !defined(HAVE_MSSQL) - PHP_FALIAS(mssql_connect, sybase_connect, NULL) - PHP_FALIAS(mssql_pconnect, sybase_pconnect, NULL) - PHP_FALIAS(mssql_close, sybase_close, NULL) - PHP_FALIAS(mssql_select_db, sybase_select_db, NULL) - PHP_FALIAS(mssql_query, sybase_query, NULL) - PHP_FALIAS(mssql_unbuffered_query, sybase_unbuffered_query, NULL) - PHP_FALIAS(mssql_free_result, sybase_free_result, NULL) - PHP_FALIAS(mssql_get_last_message, sybase_get_last_message, NULL) - PHP_FALIAS(mssql_num_rows, sybase_num_rows, NULL) - PHP_FALIAS(mssql_num_fields, sybase_num_fields, NULL) - PHP_FALIAS(mssql_fetch_row, sybase_fetch_row, NULL) - PHP_FALIAS(mssql_fetch_array, sybase_fetch_array, NULL) - PHP_FALIAS(mssql_fetch_assoc, sybase_fetch_assoc, NULL) - PHP_FALIAS(mssql_fetch_object, sybase_fetch_object, NULL) - PHP_FALIAS(mssql_data_seek, sybase_data_seek, NULL) - PHP_FALIAS(mssql_fetch_field, sybase_fetch_field, NULL) - PHP_FALIAS(mssql_field_seek, sybase_field_seek, NULL) - PHP_FALIAS(mssql_result, sybase_result, NULL) - PHP_FALIAS(mssql_affected_rows, sybase_affected_rows, NULL) - PHP_FALIAS(mssql_min_client_severity, sybase_min_client_severity, NULL) - PHP_FALIAS(mssql_min_server_severity, sybase_min_server_severity, NULL) - PHP_FALIAS(mssql_set_message_handler, sybase_set_message_handler, NULL) - PHP_FALIAS(mssql_deadlock_retry_count, sybase_deadlock_retry_count, NULL) + PHP_FALIAS(mssql_connect, sybase_connect, arginfo_sybase_connect) + PHP_FALIAS(mssql_pconnect, sybase_pconnect, arginfo_sybase_pconnect) + PHP_FALIAS(mssql_close, sybase_close, arginfo_sybase_close) + PHP_FALIAS(mssql_select_db, sybase_select_db, arginfo_sybase_select_db) + PHP_FALIAS(mssql_query, sybase_query, arginfo_sybase_query) + PHP_FALIAS(mssql_unbuffered_query, sybase_unbuffered_query, arginfo_sybase_unbuffered_query) + PHP_FALIAS(mssql_free_result, sybase_free_result, arginfo_sybase_free_result) + PHP_FALIAS(mssql_get_last_message, sybase_get_last_message, arginfo_sybase_get_last_message) + PHP_FALIAS(mssql_num_rows, sybase_num_rows, arginfo_sybase_num_rows) + PHP_FALIAS(mssql_num_fields, sybase_num_fields, arginfo_sybase_num_fields) + PHP_FALIAS(mssql_fetch_row, sybase_fetch_row, arginfo_sybase_fetch_row) + PHP_FALIAS(mssql_fetch_array, sybase_fetch_array, arginfo_sybase_fetch_array) + PHP_FALIAS(mssql_fetch_assoc, sybase_fetch_assoc, arginfo_sybase_fetch_assoc) + PHP_FALIAS(mssql_fetch_object, sybase_fetch_object, arginfo_sybase_fetch_object) + PHP_FALIAS(mssql_data_seek, sybase_data_seek, arginfo_sybase_data_seek) + PHP_FALIAS(mssql_fetch_field, sybase_fetch_field, arginfo_sybase_fetch_field) + PHP_FALIAS(mssql_field_seek, sybase_field_seek, arginfo_sybase_field_seek) + PHP_FALIAS(mssql_result, sybase_result, arginfo_sybase_result) + PHP_FALIAS(mssql_affected_rows, sybase_affected_rows, arginfo_sybase_affected_rows) + PHP_FALIAS(mssql_min_client_severity, sybase_min_client_severity, arginfo_sybase_min_client_severity) + PHP_FALIAS(mssql_min_server_severity, sybase_min_server_severity, arginfo_sybase_min_server_severity) + PHP_FALIAS(mssql_set_message_handler, sybase_set_message_handler, arginfo_sybase_set_message_handler) + PHP_FALIAS(mssql_deadlock_retry_count, sybase_deadlock_retry_count, arginfo_sybase_deadlock_retry_count) #endif - {NULL, NULL, NULL} }; @@ -1248,8 +1247,17 @@ static int php_sybase_fetch_result_row (sybase_result *result, int numrows) } default: { - /* This indicates anything else, return it as string */ - ZVAL_STRINGL(&result->data[i][j], result->tmp_buffer[j], result->lengths[j]- 1, 1); + /* This indicates anything else, return it as string + * FreeTDS doesn't correctly set result->indicators[j] correctly + * for NULL fields in some version in conjunction with ASE 12.5 + * but instead sets result->lengths[j] to 0, which would lead to + * a negative memory allocation (and thus a segfault). + */ + if (result->lengths[j] < 1) { + ZVAL_NULL(&result->data[i][j]); + } else { + ZVAL_STRINGL(&result->data[i][j], result->tmp_buffer[j], result->lengths[j]- 1, 1); + } break; } } |