156 static const long entry_v2_offset_parent_2 = 28; |
156 static const long entry_v2_offset_parent_2 = 28; |
157 static const long entry_v2_offset_node_id = 32; |
157 static const long entry_v2_offset_node_id = 32; |
158 static const long entry_v2_offset_sidedata_offset = 64; |
158 static const long entry_v2_offset_sidedata_offset = 64; |
159 static const long entry_v2_offset_sidedata_comp_len = 72; |
159 static const long entry_v2_offset_sidedata_comp_len = 72; |
160 static const long entry_v2_offset_all_comp_mode = 76; |
160 static const long entry_v2_offset_all_comp_mode = 76; |
161 static const long entry_v2_offset_padding_start = 77; |
161 /* next free offset: 77 */ |
162 |
162 |
163 static const char comp_mode_inline = 2; |
163 static const char comp_mode_inline = 2; |
164 static const char rank_unknown = -1; |
164 static const char rank_unknown = -1; |
165 |
165 |
166 static void raise_revlog_error(void) |
166 static void raise_revlog_error(void) |
601 self->added_length = new_added_length; |
601 self->added_length = new_added_length; |
602 } |
602 } |
603 rev = self->length + self->new_length; |
603 rev = self->length + self->new_length; |
604 data = self->added + self->entry_size * self->new_length++; |
604 data = self->added + self->entry_size * self->new_length++; |
605 |
605 |
|
606 memset(data, 0, self->entry_size); |
|
607 |
606 if (self->format_version == format_v1) { |
608 if (self->format_version == format_v1) { |
607 putbe32(offset_flags >> 32, data + entry_v1_offset_high); |
609 putbe32(offset_flags >> 32, data + entry_v1_offset_high); |
608 putbe32(offset_flags & 0xffffffffU, |
610 putbe32(offset_flags & 0xffffffffU, |
609 data + entry_v1_offset_offset_flags); |
611 data + entry_v1_offset_offset_flags); |
610 putbe32(comp_len, data + entry_v1_offset_comp_len); |
612 putbe32(comp_len, data + entry_v1_offset_comp_len); |
613 putbe32(link_rev, data + entry_v1_offset_link_rev); |
615 putbe32(link_rev, data + entry_v1_offset_link_rev); |
614 putbe32(parent_1, data + entry_v1_offset_parent_1); |
616 putbe32(parent_1, data + entry_v1_offset_parent_1); |
615 putbe32(parent_2, data + entry_v1_offset_parent_2); |
617 putbe32(parent_2, data + entry_v1_offset_parent_2); |
616 memcpy(data + entry_v1_offset_node_id, c_node_id, |
618 memcpy(data + entry_v1_offset_node_id, c_node_id, |
617 c_node_id_len); |
619 c_node_id_len); |
618 /* Padding since SHA-1 is only 20 bytes for now */ |
|
619 memset(data + entry_v1_offset_node_id + c_node_id_len, 0, |
|
620 entry_v1_offset_node_id - c_node_id_len); |
|
621 } else if (self->format_version == format_v2) { |
620 } else if (self->format_version == format_v2) { |
622 putbe32(offset_flags >> 32, data + entry_v2_offset_high); |
621 putbe32(offset_flags >> 32, data + entry_v2_offset_high); |
623 putbe32(offset_flags & 0xffffffffU, |
622 putbe32(offset_flags & 0xffffffffU, |
624 data + entry_v2_offset_offset_flags); |
623 data + entry_v2_offset_offset_flags); |
625 putbe32(comp_len, data + entry_v2_offset_comp_len); |
624 putbe32(comp_len, data + entry_v2_offset_comp_len); |
628 putbe32(link_rev, data + entry_v2_offset_link_rev); |
627 putbe32(link_rev, data + entry_v2_offset_link_rev); |
629 putbe32(parent_1, data + entry_v2_offset_parent_1); |
628 putbe32(parent_1, data + entry_v2_offset_parent_1); |
630 putbe32(parent_2, data + entry_v2_offset_parent_2); |
629 putbe32(parent_2, data + entry_v2_offset_parent_2); |
631 memcpy(data + entry_v2_offset_node_id, c_node_id, |
630 memcpy(data + entry_v2_offset_node_id, c_node_id, |
632 c_node_id_len); |
631 c_node_id_len); |
633 /* Padding since SHA-1 is only 20 bytes for now */ |
|
634 memset(data + entry_v2_offset_node_id + c_node_id_len, 0, |
|
635 entry_v2_offset_node_id - c_node_id_len); |
|
636 putbe64(sidedata_offset, |
632 putbe64(sidedata_offset, |
637 data + entry_v2_offset_sidedata_offset); |
633 data + entry_v2_offset_sidedata_offset); |
638 putbe32(sidedata_comp_len, |
634 putbe32(sidedata_comp_len, |
639 data + entry_v2_offset_sidedata_comp_len); |
635 data + entry_v2_offset_sidedata_comp_len); |
640 comp_field = data_comp_mode & 3; |
636 comp_field = data_comp_mode & 3; |
641 comp_field = comp_field | (sidedata_comp_mode & 3) << 2; |
637 comp_field = comp_field | (sidedata_comp_mode & 3) << 2; |
642 data[entry_v2_offset_all_comp_mode] = comp_field; |
638 data[entry_v2_offset_all_comp_mode] = comp_field; |
643 /* Padding for 96 bytes alignment */ |
|
644 memset(data + entry_v2_offset_padding_start, 0, |
|
645 self->entry_size - entry_v2_offset_padding_start); |
|
646 } else { |
639 } else { |
647 raise_revlog_error(); |
640 raise_revlog_error(); |
648 return NULL; |
641 return NULL; |
649 } |
642 } |
650 |
643 |