Files
libaaruformat/docs/html/ddt__v2_8c_source.html

1637 lines
322 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.14.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libaaruformat: src/ddt/ddt_v2.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="clipboard.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript" src="cookie.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr id="projectrow">
<td id="projectalign">
<div id="projectname">libaaruformat<span id="projectnumber">&#160;1.0</span>
</div>
<div id="projectbrief">Aaru Data Preservation Suite - Format Library</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.14.0 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
$(function() { codefold.init(); });
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
initMenu('',true,false,'search.php','Search',true);
$(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
<div id="nav-tree">
<div id="nav-tree-contents">
<div id="nav-sync" class="sync"></div>
</div>
</div>
<div id="splitbar" style="-moz-user-select:none;"
class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
$(function(){initNavTree('ddt__v2_8c_source.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div class="header">
<div class="headertitle"><div class="title">ddt_v2.c</div></div>
</div><!--header-->
<div class="contents">
<a href="ddt__v2_8c.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="comment">/*</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment"> * This file is part of the Aaru Data Preservation Suite.</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="comment"> * Copyright (c) 2019-2025 Natalia Portillo.</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="comment"> *</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="comment"> * This library is free software; you can redistribute it and/or modify</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="comment"> * it under the terms of the GNU Lesser General Public License as</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="comment"> * published by the Free Software Foundation; either version 2.1 of the</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> * License, or (at your option) any later version.</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> *</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * This library is distributed in the hope that it will be useful, but</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> * Lesser General Public License for more details.</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> *</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * License along with this library; if not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="comment"> */</span></div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="preprocessor">#include &lt;inttypes.h&gt;</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span><span class="preprocessor">#include &lt;stdint.h&gt;</span></div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdio.h&gt;</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &quot;<a class="code" href="aaruformat_8h.html">aaruformat.h</a>&quot;</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span><span class="preprocessor">#include &quot;<a class="code" href="internal_8h.html">internal.h</a>&quot;</span></div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span><span class="preprocessor">#include &quot;<a class="code" href="log_8h.html">log.h</a>&quot;</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span></div>
<div class="foldopen" id="foldopen00096" data-start="{" data-end="}">
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"><a class="line" href="internal_8h.html#a1caeae710ee5e1dd356e43b3b659e9c0"> 96</a></span>int32_t <a class="code hl_function" href="ddt__v2_8c.html#a1caeae710ee5e1dd356e43b3b659e9c0">process_ddt_v2</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx, <a class="code hl_struct" href="structIndexEntry.html">IndexEntry</a> *entry, <span class="keywordtype">bool</span> *found_user_data_ddt)</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span>{</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Entering process_ddt_v2(%p, %p, %d)&quot;</span>, ctx, entry, *found_user_data_ddt);</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> </div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordtype">int</span> pos = 0;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordtype">size_t</span> read_bytes = 0;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> <a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a> ddt_header;</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> uint8_t *cmp_data = NULL;</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> uint8_t lzma_properties[<a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>];</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <span class="keywordtype">size_t</span> lzma_size = 0;</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <span class="keywordtype">int</span> error_no = 0;</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <a class="code hl_struct" href="structcrc64__ctx.html">crc64_ctx</a> *crc64_context = NULL;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> uint64_t crc64 = 0;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> uint8_t *buffer = NULL;</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <span class="comment">// Check if the context and image stream are valid</span></div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> <span class="keywordflow">if</span>(ctx == NULL || ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a> == NULL)</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> {</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context or image stream.&quot;</span>);</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> </div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_NOT_AARUFORMAT&quot;</span>);</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#abb63e240b11d790da83bd34507b57851">AARUF_ERROR_NOT_AARUFORMAT</a>;</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> }</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> </div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> <span class="comment">// Seek to block</span></div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> pos = fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>, SEEK_SET);</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">if</span>(pos &lt; 0 || ftell(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>) != entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>)</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> {</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not seek to %&quot;</span> PRIu64 <span class="stringliteral">&quot; as indicated by index entry...&quot;</span>, entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>);</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> </div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> }</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// Even if those two checks shall have been done before</span></div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Reading DDT block header at position %&quot;</span> PRIu64, entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>);</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> read_bytes = fread(&amp;ddt_header, 1, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>), ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span>(read_bytes != <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>))</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> {</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not read block header at %&quot;</span> PRIu64 <span class="stringliteral">&quot;&quot;</span>, entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>);</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> }</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> </div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ac970291b3449c04221827b9c2c18ac70">image_info</a>.<a class="code hl_variable" href="structImageInfo.html#abca8e73a9655d810e6d30d36c3ab54d7">ImageSize</a> += ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a>;</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> </div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keywordflow">if</span>(entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#ae5d35082a756e0388efbf5fabbe93d10">dataType</a> == <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a73bb26133ccd01972725933b00ec3a06">UserData</a>)</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> {</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> <span class="comment">// User area sectors is blocks stored in DDT minus the negative and overflow displacement blocks</span></div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ac970291b3449c04221827b9c2c18ac70">image_info</a>.<a class="code hl_variable" href="structImageInfo.html#ae3e1b9cde1c51152b00eb1b59e199906">Sectors</a> = ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a9571c1d556e33537935bab1edba31135">blocks</a> - ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a> - ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a2bfa558d9d778ae6b86d52520e278b66">overflow</a>;</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> <span class="comment">// We need the header later for the shift calculations</span></div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a> = ddt_header;</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a7c284949fdbfecfddeac2ba6687213b0">ddt_version</a> = 2;</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> <span class="comment">// Store the primary DDT table&#39;s file offset for secondary table references</span></div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a88effb2eb082320b5b31d729981cf2d4">primary_ddt_offset</a> = entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="comment">// Check for DDT compression</span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keywordflow">switch</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a>)</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> {</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a>:</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> &lt;= <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>)</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> {</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Compressed DDT payload too small (%&quot;</span> PRIu64 <span class="stringliteral">&quot;) for LZMA properties.&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a>);</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> }</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> lzma_size = (size_t)(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> - <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>);</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> </div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> cmp_data = (uint8_t *)malloc(lzma_size);</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keywordflow">if</span>(cmp_data == NULL)</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> {</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Cannot allocate memory for DDT, continuing...&quot;</span>);</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> }</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> </div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> buffer = malloc(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="keywordflow">if</span>(buffer == NULL)</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> {</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Cannot allocate memory for DDT, continuing...&quot;</span>);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> free(cmp_data);</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> }</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> </div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> read_bytes = fread(lzma_properties, 1, <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span>(read_bytes != <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>)</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> {</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Could not read LZMA properties, continuing...&quot;</span>);</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> free(cmp_data);</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> free(buffer);</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> }</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> </div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> read_bytes = fread(cmp_data, 1, lzma_size, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="keywordflow">if</span>(read_bytes != lzma_size)</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> {</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Could not read compressed block, continuing...&quot;</span>);</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> free(cmp_data);</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> free(buffer);</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> }</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> </div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> read_bytes = ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>;</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Decompressing block of size %zu bytes&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> error_no = <a class="code hl_function" href="decls_8h.html#a12f3cbc43c2f57a11fbba32a71ba2704">aaruf_lzma_decode_buffer</a>(buffer, &amp;read_bytes, cmp_data, &amp;lzma_size, lzma_properties,</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>);</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> </div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span>(error_no != 0)</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> {</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Got error %d from LZMA, stopping...&quot;</span>, error_no);</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> free(cmp_data);</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> free(buffer);</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> }</div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> </div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">if</span>(read_bytes != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>)</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> {</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Error decompressing block, should be {0} bytes but got {1} bytes., stopping...&quot;</span>);</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> free(cmp_data);</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> free(buffer);</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> }</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> free(cmp_data);</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> </div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> crc64_context = <a class="code hl_function" href="decls_8h.html#a66567ca64e31a687d4982cb254b45196">aaruf_crc64_init</a>();</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> </div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span>(crc64_context == NULL)</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> {</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not initialize CRC64.&quot;</span>);</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> free(buffer);</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> </div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> }</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> </div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> <a class="code hl_function" href="decls_8h.html#a1fb4423a841ccd728e3ad0d028cbc9b4">aaruf_crc64_update</a>(crc64_context, buffer, read_bytes);</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> <a class="code hl_function" href="decls_8h.html#ae48cfb59c6585e9ffd4cd1a97044891f">aaruf_crc64_final</a>(crc64_context, &amp;crc64);</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordflow">if</span>(crc64 != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>)</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"> 240</span> {</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Expected DDT CRC 0x%16lX but got 0x%16lX.&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>, crc64);</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> free(buffer);</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_INVALID_BLOCK_CRC&quot;</span>);</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#aa8dcb9cad962fc5f5f84d5e1ec41fae7">AARUF_ERROR_INVALID_BLOCK_CRC</a>;</div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> }</div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> </div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a3c7b902731274622296d04564b193b64">user_data_ddt2</a> = (uint64_t *)buffer;</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> </div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a62885cab6ef674fd27b4de32ab4ee346">in_memory_ddt</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> *found_user_data_ddt = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> </div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a>:</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> buffer = malloc(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> </div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <span class="keywordflow">if</span>(buffer == NULL)</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> {</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Cannot allocate memory for DDT, continuing...&quot;</span>);</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> }</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> </div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Reading DDT of length %zu bytes&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> read_bytes = fread(buffer, 1, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> </div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> <span class="keywordflow">if</span>(read_bytes != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>)</div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> {</div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> free(buffer);</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not read deduplication table, continuing...&quot;</span>);</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> }</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> </div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> crc64_context = <a class="code hl_function" href="decls_8h.html#a66567ca64e31a687d4982cb254b45196">aaruf_crc64_init</a>();</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> </div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <span class="keywordflow">if</span>(crc64_context == NULL)</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> {</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not initialize CRC64.&quot;</span>);</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> free(buffer);</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> }</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> </div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <a class="code hl_function" href="decls_8h.html#a1fb4423a841ccd728e3ad0d028cbc9b4">aaruf_crc64_update</a>(crc64_context, buffer, read_bytes);</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <a class="code hl_function" href="decls_8h.html#ae48cfb59c6585e9ffd4cd1a97044891f">aaruf_crc64_final</a>(crc64_context, &amp;crc64);</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> </div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> <span class="keywordflow">if</span>(crc64 != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>)</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> {</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Expected DDT CRC 0x%16lX but got 0x%16lX.&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>, crc64);</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> free(buffer);</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_INVALID_BLOCK_CRC&quot;</span>);</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#aa8dcb9cad962fc5f5f84d5e1ec41fae7">AARUF_ERROR_INVALID_BLOCK_CRC</a>;</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> }</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> </div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a3c7b902731274622296d04564b193b64">user_data_ddt2</a> = (uint64_t *)buffer;</div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> </div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a62885cab6ef674fd27b4de32ab4ee346">in_memory_ddt</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> *found_user_data_ddt = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> </div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Found unknown compression type %d, continuing...&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a>);</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> *found_user_data_ddt = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> }</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> }</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#ae5d35082a756e0388efbf5fabbe93d10">dataType</a> == <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a4cc94cd48947bd2bb9ab37d56b8eab98">CdSectorPrefix</a> || entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#ae5d35082a756e0388efbf5fabbe93d10">dataType</a> == <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6aee38da0d8fd8047e5468514ff9be0f75">CdSectorSuffix</a>)</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <span class="keywordflow">switch</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a>)</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> {</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a>:</div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> &lt;= <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>)</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> {</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Compressed DDT payload too small (%&quot;</span> PRIu64 <span class="stringliteral">&quot;) for LZMA properties.&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a>);</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> }</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> </div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> lzma_size = (size_t)(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> - <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>);</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> </div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> cmp_data = (uint8_t *)malloc(lzma_size);</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <span class="keywordflow">if</span>(cmp_data == NULL)</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> {</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Cannot allocate memory for DDT, continuing...&quot;</span>);</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> }</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> </div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> buffer = malloc(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="keywordflow">if</span>(buffer == NULL)</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> {</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Cannot allocate memory for DDT, continuing...&quot;</span>);</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> free(cmp_data);</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> }</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> </div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> read_bytes = fread(lzma_properties, 1, <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <span class="keywordflow">if</span>(read_bytes != <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>)</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> {</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Could not read LZMA properties, continuing...&quot;</span>);</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> free(cmp_data);</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> free(buffer);</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> }</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> </div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> read_bytes = fread(cmp_data, 1, lzma_size, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <span class="keywordflow">if</span>(read_bytes != lzma_size)</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> {</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Could not read compressed block, continuing...&quot;</span>);</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> free(cmp_data);</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> free(buffer);</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> }</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> </div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> read_bytes = ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>;</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Decompressing block of size %zu bytes&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> error_no = <a class="code hl_function" href="decls_8h.html#a12f3cbc43c2f57a11fbba32a71ba2704">aaruf_lzma_decode_buffer</a>(buffer, &amp;read_bytes, cmp_data, &amp;lzma_size, lzma_properties,</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>);</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> </div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <span class="keywordflow">if</span>(error_no != 0)</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> {</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Got error %d from LZMA, stopping...&quot;</span>, error_no);</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> free(cmp_data);</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> free(buffer);</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> }</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> </div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="keywordflow">if</span>(read_bytes != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>)</div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> {</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Error decompressing block, should be {0} bytes but got {1} bytes., stopping...&quot;</span>);</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> free(cmp_data);</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> free(buffer);</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> }</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> </div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> free(cmp_data);</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> cmp_data = NULL;</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> </div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> crc64_context = <a class="code hl_function" href="decls_8h.html#a66567ca64e31a687d4982cb254b45196">aaruf_crc64_init</a>();</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> </div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> <span class="keywordflow">if</span>(crc64_context == NULL)</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> {</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not initialize CRC64.&quot;</span>);</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> free(buffer);</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> }</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> </div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> <a class="code hl_function" href="decls_8h.html#a1fb4423a841ccd728e3ad0d028cbc9b4">aaruf_crc64_update</a>(crc64_context, buffer, read_bytes);</div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> <a class="code hl_function" href="decls_8h.html#ae48cfb59c6585e9ffd4cd1a97044891f">aaruf_crc64_final</a>(crc64_context, &amp;crc64);</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> </div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> <span class="keywordflow">if</span>(crc64 != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>)</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> {</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Expected DDT CRC 0x%16lX but got 0x%16lX.&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>, crc64);</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> free(buffer);</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_INVALID_BLOCK_CRC&quot;</span>);</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#aa8dcb9cad962fc5f5f84d5e1ec41fae7">AARUF_ERROR_INVALID_BLOCK_CRC</a>;</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> }</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <span class="keywordflow">if</span>(entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#ae5d35082a756e0388efbf5fabbe93d10">dataType</a> == <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a4cc94cd48947bd2bb9ab37d56b8eab98">CdSectorPrefix</a>)</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a8317a42c16f1a140053f01808929f43f">sector_prefix_ddt2</a> = (uint64_t *)buffer;</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#ae5d35082a756e0388efbf5fabbe93d10">dataType</a> == <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6aee38da0d8fd8047e5468514ff9be0f75">CdSectorSuffix</a>)</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a46d0ccdc69758165c0468afbd05b9ffe">sector_suffix_ddt2</a> = (uint64_t *)buffer;</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> free(buffer);</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> </div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> </div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a>:</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> buffer = malloc(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> </div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="keywordflow">if</span>(buffer == NULL)</div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> {</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Cannot allocate memory for deduplication table.&quot;</span>);</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> }</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> </div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> read_bytes = fread(buffer, 1, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> </div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <span class="keywordflow">if</span>(read_bytes != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>)</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> {</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> free(buffer);</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not read deduplication table, continuing...&quot;</span>);</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> }</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> </div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> crc64_context = <a class="code hl_function" href="decls_8h.html#a66567ca64e31a687d4982cb254b45196">aaruf_crc64_init</a>();</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> </div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> <span class="keywordflow">if</span>(crc64_context == NULL)</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> {</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not initialize CRC64.&quot;</span>);</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> free(buffer);</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> }</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> </div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <a class="code hl_function" href="decls_8h.html#a1fb4423a841ccd728e3ad0d028cbc9b4">aaruf_crc64_update</a>(crc64_context, buffer, read_bytes);</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> <a class="code hl_function" href="decls_8h.html#ae48cfb59c6585e9ffd4cd1a97044891f">aaruf_crc64_final</a>(crc64_context, &amp;crc64);</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> </div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> <span class="keywordflow">if</span>(crc64 != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>)</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> {</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Expected DDT CRC 0x%16lX but got 0x%16lX.&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>, crc64);</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> free(buffer);</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_ERROR_INVALID_BLOCK_CRC&quot;</span>);</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#aa8dcb9cad962fc5f5f84d5e1ec41fae7">AARUF_ERROR_INVALID_BLOCK_CRC</a>;</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> }</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> </div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">if</span>(entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#ae5d35082a756e0388efbf5fabbe93d10">dataType</a> == <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a4cc94cd48947bd2bb9ab37d56b8eab98">CdSectorPrefix</a>)</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a8317a42c16f1a140053f01808929f43f">sector_prefix_ddt2</a> = (uint64_t *)buffer;</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#ae5d35082a756e0388efbf5fabbe93d10">dataType</a> == <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6aee38da0d8fd8047e5468514ff9be0f75">CdSectorSuffix</a>)</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a46d0ccdc69758165c0468afbd05b9ffe">sector_suffix_ddt2</a> = (uint64_t *)buffer;</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> free(buffer);</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> </div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Found unknown compression type %d, continuing...&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a>);</div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> }</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> </div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_ddt_v2() = AARUF_STATUS_OK&quot;</span>);</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a1d6e49f7e8a1fa489efa0a582e90b5de">AARUF_STATUS_OK</a>;</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span>}</div>
</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span></div>
<div class="foldopen" id="foldopen00507" data-start="{" data-end="}">
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"><a class="line" href="internal_8h.html#a805d607b45bb8ad8a3e6b0bcfabe3265"> 507</a></span>int32_t <a class="code hl_function" href="ddt__v2_8c.html#ab8d599dac0c84517fa72c757d5d753c0">decode_ddt_entry_v2</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx, <span class="keyword">const</span> uint64_t sector_address, <span class="keywordtype">bool</span> negative, uint64_t *offset,</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> uint64_t *block_offset, uint8_t *sector_status)</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span>{</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Entering decode_ddt_entry_v2(%p, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %d, %llu, %llu, %d)&quot;</span>, ctx, sector_address, negative, *offset,</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> *block_offset, *sector_status);</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> <span class="comment">// Check if the context and image stream are valid</span></div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> <span class="keywordflow">if</span>(ctx == NULL || ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a> == NULL)</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> {</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context or image stream.&quot;</span>);</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> </div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_entry_v2() = AARUF_ERROR_NOT_AARUFORMAT&quot;</span>);</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#abb63e240b11d790da83bd34507b57851">AARUF_ERROR_NOT_AARUFORMAT</a>;</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> }</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> </div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a8c2110cbb42bde3c0e302d3429024b04">tableShift</a> &gt; 0)</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> <span class="keywordflow">return</span> <a class="code hl_function" href="ddt__v2_8c.html#a83aff4d408ab17f8f350cb03b0e12ef6">decode_ddt_multi_level_v2</a>(ctx, sector_address, negative, offset, block_offset, sector_status);</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> </div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> <span class="keywordflow">return</span> <a class="code hl_function" href="ddt__v2_8c.html#a40c571bc4778040f22ac211cea670db1">decode_ddt_single_level_v2</a>(ctx, sector_address, negative, offset, block_offset, sector_status);</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span>}</div>
</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span></div>
<div class="foldopen" id="foldopen00581" data-start="{" data-end="}">
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"><a class="line" href="internal_8h.html#a40c571bc4778040f22ac211cea670db1"> 581</a></span>int32_t <a class="code hl_function" href="ddt__v2_8c.html#a40c571bc4778040f22ac211cea670db1">decode_ddt_single_level_v2</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx, uint64_t sector_address, <span class="keywordtype">bool</span> negative, uint64_t *offset,</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> uint64_t *block_offset, uint8_t *sector_status)</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span>{</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Entering decode_ddt_single_level_v2(%p, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %d, %llu, %llu, %d)&quot;</span>, ctx, sector_address, negative,</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> *offset, *block_offset, *sector_status);</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> </div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> uint64_t ddt_entry = 0;</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> </div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> <span class="comment">// Check if the context and image stream are valid</span></div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> <span class="keywordflow">if</span>(ctx == NULL || ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a> == NULL)</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> {</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context or image stream.&quot;</span>);</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> </div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_single_level_v2() = AARUF_ERROR_NOT_AARUFORMAT&quot;</span>);</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#abb63e240b11d790da83bd34507b57851">AARUF_ERROR_NOT_AARUFORMAT</a>;</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> }</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> </div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> <span class="comment">// Should not really be here</span></div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a8c2110cbb42bde3c0e302d3429024b04">tableShift</a> != 0)</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> {</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;DDT table shift is not zero, but we are in single-level DDT decoding.&quot;</span>);</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_single_level_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> }</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> </div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="comment">// Calculate positive or negative sector</span></div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <span class="keywordflow">if</span>(negative)</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> sector_address = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a> - sector_address;</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> sector_address += ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a>;</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> </div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> ddt_entry = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a3c7b902731274622296d04564b193b64">user_data_ddt2</a>[sector_address];</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> </div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="keywordflow">if</span>(ddt_entry == 0)</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> {</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> *sector_status = <a class="code hl_enumvalue" href="enums_8h.html#a74e216af87b18a5fbf0204a52dd1bba0a032ffcff283d253414768f0fa035af4d">SectorStatusNotDumped</a>;</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> *offset = 0;</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> *block_offset = 0;</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_single_level_v2(%p, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %llu, %llu, %d) = AARUF_STATUS_OK&quot;</span>, ctx,</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> sector_address, *offset, *block_offset, *sector_status);</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a1d6e49f7e8a1fa489efa0a582e90b5de">AARUF_STATUS_OK</a>;</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> }</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> </div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> *sector_status = ddt_entry &gt;&gt; 60;</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> ddt_entry &amp;= 0xFFFFFFFFFFFFFFF;</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> </div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> <span class="keyword">const</span> uint64_t offset_mask = (uint64_t)((1 &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>) - 1);</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> *offset = ddt_entry &amp; offset_mask;</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> *block_offset =</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> (ddt_entry &gt;&gt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>) * (1 &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>);</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> </div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_single_level_v2(%p, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %d, %llu, %llu, %d) = AARUF_STATUS_OK&quot;</span>, ctx,</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> sector_address, negative, *offset, *block_offset, *sector_status);</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a1d6e49f7e8a1fa489efa0a582e90b5de">AARUF_STATUS_OK</a>;</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span>}</div>
</div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span></div>
<div class="foldopen" id="foldopen00724" data-start="{" data-end="}">
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"><a class="line" href="internal_8h.html#a83aff4d408ab17f8f350cb03b0e12ef6"> 724</a></span>int32_t <a class="code hl_function" href="ddt__v2_8c.html#a83aff4d408ab17f8f350cb03b0e12ef6">decode_ddt_multi_level_v2</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx, uint64_t sector_address, <span class="keywordtype">bool</span> negative, uint64_t *offset,</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> uint64_t *block_offset, uint8_t *sector_status)</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span>{</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Entering decode_ddt_multi_level_v2(%p, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %d, %llu, %llu, %d)&quot;</span>, ctx, sector_address, negative,</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> *offset, *block_offset, *sector_status);</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> </div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> uint64_t ddt_entry = 0;</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> uint8_t lzma_properties[<a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>];</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> <span class="keywordtype">size_t</span> lzma_size = 0;</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> uint8_t *cmp_data = NULL;</div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> uint8_t *buffer = NULL;</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> <a class="code hl_struct" href="structcrc64__ctx.html">crc64_ctx</a> *crc64_context = NULL;</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> uint64_t crc64 = 0;</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> <span class="keywordtype">int</span> items_per_ddt_entry = 0;</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> uint64_t ddt_position = 0;</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> uint64_t secondary_ddt_offset = 0;</div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> </div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> <span class="comment">// Check if the context and image stream are valid</span></div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> <span class="keywordflow">if</span>(ctx == NULL || ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a> == NULL)</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> {</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context or image stream.&quot;</span>);</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> </div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_NOT_AARUFORMAT&quot;</span>);</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#abb63e240b11d790da83bd34507b57851">AARUF_ERROR_NOT_AARUFORMAT</a>;</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> }</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> </div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <span class="comment">// Should not really be here</span></div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a8c2110cbb42bde3c0e302d3429024b04">tableShift</a> == 0)</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> {</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;DDT table shift is zero, but we are in multi-level DDT decoding.&quot;</span>);</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> }</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> </div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> <span class="comment">// Calculate positive or negative sector</span></div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">if</span>(negative)</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> sector_address = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a> - sector_address;</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> sector_address += ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a>;</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> </div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> items_per_ddt_entry = 1 &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a8c2110cbb42bde3c0e302d3429024b04">tableShift</a>;</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> ddt_position = sector_address / items_per_ddt_entry;</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> secondary_ddt_offset = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a3c7b902731274622296d04564b193b64">user_data_ddt2</a>[ddt_position];</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> </div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> <span class="comment">// Position in file of the child DDT table</span></div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> secondary_ddt_offset *= 1 &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>;</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> </div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> <span class="comment">// Is the one we have cached the same as the one we need to read?</span></div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a> != secondary_ddt_offset)</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> {</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> int32_t error_no = 0;</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, secondary_ddt_offset, SEEK_SET);</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> <a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a> ddt_header;</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> <span class="keywordtype">size_t</span> read_bytes = fread(&amp;ddt_header, 1, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>), ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> </div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="keywordflow">if</span>(read_bytes != <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>))</div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> {</div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not read block header at %&quot;</span> PRIu64 <span class="stringliteral">&quot;&quot;</span>, secondary_ddt_offset);</div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> }</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> </div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a80a88ec68cd0332a57886ac363bfa4d1">identifier</a> != <a class="code hl_enumvalue" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3a76b6a78e4e765794c4cca2dde5bfc3fb">DeDuplicationTableSecondary</a> || ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a14f9ccf36df63e036d69291182cf7bbb">type</a> != <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a73bb26133ccd01972725933b00ec3a06">UserData</a>)</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> {</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid block header at %&quot;</span> PRIu64 <span class="stringliteral">&quot;&quot;</span>, secondary_ddt_offset);</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> }</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> </div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> <span class="comment">// Check for DDT compression</span></div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> <span class="keywordflow">switch</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a>)</div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> {</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a>:</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> &lt;= <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>)</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> {</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Compressed DDT payload too small (%&quot;</span> PRIu64 <span class="stringliteral">&quot;) for LZMA properties.&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a>);</div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> }</div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> </div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> lzma_size = (size_t)(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> - <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>);</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> </div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> cmp_data = (uint8_t *)malloc(lzma_size);</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <span class="keywordflow">if</span>(cmp_data == NULL)</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> {</div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Cannot allocate memory for DDT, stopping...&quot;</span>);</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> }</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> </div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> buffer = malloc(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> <span class="keywordflow">if</span>(buffer == NULL)</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> {</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Cannot allocate memory for DDT, stopping...&quot;</span>);</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> free(cmp_data);</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> }</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> </div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> read_bytes = fread(lzma_properties, 1, <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> <span class="keywordflow">if</span>(read_bytes != <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>)</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> {</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not read LZMA properties, stopping...&quot;</span>);</div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> free(cmp_data);</div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> free(buffer);</div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> }</div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> </div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> read_bytes = fread(cmp_data, 1, lzma_size, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> <span class="keywordflow">if</span>(read_bytes != lzma_size)</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> {</div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not read compressed block, stopping...&quot;</span>);</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> free(cmp_data);</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> free(buffer);</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> }</div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> </div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Decompressing block of size %zu bytes&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> read_bytes = ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>;</div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> error_no = <a class="code hl_function" href="decls_8h.html#a12f3cbc43c2f57a11fbba32a71ba2704">aaruf_lzma_decode_buffer</a>(buffer, &amp;read_bytes, cmp_data, &amp;lzma_size, lzma_properties,</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>);</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> </div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <span class="keywordflow">if</span>(error_no != 0)</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> {</div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Got error %d from LZMA, stopping...&quot;</span>, error_no);</div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> free(cmp_data);</div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> free(buffer);</div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> }</div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> </div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> <span class="keywordflow">if</span>(read_bytes != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>)</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> {</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Error decompressing block, should be {0} bytes but got {1} bytes., stopping...&quot;</span>);</div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> free(cmp_data);</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> free(buffer);</div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a>;</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> }</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> </div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> free(cmp_data);</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> </div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> crc64_context = <a class="code hl_function" href="decls_8h.html#a66567ca64e31a687d4982cb254b45196">aaruf_crc64_init</a>();</div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> </div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> <span class="keywordflow">if</span>(crc64_context == NULL)</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> {</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not initialize CRC64.&quot;</span>);</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> free(buffer);</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> }</div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> </div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> <a class="code hl_function" href="decls_8h.html#a1fb4423a841ccd728e3ad0d028cbc9b4">aaruf_crc64_update</a>(crc64_context, buffer, read_bytes);</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> <a class="code hl_function" href="decls_8h.html#ae48cfb59c6585e9ffd4cd1a97044891f">aaruf_crc64_final</a>(crc64_context, &amp;crc64);</div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> </div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> <span class="keywordflow">if</span>(crc64 != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>)</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> {</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Expected DDT CRC 0x%16lX but got 0x%16lX.&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>, crc64);</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> free(buffer);</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_INVALID_BLOCK_CRC&quot;</span>);</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#aa8dcb9cad962fc5f5f84d5e1ec41fae7">AARUF_ERROR_INVALID_BLOCK_CRC</a>;</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> }</div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> </div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a> = (uint64_t *)buffer;</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> </div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a> = secondary_ddt_offset;</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> </div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a>:</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> buffer = malloc(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> </div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> <span class="keywordflow">if</span>(buffer == NULL)</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> {</div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Cannot allocate memory for DDT, stopping...&quot;</span>);</div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> }</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> </div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> read_bytes = fread(buffer, 1, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> </div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> <span class="keywordflow">if</span>(read_bytes != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>)</div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> {</div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> free(buffer);</div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not read deduplication table, stopping...&quot;</span>);</div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> }</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> </div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> crc64_context = <a class="code hl_function" href="decls_8h.html#a66567ca64e31a687d4982cb254b45196">aaruf_crc64_init</a>();</div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> </div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> <span class="keywordflow">if</span>(crc64_context == NULL)</div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> {</div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not initialize CRC64.&quot;</span>);</div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> free(buffer);</div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> }</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> </div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> <a class="code hl_function" href="decls_8h.html#a1fb4423a841ccd728e3ad0d028cbc9b4">aaruf_crc64_update</a>(crc64_context, buffer, read_bytes);</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> <a class="code hl_function" href="decls_8h.html#ae48cfb59c6585e9ffd4cd1a97044891f">aaruf_crc64_final</a>(crc64_context, &amp;crc64);</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> </div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> <span class="keywordflow">if</span>(crc64 != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>)</div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> {</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Expected DDT CRC 0x%16lX but got 0x%16lX.&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>, crc64);</div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> free(buffer);</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_INVALID_BLOCK_CRC&quot;</span>);</div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#aa8dcb9cad962fc5f5f84d5e1ec41fae7">AARUF_ERROR_INVALID_BLOCK_CRC</a>;</div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> }</div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> </div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a> = (uint64_t *)buffer;</div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> </div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a> = secondary_ddt_offset;</div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> </div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Found unknown compression type %d, stopping...&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a>);</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> }</div>
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> }</div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span> </div>
<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> ddt_entry = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>[sector_address % items_per_ddt_entry];</div>
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span> </div>
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span> <span class="keywordflow">if</span>(ddt_entry == 0)</div>
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> {</div>
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> *sector_status = <a class="code hl_enumvalue" href="enums_8h.html#a74e216af87b18a5fbf0204a52dd1bba0a032ffcff283d253414768f0fa035af4d">SectorStatusNotDumped</a>;</div>
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> *offset = 0;</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> *block_offset = 0;</div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> </div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2(%p, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %llu, %llu, %d) = AARUF_STATUS_OK&quot;</span>, ctx,</div>
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> sector_address, *offset, *block_offset, *sector_status);</div>
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a1d6e49f7e8a1fa489efa0a582e90b5de">AARUF_STATUS_OK</a>;</div>
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span> }</div>
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> </div>
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span> *sector_status = ddt_entry &gt;&gt; 60;</div>
<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span> ddt_entry &amp;= 0x0FFFFFFFFFFFFFFF;</div>
<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> </div>
<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span> <span class="keyword">const</span> uint64_t offset_mask = (uint64_t)((1 &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>) - 1);</div>
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> *offset = ddt_entry &amp; offset_mask;</div>
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> *block_offset =</div>
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> (ddt_entry &gt;&gt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>) * (1 &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>);</div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> </div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting decode_ddt_multi_level_v2(%p, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %d, %llu, %llu, %d) = AARUF_STATUS_OK&quot;</span>, ctx,</div>
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> sector_address, negative, *offset, *block_offset, *sector_status);</div>
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a1d6e49f7e8a1fa489efa0a582e90b5de">AARUF_STATUS_OK</a>;</div>
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span>}</div>
</div>
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span></div>
<div class="foldopen" id="foldopen00988" data-start="{" data-end="}">
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"><a class="line" href="internal_8h.html#a1906cbcaef9f44b8ac4360beb70a0120"> 988</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="ddt__v2_8c.html#a6d6ee0e6c255449cb9c2528f0f8398ec">set_ddt_entry_v2</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx, <span class="keyword">const</span> uint64_t sector_address, <span class="keyword">const</span> <span class="keywordtype">bool</span> negative,</div>
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> <span class="keyword">const</span> uint64_t offset, <span class="keyword">const</span> uint64_t block_offset, <span class="keyword">const</span> uint8_t sector_status,</div>
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> uint64_t *ddt_entry)</div>
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span>{</div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Entering set_ddt_entry_v2(%p, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %d, %llu, %llu, %d)&quot;</span>, ctx, sector_address, negative, offset,</div>
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> block_offset, sector_status);</div>
<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> </div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> <span class="comment">// Check if the context and image stream are valid</span></div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> <span class="keywordflow">if</span>(ctx == NULL || ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a> == NULL)</div>
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span> {</div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context or image stream.&quot;</span>);</div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> }</div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> </div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a8c2110cbb42bde3c0e302d3429024b04">tableShift</a> &gt; 0)</div>
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> <span class="keywordflow">return</span> <a class="code hl_function" href="ddt__v2_8c.html#a69ff2e68fe4d92a2d2d469ac69f41d82">set_ddt_multi_level_v2</a>(ctx, sector_address, negative, offset, block_offset, sector_status, ddt_entry);</div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span> </div>
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> <span class="keywordflow">return</span> <a class="code hl_function" href="ddt__v2_8c.html#a9583b5975c5c0b81902681c07d6f737f">set_ddt_single_level_v2</a>(ctx, sector_address, negative, offset, block_offset, sector_status, ddt_entry);</div>
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span>}</div>
</div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span></div>
<div class="foldopen" id="foldopen01024" data-start="{" data-end="}">
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"><a class="line" href="internal_8h.html#a7471ae33a70bae7e3aa93a52f8e519ca"> 1024</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="ddt__v2_8c.html#a9583b5975c5c0b81902681c07d6f737f">set_ddt_single_level_v2</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx, uint64_t sector_address, <span class="keyword">const</span> <span class="keywordtype">bool</span> negative,</div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> <span class="keyword">const</span> uint64_t offset, <span class="keyword">const</span> uint64_t block_offset, <span class="keyword">const</span> uint8_t sector_status,</div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> uint64_t *ddt_entry)</div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span>{</div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Entering set_ddt_single_level_v2(%p, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %d, %llu, %llu, %d)&quot;</span>, ctx, sector_address, negative,</div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> offset, block_offset, sector_status);</div>
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span> </div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> <span class="comment">// Check if the context and image stream are valid</span></div>
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span> <span class="keywordflow">if</span>(ctx == NULL || ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a> == NULL)</div>
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span> {</div>
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context or image stream.&quot;</span>);</div>
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_single_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> }</div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> </div>
<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span> <span class="comment">// Should not really be here</span></div>
<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a8c2110cbb42bde3c0e302d3429024b04">tableShift</a> != 0)</div>
<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span> {</div>
<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;DDT table shift is not zero, but we are in single-level DDT setting.&quot;</span>);</div>
<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_single_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> }</div>
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span> </div>
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span> <span class="comment">// Calculate positive or negative sector</span></div>
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> <span class="keywordflow">if</span>(negative)</div>
<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span> sector_address = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a> - sector_address;</div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span> sector_address += ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a>;</div>
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> </div>
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> <span class="keywordflow">if</span>(*ddt_entry == 0)</div>
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span> {</div>
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> <span class="keyword">const</span> uint64_t block_index = block_offset &gt;&gt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>;</div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> *ddt_entry = offset &amp; (1ULL &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>) - 1 |</div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> block_index &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>;</div>
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> </div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> <span class="comment">// Overflow detection for DDT entry</span></div>
<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span> <span class="keywordflow">if</span>(*ddt_entry &gt; 0xFFFFFFFFFFFFFFF)</div>
<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> {</div>
<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;DDT overflow: media does not fit in big DDT&quot;</span>);</div>
<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_single_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> }</div>
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span> }</div>
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span> </div>
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span> <span class="comment">// Sector status can be different from previous deduplicated sector</span></div>
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span> *ddt_entry &amp;= 0x0FFFFFFFFFFFFFFF;</div>
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span> *ddt_entry |= (uint64_t)sector_status &lt;&lt; 60;</div>
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span> </div>
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Setting big single-level DDT entry %d to %ull&quot;</span>, sector_address, (uint64_t)*ddt_entry);</div>
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a3c7b902731274622296d04564b193b64">user_data_ddt2</a>[sector_address] = *ddt_entry;</div>
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a7ae2128b4ae5511c2c601ec8e8f66387">dirty_single_level_ddt</a> = <span class="keyword">true</span>; <span class="comment">// Mark single-level DDT as dirty</span></div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> </div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_single_level_v2() = true&quot;</span>);</div>
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span>}</div>
</div>
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span></div>
<div class="foldopen" id="foldopen01096" data-start="{" data-end="}">
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"><a class="line" href="internal_8h.html#a69ff2e68fe4d92a2d2d469ac69f41d82"> 1096</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="ddt__v2_8c.html#a69ff2e68fe4d92a2d2d469ac69f41d82">set_ddt_multi_level_v2</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx, uint64_t sector_address, <span class="keywordtype">bool</span> negative, uint64_t offset,</div>
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> uint64_t block_offset, uint8_t sector_status, uint64_t *ddt_entry)</div>
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span>{</div>
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Entering set_ddt_multi_level_v2(%p, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %d, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %d)&quot;</span>, ctx, sector_address,</div>
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> negative, offset, block_offset, sector_status);</div>
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> </div>
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> uint64_t items_per_ddt_entry = 0;</div>
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> uint64_t ddt_position = 0;</div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> uint64_t secondary_ddt_offset = 0;</div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> uint64_t block_index = 0;</div>
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> uint8_t *buffer = NULL;</div>
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> <a class="code hl_struct" href="structcrc64__ctx.html">crc64_ctx</a> *crc64_context = NULL;</div>
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> uint64_t crc64 = 0;</div>
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span> <a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a> ddt_header;</div>
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> <span class="keywordtype">size_t</span> written_bytes = 0;</div>
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span> <span class="keywordtype">long</span> end_of_file = 0;</div>
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> <span class="keywordtype">bool</span> create_new_table = <span class="keyword">false</span>;</div>
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> </div>
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> <span class="comment">// Check if the context and image stream are valid</span></div>
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span> <span class="keywordflow">if</span>(ctx == NULL || ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a> == NULL)</div>
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> {</div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context or image stream.&quot;</span>);</div>
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> }</div>
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> </div>
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span> <span class="comment">// Should not really be here</span></div>
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a8c2110cbb42bde3c0e302d3429024b04">tableShift</a> == 0)</div>
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> {</div>
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;DDT table shift is zero, but we are in multi-level DDT setting.&quot;</span>);</div>
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span> }</div>
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> </div>
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span> <span class="comment">// Calculate positive or negative sector</span></div>
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span> <span class="keywordflow">if</span>(negative)</div>
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> sector_address = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a> - sector_address;</div>
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span> sector_address += ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a>;</div>
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> </div>
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> <span class="comment">// Step 1: Calculate the corresponding secondary level table</span></div>
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span> items_per_ddt_entry = 1 &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a8c2110cbb42bde3c0e302d3429024b04">tableShift</a>;</div>
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> ddt_position = sector_address / items_per_ddt_entry;</div>
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span> secondary_ddt_offset = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a3c7b902731274622296d04564b193b64">user_data_ddt2</a>[ddt_position];</div>
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> </div>
<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span> <span class="comment">// Position in file of the child DDT table</span></div>
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> secondary_ddt_offset *= 1 &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>;</div>
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span> </div>
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> <span class="comment">// Step 2: Check if it corresponds to the currently in-memory cached secondary level table</span></div>
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a> == secondary_ddt_offset &amp;&amp; secondary_ddt_offset != 0)</div>
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> {</div>
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span> <span class="comment">// Update the corresponding DDT entry directly in the cached table</span></div>
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span> <span class="keywordflow">if</span>(*ddt_entry == 0)</div>
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> {</div>
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span> block_index = block_offset &gt;&gt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>;</div>
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> *ddt_entry = offset &amp; (1ULL &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>) - 1 |</div>
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> block_index &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>;</div>
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> </div>
<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span> <span class="comment">// Overflow detection for DDT entry</span></div>
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span> <span class="keywordflow">if</span>(*ddt_entry &gt; 0xFFFFFFFFFFFFFFF)</div>
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> {</div>
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;DDT overflow: media does not fit in big DDT&quot;</span>);</div>
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> }</div>
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> }</div>
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> </div>
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> <span class="comment">// Sector status can be different from previous deduplicated sector</span></div>
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> *ddt_entry &amp;= 0x0FFFFFFFFFFFFFFF;</div>
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> *ddt_entry |= (uint64_t)sector_status &lt;&lt; 60;</div>
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> </div>
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Setting small secondary DDT entry %d to %ull&quot;</span>, sector_address % items_per_ddt_entry,</div>
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> (uint64_t)*ddt_entry);</div>
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>[sector_address % items_per_ddt_entry] = *ddt_entry;</div>
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ad1e4ceb44652cacfc63e0e2c95f570c6">dirty_secondary_ddt</a> = <span class="keyword">true</span>; <span class="comment">// Mark secondary DDT as dirty</span></div>
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> </div>
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Updated cached secondary DDT entry at position %&quot;</span> PRIu64, sector_address % items_per_ddt_entry);</div>
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = true&quot;</span>);</div>
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span> }</div>
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> </div>
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> <span class="comment">// Step 2.5: Handle case where we have a cached secondary DDT that has never been written to disk</span></div>
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> <span class="comment">// but does not contain the requested block</span></div>
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a> == 0 &amp;&amp; (ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a> != NULL))</div>
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span> {</div>
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span> <span class="comment">// Only write the cached table to disk if the requested block belongs to a different DDT position</span></div>
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span> <span class="keywordflow">if</span>(ddt_position != ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ae32b62ecd08a309c5848a5503b020689">cached_ddt_position</a>)</div>
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span> {</div>
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Current secondary DDT in memory belongs to position %&quot;</span> PRIu64</div>
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> <span class="stringliteral">&quot; but requested block needs position %&quot;</span> PRIu64,</div>
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ae32b62ecd08a309c5848a5503b020689">cached_ddt_position</a>, ddt_position);</div>
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> </div>
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span> <span class="comment">// Write the cached DDT to disk before proceeding with the new one</span></div>
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> </div>
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> <span class="comment">// Close the current data block first</span></div>
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a80b7de958916f11cc61ef6871a376a92">writing_buffer</a> != NULL) <a class="code hl_function" href="internal_8h.html#a2402812f5e04ba16765208c0b70fa6c5">aaruf_close_current_block</a>(ctx);</div>
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span> </div>
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span> <span class="comment">// Get current position and seek to end of file</span></div>
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span> fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, 0, SEEK_END);</div>
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> end_of_file = ftell(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> </div>
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> <span class="comment">// Align to block boundary</span></div>
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span> uint64_t alignment_mask = (1ULL &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>) - 1;</div>
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span> end_of_file = end_of_file + alignment_mask &amp; ~alignment_mask;</div>
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span> fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, end_of_file, SEEK_SET);</div>
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> </div>
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> <span class="comment">// Prepare DDT header for the never-written cached table</span></div>
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> memset(&amp;ddt_header, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>));</div>
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a80a88ec68cd0332a57886ac363bfa4d1">identifier</a> = <a class="code hl_enumvalue" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3a76b6a78e4e765794c4cca2dde5bfc3fb">DeDuplicationTableSecondary</a>;</div>
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a14f9ccf36df63e036d69291182cf7bbb">type</a> = <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a73bb26133ccd01972725933b00ec3a06">UserData</a>;</div>
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a130daf19dbed426f1c4c6f82691bc054">compression_enabled</a> ? <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a> : <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a>; <span class="comment">// Use no compression for simplicity</span></div>
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a68f4825db4e22906af0e55a359360656">levels</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a68f4825db4e22906af0e55a359360656">levels</a>;</div>
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ac8ec7921a5651b5107eda4e99b488798">tableLevel</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ac8ec7921a5651b5107eda4e99b488798">tableLevel</a> + 1;</div>
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#af71423c2a8c7fa89dfd2313b456c57a2">previousLevelOffset</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a88effb2eb082320b5b31d729981cf2d4">primary_ddt_offset</a>;</div>
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a>;</div>
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a9571c1d556e33537935bab1edba31135">blocks</a> = items_per_ddt_entry;</div>
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a2bfa558d9d778ae6b86d52520e278b66">overflow</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a2bfa558d9d778ae6b86d52520e278b66">overflow</a>;</div>
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a238a2ca31ce0f60af3e59a1cb3e2e73c">start</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ae32b62ecd08a309c5848a5503b020689">cached_ddt_position</a> * items_per_ddt_entry; <span class="comment">// Use cached position with table shift</span></div>
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>;</div>
<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>;</div>
<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a8c2110cbb42bde3c0e302d3429024b04">tableShift</a> = 0; <span class="comment">// Secondary tables are single level</span></div>
<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4e90c22109c3fff37b526a113b094a50">entries</a> = items_per_ddt_entry;</div>
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> </div>
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span> <span class="comment">// Calculate data size</span></div>
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> </div>
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a> = items_per_ddt_entry * <span class="keyword">sizeof</span>(uint64_t);</div>
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> </div>
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span> <span class="comment">// Calculate CRC64 of the data</span></div>
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> crc64_context = <a class="code hl_function" href="decls_8h.html#a66567ca64e31a687d4982cb254b45196">aaruf_crc64_init</a>();</div>
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span> <span class="keywordflow">if</span>(crc64_context == NULL)</div>
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> {</div>
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not initialize CRC64.&quot;</span>);</div>
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> }</div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> </div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> <a class="code hl_function" href="decls_8h.html#a1fb4423a841ccd728e3ad0d028cbc9b4">aaruf_crc64_update</a>(crc64_context, (uint8_t *)ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>, (uint32_t)ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> </div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> <a class="code hl_function" href="decls_8h.html#ae48cfb59c6585e9ffd4cd1a97044891f">aaruf_crc64_final</a>(crc64_context, &amp;crc64);</div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a> = crc64;</div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> </div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> uint8_t *cmp_buffer = NULL;</div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> uint8_t lzma_properties[<a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>] = {0};</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> </div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> == <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a>)</div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> {</div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> </div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> cmp_buffer = (uint8_t *)ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>;</div>
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a0799563cf99f679ee26840e32d52ca0f">cmpCrc64</a> = ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>;</div>
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> }</div>
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> {</div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> cmp_buffer = malloc((<span class="keywordtype">size_t</span>)ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a> * 2); <span class="comment">// Allocate double size for compression</span></div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span> <span class="keywordflow">if</span>(cmp_buffer == NULL)</div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> {</div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Failed to allocate memory for secondary DDT v2 compression&quot;</span>);</div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a35a771e3648bf971a004d4b2be9b5ec4">AARUF_ERROR_NOT_ENOUGH_MEMORY</a>;</div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> }</div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> </div>
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> <span class="keywordtype">size_t</span> dst_size = (size_t)ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a> * 2 * 2;</div>
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> <span class="keywordtype">size_t</span> props_size = <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>;</div>
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span> <a class="code hl_function" href="decls_8h.html#a0e69fad529047d6fe9440b1fc66c3f85">aaruf_lzma_encode_buffer</a>(cmp_buffer, &amp;dst_size, (uint8_t *)ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>,</div>
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>, lzma_properties, &amp;props_size, 9, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adc67f6a6ef1602648bb064d47eb1fe88">lzma_dict_size</a>, 4, 0,</div>
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span> 2, 273, 8);</div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> </div>
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> = (uint32_t)dst_size;</div>
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span> </div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> &gt;= ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>)</div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> {</div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> = <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a>;</div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> free(cmp_buffer);</div>
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> </div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> cmp_buffer = (uint8_t *)ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>;</div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> }</div>
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> }</div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> </div>
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> == <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a>)</div>
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> {</div>
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> = ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>;</div>
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a0799563cf99f679ee26840e32d52ca0f">cmpCrc64</a> = ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>;</div>
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> }</div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a0799563cf99f679ee26840e32d52ca0f">cmpCrc64</a> = <a class="code hl_function" href="decls_8h.html#a0fee4834bf0747bcd933c4e754aa4692">aaruf_crc64_data</a>(cmp_buffer, (uint32_t)ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a>);</div>
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> </div>
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> == <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a>) ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> += <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>;</div>
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> </div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> <span class="comment">// Write header</span></div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> written_bytes = fwrite(&amp;ddt_header, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>), 1, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> <span class="keywordflow">if</span>(written_bytes != 1)</div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> {</div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not write never-written DDT header to file.&quot;</span>);</div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> }</div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> </div>
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> <span class="comment">// Write data</span></div>
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> == <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a>) fwrite(lzma_properties, <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>, 1, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> </div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> <span class="keywordflow">if</span>(fwrite(cmp_buffer, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a>, 1, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>) != 1)</div>
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> {</div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not write never-written DDT data to file.&quot;</span>);</div>
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> }</div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> </div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> == <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a>) free(cmp_buffer);</div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> </div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> <span class="comment">// Add index entry for the newly written secondary DDT</span></div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> <a class="code hl_struct" href="structIndexEntry.html">IndexEntry</a> new_ddt_entry;</div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> new_ddt_entry.<a class="code hl_variable" href="structIndexEntry.html#a4b5c7115ac83019c3f77c6f047e5f75e">blockType</a> = <a class="code hl_enumvalue" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3a76b6a78e4e765794c4cca2dde5bfc3fb">DeDuplicationTableSecondary</a>;</div>
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span> new_ddt_entry.<a class="code hl_variable" href="structIndexEntry.html#ae5d35082a756e0388efbf5fabbe93d10">dataType</a> = <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a73bb26133ccd01972725933b00ec3a06">UserData</a>;</div>
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> new_ddt_entry.<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a> = end_of_file;</div>
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> </div>
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> utarray_push_back(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab97a719a5b4186695b67143db7376152">index_entries</a>, &amp;new_ddt_entry);</div>
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a63616c8450e9e1853e0645714fe310cb">dirty_index_block</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Added new DDT index entry for never-written table at offset %&quot;</span> PRIu64, end_of_file);</div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> </div>
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> <span class="comment">// Update the primary level table entry to point to the new location of the secondary table</span></div>
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span> uint64_t new_secondary_table_block_offset = end_of_file &gt;&gt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>;</div>
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span> </div>
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a3c7b902731274622296d04564b193b64">user_data_ddt2</a>[ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ae32b62ecd08a309c5848a5503b020689">cached_ddt_position</a>] = new_secondary_table_block_offset;</div>
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2f095c3433eb29d2bf421b1e3355e72d">dirty_primary_ddt</a> = <span class="keyword">true</span>; <span class="comment">// Mark primary DDT as dirty</span></div>
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> </div>
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span> <span class="comment">// Write the updated primary table back to its original position in the file</span></div>
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> <span class="keywordtype">long</span> saved_pos = ftell(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a88effb2eb082320b5b31d729981cf2d4">primary_ddt_offset</a> + <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>), SEEK_SET);</div>
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> </div>
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> <span class="keywordtype">size_t</span> primary_table_size = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a4e90c22109c3fff37b526a113b094a50">entries</a> * <span class="keyword">sizeof</span>(uint64_t);</div>
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> </div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> written_bytes = fwrite(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a3c7b902731274622296d04564b193b64">user_data_ddt2</a>, primary_table_size, 1, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> </div>
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> <span class="keywordflow">if</span>(written_bytes != 1)</div>
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> {</div>
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not flush primary DDT table to file after writing never-written secondary table.&quot;</span>);</div>
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> }</div>
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> </div>
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> <span class="comment">// Update nextBlockPosition to ensure future blocks don&#39;t overwrite the DDT</span></div>
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> uint64_t ddt_total_size = <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>) + ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>;</div>
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a939b702f75e80062bc635add4c3ab142">next_block_position</a> = end_of_file + ddt_total_size + alignment_mask &amp; ~alignment_mask;</div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> block_offset = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a939b702f75e80062bc635add4c3ab142">next_block_position</a>;</div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> offset = 0;</div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Updated nextBlockPosition after never-written DDT write to %&quot;</span> PRIu64, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a939b702f75e80062bc635add4c3ab142">next_block_position</a>);</div>
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> </div>
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> <span class="comment">// Free the cached table</span></div>
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> </div>
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> free(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>);</div>
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a> = NULL;</div>
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> </div>
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> <span class="comment">// Reset cached values since we&#39;ve written and freed the table</span></div>
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a> = 0;</div>
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ae32b62ecd08a309c5848a5503b020689">cached_ddt_position</a> = 0;</div>
<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span> </div>
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span> <span class="comment">// Restore file position</span></div>
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, saved_pos, SEEK_SET);</div>
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span> </div>
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Successfully wrote never-written cached secondary DDT to disk&quot;</span>);</div>
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span> }</div>
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span> <span class="comment">// The cached DDT is actually for the requested block range, so we can use it directly</span></div>
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Cached DDT is for the correct block range, using it directly&quot;</span>);</div>
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span> <span class="comment">// No need to write to disk, just continue with the cached table</span></div>
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> }</div>
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span> </div>
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span> <span class="comment">// Step 3: Write the currently in-memory cached secondary level table to the end of the file</span></div>
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a> != 0)</div>
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span> {</div>
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span> <span class="keywordtype">long</span> current_pos = 0;</div>
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span> <span class="comment">// Close the current data block first</span></div>
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a80b7de958916f11cc61ef6871a376a92">writing_buffer</a> != NULL) <a class="code hl_function" href="internal_8h.html#a2402812f5e04ba16765208c0b70fa6c5">aaruf_close_current_block</a>(ctx);</div>
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span> </div>
<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span> <span class="comment">// Get current position and seek to end of file</span></div>
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span> current_pos = ftell(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span> fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, 0, SEEK_END);</div>
<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span> end_of_file = ftell(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span> </div>
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span> <span class="comment">// Align to block boundary</span></div>
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span> uint64_t alignment_mask = (1ULL &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>) - 1;</div>
<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span> end_of_file = end_of_file + alignment_mask &amp; ~alignment_mask;</div>
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, end_of_file, SEEK_SET);</div>
<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"> 1377</span> </div>
<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span> <span class="comment">// Prepare DDT header for the cached table</span></div>
<div class="line"><a id="l01379" name="l01379"></a><span class="lineno"> 1379</span> memset(&amp;ddt_header, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>));</div>
<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a80a88ec68cd0332a57886ac363bfa4d1">identifier</a> = <a class="code hl_enumvalue" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3a76b6a78e4e765794c4cca2dde5bfc3fb">DeDuplicationTableSecondary</a>;</div>
<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a14f9ccf36df63e036d69291182cf7bbb">type</a> = <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a73bb26133ccd01972725933b00ec3a06">UserData</a>;</div>
<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"> 1382</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a130daf19dbed426f1c4c6f82691bc054">compression_enabled</a> ? <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a> : <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a>;</div>
<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a68f4825db4e22906af0e55a359360656">levels</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a68f4825db4e22906af0e55a359360656">levels</a>;</div>
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"> 1384</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ac8ec7921a5651b5107eda4e99b488798">tableLevel</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ac8ec7921a5651b5107eda4e99b488798">tableLevel</a> + 1;</div>
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#af71423c2a8c7fa89dfd2313b456c57a2">previousLevelOffset</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a88effb2eb082320b5b31d729981cf2d4">primary_ddt_offset</a>; <span class="comment">// Set to primary DDT table location</span></div>
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">negative</a>;</div>
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a9571c1d556e33537935bab1edba31135">blocks</a> = items_per_ddt_entry;</div>
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a2bfa558d9d778ae6b86d52520e278b66">overflow</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a2bfa558d9d778ae6b86d52520e278b66">overflow</a>;</div>
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a238a2ca31ce0f60af3e59a1cb3e2e73c">start</a> = ddt_position * items_per_ddt_entry; <span class="comment">// First block this DDT table references</span></div>
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>;</div>
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a> = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>;</div>
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a8c2110cbb42bde3c0e302d3429024b04">tableShift</a> = 0; <span class="comment">// Secondary tables are single level</span></div>
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4e90c22109c3fff37b526a113b094a50">entries</a> = items_per_ddt_entry;</div>
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span> </div>
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> <span class="comment">// Calculate data size</span></div>
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span> </div>
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a> = items_per_ddt_entry * <span class="keyword">sizeof</span>(uint64_t);</div>
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> </div>
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> <span class="comment">// Calculate CRC64 of the data</span></div>
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span> crc64_context = <a class="code hl_function" href="decls_8h.html#a66567ca64e31a687d4982cb254b45196">aaruf_crc64_init</a>();</div>
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> <span class="keywordflow">if</span>(crc64_context == NULL)</div>
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> {</div>
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not initialize CRC64.&quot;</span>);</div>
<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span> }</div>
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span> </div>
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> <a class="code hl_function" href="decls_8h.html#a1fb4423a841ccd728e3ad0d028cbc9b4">aaruf_crc64_update</a>(crc64_context, (uint8_t *)ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> </div>
<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span> <a class="code hl_function" href="decls_8h.html#ae48cfb59c6585e9ffd4cd1a97044891f">aaruf_crc64_final</a>(crc64_context, &amp;crc64);</div>
<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a> = crc64;</div>
<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span> </div>
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span> uint8_t *cmp_buffer = NULL;</div>
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span> uint8_t lzma_properties[<a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>] = {0};</div>
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span> </div>
<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"> 1416</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> == <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a>)</div>
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> {</div>
<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span> </div>
<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span> cmp_buffer = (uint8_t *)ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>;</div>
<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a0799563cf99f679ee26840e32d52ca0f">cmpCrc64</a> = ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>;</div>
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span> }</div>
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span> {</div>
<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span> cmp_buffer = malloc((<span class="keywordtype">size_t</span>)ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a> * 2); <span class="comment">// Allocate double size for compression</span></div>
<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span> <span class="keywordflow">if</span>(cmp_buffer == NULL)</div>
<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span> {</div>
<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Failed to allocate memory for secondary DDT v2 compression&quot;</span>);</div>
<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a35a771e3648bf971a004d4b2be9b5ec4">AARUF_ERROR_NOT_ENOUGH_MEMORY</a>;</div>
<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> }</div>
<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span> </div>
<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span> <span class="keywordtype">size_t</span> dst_size = (size_t)ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a> * 2 * 2;</div>
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> <span class="keywordtype">size_t</span> props_size = <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>;</div>
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span> <a class="code hl_function" href="decls_8h.html#a0e69fad529047d6fe9440b1fc66c3f85">aaruf_lzma_encode_buffer</a>(cmp_buffer, &amp;dst_size, (uint8_t *)ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>,</div>
<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span> lzma_properties, &amp;props_size, 9, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adc67f6a6ef1602648bb064d47eb1fe88">lzma_dict_size</a>, 4, 0, 2, 273, 8);</div>
<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> </div>
<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> = (uint32_t)dst_size;</div>
<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"> 1437</span> </div>
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"> 1438</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> &gt;= ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>)</div>
<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span> {</div>
<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"> 1440</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> = <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a>;</div>
<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"> 1441</span> free(cmp_buffer);</div>
<div class="line"><a id="l01442" name="l01442"></a><span class="lineno"> 1442</span> </div>
<div class="line"><a id="l01443" name="l01443"></a><span class="lineno"> 1443</span> cmp_buffer = (uint8_t *)ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>;</div>
<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span> }</div>
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span> }</div>
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span> </div>
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> == <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a>)</div>
<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span> {</div>
<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> = ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>;</div>
<div class="line"><a id="l01450" name="l01450"></a><span class="lineno"> 1450</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a0799563cf99f679ee26840e32d52ca0f">cmpCrc64</a> = ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>;</div>
<div class="line"><a id="l01451" name="l01451"></a><span class="lineno"> 1451</span> }</div>
<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"> 1452</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"> 1453</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a0799563cf99f679ee26840e32d52ca0f">cmpCrc64</a> = <a class="code hl_function" href="decls_8h.html#a0fee4834bf0747bcd933c4e754aa4692">aaruf_crc64_data</a>(cmp_buffer, (uint32_t)ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a>);</div>
<div class="line"><a id="l01454" name="l01454"></a><span class="lineno"> 1454</span> </div>
<div class="line"><a id="l01455" name="l01455"></a><span class="lineno"> 1455</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> == <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a>) ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a> += <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>;</div>
<div class="line"><a id="l01456" name="l01456"></a><span class="lineno"> 1456</span> </div>
<div class="line"><a id="l01457" name="l01457"></a><span class="lineno"> 1457</span> <span class="comment">// Write header</span></div>
<div class="line"><a id="l01458" name="l01458"></a><span class="lineno"> 1458</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> == <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a>) fwrite(lzma_properties, <a class="code hl_define" href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a>, 1, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01459" name="l01459"></a><span class="lineno"> 1459</span> </div>
<div class="line"><a id="l01460" name="l01460"></a><span class="lineno"> 1460</span> written_bytes = fwrite(&amp;ddt_header, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>), 1, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01461" name="l01461"></a><span class="lineno"> 1461</span> <span class="keywordflow">if</span>(written_bytes != 1)</div>
<div class="line"><a id="l01462" name="l01462"></a><span class="lineno"> 1462</span> {</div>
<div class="line"><a id="l01463" name="l01463"></a><span class="lineno"> 1463</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not write DDT header to file.&quot;</span>);</div>
<div class="line"><a id="l01464" name="l01464"></a><span class="lineno"> 1464</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01465" name="l01465"></a><span class="lineno"> 1465</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01466" name="l01466"></a><span class="lineno"> 1466</span> }</div>
<div class="line"><a id="l01467" name="l01467"></a><span class="lineno"> 1467</span> </div>
<div class="line"><a id="l01468" name="l01468"></a><span class="lineno"> 1468</span> <span class="comment">// Write data</span></div>
<div class="line"><a id="l01469" name="l01469"></a><span class="lineno"> 1469</span> written_bytes = fwrite(cmp_buffer, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">cmpLength</a>, 1, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01470" name="l01470"></a><span class="lineno"> 1470</span> </div>
<div class="line"><a id="l01471" name="l01471"></a><span class="lineno"> 1471</span> <span class="keywordflow">if</span>(written_bytes != 1)</div>
<div class="line"><a id="l01472" name="l01472"></a><span class="lineno"> 1472</span> {</div>
<div class="line"><a id="l01473" name="l01473"></a><span class="lineno"> 1473</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not write DDT data to file.&quot;</span>);</div>
<div class="line"><a id="l01474" name="l01474"></a><span class="lineno"> 1474</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01475" name="l01475"></a><span class="lineno"> 1475</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01476" name="l01476"></a><span class="lineno"> 1476</span> }</div>
<div class="line"><a id="l01477" name="l01477"></a><span class="lineno"> 1477</span> </div>
<div class="line"><a id="l01478" name="l01478"></a><span class="lineno"> 1478</span> <span class="keywordflow">if</span>(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">compression</a> == <a class="code hl_enumvalue" href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a>) free(cmp_buffer);</div>
<div class="line"><a id="l01479" name="l01479"></a><span class="lineno"> 1479</span> </div>
<div class="line"><a id="l01480" name="l01480"></a><span class="lineno"> 1480</span> <span class="comment">// Update index: remove old entry and add new one for the evicted secondary DDT</span></div>
<div class="line"><a id="l01481" name="l01481"></a><span class="lineno"> 1481</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Updating index for evicted secondary DDT&quot;</span>);</div>
<div class="line"><a id="l01482" name="l01482"></a><span class="lineno"> 1482</span> </div>
<div class="line"><a id="l01483" name="l01483"></a><span class="lineno"> 1483</span> <span class="comment">// Remove old index entry for the cached DDT</span></div>
<div class="line"><a id="l01484" name="l01484"></a><span class="lineno"> 1484</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a> != 0)</div>
<div class="line"><a id="l01485" name="l01485"></a><span class="lineno"> 1485</span> {</div>
<div class="line"><a id="l01486" name="l01486"></a><span class="lineno"> 1486</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Removing old index entry for DDT at offset %&quot;</span> PRIu64, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a>);</div>
<div class="line"><a id="l01487" name="l01487"></a><span class="lineno"> 1487</span> <a class="code hl_struct" href="structIndexEntry.html">IndexEntry</a> *entry = NULL;</div>
<div class="line"><a id="l01488" name="l01488"></a><span class="lineno"> 1488</span> </div>
<div class="line"><a id="l01489" name="l01489"></a><span class="lineno"> 1489</span> <span class="comment">// Find and remove the old index entry</span></div>
<div class="line"><a id="l01490" name="l01490"></a><span class="lineno"> 1490</span> <span class="keywordflow">for</span>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0; i &lt; utarray_len(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab97a719a5b4186695b67143db7376152">index_entries</a>); i++)</div>
<div class="line"><a id="l01491" name="l01491"></a><span class="lineno"> 1491</span> {</div>
<div class="line"><a id="l01492" name="l01492"></a><span class="lineno"> 1492</span> entry = (<a class="code hl_struct" href="structIndexEntry.html">IndexEntry</a> *)utarray_eltptr(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab97a719a5b4186695b67143db7376152">index_entries</a>, i);</div>
<div class="line"><a id="l01493" name="l01493"></a><span class="lineno"> 1493</span> <span class="keywordflow">if</span>(entry &amp;&amp; entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a> == ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a> &amp;&amp; entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a4b5c7115ac83019c3f77c6f047e5f75e">blockType</a> == <a class="code hl_enumvalue" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3a76b6a78e4e765794c4cca2dde5bfc3fb">DeDuplicationTableSecondary</a>)</div>
<div class="line"><a id="l01494" name="l01494"></a><span class="lineno"> 1494</span> {</div>
<div class="line"><a id="l01495" name="l01495"></a><span class="lineno"> 1495</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Found old DDT index entry at position %u, removing&quot;</span>, i);</div>
<div class="line"><a id="l01496" name="l01496"></a><span class="lineno"> 1496</span> utarray_erase(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab97a719a5b4186695b67143db7376152">index_entries</a>, i, 1);</div>
<div class="line"><a id="l01497" name="l01497"></a><span class="lineno"> 1497</span> <span class="keywordflow">break</span>;</div>
<div class="line"><a id="l01498" name="l01498"></a><span class="lineno"> 1498</span> }</div>
<div class="line"><a id="l01499" name="l01499"></a><span class="lineno"> 1499</span> }</div>
<div class="line"><a id="l01500" name="l01500"></a><span class="lineno"> 1500</span> }</div>
<div class="line"><a id="l01501" name="l01501"></a><span class="lineno"> 1501</span> </div>
<div class="line"><a id="l01502" name="l01502"></a><span class="lineno"> 1502</span> <span class="comment">// Add new index entry for the newly written secondary DDT</span></div>
<div class="line"><a id="l01503" name="l01503"></a><span class="lineno"> 1503</span> <a class="code hl_struct" href="structIndexEntry.html">IndexEntry</a> new_ddt_entry;</div>
<div class="line"><a id="l01504" name="l01504"></a><span class="lineno"> 1504</span> new_ddt_entry.<a class="code hl_variable" href="structIndexEntry.html#a4b5c7115ac83019c3f77c6f047e5f75e">blockType</a> = <a class="code hl_enumvalue" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3a76b6a78e4e765794c4cca2dde5bfc3fb">DeDuplicationTableSecondary</a>;</div>
<div class="line"><a id="l01505" name="l01505"></a><span class="lineno"> 1505</span> new_ddt_entry.<a class="code hl_variable" href="structIndexEntry.html#ae5d35082a756e0388efbf5fabbe93d10">dataType</a> = <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a73bb26133ccd01972725933b00ec3a06">UserData</a>;</div>
<div class="line"><a id="l01506" name="l01506"></a><span class="lineno"> 1506</span> new_ddt_entry.<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a> = end_of_file;</div>
<div class="line"><a id="l01507" name="l01507"></a><span class="lineno"> 1507</span> </div>
<div class="line"><a id="l01508" name="l01508"></a><span class="lineno"> 1508</span> utarray_push_back(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab97a719a5b4186695b67143db7376152">index_entries</a>, &amp;new_ddt_entry);</div>
<div class="line"><a id="l01509" name="l01509"></a><span class="lineno"> 1509</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a63616c8450e9e1853e0645714fe310cb">dirty_index_block</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01510" name="l01510"></a><span class="lineno"> 1510</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Added new DDT index entry at offset %&quot;</span> PRIu64, end_of_file);</div>
<div class="line"><a id="l01511" name="l01511"></a><span class="lineno"> 1511</span> </div>
<div class="line"><a id="l01512" name="l01512"></a><span class="lineno"> 1512</span> <span class="comment">// Step 4: Update the primary level table entry and flush it back to file</span></div>
<div class="line"><a id="l01513" name="l01513"></a><span class="lineno"> 1513</span> uint64_t new_secondary_table_block_offset = end_of_file &gt;&gt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>;</div>
<div class="line"><a id="l01514" name="l01514"></a><span class="lineno"> 1514</span> </div>
<div class="line"><a id="l01515" name="l01515"></a><span class="lineno"> 1515</span> <span class="comment">// Update the primary table entry to point to the new location of the secondary table</span></div>
<div class="line"><a id="l01516" name="l01516"></a><span class="lineno"> 1516</span> <span class="comment">// Use ddtPosition which was calculated from sectorAddress, not cachedDdtOffset</span></div>
<div class="line"><a id="l01517" name="l01517"></a><span class="lineno"> 1517</span> </div>
<div class="line"><a id="l01518" name="l01518"></a><span class="lineno"> 1518</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a3c7b902731274622296d04564b193b64">user_data_ddt2</a>[ddt_position] = new_secondary_table_block_offset;</div>
<div class="line"><a id="l01519" name="l01519"></a><span class="lineno"> 1519</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2f095c3433eb29d2bf421b1e3355e72d">dirty_primary_ddt</a> = <span class="keyword">true</span>; <span class="comment">// Mark primary DDT as dirty</span></div>
<div class="line"><a id="l01520" name="l01520"></a><span class="lineno"> 1520</span> </div>
<div class="line"><a id="l01521" name="l01521"></a><span class="lineno"> 1521</span> <span class="comment">// Write the updated primary table back to its original position in the file</span></div>
<div class="line"><a id="l01522" name="l01522"></a><span class="lineno"> 1522</span> <span class="keywordtype">long</span> saved_pos = ftell(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01523" name="l01523"></a><span class="lineno"> 1523</span> fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a88effb2eb082320b5b31d729981cf2d4">primary_ddt_offset</a> + <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>), SEEK_SET);</div>
<div class="line"><a id="l01524" name="l01524"></a><span class="lineno"> 1524</span> </div>
<div class="line"><a id="l01525" name="l01525"></a><span class="lineno"> 1525</span> <span class="keywordtype">size_t</span> primary_table_size = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#a4e90c22109c3fff37b526a113b094a50">entries</a> * <span class="keyword">sizeof</span>(uint64_t);</div>
<div class="line"><a id="l01526" name="l01526"></a><span class="lineno"> 1526</span> </div>
<div class="line"><a id="l01527" name="l01527"></a><span class="lineno"> 1527</span> written_bytes = fwrite(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a3c7b902731274622296d04564b193b64">user_data_ddt2</a>, primary_table_size, 1, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01528" name="l01528"></a><span class="lineno"> 1528</span> </div>
<div class="line"><a id="l01529" name="l01529"></a><span class="lineno"> 1529</span> <span class="keywordflow">if</span>(written_bytes != 1)</div>
<div class="line"><a id="l01530" name="l01530"></a><span class="lineno"> 1530</span> {</div>
<div class="line"><a id="l01531" name="l01531"></a><span class="lineno"> 1531</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not flush primary DDT table to file.&quot;</span>);</div>
<div class="line"><a id="l01532" name="l01532"></a><span class="lineno"> 1532</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01533" name="l01533"></a><span class="lineno"> 1533</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01534" name="l01534"></a><span class="lineno"> 1534</span> }</div>
<div class="line"><a id="l01535" name="l01535"></a><span class="lineno"> 1535</span> </div>
<div class="line"><a id="l01536" name="l01536"></a><span class="lineno"> 1536</span> <span class="comment">// Update nextBlockPosition to ensure future blocks don&#39;t overwrite the DDT</span></div>
<div class="line"><a id="l01537" name="l01537"></a><span class="lineno"> 1537</span> uint64_t ddt_total_size = <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>) + ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>;</div>
<div class="line"><a id="l01538" name="l01538"></a><span class="lineno"> 1538</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a939b702f75e80062bc635add4c3ab142">next_block_position</a> = end_of_file + ddt_total_size + alignment_mask &amp; ~alignment_mask;</div>
<div class="line"><a id="l01539" name="l01539"></a><span class="lineno"> 1539</span> block_offset = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a939b702f75e80062bc635add4c3ab142">next_block_position</a>;</div>
<div class="line"><a id="l01540" name="l01540"></a><span class="lineno"> 1540</span> offset = 0;</div>
<div class="line"><a id="l01541" name="l01541"></a><span class="lineno"> 1541</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Updated nextBlockPosition after DDT write to %&quot;</span> PRIu64, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a939b702f75e80062bc635add4c3ab142">next_block_position</a>);</div>
<div class="line"><a id="l01542" name="l01542"></a><span class="lineno"> 1542</span> </div>
<div class="line"><a id="l01543" name="l01543"></a><span class="lineno"> 1543</span> fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, saved_pos, SEEK_SET);</div>
<div class="line"><a id="l01544" name="l01544"></a><span class="lineno"> 1544</span> </div>
<div class="line"><a id="l01545" name="l01545"></a><span class="lineno"> 1545</span> <span class="comment">// Free the cached table</span></div>
<div class="line"><a id="l01546" name="l01546"></a><span class="lineno"> 1546</span> </div>
<div class="line"><a id="l01547" name="l01547"></a><span class="lineno"> 1547</span> free(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>);</div>
<div class="line"><a id="l01548" name="l01548"></a><span class="lineno"> 1548</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a> = NULL;</div>
<div class="line"><a id="l01549" name="l01549"></a><span class="lineno"> 1549</span> </div>
<div class="line"><a id="l01550" name="l01550"></a><span class="lineno"> 1550</span> <span class="comment">// Restore file position</span></div>
<div class="line"><a id="l01551" name="l01551"></a><span class="lineno"> 1551</span> fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, current_pos, SEEK_SET);</div>
<div class="line"><a id="l01552" name="l01552"></a><span class="lineno"> 1552</span> }</div>
<div class="line"><a id="l01553" name="l01553"></a><span class="lineno"> 1553</span> </div>
<div class="line"><a id="l01554" name="l01554"></a><span class="lineno"> 1554</span> <span class="comment">// Step 5: Check if the specified block already has an existing secondary level table</span></div>
<div class="line"><a id="l01555" name="l01555"></a><span class="lineno"> 1555</span> create_new_table = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a> == NULL;</div>
<div class="line"><a id="l01556" name="l01556"></a><span class="lineno"> 1556</span> </div>
<div class="line"><a id="l01557" name="l01557"></a><span class="lineno"> 1557</span> <span class="keywordflow">if</span>(!create_new_table &amp;&amp; secondary_ddt_offset != 0)</div>
<div class="line"><a id="l01558" name="l01558"></a><span class="lineno"> 1558</span> {</div>
<div class="line"><a id="l01559" name="l01559"></a><span class="lineno"> 1559</span> <span class="comment">// Load existing table</span></div>
<div class="line"><a id="l01560" name="l01560"></a><span class="lineno"> 1560</span> fseek(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, secondary_ddt_offset, SEEK_SET);</div>
<div class="line"><a id="l01561" name="l01561"></a><span class="lineno"> 1561</span> <span class="keywordtype">size_t</span> read_bytes = fread(&amp;ddt_header, 1, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>), ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01562" name="l01562"></a><span class="lineno"> 1562</span> </div>
<div class="line"><a id="l01563" name="l01563"></a><span class="lineno"> 1563</span> <span class="keywordflow">if</span>(read_bytes != <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDdtHeader2.html">DdtHeader2</a>) || ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a80a88ec68cd0332a57886ac363bfa4d1">identifier</a> != <a class="code hl_enumvalue" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3aba4d0f50b26af1d0292daaa0d70feacf">DeDuplicationTable2</a> ||</div>
<div class="line"><a id="l01564" name="l01564"></a><span class="lineno"> 1564</span> ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a14f9ccf36df63e036d69291182cf7bbb">type</a> != <a class="code hl_enumvalue" href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a73bb26133ccd01972725933b00ec3a06">UserData</a>)</div>
<div class="line"><a id="l01565" name="l01565"></a><span class="lineno"> 1565</span> {</div>
<div class="line"><a id="l01566" name="l01566"></a><span class="lineno"> 1566</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid secondary DDT header at %&quot;</span> PRIu64, secondary_ddt_offset);</div>
<div class="line"><a id="l01567" name="l01567"></a><span class="lineno"> 1567</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01568" name="l01568"></a><span class="lineno"> 1568</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01569" name="l01569"></a><span class="lineno"> 1569</span> }</div>
<div class="line"><a id="l01570" name="l01570"></a><span class="lineno"> 1570</span> </div>
<div class="line"><a id="l01571" name="l01571"></a><span class="lineno"> 1571</span> <span class="comment">// Read the table data (assuming no compression for now)</span></div>
<div class="line"><a id="l01572" name="l01572"></a><span class="lineno"> 1572</span> buffer = malloc(ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>);</div>
<div class="line"><a id="l01573" name="l01573"></a><span class="lineno"> 1573</span> <span class="keywordflow">if</span>(buffer == NULL)</div>
<div class="line"><a id="l01574" name="l01574"></a><span class="lineno"> 1574</span> {</div>
<div class="line"><a id="l01575" name="l01575"></a><span class="lineno"> 1575</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Cannot allocate memory for secondary DDT.&quot;</span>);</div>
<div class="line"><a id="l01576" name="l01576"></a><span class="lineno"> 1576</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01577" name="l01577"></a><span class="lineno"> 1577</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01578" name="l01578"></a><span class="lineno"> 1578</span> }</div>
<div class="line"><a id="l01579" name="l01579"></a><span class="lineno"> 1579</span> </div>
<div class="line"><a id="l01580" name="l01580"></a><span class="lineno"> 1580</span> read_bytes = fread(buffer, 1, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l01581" name="l01581"></a><span class="lineno"> 1581</span> <span class="keywordflow">if</span>(read_bytes != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">length</a>)</div>
<div class="line"><a id="l01582" name="l01582"></a><span class="lineno"> 1582</span> {</div>
<div class="line"><a id="l01583" name="l01583"></a><span class="lineno"> 1583</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not read secondary DDT data.&quot;</span>);</div>
<div class="line"><a id="l01584" name="l01584"></a><span class="lineno"> 1584</span> free(buffer);</div>
<div class="line"><a id="l01585" name="l01585"></a><span class="lineno"> 1585</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01586" name="l01586"></a><span class="lineno"> 1586</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01587" name="l01587"></a><span class="lineno"> 1587</span> }</div>
<div class="line"><a id="l01588" name="l01588"></a><span class="lineno"> 1588</span> </div>
<div class="line"><a id="l01589" name="l01589"></a><span class="lineno"> 1589</span> <span class="comment">// Verify CRC</span></div>
<div class="line"><a id="l01590" name="l01590"></a><span class="lineno"> 1590</span> crc64_context = <a class="code hl_function" href="decls_8h.html#a66567ca64e31a687d4982cb254b45196">aaruf_crc64_init</a>();</div>
<div class="line"><a id="l01591" name="l01591"></a><span class="lineno"> 1591</span> <span class="keywordflow">if</span>(crc64_context == NULL)</div>
<div class="line"><a id="l01592" name="l01592"></a><span class="lineno"> 1592</span> {</div>
<div class="line"><a id="l01593" name="l01593"></a><span class="lineno"> 1593</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not initialize CRC64.&quot;</span>);</div>
<div class="line"><a id="l01594" name="l01594"></a><span class="lineno"> 1594</span> free(buffer);</div>
<div class="line"><a id="l01595" name="l01595"></a><span class="lineno"> 1595</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01596" name="l01596"></a><span class="lineno"> 1596</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01597" name="l01597"></a><span class="lineno"> 1597</span> }</div>
<div class="line"><a id="l01598" name="l01598"></a><span class="lineno"> 1598</span> </div>
<div class="line"><a id="l01599" name="l01599"></a><span class="lineno"> 1599</span> <a class="code hl_function" href="decls_8h.html#a1fb4423a841ccd728e3ad0d028cbc9b4">aaruf_crc64_update</a>(crc64_context, buffer, read_bytes);</div>
<div class="line"><a id="l01600" name="l01600"></a><span class="lineno"> 1600</span> <a class="code hl_function" href="decls_8h.html#ae48cfb59c6585e9ffd4cd1a97044891f">aaruf_crc64_final</a>(crc64_context, &amp;crc64);</div>
<div class="line"><a id="l01601" name="l01601"></a><span class="lineno"> 1601</span> </div>
<div class="line"><a id="l01602" name="l01602"></a><span class="lineno"> 1602</span> <span class="keywordflow">if</span>(crc64 != ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>)</div>
<div class="line"><a id="l01603" name="l01603"></a><span class="lineno"> 1603</span> {</div>
<div class="line"><a id="l01604" name="l01604"></a><span class="lineno"> 1604</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Secondary DDT CRC mismatch. Expected 0x%16lX but got 0x%16lX.&quot;</span>, ddt_header.<a class="code hl_variable" href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">crc64</a>, crc64);</div>
<div class="line"><a id="l01605" name="l01605"></a><span class="lineno"> 1605</span> free(buffer);</div>
<div class="line"><a id="l01606" name="l01606"></a><span class="lineno"> 1606</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01607" name="l01607"></a><span class="lineno"> 1607</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01608" name="l01608"></a><span class="lineno"> 1608</span> }</div>
<div class="line"><a id="l01609" name="l01609"></a><span class="lineno"> 1609</span> </div>
<div class="line"><a id="l01610" name="l01610"></a><span class="lineno"> 1610</span> <span class="comment">// Cache the loaded table</span></div>
<div class="line"><a id="l01611" name="l01611"></a><span class="lineno"> 1611</span> </div>
<div class="line"><a id="l01612" name="l01612"></a><span class="lineno"> 1612</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a> = (uint64_t *)buffer;</div>
<div class="line"><a id="l01613" name="l01613"></a><span class="lineno"> 1613</span> </div>
<div class="line"><a id="l01614" name="l01614"></a><span class="lineno"> 1614</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a> = secondary_ddt_offset;</div>
<div class="line"><a id="l01615" name="l01615"></a><span class="lineno"> 1615</span> }</div>
<div class="line"><a id="l01616" name="l01616"></a><span class="lineno"> 1616</span> </div>
<div class="line"><a id="l01617" name="l01617"></a><span class="lineno"> 1617</span> <span class="keywordflow">if</span>(create_new_table)</div>
<div class="line"><a id="l01618" name="l01618"></a><span class="lineno"> 1618</span> {</div>
<div class="line"><a id="l01619" name="l01619"></a><span class="lineno"> 1619</span> <span class="comment">// Create a new empty table</span></div>
<div class="line"><a id="l01620" name="l01620"></a><span class="lineno"> 1620</span> <span class="keywordtype">size_t</span> table_size = items_per_ddt_entry * <span class="keyword">sizeof</span>(uint64_t);</div>
<div class="line"><a id="l01621" name="l01621"></a><span class="lineno"> 1621</span> </div>
<div class="line"><a id="l01622" name="l01622"></a><span class="lineno"> 1622</span> buffer = calloc(1, table_size);</div>
<div class="line"><a id="l01623" name="l01623"></a><span class="lineno"> 1623</span> <span class="keywordflow">if</span>(buffer == NULL)</div>
<div class="line"><a id="l01624" name="l01624"></a><span class="lineno"> 1624</span> {</div>
<div class="line"><a id="l01625" name="l01625"></a><span class="lineno"> 1625</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Cannot allocate memory for new secondary DDT.&quot;</span>);</div>
<div class="line"><a id="l01626" name="l01626"></a><span class="lineno"> 1626</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01627" name="l01627"></a><span class="lineno"> 1627</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01628" name="l01628"></a><span class="lineno"> 1628</span> }</div>
<div class="line"><a id="l01629" name="l01629"></a><span class="lineno"> 1629</span> </div>
<div class="line"><a id="l01630" name="l01630"></a><span class="lineno"> 1630</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a> = (uint64_t *)buffer;</div>
<div class="line"><a id="l01631" name="l01631"></a><span class="lineno"> 1631</span> </div>
<div class="line"><a id="l01632" name="l01632"></a><span class="lineno"> 1632</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">cached_ddt_offset</a> = 0; <span class="comment">// Will be set when written to file</span></div>
<div class="line"><a id="l01633" name="l01633"></a><span class="lineno"> 1633</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ae32b62ecd08a309c5848a5503b020689">cached_ddt_position</a> = ddt_position; <span class="comment">// Track which primary DDT position this new table belongs to</span></div>
<div class="line"><a id="l01634" name="l01634"></a><span class="lineno"> 1634</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Created new secondary DDT for position %&quot;</span> PRIu64, ddt_position);</div>
<div class="line"><a id="l01635" name="l01635"></a><span class="lineno"> 1635</span> }</div>
<div class="line"><a id="l01636" name="l01636"></a><span class="lineno"> 1636</span> </div>
<div class="line"><a id="l01637" name="l01637"></a><span class="lineno"> 1637</span> <span class="comment">// Step 6: Update the corresponding DDT entry</span></div>
<div class="line"><a id="l01638" name="l01638"></a><span class="lineno"> 1638</span> <span class="keywordflow">if</span>(*ddt_entry == 0)</div>
<div class="line"><a id="l01639" name="l01639"></a><span class="lineno"> 1639</span> {</div>
<div class="line"><a id="l01640" name="l01640"></a><span class="lineno"> 1640</span> block_index = block_offset &gt;&gt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>;</div>
<div class="line"><a id="l01641" name="l01641"></a><span class="lineno"> 1641</span> *ddt_entry = offset &amp; (1ULL &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>) - 1 |</div>
<div class="line"><a id="l01642" name="l01642"></a><span class="lineno"> 1642</span> block_index &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>;</div>
<div class="line"><a id="l01643" name="l01643"></a><span class="lineno"> 1643</span> </div>
<div class="line"><a id="l01644" name="l01644"></a><span class="lineno"> 1644</span> <span class="comment">// Overflow detection for DDT entry</span></div>
<div class="line"><a id="l01645" name="l01645"></a><span class="lineno"> 1645</span> <span class="keywordflow">if</span>(*ddt_entry &gt; 0xFFFFFFFFFFFFFFF)</div>
<div class="line"><a id="l01646" name="l01646"></a><span class="lineno"> 1646</span> {</div>
<div class="line"><a id="l01647" name="l01647"></a><span class="lineno"> 1647</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;DDT overflow: media does not fit in big DDT&quot;</span>);</div>
<div class="line"><a id="l01648" name="l01648"></a><span class="lineno"> 1648</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = false&quot;</span>);</div>
<div class="line"><a id="l01649" name="l01649"></a><span class="lineno"> 1649</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01650" name="l01650"></a><span class="lineno"> 1650</span> }</div>
<div class="line"><a id="l01651" name="l01651"></a><span class="lineno"> 1651</span> }</div>
<div class="line"><a id="l01652" name="l01652"></a><span class="lineno"> 1652</span> </div>
<div class="line"><a id="l01653" name="l01653"></a><span class="lineno"> 1653</span> <span class="comment">// Sector status can be different from previous deduplicated sector</span></div>
<div class="line"><a id="l01654" name="l01654"></a><span class="lineno"> 1654</span> *ddt_entry &amp;= 0x0FFFFFFFFFFFFFFF;</div>
<div class="line"><a id="l01655" name="l01655"></a><span class="lineno"> 1655</span> *ddt_entry |= (uint64_t)sector_status &lt;&lt; 60;</div>
<div class="line"><a id="l01656" name="l01656"></a><span class="lineno"> 1656</span> </div>
<div class="line"><a id="l01657" name="l01657"></a><span class="lineno"> 1657</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Setting big secondary DDT entry %d to %ull&quot;</span>, sector_address % items_per_ddt_entry, (uint64_t)*ddt_entry);</div>
<div class="line"><a id="l01658" name="l01658"></a><span class="lineno"> 1658</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">cached_secondary_ddt2</a>[sector_address % items_per_ddt_entry] = *ddt_entry;</div>
<div class="line"><a id="l01659" name="l01659"></a><span class="lineno"> 1659</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ad1e4ceb44652cacfc63e0e2c95f570c6">dirty_secondary_ddt</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l01660" name="l01660"></a><span class="lineno"> 1660</span> </div>
<div class="line"><a id="l01661" name="l01661"></a><span class="lineno"> 1661</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Updated secondary DDT entry at position %&quot;</span> PRIu64, sector_address % items_per_ddt_entry);</div>
<div class="line"><a id="l01662" name="l01662"></a><span class="lineno"> 1662</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_multi_level_v2() = true&quot;</span>);</div>
<div class="line"><a id="l01663" name="l01663"></a><span class="lineno"> 1663</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l01664" name="l01664"></a><span class="lineno"> 1664</span>}</div>
</div>
<div class="line"><a id="l01665" name="l01665"></a><span class="lineno"> 1665</span></div>
<div class="foldopen" id="foldopen01782" data-start="{" data-end="}">
<div class="line"><a id="l01782" name="l01782"></a><span class="lineno"><a class="line" href="internal_8h.html#a8241636367dc185ee88d1dc5af9caf59"> 1782</a></span><span class="keywordtype">bool</span> <a class="code hl_function" href="ddt__v2_8c.html#a40a8f87e97248615429d232ca9fb599b">set_ddt_tape</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx, uint64_t sector_address, <span class="keyword">const</span> uint64_t offset, <span class="keyword">const</span> uint64_t block_offset,</div>
<div class="line"><a id="l01783" name="l01783"></a><span class="lineno"> 1783</span> <span class="keyword">const</span> uint8_t sector_status, uint64_t *ddt_entry)</div>
<div class="line"><a id="l01784" name="l01784"></a><span class="lineno"> 1784</span>{</div>
<div class="line"><a id="l01785" name="l01785"></a><span class="lineno"> 1785</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Entering set_ddt_tape(%p, %&quot;</span> PRIu64 <span class="stringliteral">&quot;, %llu, %llu, %d)&quot;</span>, ctx, sector_address, offset, block_offset,</div>
<div class="line"><a id="l01786" name="l01786"></a><span class="lineno"> 1786</span> sector_status);</div>
<div class="line"><a id="l01787" name="l01787"></a><span class="lineno"> 1787</span> </div>
<div class="line"><a id="l01788" name="l01788"></a><span class="lineno"> 1788</span> <span class="comment">// Check if the context and image stream are valid</span></div>
<div class="line"><a id="l01789" name="l01789"></a><span class="lineno"> 1789</span> <span class="keywordflow">if</span>(ctx == NULL || ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a> == NULL)</div>
<div class="line"><a id="l01790" name="l01790"></a><span class="lineno"> 1790</span> {</div>
<div class="line"><a id="l01791" name="l01791"></a><span class="lineno"> 1791</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context or image stream.&quot;</span>);</div>
<div class="line"><a id="l01792" name="l01792"></a><span class="lineno"> 1792</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_tape() = false&quot;</span>);</div>
<div class="line"><a id="l01793" name="l01793"></a><span class="lineno"> 1793</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01794" name="l01794"></a><span class="lineno"> 1794</span> }</div>
<div class="line"><a id="l01795" name="l01795"></a><span class="lineno"> 1795</span> </div>
<div class="line"><a id="l01796" name="l01796"></a><span class="lineno"> 1796</span> <span class="comment">// Should not really be here</span></div>
<div class="line"><a id="l01797" name="l01797"></a><span class="lineno"> 1797</span> <span class="keywordflow">if</span>(!ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a4d514102386b48bd51ac82c27bf9920a">is_tape</a>)</div>
<div class="line"><a id="l01798" name="l01798"></a><span class="lineno"> 1798</span> {</div>
<div class="line"><a id="l01799" name="l01799"></a><span class="lineno"> 1799</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Image is not tape, wrong function called.&quot;</span>);</div>
<div class="line"><a id="l01800" name="l01800"></a><span class="lineno"> 1800</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_tape() = false&quot;</span>);</div>
<div class="line"><a id="l01801" name="l01801"></a><span class="lineno"> 1801</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01802" name="l01802"></a><span class="lineno"> 1802</span> }</div>
<div class="line"><a id="l01803" name="l01803"></a><span class="lineno"> 1803</span> </div>
<div class="line"><a id="l01804" name="l01804"></a><span class="lineno"> 1804</span> <span class="keywordflow">if</span>(*ddt_entry == 0)</div>
<div class="line"><a id="l01805" name="l01805"></a><span class="lineno"> 1805</span> {</div>
<div class="line"><a id="l01806" name="l01806"></a><span class="lineno"> 1806</span> <span class="keyword">const</span> uint64_t block_index = block_offset &gt;&gt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">blockAlignmentShift</a>;</div>
<div class="line"><a id="l01807" name="l01807"></a><span class="lineno"> 1807</span> *ddt_entry = offset &amp; (1ULL &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>) - 1 |</div>
<div class="line"><a id="l01808" name="l01808"></a><span class="lineno"> 1808</span> block_index &lt;&lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">user_data_ddt_header</a>.<a class="code hl_variable" href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">dataShift</a>;</div>
<div class="line"><a id="l01809" name="l01809"></a><span class="lineno"> 1809</span> <span class="comment">// Overflow detection for DDT entry</span></div>
<div class="line"><a id="l01810" name="l01810"></a><span class="lineno"> 1810</span> <span class="keywordflow">if</span>(*ddt_entry &gt; 0xFFFFFFFFFFFFFFF)</div>
<div class="line"><a id="l01811" name="l01811"></a><span class="lineno"> 1811</span> {</div>
<div class="line"><a id="l01812" name="l01812"></a><span class="lineno"> 1812</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;DDT overflow: media does not fit in big DDT&quot;</span>);</div>
<div class="line"><a id="l01813" name="l01813"></a><span class="lineno"> 1813</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_tape() = false&quot;</span>);</div>
<div class="line"><a id="l01814" name="l01814"></a><span class="lineno"> 1814</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01815" name="l01815"></a><span class="lineno"> 1815</span> }</div>
<div class="line"><a id="l01816" name="l01816"></a><span class="lineno"> 1816</span> </div>
<div class="line"><a id="l01817" name="l01817"></a><span class="lineno"> 1817</span> *ddt_entry |= (uint64_t)sector_status &lt;&lt; 60;</div>
<div class="line"><a id="l01818" name="l01818"></a><span class="lineno"> 1818</span> }</div>
<div class="line"><a id="l01819" name="l01819"></a><span class="lineno"> 1819</span> </div>
<div class="line"><a id="l01820" name="l01820"></a><span class="lineno"> 1820</span> <span class="comment">// Create DDT hash entry</span></div>
<div class="line"><a id="l01821" name="l01821"></a><span class="lineno"> 1821</span> <a class="code hl_struct" href="structTapeDdtHashEntry.html">TapeDdtHashEntry</a> *new_entry = calloc(1, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTapeDdtHashEntry.html">TapeDdtHashEntry</a>));</div>
<div class="line"><a id="l01822" name="l01822"></a><span class="lineno"> 1822</span> <a class="code hl_struct" href="structTapeDdtHashEntry.html">TapeDdtHashEntry</a> *old_entry = NULL;</div>
<div class="line"><a id="l01823" name="l01823"></a><span class="lineno"> 1823</span> <span class="keywordflow">if</span>(new_entry == NULL)</div>
<div class="line"><a id="l01824" name="l01824"></a><span class="lineno"> 1824</span> {</div>
<div class="line"><a id="l01825" name="l01825"></a><span class="lineno"> 1825</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Cannot allocate memory for new tape DDT hash entry.&quot;</span>);</div>
<div class="line"><a id="l01826" name="l01826"></a><span class="lineno"> 1826</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_tape() = false&quot;</span>);</div>
<div class="line"><a id="l01827" name="l01827"></a><span class="lineno"> 1827</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l01828" name="l01828"></a><span class="lineno"> 1828</span> }</div>
<div class="line"><a id="l01829" name="l01829"></a><span class="lineno"> 1829</span> </div>
<div class="line"><a id="l01830" name="l01830"></a><span class="lineno"> 1830</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Setting tape DDT entry %d to %u&quot;</span>, sector_address, (uint32_t)*ddt_entry);</div>
<div class="line"><a id="l01831" name="l01831"></a><span class="lineno"> 1831</span> </div>
<div class="line"><a id="l01832" name="l01832"></a><span class="lineno"> 1832</span> new_entry-&gt;<a class="code hl_variable" href="structTapeDdtHashEntry.html#acd6c80964b9f8f53a955ff3ebd0e9103">key</a> = sector_address;</div>
<div class="line"><a id="l01833" name="l01833"></a><span class="lineno"> 1833</span> new_entry-&gt;<a class="code hl_variable" href="structTapeDdtHashEntry.html#af8bd3cf85fa9e9b26c768323b0e0ebaa">value</a> = *ddt_entry;</div>
<div class="line"><a id="l01834" name="l01834"></a><span class="lineno"> 1834</span> </div>
<div class="line"><a id="l01835" name="l01835"></a><span class="lineno"> 1835</span> <span class="comment">// Insert entry into tape DDT</span></div>
<div class="line"><a id="l01836" name="l01836"></a><span class="lineno"> 1836</span> HASH_REPLACE(hh, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a705ef2714c4773514c23a56371f42a0f">tape_ddt</a>, key, <span class="keyword">sizeof</span>(uint64_t), new_entry, old_entry);</div>
<div class="line"><a id="l01837" name="l01837"></a><span class="lineno"> 1837</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ad5e046ffc70066ba070dc58514b3a771">dirty_tape_ddt</a> = <span class="keyword">true</span>; <span class="comment">// Mark tape DDT as dirty</span></div>
<div class="line"><a id="l01838" name="l01838"></a><span class="lineno"> 1838</span> <span class="keywordflow">if</span>(old_entry) free(old_entry);</div>
<div class="line"><a id="l01839" name="l01839"></a><span class="lineno"> 1839</span> </div>
<div class="line"><a id="l01840" name="l01840"></a><span class="lineno"> 1840</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting set_ddt_tape() = true&quot;</span>);</div>
<div class="line"><a id="l01841" name="l01841"></a><span class="lineno"> 1841</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l01842" name="l01842"></a><span class="lineno"> 1842</span>}</div>
</div>
<div class="ttc" id="aaaruformat_8h_html"><div class="ttname"><a href="aaruformat_8h.html">aaruformat.h</a></div></div>
<div class="ttc" id="aconsts_8h_html_a25fd08252b97a0230d3efc899bddd240"><div class="ttname"><a href="consts_8h.html#a25fd08252b97a0230d3efc899bddd240">LZMA_PROPERTIES_LENGTH</a></div><div class="ttdeci">#define LZMA_PROPERTIES_LENGTH</div><div class="ttdoc">Size in bytes of the fixed LZMA properties header (lc/lp/pb + dictionary size).</div><div class="ttdef"><b>Definition</b> <a href="consts_8h_source.html#l00082">consts.h:82</a></div></div>
<div class="ttc" id="addt__v2_8c_html_a1caeae710ee5e1dd356e43b3b659e9c0"><div class="ttname"><a href="ddt__v2_8c.html#a1caeae710ee5e1dd356e43b3b659e9c0">process_ddt_v2</a></div><div class="ttdeci">int32_t process_ddt_v2(aaruformat_context *ctx, IndexEntry *entry, bool *found_user_data_ddt)</div><div class="ttdoc">Processes a DDT v2 block from the image stream.</div><div class="ttdef"><b>Definition</b> <a href="#l00096">ddt_v2.c:96</a></div></div>
<div class="ttc" id="addt__v2_8c_html_a40a8f87e97248615429d232ca9fb599b"><div class="ttname"><a href="ddt__v2_8c.html#a40a8f87e97248615429d232ca9fb599b">set_ddt_tape</a></div><div class="ttdeci">bool set_ddt_tape(aaruformat_context *ctx, uint64_t sector_address, const uint64_t offset, const uint64_t block_offset, const uint8_t sector_status, uint64_t *ddt_entry)</div><div class="ttdoc">Sets a DDT entry for tape media using a hash-based lookup table.</div><div class="ttdef"><b>Definition</b> <a href="#l01782">ddt_v2.c:1782</a></div></div>
<div class="ttc" id="addt__v2_8c_html_a40c571bc4778040f22ac211cea670db1"><div class="ttname"><a href="ddt__v2_8c.html#a40c571bc4778040f22ac211cea670db1">decode_ddt_single_level_v2</a></div><div class="ttdeci">int32_t decode_ddt_single_level_v2(aaruformat_context *ctx, uint64_t sector_address, bool negative, uint64_t *offset, uint64_t *block_offset, uint8_t *sector_status)</div><div class="ttdoc">Decodes a single-level DDT v2 entry for a given sector address.</div><div class="ttdef"><b>Definition</b> <a href="#l00581">ddt_v2.c:581</a></div></div>
<div class="ttc" id="addt__v2_8c_html_a69ff2e68fe4d92a2d2d469ac69f41d82"><div class="ttname"><a href="ddt__v2_8c.html#a69ff2e68fe4d92a2d2d469ac69f41d82">set_ddt_multi_level_v2</a></div><div class="ttdeci">bool set_ddt_multi_level_v2(aaruformat_context *ctx, uint64_t sector_address, bool negative, uint64_t offset, uint64_t block_offset, uint8_t sector_status, uint64_t *ddt_entry)</div><div class="ttdoc">Sets a multi-level DDT v2 entry for a given sector address.</div><div class="ttdef"><b>Definition</b> <a href="#l01096">ddt_v2.c:1096</a></div></div>
<div class="ttc" id="addt__v2_8c_html_a6d6ee0e6c255449cb9c2528f0f8398ec"><div class="ttname"><a href="ddt__v2_8c.html#a6d6ee0e6c255449cb9c2528f0f8398ec">set_ddt_entry_v2</a></div><div class="ttdeci">bool set_ddt_entry_v2(aaruformat_context *ctx, const uint64_t sector_address, const bool negative, const uint64_t offset, const uint64_t block_offset, const uint8_t sector_status, uint64_t *ddt_entry)</div><div class="ttdoc">Sets a DDT v2 entry for a given sector address.</div><div class="ttdef"><b>Definition</b> <a href="#l00988">ddt_v2.c:988</a></div></div>
<div class="ttc" id="addt__v2_8c_html_a83aff4d408ab17f8f350cb03b0e12ef6"><div class="ttname"><a href="ddt__v2_8c.html#a83aff4d408ab17f8f350cb03b0e12ef6">decode_ddt_multi_level_v2</a></div><div class="ttdeci">int32_t decode_ddt_multi_level_v2(aaruformat_context *ctx, uint64_t sector_address, bool negative, uint64_t *offset, uint64_t *block_offset, uint8_t *sector_status)</div><div class="ttdoc">Decodes a multi-level DDT v2 entry for a given sector address.</div><div class="ttdef"><b>Definition</b> <a href="#l00724">ddt_v2.c:724</a></div></div>
<div class="ttc" id="addt__v2_8c_html_a9583b5975c5c0b81902681c07d6f737f"><div class="ttname"><a href="ddt__v2_8c.html#a9583b5975c5c0b81902681c07d6f737f">set_ddt_single_level_v2</a></div><div class="ttdeci">bool set_ddt_single_level_v2(aaruformat_context *ctx, uint64_t sector_address, const bool negative, const uint64_t offset, const uint64_t block_offset, const uint8_t sector_status, uint64_t *ddt_entry)</div><div class="ttdoc">Sets a single-level DDT v2 entry for a given sector address.</div><div class="ttdef"><b>Definition</b> <a href="#l01024">ddt_v2.c:1024</a></div></div>
<div class="ttc" id="addt__v2_8c_html_ab8d599dac0c84517fa72c757d5d753c0"><div class="ttname"><a href="ddt__v2_8c.html#ab8d599dac0c84517fa72c757d5d753c0">decode_ddt_entry_v2</a></div><div class="ttdeci">int32_t decode_ddt_entry_v2(aaruformat_context *ctx, const uint64_t sector_address, bool negative, uint64_t *offset, uint64_t *block_offset, uint8_t *sector_status)</div><div class="ttdoc">Decodes a DDT v2 entry for a given sector address.</div><div class="ttdef"><b>Definition</b> <a href="#l00507">ddt_v2.c:507</a></div></div>
<div class="ttc" id="adecls_8h_html_a0e69fad529047d6fe9440b1fc66c3f85"><div class="ttname"><a href="decls_8h.html#a0e69fad529047d6fe9440b1fc66c3f85">aaruf_lzma_encode_buffer</a></div><div class="ttdeci">int32_t aaruf_lzma_encode_buffer(uint8_t *dst_buffer, size_t *dst_size, const uint8_t *src_buffer, size_t src_size, uint8_t *out_props, size_t *out_props_size, int32_t level, uint32_t dict_size, int32_t lc, int32_t lp, int32_t pb, int32_t fb, int32_t num_threads)</div><div class="ttdoc">Encodes a buffer using LZMA compression.</div><div class="ttdef"><b>Definition</b> <a href="lzma_8c_source.html#l00065">lzma.c:65</a></div></div>
<div class="ttc" id="adecls_8h_html_a0fee4834bf0747bcd933c4e754aa4692"><div class="ttname"><a href="decls_8h.html#a0fee4834bf0747bcd933c4e754aa4692">aaruf_crc64_data</a></div><div class="ttdeci">uint64_t aaruf_crc64_data(const uint8_t *data, uint32_t len)</div><div class="ttdef"><b>Definition</b> <a href="crc64_8c_source.html#l00160">crc64.c:160</a></div></div>
<div class="ttc" id="adecls_8h_html_a12f3cbc43c2f57a11fbba32a71ba2704"><div class="ttname"><a href="decls_8h.html#a12f3cbc43c2f57a11fbba32a71ba2704">aaruf_lzma_decode_buffer</a></div><div class="ttdeci">int32_t aaruf_lzma_decode_buffer(uint8_t *dst_buffer, size_t *dst_size, const uint8_t *src_buffer, size_t *src_size, const uint8_t *props, size_t props_size)</div><div class="ttdoc">Decodes an LZMA-compressed buffer.</div><div class="ttdef"><b>Definition</b> <a href="lzma_8c_source.html#l00039">lzma.c:39</a></div></div>
<div class="ttc" id="adecls_8h_html_a1fb4423a841ccd728e3ad0d028cbc9b4"><div class="ttname"><a href="decls_8h.html#a1fb4423a841ccd728e3ad0d028cbc9b4">aaruf_crc64_update</a></div><div class="ttdeci">int aaruf_crc64_update(crc64_ctx *ctx, const uint8_t *data, uint32_t len)</div><div class="ttdoc">Updates the CRC64 context with new data.</div><div class="ttdef"><b>Definition</b> <a href="crc64_8c_source.html#l00055">crc64.c:55</a></div></div>
<div class="ttc" id="adecls_8h_html_a66567ca64e31a687d4982cb254b45196"><div class="ttname"><a href="decls_8h.html#a66567ca64e31a687d4982cb254b45196">aaruf_crc64_init</a></div><div class="ttdeci">crc64_ctx * aaruf_crc64_init()</div><div class="ttdoc">Initializes a CRC64 context.</div><div class="ttdef"><b>Definition</b> <a href="crc64_8c_source.html#l00032">crc64.c:32</a></div></div>
<div class="ttc" id="adecls_8h_html_ae48cfb59c6585e9ffd4cd1a97044891f"><div class="ttname"><a href="decls_8h.html#ae48cfb59c6585e9ffd4cd1a97044891f">aaruf_crc64_final</a></div><div class="ttdeci">int aaruf_crc64_final(crc64_ctx *ctx, uint64_t *crc)</div><div class="ttdoc">Computes the final CRC64 value from the context.</div><div class="ttdef"><b>Definition</b> <a href="crc64_8c_source.html#l00141">crc64.c:141</a></div></div>
<div class="ttc" id="aenums_8h_html_a54420623f26ab6bb61042b41cccf37a3a76b6a78e4e765794c4cca2dde5bfc3fb"><div class="ttname"><a href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3a76b6a78e4e765794c4cca2dde5bfc3fb">DeDuplicationTableSecondary</a></div><div class="ttdeci">@ DeDuplicationTableSecondary</div><div class="ttdoc">Block containing a secondary deduplication table (v2).</div><div class="ttdef"><b>Definition</b> <a href="enums_8h_source.html#l00144">enums.h:144</a></div></div>
<div class="ttc" id="aenums_8h_html_a54420623f26ab6bb61042b41cccf37a3aba4d0f50b26af1d0292daaa0d70feacf"><div class="ttname"><a href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3aba4d0f50b26af1d0292daaa0d70feacf">DeDuplicationTable2</a></div><div class="ttdeci">@ DeDuplicationTable2</div><div class="ttdoc">Block containing a deduplication table v2.</div><div class="ttdef"><b>Definition</b> <a href="enums_8h_source.html#l00143">enums.h:143</a></div></div>
<div class="ttc" id="aenums_8h_html_a74e216af87b18a5fbf0204a52dd1bba0a032ffcff283d253414768f0fa035af4d"><div class="ttname"><a href="enums_8h.html#a74e216af87b18a5fbf0204a52dd1bba0a032ffcff283d253414768f0fa035af4d">SectorStatusNotDumped</a></div><div class="ttdeci">@ SectorStatusNotDumped</div><div class="ttdoc">Sector(s) not yet acquired during image dumping.</div><div class="ttdef"><b>Definition</b> <a href="enums_8h_source.html#l00230">enums.h:230</a></div></div>
<div class="ttc" id="aenums_8h_html_ad8ed01ff3ff33333d8e19db4d2818bb6a4cc94cd48947bd2bb9ab37d56b8eab98"><div class="ttname"><a href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a4cc94cd48947bd2bb9ab37d56b8eab98">CdSectorPrefix</a></div><div class="ttdeci">@ CdSectorPrefix</div><div class="ttdoc">Compact Disc sector prefix (sync, header).</div><div class="ttdef"><b>Definition</b> <a href="enums_8h_source.html#l00114">enums.h:114</a></div></div>
<div class="ttc" id="aenums_8h_html_ad8ed01ff3ff33333d8e19db4d2818bb6a73bb26133ccd01972725933b00ec3a06"><div class="ttname"><a href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6a73bb26133ccd01972725933b00ec3a06">UserData</a></div><div class="ttdeci">@ UserData</div><div class="ttdoc">User (main) data.</div><div class="ttdef"><b>Definition</b> <a href="enums_8h_source.html#l00046">enums.h:46</a></div></div>
<div class="ttc" id="aenums_8h_html_ad8ed01ff3ff33333d8e19db4d2818bb6aee38da0d8fd8047e5468514ff9be0f75"><div class="ttname"><a href="enums_8h.html#ad8ed01ff3ff33333d8e19db4d2818bb6aee38da0d8fd8047e5468514ff9be0f75">CdSectorSuffix</a></div><div class="ttdeci">@ CdSectorSuffix</div><div class="ttdoc">Compact Disc sector suffix (EDC, ECC P, ECC Q).</div><div class="ttdef"><b>Definition</b> <a href="enums_8h_source.html#l00115">enums.h:115</a></div></div>
<div class="ttc" id="aenums_8h_html_affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f"><div class="ttname"><a href="enums_8h.html#affec749ed88365143745313ae9168263a002db7938c70152bf9af1797cb87c32f">Lzma</a></div><div class="ttdeci">@ Lzma</div><div class="ttdoc">LZMA compression.</div><div class="ttdef"><b>Definition</b> <a href="enums_8h_source.html#l00034">enums.h:34</a></div></div>
<div class="ttc" id="aenums_8h_html_affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af"><div class="ttname"><a href="enums_8h.html#affec749ed88365143745313ae9168263ac9d3e887722f2bc482bcca9d41c512af">None</a></div><div class="ttdeci">@ None</div><div class="ttdoc">Not compressed.</div><div class="ttdef"><b>Definition</b> <a href="enums_8h_source.html#l00033">enums.h:33</a></div></div>
<div class="ttc" id="aerrors_8h_html_a1d6e49f7e8a1fa489efa0a582e90b5de"><div class="ttname"><a href="errors_8h.html#a1d6e49f7e8a1fa489efa0a582e90b5de">AARUF_STATUS_OK</a></div><div class="ttdeci">#define AARUF_STATUS_OK</div><div class="ttdoc">Sector present and read without uncorrectable errors.</div><div class="ttdef"><b>Definition</b> <a href="errors_8h_source.html#l00075">errors.h:75</a></div></div>
<div class="ttc" id="aerrors_8h_html_a35a771e3648bf971a004d4b2be9b5ec4"><div class="ttname"><a href="errors_8h.html#a35a771e3648bf971a004d4b2be9b5ec4">AARUF_ERROR_NOT_ENOUGH_MEMORY</a></div><div class="ttdeci">#define AARUF_ERROR_NOT_ENOUGH_MEMORY</div><div class="ttdoc">Memory allocation failure (critical).</div><div class="ttdef"><b>Definition</b> <a href="errors_8h_source.html#l00048">errors.h:48</a></div></div>
<div class="ttc" id="aerrors_8h_html_a67753dacbd0ffdd397e563a8a5ecd271"><div class="ttname"><a href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a></div><div class="ttdeci">#define AARUF_ERROR_CANNOT_READ_BLOCK</div><div class="ttdoc">Generic block read failure (seek/read error).</div><div class="ttdef"><b>Definition</b> <a href="errors_8h_source.html#l00046">errors.h:46</a></div></div>
<div class="ttc" id="aerrors_8h_html_aa8dcb9cad962fc5f5f84d5e1ec41fae7"><div class="ttname"><a href="errors_8h.html#aa8dcb9cad962fc5f5f84d5e1ec41fae7">AARUF_ERROR_INVALID_BLOCK_CRC</a></div><div class="ttdeci">#define AARUF_ERROR_INVALID_BLOCK_CRC</div><div class="ttdoc">CRC64 mismatch indicating corruption.</div><div class="ttdef"><b>Definition</b> <a href="errors_8h_source.html#l00057">errors.h:57</a></div></div>
<div class="ttc" id="aerrors_8h_html_abb63e240b11d790da83bd34507b57851"><div class="ttname"><a href="errors_8h.html#abb63e240b11d790da83bd34507b57851">AARUF_ERROR_NOT_AARUFORMAT</a></div><div class="ttdeci">#define AARUF_ERROR_NOT_AARUFORMAT</div><div class="ttdoc">Input file/stream failed magic or structural validation.</div><div class="ttdef"><b>Definition</b> <a href="errors_8h_source.html#l00040">errors.h:40</a></div></div>
<div class="ttc" id="aerrors_8h_html_ac9f4e38e8d5a1f940c9cd0c7f6788c37"><div class="ttname"><a href="errors_8h.html#ac9f4e38e8d5a1f940c9cd0c7f6788c37">AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</a></div><div class="ttdeci">#define AARUF_ERROR_CANNOT_DECOMPRESS_BLOCK</div><div class="ttdoc">Decompression routine failed or size mismatch.</div><div class="ttdef"><b>Definition</b> <a href="errors_8h_source.html#l00056">errors.h:56</a></div></div>
<div class="ttc" id="ainternal_8h_html"><div class="ttname"><a href="internal_8h.html">internal.h</a></div></div>
<div class="ttc" id="ainternal_8h_html_a2402812f5e04ba16765208c0b70fa6c5"><div class="ttname"><a href="internal_8h.html#a2402812f5e04ba16765208c0b70fa6c5">aaruf_close_current_block</a></div><div class="ttdeci">int32_t aaruf_close_current_block(aaruformat_context *ctx)</div><div class="ttdoc">Finalizes and writes the current data block to the AaruFormat image file.</div><div class="ttdef"><b>Definition</b> <a href="write_8c_source.html#l01427">write.c:1427</a></div></div>
<div class="ttc" id="alog_8h_html"><div class="ttname"><a href="log_8h.html">log.h</a></div></div>
<div class="ttc" id="alog_8h_html_a053d6037d543b84ce59308ce71d15cd1"><div class="ttname"><a href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a></div><div class="ttdeci">#define FATAL(fmt,...)</div><div class="ttdef"><b>Definition</b> <a href="log_8h_source.html#l00040">log.h:40</a></div></div>
<div class="ttc" id="alog_8h_html_a21cc0459b78d5f2d7bd737e5aae1278a"><div class="ttname"><a href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a></div><div class="ttdeci">#define TRACE(fmt,...)</div><div class="ttdef"><b>Definition</b> <a href="log_8h_source.html#l00025">log.h:25</a></div></div>
<div class="ttc" id="astructDdtHeader2_html"><div class="ttname"><a href="structDdtHeader2.html">DdtHeader2</a></div><div class="ttdoc">Header preceding a version 2 hierarchical deduplication table.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00141">ddt.h:142</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_a0799563cf99f679ee26840e32d52ca0f"><div class="ttname"><a href="structDdtHeader2.html#a0799563cf99f679ee26840e32d52ca0f">DdtHeader2::cmpCrc64</a></div><div class="ttdeci">uint64_t cmpCrc64</div><div class="ttdoc">CRC64-ECMA of compressed table payload.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00161">ddt.h:161</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_a14f9ccf36df63e036d69291182cf7bbb"><div class="ttname"><a href="structDdtHeader2.html#a14f9ccf36df63e036d69291182cf7bbb">DdtHeader2::type</a></div><div class="ttdeci">uint16_t type</div><div class="ttdoc">Data classification (DataType) for sectors referenced by this table.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00144">ddt.h:144</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_a238a2ca31ce0f60af3e59a1cb3e2e73c"><div class="ttname"><a href="structDdtHeader2.html#a238a2ca31ce0f60af3e59a1cb3e2e73c">DdtHeader2::start</a></div><div class="ttdeci">uint64_t start</div><div class="ttdoc">Base internal index covered by this table (used for secondary tables; currently informational).</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00153">ddt.h:153</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_a2bfa558d9d778ae6b86d52520e278b66"><div class="ttname"><a href="structDdtHeader2.html#a2bfa558d9d778ae6b86d52520e278b66">DdtHeader2::overflow</a></div><div class="ttdeci">uint16_t overflow</div><div class="ttdoc">Trailing dumped sectors beyond user area (overflow range), still mapped with entries.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00151">ddt.h:151</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_a4d69e092386cdf3499b17bd6f63a0d8d"><div class="ttname"><a href="structDdtHeader2.html#a4d69e092386cdf3499b17bd6f63a0d8d">DdtHeader2::crc64</a></div><div class="ttdeci">uint64_t crc64</div><div class="ttdoc">CRC64-ECMA of uncompressed table payload.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00162">ddt.h:162</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_a4e90c22109c3fff37b526a113b094a50"><div class="ttname"><a href="structDdtHeader2.html#a4e90c22109c3fff37b526a113b094a50">DdtHeader2::entries</a></div><div class="ttdeci">uint64_t entries</div><div class="ttdoc">Number of entries contained in (uncompressed) table payload.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00158">ddt.h:158</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_a68f4825db4e22906af0e55a359360656"><div class="ttname"><a href="structDdtHeader2.html#a68f4825db4e22906af0e55a359360656">DdtHeader2::levels</a></div><div class="ttdeci">uint8_t levels</div><div class="ttdoc">Total number of hierarchy levels (root depth); &gt; 0.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00146">ddt.h:146</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_a7266134edef8efc7c449649f3035d189"><div class="ttname"><a href="structDdtHeader2.html#a7266134edef8efc7c449649f3035d189">DdtHeader2::length</a></div><div class="ttdeci">uint64_t length</div><div class="ttdoc">Uncompressed payload size in bytes.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00160">ddt.h:160</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_a80a88ec68cd0332a57886ac363bfa4d1"><div class="ttname"><a href="structDdtHeader2.html#a80a88ec68cd0332a57886ac363bfa4d1">DdtHeader2::identifier</a></div><div class="ttdeci">uint32_t identifier</div><div class="ttdoc">Block identifier, must be BlockType::DeDuplicationTable2.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00143">ddt.h:143</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_a8c2110cbb42bde3c0e302d3429024b04"><div class="ttname"><a href="structDdtHeader2.html#a8c2110cbb42bde3c0e302d3429024b04">DdtHeader2::tableShift</a></div><div class="ttdeci">uint8_t tableShift</div><div class="ttdoc">2^tableShift = number of logical sectors per primary entry (multi-level only; 0 for single-level or s...</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00156">ddt.h:156</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_a9571c1d556e33537935bab1edba31135"><div class="ttname"><a href="structDdtHeader2.html#a9571c1d556e33537935bab1edba31135">DdtHeader2::blocks</a></div><div class="ttdeci">uint64_t blocks</div><div class="ttdoc">Total internal span (negative + usable + overflow) in logical sectors.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00150">ddt.h:150</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_aa4b1416ac0e0585f436513cacf9ebd74"><div class="ttname"><a href="structDdtHeader2.html#aa4b1416ac0e0585f436513cacf9ebd74">DdtHeader2::negative</a></div><div class="ttdeci">uint16_t negative</div><div class="ttdoc">Leading negative LBA count; added to external L to build internal index.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00149">ddt.h:149</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_aa67b097c3a20f926ede495d27152f1c0"><div class="ttname"><a href="structDdtHeader2.html#aa67b097c3a20f926ede495d27152f1c0">DdtHeader2::blockAlignmentShift</a></div><div class="ttdeci">uint8_t blockAlignmentShift</div><div class="ttdoc">2^blockAlignmentShift = block alignment boundary in bytes.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00154">ddt.h:154</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_ac8ec7921a5651b5107eda4e99b488798"><div class="ttname"><a href="structDdtHeader2.html#ac8ec7921a5651b5107eda4e99b488798">DdtHeader2::tableLevel</a></div><div class="ttdeci">uint8_t tableLevel</div><div class="ttdoc">Zero-based level index of this table (0 = root, increases downward).</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00147">ddt.h:147</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_ad1a27a46df09748a91a9010a630c422e"><div class="ttname"><a href="structDdtHeader2.html#ad1a27a46df09748a91a9010a630c422e">DdtHeader2::compression</a></div><div class="ttdeci">uint16_t compression</div><div class="ttdoc">Compression algorithm for this table body (CompressionType).</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00145">ddt.h:145</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_ad9a2beb3a79bc6c239ba04fe341e0cde"><div class="ttname"><a href="structDdtHeader2.html#ad9a2beb3a79bc6c239ba04fe341e0cde">DdtHeader2::dataShift</a></div><div class="ttdeci">uint8_t dataShift</div><div class="ttdoc">2^dataShift = sectors represented per increment in blockIndex field.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00155">ddt.h:155</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_aee50fc92a9151bd352808b28bccd5045"><div class="ttname"><a href="structDdtHeader2.html#aee50fc92a9151bd352808b28bccd5045">DdtHeader2::cmpLength</a></div><div class="ttdeci">uint64_t cmpLength</div><div class="ttdoc">Compressed payload size in bytes.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00159">ddt.h:159</a></div></div>
<div class="ttc" id="astructDdtHeader2_html_af71423c2a8c7fa89dfd2313b456c57a2"><div class="ttname"><a href="structDdtHeader2.html#af71423c2a8c7fa89dfd2313b456c57a2">DdtHeader2::previousLevelOffset</a></div><div class="ttdeci">uint64_t previousLevelOffset</div><div class="ttdoc">Absolute byte offset of the parent (previous) level table; 0 if root.</div><div class="ttdef"><b>Definition</b> <a href="ddt_8h_source.html#l00148">ddt.h:148</a></div></div>
<div class="ttc" id="astructImageInfo_html_abca8e73a9655d810e6d30d36c3ab54d7"><div class="ttname"><a href="structImageInfo.html#abca8e73a9655d810e6d30d36c3ab54d7">ImageInfo::ImageSize</a></div><div class="ttdeci">uint64_t ImageSize</div><div class="ttdoc">Size of the image payload in bytes (excludes headers/metadata)</div><div class="ttdef"><b>Definition</b> <a href="aaru_8h_source.html#l00925">aaru.h:925</a></div></div>
<div class="ttc" id="astructImageInfo_html_ae3e1b9cde1c51152b00eb1b59e199906"><div class="ttname"><a href="structImageInfo.html#ae3e1b9cde1c51152b00eb1b59e199906">ImageInfo::Sectors</a></div><div class="ttdeci">uint64_t Sectors</div><div class="ttdoc">Total count of addressable logical sectors/blocks.</div><div class="ttdef"><b>Definition</b> <a href="aaru_8h_source.html#l00926">aaru.h:926</a></div></div>
<div class="ttc" id="astructIndexEntry_html"><div class="ttname"><a href="structIndexEntry.html">IndexEntry</a></div><div class="ttdoc">Single index entry describing a block&#39;s type, (optional) data classification, and file offset.</div><div class="ttdef"><b>Definition</b> <a href="index_8h_source.html#l00108">index.h:109</a></div></div>
<div class="ttc" id="astructIndexEntry_html_a4b5c7115ac83019c3f77c6f047e5f75e"><div class="ttname"><a href="structIndexEntry.html#a4b5c7115ac83019c3f77c6f047e5f75e">IndexEntry::blockType</a></div><div class="ttdeci">uint32_t blockType</div><div class="ttdoc">Block identifier of the referenced block (value from BlockType).</div><div class="ttdef"><b>Definition</b> <a href="index_8h_source.html#l00110">index.h:110</a></div></div>
<div class="ttc" id="astructIndexEntry_html_a854951a64192d7e4cdcfa6dd6fd2b3ea"><div class="ttname"><a href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">IndexEntry::offset</a></div><div class="ttdeci">uint64_t offset</div><div class="ttdoc">Absolute byte offset in the image where the referenced block header begins.</div><div class="ttdef"><b>Definition</b> <a href="index_8h_source.html#l00112">index.h:112</a></div></div>
<div class="ttc" id="astructIndexEntry_html_ae5d35082a756e0388efbf5fabbe93d10"><div class="ttname"><a href="structIndexEntry.html#ae5d35082a756e0388efbf5fabbe93d10">IndexEntry::dataType</a></div><div class="ttdeci">uint16_t dataType</div><div class="ttdoc">Data classification (value from DataType) or unused for untyped blocks.</div><div class="ttdef"><b>Definition</b> <a href="index_8h_source.html#l00111">index.h:111</a></div></div>
<div class="ttc" id="astructTapeDdtHashEntry_html"><div class="ttname"><a href="structTapeDdtHashEntry.html">TapeDdtHashEntry</a></div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00140">context.h:141</a></div></div>
<div class="ttc" id="astructTapeDdtHashEntry_html_acd6c80964b9f8f53a955ff3ebd0e9103"><div class="ttname"><a href="structTapeDdtHashEntry.html#acd6c80964b9f8f53a955ff3ebd0e9103">TapeDdtHashEntry::key</a></div><div class="ttdeci">uint64_t key</div><div class="ttdoc">Key: sector address.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00142">context.h:142</a></div></div>
<div class="ttc" id="astructTapeDdtHashEntry_html_af8bd3cf85fa9e9b26c768323b0e0ebaa"><div class="ttname"><a href="structTapeDdtHashEntry.html#af8bd3cf85fa9e9b26c768323b0e0ebaa">TapeDdtHashEntry::value</a></div><div class="ttdeci">uint64_t value</div><div class="ttdoc">Value: DDT entry.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00143">context.h:143</a></div></div>
<div class="ttc" id="astructaaruformat__context_html"><div class="ttname"><a href="structaaruformat__context.html">aaruformat_context</a></div><div class="ttdoc">Master context representing an open or increation Aaru image.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00171">context.h:172</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a04c5fb367458a6e9dd0a50b39f6edec2"><div class="ttname"><a href="structaaruformat__context.html#a04c5fb367458a6e9dd0a50b39f6edec2">aaruformat_context::user_data_ddt_header</a></div><div class="ttdeci">DdtHeader2 user_data_ddt_header</div><div class="ttdoc">Active user data DDT v2 header (primary table meta).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00189">context.h:189</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a130daf19dbed426f1c4c6f82691bc054"><div class="ttname"><a href="structaaruformat__context.html#a130daf19dbed426f1c4c6f82691bc054">aaruformat_context::compression_enabled</a></div><div class="ttdeci">bool compression_enabled</div><div class="ttdoc">True if block compression enabled (writing path).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00300">context.h:300</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a2f095c3433eb29d2bf421b1e3355e72d"><div class="ttname"><a href="structaaruformat__context.html#a2f095c3433eb29d2bf421b1e3355e72d">aaruformat_context::dirty_primary_ddt</a></div><div class="ttdeci">bool dirty_primary_ddt</div><div class="ttdoc">True if primary DDT table should be written during close.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00309">context.h:309</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a3c7b902731274622296d04564b193b64"><div class="ttname"><a href="structaaruformat__context.html#a3c7b902731274622296d04564b193b64">aaruformat_context::user_data_ddt2</a></div><div class="ttdeci">uint64_t * user_data_ddt2</div><div class="ttdoc">DDT entries (big variant) primary/secondary current.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00187">context.h:187</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a46d0ccdc69758165c0468afbd05b9ffe"><div class="ttname"><a href="structaaruformat__context.html#a46d0ccdc69758165c0468afbd05b9ffe">aaruformat_context::sector_suffix_ddt2</a></div><div class="ttdeci">uint64_t * sector_suffix_ddt2</div><div class="ttdoc">CD sector suffix DDT V2.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00186">context.h:186</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a4bbf867b2c93fdbf959ce6e1a5f0d0a4"><div class="ttname"><a href="structaaruformat__context.html#a4bbf867b2c93fdbf959ce6e1a5f0d0a4">aaruformat_context::cached_ddt_offset</a></div><div class="ttdeci">uint64_t cached_ddt_offset</div><div class="ttdoc">File offset of currently cached secondary DDT (0=none).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00190">context.h:190</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a4d514102386b48bd51ac82c27bf9920a"><div class="ttname"><a href="structaaruformat__context.html#a4d514102386b48bd51ac82c27bf9920a">aaruformat_context::is_tape</a></div><div class="ttdeci">bool is_tape</div><div class="ttdoc">True if the image is a tape image.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00305">context.h:305</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a62885cab6ef674fd27b4de32ab4ee346"><div class="ttname"><a href="structaaruformat__context.html#a62885cab6ef674fd27b4de32ab4ee346">aaruformat_context::in_memory_ddt</a></div><div class="ttdeci">bool in_memory_ddt</div><div class="ttdoc">True if primary (and possibly secondary) DDT loaded.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00196">context.h:196</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a63616c8450e9e1853e0645714fe310cb"><div class="ttname"><a href="structaaruformat__context.html#a63616c8450e9e1853e0645714fe310cb">aaruformat_context::dirty_index_block</a></div><div class="ttdeci">bool dirty_index_block</div><div class="ttdoc">True if index block should be written during close.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00330">context.h:330</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a705ef2714c4773514c23a56371f42a0f"><div class="ttname"><a href="structaaruformat__context.html#a705ef2714c4773514c23a56371f42a0f">aaruformat_context::tape_ddt</a></div><div class="ttdeci">TapeDdtHashEntry * tape_ddt</div><div class="ttdoc">Hash table root for tape DDT entries.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00182">context.h:182</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a7ae2128b4ae5511c2c601ec8e8f66387"><div class="ttname"><a href="structaaruformat__context.html#a7ae2128b4ae5511c2c601ec8e8f66387">aaruformat_context::dirty_single_level_ddt</a></div><div class="ttdeci">bool dirty_single_level_ddt</div><div class="ttdoc">True if single-level DDT should be written during close.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00310">context.h:310</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a7c284949fdbfecfddeac2ba6687213b0"><div class="ttname"><a href="structaaruformat__context.html#a7c284949fdbfecfddeac2ba6687213b0">aaruformat_context::ddt_version</a></div><div class="ttdeci">int ddt_version</div><div class="ttdoc">DDT version in use (1=legacy, 2=v2 hierarchical).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00194">context.h:194</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a80b7de958916f11cc61ef6871a376a92"><div class="ttname"><a href="structaaruformat__context.html#a80b7de958916f11cc61ef6871a376a92">aaruformat_context::writing_buffer</a></div><div class="ttdeci">uint8_t * writing_buffer</div><div class="ttdoc">Accumulation buffer for current block data.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00280">context.h:280</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a8317a42c16f1a140053f01808929f43f"><div class="ttname"><a href="structaaruformat__context.html#a8317a42c16f1a140053f01808929f43f">aaruformat_context::sector_prefix_ddt2</a></div><div class="ttdeci">uint64_t * sector_prefix_ddt2</div><div class="ttdoc">CD sector prefix DDT V2.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00185">context.h:185</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a88effb2eb082320b5b31d729981cf2d4"><div class="ttname"><a href="structaaruformat__context.html#a88effb2eb082320b5b31d729981cf2d4">aaruformat_context::primary_ddt_offset</a></div><div class="ttdeci">uint64_t primary_ddt_offset</div><div class="ttdoc">File offset of the primary DDT v2 table.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00192">context.h:192</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a939b702f75e80062bc635add4c3ab142"><div class="ttname"><a href="structaaruformat__context.html#a939b702f75e80062bc635add4c3ab142">aaruformat_context::next_block_position</a></div><div class="ttdeci">uint64_t next_block_position</div><div class="ttdoc">Absolute file offset where next block will be written.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00282">context.h:282</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a9dbc317eb6fb1f8ece6305c47f5a3e89"><div class="ttname"><a href="structaaruformat__context.html#a9dbc317eb6fb1f8ece6305c47f5a3e89">aaruformat_context::cached_secondary_ddt2</a></div><div class="ttdeci">uint64_t * cached_secondary_ddt2</div><div class="ttdoc">Cached secondary table (big entries) or NULL.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00188">context.h:188</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_ab516fae594bde4f76b75488d0a3ca3a8"><div class="ttname"><a href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">aaruformat_context::imageStream</a></div><div class="ttdeci">FILE * imageStream</div><div class="ttdoc">Underlying FILE* stream (binary mode).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00176">context.h:176</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_ab97a719a5b4186695b67143db7376152"><div class="ttname"><a href="structaaruformat__context.html#ab97a719a5b4186695b67143db7376152">aaruformat_context::index_entries</a></div><div class="ttdeci">UT_array * index_entries</div><div class="ttdoc">Flattened index entries (UT_array of IndexEntry).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00252">context.h:252</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_ac970291b3449c04221827b9c2c18ac70"><div class="ttname"><a href="structaaruformat__context.html#ac970291b3449c04221827b9c2c18ac70">aaruformat_context::image_info</a></div><div class="ttdeci">ImageInfo image_info</div><div class="ttdoc">Exposed high-level image info summary.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00260">context.h:260</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_ad1e4ceb44652cacfc63e0e2c95f570c6"><div class="ttname"><a href="structaaruformat__context.html#ad1e4ceb44652cacfc63e0e2c95f570c6">aaruformat_context::dirty_secondary_ddt</a></div><div class="ttdeci">bool dirty_secondary_ddt</div><div class="ttdoc">True if secondary DDT tables should be written during close.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00308">context.h:308</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_ad5e046ffc70066ba070dc58514b3a771"><div class="ttname"><a href="structaaruformat__context.html#ad5e046ffc70066ba070dc58514b3a771">aaruformat_context::dirty_tape_ddt</a></div><div class="ttdeci">bool dirty_tape_ddt</div><div class="ttdoc">True if tape DDT should be written during close.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00322">context.h:322</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_adc67f6a6ef1602648bb064d47eb1fe88"><div class="ttname"><a href="structaaruformat__context.html#adc67f6a6ef1602648bb064d47eb1fe88">aaruformat_context::lzma_dict_size</a></div><div class="ttdeci">uint32_t lzma_dict_size</div><div class="ttdoc">LZMA dictionary size (writing path).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00298">context.h:298</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_ae32b62ecd08a309c5848a5503b020689"><div class="ttname"><a href="structaaruformat__context.html#ae32b62ecd08a309c5848a5503b020689">aaruformat_context::cached_ddt_position</a></div><div class="ttdeci">uint64_t cached_ddt_position</div><div class="ttdoc">Position index of cached secondary DDT.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00191">context.h:191</a></div></div>
<div class="ttc" id="astructcrc64__ctx_html"><div class="ttname"><a href="structcrc64__ctx.html">crc64_ctx</a></div><div class="ttdoc">Minimal ECMA-182 CRC64 incremental state container (running value only).</div><div class="ttdef"><b>Definition</b> <a href="crc64_8h_source.html#l00055">crc64.h:56</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_68267d1309a1af8e8297ef4c3efbcdba.html">src</a></li><li class="navelem"><a href="dir_a6e99c46e07b25cfb1b3942f86972439.html">ddt</a></li><li class="navelem"><a href="ddt__v2_8c.html">ddt_v2.c</a></li>
<li class="footer">Generated by <a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.14.0 </li>
</ul>
</div>
</body>
</html>