summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHisham Muhammad <hisham@gobolinux.org>2012-10-19 18:59:48 +0000
committerHisham Muhammad <hisham@gobolinux.org>2012-10-19 18:59:48 +0000
commit1b21827f1f875692e14ee5ac9b22f3fd69fd8593 (patch)
tree7746d8fe6864bfa47292caa65aa8fb944d1eb752
parent47e881f460cfb441be64a1ff17295357fb02d0ad (diff)
Fail gracefully when /proc is not mounted
(thanks to Philipp Hagemeister)
-rw-r--r--CRT.c9
-rw-r--r--CRT.h2
-rw-r--r--ChangeLog2
-rw-r--r--ProcessList.c12
4 files changed, 22 insertions, 3 deletions
diff --git a/CRT.c b/CRT.c
index 97f2144e..6cc979f7 100644
--- a/CRT.c
+++ b/CRT.c
@@ -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();
diff --git a/CRT.h b/CRT.h
index 1fe3d248..7916b16d 100644
--- a/CRT.h
+++ b/CRT.h
@@ -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();
diff --git a/ChangeLog b/ChangeLog
index 45b4edbb..4376249d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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;

© 2014-2024 Faster IT GmbH | imprint | privacy policy