abies Wed Aug 20 09:02:27 2003 EDT Modified files: /php-src/ext/interbase interbase.c Log: Cleaned up _php_ibase_var_zval() Index: php-src/ext/interbase/interbase.c diff -u php-src/ext/interbase/interbase.c:1.156 php-src/ext/interbase/interbase.c:1.157 --- php-src/ext/interbase/interbase.c:1.156 Wed Aug 20 08:40:59 2003 +++ php-src/ext/interbase/interbase.c Wed Aug 20 09:02:26 2003 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: interbase.c,v 1.156 2003/08/20 12:40:59 abies Exp $ */ +/* $Id: interbase.c,v 1.157 2003/08/20 13:02:26 abies Exp $ */ #ifdef HAVE_CONFIG_H #include "config.h" @@ -684,7 +684,7 @@ php_info_print_table_start(); php_info_print_table_row(2, "Interbase Support", "enabled"); - php_info_print_table_row(2, "Revision", "$Revision: 1.156 $"); + php_info_print_table_row(2, "Revision", "$Revision: 1.157 $"); #ifdef COMPILE_DL_INTERBASE php_info_print_table_row(2, "Dynamic Module", "Yes"); #endif @@ -2285,6 +2285,8 @@ char string_data[255]; switch (type & ~1) { + unsigned short j; + case SQL_VARYING: len = ((PARAMVARY *) data)->vary_length; data = ((PARAMVARY *) data)->vary_string; @@ -2299,75 +2301,59 @@ break; case SQL_LONG: case SQL_SHORT: - if (scale) { - short j; + if (scale < 0) { long n, f = 1; + if ( (type & ~1) == SQL_SHORT) { - n = (long) *(short *) (data); + n = *(short *) (data); } else { - n = (long) *(long *) (data); + n = *(long *) (data); } for (j = 0; j < -scale; j++) { f *= 10; } - if (n >= 0) { - Z_STRLEN_P(val) = sprintf(string_data, "%ld.%0*ld", n / f, -scale, n % f ); - } else if ((n/f) != 0) { - Z_STRLEN_P(val) = sprintf(string_data, "%ld.%0*ld", n / f, -scale, -(n % f) ); + if (n >= 0 || n < -f) { + j = sprintf(string_data, "%ld.%0*ld", n / f, -scale, labs(n % f) ); } else { - Z_STRLEN_P(val) = sprintf(string_data, "%s.%0*ld","-0", -scale, -(n % f) ); + j = sprintf(string_data, "%s.%0*ld","-0", -scale, -n % f); } - Z_TYPE_P(val) = IS_STRING; - Z_STRVAL_P(val) = estrdup(string_data); + ZVAL_STRINGL(val,string_data,j,1); + } else if ( (type & ~1) == SQL_SHORT) { + ZVAL_LONG(val, *(short *) data); } else { - Z_TYPE_P(val) = IS_LONG; - if ( (type & ~1) == SQL_SHORT) { - Z_LVAL_P(val) = *(short *) (data); - } else { - Z_LVAL_P(val) = *(long *) (data); - } + ZVAL_LONG(val, *(long *) data); } break; case SQL_FLOAT: - Z_TYPE_P(val) = IS_DOUBLE; - Z_DVAL_P(val) = *(float *) (data); + ZVAL_DOUBLE(val, *(float *) data); break; case SQL_DOUBLE: - if (scale) { - Z_TYPE_P(val) = IS_STRING; - Z_STRLEN_P(val) = sprintf(string_data, "%.*f", -scale, *(double *) data); - Z_STRVAL_P(val) = estrdup(string_data); + if (scale < 0) { + j = sprintf(string_data, "%.*f", -scale, *(double *) data); + ZVAL_STRINGL(val, string_data, j, 1); } else { - Z_TYPE_P(val) = IS_DOUBLE; - Z_DVAL_P(val) = *(double *) data; + ZVAL_DOUBLE(val, *(double *) data); } break; #ifdef SQL_INT64 case SQL_INT64: - Z_TYPE_P(val) = IS_STRING; if (scale < 0) { - short j = 0; - ISC_INT64 n, f = 1; - n = (ISC_INT64) *(ISC_INT64 *) data; + ISC_INT64 n = *(ISC_INT64 *) data, f = 1; + for (j = 0; j < -scale; j++) { f *= 10; } if (n >= 0) { - Z_STRLEN_P(val) = sprintf(string_data, "%" LL_MASK "d.%0*" LL_MASK "d", - (ISC_INT64) n / f, -scale, (ISC_INT64) n % f ); - } else if ((n/f) != 0) { - Z_STRLEN_P(val) = sprintf(string_data, "%" LL_MASK "d.%0*" LL_MASK "d", - (ISC_INT64) n / f, -scale, (ISC_INT64) -(n % f) ); - } else { - Z_STRLEN_P(val) = sprintf(string_data, "%s.%0*" LL_MASK "d", - "-0", -scale, (ISC_INT64) -(n % f) ); + j = sprintf(string_data, "%" LL_MASK "d.%0*" LL_MASK "d", n / f, -scale, n % f); + } else if (n < -f) { + j = sprintf(string_data, "%" LL_MASK "d.%0*" LL_MASK "d", n / f, -scale, -n % f); + } else { + j = sprintf(string_data, "-0.%0*" LL_MASK "d", -scale, -n % f); } } else { - Z_STRLEN_P(val) = sprintf(string_data, "%.0" LL_MASK "d", - *(ISC_INT64 *) data); + j = sprintf(string_data, "%.0" LL_MASK "d", *(ISC_INT64 *) data); } - - Z_STRVAL_P(val) = estrdup(string_data); + ZVAL_STRINGL(val,string_data,j,1); break; #endif #ifndef SQL_TIMESTAMP @@ -2411,21 +2397,19 @@ t.tm_zone = tzname[0]; #endif if (flag & PHP_IBASE_UNIXTIME) { - Z_TYPE_P(val) = IS_LONG; - Z_LVAL_P(val) = timestamp; + ZVAL_LONG(val, timestamp); } else { - Z_TYPE_P(val) = IS_STRING; #if HAVE_STRFTIME - Z_STRLEN_P(val) = strftime(string_data, sizeof(string_data), format, &t); + j = strftime(string_data, sizeof(string_data), format, &t); #else /* FIXME */ if (!t.tm_hour && !t.tm_min && !t.tm_sec) { - Z_STRLEN_P(val) = sprintf(string_data, "%02d/%02d/%4d", t.tm_mon + 1, t.tm_mday, t.tm_year + 1900); + j = sprintf(string_data, "%02d/%02d/%4d", t.tm_mon + 1, t.tm_mday, t.tm_year + 1900); } else { - Z_STRLEN_P(val) = sprintf(string_data, "%02d/%02d/%4d %02d:%02d:%02d", t.tm_mon+1, t.tm_mday, t.tm_year + 1900, t.tm_hour, t.tm_min, t.tm_sec); + j = sprintf(string_data, "%02d/%02d/%4d %02d:%02d:%02d", t.tm_mon+1, t.tm_mday, t.tm_year + 1900, t.tm_hour, t.tm_min, t.tm_sec); } #endif - Z_STRVAL_P(val) = estrdup(string_data); + ZVAL_STRINGL(val,string_data,j,1); break; } } @@ -2836,7 +2820,7 @@ RETURN_FALSE; } - ib_query = emalloc(sizeof(ibase_query)); + ib_query = (ibase_query *) emalloc(sizeof(ibase_query)); if (_php_ibase_alloc_query(ib_query, ib_link, trans, query, ib_link->dialect, trans_res_id TSRMLS_CC) == FAILURE) { efree(ib_query);
-- PHP CVS Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php