utils.logger: PyUnicode_FromFormatV -> vsprintf
The Py function segfaults with certain (malformed?) messages.
This commit is contained in:
parent
b3f501b387
commit
f9971fecc5
|
@ -19,7 +19,8 @@ from libc.string cimport const_char
|
||||||
from efl.eina cimport Eina_Log_Domain, const_Eina_Log_Domain, Eina_Log_Level, \
|
from efl.eina cimport Eina_Log_Domain, const_Eina_Log_Domain, Eina_Log_Level, \
|
||||||
eina_log_print_cb_set, eina_log_domain_register, eina_log_level_set, \
|
eina_log_print_cb_set, eina_log_domain_register, eina_log_level_set, \
|
||||||
eina_log_level_get, eina_log_domain_level_get, eina_log_domain_level_set, \
|
eina_log_level_get, eina_log_domain_level_get, eina_log_domain_level_set, \
|
||||||
eina_log_print
|
eina_log_print, EINA_LOG_DOM_DBG, EINA_LOG_DOM_INFO, EINA_LOG_DOM_WARN, \
|
||||||
|
EINA_LOG_DOM_ERR, EINA_LOG_DOM_CRIT
|
||||||
from cpython cimport PyUnicode_AsUTF8String, PY_VERSION_HEX
|
from cpython cimport PyUnicode_AsUTF8String, PY_VERSION_HEX
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
|
@ -29,8 +30,8 @@ cdef extern from "stdarg.h":
|
||||||
ctypedef struct va_list:
|
ctypedef struct va_list:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
cdef extern from "Python.h":
|
cdef extern from "stdio.h":
|
||||||
object PyUnicode_FromFormatV(char *format, va_list vargs)
|
int vsprintf(char *, const_char *fmt, va_list args)
|
||||||
|
|
||||||
cdef tuple log_levels = (
|
cdef tuple log_levels = (
|
||||||
50,
|
50,
|
||||||
|
@ -46,8 +47,14 @@ cdef void py_eina_log_print_cb(const_Eina_Log_Domain *d,
|
||||||
Eina_Log_Level level,
|
Eina_Log_Level level,
|
||||||
const_char *file, const_char *fnc, int line,
|
const_char *file, const_char *fnc, int line,
|
||||||
const_char *fmt, void *data, va_list args) with gil:
|
const_char *fmt, void *data, va_list args) with gil:
|
||||||
cdef unicode msg = PyUnicode_FromFormatV(fmt, args)
|
cdef:
|
||||||
cdef unicode name = d.name.decode("utf-8")
|
char tmp[256]
|
||||||
|
cdef unicode msg
|
||||||
|
cdef unicode name = d.name.decode("utf-8")
|
||||||
|
|
||||||
|
vsprintf(tmp, fmt, args)
|
||||||
|
msg = tmp.decode("utf-8")
|
||||||
|
|
||||||
rec = logging.LogRecord(name, log_levels[level], file, line, msg, None, None, fnc)
|
rec = logging.LogRecord(name, log_levels[level], file, line, msg, None, None, fnc)
|
||||||
logger = loggers.get(name, loggers["efl"])
|
logger = loggers.get(name, loggers["efl"])
|
||||||
logger.handle(rec)
|
logger.handle(rec)
|
||||||
|
@ -103,3 +110,6 @@ rootlog = add_logger("efl")
|
||||||
rootlog.propagate = False
|
rootlog.propagate = False
|
||||||
|
|
||||||
cdef public int PY_EFL_LOG_DOMAIN = rootlog.eina_log_domain
|
cdef public int PY_EFL_LOG_DOMAIN = rootlog.eina_log_domain
|
||||||
|
|
||||||
|
def logger_test_dbg():
|
||||||
|
EINA_LOG_DOM_DBG(PY_EFL_LOG_DOMAIN, "test message", NULL)
|
||||||
|
|
Loading…
Reference in New Issue