Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 141292 | Differences between
and this patch

Collapse All | Expand All

(-)/tmp/html2png.c (-15 / +10 lines)
Lines 186-198 Link Here
186
}
186
}
187
187
188
#ifdef CONFIG_PNG_OUTPUT
188
#ifdef CONFIG_PNG_OUTPUT
189
extern void png_write_init();
190
189
191
int png_save(QEditScreen *s, const char *filename)
190
int png_save(QEditScreen *s, const char *filename)
192
{
191
{
193
    CFBContext *cfb = s->private;
192
    CFBContext *cfb = s->private;
194
    png_struct * volatile png_ptr = NULL;
193
    png_structp png_ptr = NULL;
195
    png_info * volatile info_ptr = NULL;
194
    png_infop info_ptr = NULL;
196
    png_byte *row_ptr, *row_pointers[1], *row = NULL;
195
    png_byte *row_ptr, *row_pointers[1], *row = NULL;
197
    int w, h, x, y;
196
    int w, h, x, y;
198
    unsigned int r, g, b, v;
197
    unsigned int r, g, b, v;
Lines 202-233 Link Here
202
    row = malloc(3 * s->width);
201
    row = malloc(3 * s->width);
203
    if (!row)
202
    if (!row)
204
        goto fail;
203
        goto fail;
205
    png_ptr = malloc(sizeof (png_struct));
204
    png_ptr = png_create_write_struct (PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
206
    if (!png_ptr)
205
    if (!png_ptr)
207
        goto fail;
206
        goto fail;
208
    info_ptr = malloc(sizeof (png_info));
207
    info_ptr = png_create_info_struct (png_ptr);
209
    if (!info_ptr)
208
    if (!info_ptr) {
210
        goto fail;
209
	png_destroy_write_struct(&png_ptr, (png_infopp)NULL);
210
         goto fail;
211
    }
211
    
212
    
212
    f = fopen(filename, "w");
213
    f = fopen(filename, "w");
213
    if (!f) 
214
    if (!f) 
214
        goto fail;
215
        goto fail;
215
216
216
    if (setjmp(png_ptr->jmpbuf)) {
217
    if (setjmp(png_ptr->jmpbuf)) {
217
        png_write_destroy(png_ptr);
218
      png_destroy_write_struct(&png_ptr, &info_ptr);
218
    fail:
219
    fail:
219
        /* free pointers before returning.  Make sure you clean up
220
        /* free pointers before returning.  Make sure you clean up
220
           anything else you've done. */
221
           anything else you've done. */
221
        free(png_ptr);
222
        free(info_ptr);
223
        free(row);
222
        free(row);
224
        if (f)
223
        if (f)
225
            fclose(f);
224
            fclose(f);
226
        return -1;
225
        return -1;
227
    }
226
    }
228
227
229
    png_info_init(info_ptr);
230
    png_write_init(png_ptr);
231
    png_init_io(png_ptr, f);
228
    png_init_io(png_ptr, f);
232
    
229
    
233
    data = (unsigned int *)cfb->base;
230
    data = (unsigned int *)cfb->base;
Lines 259-268 Link Here
259
        data = (void *)((char *)data + cfb->wrap);
256
        data = (void *)((char *)data + cfb->wrap);
260
    }
257
    }
261
    png_write_end(png_ptr, info_ptr);
258
    png_write_end(png_ptr, info_ptr);
262
    png_write_destroy(png_ptr);
259
    png_destroy_write_struct (&png_ptr, &info_ptr);
263
260
264
    free(png_ptr);
265
    free(info_ptr);
266
    free(row);
261
    free(row);
267
    fclose(f);
262
    fclose(f);
268
    return 0;
263
    return 0;

Return to bug 141292