diff options
author | ridiculousfish <corydoras@ridiculousfish.com> | 2011-12-26 19:11:54 -0800 |
---|---|---|
committer | ridiculousfish <corydoras@ridiculousfish.com> | 2011-12-26 19:11:54 -0800 |
commit | 3f16ace6784caab54fb054836ee93902e9701913 (patch) | |
tree | 6ae6170f86bd45ce7fd0dae4a4242bb8dc67c505 /sanity.cpp | |
parent | 834ea94eb97d37c65fcbf2fcc3b69303f6fb7e24 (diff) |
Initial C++ conversion
Diffstat (limited to 'sanity.cpp')
-rw-r--r-- | sanity.cpp | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/sanity.cpp b/sanity.cpp new file mode 100644 index 00000000..c68a87d2 --- /dev/null +++ b/sanity.cpp @@ -0,0 +1,76 @@ +/** \file sanity.c + Functions for performing sanity checks on the program state +*/ +#include "config.h" + +#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> + + +#include "fallback.h" +#include "util.h" + +#include "common.h" +#include "sanity.h" +#include "proc.h" +#include "history.h" +#include "reader.h" +#include "kill.h" +#include "wutil.h" + + +/** + Status from earlier sanity checks +*/ +static int insane; + +void sanity_lose() +{ + debug( 0, _(L"Errors detected, shutting down") ); + insane = 1; +} + +int sanity_check() +{ + if( !insane ) + if( is_interactive ) + history_sanity_check(); + if( !insane ) + reader_sanity_check(); + if( !insane ) + kill_sanity_check(); + if( !insane ) + proc_sanity_check(); + + return insane; +} + +void validate_pointer( const void *ptr, const wchar_t *err, int null_ok ) +{ + + /* + Test if the pointer data crosses a segment boundary. + */ + + if( (0x00000003l & (long)ptr) != 0 ) + { + debug( 0, _(L"The pointer '%ls' is invalid"), err ); + sanity_lose(); + } + + if((!null_ok) && (ptr==0)) + { + debug( 0, _(L"The pointer '%ls' is null"), err ); + sanity_lose(); + } +} + + |