summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiampaolo Rodola <g.rodola@gmail.com>2017-05-02 04:54:27 +0200
committerGiampaolo Rodola <g.rodola@gmail.com>2017-05-02 04:54:27 +0200
commit79e30c23053a2eb9ecdea6a78cbd43e4cb2dfe91 (patch)
tree1da1659eb6aaea6fa1cc5bcd595598a81997cae5
parent3681cd7b4a404ad15c5117c78123bd0cdbb462e1 (diff)
downloadpsutil-79e30c23053a2eb9ecdea6a78cbd43e4cb2dfe91.tar.gz
#1040 disk_partitions() / linux: fix unicode
-rw-r--r--psutil/_psutil_linux.c20
1 files changed, 16 insertions, 4 deletions
diff --git a/psutil/_psutil_linux.c b/psutil/_psutil_linux.c
index 9abe44e0..5c090712 100644
--- a/psutil/_psutil_linux.c
+++ b/psutil/_psutil_linux.c
@@ -195,8 +195,10 @@ static PyObject *
psutil_disk_partitions(PyObject *self, PyObject *args) {
FILE *file = NULL;
struct mntent *entry;
- PyObject *py_retlist = PyList_New(0);
+ PyObject *py_dev = NULL;
+ PyObject *py_mountp = NULL;
PyObject *py_tuple = NULL;
+ PyObject *py_retlist = PyList_New(0);
if (py_retlist == NULL)
return NULL;
@@ -215,15 +217,23 @@ psutil_disk_partitions(PyObject *self, PyObject *args) {
PyErr_Format(PyExc_RuntimeError, "getmntent() syscall failed");
goto error;
}
- py_tuple = Py_BuildValue("(ssss)",
- entry->mnt_fsname, // device
- entry->mnt_dir, // mount point
+ py_dev = PyUnicode_DecodeFSDefault(entry->mnt_fsname);
+ if (! py_dev)
+ goto error;
+ py_mountp = PyUnicode_DecodeFSDefault(entry->mnt_dir);
+ if (! py_mountp)
+ goto error;
+ py_tuple = Py_BuildValue("(OOss)",
+ py_dev, // device
+ py_mountp, // mount point
entry->mnt_type, // fs type
entry->mnt_opts); // options
if (! py_tuple)
goto error;
if (PyList_Append(py_retlist, py_tuple))
goto error;
+ Py_DECREF(py_dev);
+ Py_DECREF(py_mountp);
Py_DECREF(py_tuple);
}
endmntent(file);
@@ -232,6 +242,8 @@ psutil_disk_partitions(PyObject *self, PyObject *args) {
error:
if (file != NULL)
endmntent(file);
+ Py_XDECREF(py_dev);
+ Py_XDECREF(py_mountp);
Py_XDECREF(py_tuple);
Py_DECREF(py_retlist);
return NULL;