< prev index next >

src/java.desktop/share/native/libjavajpeg/jpegdecoder.c

Print this page




 341         return;
 342     }
 343     if (src->remaining_skip) {
 344         src->pub.skip_input_data(cinfo, 0);
 345     }
 346     /* Save the data currently in the buffer */
 347     offset = src->pub.bytes_in_buffer;
 348     if (src->pub.next_input_byte > src->inbuf) {
 349         memmove(src->inbuf, src->pub.next_input_byte, offset);
 350     }
 351     RELEASE_ARRAYS(env, src);
 352     buflen = (*env)->GetArrayLength(env, src->hInputBuffer) - offset;
 353     if (buflen <= 0) {
 354         if (!GET_ARRAYS(env, src)) {
 355             cinfo->err->error_exit((struct jpeg_common_struct *) cinfo);
 356         }
 357         return;
 358     }
 359     ret = (*env)->CallIntMethod(env, src->hInputStream, InputStream_readID,
 360                                 src->hInputBuffer, offset, buflen);
 361     if ((ret > 0) && ((unsigned int)ret > buflen)) ret = buflen;
 362     if ((*env)->ExceptionOccurred(env) || !GET_ARRAYS(env, src)) {
 363         cinfo->err->error_exit((struct jpeg_common_struct *) cinfo);
 364     }
 365     if (ret <= 0) {
 366         /* Silently accept truncated JPEG files */
 367         WARNMS(cinfo, JWRN_JPEG_EOF);
 368         src->inbuf[offset] = (JOCTET) 0xFF;
 369         src->inbuf[offset + 1] = (JOCTET) JPEG_EOI;
 370         ret = 2;
 371     }
 372 
 373     src->pub.next_input_byte = src->inbuf;
 374     src->pub.bytes_in_buffer = ret + offset;
 375 
 376     return;
 377 }
 378 
 379 /*
 380  * Skip num_bytes worth of data.  The buffer pointer and count should
 381  * be advanced over num_bytes input bytes, refilling the buffer as




 341         return;
 342     }
 343     if (src->remaining_skip) {
 344         src->pub.skip_input_data(cinfo, 0);
 345     }
 346     /* Save the data currently in the buffer */
 347     offset = src->pub.bytes_in_buffer;
 348     if (src->pub.next_input_byte > src->inbuf) {
 349         memmove(src->inbuf, src->pub.next_input_byte, offset);
 350     }
 351     RELEASE_ARRAYS(env, src);
 352     buflen = (*env)->GetArrayLength(env, src->hInputBuffer) - offset;
 353     if (buflen <= 0) {
 354         if (!GET_ARRAYS(env, src)) {
 355             cinfo->err->error_exit((struct jpeg_common_struct *) cinfo);
 356         }
 357         return;
 358     }
 359     ret = (*env)->CallIntMethod(env, src->hInputStream, InputStream_readID,
 360                                 src->hInputBuffer, offset, buflen);
 361     if ((ret > 0) && ((unsigned int)ret > buflen)) ret = (int)buflen;
 362     if ((*env)->ExceptionOccurred(env) || !GET_ARRAYS(env, src)) {
 363         cinfo->err->error_exit((struct jpeg_common_struct *) cinfo);
 364     }
 365     if (ret <= 0) {
 366         /* Silently accept truncated JPEG files */
 367         WARNMS(cinfo, JWRN_JPEG_EOF);
 368         src->inbuf[offset] = (JOCTET) 0xFF;
 369         src->inbuf[offset + 1] = (JOCTET) JPEG_EOI;
 370         ret = 2;
 371     }
 372 
 373     src->pub.next_input_byte = src->inbuf;
 374     src->pub.bytes_in_buffer = ret + offset;
 375 
 376     return;
 377 }
 378 
 379 /*
 380  * Skip num_bytes worth of data.  The buffer pointer and count should
 381  * be advanced over num_bytes input bytes, refilling the buffer as


< prev index next >