summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOlivier Gayot <duskcoder@gmail.com>2014-06-18 16:09:09 +0200
committerOlivier Gayot <duskcoder@gmail.com>2014-06-18 16:48:12 +0200
commitf3c4b3ef578830679e312ce2efb706499db0b1c3 (patch)
tree581eb014e11fc3b1f02b6e4afd3a8333e29c113b
parent0e03940802cebefdf6b0597a154bd9395e1af4d2 (diff)
prevent a crash when sysfs and proc are not readableHEADmaster
The program used to return an empty list of devices. Nevertheless, the method printTraffic of TrafficWindow does not handle empty lists. Fixed by throwing an exception whenever proc and sysfs are both unaccessible. Signed-off-by: Olivier Gayot <duskcoder@gmail.com>
-rw-r--r--src/devreader-linux.cpp4
-rw-r--r--src/main.cpp15
2 files changed, 16 insertions, 3 deletions
diff --git a/src/devreader-linux.cpp b/src/devreader-linux.cpp
index 5b6e9eb..85824cd 100644
--- a/src/devreader-linux.cpp
+++ b/src/devreader-linux.cpp
@@ -14,6 +14,8 @@
#include <string>
#include <list>
+#include <stdexcept>
+
using namespace std;
bool DevReaderLinux::isAvailable()
@@ -28,6 +30,6 @@ list<string> DevReaderLinux::findAllDevices()
else if(DevReaderLinuxProc::isAvailable())
return DevReaderLinuxProc::findAllDevices();
else
- return list<string>();
+ throw std::runtime_error("neither sysfs nor proc is available");
}
diff --git a/src/main.cpp b/src/main.cpp
index c53e142..5b32183 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -48,6 +48,8 @@
#include <string>
#include <vector>
+#include <stdexcept>
+
#include <ctype.h>
#include <time.h>
#include <curses.h>
@@ -352,8 +354,17 @@ int main(int argc, char *argv[])
}
}
- // auto-detect network devices
- DevReaderFactory::findAllDevices();
+ try
+ {
+ // auto-detect network devices
+ DevReaderFactory::findAllDevices();
+ }
+ catch (std::runtime_error e)
+ {
+ cerr << "Cannot find any device: " << e.what() << endl;
+ return -1;
+ };
+
const map<string, DevReader*>& deviceReaders = DevReaderFactory::getAllDevReaders();
// create one instance of the Device class per device