omap_lcdc: omap_ppm_save(): add error handling
Signed-off-by: Luiz Capitulino <lcapitulino@redhat.com>
This commit is contained in:
		
							parent
							
								
									8dc4cc7bb5
								
							
						
					
					
						commit
						d9c7ebb100
					
				| @ -224,18 +224,24 @@ static void omap_update_display(void *opaque) | ||||
|     omap_lcd->invalidate = 0; | ||||
| } | ||||
| 
 | ||||
| static int omap_ppm_save(const char *filename, uint8_t *data, | ||||
|                     int w, int h, int linesize) | ||||
| static void omap_ppm_save(const char *filename, uint8_t *data, | ||||
|                     int w, int h, int linesize, Error **errp) | ||||
| { | ||||
|     FILE *f; | ||||
|     uint8_t *d, *d1; | ||||
|     unsigned int v; | ||||
|     int y, x, bpp; | ||||
|     int ret, y, x, bpp; | ||||
| 
 | ||||
|     f = fopen(filename, "wb"); | ||||
|     if (!f) | ||||
|         return -1; | ||||
|     fprintf(f, "P6\n%d %d\n%d\n", w, h, 255); | ||||
|     if (!f) { | ||||
|         error_setg(errp, "failed to open file '%s': %s", filename, | ||||
|                    strerror(errno)); | ||||
|         return; | ||||
|     } | ||||
|     ret = fprintf(f, "P6\n%d %d\n%d\n", w, h, 255); | ||||
|     if (ret < 0) { | ||||
|         goto write_err; | ||||
|     } | ||||
|     d1 = data; | ||||
|     bpp = linesize / w; | ||||
|     for (y = 0; y < h; y ++) { | ||||
| @ -244,24 +250,49 @@ static int omap_ppm_save(const char *filename, uint8_t *data, | ||||
|             v = *(uint32_t *) d; | ||||
|             switch (bpp) { | ||||
|             case 2: | ||||
|                 fputc((v >> 8) & 0xf8, f); | ||||
|                 fputc((v >> 3) & 0xfc, f); | ||||
|                 fputc((v << 3) & 0xf8, f); | ||||
|                 ret = fputc((v >> 8) & 0xf8, f); | ||||
|                 if (ret == EOF) { | ||||
|                     goto write_err; | ||||
|                 } | ||||
|                 ret = fputc((v >> 3) & 0xfc, f); | ||||
|                 if (ret == EOF) { | ||||
|                     goto write_err; | ||||
|                 } | ||||
|                 ret = fputc((v << 3) & 0xf8, f); | ||||
|                 if (ret == EOF) { | ||||
|                     goto write_err; | ||||
|                 } | ||||
|                 break; | ||||
|             case 3: | ||||
|             case 4: | ||||
|             default: | ||||
|                 fputc((v >> 16) & 0xff, f); | ||||
|                 fputc((v >> 8) & 0xff, f); | ||||
|                 fputc((v) & 0xff, f); | ||||
|                 ret = fputc((v >> 16) & 0xff, f); | ||||
|                 if (ret == EOF) { | ||||
|                     goto write_err; | ||||
|                 } | ||||
|                 ret = fputc((v >> 8) & 0xff, f); | ||||
|                 if (ret == EOF) { | ||||
|                     goto write_err; | ||||
|                 } | ||||
|                 ret = fputc((v) & 0xff, f); | ||||
|                 if (ret == EOF) { | ||||
|                     goto write_err; | ||||
|                 } | ||||
|                 break; | ||||
|             } | ||||
|             d += bpp; | ||||
|         } | ||||
|         d1 += linesize; | ||||
|     } | ||||
| out: | ||||
|     fclose(f); | ||||
|     return 0; | ||||
|     return; | ||||
| 
 | ||||
| write_err: | ||||
|     error_setg(errp, "failed to write to file '%s': %s", filename, | ||||
|                strerror(errno)); | ||||
|     unlink(filename); | ||||
|     goto out; | ||||
| } | ||||
| 
 | ||||
| static void omap_screen_dump(void *opaque, const char *filename, bool cswitch, | ||||
| @ -273,7 +304,7 @@ static void omap_screen_dump(void *opaque, const char *filename, bool cswitch, | ||||
|     if (omap_lcd && ds_get_data(omap_lcd->state)) | ||||
|         omap_ppm_save(filename, ds_get_data(omap_lcd->state), | ||||
|                     omap_lcd->width, omap_lcd->height, | ||||
|                     ds_get_linesize(omap_lcd->state)); | ||||
|                     ds_get_linesize(omap_lcd->state), errp); | ||||
| } | ||||
| 
 | ||||
| static void omap_invalidate_display(void *opaque) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Luiz Capitulino
						Luiz Capitulino