Commit 1b21827f authored by Hisham Muhammad's avatar Hisham Muhammad
Browse files

Fail gracefully when /proc is not mounted

(thanks to Philipp Hagemeister)
parent 47e881f4
......@@ -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
......
......@@ -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;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment