Jack Jansen wrote: > > > "es#",&encoding,&buffer,&buffer_len > > -- could mean: coerce the object to Unicode, then > > encode it using the given encoding and then > > copy at most buffer_len bytes of data into > > buffer and update buffer_len to the number of bytes > > copied > > This is a possible solution, but I think I would really prefer to also have > "eS", &encoding, &buffer_ptr > -- coerce the object to Unicode, then encode it using the given > encoding, malloc() a buffer to put the result in and return that. > > I don't mind doing something like > > { > char *filenamebuffer = NULL; > > if ( PyArg_ParseTuple(args, "eS", &macencoding, &filenamebuffer) > ... > open(filenamebuffer, ....); > PyMem_XDEL(filenamebuffer); > ... > } > > I think this would be much less error-prone than having fixed-length buffers > all over the place. PyArg_ParseTuple() should probably raise an error in case the data doesn't fit into the buffer. > And if this is indeed going to be used mainly in open() > calls and such the cost of the extra malloc()/free() is going to be dwarfed by > what the underlying OS call is going to use. Good point. You'll still need the buffer_len output parameter though -- otherwise you wouldn't be able tell the size of the allocated buffer (the returned data may not be terminated). How about this: "es#", &encoding, &buffer, &buffer_len -- both buffer and buffer_len are in/out parameters -- if **buffer is non-NULL, copy the data into it (at most buffer_len bytes) and update buffer_len on output; truncation produces an error -- if **buffer is NULL, malloc() a buffer of size buffer_len and return it through *buffer; if buffer_len is -1, the allocated buffer should be large enough to hold all data; again, truncation is an error -- apply coercion and encoding as described above (could be that I've got the '*'s wrong, but you get the picture...:) -- Marc-Andre Lemburg ______________________________________________________________________ Business: http://www.lemburg.com/ Python Pages: http://www.lemburg.com/python/
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4