longjmp crashes on Windows

Rene Zwanenburg renezwanenburg at gmail.com
Sat Nov 16 14:26:52 PST 2013


On Saturday, 16 November 2013 at 16:22:17 UTC, Piotr Podsiadły 
wrote:
> On Saturday, 16 November 2013 at 14:41:46 UTC, Maxim Fomin 
> wrote:
>> What kind of problem you try to solve by manual defining 
>> system data structures? Why not use platform independent valid 
>> declarations? Why did you decide that _JBLEN is 64, 256, 528 
>> according to version? Why did you decide that having _JBLEN 
>> bytes filled with zeros is a valid value of jmp_buf object? 
>> Why should setjmp/longjmp take buffer by reference?
>
> I couldn't find these declarations for Windows in druntime 
> (there is only POSIX version).
> Values of _JBLEN are based on constants from headers from DMC 
> (x86 version) and Visual Studio (x86_64 and ia64).
>
> These are declarations copied from setjmp.h from DMC:
>
> #define _JBLEN 16
> typedef int jmp_buf[_JBLEN];
>
> #define __CLIB	__cdecl
> int __CLIB _setjmp(jmp_buf);
> void __CLIB longjmp(jmp_buf,int);
>
> jmp_buf is initialized by the first call to setjmp, so its 
> initial value doesn't matter.
> In C, arrays are alawys passed as a pointer - that's why I used 
> ref.
>
>> Try to use proper version of setjmp/jmp_buf from druntime.
>> By the way, why did you decide to use it in D language in a 
>> first place?
>
> I'm trying to use libpng and libjpeg directly from D, without 
> any wrappers.
> These libraries use longjmp to handle errors (the only 
> alternative is to call exit() or abort()).

As an alternative to those libraries, may I suggest using the 
DevIL binding in Derelict? It's quite easy to use:

https://github.com/aldacron/Derelict3


More information about the Digitalmars-d-learn mailing list