view tango/tango/stdc/posix/setjmp.d @ 132:1700239cab2e trunk

[svn r136] MAJOR UNSTABLE UPDATE!!! Initial commit after moving to Tango instead of Phobos. Lots of bugfixes... This build is not suitable for most things.
author lindquist
date Fri, 11 Jan 2008 17:57:40 +0100
parents
children
line wrap: on
line source

/**
 * D header file for POSIX.
 *
 * Copyright: Public Domain
 * License:   Public Domain
 * Authors:   Sean Kelly
 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
 */
module tango.stdc.posix.setjmp;

private import tango.stdc.posix.config;
private import tango.stdc.posix.signal; // for sigset_t

extern (C):

//
// Required
//
/*
jmp_buf

int  setjmp(jmp_buf);
void longjmp(jmp_buf, int);
*/

version( linux )
{
    version( X86_64 )
    {
        //const JB_BX     = 0;
        //const JB_BP     = 1;
        //const JB_12     = 2;
        //const JB_13     = 3;
        //const JB_14     = 4;
        //const JB_15     = 5;
        //const JB_SP     = 6;
        //const JB_PC     = 7;
        //const JB_SIZE   = 64;

        alias long[8] __jmp_buf;
    }
    else version( X86 )
    {
        //const JB_BX     = 0;
        //const JB_SI     = 1;
        //const JB_DI     = 2;
        //const JB_BP     = 3;
        //const JB_SP     = 4;
        //const JB_PC     = 5;
        //const JB_SIZE   = 24;

        alias int[6] __jmp_buf;
    }

    struct __jmp_buf_tag
    {
        __jmp_buf   __jmpbuf;
        int         __mask_was_saved;
        sigset_t    __saved_mask;
    }

    alias __jmp_buf_tag[1] jmp_buf;

    alias _setjmp setjmp; // see XOpen block
    void longjmp(jmp_buf, int);
}

//
// C Extension (CX)
//
/*
sigjmp_buf

int  sigsetjmp(sigjmp_buf, int);
void siglongjmp(sigjmp_buf, int);
*/

version( linux )
{
    alias jmp_buf sigjmp_buf;

    int __sigsetjmp(sigjmp_buf, int);
    alias __sigsetjmp sigsetjmp;
    void siglongjmp(sigjmp_buf, int);
}

//
// XOpen (XSI)
//
/*
int  _setjmp(jmp_buf);
void _longjmp(jmp_buf, int);
*/

version( linux )
{
    int  _setjmp(jmp_buf);
    void _longjmp(jmp_buf, int);
}