Hi internals,
so based on a discussion of php.pecl we thought about using the php_getopt
for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
is the patch for that. Hopefully someone is reviewing and commiting the
patch as i don't have karma.
It addes main/getopt.c main/php_getopt.h to the build system and uses the
php_getopt function in the ext/standard/basic_functions.c. Furthermore it
removes all HAVE_GETOPT and HARTMUT_0 switches. it also enable longopts
for both win and linux in the form
$opt = getopt("a", array("param:", "param2"));
Where ":" in the longopts marks that the parameter takes an argument.
The main/getopt.c and main/php_getopt.h is in fact taken from
sapi/cli/getopt.c and sapi/cli/php_getopt.h but is slightly modified.
http://experimentalworks.net/~dsp/getopt.patch.tar.gz
It also runs on windows.
To apply the patch:
-
remove
sapi/cli/getopt.c sapi/cli/php_getopt.h
sapi/cgi/getopt.c sapi/cgi/php_getopt.h -
add main/getopt.c and main/php_getopt.h frm the archive
-
apply the patch.
Hello Jani,
David has a point here. So first of all we should move getopt
implementation out of CLI/CGI and into main. Could you do that
first Jani?
marcus
Monday, August 6, 2007, 3:57:26 PM, you wrote:
Hi internals,
so based on a discussion of php.pecl we thought about using the php_getopt
for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
is the patch for that. Hopefully someone is reviewing and commiting the
patch as i don't have karma.
It addes main/getopt.c main/php_getopt.h to the build system and uses the
php_getopt function in the ext/standard/basic_functions.c. Furthermore it
removes all HAVE_GETOPT and HARTMUT_0 switches. it also enable longopts
for both win and linux in the form$opt = getopt("a", array("param:", "param2"));
Where ":" in the longopts marks that the parameter takes an argument.
The main/getopt.c and main/php_getopt.h is in fact taken from
sapi/cli/getopt.c and sapi/cli/php_getopt.h but is slightly modified.
It also runs on windows.
To apply the patch:
- remove
sapi/cli/getopt.c sapi/cli/php_getopt.h
sapi/cgi/getopt.c sapi/cgi/php_getopt.h
- add main/getopt.c and main/php_getopt.h frm the archive
- apply the patch.
Best regards,
Marcus
Yes, I know about this. I was wondering about this thing long time
ago..just never got around doing anything about it.. :D
But let's wait for PHP 5.3 branch to get opened first.
--Jani
Hello Jani,
David has a point here. So first of all we should move getopt
implementation out of CLI/CGI and into main. Could you do that
first Jani?marcus
Monday, August 6, 2007, 3:57:26 PM, you wrote:
Hi internals,
so based on a discussion of php.pecl we thought about using the php_getopt
for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
is the patch for that. Hopefully someone is reviewing and commiting the
patch as i don't have karma.It addes main/getopt.c main/php_getopt.h to the build system and uses the
php_getopt function in the ext/standard/basic_functions.c. Furthermore it
removes all HAVE_GETOPT and HARTMUT_0 switches. it also enable longopts
for both win and linux in the form$opt = getopt("a", array("param:", "param2"));
Where ":" in the longopts marks that the parameter takes an argument.
The main/getopt.c and main/php_getopt.h is in fact taken from
sapi/cli/getopt.c and sapi/cli/php_getopt.h but is slightly modified.It also runs on windows.
To apply the patch:
- remove
sapi/cli/getopt.c sapi/cli/php_getopt.h
sapi/cgi/getopt.c sapi/cgi/php_getopt.h
- add main/getopt.c and main/php_getopt.h frm the archive
- apply the patch.
Best regards,
Marcus
David has a point here. So first of all we should move getopt
implementation out of CLI/CGI and into main. Could you do that
first Jani?
Why one would need getopt outside of cgi/cli? I.e. where would these
options come from?
Stanislav Malyshev, Zend Software Architect
stas@zend.com http://www.zend.com/
(408)253-8829 MSN: stas@zend.com
Why one would need getopt outside of cgi/cli? I.e. where would these
options come from?
initially the idea was to use getopt on windows machines. After proposing
my patch which just includes the NetBSD getopt()
, there was a
recommandation in php.pecl to use the php_getopt instead of the system
provided getopt to implement the PHP_FUNCTION(getopt).
This imho makes sense. We got windows support as well as long parameter
support. As we use it in ext/standard/basic_functions.c we have to move
the getopt.c out of sapi/cli.
David has a point here. So first of all we should move getopt
implementation out of CLI/CGI and into main. Could you do that
first Jani?Why one would need getopt outside of cgi/cli? I.e. where would these
options come from?
Having the file in CLI as well as in CGI isn't good for maintaining it,
therefore we should move it imo.
johannes
David,
Hi internals,
so based on a discussion of php.pecl we thought about using the php_getopt
for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
is the patch for that. Hopefully someone is reviewing and commiting the
patch as i don't have karma.
The idea is good imo, but there are a few things we have to do:
-
We need more tests, as far as I saw using grep we just have a single
testcase forgetopt()
which is certainly not enough when replacing the
implementation. -
The current implementation is not thread-safe, I don't know about the
glibc implementation but if we use our own implementation for
PHP's getopt function that should be threadsafe. -
If you move php_getopt to main you have to mark it as PHPAPI so the
SAPIs can use it.
Maybe there's more, didn't do a deeper review of the patch, yet, since
I'd like to wait a) until Jani moved the files and b) we have more
tests :-)
johannes
Patch applied to HEAD / PHP_5_3.
--Jani
Hi internals,
so based on a discussion of php.pecl we thought about using the php_getopt
for the PHP_FUNCTION(getopt) instead of the system provided getopt. Here
is the patch for that. Hopefully someone is reviewing and commiting the
patch as i don't have karma.It addes main/getopt.c main/php_getopt.h to the build system and uses the
php_getopt function in the ext/standard/basic_functions.c. Furthermore it
removes all HAVE_GETOPT and HARTMUT_0 switches. it also enable longopts
for both win and linux in the form$opt = getopt("a", array("param:", "param2"));
Where ":" in the longopts marks that the parameter takes an argument.
The main/getopt.c and main/php_getopt.h is in fact taken from
sapi/cli/getopt.c and sapi/cli/php_getopt.h but is slightly modified.http://experimentalworks.net/~dsp/getopt.patch.tar.gz
It also runs on windows.
To apply the patch:
remove
sapi/cli/getopt.c sapi/cli/php_getopt.h
sapi/cgi/getopt.c sapi/cgi/php_getopt.hadd main/getopt.c and main/php_getopt.h frm the archive
apply the patch.
--
Patches/Donations: http://pecl.php.net/~jani/