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

View File

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

View File

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