View | Details | Raw Unified
Collapse All | Expand All

(-) /tmp/html2png.c (-15 / +10 lines)
 Lines 186-198    Link Here 
}
}
#ifdef CONFIG_PNG_OUTPUT
#ifdef CONFIG_PNG_OUTPUT
extern void png_write_init();
int png_save(QEditScreen *s, const char *filename)
int png_save(QEditScreen *s, const char *filename)
{
{
    CFBContext *cfb = s->private;
    CFBContext *cfb = s->private;
    png_struct * volatile png_ptr = NULL;
    png_structp png_ptr = NULL;
    png_info * volatile info_ptr = NULL;
    png_infop info_ptr = NULL;
    png_byte *row_ptr, *row_pointers[1], *row = NULL;
    png_byte *row_ptr, *row_pointers[1], *row = NULL;
    int w, h, x, y;
    int w, h, x, y;
    unsigned int r, g, b, v;
    unsigned int r, g, b, v;
 Lines 202-233    Link Here 
    row = malloc(3 * s->width);
    row = malloc(3 * s->width);
    if (!row)
    if (!row)
        goto fail;
        goto fail;
    png_ptr = malloc(sizeof (png_struct));
    png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
    if (!png_ptr)
    if (!png_ptr)
        goto fail;
        goto fail;
    info_ptr = malloc(sizeof (png_info));
    info_ptr = png_create_info_struct (png_ptr);
    if (!info_ptr)
    if (!info_ptr) {
        goto fail;
	png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
         goto fail;
    }
    
    
    f = fopen(filename, "w");
    f = fopen(filename, "w");
    if (!f) 
    if (!f) 
        goto fail;
        goto fail;
    if (setjmp(png_ptr->jmpbuf)) {
    if (setjmp(png_ptr->jmpbuf)) {
        png_write_destroy(png_ptr);
      png_destroy_write_struct(&png_ptr, &info_ptr);
    fail:
    fail:
        /* free pointers before returning.  Make sure you clean up
        /* free pointers before returning.  Make sure you clean up
           anything else you've done. */
           anything else you've done. */
        free(png_ptr);
        free(info_ptr);
        free(row);
        free(row);
        if (f)
        if (f)
            fclose(f);
            fclose(f);
        return -1;
        return -1;
    }
    }
    png_info_init(info_ptr);
    png_write_init(png_ptr);
    png_init_io(png_ptr, f);
    png_init_io(png_ptr, f);
    
    
    data = (unsigned int *)cfb->base;
    data = (unsigned int *)cfb->base;
 Lines 259-268    Link Here 
        data = (void *)((char *)data + cfb->wrap);
        data = (void *)((char *)data + cfb->wrap);
    }
    }
    png_write_end(png_ptr, info_ptr);
    png_write_end(png_ptr, info_ptr);
    png_write_destroy(png_ptr);
    png_destroy_write_struct (&png_ptr, &info_ptr);
    free(png_ptr);
    free(info_ptr);
    free(row);
    free(row);
    fclose(f);
    fclose(f);
    return 0;
    return 0;