alloca() usage, building master pre-0.95 on Windows

Ramiro Morales <[email protected]>
Newsgroups gmane.comp.db.tds.freetds
Message-ID <CAO7PdF-RQcKsAFph-5YiOV2DuaWE-XjjDsXh2WGP1UigNdThbQ@mail.gmail.com>
Hi all,

When trying to build the tools binaries with Visual studio 2008 (VC9)
(actually a free subset called the Microsoft Visual C++ Compiler
Package for Python 2.7) after tds.lib, db-lib and ctlib.lib have been
built successfully (Thanks Frediano and Larry!), this happens:

C:\>nmake -nologo -fNmakefile CONFIGURATION=release PLATFORM=win32 apps
        cl  -nologo     -W3 -EHsc -TC -Gm  -errorReport:prompt -D
"_MBCS" -D "_LIB" -D "WIN32"  -D MSDBLIB  -D "_CRT_SECURE_NO_WARNINGS"
-D _CRT_NONSTDC_NO_DEPRECATE -D _WIN32_WINNT=0x0400 -I "include" -I
"win32" -I "include\x64" -MD  -O2 -D "_NDEBUG" -Zi
-Fesrc\apps\win32\release\bsqldb.exe
-Fd"src\apps\win32\release\vc80.pdb"  src\apps\bsqldb.c -link
-LIBPATH:src\dblib\win32\release db-lib.lib Ws2_32.lib shell32.lib
bsqldb.c
...
db-lib.lib(token.obj) : error LNK2019: unresolved external symbol
_alloca referenced in function _tds_process_nbcrow
src\apps\win32\release\bsqldb.exe : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077:
'"C:\Users\Me\AppData\Local\Programs\Common\Microsoft\Visual C++ for
Python\9.0\VC\Bin\cl.EXE"' : return code '0x2'
Stop.

This is because there is one usage of alloca() in src/tds/token.c.

With this toolchain, alloca() is available, not as a C runtime library
function but is inserted inline by the compiler instead. Problem is:
To get it to work and not generate the link-time error above, the
malloc.h header file needs to be included (I suspect it contains the
needed pre-processor+compiler magic so the inlining happens).

My question is: What would be the best path to fix this?:

1. Modify token.c to use another function instead of alloca, e.g.
malloc() which is widely used elsewhere in the code base?
2. Patch token.c so it conditionally #include <malloc.h> if Visual C
is detected?
3. Another option?

The only other Microsoft toolchain I have available is the Microsoft
WIndows SDK v7.1 which is also free and compatible with Visual studio
2010 I think and I see the same error there. Would be interested in
experiences of users of newer commercial Visual Studio editions but I
suspect the situation will be similar.

Regards,

-- 
Ramiro Morales
@ramiromorales
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.