summaryrefslogtreecommitdiff
path: root/tests/pdf2jp2.c
diff options
context:
space:
mode:
Diffstat (limited to 'tests/pdf2jp2.c')
-rw-r--r--tests/pdf2jp2.c147
1 files changed, 71 insertions, 76 deletions
diff --git a/tests/pdf2jp2.c b/tests/pdf2jp2.c
index 38aa739f..3fa3d9d4 100644
--- a/tests/pdf2jp2.c
+++ b/tests/pdf2jp2.c
@@ -39,7 +39,7 @@
/*
* Add support for other signatures:
- *
+ *
* obj<</Subtype/Image/Length 110494/Filter/JPXDecode/BitsPerComponent 8/ColorSpace/DeviceRGB/Width 712/Height 1052>>stream
*/
#define _GNU_SOURCE
@@ -51,92 +51,87 @@
int main(int argc, char *argv[])
{
#define NUMJP2 32
- int i, c = 0;
- long offets[NUMJP2];
- char buffer[512];
+ int i, c = 0;
+ long offets[NUMJP2];
+ char buffer[512];
#define BUFLEN 4096
- int cont = 1;
- FILE *f;
- size_t nread;
- char haystack[BUFLEN];
- const char needle[] = "JPXDecode";
+ int cont = 1;
+ FILE *f;
+ size_t nread;
+ char haystack[BUFLEN];
+ const char needle[] = "JPXDecode";
- const size_t nlen = strlen( needle );
- const size_t flen = BUFLEN - nlen;
- char *fpos = haystack + nlen;
- const char *filename;
- if( argc < 2 ) return 1;
+ const size_t nlen = strlen( needle );
+ const size_t flen = BUFLEN - nlen;
+ char *fpos = haystack + nlen;
+ const char *filename;
+ if( argc < 2 ) return 1;
- filename = argv[1];
+ filename = argv[1];
- memset( haystack, 0, nlen );
+ memset( haystack, 0, nlen );
- f = fopen( filename, "rb" );
- while( cont )
- {
- const char *ret;
- size_t hlen;
- nread = fread(fpos, 1, flen, f);
- hlen = nlen + nread;
- ret = memmem( haystack, hlen, needle, nlen);
- if( ret )
- {
- const long cpos = ftell(f);
- const ptrdiff_t diff = ret - haystack;
- assert( diff >= 0 );
- /*fprintf( stdout, "Found it: %lx\n", (ptrdiff_t)cpos - (ptrdiff_t)hlen + diff);*/
- offets[c++] = (ptrdiff_t)cpos - (ptrdiff_t)hlen + diff;
- }
- cont = (nread == flen);
- memcpy( haystack, haystack + nread, nlen );
+ f = fopen( filename, "rb" );
+ while( cont ) {
+ const char *ret;
+ size_t hlen;
+ nread = fread(fpos, 1, flen, f);
+ hlen = nlen + nread;
+ ret = memmem( haystack, hlen, needle, nlen);
+ if( ret ) {
+ const long cpos = ftell(f);
+ const ptrdiff_t diff = ret - haystack;
+ assert( diff >= 0 );
+ /*fprintf( stdout, "Found it: %lx\n", (ptrdiff_t)cpos - (ptrdiff_t)hlen + diff);*/
+ offets[c++] = (ptrdiff_t)cpos - (ptrdiff_t)hlen + diff;
+ }
+ cont = (nread == flen);
+ memcpy( haystack, haystack + nread, nlen );
}
- assert( feof( f ) );
+ assert( feof( f ) );
- for( i = 0; i < c; ++i )
- {
- int s, len = 0;
- char *r;
- const int ret = fseek(f, offets[i], SEEK_SET);
- assert( ret == 0 );
- r = fgets(buffer, sizeof(buffer), f);
- assert( r );
- /*fprintf( stderr, "DEBUG: %s", r );*/
- s = sscanf(r, "JPXDecode]/Length %d/Width %*d/BitsPerComponent %*d/Height %*d", &len);
- if( s == 0 )
- { // try again harder
- const int ret = fseek(f, offets[i] - 40, SEEK_SET); // 40 is magic number
- assert( ret == 0 );
- r = fgets(buffer, sizeof(buffer), f);
- assert( r );
- const char needle2[] = "/Length";
- char * s2 = strstr(buffer, needle2);
- s = sscanf(s2, "/Length %d/", &len);
- }
- if( s == 1 )
- {
- FILE *jp2;
- int j;
- char jp2fn[512];
- sprintf( jp2fn, "%s.%d.jp2", filename, i );
- jp2 = fopen( jp2fn, "wb" );
- for( j = 0; j < len; ++j )
- {
- int v = fgetc(f);
- int ret2 = fputc(v, jp2);
- assert( ret2 != EOF );
+ for( i = 0; i < c; ++i ) {
+ int s, len = 0;
+ char *r;
+ const int ret = fseek(f, offets[i], SEEK_SET);
+ assert( ret == 0 );
+ r = fgets(buffer, sizeof(buffer), f);
+ assert( r );
+ /*fprintf( stderr, "DEBUG: %s", r );*/
+ s = sscanf(r, "JPXDecode]/Length %d/Width %*d/BitsPerComponent %*d/Height %*d", &len);
+ if( s == 0 ) {
+ // try again harder
+ const int ret = fseek(f, offets[i] - 40, SEEK_SET); // 40 is magic number
+ assert( ret == 0 );
+ r = fgets(buffer, sizeof(buffer), f);
+ assert( r );
+ const char needle2[] = "/Length";
+ char * s2 = strstr(buffer, needle2);
+ s = sscanf(s2, "/Length %d/", &len);
}
- fclose( jp2 );
+ if( s == 1 ) {
+ FILE *jp2;
+ int j;
+ char jp2fn[512];
+ sprintf( jp2fn, "%s.%d.jp2", filename, i );
+ jp2 = fopen( jp2fn, "wb" );
+ for( j = 0; j < len; ++j ) {
+ int v = fgetc(f);
+ int ret2 = fputc(v, jp2);
+ assert( ret2 != EOF );
+ }
+ fclose( jp2 );
#if 0
- /* TODO need to check we reached endstream */
- r = fgets(buffer, sizeof(buffer), f);
- fprintf( stderr, "DEBUG: [%s]", r );
- r = fgets(buffer, sizeof(buffer), f);
- fprintf( stderr, "DEBUG: [%s]", r );
+ /* TODO need to check we reached endstream */
+ r = fgets(buffer, sizeof(buffer), f);
+ fprintf( stderr, "DEBUG: [%s]", r );
+ r = fgets(buffer, sizeof(buffer), f);
+ fprintf( stderr, "DEBUG: [%s]", r );
#endif
- }
+ }
}
- fclose(f);
+ fclose(f);
- return 0;
+ return 0;
}