mirror of
https://github.com/php-win-ext/pecl-expect.git
synced 2026-03-24 05:02:05 +01:00
Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ff8bd236f | ||
|
|
962f488073 | ||
|
|
7e6b652293 | ||
|
|
6fafe17e77 | ||
|
|
18ea03b802 | ||
|
|
a291a8ff3b | ||
|
|
48d03837f9 | ||
|
|
5fdde4afbf |
68
LICENSE
Normal file
68
LICENSE
Normal file
@@ -0,0 +1,68 @@
|
||||
--------------------------------------------------------------------
|
||||
The PHP License, version 3.01
|
||||
Copyright (c) 1999 - 2014 The PHP Group. All rights reserved.
|
||||
--------------------------------------------------------------------
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, is permitted provided that the following conditions
|
||||
are met:
|
||||
|
||||
1. Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
|
||||
2. Redistributions in binary form must reproduce the above copyright
|
||||
notice, this list of conditions and the following disclaimer in
|
||||
the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
|
||||
3. The name "PHP" must not be used to endorse or promote products
|
||||
derived from this software without prior written permission. For
|
||||
written permission, please contact group@php.net.
|
||||
|
||||
4. Products derived from this software may not be called "PHP", nor
|
||||
may "PHP" appear in their name, without prior written permission
|
||||
from group@php.net. You may indicate that your software works in
|
||||
conjunction with PHP by saying "Foo for PHP" instead of calling
|
||||
it "PHP Foo" or "phpfoo"
|
||||
|
||||
5. The PHP Group may publish revised and/or new versions of the
|
||||
license from time to time. Each version will be given a
|
||||
distinguishing version number.
|
||||
Once covered code has been published under a particular version
|
||||
of the license, you may always continue to use it under the terms
|
||||
of that version. You may also choose to use such covered code
|
||||
under the terms of any subsequent version of the license
|
||||
published by the PHP Group. No one other than the PHP Group has
|
||||
the right to modify the terms applicable to covered code created
|
||||
under this License.
|
||||
|
||||
6. Redistributions of any form whatsoever must retain the following
|
||||
acknowledgment:
|
||||
"This product includes PHP software, freely available from
|
||||
<http://www.php.net/software/>".
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE PHP DEVELOPMENT TEAM ``AS IS'' AND
|
||||
ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
|
||||
PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE PHP
|
||||
DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
|
||||
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
||||
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
|
||||
STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||
OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
--------------------------------------------------------------------
|
||||
|
||||
This software consists of voluntary contributions made by many
|
||||
individuals on behalf of the PHP Group.
|
||||
|
||||
The PHP Group can be contacted via Email at group@php.net.
|
||||
|
||||
For more information on the PHP Group and the PHP project,
|
||||
please see <http://www.php.net>.
|
||||
|
||||
PHP includes the Zend Engine, freely available at
|
||||
<http://www.zend.com>.
|
||||
11
config.m4
11
config.m4
@@ -21,7 +21,9 @@ if test "$PHP_EXPECT" != "no"; then
|
||||
fi
|
||||
done
|
||||
|
||||
AC_MSG_CHECKING(for tcl version)
|
||||
for i in $PHP_TCLDIR/tclConfig.sh /usr/lib/tcl*/tclConfig.sh \
|
||||
/usr/$PHP_LIBDIR/tcl*/tclConfig.sh \
|
||||
/usr/local/lib/tcl*/tclConfig.sh \
|
||||
/System/Library/Frameworks/Tcl.framework/Versions/Current/tclConfig.sh;
|
||||
do
|
||||
@@ -30,9 +32,14 @@ if test "$PHP_EXPECT" != "no"; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test -n "$TCL_VERSION" ; then
|
||||
AC_MSG_RESULT($TCL_VERSION in $TCL_PREFIX)
|
||||
else
|
||||
AC_MSG_ERROR([not found])
|
||||
fi
|
||||
|
||||
PHP_ADD_LIBRARY_WITH_PATH(tcl$TCL_VERSION, $TCL_PREFIX/lib, EXPECT_SHARED_LIBADD)
|
||||
PHP_ADD_LIBRARY_WITH_PATH(expect, $LIBEXPECT_DIR/lib, EXPECT_SHARED_LIBADD)
|
||||
PHP_ADD_LIBRARY_WITH_PATH(tcl$TCL_VERSION, $TCL_PREFIX/$PHP_LIBDIR, EXPECT_SHARED_LIBADD)
|
||||
PHP_ADD_LIBRARY_WITH_PATH(expect, $LIBEXPECT_DIR/$PHP_LIBDIR, EXPECT_SHARED_LIBADD)
|
||||
PHP_ADD_INCLUDE($LIBEXPECT_INCLUDE_DIR)
|
||||
|
||||
PHP_NEW_EXTENSION(expect, expect.c expect_fopen_wrapper.c, $ext_shared)
|
||||
|
||||
102
expect.c
102
expect.c
@@ -41,6 +41,10 @@ zend_function_entry expect_functions[] = {
|
||||
/* }}} */
|
||||
|
||||
|
||||
ZEND_DECLARE_MODULE_GLOBALS(expect)
|
||||
static PHP_GINIT_FUNCTION(expect);
|
||||
static PHP_GSHUTDOWN_FUNCTION(expect);
|
||||
|
||||
/* {{{ expect_module_entry
|
||||
*/
|
||||
zend_module_entry expect_module_entry = {
|
||||
@@ -53,7 +57,11 @@ zend_module_entry expect_module_entry = {
|
||||
NULL,
|
||||
PHP_MINFO(expect),
|
||||
PHP_EXPECT_VERSION,
|
||||
STANDARD_MODULE_PROPERTIES
|
||||
PHP_MODULE_GLOBALS(expect),
|
||||
PHP_GINIT(expect),
|
||||
PHP_GSHUTDOWN(expect),
|
||||
NULL,
|
||||
STANDARD_MODULE_PROPERTIES_EX
|
||||
};
|
||||
/* }}} */
|
||||
|
||||
@@ -61,22 +69,20 @@ zend_module_entry expect_module_entry = {
|
||||
ZEND_GET_MODULE(expect)
|
||||
#endif
|
||||
|
||||
ZEND_DECLARE_MODULE_GLOBALS(expect)
|
||||
|
||||
/* {{{ php_expect_init_globals
|
||||
*/
|
||||
static void php_expect_init_globals (zend_expect_globals *globals TSRMLS_DC)
|
||||
static PHP_GINIT_FUNCTION(expect)
|
||||
{
|
||||
globals->logfile_stream = NULL;
|
||||
expect_globals->logfile_stream = NULL;
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
/* {{{ php_expect_destroy_globals
|
||||
*/
|
||||
static void php_expect_destroy_globals(zend_expect_globals *globals TSRMLS_DC)
|
||||
static PHP_GSHUTDOWN_FUNCTION(expect)
|
||||
{
|
||||
if (globals->logfile_stream) {
|
||||
php_stream_close(globals->logfile_stream);
|
||||
if (expect_globals->logfile_stream) {
|
||||
php_stream_close(expect_globals->logfile_stream);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
@@ -111,10 +117,13 @@ static PHP_INI_MH(OnSetExpectMatchMax)
|
||||
static PHP_INI_MH(OnSetExpectLogUser)
|
||||
{
|
||||
if (new_value) {
|
||||
if (strncasecmp("on", new_value, sizeof("on"))) {
|
||||
exp_loguser = atoi(new_value);
|
||||
} else {
|
||||
if (strncasecmp("on", new_value, sizeof("on")) == 0
|
||||
|| strncasecmp("true", new_value, sizeof("true")) == 0
|
||||
|| strncasecmp("yes", new_value, sizeof("yes")) == 0
|
||||
|| strncasecmp("1", new_value, sizeof("1")) == 0) {
|
||||
exp_loguser = 1;
|
||||
} else {
|
||||
exp_loguser = 0;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
@@ -341,47 +350,49 @@ PHP_FUNCTION(expect_expectl)
|
||||
}
|
||||
ecases_ptr->pattern = NULL;
|
||||
ecases_ptr->re = NULL;
|
||||
ecases_ptr->value = NULL;
|
||||
ecases_ptr->value = 0;
|
||||
ecases_ptr->type = exp_end;
|
||||
|
||||
key = exp_expectv (fd, ecases);
|
||||
int exp_retval = exp_expectv (fd, ecases);
|
||||
int case_found = 0;
|
||||
if (exp_retval >= 0) {
|
||||
key = exp_retval;
|
||||
|
||||
int exp_match_len = exp_match_end - exp_match;
|
||||
if (key >= 0 && z_match && exp_match && exp_match_len > 0) {
|
||||
char *tmp = (char *)emalloc (sizeof(char) * (exp_match_len + 1));
|
||||
strlcpy (tmp, exp_match, exp_match_len + 1);
|
||||
zval_dtor (z_match);
|
||||
array_init(z_match);
|
||||
add_index_string(z_match, 0, tmp, 1);
|
||||
/* Get case that was matched */
|
||||
matchedcase = ecases[key];
|
||||
/* If there are subpattern matches ... */
|
||||
if (matchedcase.re != NULL && matchedcase.re->startp != NULL) {
|
||||
int i;
|
||||
/* iterate across all possible 9 subpatterns (a limitation of libexpect)
|
||||
and add matching substring to matches array */
|
||||
for (i = 1; i <= 9; i++) {
|
||||
if (matchedcase.re->startp[i] != NULL) {
|
||||
int sub_match_len = matchedcase.re->endp[i] - matchedcase.re->startp[i];
|
||||
char *sub_match = (char *)emalloc (sizeof(char) * (sub_match_len + 1));
|
||||
strlcpy (sub_match, matchedcase.re->startp[i], sub_match_len + 1);
|
||||
add_next_index_string(z_match, sub_match, 1);
|
||||
efree (sub_match);
|
||||
int exp_match_len = exp_match_end - exp_match;
|
||||
if (z_match && exp_match && exp_match_len > 0) {
|
||||
char *tmp = (char *)emalloc (sizeof(char) * (exp_match_len + 1));
|
||||
strlcpy (tmp, exp_match, exp_match_len + 1);
|
||||
zval_dtor (z_match);
|
||||
array_init(z_match);
|
||||
add_index_string(z_match, 0, tmp, 1);
|
||||
/* Get case that was matched */
|
||||
matchedcase = ecases[key];
|
||||
/* If there are subpattern matches ... */
|
||||
if (matchedcase.re != NULL && matchedcase.re->startp != NULL) {
|
||||
int i;
|
||||
/* iterate across all possible 9 subpatterns (a limitation of libexpect)
|
||||
and add matching substring to matches array */
|
||||
for (i = 1; i <= 9; i++) {
|
||||
if (matchedcase.re->startp[i] != NULL) {
|
||||
int sub_match_len = matchedcase.re->endp[i] - matchedcase.re->startp[i];
|
||||
char *sub_match = (char *)emalloc (sizeof(char) * (sub_match_len + 1));
|
||||
strlcpy (sub_match, matchedcase.re->startp[i], sub_match_len + 1);
|
||||
add_next_index_string(z_match, sub_match, 1);
|
||||
efree (sub_match);
|
||||
}
|
||||
}
|
||||
}
|
||||
efree (tmp);
|
||||
}
|
||||
efree (tmp);
|
||||
}
|
||||
|
||||
if (zend_hash_index_find (Z_ARRVAL_P(z_cases), key, (void **)&z_case) == SUCCESS) {
|
||||
if (zend_hash_index_find(Z_ARRVAL_PP(z_case), 1, (void **)&z_value) == SUCCESS) {
|
||||
*return_value = **z_value;
|
||||
zval_copy_ctor (return_value);
|
||||
if (zend_hash_index_find (Z_ARRVAL_P(z_cases), key, (void **)&z_case) == SUCCESS) {
|
||||
if (zend_hash_index_find(Z_ARRVAL_PP(z_case), 1, (void **)&z_value) == SUCCESS) {
|
||||
*return_value = **z_value;
|
||||
zval_copy_ctor (return_value);
|
||||
case_found = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
RETURN_LONG (key);
|
||||
}
|
||||
|
||||
// Free compiled patterns:
|
||||
ecases_ptr = ecases;
|
||||
@@ -391,8 +402,11 @@ PHP_FUNCTION(expect_expectl)
|
||||
}
|
||||
ecases_ptr++;
|
||||
}
|
||||
|
||||
efree (ecases);
|
||||
|
||||
if (!case_found) {
|
||||
RETURN_LONG(exp_retval);
|
||||
}
|
||||
}
|
||||
/* }}} */
|
||||
|
||||
|
||||
24
package.xml
24
package.xml
@@ -14,19 +14,19 @@ http://pear.php.net/dtd/package-2.0.xsd">
|
||||
<email>michael@php.net</email>
|
||||
<active>yes</active>
|
||||
</lead>
|
||||
<date>2011-11-22</date>
|
||||
<time>18:24:00</time>
|
||||
<date>2015-09-11</date>
|
||||
<time>15:25:00</time>
|
||||
<version>
|
||||
<release>0.3.1</release>
|
||||
<api>0.3.1</api>
|
||||
<release>0.3.3</release>
|
||||
<api>0.3.3</api>
|
||||
</version>
|
||||
<stability>
|
||||
<release>beta</release>
|
||||
<api>beta</api>
|
||||
<release>stable</release>
|
||||
<api>stable</api>
|
||||
</stability>
|
||||
<license uri="http://www.php.net/license">PHP License</license>
|
||||
<notes>
|
||||
Fixed compilation issue (Bug #59916)
|
||||
Added LICENSE. Fixed RPM build for 64bit.
|
||||
</notes>
|
||||
<contents>
|
||||
<dir name="/">
|
||||
@@ -36,12 +36,22 @@ Fixed compilation issue (Bug #59916)
|
||||
<file name="expect.dsp" role="src" />
|
||||
<file name="expect_fopen_wrapper.c" role="src" />
|
||||
<file name="php_expect.h" role="src" />
|
||||
<file name="LICENSE" role="doc" />
|
||||
<dir name="tests">
|
||||
<file name="bug12268.phpt" role="test" />
|
||||
<file name="bug22566.phpt" role="test" />
|
||||
<file name="bug6996.phpt" role="test" />
|
||||
<file name="expect_expectl.phpt" role="test" />
|
||||
<file name="expect_popen.phpt" role="test" />
|
||||
<file name="expect_wrapper.phpt" role="test" />
|
||||
</dir>
|
||||
</dir> <!-- / -->
|
||||
</contents>
|
||||
<dependencies>
|
||||
<required>
|
||||
<php>
|
||||
<min>4.0.0</min>
|
||||
<max>5.99.99</max>
|
||||
</php>
|
||||
<pearinstaller>
|
||||
<min>1.4.0b1</min>
|
||||
|
||||
@@ -37,7 +37,7 @@
|
||||
extern zend_module_entry expect_module_entry;
|
||||
#define phpext_expect_ptr &expect_module_entry
|
||||
|
||||
#define PHP_EXPECT_VERSION "0.3.1-dev"
|
||||
#define PHP_EXPECT_VERSION "0.3.3"
|
||||
|
||||
#ifdef PHP_WIN32
|
||||
#define PHP_EXPECT_API __declspec(dllexport)
|
||||
|
||||
Reference in New Issue
Block a user