On Mon, Dec 3, 2012 at 11:50 PM, Chris Barker - NOAA Federal
<chris.bar...@noaa.gov> wrote:
> On Mon, Dec 3, 2012 at 2:21 PM, Nathaniel Smith <n...@pobox.com> wrote:
>> For the file handle, I would just write
>>
>>   cdef FILE *fp = fdopen(file_obj.fileno(), "w")
>>
>> and be done with it. This will work with any version of Python etc.
>
> yeah, that makes sense -- though what if you want to be able to
> read_to/write_from a file that is already open, and in the middle of
> the file somewhere -- would that work?
>
> I just posted a question to the Cython list, and indeed, it looks like
> there is no easy answer to the file issue.

Yeah, this is a general problem with the Python file API, trying to
hook it up to stdio is not at all an easy thing. A better version of
this code would skip that altogether like:

cdef void write_to_pyfile(png_structp s, png_bytep data, png_size_t count):
    fobj = <object>png_get_io_ptr(s)
    pydata = PyString_FromStringAndSize(data, count)
    fobj.write(pydata)

cdef void flush_pyfile(png_structp s):
    # Not sure if this is even needed
    fobj = <object>png_get_io_ptr(s)
    fobj.flush()

# in write_png:
write_png_c(<png_byte*>pix_buffer, width, height,
  NULL, <void*>file_obj, write_to_pyfile, flush_pyfile, dpi)

But this is a separate issue :-) (and needs further fiddling to make
exception handling work).

Or if you're only going to work on real OS-level file objects anyway,
you might as well just accept a filename as a string and fopen() it
locally. Having Python do the fopen just makes your life harder for no
reason.

-n

------------------------------------------------------------------------------
LogMeIn Rescue: Anywhere, Anytime Remote support for IT. Free Trial
Remotely access PCs and mobile devices and provide instant support
Improve your efficiency, and focus on delivering more value-add services
Discover what IT Professionals Know. Rescue delivers
http://p.sf.net/sfu/logmein_12329d2d
_______________________________________________
Matplotlib-devel mailing list
Matplotlib-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel

Reply via email to