+ while (offset < tf->file_size) {
+ ltt_subbuffer_header_t *header;
+ uint64_t *off;
+
+ tf->buf_index = g_array_set_size(tf->buf_index, i + 1);
+ off = &g_array_index(tf->buf_index, uint64_t, i);
+ *off = offset;
+
+ /* map block header */
+ header = mmap(0, header_map_size, PROT_READ,
+ MAP_PRIVATE, tf->fd, (off_t)offset);
+ if(header == MAP_FAILED) {
+ perror("Error in allocating memory for buffer of tracefile");
+ return -1;
+ }
+
+ /* read len, offset += len */
+ offset += ltt_get_uint32(LTT_GET_BO(tf), &header->sb_size);
+
+ /* unmap block header */
+ if(munmap(header, header_map_size)) {
+ g_warning("unmap size : %u\n", header_map_size);
+ perror("munmap error");
+ return -1;
+ }
+ ++i;
+ }
+ tf->num_blocks = i;
+
+ return 0;
+}