Commit 71a87287 authored by Skip Montanaro's avatar Skip Montanaro

Correct implementation and documentation of os.confstr. Add a simple test

case.  I've yet to figure out how to provoke a None return I can test.
parent 8279ab5a
......@@ -1844,14 +1844,14 @@ Return string-valued system configuration values.
string which is the name of a defined system value; these names are
specified in a number of standards (\POSIX, \UNIX{} 95, \UNIX{} 98, and
others). Some platforms define additional names as well. The names
known to the host operating system are given in the
known to the host operating system are given as the keys of the
\code{confstr_names} dictionary. For configuration variables not
included in that mapping, passing an integer for \var{name} is also
accepted.
Availability: Macintosh, \UNIX.
If the configuration value specified by \var{name} isn't defined, the
empty string is returned.
If the configuration value specified by \var{name} isn't defined,
\code{None} is returned.
If \var{name} is a string and is not known, \exception{ValueError} is
raised. If a specific value for \var{name} is not supported by the
......
......@@ -73,6 +73,11 @@ class PosixTester(unittest.TestCase):
finally:
fp.close()
def test_confstr(self):
if hasattr(posix, 'confstr'):
self.assertRaises(ValueError, posix.confstr, "CS_garbage")
self.assertEqual(len(posix.confstr("CS_PATH")) > 0, True)
def test_dup2(self):
if hasattr(posix, 'dup2'):
fp1 = open(test_support.TESTFN)
......
......@@ -6817,15 +6817,18 @@ posix_confstr(PyObject *self, PyObject *args)
errno = 0;
len = confstr(name, buffer, sizeof(buffer));
if (len == -1) {
posix_error();
}
else if (len == 0) {
result = PyString_FromString("");
if (len == 0) {
if (errno) {
posix_error();
}
else {
result = Py_None;
Py_INCREF(Py_None);
}
}
else {
if ((unsigned int)len >= sizeof(buffer)) {
result = PyString_FromStringAndSize(NULL, len);
result = PyString_FromStringAndSize(NULL, len+1);
if (result != NULL)
confstr(name, PyString_AS_STRING(result), len+1);
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment