[Python-checkins] r45573 - in python/trunk: Doc/lib/libos.tex Lib/test/test_posix.py Modules/posixmodule.c

"Martin v. Löwis" martin at v.loewis.de
Thu Apr 20 08:11:37 CEST 2006


skip.montanaro wrote:
> 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.

I couldn't find an "unconfigured" value on Linux, either. I could find
some values which return an empty string (e.g. 1006, _CS_LFS64_LIBS),
so I still think it is good to tell these cases apart.

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

Somebody please correct me, but this still doesn't look right. As "len"
includes the terminating null byte as returned from confstr, and as
PyString_FromStringAndSize requires the number of characters *in*
the string (i.e. excluding the terminating null byte), I think this
should be

 		if ((unsigned int)len >= sizeof(buffer)) {
                  result = PyString_FromStringAndSize(NULL, len-1);
                  if (result != NULL)
                      confstr(name, PyString_AS_STRING(result), len);
              }

Also, for symmetry, I would like the second case to read

             result = PyString_FromStringAndSize(buffer, len-1);

What do you think?

Regards,
Martin


More information about the Python-checkins mailing list