[Python-Dev] unicode/string asymmetries

M.-A. Lemburg mal@lemburg.com
Thu, 10 Jan 2002 00:14:25 +0100


"Martin v. Loewis" wrote:
> 
> > How about this: we add a wchar_t codec to Python and the "eu#" parser
> > marker. Then you could write:
> >
> >       wchar_t value = NULL;
> >       int len = 0;
> >       if (PyArg_ParseTuple(tuple, "eu#", "wchar_t", &value, &len) < 0)
> >                 return NULL;
> 
> Wouldn't that code be incorrect if there are further format argument
> whose conversion could fail also?

Yes; you'd currently have to write:

      wchar_t value = NULL;
      int len = 0;
      if (PyArg_ParseTuple(tuple, "eu#", "wchar_t", &value, &len) < 0)
          goto onError;

      ...

   onError:
      if (value)
          PyMem_Free(value);
      return NULL;

> I think format specifiers that require explicit memory management are
> so difficult to use that they must be avoided. I'd be in favour of
> extending the argtuple type to include additional slots for objects
> that go away when the tuple goes away.

I don't understand that last comment.

Anyway, you've got a point there: allocated buffers should be
freed in case the PyArg_ParserTuple() API fails (and then
reset the *buffer pointer to NULL).

-- 
Marc-Andre Lemburg
CEO eGenix.com Software GmbH
______________________________________________________________________
Company & Consulting:                           http://www.egenix.com/
Python Software:                   http://www.egenix.com/files/python/