aboutsummaryrefslogtreecommitdiffhomepage
path: root/sanity.cpp
diff options
context:
space:
mode:
authorGravatar ridiculousfish <corydoras@ridiculousfish.com>2011-12-26 19:11:54 -0800
committerGravatar ridiculousfish <corydoras@ridiculousfish.com>2011-12-26 19:11:54 -0800
commit3f16ace6784caab54fb054836ee93902e9701913 (patch)
tree6ae6170f86bd45ce7fd0dae4a4242bb8dc67c505 /sanity.cpp
parent834ea94eb97d37c65fcbf2fcc3b69303f6fb7e24 (diff)
Initial C++ conversion
Diffstat (limited to 'sanity.cpp')
-rw-r--r--sanity.cpp76
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();
+ }
+}
+
+