Handle the case where the camera has a corrupt file which is not a jpeg

image.
merge-requests/1/head
Peter Fales 2003-10-02 04:03:40 +00:00
rodzic 0e8b1e7670
commit dd4cdbdd9b
2 zmienionych plików z 17 dodań i 7 usunięć

Wyświetl plik

@ -327,7 +327,7 @@ static SANE_Char cmdbuf[256];
/* Structures used by gphoto2 API */
static CameraAbilities abilities;
static CameraFile *data_file;
static const char *data_ptr;
static const unsigned char *data_ptr;
static unsigned long data_file_total_size, data_file_current_index;
static SANE_Int hack_fd;
@ -1436,9 +1436,10 @@ sane_start (SANE_Handle handle)
}
CHECK_RET (gp_file_get_data_and_size
(data_file, &data_ptr, &data_file_total_size));
(data_file, (const char **)&data_ptr, &data_file_total_size));
converter_init ();
if ( converter_init (handle) != SANE_STATUS_GOOD )
return SANE_STATUS_INVAL;
/* Check if a linebuffer has been allocated. If we had one
* previously, free it up and allocate one for (possibly) new
@ -1561,7 +1562,7 @@ sane_set_io_mode (SANE_Handle UNUSEDARG handle, SANE_Bool
* sane_get_select_fd() - From SANE API
*/
SANE_Status
sane_get_select_fd (SANE_Handle UNUSEDARG handle, SANE_Int * UNUSEDARG fd)
sane_get_select_fd (SANE_Handle UNUSEDARG handle, SANE_Int UNUSEDARG * fd)
{
return SANE_STATUS_UNSUPPORTED;
}
@ -1931,8 +1932,8 @@ converter_scan_complete (void)
* Currently assumes jpeg, but this is where we would put the
* switch to handle other image types.
*/
static void
converter_init (void)
static SANE_Status
converter_init (SANE_Handle handle)
{
SANE_Int row_stride;
struct jpeg_error_mgr jerr;
@ -1940,6 +1941,13 @@ converter_init (void)
data_file_current_index = 0;
/* Basic check to see if this is really a jpeg file */
if ( data_ptr[0] != 0xff || data_ptr[1] != 0xd8 ) {
sane_cancel(handle);
exit(1);
return SANE_STATUS_INVAL;
}
cinfo.err = jpeg_std_error (&jerr);
jpeg_create_decompress (&cinfo);
@ -1974,4 +1982,6 @@ converter_init (void)
linebuffer_size = 0;
linebuffer_index = 0;
return(SANE_STATUS_GOOD);
}

Wyświetl plik

@ -197,4 +197,4 @@ static SANE_Int converter_fill_buffer (void);
static SANE_Bool converter_scan_complete (void);
static void converter_init (void);
static static SANE_Status converter_init (SANE_Handle handle);