/**
      \fn sig_segfault_handler
      \brief our segfault handler

*/
void sig_segfault_handler(int signo)
{
     
     static int running=0;
      if(running) 
      {
        signo=0;
        exit(1);
      }
      running=0; 
      ADM_backTrack("Segfault",0,"??");
}
Exemplo n.º 2
0
/**
    \fn EndAndPaddTilleSizeMatchesAviListAvi
    \brief Warning we assume everything is even
*/
bool  AviListAvi::EndAndPaddTilleSizeMatches(int sizeFilled)
{
    uint64_t pos=Tell();            // Current position
    uint64_t start=TellBegin()+8;   // Payload start
    uint64_t end=start+sizeFilled;  // Next chunk
    if(pos&1)
        ADM_backTrack("[AVI]CHUNK is at a even position",__LINE__,__FILE__);
    if(pos+8>end)
    {
        ADM_error("No space to add junk chunk ( %d, filler=%d)\n",(int)pos-start,sizeFilled);
        if(end<=pos)
        {
            ADM_error("CHUNK OVERFLOW ( %d, filler=%d)\n",(int)pos-start,sizeFilled);
            ADM_error("CHUNK OVERFLOW ( %d, filler=%d)\n",(int)pos-start,sizeFilled);
            ADM_error("CHUNK OVERFLOW ( %d, filler=%d)\n",(int)pos-start,sizeFilled);
            ADM_error("CHUNK OVERFLOW ( %d, filler=%d)\n",(int)pos-start,sizeFilled);       
            ADM_backTrack("CHUNK overflow",__LINE__,__FILE__);
            return false;
        }

        int left=(int)(end-pos);
        for(int i=0;i<left;i++) Write8(0); // we dont have enough space to put a junk()
        End();
        return true;
 
    }
    End();
    uint64_t left=end-8-pos;
    AviListAvi junk("JUNK",getFile());
    junk.Begin();
    for(int i=0;i<left;i++)  // Inefficient, but can be fairly large
            junk.Write8(0);
    junk.End();
    return true;

}