summaryrefslogtreecommitdiff
path: root/ext/fdf/fdf.c
diff options
context:
space:
mode:
authorfoobar <sniper@php.net>2001-04-05 05:38:18 +0000
committerfoobar <sniper@php.net>2001-04-05 05:38:18 +0000
commit8960888c975b36a154279750aa31bfc05e3df30d (patch)
tree58a9ef9ce08696ed6f10f7467f36a72bc299e0d4 /ext/fdf/fdf.c
parentb735ec3dbc3b83fe5499d3dbf61e48a5e0f32b25 (diff)
downloadphp-git-8960888c975b36a154279750aa31bfc05e3df30d.tar.gz
Fix bugs: #10157, #7549
Diffstat (limited to 'ext/fdf/fdf.c')
-rw-r--r--ext/fdf/fdf.c61
1 files changed, 31 insertions, 30 deletions
diff --git a/ext/fdf/fdf.c b/ext/fdf/fdf.c
index 0fb48d9224..a86194381f 100644
--- a/ext/fdf/fdf.c
+++ b/ext/fdf/fdf.c
@@ -337,49 +337,46 @@ PHP_FUNCTION(fdf_set_value) {
/* {{{ proto string fdf_next_field_name(int fdfdoc [, string fieldname])
Gets the name of the next field name or the first field name */
-PHP_FUNCTION(fdf_next_field_name) {
- pval **argv[2];
- int id, type, argc;
- ASInt32 nr;
- char *buffer, *fieldname;
+PHP_FUNCTION(fdf_next_field_name)
+{
+ zval **fdfdoc, **field;
+ int id, type, argc=ZEND_NUM_ARGS();
+ ASInt32 length=256, nr;
+ char *buffer=NULL, *fieldname=NULL;
FDFDoc fdf;
FDFErc err;
FDF_TLS_VARS;
- argc = ZEND_NUM_ARGS();
- if((argc > 2) || (argc < 1))
- WRONG_PARAM_COUNT;
-
- if (zend_get_parameters_array_ex(argc, argv) == FAILURE) {
+ if (argc > 2 || argc < 1 || zend_get_parameters_ex(argc, &fdfdoc, &field) == FAILURE) {
WRONG_PARAM_COUNT;
}
- convert_to_long_ex(argv[0]);
- if(argc == 2) {
- convert_to_string_ex(argv[1]);
- fieldname = (*argv[1])->value.str.val;
- } else {
- fieldname = NULL;
- }
- id=(*argv[0])->value.lval;
+ convert_to_long_ex(fdfdoc);
+ id=Z_LVAL_PP(fdfdoc);
fdf = zend_list_find(id,&type);
if(!fdf || type!=FDF_GLOBAL(le_fdf)) {
php_error(E_WARNING,"Unable to find file identifier %d",id);
RETURN_FALSE;
}
- err = FDFNextFieldName(fdf, fieldname, NULL, 0, &nr);
- if(err != FDFErcOK)
- printf("Aiii, error\n");
- if(nr == 0)
- RETURN_STRING(empty_string, 1);
-
- buffer = emalloc(nr);
- err = FDFNextFieldName(fdf, fieldname, buffer, nr, &nr);
- if(err != FDFErcOK)
- printf("Aiii, error\n");
+ if(argc == 2) {
+ convert_to_string_ex(field);
+ fieldname = Z_STRVAL_PP(field);
+ }
- RETURN_STRING(buffer, 0);
+ buffer = emalloc(length);
+ err = FDFNextFieldName(fdf, fieldname, buffer, length-1, &nr);
+ if(err == FDFErcBufTooShort && nr > 0 ) {
+ buffer = erealloc(buffer,nr+1);
+ err = FDFNextFieldName(fdf, fieldname, buffer, length-1,&nr);
+ }
+ if(err != FDFErcOK) {
+ efree(buffer);
+ php_error(E_WARNING,"Unable to get next fieldname");
+ RETURN_FALSE;
+ }
+ RETVAL_STRING(buffer, 1);
+ efree(buffer);
}
/* }}} */
@@ -768,7 +765,7 @@ SAPI_POST_HANDLER_FUNC(fdf_post_handler)
{
FILE *fp;
FDFDoc theFDF;
- char *name=NULL,*value=NULL,*p;
+ char *name=NULL,*value=NULL,*p, *data;
int name_len=0,value_len=0;
char *lastfieldname =NULL;
char *filename = NULL;
@@ -786,6 +783,10 @@ SAPI_POST_HANDLER_FUNC(fdf_post_handler)
fwrite(SG(request_info).post_data,SG(request_info).post_data_length,1,fp);
fclose(fp);
+ /* Set HTTP_FDF_DATA variable */
+ data = estrndup(SG(request_info).post_data,SG(request_info).post_data_length);
+ SET_VAR_STRINGL("HTTP_FDF_DATA", data, SG(request_info).post_data_length);
+
err = FDFOpen(filename,0,&theFDF);
if(err==FDFErcOK){