mirror of
https://gitlab.freedesktop.org/cairo/cairo.git
synced 2025-12-25 02:30:11 +01:00
boilerplate: Provide close callback after opening any2ppm output
cairo_boilerplate_open_any2ppm() returns a FILE* obtined from popen() or fdopen(). It should hence be closed using pclose() or fclose() respectively. Fixes the crash on every script test on MacOS X.
This commit is contained in:
parent
90b2fd34fb
commit
0e18cc6d27
2 changed files with 11 additions and 4 deletions
|
|
@ -789,7 +789,8 @@ any2ppm_daemon_exists (void)
|
|||
FILE *
|
||||
cairo_boilerplate_open_any2ppm (const char *filename,
|
||||
int page,
|
||||
unsigned int flags)
|
||||
unsigned int flags,
|
||||
int (**close_cb) (FILE *))
|
||||
{
|
||||
char command[4096];
|
||||
#if HAS_DAEMON
|
||||
|
|
@ -824,10 +825,13 @@ cairo_boilerplate_open_any2ppm (const char *filename,
|
|||
goto POPEN;
|
||||
}
|
||||
|
||||
*close_cb = fclose;
|
||||
return fdopen (sk, "r");
|
||||
|
||||
POPEN:
|
||||
#endif
|
||||
|
||||
*close_cb = pclose;
|
||||
sprintf (command, "./any2ppm %s %d", filename, page);
|
||||
return popen (command, "r");
|
||||
}
|
||||
|
|
@ -921,10 +925,11 @@ cairo_boilerplate_convert_to_image (const char *filename,
|
|||
FILE *file;
|
||||
unsigned int flags = 0;
|
||||
cairo_surface_t *image;
|
||||
int (*close_cb) (FILE *);
|
||||
int ret;
|
||||
|
||||
RETRY:
|
||||
file = cairo_boilerplate_open_any2ppm (filename, page, flags);
|
||||
file = cairo_boilerplate_open_any2ppm (filename, page, flags, &close_cb);
|
||||
if (file == NULL) {
|
||||
switch (errno) {
|
||||
case ENOMEM:
|
||||
|
|
@ -935,7 +940,7 @@ cairo_boilerplate_convert_to_image (const char *filename,
|
|||
}
|
||||
|
||||
image = cairo_boilerplate_image_surface_create_from_ppm_stream (file);
|
||||
ret = pclose (file);
|
||||
ret = close_cb (file);
|
||||
/* check for fatal errors from the interpreter */
|
||||
if (ret) { /* any2pmm should never die... */
|
||||
cairo_surface_destroy (image);
|
||||
|
|
|
|||
|
|
@ -218,7 +218,9 @@ enum {
|
|||
FILE *
|
||||
cairo_boilerplate_open_any2ppm (const char *filename,
|
||||
int page,
|
||||
unsigned int flags);
|
||||
unsigned int flags,
|
||||
int (**close_cb) (FILE *));
|
||||
|
||||
cairo_surface_t *
|
||||
cairo_boilerplate_image_surface_create_from_ppm_stream (FILE *file);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue