diff options
author | Tor Andersson <tor.andersson@artifex.com> | 2016-04-08 11:59:16 +0200 |
---|---|---|
committer | Tor Andersson <tor.andersson@artifex.com> | 2016-04-08 11:59:16 +0200 |
commit | d3d767d9b91ae7d82c261fbdfd735f3042161032 (patch) | |
tree | 12a8563bedad6757b8fe7c274288e389c2dce28a /jbig2dec/jbig2_segment.c | |
parent | 22506f32c40851e9ec6d0321f7ef82f1c9e12605 (diff) | |
download | ghostpdl-d3d767d9b91ae7d82c261fbdfd735f3042161032.tar.gz |
Reindent jbig2dec source to follow gs coding style.
First a pass through gnu indent:
indent \
-bad -nbap -nsob -br -ce -cli0 \
-npcs -ncs -i4 -di0 -psl -lp -lps -nut -l160 \
*.c *.h
Followed by astyle to patch over some of the indentation bugs in gnu indent:
astyle --style=kr -H -U -k3 *.c *.h
Diffstat (limited to 'jbig2dec/jbig2_segment.c')
-rw-r--r-- | jbig2dec/jbig2_segment.c | 373 |
1 files changed, 171 insertions, 202 deletions
diff --git a/jbig2dec/jbig2_segment.c b/jbig2dec/jbig2_segment.c index 7a1747f88..2e0db67c7 100644 --- a/jbig2dec/jbig2_segment.c +++ b/jbig2dec/jbig2_segment.c @@ -17,13 +17,12 @@ jbig2dec */ - #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "os_types.h" -#include <stddef.h> /* size_t */ +#include <stddef.h> /* size_t */ #include "jbig2.h" #include "jbig2_priv.h" @@ -34,152 +33,132 @@ #include "jbig2_halftone.h" Jbig2Segment * -jbig2_parse_segment_header (Jbig2Ctx *ctx, uint8_t *buf, size_t buf_size, - size_t *p_header_size) +jbig2_parse_segment_header(Jbig2Ctx *ctx, uint8_t *buf, size_t buf_size, size_t *p_header_size) { - Jbig2Segment *result; - uint8_t rtscarf; - uint32_t rtscarf_long; - uint32_t *referred_to_segments; - int referred_to_segment_count; - int referred_to_segment_size; - int pa_size; - int offset; - - /* minimum possible size of a jbig2 segment header */ - if (buf_size < 11) - return NULL; - - result = jbig2_new(ctx, Jbig2Segment, 1); - if (result == NULL) - { - jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, - "failed to allocate segment in jbig2_parse_segment_header"); - return result; - } - - /* 7.2.2 */ - result->number = jbig2_get_uint32(buf); - - /* 7.2.3 */ - result->flags = buf[4]; - - /* 7.2.4 referred-to segments */ - rtscarf = buf[5]; - if ((rtscarf & 0xe0) == 0xe0) - { - rtscarf_long = jbig2_get_uint32(buf + 5); - referred_to_segment_count = rtscarf_long & 0x1fffffff; - offset = 5 + 4 + (referred_to_segment_count + 1) / 8; + Jbig2Segment *result; + uint8_t rtscarf; + uint32_t rtscarf_long; + uint32_t *referred_to_segments; + int referred_to_segment_count; + int referred_to_segment_size; + int pa_size; + int offset; + + /* minimum possible size of a jbig2 segment header */ + if (buf_size < 11) + return NULL; + + result = jbig2_new(ctx, Jbig2Segment, 1); + if (result == NULL) { + jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "failed to allocate segment in jbig2_parse_segment_header"); + return result; } - else - { - referred_to_segment_count = (rtscarf >> 5); - offset = 5 + 1; + + /* 7.2.2 */ + result->number = jbig2_get_uint32(buf); + + /* 7.2.3 */ + result->flags = buf[4]; + + /* 7.2.4 referred-to segments */ + rtscarf = buf[5]; + if ((rtscarf & 0xe0) == 0xe0) { + rtscarf_long = jbig2_get_uint32(buf + 5); + referred_to_segment_count = rtscarf_long & 0x1fffffff; + offset = 5 + 4 + (referred_to_segment_count + 1) / 8; + } else { + referred_to_segment_count = (rtscarf >> 5); + offset = 5 + 1; } - result->referred_to_segment_count = referred_to_segment_count; - - /* we now have enough information to compute the full header length */ - referred_to_segment_size = result->number <= 256 ? 1: - result->number <= 65536 ? 2 : 4; /* 7.2.5 */ - pa_size = result->flags & 0x40 ? 4 : 1; /* 7.2.6 */ - if (offset + referred_to_segment_count*referred_to_segment_size + pa_size + 4 > buf_size) - { - jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, result->number, - "jbig2_parse_segment_header() called with insufficient data", -1); - jbig2_free (ctx->allocator, result); - return NULL; + result->referred_to_segment_count = referred_to_segment_count; + + /* we now have enough information to compute the full header length */ + referred_to_segment_size = result->number <= 256 ? 1 : result->number <= 65536 ? 2 : 4; /* 7.2.5 */ + pa_size = result->flags & 0x40 ? 4 : 1; /* 7.2.6 */ + if (offset + referred_to_segment_count * referred_to_segment_size + pa_size + 4 > buf_size) { + jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, result->number, "jbig2_parse_segment_header() called with insufficient data", -1); + jbig2_free(ctx->allocator, result); + return NULL; } - /* 7.2.5 */ - if (referred_to_segment_count) - { - int i; - - referred_to_segments = jbig2_new(ctx, uint32_t, - referred_to_segment_count * referred_to_segment_size); - if (referred_to_segments == NULL) - { - jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, - "could not allocate referred_to_segments " - "in jbig2_parse_segment_header"); - return NULL; - } - - for (i = 0; i < referred_to_segment_count; i++) { - referred_to_segments[i] = - (referred_to_segment_size == 1) ? buf[offset] : - (referred_to_segment_size == 2) ? jbig2_get_uint16(buf+offset) : - jbig2_get_uint32(buf + offset); - offset += referred_to_segment_size; - jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, result->number, - "segment %d refers to segment %d", - result->number, referred_to_segments[i]); - } - result->referred_to_segments = referred_to_segments; + /* 7.2.5 */ + if (referred_to_segment_count) { + int i; + + referred_to_segments = jbig2_new(ctx, uint32_t, referred_to_segment_count * referred_to_segment_size); + if (referred_to_segments == NULL) { + jbig2_error(ctx, JBIG2_SEVERITY_FATAL, -1, "could not allocate referred_to_segments " "in jbig2_parse_segment_header"); + return NULL; + } + + for (i = 0; i < referred_to_segment_count; i++) { + referred_to_segments[i] = + (referred_to_segment_size == 1) ? buf[offset] : + (referred_to_segment_size == 2) ? jbig2_get_uint16(buf + offset) : jbig2_get_uint32(buf + offset); + offset += referred_to_segment_size; + jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, result->number, "segment %d refers to segment %d", result->number, referred_to_segments[i]); + } + result->referred_to_segments = referred_to_segments; + } else { /* no referred-to segments */ + + result->referred_to_segments = NULL; } - else /* no referred-to segments */ - { - result->referred_to_segments = NULL; + + /* 7.2.6 */ + if (result->flags & 0x40) { + result->page_association = jbig2_get_uint32(buf + offset); + offset += 4; + } else { + result->page_association = buf[offset++]; } + jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, result->number, "segment %d is associated with page %d", result->number, result->page_association); + + /* 7.2.7 */ + result->data_length = jbig2_get_uint32(buf + offset); + *p_header_size = offset + 4; + + /* no body parsing results yet */ + result->result = NULL; - /* 7.2.6 */ - if (result->flags & 0x40) { - result->page_association = jbig2_get_uint32(buf + offset); - offset += 4; - } else { - result->page_association = buf[offset++]; - } - jbig2_error(ctx, JBIG2_SEVERITY_DEBUG, result->number, - "segment %d is associated with page %d", - result->number, result->page_association); - - /* 7.2.7 */ - result->data_length = jbig2_get_uint32(buf + offset); - *p_header_size = offset + 4; - - /* no body parsing results yet */ - result->result = NULL; - - return result; + return result; } void -jbig2_free_segment (Jbig2Ctx *ctx, Jbig2Segment *segment) +jbig2_free_segment(Jbig2Ctx *ctx, Jbig2Segment *segment) { - if (segment->referred_to_segments != NULL) { - jbig2_free(ctx->allocator, segment->referred_to_segments); - } - /* todo: we need either some separate fields or - a more complex result object rather than this - brittle special casing */ + if (segment->referred_to_segments != NULL) { + jbig2_free(ctx->allocator, segment->referred_to_segments); + } + /* todo: we need either some separate fields or + a more complex result object rather than this + brittle special casing */ switch (segment->flags & 63) { - case 0: /* symbol dictionary */ - if (segment->result != NULL) - jbig2_sd_release(ctx, (Jbig2SymbolDict*)segment->result); - break; - case 4: /* intermediate text region */ - case 40: /* intermediate refinement region */ - if (segment->result != NULL) - jbig2_image_release(ctx, (Jbig2Image*)segment->result); - break; - case 16: /* pattern dictionary */ - if (segment->result != NULL) - jbig2_hd_release(ctx, (Jbig2PatternDict*)segment->result); - break; - case 53: /* user-supplied huffman table */ - if (segment->result != NULL) - jbig2_table_free(ctx, (Jbig2HuffmanParams*)segment->result); - break; - case 62: - if (segment->result != NULL) - jbig2_metadata_free(ctx, (Jbig2Metadata*)segment->result); - break; - default: - /* anything else is probably an undefined pointer */ - break; + case 0: /* symbol dictionary */ + if (segment->result != NULL) + jbig2_sd_release(ctx, (Jbig2SymbolDict *) segment->result); + break; + case 4: /* intermediate text region */ + case 40: /* intermediate refinement region */ + if (segment->result != NULL) + jbig2_image_release(ctx, (Jbig2Image *) segment->result); + break; + case 16: /* pattern dictionary */ + if (segment->result != NULL) + jbig2_hd_release(ctx, (Jbig2PatternDict *) segment->result); + break; + case 53: /* user-supplied huffman table */ + if (segment->result != NULL) + jbig2_table_free(ctx, (Jbig2HuffmanParams *) segment->result); + break; + case 62: + if (segment->result != NULL) + jbig2_metadata_free(ctx, (Jbig2Metadata *) segment->result); + break; + default: + /* anything else is probably an undefined pointer */ + break; } - jbig2_free (ctx->allocator, segment); + jbig2_free(ctx->allocator, segment); } /* find a segment by number */ @@ -195,9 +174,9 @@ jbig2_find_segment(Jbig2Ctx *ctx, uint32_t number) return (ctx->segments[index]); if (global_ctx) - for (index = global_ctx->segment_index - 1; index >= 0; index--) - if (global_ctx->segments[index]->number == number) - return (global_ctx->segments[index]); + for (index = global_ctx->segment_index - 1; index >= 0; index--) + if (global_ctx->segments[index]->number == number) + return (global_ctx->segments[index]); /* didn't find a match */ return NULL; @@ -205,100 +184,90 @@ jbig2_find_segment(Jbig2Ctx *ctx, uint32_t number) /* parse the generic portion of a region segment data header */ void -jbig2_get_region_segment_info(Jbig2RegionSegmentInfo *info, - const uint8_t *segment_data) +jbig2_get_region_segment_info(Jbig2RegionSegmentInfo *info, const uint8_t *segment_data) { - /* 7.4.1 */ - info->width = jbig2_get_int32(segment_data); - info->height = jbig2_get_int32(segment_data + 4); - info->x = jbig2_get_int32(segment_data + 8); - info->y = jbig2_get_int32(segment_data + 12); - info->flags = segment_data[16]; - info->op = (Jbig2ComposeOp)(info->flags & 0x7); + /* 7.4.1 */ + info->width = jbig2_get_int32(segment_data); + info->height = jbig2_get_int32(segment_data + 4); + info->x = jbig2_get_int32(segment_data + 8); + info->y = jbig2_get_int32(segment_data + 12); + info->flags = segment_data[16]; + info->op = (Jbig2ComposeOp)(info->flags & 0x7); } /* dispatch code for extension segment parsing */ static int -jbig2_parse_extension_segment(Jbig2Ctx *ctx, Jbig2Segment *segment, - const uint8_t *segment_data) +jbig2_parse_extension_segment(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data) { uint32_t type = jbig2_get_uint32(segment_data); bool reserved = type & 0x20000000; + /* bool dependent = type & 0x40000000; (NYI) */ bool necessary = type & 0x80000000; if (necessary && !reserved) { - jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, - "extension segment is marked 'necessary' but " - "not 'reservered' contrary to spec"); + jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "extension segment is marked 'necessary' but " "not 'reservered' contrary to spec"); } switch (type) { - case 0x20000000: return jbig2_comment_ascii(ctx, segment, segment_data); - case 0x20000002: return jbig2_comment_unicode(ctx, segment, segment_data); - default: - if (necessary) { - return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, - "unhandled necessary extension segment type 0x%08x", type); - } else { - return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, - "unhandled extension segment"); - } + case 0x20000000: + return jbig2_comment_ascii(ctx, segment, segment_data); + case 0x20000002: + return jbig2_comment_unicode(ctx, segment, segment_data); + default: + if (necessary) { + return jbig2_error(ctx, JBIG2_SEVERITY_FATAL, segment->number, "unhandled necessary extension segment type 0x%08x", type); + } else { + return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "unhandled extension segment"); + } } } /* general segment parsing dispatch */ -int jbig2_parse_segment (Jbig2Ctx *ctx, Jbig2Segment *segment, - const uint8_t *segment_data) +int +jbig2_parse_segment(Jbig2Ctx *ctx, Jbig2Segment *segment, const uint8_t *segment_data) { - jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, - "Segment %d, flags=%x, type=%d, data_length=%d", - segment->number, segment->flags, segment->flags & 63, - segment->data_length); - switch (segment->flags & 63) - { + jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, + "Segment %d, flags=%x, type=%d, data_length=%d", segment->number, segment->flags, segment->flags & 63, segment->data_length); + switch (segment->flags & 63) { case 0: - return jbig2_symbol_dictionary(ctx, segment, segment_data); - case 4: /* intermediate text region */ - case 6: /* immediate text region */ - case 7: /* immediate lossless text region */ - return jbig2_text_region(ctx, segment, segment_data); + return jbig2_symbol_dictionary(ctx, segment, segment_data); + case 4: /* intermediate text region */ + case 6: /* immediate text region */ + case 7: /* immediate lossless text region */ + return jbig2_text_region(ctx, segment, segment_data); case 16: - return jbig2_pattern_dictionary(ctx, segment, segment_data); - case 20: /* intermediate halftone region */ - case 22: /* immediate halftone region */ - case 23: /* immediate lossless halftone region */ - return jbig2_halftone_region(ctx, segment, segment_data); + return jbig2_pattern_dictionary(ctx, segment, segment_data); + case 20: /* intermediate halftone region */ + case 22: /* immediate halftone region */ + case 23: /* immediate lossless halftone region */ + return jbig2_halftone_region(ctx, segment, segment_data); case 36: - return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, - "unhandled segment type 'intermediate generic region'"); - case 38: /* immediate generic region */ - case 39: /* immediate lossless generic region */ - return jbig2_immediate_generic_region(ctx, segment, segment_data); - case 40: /* intermediate generic refinement region */ - case 42: /* immediate generic refinement region */ - case 43: /* immediate lossless generic refinement region */ - return jbig2_refinement_region(ctx, segment, segment_data); + return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "unhandled segment type 'intermediate generic region'"); + case 38: /* immediate generic region */ + case 39: /* immediate lossless generic region */ + return jbig2_immediate_generic_region(ctx, segment, segment_data); + case 40: /* intermediate generic refinement region */ + case 42: /* immediate generic refinement region */ + case 43: /* immediate lossless generic refinement region */ + return jbig2_refinement_region(ctx, segment, segment_data); case 48: - return jbig2_page_info(ctx, segment, segment_data); + return jbig2_page_info(ctx, segment, segment_data); case 49: - return jbig2_end_of_page(ctx, segment, segment_data); + return jbig2_end_of_page(ctx, segment, segment_data); case 50: - return jbig2_end_of_stripe(ctx, segment, segment_data); + return jbig2_end_of_stripe(ctx, segment, segment_data); case 51: - ctx->state = JBIG2_FILE_EOF; - return jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, - "end of file"); + ctx->state = JBIG2_FILE_EOF; + return jbig2_error(ctx, JBIG2_SEVERITY_INFO, segment->number, "end of file"); case 52: - return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, - "unhandled segment type 'profile'"); - case 53: /* user-supplied huffman table */ - return jbig2_table(ctx, segment, segment_data); + return jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "unhandled segment type 'profile'"); + case 53: /* user-supplied huffman table */ + return jbig2_table(ctx, segment, segment_data); case 62: - return jbig2_parse_extension_segment(ctx, segment, segment_data); + return jbig2_parse_extension_segment(ctx, segment, segment_data); default: - jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, - "unknown segment type %d", segment->flags & 63); + jbig2_error(ctx, JBIG2_SEVERITY_WARNING, segment->number, "unknown segment type %d", segment->flags & 63); } - return 0; + return 0; } |