Files
libaaruformat/docs/html/ngcw__junk_8c_source.html

387 lines
55 KiB
HTML
Raw Permalink 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.16.1"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>libaaruformat: src/ngcw/ngcw_junk.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.16.1 -->
<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('ngcw__junk_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">ngcw_junk.c</div></div>
</div><!--header-->
<div class="contents">
<a href="ngcw__junk_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; version 2.1 of the License.</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="comment"> *</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="comment"> * This library is distributed in the hope that it will be useful, but</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span><span class="comment"> * WITHOUT ANY WARRANTY; without even the implied warranty of</span></div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="comment"> * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="comment"> * Lesser General Public License for more details.</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="comment"> *</span></div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="comment"> * You should have received a copy of the GNU Lesser General Public</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span><span class="comment"> * License along with this library; if not, see</span></div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="comment"> * &lt;https://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><span class="comment"> * Nintendo GameCube/Wii junk map: serialization, deserialization, regeneration.</span></div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span><span class="comment"> */</span></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span> </div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="preprocessor">#include &lt;stdlib.h&gt;</span></div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span><span class="preprocessor">#include &lt;string.h&gt;</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> </div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span><span class="preprocessor">#include &lt;<a class="code" href="aaruformat_8h.html">aaruformat.h</a>&gt;</span></div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</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="ngcw__junk_8h.html">ngcw_junk.h</a>&quot;</span></div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> </div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span><span class="comment">/* ---- Little-endian helpers ---- */</span></div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> </div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="ngcw__junk_8c.html#a9f619d23d647df34dd36aaca29e9c600"> 30</a></span><span class="keyword">static</span> uint16_t <a class="code hl_function" href="ngcw__junk_8c.html#a9f619d23d647df34dd36aaca29e9c600">read_le16</a>(<span class="keyword">const</span> uint8_t *p) { <span class="keywordflow">return</span> (uint16_t)((uint16_t)p[0] | ((uint16_t)p[1] &lt;&lt; 8)); }</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> </div>
<div class="foldopen" id="foldopen00032" data-start="{" data-end="}">
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"><a class="line" href="ngcw__junk_8c.html#a2e85418928614df336b5df9f3c28cbc7"> 32</a></span><span class="keyword">static</span> uint32_t <a class="code hl_function" href="ngcw__junk_8c.html#a2e85418928614df336b5df9f3c28cbc7">read_le32</a>(<span class="keyword">const</span> uint8_t *p)</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span>{ <span class="keywordflow">return</span> (uint32_t)p[0] | ((uint32_t)p[1] &lt;&lt; 8) | ((uint32_t)p[2] &lt;&lt; 16) | ((uint32_t)p[3] &lt;&lt; 24); }</div>
</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> </div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"><a class="line" href="ngcw__junk_8c.html#a1fe4c6b6a6dd57bb096b41c34ef4dab6"> 35</a></span><span class="keyword">static</span> uint64_t <a class="code hl_function" href="ngcw__junk_8c.html#a1fe4c6b6a6dd57bb096b41c34ef4dab6">read_le64</a>(<span class="keyword">const</span> uint8_t *p) { <span class="keywordflow">return</span> (uint64_t)<a class="code hl_function" href="ngcw__junk_8c.html#a2e85418928614df336b5df9f3c28cbc7">read_le32</a>(p) | ((uint64_t)<a class="code hl_function" href="ngcw__junk_8c.html#a2e85418928614df336b5df9f3c28cbc7">read_le32</a>(p + 4) &lt;&lt; 32); }</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> </div>
<div class="foldopen" id="foldopen00037" data-start="{" data-end="}">
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"><a class="line" href="ngcw__junk_8c.html#a60ef541d064f1d10e028b1dd4731daa2"> 37</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="ngcw__junk_8c.html#a60ef541d064f1d10e028b1dd4731daa2">write_le16</a>(uint8_t *p, uint16_t v)</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span>{</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> p[0] = (uint8_t)(v &amp; 0xFF);</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> p[1] = (uint8_t)((v &gt;&gt; 8) &amp; 0xFF);</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span>}</div>
</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> </div>
<div class="foldopen" id="foldopen00043" data-start="{" data-end="}">
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"><a class="line" href="ngcw__junk_8c.html#a4ed80664538efb908d3c161aec613612"> 43</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="ngcw__junk_8c.html#a4ed80664538efb908d3c161aec613612">write_le32</a>(uint8_t *p, uint32_t v)</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span>{</div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> p[0] = (uint8_t)(v &amp; 0xFF);</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> p[1] = (uint8_t)((v &gt;&gt; 8) &amp; 0xFF);</div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> p[2] = (uint8_t)((v &gt;&gt; 16) &amp; 0xFF);</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> p[3] = (uint8_t)((v &gt;&gt; 24) &amp; 0xFF);</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span>}</div>
</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> </div>
<div class="foldopen" id="foldopen00051" data-start="{" data-end="}">
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"><a class="line" href="ngcw__junk_8c.html#a66d120dad3248fa03291b33257117179"> 51</a></span><span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code hl_function" href="ngcw__junk_8c.html#a66d120dad3248fa03291b33257117179">write_le64</a>(uint8_t *p, uint64_t v)</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span>{</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <a class="code hl_function" href="ngcw__junk_8c.html#a4ed80664538efb908d3c161aec613612">write_le32</a>(p, (uint32_t)(v &amp; 0xFFFFFFFF));</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> <a class="code hl_function" href="ngcw__junk_8c.html#a4ed80664538efb908d3c161aec613612">write_le32</a>(p + 4, (uint32_t)(v &gt;&gt; 32));</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span>}</div>
</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><span class="comment">/* ---- Serialization ---- */</span></div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> </div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span><span class="comment">/*</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span><span class="comment"> * Format:</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span><span class="comment"> * [2] version (uint16 LE)</span></div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span><span class="comment"> * [4] entry_count (uint32 LE)</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span><span class="comment"> * [2] seed_size (uint16 LE) — NGC_LFG_SEED_SIZE (17)</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span><span class="comment"> * For each entry:</span></div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span><span class="comment"> * [8] offset (uint64 LE)</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span><span class="comment"> * [8] length (uint64 LE)</span></div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span><span class="comment"> * [2] partition_index (uint16 LE)</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span><span class="comment"> * [seed_size * 4] seed (raw bytes)</span></div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span><span class="comment"> *</span></div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span><span class="comment"> * Header = 8 bytes. Entry = 18 + seed_size * 4 = 86 bytes (when seed_size=17).</span></div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span><span class="comment"> */</span></div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> </div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"><a class="line" href="ngcw__junk_8c.html#a78cd506368a82afeae08f11175c0f038"> 73</a></span><span class="preprocessor">#define JUNK_MAP_HEADER_SIZE 8</span></div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> </div>
<div class="foldopen" id="foldopen00075" data-start="{" data-end="}">
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"><a class="line" href="ngcw__junk_8c.html#a0db54dfda52f4a427fd159df3bc6dda0"> 75</a></span>int32_t <a class="code hl_function" href="ngcw__junk_8c.html#a0db54dfda52f4a427fd159df3bc6dda0">ngcw_serialize_junk_map</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structNgcwJunkEntry.html">NgcwJunkEntry</a> *entries, uint32_t count, uint8_t **out_data, uint32_t *out_len)</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span>{</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keywordflow">if</span>(out_data == NULL || out_len == NULL) <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> </div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> uint32_t entry_size = 18 + <a class="code hl_define" href="lfg_8h.html#a2c4db3d8d295f706dcacc8a4d039beed">NGC_LFG_SEED_SIZE</a> * 4;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> uint32_t size = <a class="code hl_define" href="ngcw__junk_8c.html#a78cd506368a82afeae08f11175c0f038">JUNK_MAP_HEADER_SIZE</a> + count * entry_size;</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> uint8_t *buf = (uint8_t *)malloc(size);</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> </div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keywordflow">if</span>(buf == NULL) <span class="keywordflow">return</span> -4;</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_function" href="ngcw__junk_8c.html#a60ef541d064f1d10e028b1dd4731daa2">write_le16</a>(buf, <a class="code hl_define" href="ngcw__junk_8h.html#aca5694a8ac4a72ca048d30aa3e534a6b">NGCW_JUNK_MAP_VERSION</a>);</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> <a class="code hl_function" href="ngcw__junk_8c.html#a4ed80664538efb908d3c161aec613612">write_le32</a>(buf + 2, count);</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_function" href="ngcw__junk_8c.html#a60ef541d064f1d10e028b1dd4731daa2">write_le16</a>(buf + 6, <a class="code hl_define" href="lfg_8h.html#a2c4db3d8d295f706dcacc8a4d039beed">NGC_LFG_SEED_SIZE</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> <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; count; i++)</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> {</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> uint8_t *p = buf + <a class="code hl_define" href="ngcw__junk_8c.html#a78cd506368a82afeae08f11175c0f038">JUNK_MAP_HEADER_SIZE</a> + i * entry_size;</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <a class="code hl_function" href="ngcw__junk_8c.html#a66d120dad3248fa03291b33257117179">write_le64</a>(p, entries[i].offset);</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> <a class="code hl_function" href="ngcw__junk_8c.html#a66d120dad3248fa03291b33257117179">write_le64</a>(p + 8, entries[i].length);</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <a class="code hl_function" href="ngcw__junk_8c.html#a60ef541d064f1d10e028b1dd4731daa2">write_le16</a>(p + 16, entries[i].partition_index);</div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> memcpy(p + 18, entries[i].seed, <a class="code hl_define" href="lfg_8h.html#a2c4db3d8d295f706dcacc8a4d039beed">NGC_LFG_SEED_SIZE</a> * <span class="keyword">sizeof</span>(uint32_t));</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> }</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> </div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> *out_data = buf;</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> *out_len = size;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span>}</div>
</div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> </div>
<div class="foldopen" id="foldopen00104" data-start="{" data-end="}">
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"><a class="line" href="ngcw__junk_8c.html#a464c045db67240ae9c3e54fbf7d6d959"> 104</a></span>int32_t <a class="code hl_function" href="ngcw__junk_8c.html#a464c045db67240ae9c3e54fbf7d6d959">ngcw_deserialize_junk_map</a>(<span class="keyword">const</span> uint8_t *data, uint32_t data_len, <a class="code hl_struct" href="structNgcwJunkEntry.html">NgcwJunkEntry</a> **entries, uint32_t *count,</div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> uint16_t *seed_size)</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span>{</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="keywordflow">if</span>(data == NULL || entries == NULL || count == NULL || seed_size == NULL) <span class="keywordflow">return</span> -1;</div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> </div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <span class="keywordflow">if</span>(data_len &lt; <a class="code hl_define" href="ngcw__junk_8c.html#a78cd506368a82afeae08f11175c0f038">JUNK_MAP_HEADER_SIZE</a>) <span class="keywordflow">return</span> -2;</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> </div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> uint16_t version = <a class="code hl_function" href="ngcw__junk_8c.html#a9f619d23d647df34dd36aaca29e9c600">read_le16</a>(data);</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> uint32_t entry_cnt = <a class="code hl_function" href="ngcw__junk_8c.html#a2e85418928614df336b5df9f3c28cbc7">read_le32</a>(data + 2);</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> uint16_t ss = <a class="code hl_function" href="ngcw__junk_8c.html#a9f619d23d647df34dd36aaca29e9c600">read_le16</a>(data + 6);</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>(version != <a class="code hl_define" href="ngcw__junk_8h.html#aca5694a8ac4a72ca048d30aa3e534a6b">NGCW_JUNK_MAP_VERSION</a>) <span class="keywordflow">return</span> -3;</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> <span class="keywordflow">if</span>(ss != <a class="code hl_define" href="lfg_8h.html#a2c4db3d8d295f706dcacc8a4d039beed">NGC_LFG_SEED_SIZE</a>) <span class="keywordflow">return</span> -3;</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> <span class="keywordflow">if</span>(entry_cnt == 0)</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> *entries = NULL;</div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> *count = 0;</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> *seed_size = ss;</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keywordflow">return</span> 0;</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> uint32_t entry_size = 18 + (uint32_t)ss * 4;</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> uint32_t required = <a class="code hl_define" href="ngcw__junk_8c.html#a78cd506368a82afeae08f11175c0f038">JUNK_MAP_HEADER_SIZE</a> + entry_cnt * entry_size;</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> </div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">if</span>(data_len &lt; required) <span class="keywordflow">return</span> -2;</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> </div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> <a class="code hl_struct" href="structNgcwJunkEntry.html">NgcwJunkEntry</a> *e = (<a class="code hl_struct" href="structNgcwJunkEntry.html">NgcwJunkEntry</a> *)calloc(entry_cnt, <span class="keyword">sizeof</span>(<a class="code hl_struct" href="structNgcwJunkEntry.html">NgcwJunkEntry</a>));</div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> </div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keywordflow">if</span>(e == NULL) <span class="keywordflow">return</span> -4;</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> </div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keywordflow">for</span>(uint32_t i = 0; i &lt; entry_cnt; i++)</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> {</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">const</span> uint8_t *p = data + <a class="code hl_define" href="ngcw__junk_8c.html#a78cd506368a82afeae08f11175c0f038">JUNK_MAP_HEADER_SIZE</a> + i * entry_size;</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> </div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> e[i].<a class="code hl_variable" href="structNgcwJunkEntry.html#a80885eaf7c79a421d9565dbb7397fa2b">offset</a> = <a class="code hl_function" href="ngcw__junk_8c.html#a1fe4c6b6a6dd57bb096b41c34ef4dab6">read_le64</a>(p);</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> e[i].<a class="code hl_variable" href="structNgcwJunkEntry.html#a082ed622c7be36afb188f0c6f75e7127">length</a> = <a class="code hl_function" href="ngcw__junk_8c.html#a1fe4c6b6a6dd57bb096b41c34ef4dab6">read_le64</a>(p + 8);</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> e[i].<a class="code hl_variable" href="structNgcwJunkEntry.html#a4ea4f27121829ac6b58029f5cea6845e">partition_index</a> = <a class="code hl_function" href="ngcw__junk_8c.html#a9f619d23d647df34dd36aaca29e9c600">read_le16</a>(p + 16);</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> memcpy(e[i].seed, p + 18, ss * <span class="keyword">sizeof</span>(uint32_t));</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> }</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> *entries = e;</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> *count = entry_cnt;</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> *seed_size = ss;</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span>}</div>
</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="comment">/* ---- Junk regeneration ---- */</span></div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> </div>
<div class="foldopen" id="foldopen00154" data-start="{" data-end="}">
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"><a class="line" href="ngcw__junk_8c.html#af61bca5a962d01d631b0a7135be54f08"> 154</a></span><span class="keywordtype">int</span> <a class="code hl_function" href="ngcw__junk_8c.html#af61bca5a962d01d631b0a7135be54f08">ngcw_regenerate_junk_sector</a>(<span class="keyword">const</span> <a class="code hl_struct" href="structNgcwJunkEntry.html">NgcwJunkEntry</a> *entries, uint32_t entry_count, uint64_t disc_offset,</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> uint8_t *output, uint32_t length)</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span>{</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keywordflow">if</span>(entries == NULL || entry_count == 0 || output == NULL) <span class="keywordflow">return</span> -1;</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> <span class="comment">/* Binary search for the entry containing disc_offset */</span></div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keywordtype">int</span> lo = 0;</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <span class="keywordtype">int</span> hi = (int)entry_count - 1;</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">while</span>(lo &lt;= hi)</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> <span class="keywordtype">int</span> mid = lo + (hi - lo) / 2;</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> uint64_t entry_end = entries[mid].<a class="code hl_variable" href="structNgcwJunkEntry.html#a80885eaf7c79a421d9565dbb7397fa2b">offset</a> + entries[mid].<a class="code hl_variable" href="structNgcwJunkEntry.html#a082ed622c7be36afb188f0c6f75e7127">length</a>;</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> <span class="keywordflow">if</span>(disc_offset &gt;= entry_end)</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> lo = mid + 1;</div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span>(disc_offset &lt; entries[mid].offset)</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> hi = mid - 1;</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> {</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> <span class="comment">/* Found: disc_offset is within entries[mid].</span></div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span><span class="comment"> * The seed&#39;s position 0 corresponds to the start of the 0x8000-aligned</span></div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span><span class="comment"> * block, not entries[mid].offset (which is the start of the junk region).</span></div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span><span class="comment"> * Compute advance from the block start. */</span></div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> uint64_t block_start = entries[mid].<a class="code hl_variable" href="structNgcwJunkEntry.html#a80885eaf7c79a421d9565dbb7397fa2b">offset</a> &amp; ~(uint64_t)0x7FFF;</div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> uint64_t stream_pos = disc_offset - block_start;</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keyword">struct </span><a class="code hl_struct" href="structngc__lfg__ctx.html">ngc_lfg_ctx</a> lfg;</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> uint32_t seed_copy[<a class="code hl_define" href="lfg_8h.html#a2c4db3d8d295f706dcacc8a4d039beed">NGC_LFG_SEED_SIZE</a>];</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> memcpy(seed_copy, entries[mid].seed, <span class="keyword">sizeof</span>(seed_copy));</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <a class="code hl_function" href="lfg_8c.html#abc583da3bb66cab3eafc3496bc46e193">ngc_lfg_set_seed</a>(&amp;lfg, seed_copy);</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> <span class="comment">/* Advance LFG to the correct stream position */</span></div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span>(stream_pos &gt; 0)</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> uint8_t discard[4096];</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> <span class="keywordtype">size_t</span> rem = (size_t)stream_pos;</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">while</span>(rem &gt; 0)</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="keywordtype">size_t</span> step = rem &gt; <span class="keyword">sizeof</span>(discard) ? <span class="keyword">sizeof</span>(discard) : rem;</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <a class="code hl_function" href="lfg_8c.html#a25e6df5ee051a324d943185f193d3418">ngc_lfg_get_bytes</a>(&amp;lfg, discard, step);</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> rem -= step;</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> }</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> <span class="comment">/* Generate the requested bytes */</span></div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <a class="code hl_function" href="lfg_8c.html#a25e6df5ee051a324d943185f193d3418">ngc_lfg_get_bytes</a>(&amp;lfg, output, length);</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> <span class="keywordflow">return</span> 0;</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> }</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">return</span> -1; <span class="comment">/* Not found */</span></div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span>}</div>
</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="comment">/* ---- Lazy initialization ---- */</span></div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> </div>
<div class="foldopen" id="foldopen00211" data-start="{" data-end="}">
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"><a class="line" href="ngcw__junk_8c.html#a8aae28231f89db161998f42c61b2e246"> 211</a></span><span class="keywordtype">void</span> <a class="code hl_function" href="ngcw__junk_8c.html#a8aae28231f89db161998f42c61b2e246">ngcw_junk_lazy_init</a>(<a class="code hl_struct" href="structaaruformat__context.html">aaruformat_context</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> <span class="keywordflow">if</span>(ctx == NULL) <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> </div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> <span class="keywordflow">if</span>(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a369261f4f02c9997195c062ba7940468">ngcw_junk_entries</a> != NULL) <span class="keywordflow">return</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> <a class="code hl_struct" href="structmediaTagEntry.html">mediaTagEntry</a> *item = NULL;</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> int32_t tag = <a class="code hl_enumvalue" href="group__MediaTags.html#ggabdd09c559df8f34ae68fcb2ff1892ebeac4a3ad4a1cde00363eeeb6894864a902">kMediaTagNgcwJunkMap</a>;</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> HASH_FIND_INT(ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a8b769e9fb9467aa11d4a2936cf5cf5ed">mediaTags</a>, &amp;tag, item);</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> </div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <span class="keywordflow">if</span>(item == NULL || item-&gt;<a class="code hl_variable" href="structmediaTagEntry.html#aa96c6684fd98145d0089d72957d2afa7">length</a> &lt; <a class="code hl_define" href="ngcw__junk_8c.html#a78cd506368a82afeae08f11175c0f038">JUNK_MAP_HEADER_SIZE</a>) <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> </div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <a class="code hl_struct" href="structNgcwJunkEntry.html">NgcwJunkEntry</a> *entries = NULL;</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> uint32_t count = 0;</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> uint16_t seed_size = 0;</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> </div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keywordflow">if</span>(<a class="code hl_function" href="ngcw__junk_8c.html#a464c045db67240ae9c3e54fbf7d6d959">ngcw_deserialize_junk_map</a>(item-&gt;<a class="code hl_variable" href="structmediaTagEntry.html#a334fc65b37efdfb624e804e98c398927">data</a>, item-&gt;<a class="code hl_variable" href="structmediaTagEntry.html#aa96c6684fd98145d0089d72957d2afa7">length</a>, &amp;entries, &amp;count, &amp;seed_size) == 0)</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> {</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a369261f4f02c9997195c062ba7940468">ngcw_junk_entries</a> = entries;</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a9307ffe59ce5d5b4f6c9c9a63b0ef70d">ngcw_junk_entry_count</a> = count;</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> ctx-&gt;<a class="code hl_variable" href="structaaruformat__context.html#a20d89d35a44654862f6aecac1f7237c6">ngcw_junk_seed_size</a> = seed_size;</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> }</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</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="agroup__MediaTags_html_ggabdd09c559df8f34ae68fcb2ff1892ebeac4a3ad4a1cde00363eeeb6894864a902"><div class="ttname"><a href="group__MediaTags.html#ggabdd09c559df8f34ae68fcb2ff1892ebeac4a3ad4a1cde00363eeeb6894864a902">kMediaTagNgcwJunkMap</a></div><div class="ttdeci">@ kMediaTagNgcwJunkMap</div><div class="ttdoc">Nintendo GameCube/Wii junk region map with LFG seeds.</div><div class="ttdef"><b>Definition</b> <a href="aaru_8h_source.html#l01087">aaru.h:1087</a></div></div>
<div class="ttc" id="alfg_8c_html_a25e6df5ee051a324d943185f193d3418"><div class="ttname"><a href="lfg_8c.html#a25e6df5ee051a324d943185f193d3418">ngc_lfg_get_bytes</a></div><div class="ttdeci">void ngc_lfg_get_bytes(struct ngc_lfg_ctx *ctx, uint8_t *out, size_t count)</div><div class="ttdoc">Generate count bytes of junk data into out.</div><div class="ttdef"><b>Definition</b> <a href="lfg_8c_source.html#l00082">lfg.c:82</a></div></div>
<div class="ttc" id="alfg_8c_html_abc583da3bb66cab3eafc3496bc46e193"><div class="ttname"><a href="lfg_8c.html#abc583da3bb66cab3eafc3496bc46e193">ngc_lfg_set_seed</a></div><div class="ttdeci">void ngc_lfg_set_seed(struct ngc_lfg_ctx *ctx, const uint32_t seed[17])</div><div class="ttdoc">Initialize the LFG from a 17-word big-endian seed.</div><div class="ttdef"><b>Definition</b> <a href="lfg_8c_source.html#l00073">lfg.c:73</a></div></div>
<div class="ttc" id="alfg_8h_html_a2c4db3d8d295f706dcacc8a4d039beed"><div class="ttname"><a href="lfg_8h.html#a2c4db3d8d295f706dcacc8a4d039beed">NGC_LFG_SEED_SIZE</a></div><div class="ttdeci">#define NGC_LFG_SEED_SIZE</div><div class="ttdoc">Number of uint32 words needed to seed the LFG.</div><div class="ttdef"><b>Definition</b> <a href="lfg_8h_source.html#l00036">lfg.h:36</a></div></div>
<div class="ttc" id="angcw__junk_8c_html_a0db54dfda52f4a427fd159df3bc6dda0"><div class="ttname"><a href="ngcw__junk_8c.html#a0db54dfda52f4a427fd159df3bc6dda0">ngcw_serialize_junk_map</a></div><div class="ttdeci">int32_t ngcw_serialize_junk_map(const NgcwJunkEntry *entries, uint32_t count, uint8_t **out_data, uint32_t *out_len)</div><div class="ttdoc">Serialize a junk map for storage as a media tag.</div><div class="ttdef"><b>Definition</b> <a href="#l00075">ngcw_junk.c:75</a></div></div>
<div class="ttc" id="angcw__junk_8c_html_a1fe4c6b6a6dd57bb096b41c34ef4dab6"><div class="ttname"><a href="ngcw__junk_8c.html#a1fe4c6b6a6dd57bb096b41c34ef4dab6">read_le64</a></div><div class="ttdeci">static uint64_t read_le64(const uint8_t *p)</div><div class="ttdef"><b>Definition</b> <a href="#l00035">ngcw_junk.c:35</a></div></div>
<div class="ttc" id="angcw__junk_8c_html_a2e85418928614df336b5df9f3c28cbc7"><div class="ttname"><a href="ngcw__junk_8c.html#a2e85418928614df336b5df9f3c28cbc7">read_le32</a></div><div class="ttdeci">static uint32_t read_le32(const uint8_t *p)</div><div class="ttdef"><b>Definition</b> <a href="#l00032">ngcw_junk.c:32</a></div></div>
<div class="ttc" id="angcw__junk_8c_html_a464c045db67240ae9c3e54fbf7d6d959"><div class="ttname"><a href="ngcw__junk_8c.html#a464c045db67240ae9c3e54fbf7d6d959">ngcw_deserialize_junk_map</a></div><div class="ttdeci">int32_t ngcw_deserialize_junk_map(const uint8_t *data, uint32_t data_len, NgcwJunkEntry **entries, uint32_t *count, uint16_t *seed_size)</div><div class="ttdoc">Deserialize a junk map from a media tag buffer.</div><div class="ttdef"><b>Definition</b> <a href="#l00104">ngcw_junk.c:104</a></div></div>
<div class="ttc" id="angcw__junk_8c_html_a4ed80664538efb908d3c161aec613612"><div class="ttname"><a href="ngcw__junk_8c.html#a4ed80664538efb908d3c161aec613612">write_le32</a></div><div class="ttdeci">static void write_le32(uint8_t *p, uint32_t v)</div><div class="ttdef"><b>Definition</b> <a href="#l00043">ngcw_junk.c:43</a></div></div>
<div class="ttc" id="angcw__junk_8c_html_a60ef541d064f1d10e028b1dd4731daa2"><div class="ttname"><a href="ngcw__junk_8c.html#a60ef541d064f1d10e028b1dd4731daa2">write_le16</a></div><div class="ttdeci">static void write_le16(uint8_t *p, uint16_t v)</div><div class="ttdef"><b>Definition</b> <a href="#l00037">ngcw_junk.c:37</a></div></div>
<div class="ttc" id="angcw__junk_8c_html_a66d120dad3248fa03291b33257117179"><div class="ttname"><a href="ngcw__junk_8c.html#a66d120dad3248fa03291b33257117179">write_le64</a></div><div class="ttdeci">static void write_le64(uint8_t *p, uint64_t v)</div><div class="ttdef"><b>Definition</b> <a href="#l00051">ngcw_junk.c:51</a></div></div>
<div class="ttc" id="angcw__junk_8c_html_a78cd506368a82afeae08f11175c0f038"><div class="ttname"><a href="ngcw__junk_8c.html#a78cd506368a82afeae08f11175c0f038">JUNK_MAP_HEADER_SIZE</a></div><div class="ttdeci">#define JUNK_MAP_HEADER_SIZE</div><div class="ttdef"><b>Definition</b> <a href="#l00073">ngcw_junk.c:73</a></div></div>
<div class="ttc" id="angcw__junk_8c_html_a8aae28231f89db161998f42c61b2e246"><div class="ttname"><a href="ngcw__junk_8c.html#a8aae28231f89db161998f42c61b2e246">ngcw_junk_lazy_init</a></div><div class="ttdeci">void ngcw_junk_lazy_init(aaruformat_context *ctx)</div><div class="ttdoc">Lazy initialization: load junk map from media tags.</div><div class="ttdef"><b>Definition</b> <a href="#l00211">ngcw_junk.c:211</a></div></div>
<div class="ttc" id="angcw__junk_8c_html_a9f619d23d647df34dd36aaca29e9c600"><div class="ttname"><a href="ngcw__junk_8c.html#a9f619d23d647df34dd36aaca29e9c600">read_le16</a></div><div class="ttdeci">static uint16_t read_le16(const uint8_t *p)</div><div class="ttdef"><b>Definition</b> <a href="#l00030">ngcw_junk.c:30</a></div></div>
<div class="ttc" id="angcw__junk_8c_html_af61bca5a962d01d631b0a7135be54f08"><div class="ttname"><a href="ngcw__junk_8c.html#af61bca5a962d01d631b0a7135be54f08">ngcw_regenerate_junk_sector</a></div><div class="ttdeci">int ngcw_regenerate_junk_sector(const NgcwJunkEntry *entries, uint32_t entry_count, uint64_t disc_offset, uint8_t *output, uint32_t length)</div><div class="ttdoc">Regenerate a junk sector from the junk map.</div><div class="ttdef"><b>Definition</b> <a href="#l00154">ngcw_junk.c:154</a></div></div>
<div class="ttc" id="angcw__junk_8h_html"><div class="ttname"><a href="ngcw__junk_8h.html">ngcw_junk.h</a></div></div>
<div class="ttc" id="angcw__junk_8h_html_aca5694a8ac4a72ca048d30aa3e534a6b"><div class="ttname"><a href="ngcw__junk_8h.html#aca5694a8ac4a72ca048d30aa3e534a6b">NGCW_JUNK_MAP_VERSION</a></div><div class="ttdeci">#define NGCW_JUNK_MAP_VERSION</div><div class="ttdoc">Current junk map serialization version.</div><div class="ttdef"><b>Definition</b> <a href="ngcw__junk_8h_source.html#l00040">ngcw_junk.h:40</a></div></div>
<div class="ttc" id="astructNgcwJunkEntry_html"><div class="ttname"><a href="structNgcwJunkEntry.html">NgcwJunkEntry</a></div><div class="ttdoc">In-memory junk map entry.</div><div class="ttdef"><b>Definition</b> <a href="ngcw__junk_8h_source.html#l00047">ngcw_junk.h:48</a></div></div>
<div class="ttc" id="astructNgcwJunkEntry_html_a082ed622c7be36afb188f0c6f75e7127"><div class="ttname"><a href="structNgcwJunkEntry.html#a082ed622c7be36afb188f0c6f75e7127">NgcwJunkEntry::length</a></div><div class="ttdeci">uint64_t length</div><div class="ttdoc">Length of junk region in bytes.</div><div class="ttdef"><b>Definition</b> <a href="ngcw__junk_8h_source.html#l00050">ngcw_junk.h:50</a></div></div>
<div class="ttc" id="astructNgcwJunkEntry_html_a4ea4f27121829ac6b58029f5cea6845e"><div class="ttname"><a href="structNgcwJunkEntry.html#a4ea4f27121829ac6b58029f5cea6845e">NgcwJunkEntry::partition_index</a></div><div class="ttdeci">uint16_t partition_index</div><div class="ttdoc">Partition index (0xFFFF for GC / inter-partition).</div><div class="ttdef"><b>Definition</b> <a href="ngcw__junk_8h_source.html#l00051">ngcw_junk.h:51</a></div></div>
<div class="ttc" id="astructNgcwJunkEntry_html_a80885eaf7c79a421d9565dbb7397fa2b"><div class="ttname"><a href="structNgcwJunkEntry.html#a80885eaf7c79a421d9565dbb7397fa2b">NgcwJunkEntry::offset</a></div><div class="ttdeci">uint64_t offset</div><div class="ttdoc">Disc byte offset where junk starts.</div><div class="ttdef"><b>Definition</b> <a href="ngcw__junk_8h_source.html#l00049">ngcw_junk.h:49</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#l00174">context.h:175</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a20d89d35a44654862f6aecac1f7237c6"><div class="ttname"><a href="structaaruformat__context.html#a20d89d35a44654862f6aecac1f7237c6">aaruformat_context::ngcw_junk_seed_size</a></div><div class="ttdeci">uint16_t ngcw_junk_seed_size</div><div class="ttdoc">LFG seed size in uint32 words (expected: 17).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00366">context.h:366</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a369261f4f02c9997195c062ba7940468"><div class="ttname"><a href="structaaruformat__context.html#a369261f4f02c9997195c062ba7940468">aaruformat_context::ngcw_junk_entries</a></div><div class="ttdeci">void * ngcw_junk_entries</div><div class="ttdoc">Parsed NgcwJunkEntry array, NULL if not loaded.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00364">context.h:364</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a8b769e9fb9467aa11d4a2936cf5cf5ed"><div class="ttname"><a href="structaaruformat__context.html#a8b769e9fb9467aa11d4a2936cf5cf5ed">aaruformat_context::mediaTags</a></div><div class="ttdeci">mediaTagEntry * mediaTags</div><div class="ttdoc">Hash table of extra media tags (uthash root).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00267">context.h:267</a></div></div>
<div class="ttc" id="astructaaruformat__context_html_a9307ffe59ce5d5b4f6c9c9a63b0ef70d"><div class="ttname"><a href="structaaruformat__context.html#a9307ffe59ce5d5b4f6c9c9a63b0ef70d">aaruformat_context::ngcw_junk_entry_count</a></div><div class="ttdeci">uint32_t ngcw_junk_entry_count</div><div class="ttdoc">Number of junk entries.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00365">context.h:365</a></div></div>
<div class="ttc" id="astructmediaTagEntry_html"><div class="ttname"><a href="structmediaTagEntry.html">mediaTagEntry</a></div><div class="ttdoc">Hash table entry for an arbitrary media tag (e.g., proprietary drive/medium descriptor).</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00121">context.h:122</a></div></div>
<div class="ttc" id="astructmediaTagEntry_html_a334fc65b37efdfb624e804e98c398927"><div class="ttname"><a href="structmediaTagEntry.html#a334fc65b37efdfb624e804e98c398927">mediaTagEntry::data</a></div><div class="ttdeci">uint8_t * data</div><div class="ttdoc">Tag data blob (opaque to library core); length bytes long.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00123">context.h:123</a></div></div>
<div class="ttc" id="astructmediaTagEntry_html_aa96c6684fd98145d0089d72957d2afa7"><div class="ttname"><a href="structmediaTagEntry.html#aa96c6684fd98145d0089d72957d2afa7">mediaTagEntry::length</a></div><div class="ttdeci">uint32_t length</div><div class="ttdoc">Length in bytes of data.</div><div class="ttdef"><b>Definition</b> <a href="context_8h_source.html#l00125">context.h:125</a></div></div>
<div class="ttc" id="astructngc__lfg__ctx_html"><div class="ttname"><a href="structngc__lfg__ctx.html">ngc_lfg_ctx</a></div><div class="ttdoc">LFG context holding the 521-word circular buffer and byte position.</div><div class="ttdef"><b>Definition</b> <a href="lfg_8h_source.html#l00041">lfg.h:42</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_366d6a3889b2c1ca7d50351540a67e4b.html">ngcw</a></li><li class="navelem"><a href="ngcw__junk_8c.html">ngcw_junk.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.16.1 </li>
</ul>
</div>
</body>
</html>