Files
libaaruformat/docs/html/optical_8c_source.html

437 lines
79 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/blocks/optical.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('optical_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">optical.c</div></div>
</div><!--header-->
<div class="contents">
<a href="optical_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><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="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="foldopen00111" data-start="{" data-end="}">
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="internal_8h.html#a375a516fdf6f81e997365d93b21f6708"> 111</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="optical_8c.html#a375a516fdf6f81e997365d93b21f6708">process_tracks_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="l00112" name="l00112"></a><span class="lineno"> 112</span>{</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> <span class="keywordtype">int</span> pos = 0;</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <span class="keywordtype">size_t</span> read_bytes = 0;</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> uint64_t crc64 = 0;</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <span class="keywordtype">int</span> j = 0, k = 0;</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> </div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> <span class="comment">// Check if the context and image stream are valid</span></div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</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="l00120" name="l00120"></a><span class="lineno"> 120</span> {</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</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="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keywordflow">return</span>;</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> </div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="comment">// Seek to block</span></div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</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="l00127" name="l00127"></a><span class="lineno"> 127</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="l00128" name="l00128"></a><span class="lineno"> 128</span> {</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</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...\n&quot;</span>, entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>);</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> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> }</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="comment">// Even if those two checks shall have been done before</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> read_bytes = fread(&amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>, 1, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTracksHeader.html">TracksHeader</a>), ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</a>);</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> </div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> <span class="keywordflow">if</span>(read_bytes != <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTracksHeader.html">TracksHeader</a>))</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> {</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> memset(&amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTracksHeader.html">TracksHeader</a>));</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Could not read tracks header, continuing...\n&quot;</span>);</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> }</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>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a8f78b3d1336efc46e97bbd84deab8e80">identifier</a> != <a class="code hl_enumvalue" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3ae550bdf57660fcbf3500155c29d4637e">TracksBlock</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> memset(&amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTracksHeader.html">TracksHeader</a>));</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Incorrect identifier for data block at position %&quot;</span> PRIu64 <span class="stringliteral">&quot;\n&quot;</span>, entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>);</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> }</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> 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> += <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a>) * ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</a>;</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> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a> = (<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a> *)malloc(<span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a>) * ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</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="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a> == NULL)</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> memset(&amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTracksHeader.html">TracksHeader</a>));</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not allocate memory for metadata block, continuing...\n&quot;</span>);</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keywordflow">return</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> </div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> read_bytes = fread(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a>), ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ab516fae594bde4f76b75488d0a3ca3a8">imageStream</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> <span class="keywordflow">if</span>(read_bytes != ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</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> memset(&amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTracksHeader.html">TracksHeader</a>));</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> free(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>);</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a> = NULL;</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not read metadata block, continuing...\n&quot;</span>);</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> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</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> crc64 = <a class="code hl_function" href="decls_8h.html#a0fee4834bf0747bcd933c4e754aa4692">aaruf_crc64_data</a>((<span class="keyword">const</span> uint8_t *)ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</a> * <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a>));</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <span class="comment">// Due to how C# wrote it, it is effectively reversed</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a670dec8d59407989fefc361dc26c6832">header</a>.<a class="code hl_variable" href="structAaruHeaderV2.html#af79ca31bcd428d1a54ac25c30d09b7a7">imageMajorVersion</a> &lt;= <a class="code hl_define" href="consts_8h.html#ac837e146bff4d0f3603e4a9e444358c6">AARUF_VERSION_V1</a>) crc64 = <a class="code hl_define" href="endian_8h.html#a0c0b427a2547aa727e2c5262a174e26b">bswap_64</a>(crc64);</div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> </div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="keywordflow">if</span>(crc64 != ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#ad85cd14bec1034946445058d45b97993">crc64</a>)</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> {</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Incorrect CRC found: 0x%&quot;</span> PRIx64 <span class="stringliteral">&quot; found, expected 0x%&quot;</span> PRIx64 <span class="stringliteral">&quot;, continuing...\n&quot;</span>, crc64,</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#ad85cd14bec1034946445058d45b97993">crc64</a>);</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> }</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;Found %d tracks at position %&quot;</span> PRIu64 <span class="stringliteral">&quot;.\n&quot;</span>, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</a>, entry-&gt;<a class="code hl_variable" href="structIndexEntry.html#a854951a64192d7e4cdcfa6dd6fd2b3ea">offset</a>);</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> </div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ac970291b3449c04221827b9c2c18ac70">image_info</a>.<a class="code hl_variable" href="structImageInfo.html#a5f4e71687378856611c72604f63c2835">HasPartitions</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ac970291b3449c04221827b9c2c18ac70">image_info</a>.<a class="code hl_variable" href="structImageInfo.html#aaeb20c53439a89baaf21944b3c97f676">HasSessions</a> = <span class="keyword">true</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> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">number_of_data_tracks</a> = 0;</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> <span class="keywordflow">for</span>(j = 0; j &lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</a>; j++)</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> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>[j].<a class="code hl_variable" href="structTrackEntry.html#aa6464108b61ee648a5aa8e6ffcc9a59a">sequence</a> &gt; 0 &amp;&amp; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>[j].<a class="code hl_variable" href="structTrackEntry.html#aa6464108b61ee648a5aa8e6ffcc9a59a">sequence</a> &lt;= 99) ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">number_of_data_tracks</a>++;</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> </div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">number_of_data_tracks</a> &gt; 0)</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> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a> = malloc(<span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a>) * ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">number_of_data_tracks</a>);</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a> == NULL)</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> {</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not allocate memory for data tracks, continuing without filtered list.\n&quot;</span>);</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">number_of_data_tracks</a> = 0;</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> }</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a> = NULL;</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> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a> != NULL)</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> {</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> k = 0;</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="keywordflow">for</span>(j = 0; j &lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</a>; j++)</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>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>[j].<a class="code hl_variable" href="structTrackEntry.html#aa6464108b61ee648a5aa8e6ffcc9a59a">sequence</a> &gt; 0 &amp;&amp; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>[j].<a class="code hl_variable" href="structTrackEntry.html#aa6464108b61ee648a5aa8e6ffcc9a59a">sequence</a> &lt;= 99)</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> memcpy(&amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a>[k++], &amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>[j], <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a>));</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> }</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span>}</div>
</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span></div>
<div class="foldopen" id="foldopen00281" data-start="{" data-end="}">
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"><a class="line" href="decls_8h.html#a2ce65757ca5209f17d467c51ba7d445d"> 281</a></span>int32_t <a class="code hl_function" href="optical_8c.html#a2ce65757ca5209f17d467c51ba7d445d">aaruf_get_tracks</a>(<span class="keyword">const</span> <span class="keywordtype">void</span> *context, uint8_t *buffer, <span class="keywordtype">size_t</span> *length)</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span>{</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Entering aaruf_get_tracks(%p, %p, %zu)&quot;</span>, context, buffer, (length ? *length : 0));</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="comment">// Check context is correct AaruFormat context</span></div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span>(context == NULL)</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> {</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context&quot;</span>);</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting aaruf_get_tracks() = AARUF_ERROR_NOT_AARUFORMAT&quot;</span>);</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</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="l00292" name="l00292"></a><span class="lineno"> 292</span> }</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="keyword">const</span> <a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx = context;</div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> </div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="comment">// Not a libaaruformat context</span></div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a7dc0a0fe0bf6223ff4587fd01c360b76">magic</a> != <a class="code hl_define" href="consts_8h.html#a3c3ba66fe2b547655c9e4b16a1ba519a">AARU_MAGIC</a>)</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> {</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context&quot;</span>);</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> </div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting aaruf_get_tracks() = AARUF_ERROR_NOT_AARUFORMAT&quot;</span>);</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</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="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">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</a> == 0 || ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a> == NULL)</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> {</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Image contains no tracks&quot;</span>);</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> </div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting aaruf_get_tracks() = AARUF_ERROR_TRACK_NOT_FOUND&quot;</span>);</div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a32b645da87003df886a5742d23f8ca19">AARUF_ERROR_TRACK_NOT_FOUND</a>;</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> }</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> </div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <span class="keywordtype">size_t</span> required_length = ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</a> * <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</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> <span class="keywordflow">if</span>(buffer == NULL || length == NULL || *length &lt; required_length)</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> {</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <span class="keywordflow">if</span>(length) *length = required_length;</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Buffer too small for tracks, required %zu bytes&quot;</span>, required_length);</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> </div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting aaruf_get_tracks() = AARUF_ERROR_BUFFER_TOO_SMALL&quot;</span>);</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#ae7eea5936a22100db46aac3e4312cdae">AARUF_ERROR_BUFFER_TOO_SMALL</a>;</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</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> memcpy(buffer, ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>, required_length);</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> *length = required_length;</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> </div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting aaruf_get_tracks(%p, %p, %zu) = AARUF_STATUS_OK&quot;</span>, context, buffer, *length);</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</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="l00329" name="l00329"></a><span class="lineno"> 329</span>}</div>
</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span></div>
<div class="foldopen" id="foldopen00392" data-start="{" data-end="}">
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"><a class="line" href="decls_8h.html#a518d8d68debf1b9a24af3eb6bc2f9e49"> 392</a></span>int32_t <a class="code hl_function" href="optical_8c.html#a518d8d68debf1b9a24af3eb6bc2f9e49">aaruf_set_tracks</a>(<span class="keywordtype">void</span> *context, <a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a> *tracks, <span class="keyword">const</span> <span class="keywordtype">int</span> count)</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span>{</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;Entering aaruf_set_tracks(%p, %p, %d)&quot;</span>, context, tracks, count);</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> </div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> <span class="comment">// Check context is correct AaruFormat context</span></div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> <span class="keywordflow">if</span>(context == NULL)</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> {</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context&quot;</span>);</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> </div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting aaruf_get_tracks() = AARUF_ERROR_NOT_AARUFORMAT&quot;</span>);</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</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="l00403" name="l00403"></a><span class="lineno"> 403</span> }</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> <a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</a> *ctx = context;</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="comment">// Not a libaaruformat context</span></div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a7dc0a0fe0bf6223ff4587fd01c360b76">magic</a> != <a class="code hl_define" href="consts_8h.html#a3c3ba66fe2b547655c9e4b16a1ba519a">AARU_MAGIC</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> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid context&quot;</span>);</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;Exiting aaruf_get_tracks() = AARUF_ERROR_NOT_AARUFORMAT&quot;</span>);</div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</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="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> <span class="comment">// Clearing existing tracks</span></div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keywordflow">if</span>(count == 0)</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> {</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> memset(&amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTracksHeader.html">TracksHeader</a>));</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> free(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>);</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a> = NULL;</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> free(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a>);</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a> = NULL;</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">number_of_data_tracks</a> = 0;</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> </div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting aaruf_set_tracks() = AARUF_STATUS_OK&quot;</span>);</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</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="l00428" name="l00428"></a><span class="lineno"> 428</span> }</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> </div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> <span class="keywordflow">if</span>(tracks == NULL || count &lt; 0)</div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> {</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Invalid tracks data&quot;</span>);</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> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting aaruf_set_tracks() = AARUF_ERROR_INVALID_TRACK_FORMAT&quot;</span>);</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <span class="keywordflow">return</span> <a class="code hl_define" href="errors_8h.html#a604a2b6b7bf491f7e62a817b6c887f32">AARUF_ERROR_INVALID_TRACK_FORMAT</a>;</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> }</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> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a8f78b3d1336efc46e97bbd84deab8e80">identifier</a> = <a class="code hl_enumvalue" href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3ae550bdf57660fcbf3500155c29d4637e">TracksBlock</a>;</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</a> = (uint16_t)count;</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> free(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>);</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a> = malloc(<span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a>) * count);</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a> == NULL)</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> {</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> memset(&amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTracksHeader.html">TracksHeader</a>));</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not allocate memory for tracks&quot;</span>);</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> </div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting aaruf_set_tracks() = AARUF_ERROR_NOT_ENOUGH_MEMORY&quot;</span>);</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</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="l00449" name="l00449"></a><span class="lineno"> 449</span> }</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> memcpy(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>, tracks, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a>) * count);</div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#ad85cd14bec1034946445058d45b97993">crc64</a> = <a class="code hl_function" href="decls_8h.html#a0fee4834bf0747bcd933c4e754aa4692">aaruf_crc64_data</a>((<span class="keyword">const</span> uint8_t *)ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a>) * count);</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> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ac970291b3449c04221827b9c2c18ac70">image_info</a>.<a class="code hl_variable" href="structImageInfo.html#a5f4e71687378856611c72604f63c2835">HasPartitions</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#ac970291b3449c04221827b9c2c18ac70">image_info</a>.<a class="code hl_variable" href="structImageInfo.html#aaeb20c53439a89baaf21944b3c97f676">HasSessions</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> </div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> free(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a>);</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a> = NULL;</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> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">number_of_data_tracks</a> = 0;</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> </div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j = 0; j &lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</a>; j++)</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>[j].<a class="code hl_variable" href="structTrackEntry.html#aa6464108b61ee648a5aa8e6ffcc9a59a">sequence</a> &gt; 0 &amp;&amp; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>[j].<a class="code hl_variable" href="structTrackEntry.html#aa6464108b61ee648a5aa8e6ffcc9a59a">sequence</a> &lt;= 99) ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">number_of_data_tracks</a>++;</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> </div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">number_of_data_tracks</a> &gt; 0)</div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> {</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a> = malloc(<span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a>) * ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">number_of_data_tracks</a>);</div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a> == NULL)</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> {</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> free(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>);</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a> = NULL;</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> memset(&amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>, 0, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTracksHeader.html">TracksHeader</a>));</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">number_of_data_tracks</a> = 0;</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> <a class="code hl_define" href="log_8h.html#a053d6037d543b84ce59308ce71d15cd1">FATAL</a>(<span class="stringliteral">&quot;Could not allocate memory for data tracks&quot;</span>);</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> </div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting aaruf_set_tracks() = AARUF_ERROR_NOT_ENOUGH_MEMORY&quot;</span>);</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</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="l00477" name="l00477"></a><span class="lineno"> 477</span> }</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> }</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> </div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a> != NULL)</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> {</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> <span class="keywordtype">int</span> k = 0;</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <span class="keywordflow">for</span>(<span class="keywordtype">int</span> j = 0; j &lt; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">tracks_header</a>.<a class="code hl_variable" href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">entries</a>; j++)</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>[j].<a class="code hl_variable" href="structTrackEntry.html#aa6464108b61ee648a5aa8e6ffcc9a59a">sequence</a> &gt; 0 &amp;&amp; ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>[j].<a class="code hl_variable" href="structTrackEntry.html#aa6464108b61ee648a5aa8e6ffcc9a59a">sequence</a> &lt;= 99)</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> memcpy(&amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">data_tracks</a>[k++], &amp;ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">track_entries</a>[j], <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structTrackEntry.html">TrackEntry</a>));</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> }</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> </div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> <a class="code hl_define" href="log_8h.html#a21cc0459b78d5f2d7bd737e5aae1278a">TRACE</a>(<span class="stringliteral">&quot;Exiting aaruf_set_tracks() = AARUF_STATUS_OK&quot;</span>);</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</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="l00490" name="l00490"></a><span class="lineno"> 490</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_a3c3ba66fe2b547655c9e4b16a1ba519a"><div class="ttname"><a href="consts_8h.html#a3c3ba66fe2b547655c9e4b16a1ba519a">AARU_MAGIC</a></div><div class="ttdeci">#define AARU_MAGIC</div><div class="ttdoc">Magic identifier for AaruFormat container (ASCII &quot;AARUFRMT&quot;).</div><div class="ttdef"><b>Definition</b> <a href="consts_8h_source.html#l00064">consts.h:64</a></div></div>
<div class="ttc" id="aconsts_8h_html_ac837e146bff4d0f3603e4a9e444358c6"><div class="ttname"><a href="consts_8h.html#ac837e146bff4d0f3603e4a9e444358c6">AARUF_VERSION_V1</a></div><div class="ttdeci">#define AARUF_VERSION_V1</div><div class="ttdoc">First ondisk version (C# implementation).</div><div class="ttdef"><b>Definition</b> <a href="consts_8h_source.html#l00071">consts.h:71</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="aendian_8h_html_a0c0b427a2547aa727e2c5262a174e26b"><div class="ttname"><a href="endian_8h.html#a0c0b427a2547aa727e2c5262a174e26b">bswap_64</a></div><div class="ttdeci">#define bswap_64(x)</div><div class="ttdef"><b>Definition</b> <a href="endian_8h_source.html#l00081">endian.h:81</a></div></div>
<div class="ttc" id="aenums_8h_html_a54420623f26ab6bb61042b41cccf37a3ae550bdf57660fcbf3500155c29d4637e"><div class="ttname"><a href="enums_8h.html#a54420623f26ab6bb61042b41cccf37a3ae550bdf57660fcbf3500155c29d4637e">TracksBlock</a></div><div class="ttdeci">@ TracksBlock</div><div class="ttdoc">Block containing optical disc tracks.</div><div class="ttdef"><b>Definition</b> <a href="enums_8h_source.html#l00150">enums.h:150</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_a32b645da87003df886a5742d23f8ca19"><div class="ttname"><a href="errors_8h.html#a32b645da87003df886a5742d23f8ca19">AARUF_ERROR_TRACK_NOT_FOUND</a></div><div class="ttdeci">#define AARUF_ERROR_TRACK_NOT_FOUND</div><div class="ttdoc">Referenced track number not present.</div><div class="ttdef"><b>Definition</b> <a href="errors_8h_source.html#l00052">errors.h:52</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_a604a2b6b7bf491f7e62a817b6c887f32"><div class="ttname"><a href="errors_8h.html#a604a2b6b7bf491f7e62a817b6c887f32">AARUF_ERROR_INVALID_TRACK_FORMAT</a></div><div class="ttdeci">#define AARUF_ERROR_INVALID_TRACK_FORMAT</div><div class="ttdoc">Track metadata internally inconsistent or malformed.</div><div class="ttdef"><b>Definition</b> <a href="errors_8h_source.html#l00054">errors.h:54</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_ae7eea5936a22100db46aac3e4312cdae"><div class="ttname"><a href="errors_8h.html#ae7eea5936a22100db46aac3e4312cdae">AARUF_ERROR_BUFFER_TOO_SMALL</a></div><div class="ttdeci">#define AARUF_ERROR_BUFFER_TOO_SMALL</div><div class="ttdoc">Caller-supplied buffer insufficient for data.</div><div class="ttdef"><b>Definition</b> <a href="errors_8h_source.html#l00049">errors.h:49</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="aoptical_8c_html_a2ce65757ca5209f17d467c51ba7d445d"><div class="ttname"><a href="optical_8c.html#a2ce65757ca5209f17d467c51ba7d445d">aaruf_get_tracks</a></div><div class="ttdeci">int32_t aaruf_get_tracks(const void *context, uint8_t *buffer, size_t *length)</div><div class="ttdoc">Retrieve the array of track descriptors contained in an opened AaruFormat image.</div><div class="ttdef"><b>Definition</b> <a href="#l00281">optical.c:281</a></div></div>
<div class="ttc" id="aoptical_8c_html_a375a516fdf6f81e997365d93b21f6708"><div class="ttname"><a href="optical_8c.html#a375a516fdf6f81e997365d93b21f6708">process_tracks_block</a></div><div class="ttdeci">void process_tracks_block(aaruformat_context *ctx, const IndexEntry *entry)</div><div class="ttdoc">Parse and integrate a Tracks block from the image stream into the context.</div><div class="ttdef"><b>Definition</b> <a href="#l00111">optical.c:111</a></div></div>
<div class="ttc" id="aoptical_8c_html_a518d8d68debf1b9a24af3eb6bc2f9e49"><div class="ttname"><a href="optical_8c.html#a518d8d68debf1b9a24af3eb6bc2f9e49">aaruf_set_tracks</a></div><div class="ttdeci">int32_t aaruf_set_tracks(void *context, TrackEntry *tracks, const int count)</div><div class="ttdoc">Replace (or clear) the in-memory track table for an AaruFormat image context.</div><div class="ttdef"><b>Definition</b> <a href="#l00392">optical.c:392</a></div></div>
<div class="ttc" id="astructAaruHeaderV2_html_af79ca31bcd428d1a54ac25c30d09b7a7"><div class="ttname"><a href="structAaruHeaderV2.html#af79ca31bcd428d1a54ac25c30d09b7a7">AaruHeaderV2::imageMajorVersion</a></div><div class="ttdeci">uint8_t imageMajorVersion</div><div class="ttdoc">Container format major version.</div><div class="ttdef"><b>Definition</b> <a href="header_8h_source.html#l00110">header.h:110</a></div></div>
<div class="ttc" id="astructImageInfo_html_a5f4e71687378856611c72604f63c2835"><div class="ttname"><a href="structImageInfo.html#a5f4e71687378856611c72604f63c2835">ImageInfo::HasPartitions</a></div><div class="ttdeci">uint8_t HasPartitions</div><div class="ttdoc">Image contains partitions (or tracks for optical media); 0=no, non-zero=yes.</div><div class="ttdef"><b>Definition</b> <a href="aaru_8h_source.html#l00871">aaru.h:871</a></div></div>
<div class="ttc" id="astructImageInfo_html_aaeb20c53439a89baaf21944b3c97f676"><div class="ttname"><a href="structImageInfo.html#aaeb20c53439a89baaf21944b3c97f676">ImageInfo::HasSessions</a></div><div class="ttdeci">uint8_t HasSessions</div><div class="ttdoc">Image contains multiple sessions (optical media); 0=single/none, non-zero=multi.</div><div class="ttdef"><b>Definition</b> <a href="aaru_8h_source.html#l00872">aaru.h:872</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#l00873">aaru.h:873</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="astructTrackEntry_html"><div class="ttname"><a href="structTrackEntry.html">TrackEntry</a></div><div class="ttdoc">Single optical disc track descriptor (sequence, type, LBAs, session, ISRC, flags).</div><div class="ttdef"><b>Definition</b> <a href="optical_8h_source.html#l00071">optical.h:72</a></div></div>
<div class="ttc" id="astructTrackEntry_html_aa6464108b61ee648a5aa8e6ffcc9a59a"><div class="ttname"><a href="structTrackEntry.html#aa6464108b61ee648a5aa8e6ffcc9a59a">TrackEntry::sequence</a></div><div class="ttdeci">uint8_t sequence</div><div class="ttdoc">Track number (1..99 typical for CD audio/data). 0 may indicate placeholder/non-standard.</div><div class="ttdef"><b>Definition</b> <a href="optical_8h_source.html#l00073">optical.h:73</a></div></div>
<div class="ttc" id="astructTracksHeader_html"><div class="ttname"><a href="structTracksHeader.html">TracksHeader</a></div><div class="ttdoc">Header for an optical tracks block listing track entries.</div><div class="ttdef"><b>Definition</b> <a href="optical_8h_source.html#l00061">optical.h:62</a></div></div>
<div class="ttc" id="astructTracksHeader_html_a8f78b3d1336efc46e97bbd84deab8e80"><div class="ttname"><a href="structTracksHeader.html#a8f78b3d1336efc46e97bbd84deab8e80">TracksHeader::identifier</a></div><div class="ttdeci">uint32_t identifier</div><div class="ttdoc">Block identifier (must be BlockType::TracksBlock).</div><div class="ttdef"><b>Definition</b> <a href="optical_8h_source.html#l00063">optical.h:63</a></div></div>
<div class="ttc" id="astructTracksHeader_html_a98df23dccacc04396f07f450a742527a"><div class="ttname"><a href="structTracksHeader.html#a98df23dccacc04396f07f450a742527a">TracksHeader::entries</a></div><div class="ttdeci">uint16_t entries</div><div class="ttdoc">Number of TrackEntry records following this header.</div><div class="ttdef"><b>Definition</b> <a href="optical_8h_source.html#l00064">optical.h:64</a></div></div>
<div class="ttc" id="astructTracksHeader_html_ad85cd14bec1034946445058d45b97993"><div class="ttname"><a href="structTracksHeader.html#ad85cd14bec1034946445058d45b97993">TracksHeader::crc64</a></div><div class="ttdeci">uint64_t crc64</div><div class="ttdoc">CRC64-ECMA of the TrackEntry array (header excluded, legacy byte-swap for early versions).</div><div class="ttdef"><b>Definition</b> <a href="optical_8h_source.html#l00065">optical.h:65</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_a2656e1efffab41086f8c580896ea24a1"><div class="ttname"><a href="structaaruformat__context.html#a2656e1efffab41086f8c580896ea24a1">aaruformat_context::data_tracks</a></div><div class="ttdeci">TrackEntry * data_tracks</div><div class="ttdoc">Filtered list of data tracks (subset of trackEntries).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00243">context.h:243</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a670dec8d59407989fefc361dc26c6832"><div class="ttname"><a href="structaaruformat__context.html#a670dec8d59407989fefc361dc26c6832">aaruformat_context::header</a></div><div class="ttdeci">AaruHeaderV2 header</div><div class="ttdoc">Parsed container header (v2).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00175">context.h:175</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a7dc0a0fe0bf6223ff4587fd01c360b76"><div class="ttname"><a href="structaaruformat__context.html#a7dc0a0fe0bf6223ff4587fd01c360b76">aaruformat_context::magic</a></div><div class="ttdeci">uint64_t magic</div><div class="ttdoc">File magic (AARU_MAGIC) post-open.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00174">context.h:174</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_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_adcabe3b59f532d036adf16b78faba58e"><div class="ttname"><a href="structaaruformat__context.html#adcabe3b59f532d036adf16b78faba58e">aaruformat_context::track_entries</a></div><div class="ttdeci">TrackEntry * track_entries</div><div class="ttdoc">Full track list (tracksHeader.entries elements).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00242">context.h:242</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_adcda13fede7a22da60ef942981aef1b2"><div class="ttname"><a href="structaaruformat__context.html#adcda13fede7a22da60ef942981aef1b2">aaruformat_context::number_of_data_tracks</a></div><div class="ttdeci">uint8_t number_of_data_tracks</div><div class="ttdoc">Count of tracks considered &quot;data&quot; (sequence 1..99 heuristics).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00245">context.h:245</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_aff71b0229a1c4c78572cfdb0824e601e"><div class="ttname"><a href="structaaruformat__context.html#aff71b0229a1c4c78572cfdb0824e601e">aaruformat_context::tracks_header</a></div><div class="ttdeci">TracksHeader tracks_header</div><div class="ttdoc">Tracks header (optical) if present.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00244">context.h:244</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="optical_8c.html">optical.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>