Sybase documentation (http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.infocenter.dc32600.1570/html/dblib/X12458.htm) describes the dberr-argument passed to the error-handler thus:
dberr | The identifying number of the error (datatype int). Error numbers are defined in sybdb.h.
For example, if one wants to filter-out messages "General SQL Server error: Check messages from the SQL Server." (number 20018), all one has to do is compare the dberr-value with SYBESMSG. This works as expected against OpenClient, but not against FreeTDS.
For some reason, FreeTDS passes various different values as dberr -- despite the actual text of the message being the same. I observe here:
102: General SQL Server error: Check messages from the SQL Server
233: General SQL Server error: Check messages from the SQL Server
208: General SQL Server error: Check messages from the SQL Server
None of the numbers passed (not 102, not 233, not 208) can be found in FreeTDS' sybdb.h
Fixed