From e8fe2a727990fa4477dd16fc4023db1572c25c2a Mon Sep 17 00:00:00 2001 From: virusdefender Date: Tue, 31 May 2016 23:35:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0signal=E7=9A=84=E6=96=87?= =?UTF-8?q?=E5=AD=97=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- template/src/oj/submission/my_submission.html | 2 +- utils/signal2str.py | 26 +++++++++++++++++++ utils/templatetags/submission.py | 9 +++++++ 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 utils/signal2str.py diff --git a/template/src/oj/submission/my_submission.html b/template/src/oj/submission/my_submission.html index 289361f1..46e2b2fc 100644 --- a/template/src/oj/submission/my_submission.html +++ b/template/src/oj/submission/my_submission.html @@ -82,7 +82,7 @@ {{ item.real_time }} ms {{ item.cpu_time }} ms {{ item.memory }} Byte - {{ item.result|translate_result }} + {{ item.result|translate_result }} {% if item.signal %}({{ item.signal|translate_signal }}){% endif %} {% endfor %} diff --git a/utils/signal2str.py b/utils/signal2str.py new file mode 100644 index 00000000..6d90202b --- /dev/null +++ b/utils/signal2str.py @@ -0,0 +1,26 @@ +# copy from https://github.com/DMOJ/judge/issues/162 +try: + # in large part from http://code.activestate.com/recipes/578899-strsignal/ + import signal + import ctypes + import ctypes.util + + libc = ctypes.CDLL(ctypes.util.find_library("c")) + strsignal_c = ctypes.CFUNCTYPE(ctypes.c_char_p, ctypes.c_int)(("strsignal", libc), ((1,),)) + NSIG = signal.NSIG + + + def strsignal_ctypes_wrapper(signo): + # The behavior of the C library strsignal() is unspecified if + # called with an out-of-range argument. Range-check on entry + # _and_ NULL-check on exit. + if 0 <= signo < NSIG: + s = strsignal_c(signo) + if s: + return s.decode("utf-8") + return "Unknown signal %d" % signo + + + strsignal = strsignal_ctypes_wrapper +except: + strsignal = lambda x: 'signal %d' % x diff --git a/utils/templatetags/submission.py b/utils/templatetags/submission.py index aeb11a3e..61011ce6 100644 --- a/utils/templatetags/submission.py +++ b/utils/templatetags/submission.py @@ -1,5 +1,6 @@ # coding=utf-8 from django import template +from utils.signal2str import strsignal def translate_result(value): @@ -17,6 +18,13 @@ def translate_result(value): return results[value] +def translate_signal(value): + if not value: + return "" + else: + return strsignal(value) + + def translate_language(value): return {1: "C", 2: "C++", 3: "Java"}[value] @@ -33,3 +41,4 @@ register = template.Library() register.filter("translate_result", translate_result) register.filter("translate_language", translate_language) register.filter("translate_result_class", translate_result_class) +register.filter("translate_signal", translate_signal)