PHP 4.0 Bug #7474 Updated: ext/standard/scanf.c reports strtol/strtoul "undefined reference"
| From: | widman at cardiothink dot com | Date: | Wed, 17 Jan 2001 00:50:46 +0000 |
| Subject: | PHP 4.0 Bug #7474 Updated: ext/standard/scanf.c reports strtol/strtoul "undefined reference" | ||
| Groups: | php.dev | ||
| Request: | Send a blank email to php-dev+get-44301@lists.php.net to get a copy of this message | ||
ID: 7474
User Update by: widman@cardiothink.com
Status: Open
Bug Type: Compile Failure
Description: ext/standard/scanf.c reports strtol/strtoul "undefined reference"
The snapshot of 200101160445 failed to compile with the same error as that of 4.0.4pl1.
Previous Comments:
---------------------------------------------------------------------------
[2001-01-16 08:03:14] widman@cardiothink.com
I just tried to compile 4.0.4pl1 and it failed the same way:
gcc -I. [snip] -c scanf.c && touch scanf.lo
scanf.c: In function `php_sscanf_internal':
scanf.c:783: `strtol' undeclared (first use this function)
scanf.c:783: (Each undeclared identifier is reported only once
scanf.c:783: for each function it appears in.)
scanf.c:804: `strtoul' undeclared (first use this function)
*** Error code 1
I'll try a snapshot next. Thanks - Larry
---------------------------------------------------------------------------
[2000-12-18 10:44:07] sniper@php.net
Does this happen with latest snapshot from http://snaps.php.net/
??
--Jani
---------------------------------------------------------------------------
[2000-10-26 00:42:20] widman@cardiothink.com
I went through and found all the files that use strtol without type-casting. They are:
./ext/dbase/dbase.c
./ext/session/mod_files.c
./ext/standard/formatted_print.c
./ext/standard/scanf.c
./ext/standard/string.c
./ext/wddx/wddx.c
./main/fopen-wrappers.c
./main/php_ini.c
./sapi/nsapi/nsapi.c
./Zend/zend_operators.c
./Zend/zend_operators.h
./Zend/zend-scanner.c
I added the first set of function prototypes in my first message (the ones that are commented out)
to each of the above files, except that the last 3 files required "ulong" to be spelled
out as "unsigned long" for strtoul. The others took ulong OK.
The compile was successful. Now let's see if php4 works. I'm sending this now because it
may take a while for any bugs related to this fix to appear.
Thanks again for your hard work. I hope these comments help the next poor soul who is still working
with SunOs 4.1.4.
---------------------------------------------------------------------------
[2000-10-26 00:07:37] widman@cardiothink.com
SunOs 4.1.4 has strtol (at least, the man page for it). And,
ext/mysql/libmysql has a replacement for strtol/strtoul.
But, the "out of the box" compile fails in ext/standard/scanf.c with the complaint:
strtol/strtoul are "undefined references". I tried to cut and paste from the files in
ext/mysql/libmysql but got a zillion compiler errors.
Then, I added the following to the start of scanf.c based on the SunOs man page:
long strtol( char *str, char **ptr, int base );
ulong strtoul( char *str, char **ptr, int base );
The compile succeeded, but complained that these functions had been defined as int implicitly in
./Zend/zend_operators.c. I then changed the added lines to
int strtol( char *str, char **ptr, int base );
int strtoul( char *str, char **ptr, int base );
These lines allowed the file to compile without warnings,
and the rest of the php4 compile proceeded smoothly. I guess I'll just have to see whether I
should have gone through the entire package and defined these functions as long/ulong everywhere
instead of making them "int" in this one file.
I don't know how best to handle this idiosyncracy in the php4 package. I searched everything
in /usr/include for definitions of strtol and strtoul, but couldn't find any files that define
them. Maybe you could include a short .h file with these definitions, or add them to a global file
for those systems that don't define these right.
Thanks for all your hard work! - Larry Widman
---------------------------------------------------------------------------
Full Bug description available at: http://bugs.php.net/?id=7474