diff --git a/template/src/oj/submission/my_submission.html b/template/src/oj/submission/my_submission.html
index 289361f..46e2b2f 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 0000000..6d90202
--- /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 aeb11a3..61011ce 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)