"This version of zchunk doesn't support streams");
return false;
}
- zck->has_optional_flags = flags & 2;
- if(zck->has_optional_flags)
+ zck->has_optional_elems = flags & 2;
+ if(zck->has_optional_elems)
flags -= 2;
flags = flags & (SIZE_MAX - 1);
if(flags != 0) {
return true;
}
-static bool check_optional_flags(zckCtx *zck, size_t flags) {
- flags = flags & (SIZE_MAX - 1);
- if(flags != 0)
- zck_log(ZCK_LOG_WARNING, "Unknown optional flags %i set", flags);
+static bool read_optional_element(zckCtx *zck, size_t id, size_t data_size,
+ char *data) {
+ zck_log(ZCK_LOG_WARNING, "Unknown optional element id %i set", id);
return true;
}
return false;
/* Read optional flags */
- if(zck->has_optional_flags) {
- size_t opt_flags = 0;
- if(!compint_to_size(zck, &opt_flags, header+length, &length,
- max_length))
- return false;
- if(!check_optional_flags(zck, opt_flags))
- return false;
- size_t opt_flag_data_size = 0;
- if(!compint_to_size(zck, &opt_flag_data_size, header+length, &length,
+ if(zck->has_optional_elems) {
+ size_t opt_count = 0;
+ if(!compint_to_size(zck, &opt_count, header+length, &length,
max_length))
return false;
- if(opt_flag_data_size > 0)
- length += opt_flag_data_size;
+ for(size_t i=0; i<opt_count; i++) {
+ size_t id = 0;
+ size_t data_size = 0;
+ if(!compint_to_size(zck, &id, header+length, &length, max_length))
+ return false;
+ if(!compint_to_size(zck, &data_size, header+length, &length,
+ max_length))
+ return false;
+ if(!read_optional_element(zck, id, data_size, header+length))
+ return false;
+ length += data_size;
+ }
}
/* Read and initialize index size */