Files
libaaruformat/docs/html/blocks_2dpm_8c_source.html

360 lines
55 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.18.0"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libaaruformat: src/blocks/dpm.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="dynsections.js"></script>
<script type="text/javascript" src="codefolding.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.18.0 -->
<script type="text/javascript">
let searchBox = new SearchBox("searchBox", "search/",'.html');
</script>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded', codefold.init);
</script>
<script type="application/json" id="doxygen-config">
{
"relPath": "",
"generateTreeView": true,
"searchEngine": true,
"serverBasedSearch": false,
"disableIndex": false,
"dynamicMenus": true,
"fullSidebar": false
}
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<div id="main-nav-mobile">
<div class="sm sm-dox"><input id="main-menu-state" type="checkbox"/>
<label class="main-menu-btn" for="main-menu-state">
<span class="main-menu-btn-icon"></span> Toggle main menu visibility</label>
<span id="searchBoxPos1"></span>
</div>
</div><!-- main-nav-mobile -->
<div id="main-nav">
<ul class="sm sm-dox" id="main-menu">
<li id="searchBoxPos2">
<div id="MSearchBox" class="MSearchBoxInactive">
<span class="left">
<span id="MSearchSelect" class="search-icon"><span class="search-icon-dropdown"></span></span>
<input type="text" id="MSearchField" value="" placeholder="Search" accesskey="S"/>
</span><span class="right">
<a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><div id="MSearchCloseImg" class="close-icon"></div></a>
</span>
</div>
</li>
</ul>
</div><!-- main-nav -->
</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" class="ui-resizable-handle">
</div>
</div>
<script type="text/javascript">
document.addEventListener('DOMContentLoaded',() => { initNavTree('blocks_2dpm_8c_source.html','',''); });
</script>
<div id="container">
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow">
</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">dpm.c</div></div>
</div><!--header-->
<div class="contents">
<a href="blocks_2dpm_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-2026 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><span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</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="aaruformat_8h.html">aaruformat.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="erasure__internal_8h.html">erasure_internal.h</a>&quot;</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span><span class="preprocessor">#include &quot;<a class="code" href="internal_8h.html">internal.h</a>&quot;</span></div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="preprocessor">#include &quot;<a class="code" href="log_8h.html">log.h</a>&quot;</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span></div>
<div class="foldopen" id="foldopen00036" data-start="{" data-end="}">
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"><a class="line" href="internal_8h.html#a4b9ba209f6722b88a1d21f1ed4ee99c5"> 36</a></span>uint64_t <a class="code hl_function" href="internal_8h.html#a4b9ba209f6722b88a1d21f1ed4ee99c5">dpm_payload_length</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a> *header)</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span>{</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keywordflow">return</span> (uint64_t)header-&gt;<a class="code hl_variable" href="structDpmHeader.html#aba28802364c1eb1a0b721fd248c13f13">layerEnds</a> * <span class="keyword">sizeof</span>(uint64_t) + (uint64_t)header-&gt;<a class="code hl_variable" href="structDpmHeader.html#ab360b1de542aff0d8615a6b6786c4a5c">entries</a> * <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmEntry.html">DpmEntry</a>) +</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> (uint64_t)header-&gt;<a class="code hl_variable" href="structDpmHeader.html#a40aa63ac61b7be18b27b7e5396355686">calibrations</a> * <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmCalibration.html">DpmCalibration</a>);</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span>}</div>
</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span></div>
<div class="foldopen" id="foldopen00053" data-start="{" data-end="}">
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"><a class="line" href="internal_8h.html#ab012bc60295f357069a2d3fc0d36724e"> 53</a></span>int32_t <a class="code hl_function" href="internal_8h.html#ab012bc60295f357069a2d3fc0d36724e">validate_dpm_block</a>(<span class="keyword">const</span> uint8_t *data, <span class="keywordtype">size_t</span> length)</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span>{</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="keywordflow">if</span>(data == NULL || length &lt; <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>)) <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a8fc3ecb14777e72bebad62084b6caf16">AARUF_ERROR_INCORRECT_DATA_SIZE</a>;</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> </div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a> header;</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> memcpy(&amp;header, data, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>));</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> </div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">if</span>(header.<a class="code hl_variable" href="structDpmHeader.html#ae06c4063ef5130bb620db2bb3724d363">identifier</a> != <a class="code hl_enumvalue" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3adb070ea0a488e0519514d18b2579d450">DataPositionMeasurementBlock</a>) <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="l00061" name="l00061"></a><span class="lineno"> 61</span> </div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="keywordflow">if</span>(header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a> != length - <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>) || header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a> != <a class="code hl_function" href="internal_8h.html#a4b9ba209f6722b88a1d21f1ed4ee99c5">dpm_payload_length</a>(&amp;header) ||</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a> &gt; UINT32_MAX)</div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a8fc3ecb14777e72bebad62084b6caf16">AARUF_ERROR_INCORRECT_DATA_SIZE</a>;</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> </div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="decls_8h.html#a0fee4834bf0747bcd933c4e754aa4692">aaruf_crc64_data</a>(data + <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>), (uint32_t)header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a>) != header.<a class="code hl_variable" href="structDpmHeader.html#ae701d594176f6a5a1282d75d4d569124">crc64</a>)</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</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="l00068" name="l00068"></a><span class="lineno"> 68</span> </div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</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="l00070" name="l00070"></a><span class="lineno"> 70</span>}</div>
</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span></div>
<div class="foldopen" id="foldopen00083" data-start="{" data-end="}">
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="internal_8h.html#ae2ccc865166ddb1638f1443ac63ef326"> 83</a></span>int32_t <a class="code hl_function" href="internal_8h.html#ae2ccc865166ddb1638f1443ac63ef326">recover_dpm_block</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx)</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span>{</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Entering recover_dpm_block(%p)&quot;</span>, ctx);</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <span class="keywordflow">if</span>(ctx == NULL || ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a66879faadb3b8d95cb9f597ee9090f68">dpm_damaged_offset</a> == 0) <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="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> uint8_t *recovered = NULL;</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> uint32_t size = 0;</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> </div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="erasure__internal_8h.html#aa17442a11d3d3ef4b51b5129eed19b45">ec_recover_meta_block</a>(ctx, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a66879faadb3b8d95cb9f597ee9090f68">dpm_damaged_offset</a>, &amp;recovered, &amp;size) != <a class="code hl_define" href="errors_8h.html#a1d6e49f7e8a1fa489efa0a582e90b5de">AARUF_STATUS_OK</a> ||</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> recovered == NULL)</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> {</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Could not recover DPM block at %&quot;</span> PRIu64, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a66879faadb3b8d95cb9f597ee9090f68">dpm_damaged_offset</a>);</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> </div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting recover_dpm_block() = AARUF_ERROR_CANNOT_READ_BLOCK&quot;</span>);</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</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="l00099" name="l00099"></a><span class="lineno"> 99</span> }</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> </div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> int32_t status = <a class="code hl_define" href="errors_8h.html#a67753dacbd0ffdd397e563a8a5ecd271">AARUF_ERROR_CANNOT_READ_BLOCK</a>;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="keywordflow">if</span>(size &gt;= <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>))</div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> {</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> <a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a> header;</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> memcpy(&amp;header, recovered, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>));</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> </div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> block_length = <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>) + (<span class="keywordtype">size_t</span>)header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a>;</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> </div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="keywordflow">if</span>(header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a> &lt;= UINT32_MAX &amp;&amp; size &gt;= block_length &amp;&amp;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> <a class="code hl_function" href="internal_8h.html#ab012bc60295f357069a2d3fc0d36724e">validate_dpm_block</a>(recovered, block_length) == <a class="code hl_define" href="errors_8h.html#a1d6e49f7e8a1fa489efa0a582e90b5de">AARUF_STATUS_OK</a>)</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> {</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> uint8_t *block = malloc(block_length);</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> </div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <span class="keywordflow">if</span>(block != NULL)</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> {</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Recovered DPM block at %&quot;</span> PRIu64 <span class="stringliteral">&quot; with erasure coding&quot;</span>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a66879faadb3b8d95cb9f597ee9090f68">dpm_damaged_offset</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> memcpy(block, recovered, block_length);</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> free(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adc18974b98448f13d8bb2d0024fc32bd">dpm_block</a>);</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adc18974b98448f13d8bb2d0024fc32bd">dpm_block</a> = block;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a1198362e9af897ac2e7806881377cff7">dpm_block_length</a> = block_length;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a66879faadb3b8d95cb9f597ee9090f68">dpm_damaged_offset</a> = 0;</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> status = <a class="code hl_define" href="errors_8h.html#a1d6e49f7e8a1fa489efa0a582e90b5de">AARUF_STATUS_OK</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> }</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> }</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> free(recovered);</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</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;Exiting recover_dpm_block() = %d&quot;</span>, status);</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <span class="keywordflow">return</span> status;</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span>}</div>
</div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span></div>
<div class="foldopen" id="foldopen00148" data-start="{" data-end="}">
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"><a class="line" href="internal_8h.html#aa2692f41f0fe80552c1a2173588f12a9"> 148</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="internal_8h.html#aa2692f41f0fe80552c1a2173588f12a9">process_dpm_block</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx, <span class="keyword">const</span> <a class="code hl_struct" href="structIndexEntry.html">IndexEntry</a> *entry)</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span>{</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Entering process_dpm_block(%p, %p)&quot;</span>, ctx, entry);</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> </div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</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="l00153" name="l00153"></a><span class="lineno"> 153</span> {</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</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="l00155" name="l00155"></a><span class="lineno"> 155</span> </div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_dpm_block()&quot;</span>);</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> }</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> <span class="keywordflow">if</span>(<a class="code hl_function" href="internal_8h.html#a60c57e3b2e8e233d0be91f3690bf077c">aaruf_fseek</a>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>, (<a class="code hl_typedef" href="internal_8h.html#afb4a123eeae51c668333248fb666e0f2">aaru_off_t</a>)entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>, SEEK_SET) &lt; 0 ||</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <a class="code hl_function" href="internal_8h.html#a697ee4ab2c7adc710e56b0ef868596d7">aaruf_ftell</a>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>) != (<a class="code hl_typedef" href="internal_8h.html#afb4a123eeae51c668333248fb666e0f2">aaru_off_t</a>)entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>)</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> {</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</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="l00164" name="l00164"></a><span class="lineno"> 164</span> </div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_dpm_block()&quot;</span>);</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> }</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a> header;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> </div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> <span class="comment">// From here on, a damaged block is recovered with erasure coding if the image has it</span></div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a66879faadb3b8d95cb9f597ee9090f68">dpm_damaged_offset</a> = entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>;</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> <span class="keywordflow">if</span>(fread(&amp;header, 1, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>), ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>) != <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>))</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> {</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Could not read DPM header, trying to recover it...&quot;</span>);</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_function" href="internal_8h.html#ae2ccc865166ddb1638f1443ac63ef326">recover_dpm_block</a>(ctx);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_dpm_block()&quot;</span>);</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <span class="keywordflow">return</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> </div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span>(header.<a class="code hl_variable" href="structDpmHeader.html#ae06c4063ef5130bb620db2bb3724d363">identifier</a> != <a class="code hl_enumvalue" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3adb070ea0a488e0519514d18b2579d450">DataPositionMeasurementBlock</a> || header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a> != <a class="code hl_function" href="internal_8h.html#a4b9ba209f6722b88a1d21f1ed4ee99c5">dpm_payload_length</a>(&amp;header) ||</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a> &gt; UINT32_MAX)</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> {</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Incorrect DPM header at position %&quot;</span> PRIu64 <span class="stringliteral">&quot;, trying to recover it...&quot;</span>, entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>);</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <a class="code hl_function" href="internal_8h.html#ae2ccc865166ddb1638f1443ac63ef326">recover_dpm_block</a>(ctx);</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> </div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_dpm_block()&quot;</span>);</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> }</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> </div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keyword">const</span> <span class="keywordtype">size_t</span> block_length = <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>) + (<span class="keywordtype">size_t</span>)header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a>;</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> uint8_t *block = malloc(block_length);</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> </div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> <span class="keywordflow">if</span>(block == NULL)</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> {</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Could not allocate memory for DPM block, continuing...&quot;</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> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_dpm_block()&quot;</span>);</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> }</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> </div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> memcpy(block, &amp;header, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>));</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> </div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">if</span>(fread(block + <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structDpmHeader.html">DpmHeader</a>), 1, header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>) != header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a> ||</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <a class="code hl_function" href="internal_8h.html#ab012bc60295f357069a2d3fc0d36724e">validate_dpm_block</a>(block, block_length) != <a class="code hl_define" href="errors_8h.html#a1d6e49f7e8a1fa489efa0a582e90b5de">AARUF_STATUS_OK</a>)</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> {</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Could not read DPM block or it is corrupted, trying to recover it...&quot;</span>);</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> free(block);</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> <a class="code hl_function" href="internal_8h.html#ae2ccc865166ddb1638f1443ac63ef326">recover_dpm_block</a>(ctx);</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> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_dpm_block()&quot;</span>);</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> <span class="keywordflow">return</span>;</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> </div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> free(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adc18974b98448f13d8bb2d0024fc32bd">dpm_block</a>);</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adc18974b98448f13d8bb2d0024fc32bd">dpm_block</a> = block;</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a1198362e9af897ac2e7806881377cff7">dpm_block_length</a> = block_length;</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a66879faadb3b8d95cb9f597ee9090f68">dpm_damaged_offset</a> = 0;</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> 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> += header.<a class="code hl_variable" href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">length</a>;</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> </div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Found DPM block at %&quot;</span> PRIu64 <span class="stringliteral">&quot; with %u entries.&quot;</span>, entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>, header.<a class="code hl_variable" href="structDpmHeader.html#ab360b1de542aff0d8615a6b6786c4a5c">entries</a>);</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> </div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting process_dpm_block()&quot;</span>);</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</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="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="aenums_8h_html_a54420623f26ab6bb61042b41cccf37a3adb070ea0a488e0519514d18b2579d450"><div class="ttname"><a href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3adb070ea0a488e0519514d18b2579d450">DataPositionMeasurementBlock</a></div><div class="ttdeci">@ DataPositionMeasurementBlock</div><div class="ttdoc">Block containing data position measurements (reserved / TODO).</div><div class="ttdef"><b>Definition</b> <a href="enums_8h_source.html#l00177">enums.h:177</a></div></div>
<div class="ttc" id="aerasure__internal_8h_html"><div class="ttname"><a href="erasure__internal_8h.html">erasure_internal.h</a></div></div>
<div class="ttc" id="aerasure__internal_8h_html_aa17442a11d3d3ef4b51b5129eed19b45"><div class="ttname"><a href="erasure__internal_8h.html#aa17442a11d3d3ef4b51b5129eed19b45">ec_recover_meta_block</a></div><div class="ttdeci">int32_t ec_recover_meta_block(aaruformat_context *ctx, uint64_t block_offset, uint8_t **recovered_data, uint32_t *recovered_size)</div><div class="ttdoc">Attempt to recover a metadata/media-tag block at a given file offset.</div><div class="ttdef"><b>Definition</b> <a href="erasure_8c_source.html#l00909">erasure.c:909</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#l00082">errors.h:82</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_a8fc3ecb14777e72bebad62084b6caf16"><div class="ttname"><a href="errors_8h.html#a8fc3ecb14777e72bebad62084b6caf16">AARUF_ERROR_INCORRECT_DATA_SIZE</a></div><div class="ttdeci">#define AARUF_ERROR_INCORRECT_DATA_SIZE</div><div class="ttdoc">Data size does not match expected size.</div><div class="ttdef"><b>Definition</b> <a href="errors_8h_source.html#l00065">errors.h:65</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="ainternal_8h_html"><div class="ttname"><a href="internal_8h.html">internal.h</a></div></div>
<div class="ttc" id="ainternal_8h_html_a4b9ba209f6722b88a1d21f1ed4ee99c5"><div class="ttname"><a href="internal_8h.html#a4b9ba209f6722b88a1d21f1ed4ee99c5">dpm_payload_length</a></div><div class="ttdeci">uint64_t dpm_payload_length(const DpmHeader *header)</div><div class="ttdoc">Computes the payload length a Data Position Measurement header describes.</div><div class="ttdef"><b>Definition</b> <a href="#l00036">dpm.c:36</a></div></div>
<div class="ttc" id="ainternal_8h_html_a60c57e3b2e8e233d0be91f3690bf077c"><div class="ttname"><a href="internal_8h.html#a60c57e3b2e8e233d0be91f3690bf077c">aaruf_fseek</a></div><div class="ttdeci">static int aaruf_fseek(FILE *stream, aaru_off_t offset, int origin)</div><div class="ttdef"><b>Definition</b> <a href="internal_8h_source.html#l00046">internal.h:46</a></div></div>
<div class="ttc" id="ainternal_8h_html_a697ee4ab2c7adc710e56b0ef868596d7"><div class="ttname"><a href="internal_8h.html#a697ee4ab2c7adc710e56b0ef868596d7">aaruf_ftell</a></div><div class="ttdeci">static aaru_off_t aaruf_ftell(FILE *stream)</div><div class="ttdef"><b>Definition</b> <a href="internal_8h_source.html#l00052">internal.h:52</a></div></div>
<div class="ttc" id="ainternal_8h_html_aa2692f41f0fe80552c1a2173588f12a9"><div class="ttname"><a href="internal_8h.html#aa2692f41f0fe80552c1a2173588f12a9">process_dpm_block</a></div><div class="ttdeci">void process_dpm_block(aaruformat_context *ctx, const IndexEntry *entry)</div><div class="ttdoc">Processes a Data Position Measurement block from the image stream.</div><div class="ttdef"><b>Definition</b> <a href="#l00148">dpm.c:148</a></div></div>
<div class="ttc" id="ainternal_8h_html_ab012bc60295f357069a2d3fc0d36724e"><div class="ttname"><a href="internal_8h.html#ab012bc60295f357069a2d3fc0d36724e">validate_dpm_block</a></div><div class="ttdeci">int32_t validate_dpm_block(const uint8_t *data, size_t length)</div><div class="ttdoc">Validates a serialized Data Position Measurement block.</div><div class="ttdef"><b>Definition</b> <a href="#l00053">dpm.c:53</a></div></div>
<div class="ttc" id="ainternal_8h_html_ae2ccc865166ddb1638f1443ac63ef326"><div class="ttname"><a href="internal_8h.html#ae2ccc865166ddb1638f1443ac63ef326">recover_dpm_block</a></div><div class="ttdeci">int32_t recover_dpm_block(aaruformat_context *ctx)</div><div class="ttdoc">Recovers a damaged Data Position Measurement block with erasure coding.</div><div class="ttdef"><b>Definition</b> <a href="#l00083">dpm.c:83</a></div></div>
<div class="ttc" id="ainternal_8h_html_afb4a123eeae51c668333248fb666e0f2"><div class="ttname"><a href="internal_8h.html#afb4a123eeae51c668333248fb666e0f2">aaru_off_t</a></div><div class="ttdeci">int64_t aaru_off_t</div><div class="ttdef"><b>Definition</b> <a href="internal_8h_source.html#l00042">internal.h:42</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#l00075">log.h:75</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#l00069">log.h:69</a></div></div>
<div class="ttc" id="astructDpmCalibration_html"><div class="ttname"><a href="structDpmCalibration.html">DpmCalibration</a></div><div class="ttdoc">A rotation calibration done while measuring.</div><div class="ttdef"><b>Definition</b> <a href="dpm_8h_source.html#l00104">dpm.h:105</a></div></div>
<div class="ttc" id="astructDpmEntry_html"><div class="ttname"><a href="structDpmEntry.html">DpmEntry</a></div><div class="ttdoc">A DPM control point.</div><div class="ttdef"><b>Definition</b> <a href="dpm_8h_source.html#l00094">dpm.h:95</a></div></div>
<div class="ttc" id="astructDpmHeader_html"><div class="ttname"><a href="structDpmHeader.html">DpmHeader</a></div><div class="ttdoc">Header of the Data Position Measurement block.</div><div class="ttdef"><b>Definition</b> <a href="dpm_8h_source.html#l00076">dpm.h:77</a></div></div>
<div class="ttc" id="astructDpmHeader_html_a40aa63ac61b7be18b27b7e5396355686"><div class="ttname"><a href="structDpmHeader.html#a40aa63ac61b7be18b27b7e5396355686">DpmHeader::calibrations</a></div><div class="ttdeci">uint32_t calibrations</div><div class="ttdoc">Number of DpmCalibration records.</div><div class="ttdef"><b>Definition</b> <a href="dpm_8h_source.html#l00080">dpm.h:80</a></div></div>
<div class="ttc" id="astructDpmHeader_html_ab360b1de542aff0d8615a6b6786c4a5c"><div class="ttname"><a href="structDpmHeader.html#ab360b1de542aff0d8615a6b6786c4a5c">DpmHeader::entries</a></div><div class="ttdeci">uint32_t entries</div><div class="ttdoc">Number of DpmEntry records.</div><div class="ttdef"><b>Definition</b> <a href="dpm_8h_source.html#l00079">dpm.h:79</a></div></div>
<div class="ttc" id="astructDpmHeader_html_aba28802364c1eb1a0b721fd248c13f13"><div class="ttname"><a href="structDpmHeader.html#aba28802364c1eb1a0b721fd248c13f13">DpmHeader::layerEnds</a></div><div class="ttdeci">uint8_t layerEnds</div><div class="ttdoc">Number of layer boundaries (layers - 1), 0 for single layer media or if unknown.</div><div class="ttdef"><b>Definition</b> <a href="dpm_8h_source.html#l00084">dpm.h:84</a></div></div>
<div class="ttc" id="astructDpmHeader_html_ac7856e129ca93a87a6cab641cac7017b"><div class="ttname"><a href="structDpmHeader.html#ac7856e129ca93a87a6cab641cac7017b">DpmHeader::length</a></div><div class="ttdeci">uint64_t length</div><div class="ttdoc">Payload bytes after this header.</div><div class="ttdef"><b>Definition</b> <a href="dpm_8h_source.html#l00087">dpm.h:87</a></div></div>
<div class="ttc" id="astructDpmHeader_html_ae06c4063ef5130bb620db2bb3724d363"><div class="ttname"><a href="structDpmHeader.html#ae06c4063ef5130bb620db2bb3724d363">DpmHeader::identifier</a></div><div class="ttdeci">uint32_t identifier</div><div class="ttdoc">Block identifier, must be BlockType::DataPositionMeasurementBlock.</div><div class="ttdef"><b>Definition</b> <a href="dpm_8h_source.html#l00078">dpm.h:78</a></div></div>
<div class="ttc" id="astructDpmHeader_html_ae701d594176f6a5a1282d75d4d569124"><div class="ttname"><a href="structDpmHeader.html#ae701d594176f6a5a1282d75d4d569124">DpmHeader::crc64</a></div><div class="ttdeci">uint64_t crc64</div><div class="ttdoc">CRC64-ECMA of the payload.</div><div class="ttdef"><b>Definition</b> <a href="dpm_8h_source.html#l00088">dpm.h:88</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#l00937">aaru.h:937</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_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="astructaaruformat__context_html"><div class="ttname"><a href="structaaruformat__context.html">aaruformat_context</a></div><div class="ttdoc">Master context representing an open or in‑creation Aaru image.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00177">context.h:178</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a1198362e9af897ac2e7806881377cff7"><div class="ttname"><a href="structaaruformat__context.html#a1198362e9af897ac2e7806881377cff7">aaruformat_context::dpm_block_length</a></div><div class="ttdeci">size_t dpm_block_length</div><div class="ttdoc">Length of dpm_block in bytes, 0 if not present.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00224">context.h:224</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a66879faadb3b8d95cb9f597ee9090f68"><div class="ttname"><a href="structaaruformat__context.html#a66879faadb3b8d95cb9f597ee9090f68">aaruformat_context::dpm_damaged_offset</a></div><div class="ttdeci">uint64_t dpm_damaged_offset</div><div class="ttdoc">Offset of a DPM block that failed to load, to recover it with erasure coding, or 0.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00225">context.h:225</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#l00182">context.h:182</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#l00270">context.h:270</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_adc18974b98448f13d8bb2d0024fc32bd"><div class="ttname"><a href="structaaruformat__context.html#adc18974b98448f13d8bb2d0024fc32bd">aaruformat_context::dpm_block</a></div><div class="ttdeci">uint8_t * dpm_block</div><div class="ttdoc">Data Position Measurement block, header included.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00223">context.h:223</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_b2e0cd1ddd0a904cb261e9b68779deb4.html">blocks</a></li><li class="navelem"><a href="blocks_2dpm_8c.html">dpm.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.18.0 </li>
</ul>
</div>
</body>
</html>