2005-09-20 23:26:39 +10:00
/** \file sanity.c
Functions for performing sanity checks on the program state
*/
2006-08-11 11:18:35 +10:00
# include "config.h"
2005-09-20 23:26:39 +10:00
# include <stdlib.h>
# include <wchar.h>
# include <stdio.h>
# include <errno.h>
# include <termios.h>
# include <unistd.h>
# include <signal.h>
# include <sys/types.h>
# include <sys/stat.h>
# include <dirent.h>
2006-02-28 23:17:16 +10:00
# include "fallback.h"
2005-09-20 23:26:39 +10:00
# include "util.h"
2006-02-28 23:17:16 +10:00
2005-09-20 23:26:39 +10:00
# include "common.h"
# include "sanity.h"
# include "proc.h"
# include "history.h"
# include "reader.h"
# include "kill.h"
# include "wutil.h"
2006-07-20 08:55:49 +10:00
2005-09-20 23:26:39 +10:00
/**
Status from earlier sanity checks
*/
static int insane ;
void sanity_lose ( )
{
2012-02-06 01:45:16 -08:00
debug ( 0 , _ ( L " Errors detected, shutting down. Break on sanity_lose() to debug. " ) ) ;
2005-09-20 23:26:39 +10:00
insane = 1 ;
}
int sanity_check ( )
{
if ( ! insane )
2012-02-25 18:54:49 -08:00
if ( get_is_interactive ( ) )
2005-09-20 23:26:39 +10:00
history_sanity_check ( ) ;
if ( ! insane )
reader_sanity_check ( ) ;
if ( ! insane )
kill_sanity_check ( ) ;
if ( ! insane )
proc_sanity_check ( ) ;
2011-12-26 19:18:46 -08:00
2005-09-20 23:26:39 +10:00
return insane ;
}
void validate_pointer ( const void * ptr , const wchar_t * err , int null_ok )
{
2011-12-26 19:18:46 -08:00
/*
Test if the pointer data crosses a segment boundary .
2005-09-20 23:26:39 +10:00
*/
2011-12-26 19:18:46 -08:00
2006-06-02 05:42:31 +10:00
if ( ( 0x00000003l & ( long ) ptr ) ! = 0 )
2005-09-20 23:26:39 +10:00
{
2006-01-12 00:17:35 +10:00
debug ( 0 , _ ( L " The pointer '%ls' is invalid " ) , err ) ;
2011-12-26 19:18:46 -08:00
sanity_lose ( ) ;
2005-09-20 23:26:39 +10:00
}
2011-12-26 19:18:46 -08:00
2005-09-20 23:26:39 +10:00
if ( ( ! null_ok ) & & ( ptr = = 0 ) )
{
2006-01-12 00:17:35 +10:00
debug ( 0 , _ ( L " The pointer '%ls' is null " ) , err ) ;
2011-12-26 19:18:46 -08:00
sanity_lose ( ) ;
2005-09-20 23:26:39 +10:00
}
}