From 2e83af28ac1c34b5c24b05963484fbb3c8f8a220 Mon Sep 17 00:00:00 2001 From: rakshasa Date: Wed, 15 Jun 2005 09:28:52 +0000 Subject: [PATCH] Fixed freebsd compile errors. Added global rate display. git-svn-id: svn://rakshasa.no/libtorrent/trunk/rtorrent@463 e378c898-3ddf-0310-93e7-cc216c733640 --- src/display/canvas.h | 12 ++++++++---- src/display/window_statusbar.cc | 4 +++- src/main.cc | 3 ++- src/option_handler_rules.cc | 1 + src/signal_handler.cc | 30 ++++++++++++++++++++++++++++++ src/signal_handler.h | 10 ++++++---- 6 files changed, 50 insertions(+), 10 deletions(-) diff --git a/src/display/canvas.h b/src/display/canvas.h index 3d43ce4d..9965b56a 100644 --- a/src/display/canvas.h +++ b/src/display/canvas.h @@ -70,19 +70,23 @@ public: template void print(int x, int y, char* str, - A1 a1, A2 a2, A3 a3) { mvwprintw(m_window, y, x, str, a1, a2, a3); } + A1 a1, A2 a2, A3 a3) { mvwprintw(m_window, y, x, str, a1, a2, a3); } template void print(int x, int y, char* str, - A1 a1, A2 a2, A3 a3, A4 a4) { mvwprintw(m_window, y, x, str, a1, a2, a3, a4); } + A1 a1, A2 a2, A3 a3, A4 a4) { mvwprintw(m_window, y, x, str, a1, a2, a3, a4); } template void print(int x, int y, char* str, - A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { mvwprintw(m_window, y, x, str, a1, a2, a3, a4, a5); } + A1 a1, A2 a2, A3 a3, A4 a4, A5 a5) { mvwprintw(m_window, y, x, str, a1, a2, a3, a4, a5); } template void print(int x, int y, char* str, - A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { mvwprintw(m_window, y, x, str, a1, a2, a3, a4, a5, a6); } + A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6) { mvwprintw(m_window, y, x, str, a1, a2, a3, a4, a5, a6); } + + template + void print(int x, int y, char* str, + A1 a1, A2 a2, A3 a3, A4 a4, A5 a5, A6 a6, A7 a7) { mvwprintw(m_window, y, x, str, a1, a2, a3, a4, a5, a6, a7); } void set_attr(int x, int y, int n, int attr, int color) { mvwchgat(m_window, y, x, n, attr, color, NULL); } diff --git a/src/display/window_statusbar.cc b/src/display/window_statusbar.cc index ab5f2fb5..7bcf91ad 100644 --- a/src/display/window_statusbar.cc +++ b/src/display/window_statusbar.cc @@ -56,8 +56,10 @@ WindowStatusbar::redraw() { else pos = snprintf(buf + pos, 128 - pos, "%-3i", torrent::get_read_throttle() / 1024); - m_canvas->print(0, 0, "Throttle U/D: %s Listen: %s:%i%s Handshakes: %i", + m_canvas->print(0, 0, "Throttle U/D: %s Rate: %5.1f / %5.1f KiB Listen: %s:%i%s Handshakes: %i", buf, + (double)torrent::get_write_rate() / 1024.0, + (double)torrent::get_read_rate() / 1024.0, !torrent::get_ip().empty() ? torrent::get_ip().c_str() : "", (int)torrent::get_listen_port(), !torrent::get_bind().empty() ? (" Bind: " + torrent::get_bind()).c_str() : "", diff --git a/src/main.cc b/src/main.cc index eed8651a..1aee0e21 100644 --- a/src/main.cc +++ b/src/main.cc @@ -191,6 +191,7 @@ main(int argc, char** argv) { SignalHandler::set_handler(SIGINT, sigc::bind(sigc::mem_fun(uiRoot, &ui::Root::set_shutdown_received), true)); SignalHandler::set_handler(SIGSEGV, sigc::bind(sigc::ptr_fun(&do_panic), SIGSEGV)); SignalHandler::set_handler(SIGBUS, sigc::bind(sigc::ptr_fun(&do_panic), SIGBUS)); + SignalHandler::set_handler(SIGFPE, sigc::bind(sigc::ptr_fun(&do_panic), SIGFPE)); // Need to initialize this before parseing options. torrent::initialize(); @@ -249,7 +250,7 @@ do_panic(int signum) { SignalHandler::set_default(signum); display::Canvas::cleanup(); - std::cout << "Signal " << (signum == SIGSEGV ? "SIGSEGV" : "SIGBUS") << " recived, dumping stack:" << std::endl; + std::cout << "Caught " << SignalHandler::as_string(signum) << ", dumping stack:" << std::endl; #ifdef USE_EXECINFO void* stackPtrs[20]; diff --git a/src/option_handler_rules.cc b/src/option_handler_rules.cc index 74e40c43..0efb27e9 100644 --- a/src/option_handler_rules.cc +++ b/src/option_handler_rules.cc @@ -22,6 +22,7 @@ #include "config.h" +#include #include #include diff --git a/src/signal_handler.cc b/src/signal_handler.cc index d6712804..c425dd5a 100644 --- a/src/signal_handler.cc +++ b/src/signal_handler.cc @@ -67,3 +67,33 @@ SignalHandler::caught(int signum) { m_handlers[signum](); } + +const char* +SignalHandler::as_string(unsigned int signum) { + switch (signum) { + case SIGHUP: + return "Hangup detected"; + case SIGINT: + return "Interrupt from keyboard"; + case SIGQUIT: + return "Quit signal"; + case SIGILL: + return "Illegal instruction"; + case SIGABRT: + return "Abort signal"; + case SIGFPE: + return "Floating point exception"; + case SIGKILL: + return "Kill signal"; + case SIGSEGV: + return "Segmentation fault"; + case SIGPIPE: + return "Broken pipe"; + case SIGALRM: + return "Timer signal"; + case SIGTERM: + return "Termination signal"; + default: + return "Unlisted"; + } +} diff --git a/src/signal_handler.h b/src/signal_handler.h index 422f6fbf..8373dd3b 100644 --- a/src/signal_handler.h +++ b/src/signal_handler.h @@ -32,12 +32,14 @@ public: static const unsigned int HIGHEST_SIGNAL = 32; - static void set_default(unsigned int signum); - static void set_ignore(unsigned int signum); - static void set_handler(unsigned int signum, Slot slot); + static void set_default(unsigned int signum); + static void set_ignore(unsigned int signum); + static void set_handler(unsigned int signum, Slot slot); + + static const char* as_string(unsigned int signum); private: - static void caught(int signum); + static void caught(int signum); static Slot m_handlers[HIGHEST_SIGNAL]; };