Re: API issues or me?
| From: | D. Walsh | Date: | Sat, 11 Feb 2006 16:32:33 +0000 |
| Subject: | Re: API issues or me? | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-21845@lists.php.net to get a copy of this message | ||
On Feb 11, 2006, at 07:33 , Marcus Boerger wrote:
Hello D., you are using the old parameter parsing api which is deprecated for very long now. Maybe changing to the new one will fix your problems or find you more help.I'm using the documentation that Wez directed me too about 8 months ago, where's the newer?
marcus Saturday, February 11, 2006, 1:24:04 PM, you wrote:-- DaleI've been coding modules using the current available API and I've recently tried compiling PHP-5.1.2 for Apache 2.0 and I'm not obtaining the expected results when a function that should return an array but doesn't.Compiling PHP 5.1.2 (or any previous version) for Apache 1.3.x the module works properly and the issue only occurs when compiling for 2.0.I'm not sure if there are API changes that are not in the current documentation so if someone could examine the following code and sees something obvious I'd appreciate it if you'd point it out.-- DalePHP_FUNCTION(ram_disk_file_load) {pval *file, *args, *p_argc; pval *entry; zval *p_prcalc; HashTable *args_arr; int i, xsize, ysize, argc; double ymin,ymax; char **argv, **prcalc;/* * xsize is the number of bytes per sector * ysize is the number of bytes (in kb) for the ramdisk. * argv[0] is the command to perform. * argv[1] is either 'disk' mode or 'raw' mode * argv[2] contains the file with the disk images contents to loadinto it*/if ( disk_test_error() ) disk_clear_error();if ( (ZEND_NUM_ARGS() >= 3 && ZEND_NUM_ARGS() <= 6) &&zend_get_parameters(ht, 3, &file, &args, &p_argc) == SUCCESS){ if ( args->type != IS_ARRAY ) { php_error(E_WARNING, "2nd Variable passed to disk_config is not anarray!\n");RETURN_FALSE; }convert_to_long(p_argc); convert_to_string(file);convert_to_array(args); args_arr = args->value.ht;// here we want to raw copy our saved content file to the new ram disk argc = p_argc->value.lval + 3; argv = (char **) emalloc(argc * sizeof(char *)); argv[0] = "init"; argv[1] = estrdup("raw"); argv[2] = estrdup(file->value.str.val);for (i = 3; i < argc; i++) { pval **dataptr;if ( zend_hash_get_current_data(args_arr, (void *) &dataptr) ==FAILURE )continue;entry = *dataptr;if ( entry->type != IS_STRING ) convert_to_string(entry);argv[i] = estrdup(entry->value.str.val);if ( i < argc ) zend_hash_move_forward(args_arr); }optind = 0; opterr = 0; if (size _config(argc-1, &argv[1], &prcalc, &xsize, &ysize) != -1 ) { array_init(return_value); add_assoc_long(return_value, "xsize", xsize); add_assoc_long(return_value, "ysize", ysize);MAKE_STD_ZVAL(p_prcalc); array_init(p_prcalc);if (prcalc) { for (i = 0; prcalc[i]; i++) { add_next_index_string(p_prcalc, prcalc[i], 1); free(prcalc[i]); } free(prcalc); } zend_hash_update(return_value->value.ht, "prcalc", sizeof("prcalc"), (void *)&p_prcalc, sizeof(zval *), NULL); } else { RETVAL_FALSE; // PROBLEM - FAILED TO PERFORM THE TASK } for (i = 1; i < argc; i++) efree(argv[i]);Best regards, Marcusefree(argv); } else { WRONG_PARAM_COUNT; } return;}