ProcedureReturn segfault

Linux specific forum
Biggles
New User
New User
Posts: 5
Joined: Fri Jun 17, 2005 9:56 am

ProcedureReturn segfault

Post by Biggles »

On the forum I found a nice piece of code (written for the Windows version) to make it a bit easier to use libmysqlclient.so.12. This is a relevant part to show my problem:

Code: Select all

#libmysql = 1
Global CFF_MySQL_Init.l,        CFF_MySQL_ERRNO.l
Global CFF_MySQL_ERROR.l,       CFF_MySQL_Real_Connect.l
Global CFF_MySQL_Real_Query.l,  CFF_MySQL_Store_Result.l
Global CFF_MySQL_Field_Count.l, CFF_MySQL_Use_Result.l
Global CFF_MySQL_Fetch_Row.l,   CFF_MySQL_Fetch_Lengths.l
Global CFF_MySQL_Free_Result.l, CFF_MySQL_Close.l

Procedure.l MySQL_Init()
  If OpenLibrary(#libmysql,"libmysqlclient.so.12")
    CFF_MySQL_Init          = IsFunction(#libmysql, "mysql_init")
    CFF_MySQL_ErrNo         = IsFunction(#libmysql, "mysql_errno")
    CFF_MYSQL_Error         = IsFunction(#libmysql, "mysql_error")
    CFF_MySQL_Real_Connect  = IsFunction(#libmysql, "mysql_real_connect")
    CFF_MySQL_Real_Query    = IsFunction(#libmysql, "mysql_real_query")
    CFF_MySQL_Store_Result  = IsFunction(#libmysql, "mysql_store_result")
    CFF_MySQL_Field_Count   = IsFunction(#libmysql, "mysql_field_count")
    CFF_MySQL_Use_Result    = IsFunction(#libmysql, "mysql_use_result")
    CFF_MySQL_Fetch_Row     = IsFunction(#libmysql, "mysql_fetch_row")
    CFF_MySQL_Fetch_Lengths = IsFunction(#libmysql, "mysql_fetch_lengths")
    CFF_MySQL_Free_Result   = IsFunction(#libmysql, "mysql_free_result")
    CFF_MySQL_Close         = IsFunction(#libmysql, "mysql_close")
    ProcedureReturn CallFunctionFast (CFF_MySQL_Init, dbHnd)
  EndIf
EndProcedure

dbHnd = MySQL_Init()
The code produces a segfault. When I comment the ProcedureReturn and add a line "dbHnd.l = CallFunctionFast (CFF_MySQL_Init, dbHnd)" it works. I guess the code is correct, but fails when it's put within a Procedure. In the Windows version this seems to be legal. Any ideas?
freak
PureBasic Team
PureBasic Team
Posts: 5929
Joined: Fri Apr 25, 2003 5:21 pm
Location: Germany

Post by freak »

try using CallCFunctionFast() instead of CallFunctionFast()
quidquid Latine dictum sit altum videtur
Biggles
New User
New User
Posts: 5
Joined: Fri Jun 17, 2005 9:56 am

Post by Biggles »

That's it, thanks!
Post Reply