Merge pull request #6416 from hexagonrecursion/unicode

Fix compilation warnings: ‘PyUnicode_AsUnicode’ is deprecated
This commit is contained in:
TW 2022-03-07 19:36:22 +01:00 committed by GitHub
commit a82673e708
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -6,8 +6,17 @@ from functools import lru_cache
from libc.errno cimport errno as c_errno
from cpython.mem cimport PyMem_Free
from libc.stddef cimport wchar_t
cdef extern from "wchar.h":
cdef int wcswidth(const Py_UNICODE *str, size_t n)
# https://www.man7.org/linux/man-pages/man3/wcswidth.3.html
cdef int wcswidth(const wchar_t *s, size_t n)
cdef extern from "Python.h":
# https://docs.python.org/3/c-api/unicode.html#c.PyUnicode_AsWideCharString
wchar_t* PyUnicode_AsWideCharString(object, Py_ssize_t*) except NULL
def get_errno():
@ -15,12 +24,14 @@ def get_errno():
def swidth(s):
str_len = len(s)
terminal_width = wcswidth(s, str_len)
cdef Py_ssize_t size
cdef wchar_t *as_wchar = PyUnicode_AsWideCharString(s, &size)
terminal_width = wcswidth(as_wchar, <size_t>size)
PyMem_Free(as_wchar)
if terminal_width >= 0:
return terminal_width
else:
return str_len
return len(s)
def process_alive(host, pid, thread):