diff options
author | Hisham Muhammad <hisham@gobolinux.org> | 2012-10-19 18:59:48 +0000 |
---|---|---|
committer | Hisham Muhammad <hisham@gobolinux.org> | 2012-10-19 18:59:48 +0000 |
commit | 1b21827f1f875692e14ee5ac9b22f3fd69fd8593 (patch) | |
tree | 7746d8fe6864bfa47292caa65aa8fb944d1eb752 | |
parent | 47e881f460cfb441be64a1ff17295357fb02d0ad (diff) |
Fail gracefully when /proc is not mounted
(thanks to Philipp Hagemeister)
-rw-r--r-- | CRT.c | 9 | ||||
-rw-r--r-- | CRT.h | 2 | ||||
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | ProcessList.c | 12 |
4 files changed, 22 insertions, 3 deletions
@@ -11,8 +11,10 @@ in the source distribution for its full text. #include "String.h" #include <curses.h> +#include <errno.h> #include <signal.h> #include <stdlib.h> +#include <string.h> #ifdef HAVE_EXECINFO_H #include <execinfo.h> #endif @@ -198,6 +200,13 @@ void CRT_done() { endwin(); } +void CRT_fatalError(const char* note) { + char* sysMsg = strerror(errno); + CRT_done(); + fprintf(stderr, "%s: %s\n", note, sysMsg); + exit(2); +} + int CRT_readKey() { nocbreak(); cbreak(); @@ -119,6 +119,8 @@ void CRT_init(int delay, int colorScheme); void CRT_done(); +void CRT_fatalError(const char* note); + int CRT_readKey(); void CRT_disableDelay(); @@ -3,6 +3,8 @@ What's new in version 1.0.2 * Add IO priority support ('i' key) * Avoid deleting .htoprc if it is a symlink +* Fail gracefully when /proc is not mounted + (thanks to Philipp Hagemeister) * BUGFIX: Fix crashes when process list is empty What's new in version 1.0.1 diff --git a/ProcessList.c b/ProcessList.c index 268793f2..30cc8012 100644 --- a/ProcessList.c +++ b/ProcessList.c @@ -193,7 +193,9 @@ ProcessList* ProcessList_new(UsersTable* usersTable, Hashtable* pidWhiteList) { this->processes2 = Vector_new(PROCESS_CLASS, true, DEFAULT_SIZE, Process_compare); FILE* file = fopen(PROCSTATFILE, "r"); - assert(file != NULL); + if (file == NULL) { + CRT_fatalError("Cannot open " PROCSTATFILE); + } char buffer[256]; int cpus = -1; do { @@ -758,7 +760,9 @@ void ProcessList_scan(ProcessList* this) { unsigned long long int swapFree = 0; FILE* file = fopen(PROCMEMINFOFILE, "r"); - assert(file != NULL); + if (file == NULL) { + CRT_fatalError("Cannot open " PROCMEMINFOFILE); + } int cpus = this->cpuCount; { char buffer[128]; @@ -796,7 +800,9 @@ void ProcessList_scan(ProcessList* this) { fclose(file); file = fopen(PROCSTATFILE, "r"); - assert(file != NULL); + if (file == NULL) { + CRT_fatalError("Cannot open " PROCSTATFILE); + } for (int i = 0; i <= cpus; i++) { char buffer[256]; int cpuid; |