split jpeg parser functions to separate file
[geeqie.git] / src / jpeg_parser.c
1
2 #include "main.h" 
3 #include "jpeg_parser.h"
4
5 gboolean jpeg_segment_find(guchar *data, guint size,
6                             guchar app_marker, const gchar *magic, guint magic_len,
7                             guint *seg_offset, guint *seg_length)
8 {
9         guchar marker = 0;
10         guint offset = 0;
11         guint length = 0;
12
13         while (marker != app_marker &&
14                marker != JPEG_MARKER_EOI)
15                 {
16                 offset += length;
17                 length = 2;
18
19                 if (offset + 2 >= size ||
20                     data[offset] != JPEG_MARKER) return FALSE;
21
22                 marker = data[offset + 1];
23                 if (marker != JPEG_MARKER_SOI &&
24                     marker != JPEG_MARKER_EOI)
25                         {
26                         if (offset + 4 >= size) return FALSE;
27                         length += ((guint)data[offset + 2] << 8) + data[offset + 3];
28                         }
29                 }
30
31         if (marker == app_marker &&
32             offset + length < size &&
33             length >= 4 + magic_len &&
34             memcmp(data + offset + 4, magic, magic_len) == 0)
35                 {
36                 *seg_offset = offset + 4;
37                 *seg_length = length - 4;
38                 return TRUE;
39                 }
40
41         return FALSE;
42 }