Merge pull request #1518 from dg0yt/static-windows
[openjpeg.git] / tests / pdf2jp2.c
index 830cbf4ee38b4a45a27502efd7a3192ef486353d..f36ea4f980b2f57e4f58d9e41a167022aeeaa4e7 100644 (file)
  * only work on linux since I need memmem function
  */
 
+/*
+ * Add support for other signatures:
+ * 
+ * obj<</Subtype/Image/Length 110494/Filter/JPXDecode/BitsPerComponent 8/ColorSpace/DeviceRGB/Width 712/Height 1052>>stream
+ */
 #define _GNU_SOURCE
 #include <string.h>
 #include <stdio.h>
@@ -47,7 +52,7 @@ int main(int argc, char *argv[])
 {
 #define NUMJP2 32
   int i, c = 0;
-  long offets[NUMJP2];
+  long offsets[NUMJP2];
   char buffer[512];
 #define BUFLEN 4096
   int cont = 1;
@@ -80,7 +85,7 @@ int main(int argc, char *argv[])
       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;
+      offsets[c++] = (ptrdiff_t)cpos - (ptrdiff_t)hlen + diff;
       }
     cont = (nread == flen);
     memcpy( haystack, haystack + nread, nlen );
@@ -92,13 +97,23 @@ int main(int argc, char *argv[])
     {
     int s, len = 0;
     char *r;
-    const int ret = fseek(f, offets[i], SEEK_SET);
+    const int ret = fseek(f, offsets[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);
-    assert( s == 1 );
+    if( s == 0 )
+      { // try again harder
+      const int ret = fseek(f, offsets[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;