Files
libaaruformat/docs/html/context_8h.html

327 lines
21 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: include/aaruformat/context.h File Reference</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('context_8h.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">context.h File Reference</div></div>
</div><!--header-->
<div class="contents">
<p>Central runtime context structures for libaaruformat (image state, caches, checksum buffers).
<a href="#details">More...</a></p>
<div class="textblock"><code>#include &quot;blake3.h&quot;</code><br />
<code>#include &quot;<a class="el" href="crc64_8h_source.html">crc64.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="hash__map_8h_source.html">hash_map.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="lru_8h_source.html">lru.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="md5_8h_source.html">md5.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="sha1_8h_source.html">sha1.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="sha256_8h_source.html">sha256.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="spamsum_8h_source.html">spamsum.h</a>&quot;</code><br />
<code>#include &quot;<a class="el" href="structs_8h_source.html">structs.h</a>&quot;</code><br />
<code>#include &quot;utarray.h&quot;</code><br />
</div>
<p><a href="context_8h_source.html">Go to the source code of this file.</a></p>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-nested-classes" class="groupheader"><a id="nested-classes" name="nested-classes"></a>
Data Structures</h2></td></tr>
<tr class="memitem:CdEccContext" id="r_CdEccContext"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structCdEccContext.html">CdEccContext</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Lookup tables and state for Compact Disc EDC/ECC (P/Q) regeneration / verification. <a href="structCdEccContext.html#details">More...</a><br /></td></tr>
<tr class="memitem:Checksums" id="r_Checksums"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structChecksums.html">Checksums</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Collected wholeimage checksums / hashes present in a checksum block. <a href="structChecksums.html#details">More...</a><br /></td></tr>
<tr class="memitem:mediaTagEntry" id="r_mediaTagEntry"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structmediaTagEntry.html">mediaTagEntry</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Hash table entry for an arbitrary media tag (e.g., proprietary drive/medium descriptor). <a href="structmediaTagEntry.html#details">More...</a><br /></td></tr>
<tr class="memitem:TapeFileHashEntry" id="r_TapeFileHashEntry"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structTapeFileHashEntry.html">TapeFileHashEntry</a></td></tr>
<tr class="memitem:TapePartitionHashEntry" id="r_TapePartitionHashEntry"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structTapePartitionHashEntry.html">TapePartitionHashEntry</a></td></tr>
<tr class="memitem:TapeDdtHashEntry" id="r_TapeDdtHashEntry"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structTapeDdtHashEntry.html">TapeDdtHashEntry</a></td></tr>
<tr class="memitem:aaruformat_5Fcontext" id="r_aaruformat_5Fcontext"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structaaruformat__context.html">aaruformat_context</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Master context representing an open or increation Aaru image. <a href="structaaruformat__context.html#details">More...</a><br /></td></tr>
<tr class="memitem:DumpHardwareEntriesWithData" id="r_DumpHardwareEntriesWithData"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDumpHardwareEntriesWithData.html">DumpHardwareEntriesWithData</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">In-memory representation of a dump hardware entry plus decoded variable-length fields &amp; extents. <a href="structDumpHardwareEntriesWithData.html#details">More...</a><br /></td></tr>
<tr class="memitem:DumpExtent" id="r_DumpExtent"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structDumpExtent.html">DumpExtent</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">Inclusive [start,end] logical sector range contributed by a single hardware environment. <a href="structDumpExtent.html#details">More...</a><br /></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-define-members" class="groupheader"><a id="define-members" name="define-members"></a>
Macros</h2></td></tr>
<tr class="memitem:a09a4f4b2f28cbe522d9b80153666029c" id="r_a09a4f4b2f28cbe522d9b80153666029c"><td class="memItemLeft" align="right" valign="top">#define&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a09a4f4b2f28cbe522d9b80153666029c">MD5_DIGEST_LENGTH</a>&#160;&#160;&#160;16</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 id="header-typedef-members" class="groupheader"><a id="typedef-members" name="typedef-members"></a>
Typedefs</h2></td></tr>
<tr class="memitem:a32dcff5b3409f48aa8f6741695193e9a" id="r_a32dcff5b3409f48aa8f6741695193e9a"><td class="memItemLeft" align="right" valign="top">typedef struct CdEccContext&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a32dcff5b3409f48aa8f6741695193e9a">CdEccContext</a></td></tr>
<tr class="memitem:a269d576bb08923618502afa0ce77c869" id="r_a269d576bb08923618502afa0ce77c869"><td class="memItemLeft" align="right" valign="top">typedef struct Checksums&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a269d576bb08923618502afa0ce77c869">Checksums</a></td></tr>
<tr class="memitem:a2db7e557df9bb4db40e140298b494946" id="r_a2db7e557df9bb4db40e140298b494946"><td class="memItemLeft" align="right" valign="top">typedef struct mediaTagEntry&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a2db7e557df9bb4db40e140298b494946">mediaTagEntry</a></td></tr>
<tr class="memitem:a5ba965cb003bc2d68a9f9e1c11225494" id="r_a5ba965cb003bc2d68a9f9e1c11225494"><td class="memItemLeft" align="right" valign="top">typedef struct <a class="el" href="structTapeFileHashEntry.html">TapeFileHashEntry</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a5ba965cb003bc2d68a9f9e1c11225494">tapeFileHashEntry</a></td></tr>
<tr class="memitem:a7dcde2e312674ec91292bf34f09b39d8" id="r_a7dcde2e312674ec91292bf34f09b39d8"><td class="memItemLeft" align="right" valign="top">typedef struct TapePartitionHashEntry&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a7dcde2e312674ec91292bf34f09b39d8">TapePartitionHashEntry</a></td></tr>
<tr class="memitem:a6f261287fa8891601a626c6649b3196e" id="r_a6f261287fa8891601a626c6649b3196e"><td class="memItemLeft" align="right" valign="top">typedef struct TapeDdtHashEntry&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a6f261287fa8891601a626c6649b3196e">TapeDdtHashEntry</a></td></tr>
<tr class="memitem:a07c6208ca3659883538a68592b40b53b" id="r_a07c6208ca3659883538a68592b40b53b"><td class="memItemLeft" align="right" valign="top">typedef struct aaruformat_context&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#a07c6208ca3659883538a68592b40b53b">aaruformat_context</a></td></tr>
<tr class="memitem:afdce598c4a7b73c31a747ac56458e178" id="r_afdce598c4a7b73c31a747ac56458e178"><td class="memItemLeft" align="right" valign="top">typedef struct DumpHardwareEntriesWithData&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#afdce598c4a7b73c31a747ac56458e178">DumpHardwareEntriesWithData</a></td></tr>
<tr class="memitem:aa607bc285ec04872be8d317bb16924f1" id="r_aa607bc285ec04872be8d317bb16924f1"><td class="memItemLeft" align="right" valign="top">typedef struct DumpExtent&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="#aa607bc285ec04872be8d317bb16924f1">DumpExtent</a></td></tr>
</table>
<a name="details" id="details"></a><h2 id="header-details" class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Central runtime context structures for libaaruformat (image state, caches, checksum buffers). </p>
<p>The principal structure, <a class="el" href="structaaruformat__context.html">aaruformat_context</a>, aggregates: header metadata, open stream handle, deduplication tables (DDT) currently in memory, optical disc auxiliary data (sector prefix/suffix/subchannel), track listings, geometry &amp; metadata blocks, checksum accumulators, CRC &amp; ECC helper contexts, hash map for deduplication, and transient write buffers.</p>
<p>Memory ownership model (unless otherwise stated): if a pointer field is non-NULL it is owned by the context and will be freed (or otherwise released) during context close / destruction. Callers must not free or reallocate these pointers directly. External callers should treat all internal buffers as readonly unless explicitly writing.</p>
<p>Threading: a single context instance is NOT thread-safe; serialize access if used across threads. Lifetime: allocate, initialize/open, perform read/write/verify operations, then close/free.</p>
<p>Deduplication tables (DDT): only a subset (primary table + an active secondary + optional cache) is retained in RAM; large images may rely on lazy loading of secondary tables. Flags (inMemoryDdt, userDataDdt*, cachedSecondary*) indicate what is currently resident.</p>
<p>Optical auxiliary buffers (sectorPrefix / sectorSuffix / subchannel / corrected variants) are populated only for images where those components exist (e.g., raw CD dumps). They may be NULL for block devices / nonoptical media.</p>
<p>Index handling: indexEntries (UT_array) holds a flattened list of <a class="el" href="structIndexEntry.html">IndexEntry</a> structures (regardless of v1/v2/v3). <a class="el" href="structhash__map__t.html" title="Minimal open-addressing hash map for 64-bit key/value pairs used in deduplication lookup.">hash_map_t</a> *sectorHashMap provides fast duplicate detection keyed by content fingerprint / sparse sector key.</p>
<p>Invariants / sanity expectations (not strictly enforced everywhere):</p><ul>
<li>magic == AARU_MAGIC after successful open/create.</li>
<li>header.imageMajorVersion &lt;= AARUF_VERSION.</li>
<li>imageStream != NULL when any I/O method is in progress.</li>
<li>If deduplicate == false, sectorHashMap may still be populated for bookkeeping but duplicates are stored independently.</li>
<li>If userDataDdtMini != NULL then userDataDdtBig == NULL (and vice versa) for a given level. </li>
</ul>
<p class="definition">Definition in file <a class="el" href="context_8h_source.html">context.h</a>.</p>
</div><a name="doc-define-members" id="doc-define-members"></a><h2 id="header-doc-define-members" class="groupheader">Macro Definition Documentation</h2>
<a id="a09a4f4b2f28cbe522d9b80153666029c" name="a09a4f4b2f28cbe522d9b80153666029c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a09a4f4b2f28cbe522d9b80153666029c">&#9670;&#160;</a></span>MD5_DIGEST_LENGTH</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">#define MD5_DIGEST_LENGTH&#160;&#160;&#160;16</td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="context_8h_source.html#l00069">69</a> of file <a class="el" href="context_8h_source.html">context.h</a>.</p>
<p class="reference">Referenced by <a class="el" href="checksum_8c_source.html#l00039">process_checksum_block()</a>, and <a class="el" href="close_8c_source.html#l00681">write_checksum_block()</a>.</p>
</div>
</div>
<a name="doc-typedef-members" id="doc-typedef-members"></a><h2 id="header-doc-typedef-members" class="groupheader">Typedef Documentation</h2>
<a id="a07c6208ca3659883538a68592b40b53b" name="a07c6208ca3659883538a68592b40b53b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a07c6208ca3659883538a68592b40b53b">&#9670;&#160;</a></span>aaruformat_context</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct aaruformat_context aaruformat_context</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a32dcff5b3409f48aa8f6741695193e9a" name="a32dcff5b3409f48aa8f6741695193e9a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a32dcff5b3409f48aa8f6741695193e9a">&#9670;&#160;</a></span>CdEccContext</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct CdEccContext CdEccContext</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a269d576bb08923618502afa0ce77c869" name="a269d576bb08923618502afa0ce77c869"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a269d576bb08923618502afa0ce77c869">&#9670;&#160;</a></span>Checksums</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct Checksums Checksums</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="aa607bc285ec04872be8d317bb16924f1" name="aa607bc285ec04872be8d317bb16924f1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa607bc285ec04872be8d317bb16924f1">&#9670;&#160;</a></span>DumpExtent</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct DumpExtent DumpExtent</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="afdce598c4a7b73c31a747ac56458e178" name="afdce598c4a7b73c31a747ac56458e178"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afdce598c4a7b73c31a747ac56458e178">&#9670;&#160;</a></span>DumpHardwareEntriesWithData</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct DumpHardwareEntriesWithData DumpHardwareEntriesWithData</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a2db7e557df9bb4db40e140298b494946" name="a2db7e557df9bb4db40e140298b494946"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2db7e557df9bb4db40e140298b494946">&#9670;&#160;</a></span>mediaTagEntry</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct mediaTagEntry mediaTagEntry</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a6f261287fa8891601a626c6649b3196e" name="a6f261287fa8891601a626c6649b3196e"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a6f261287fa8891601a626c6649b3196e">&#9670;&#160;</a></span>TapeDdtHashEntry</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct TapeDdtHashEntry TapeDdtHashEntry</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a5ba965cb003bc2d68a9f9e1c11225494" name="a5ba965cb003bc2d68a9f9e1c11225494"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a5ba965cb003bc2d68a9f9e1c11225494">&#9670;&#160;</a></span>tapeFileHashEntry</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct <a class="el" href="structTapeFileHashEntry.html">TapeFileHashEntry</a> <a class="el" href="#a5ba965cb003bc2d68a9f9e1c11225494">tapeFileHashEntry</a></td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<a id="a7dcde2e312674ec91292bf34f09b39d8" name="a7dcde2e312674ec91292bf34f09b39d8"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a7dcde2e312674ec91292bf34f09b39d8">&#9670;&#160;</a></span>TapePartitionHashEntry</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">typedef struct TapePartitionHashEntry TapePartitionHashEntry</td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
</div><!-- contents -->
</div><!-- doc-content -->
<div id="page-nav" class="page-nav-panel">
<div id="page-nav-resize-handle"></div>
<div id="page-nav-tree">
<div id="page-nav-contents">
</div><!-- page-nav-contents -->
</div><!-- page-nav-tree -->
</div><!-- page-nav -->
</div><!-- container -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
<ul>
<li class="navelem"><a href="dir_d44c64559bbebec7f509842c48db8b23.html">include</a></li><li class="navelem"><a href="dir_aeff2545c9dfcfc842fe9d84b123cb31.html">aaruformat</a></li><li class="navelem"><a href="context_8h.html">context.h</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>