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.
This commit is contained in:
parent
d0b8e83dc5
commit
94785ef142
|
@ -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) {
|
||||
if (len == 0) {
|
||||
if (errno) {
|
||||
posix_error();
|
||||
}
|
||||
else if (len == 0) {
|
||||
result = PyString_FromString("");
|
||||
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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue