ID: 7474
User Update by: [EMAIL PROTECTED]
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] [EMAIL PROTECTED]
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] [EMAIL PROTECTED]
Does this happen with latest snapshot from http://snaps.php.net/ ??

--Jani

---------------------------------------------------------------------------

[2000-10-26 00:42:20] [EMAIL PROTECTED]
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] [EMAIL PROTECTED]
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


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
To contact the list administrators, e-mail: [EMAIL PROTECTED]

Reply via email to