posix_getlogin(): Handle the possibility that getlogin() can return
NULL without setting errno; observed on Linux
Mandrake 7.2 by an anonymous user.
This closes bug #124758.
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index a2251b1..2ddcebc 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -1904,12 +1904,21 @@
PyObject *result = NULL;
if (PyArg_ParseTuple(args, ":getlogin")) {
- char *name = getlogin();
+ char *name;
+ int old_errno = errno;
- if (name == NULL)
- posix_error();
+ errno = 0;
+ name = getlogin();
+ if (name == NULL) {
+ if (errno)
+ posix_error();
+ else
+ PyErr_SetString(PyExc_OSError,
+ "unexpected NULL from getlogin()");
+ }
else
result = PyString_FromString(name);
+ errno = old_errno;
}
return result;
}