]> granicus.if.org Git - python/commitdiff
Correct implementation and documentation of os.confstr. Add a simple test
authorSkip Montanaro <skip@pobox.com>
Thu, 20 Apr 2006 01:29:48 +0000 (01:29 +0000)
committerSkip Montanaro <skip@pobox.com>
Thu, 20 Apr 2006 01:29:48 +0000 (01:29 +0000)
case.  I've yet to figure out how to provoke a None return I can test.

Doc/lib/libos.tex
Lib/test/test_posix.py
Modules/posixmodule.c

index ebe30210e39cbd7f8d29dc039882a957202f381c..9ded3ae0ca5f8bb56a3da487e71e66f0a11d9ae5 100644 (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
index 1ccc62bdf27dcbccbf2428cade8b8fe70880faa8..f98c723193ea2e355197d0af1493174145a1164b 100644 (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)
index d91d8b5eec741ce0eaeaa4bed2025670a1b81c5b..4c462a039c30a2af9a6d933e4feecdf64d67cb9e 100644 (file)
@@ -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);
             }