fmk Mon Nov 17 15:56:54 2003 EDT
Modified files:
/php-src/ext/mssql php_mssql.c
Log:
MFB: Fix for bug #25817
Check for a return value from a stored procedure right after fetching rows
Replace code with some Z_ macros
Index: php-src/ext/mssql/php_mssql.c
diff -u php-src/ext/mssql/php_mssql.c:1.124 php-src/ext/mssql/php_mssql.c:1.125
--- php-src/ext/mssql/php_mssql.c:1.124 Tue Oct 14 23:31:29 2003
+++ php-src/ext/mssql/php_mssql.c Mon Nov 17 15:56:53 2003
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_mssql.c,v 1.124 2003/10/15 03:31:29 iliaa Exp $ */
+/* $Id: php_mssql.c,v 1.125 2003/11/17 20:56:53 fmk Exp $ */
#ifdef COMPILE_DL_MSSQL
#define HAVE_MSSQL 1
@@ -775,8 +775,7 @@
case SQLINT2:
case SQLINT4:
case SQLINTN: {
- Z_LVAL_P(result) = (long) anyintcol(offset);
- Z_TYPE_P(result) = IS_LONG;
+ ZVAL_LONG(result, (long) anyintcol(offset));
break;
}
case SQLCHAR:
@@ -791,18 +790,14 @@
length--;
}
#endif
- Z_STRVAL_P(result) = estrndup(data,length);
- Z_STRLEN_P(result) = length;
- Z_TYPE_P(result) = IS_STRING;
+ ZVAL_STRINGL(result, data, length, 1);
break;
}
case SQLFLT4:
- Z_DVAL_P(result) = (double) floatcol4(offset);
- Z_TYPE_P(result) = IS_DOUBLE;
+ ZVAL_DOUBLE(result, (double) floatcol4(offset));
break;
case SQLFLT8:
- Z_DVAL_P(result) = (double) floatcol8(offset);
- Z_TYPE_P(result) = IS_DOUBLE;
+ ZVAL_DOUBLE(result, (double) floatcol8(offset));
break;
#ifdef SQLUNIQUE
case SQLUNIQUE: {
@@ -824,9 +819,7 @@
bin = ((DBBINARY *)dbdata(mssql_ptr->link, offset));
memcpy(res_buf,bin,res_length);
res_buf[res_length] = '\0';
- Z_STRLEN_P(result) = res_length;
- Z_STRVAL_P(result) = res_buf;
- Z_TYPE_P(result) = IS_STRING;
+ ZVAL_STRINGL(result, res_buf, res_length, 0);
}
break;
case SQLNUMERIC:
@@ -858,9 +851,7 @@
sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d"
, dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute,
dateinfo.second);
}
- Z_STRVAL_P(result) = res_buf;
- Z_STRLEN_P(result) = res_length;
- Z_TYPE_P(result) = IS_STRING;
+ ZVAL_STRINGL(result, res_buf, res_length, 0);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "column %d
has unknown data type (%d)", offset, coltype(offset));
ZVAL_FALSE(result);
@@ -887,9 +878,7 @@
bin = ((DBBINARY *)dbdata(mssql_ptr->link, offset));
memcpy(res_buf, bin, res_length);
res_buf[res_length] = '\0';
- Z_STRLEN_P(result) = res_length;
- Z_STRVAL_P(result) = res_buf;
- Z_TYPE_P(result) = IS_STRING;
+ ZVAL_STRINGL(result, res_buf, res_length, 0);
}
else if (dbwillconvert(coltype(offset),SQLCHAR)) {
unsigned char *res_buf;
@@ -919,9 +908,7 @@
sprintf(res_buf, "%d-%02d-%02d %02d:%02d:%02d" ,
dateinfo.year, dateinfo.month, dateinfo.day, dateinfo.hour, dateinfo.minute,
dateinfo.second);
}
- Z_STRVAL_P(result) = res_buf;
- Z_STRLEN_P(result) = res_length;
- Z_TYPE_P(result) = IS_STRING;
+ ZVAL_STRINGL(result, res_buf, res_length, 0);
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "column %d has unknown
data type (%d)", offset, coltype(offset));
ZVAL_FALSE(result);
@@ -1063,6 +1050,9 @@
result->lastresult = retvalue;
}
efree(column_types);
+ if (result->statement) {
+ _mssql_get_sp_result(mssql_ptr, result->statement TSRMLS_CC);
+ }
return i;
}
@@ -1632,9 +1622,7 @@
RETURN_FALSE;
}
- Z_STRVAL_P(return_value) = estrdup(result->fields[field_offset].name);
- Z_STRLEN_P(return_value) = strlen(result->fields[field_offset].name);
- Z_TYPE_P(return_value) = IS_STRING;
+ RETURN_STRINGL(result->fields[field_offset].name,
strlen(result->fields[field_offset].name), 1);
}
/* }}} */
@@ -1680,9 +1668,7 @@
RETURN_FALSE;
}
- Z_STRVAL_P(return_value) =
estrdup(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset])));
- Z_STRLEN_P(return_value) =
strlen(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset])));
- Z_TYPE_P(return_value) = IS_STRING;
+ RETURN_STRINGL(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset])),
strlen(php_mssql_get_field_name(Z_TYPE(result->fields[field_offset]))), 1);
}
/* }}} */
@@ -1787,9 +1773,6 @@
RETURN_FALSE;
}
else if (retvalue == NO_MORE_RESULTS || retvalue == NO_MORE_RPC_RESULTS) {
- if (result->statement) {
- _mssql_get_sp_result(result->mssql_ptr, result->statement
TSRMLS_CC);
- }
RETURN_FALSE;
}
else {
@@ -2112,11 +2095,8 @@
result->num_fields = num_fields;
result->fields = (mssql_field *)
safe_emalloc(sizeof(mssql_field), num_fields, 0);
- result->num_rows = _mssql_fetch_batch(mssql_ptr,
result, retvalue TSRMLS_CC);
result->statement = statement;
- }
- else {
- _mssql_get_sp_result(mssql_ptr, statement TSRMLS_CC);
+ result->num_rows = _mssql_fetch_batch(mssql_ptr,
result, retvalue TSRMLS_CC);
}
}
}
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php