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:
Skip Montanaro 2006-04-20 01:29:48 +00:00
parent d0b8e83dc5
commit 94785ef142
3 changed files with 17 additions and 9 deletions

View File

@ -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

View File

@ -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)

View File

@ -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);
}