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
|
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
|
specified in a number of standards (\POSIX, \UNIX{} 95, \UNIX{} 98, and
|
||||||
others). Some platforms define additional names as well. The names
|
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
|
\code{confstr_names} dictionary. For configuration variables not
|
||||||
included in that mapping, passing an integer for \var{name} is also
|
included in that mapping, passing an integer for \var{name} is also
|
||||||
accepted.
|
accepted.
|
||||||
Availability: Macintosh, \UNIX.
|
Availability: Macintosh, \UNIX.
|
||||||
|
|
||||||
If the configuration value specified by \var{name} isn't defined, the
|
If the configuration value specified by \var{name} isn't defined,
|
||||||
empty string is returned.
|
\code{None} is returned.
|
||||||
|
|
||||||
If \var{name} is a string and is not known, \exception{ValueError} is
|
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
|
raised. If a specific value for \var{name} is not supported by the
|
||||||
|
|
|
@ -73,6 +73,11 @@ class PosixTester(unittest.TestCase):
|
||||||
finally:
|
finally:
|
||||||
fp.close()
|
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):
|
def test_dup2(self):
|
||||||
if hasattr(posix, 'dup2'):
|
if hasattr(posix, 'dup2'):
|
||||||
fp1 = open(test_support.TESTFN)
|
fp1 = open(test_support.TESTFN)
|
||||||
|
|
|
@ -6817,15 +6817,18 @@ posix_confstr(PyObject *self, PyObject *args)
|
||||||
errno = 0;
|
errno = 0;
|
||||||
len = confstr(name, buffer, sizeof(buffer));
|
len = confstr(name, buffer, sizeof(buffer));
|
||||||
|
|
||||||
if (len == -1) {
|
if (len == 0) {
|
||||||
posix_error();
|
if (errno) {
|
||||||
}
|
posix_error();
|
||||||
else if (len == 0) {
|
}
|
||||||
result = PyString_FromString("");
|
else {
|
||||||
|
result = Py_None;
|
||||||
|
Py_INCREF(Py_None);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if ((unsigned int)len >= sizeof(buffer)) {
|
if ((unsigned int)len >= sizeof(buffer)) {
|
||||||
result = PyString_FromStringAndSize(NULL, len);
|
result = PyString_FromStringAndSize(NULL, len+1);
|
||||||
if (result != NULL)
|
if (result != NULL)
|
||||||
confstr(name, PyString_AS_STRING(result), len+1);
|
confstr(name, PyString_AS_STRING(result), len+1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue