Auto update

This commit is contained in:
Andrea Mazzoleni 2026-02-28 10:26:32 +01:00
parent e0d06422f3
commit ba4a701176
216 changed files with 11486 additions and 11486 deletions

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="bw.c.gcov.html#27">bw_limit</a></td>
<td class="coverFnHi">9766068</td>
<td class="coverFnHi">9765411</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="bw.c.gcov.html#27">bw_limit</a></td>
<td class="coverFnHi">9766068</td>
<td class="coverFnHi">9765411</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -88,10 +88,10 @@
<a name="26"><span class="lineNum"> 26 </span><span class="lineCov"> 220 : bw-&gt;start = tick_ms();</span></a>
<a name="27"><span class="lineNum"> 27 </span><span class="lineCov"> 220 : }</span></a>
<a name="28"><span class="lineNum"> 28 </span> : </a>
<a name="29"><span class="lineNum"> 29 </span><span class="lineCov"> 9766068 : void bw_limit(struct snapraid_bw* bw, uint64_t bytes)</span></a>
<a name="29"><span class="lineNum"> 29 </span><span class="lineCov"> 9765411 : void bw_limit(struct snapraid_bw* bw, uint64_t bytes)</span></a>
<a name="30"><span class="lineNum"> 30 </span> : {</a>
<a name="31"><span class="lineNum"> 31 </span><span class="lineCov"> 9766068 : if (!bw || bw-&gt;limit == 0)</span></a>
<a name="32"><span class="lineNum"> 32 </span><span class="lineCov"> 9766012 : return;</span></a>
<a name="31"><span class="lineNum"> 31 </span><span class="lineCov"> 9765411 : if (!bw || bw-&gt;limit == 0)</span></a>
<a name="32"><span class="lineNum"> 32 </span><span class="lineCov"> 9765355 : return;</span></a>
<a name="33"><span class="lineNum"> 33 </span> : </a>
<a name="34"><span class="lineNum"> 34 </span><span class="lineCov"> 56 : uint64_t elapsed = tick_ms() - bw-&gt;start;</span></a>
<a name="35"><span class="lineNum"> 35 </span> : uint64_t done;</a>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">766</td>
<td class="headerCovTableEntry">765</td>
<td class="headerCovTableEntry">862</td>
<td class="headerCovTableEntryMed">88.9 %</td>
<td class="headerCovTableEntryMed">88.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -73,19 +73,19 @@
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#105">is_hash_matching</a></td>
<td class="coverFnHi">210036</td>
<td class="coverFnHi">210236</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#168">repair_step</a></td>
<td class="coverFnHi">252597</td>
<td class="coverFnHi">252818</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#76">blockcmp</a></td>
<td class="coverFnHi">468600</td>
<td class="coverFnHi">468795</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#32">es</a></td>
<td class="coverFnHi">731365</td>
<td class="coverFnHi">731403</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#293">repair</a></td>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">766</td>
<td class="headerCovTableEntry">765</td>
<td class="headerCovTableEntry">862</td>
<td class="headerCovTableEntryMed">88.9 %</td>
<td class="headerCovTableEntryMed">88.7 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -65,11 +65,11 @@
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#76">blockcmp</a></td>
<td class="coverFnHi">468600</td>
<td class="coverFnHi">468795</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#32">es</a></td>
<td class="coverFnHi">731365</td>
<td class="coverFnHi">731403</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#605">file_post</a></td>
@ -77,7 +77,7 @@
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#105">is_hash_matching</a></td>
<td class="coverFnHi">210036</td>
<td class="coverFnHi">210236</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#148">is_parity_matching</a></td>
@ -89,7 +89,7 @@
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#168">repair_step</a></td>
<td class="coverFnHi">252597</td>
<td class="coverFnHi">252818</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#2084">state_check</a></td>

File diff suppressed because it is too large Load diff

View file

@ -31,18 +31,18 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">345</td>
<td class="headerCovTableEntry">363</td>
<td class="headerCovTableEntry">409</td>
<td class="headerCovTableEntryMed">84.4 %</td>
<td class="headerCovTableEntryMed">88.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntryHi">92.9 %</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
@ -59,29 +59,29 @@
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="device.c.func.html"><img src="../updown.png" width=10 height=14 alt="Sort by function name" title="Sort by function name" border=0></a></span></td>
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></span></td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#381">smart_afr_value</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#472">poisson_prob_at_least_one_failure</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#597">state_smart</a></td>
<td class="coverFnHi">1</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#833">state_probe</a></td>
<td class="coverFn"><a href="device.c.gcov.html#472">poisson_prob_at_least_one_failure</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#381">smart_afr_value</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#833">state_probe</a></td>
<td class="coverFnHi">3</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#899">state_stat</a></td>
<td class="coverFnHi">4</td>
<td class="coverFnHi">5</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#985">state_device</a></td>
<td class="coverFnHi">6</td>
<td class="coverFnHi">7</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#481">raid_prob_of_one_or_more_failures</a></td>
@ -97,23 +97,23 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#409">smart_afr</a></td>
<td class="coverFnHi">72568</td>
<td class="coverFnHi">72582</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#521">state_info_log</a></td>
<td class="coverFnHi">72570</td>
<td class="coverFnHi">72584</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#540">state_smart_ignore</a></td>
<td class="coverFnHi">72570</td>
<td class="coverFnHi">72584</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#549">state_smart_log</a></td>
<td class="coverFnHi">72570</td>
<td class="coverFnHi">72584</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#22">device_name_set</a></td>
<td class="coverFnHi">72635</td>
<td class="coverFnHi">72647</td>
</tr>
</table>
<br>

View file

@ -31,18 +31,18 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">345</td>
<td class="headerCovTableEntry">363</td>
<td class="headerCovTableEntry">409</td>
<td class="headerCovTableEntryMed">84.4 %</td>
<td class="headerCovTableEntryMed">88.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntryHi">92.9 %</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#22">device_name_set</a></td>
<td class="coverFnHi">72635</td>
<td class="coverFnHi">72647</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#916">devtest</a></td>
@ -69,7 +69,7 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#472">poisson_prob_at_least_one_failure</a></td>
<td class="coverFnHi">1</td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#481">raid_prob_of_one_or_more_failures</a></td>
@ -77,11 +77,11 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#409">smart_afr</a></td>
<td class="coverFnHi">72568</td>
<td class="coverFnHi">72582</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#381">smart_afr_value</a></td>
<td class="coverFnLo">0</td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#815">state_attr</a></td>
@ -89,15 +89,15 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#985">state_device</a></td>
<td class="coverFnHi">6</td>
<td class="coverFnHi">7</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#521">state_info_log</a></td>
<td class="coverFnHi">72570</td>
<td class="coverFnHi">72584</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#833">state_probe</a></td>
<td class="coverFnHi">2</td>
<td class="coverFnHi">3</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#597">state_smart</a></td>
@ -105,15 +105,15 @@
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#540">state_smart_ignore</a></td>
<td class="coverFnHi">72570</td>
<td class="coverFnHi">72584</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#549">state_smart_log</a></td>
<td class="coverFnHi">72570</td>
<td class="coverFnHi">72584</td>
</tr>
<tr>
<td class="coverFn"><a href="device.c.gcov.html#899">state_stat</a></td>
<td class="coverFnHi">4</td>
<td class="coverFnHi">5</td>
</tr>
</table>
<br>

View file

@ -31,18 +31,18 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">345</td>
<td class="headerCovTableEntry">363</td>
<td class="headerCovTableEntry">409</td>
<td class="headerCovTableEntryMed">84.4 %</td>
<td class="headerCovTableEntryMed">88.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">13</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntryHi">92.9 %</td>
<td class="headerCovTableEntry">14</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
@ -83,13 +83,13 @@
<a name="21"><span class="lineNum"> 21 </span> : #include &quot;state.h&quot;</a>
<a name="22"><span class="lineNum"> 22 </span> : #include &quot;raid/raid.h&quot;</a>
<a name="23"><span class="lineNum"> 23 </span> : </a>
<a name="24"><span class="lineNum"> 24 </span><span class="lineCov"> 72635 : void device_name_set(devinfo_t* dev, const char* name, int index)</span></a>
<a name="24"><span class="lineNum"> 24 </span><span class="lineCov"> 72647 : void device_name_set(devinfo_t* dev, const char* name, int index)</span></a>
<a name="25"><span class="lineNum"> 25 </span> : {</a>
<a name="26"><span class="lineNum"> 26 </span><span class="lineCov"> 72635 : if (index == 0)</span></a>
<a name="27"><span class="lineNum"> 27 </span><span class="lineCov"> 29054 : pathcpy(dev-&gt;name, sizeof(dev-&gt;name), name);</span></a>
<a name="26"><span class="lineNum"> 26 </span><span class="lineCov"> 72647 : if (index == 0)</span></a>
<a name="27"><span class="lineNum"> 27 </span><span class="lineCov"> 29066 : pathcpy(dev-&gt;name, sizeof(dev-&gt;name), name);</span></a>
<a name="28"><span class="lineNum"> 28 </span> : else</a>
<a name="29"><span class="lineNum"> 29 </span><span class="lineCov"> 43581 : pathprint(dev-&gt;name, sizeof(dev-&gt;name), &quot;%s/%d&quot;, name, index);</span></a>
<a name="30"><span class="lineNum"> 30 </span><span class="lineCov"> 72635 : }</span></a>
<a name="30"><span class="lineNum"> 30 </span><span class="lineCov"> 72647 : }</span></a>
<a name="31"><span class="lineNum"> 31 </span> : </a>
<a name="32"><span class="lineNum"> 32 </span> : /**</a>
<a name="33"><span class="lineNum"> 33 </span> : * The following are Failure Rate tables computed from the data that</a>
@ -442,15 +442,15 @@
<a name="380"><span class="lineNum"> 380 </span> : /**</a>
<a name="381"><span class="lineNum"> 381 </span> : * Computes the estimated Annual Failure Rate from the specified table.</a>
<a name="382"><span class="lineNum"> 382 </span> : */</a>
<a name="383"><span class="lineNum"> 383 </span><span class="lineNoCov"> 0 : static double smart_afr_value(double* tab, unsigned step, uint64_t value)</span></a>
<a name="383"><span class="lineNum"> 383 </span><span class="lineCov"> 2 : static double smart_afr_value(double* tab, unsigned step, uint64_t value)</span></a>
<a name="384"><span class="lineNum"> 384 </span> : {</a>
<a name="385"><span class="lineNum"> 385 </span><span class="lineNoCov"> 0 : value /= step;</span></a>
<a name="385"><span class="lineNum"> 385 </span><span class="lineCov"> 2 : value /= step;</span></a>
<a name="386"><span class="lineNum"> 386 </span> : </a>
<a name="387"><span class="lineNum"> 387 </span><span class="lineNoCov"> 0 : if (value &gt;= SMART_MEASURES)</span></a>
<a name="387"><span class="lineNum"> 387 </span><span class="lineCov"> 2 : if (value &gt;= SMART_MEASURES)</span></a>
<a name="388"><span class="lineNum"> 388 </span><span class="lineNoCov"> 0 : value = SMART_MEASURES - 1;</span></a>
<a name="389"><span class="lineNum"> 389 </span> : </a>
<a name="390"><span class="lineNum"> 390 </span> : /* table rates are for a month, so we scale to a year */</a>
<a name="391"><span class="lineNum"> 391 </span><span class="lineNoCov"> 0 : return 365.0 / 30.0 * tab[value];</span></a>
<a name="391"><span class="lineNum"> 391 </span><span class="lineCov"> 2 : return 365.0 / 30.0 * tab[value];</span></a>
<a name="392"><span class="lineNum"> 392 </span> : }</a>
<a name="393"><span class="lineNum"> 393 </span> : </a>
<a name="394"><span class="lineNum"> 394 </span> : /**</a>
@ -470,31 +470,31 @@
<a name="408"><span class="lineNum"> 408 </span> : * we use the maximum rate reported, and we do not sum them,</a>
<a name="409"><span class="lineNum"> 409 </span> : * because the attributes are not independent.</a>
<a name="410"><span class="lineNum"> 410 </span> : */</a>
<a name="411"><span class="lineNum"> 411 </span><span class="lineCov"> 72568 : static double smart_afr(struct smart_attr* smart, const char* model)</span></a>
<a name="411"><span class="lineNum"> 411 </span><span class="lineCov"> 72582 : static double smart_afr(struct smart_attr* smart, const char* model)</span></a>
<a name="412"><span class="lineNum"> 412 </span> : {</a>
<a name="413"><span class="lineNum"> 413 </span><span class="lineCov"> 72568 : double afr = 0;</span></a>
<a name="414"><span class="lineNum"> 414 </span><span class="lineCov"> 72568 : uint64_t mask32 = 0xffffffffU;</span></a>
<a name="415"><span class="lineNum"> 415 </span><span class="lineCov"> 72568 : uint64_t mask16 = 0xffffU;</span></a>
<a name="413"><span class="lineNum"> 413 </span><span class="lineCov"> 72582 : double afr = 0;</span></a>
<a name="414"><span class="lineNum"> 414 </span><span class="lineCov"> 72582 : uint64_t mask32 = 0xffffffffU;</span></a>
<a name="415"><span class="lineNum"> 415 </span><span class="lineCov"> 72582 : uint64_t mask16 = 0xffffU;</span></a>
<a name="416"><span class="lineNum"> 416 </span> : </a>
<a name="417"><span class="lineNum"> 417 </span> : /* do not estimate for not rotational */</a>
<a name="418"><span class="lineNum"> 418 </span><span class="lineCov"> 72568 : if (smart[INFO_ROTATION_RATE].raw == 0)</span></a>
<a name="419"><span class="lineNum"> 419 </span><span class="lineCov"> 70149 : return 0;</span></a>
<a name="418"><span class="lineNum"> 418 </span><span class="lineCov"> 72582 : if (smart[INFO_ROTATION_RATE].raw == 0)</span></a>
<a name="419"><span class="lineNum"> 419 </span><span class="lineCov"> 70150 : return 0;</span></a>
<a name="420"><span class="lineNum"> 420 </span> : </a>
<a name="421"><span class="lineNum"> 421 </span><span class="lineCov"> 2419 : if (smart[5].raw != SMART_UNASSIGNED) {</span></a>
<a name="422"><span class="lineNum"> 422 </span><span class="lineNoCov"> 0 : double r = smart_afr_value(SMART_5_R, SMART_5_STEP, smart[5].raw &amp; mask32);</span></a>
<a name="423"><span class="lineNum"> 423 </span><span class="lineNoCov"> 0 : if (afr &lt; r)</span></a>
<a name="424"><span class="lineNum"> 424 </span><span class="lineNoCov"> 0 : afr = r;</span></a>
<a name="421"><span class="lineNum"> 421 </span><span class="lineCov"> 2432 : if (smart[5].raw != SMART_UNASSIGNED) {</span></a>
<a name="422"><span class="lineNum"> 422 </span><span class="lineCov"> 1 : double r = smart_afr_value(SMART_5_R, SMART_5_STEP, smart[5].raw &amp; mask32);</span></a>
<a name="423"><span class="lineNum"> 423 </span><span class="lineCov"> 1 : if (afr &lt; r)</span></a>
<a name="424"><span class="lineNum"> 424 </span><span class="lineCov"> 1 : afr = r;</span></a>
<a name="425"><span class="lineNum"> 425 </span> : }</a>
<a name="426"><span class="lineNum"> 426 </span> : </a>
<a name="427"><span class="lineNum"> 427 </span><span class="lineCov"> 2419 : if (smart[187].raw != SMART_UNASSIGNED) {</span></a>
<a name="427"><span class="lineNum"> 427 </span><span class="lineCov"> 2432 : if (smart[187].raw != SMART_UNASSIGNED) {</span></a>
<a name="428"><span class="lineNum"> 428 </span> : /* with some disks, only the lower 16 bits are significant */</a>
<a name="429"><span class="lineNum"> 429 </span> : /* See: http://web.archive.org/web/20130507072056/http://media.kingston.com/support/downloads/MKP_306_SMART_attribute.pdf */</a>
<a name="430"><span class="lineNum"> 430 </span><span class="lineNoCov"> 0 : double r = smart_afr_value(SMART_187_R, SMART_187_STEP, smart[187].raw &amp; mask16);</span></a>
<a name="431"><span class="lineNum"> 431 </span><span class="lineNoCov"> 0 : if (afr &lt; r)</span></a>
<a name="432"><span class="lineNum"> 432 </span><span class="lineNoCov"> 0 : afr = r;</span></a>
<a name="430"><span class="lineNum"> 430 </span><span class="lineCov"> 1 : double r = smart_afr_value(SMART_187_R, SMART_187_STEP, smart[187].raw &amp; mask16);</span></a>
<a name="431"><span class="lineNum"> 431 </span><span class="lineCov"> 1 : if (afr &lt; r)</span></a>
<a name="432"><span class="lineNum"> 432 </span><span class="lineCov"> 1 : afr = r;</span></a>
<a name="433"><span class="lineNum"> 433 </span> : }</a>
<a name="434"><span class="lineNum"> 434 </span> : </a>
<a name="435"><span class="lineNum"> 435 </span><span class="lineCov"> 2419 : if (</span></a>
<a name="435"><span class="lineNum"> 435 </span><span class="lineCov"> 2432 : if (</span></a>
<a name="436"><span class="lineNum"> 436 </span> : /**</a>
<a name="437"><span class="lineNum"> 437 </span> : * Don't check Command_Timeout (188) for Seagate disks.</a>
<a name="438"><span class="lineNum"> 438 </span> : *</a>
@ -502,7 +502,7 @@
<a name="440"><span class="lineNum"> 440 </span> : * and IronWolf disks to be a not significant test as</a>
<a name="441"><span class="lineNum"> 441 </span> : * this value increases too often also on sane disks.</a>
<a name="442"><span class="lineNum"> 442 </span> : */</a>
<a name="443"><span class="lineNum"> 443 </span><span class="lineCov"> 2419 : strncmp(model, &quot;ST&quot;, 2) != 0 &amp;&amp; smart[188].raw != SMART_UNASSIGNED</span></a>
<a name="443"><span class="lineNum"> 443 </span><span class="lineCov"> 2432 : strncmp(model, &quot;ST&quot;, 2) != 0 &amp;&amp; smart[188].raw != SMART_UNASSIGNED</span></a>
<a name="444"><span class="lineNum"> 444 </span> : ) {</a>
<a name="445"><span class="lineNum"> 445 </span> : /* with Seagate disks, there are three different 16 bits value reported */</a>
<a name="446"><span class="lineNum"> 446 </span> : /* the lowest one is the most significant */</a>
@ -511,19 +511,19 @@
<a name="449"><span class="lineNum"> 449 </span><span class="lineNoCov"> 0 : afr = r;</span></a>
<a name="450"><span class="lineNum"> 450 </span> : }</a>
<a name="451"><span class="lineNum"> 451 </span> : </a>
<a name="452"><span class="lineNum"> 452 </span><span class="lineCov"> 2419 : if (smart[197].raw != SMART_UNASSIGNED) {</span></a>
<a name="452"><span class="lineNum"> 452 </span><span class="lineCov"> 2432 : if (smart[197].raw != SMART_UNASSIGNED) {</span></a>
<a name="453"><span class="lineNum"> 453 </span><span class="lineNoCov"> 0 : double r = smart_afr_value(SMART_197_R, SMART_197_STEP, smart[197].raw &amp; mask32);</span></a>
<a name="454"><span class="lineNum"> 454 </span><span class="lineNoCov"> 0 : if (afr &lt; r)</span></a>
<a name="455"><span class="lineNum"> 455 </span><span class="lineNoCov"> 0 : afr = r;</span></a>
<a name="456"><span class="lineNum"> 456 </span> : }</a>
<a name="457"><span class="lineNum"> 457 </span> : </a>
<a name="458"><span class="lineNum"> 458 </span><span class="lineCov"> 2419 : if (smart[198].raw != SMART_UNASSIGNED) {</span></a>
<a name="458"><span class="lineNum"> 458 </span><span class="lineCov"> 2432 : if (smart[198].raw != SMART_UNASSIGNED) {</span></a>
<a name="459"><span class="lineNum"> 459 </span><span class="lineNoCov"> 0 : double r = smart_afr_value(SMART_198_R, SMART_198_STEP, smart[198].raw &amp; mask32);</span></a>
<a name="460"><span class="lineNum"> 460 </span><span class="lineNoCov"> 0 : if (afr &lt; r)</span></a>
<a name="461"><span class="lineNum"> 461 </span><span class="lineNoCov"> 0 : afr = r;</span></a>
<a name="462"><span class="lineNum"> 462 </span> : }</a>
<a name="463"><span class="lineNum"> 463 </span> : </a>
<a name="464"><span class="lineNum"> 464 </span><span class="lineCov"> 2419 : return afr;</span></a>
<a name="464"><span class="lineNum"> 464 </span><span class="lineCov"> 2432 : return afr;</span></a>
<a name="465"><span class="lineNum"> 465 </span> : }</a>
<a name="466"><span class="lineNum"> 466 </span> : </a>
<a name="467"><span class="lineNum"> 467 </span> : /**</a>
@ -533,9 +533,9 @@
<a name="471"><span class="lineNum"> 471 </span> : * @param afr The aggregate Annual Failure Rate (lambda).</a>
<a name="472"><span class="lineNum"> 472 </span> : * @return The probability as a double between 0 and 1.</a>
<a name="473"><span class="lineNum"> 473 </span> : */</a>
<a name="474"><span class="lineNum"> 474 </span><span class="lineCov"> 1 : static double poisson_prob_at_least_one_failure(double rate)</span></a>
<a name="474"><span class="lineNum"> 474 </span><span class="lineCov"> 2 : static double poisson_prob_at_least_one_failure(double rate)</span></a>
<a name="475"><span class="lineNum"> 475 </span> : {</a>
<a name="476"><span class="lineNum"> 476 </span><span class="lineCov"> 1 : return 1.0 - exp(-rate);</span></a>
<a name="476"><span class="lineNum"> 476 </span><span class="lineCov"> 2 : return 1.0 - exp(-rate);</span></a>
<a name="477"><span class="lineNum"> 477 </span> : }</a>
<a name="478"><span class="lineNum"> 478 </span> : </a>
<a name="479"><span class="lineNum"> 479 </span> : /**</a>
@ -582,81 +582,81 @@
<a name="520"><span class="lineNum"> 520 </span><span class="lineNoCov"> 0 : return poisson_prob_at_least_one_failure(raid_failure_rate);</span></a>
<a name="521"><span class="lineNum"> 521 </span> : }</a>
<a name="522"><span class="lineNum"> 522 </span> : </a>
<a name="523"><span class="lineNum"> 523 </span><span class="lineCov"> 72570 : static void state_info_log(devinfo_t* devinfo)</span></a>
<a name="523"><span class="lineNum"> 523 </span><span class="lineCov"> 72584 : static void state_info_log(devinfo_t* devinfo)</span></a>
<a name="524"><span class="lineNum"> 524 </span> : {</a>
<a name="525"><span class="lineNum"> 525 </span> : char esc_buffer[ESC_MAX];</a>
<a name="526"><span class="lineNum"> 526 </span> : </a>
<a name="527"><span class="lineNum"> 527 </span><span class="lineCov"> 72570 : log_tag(&quot;info:%s:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name);</span></a>
<a name="528"><span class="lineNum"> 528 </span><span class="lineCov"> 72570 : if (devinfo-&gt;serial[0])</span></a>
<a name="529"><span class="lineNum"> 529 </span><span class="lineCov"> 72570 : log_tag(&quot;attr:%s:%s:serial:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name, esc_tag(devinfo-&gt;serial, esc_buffer));</span></a>
<a name="530"><span class="lineNum"> 530 </span><span class="lineCov"> 72570 : if (devinfo-&gt;family[0])</span></a>
<a name="531"><span class="lineNum"> 531 </span><span class="lineCov"> 72570 : log_tag(&quot;attr:%s:%s:family:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name, esc_tag(devinfo-&gt;family, esc_buffer));</span></a>
<a name="532"><span class="lineNum"> 532 </span><span class="lineCov"> 72570 : if (devinfo-&gt;model[0])</span></a>
<a name="533"><span class="lineNum"> 533 </span><span class="lineCov"> 72570 : log_tag(&quot;attr:%s:%s:model:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name, esc_tag(devinfo-&gt;model, esc_buffer));</span></a>
<a name="534"><span class="lineNum"> 534 </span><span class="lineCov"> 72570 : if (devinfo-&gt;interf[0])</span></a>
<a name="535"><span class="lineNum"> 535 </span><span class="lineCov"> 72570 : log_tag(&quot;attr:%s:%s:interface:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name, esc_tag(devinfo-&gt;interf, esc_buffer));</span></a>
<a name="536"><span class="lineNum"> 536 </span><span class="lineCov"> 72570 : if (devinfo-&gt;info[INFO_SIZE] != SMART_UNASSIGNED)</span></a>
<a name="537"><span class="lineNum"> 537 </span><span class="lineCov"> 72570 : log_tag(&quot;attr:%s:%s:size:%&quot; PRIu64 &quot;\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;info[INFO_SIZE]);</span></a>
<a name="538"><span class="lineNum"> 538 </span><span class="lineCov"> 72570 : if (devinfo-&gt;info[INFO_ROTATION_RATE] != SMART_UNASSIGNED)</span></a>
<a name="539"><span class="lineNum"> 539 </span><span class="lineCov"> 72570 : log_tag(&quot;attr:%s:%s:rotationrate:%&quot; PRIu64 &quot;\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;info[INFO_ROTATION_RATE]);</span></a>
<a name="540"><span class="lineNum"> 540 </span><span class="lineCov"> 72570 : }</span></a>
<a name="527"><span class="lineNum"> 527 </span><span class="lineCov"> 72584 : log_tag(&quot;info:%s:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name);</span></a>
<a name="528"><span class="lineNum"> 528 </span><span class="lineCov"> 72584 : if (devinfo-&gt;serial[0])</span></a>
<a name="529"><span class="lineNum"> 529 </span><span class="lineCov"> 72584 : log_tag(&quot;attr:%s:%s:serial:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name, esc_tag(devinfo-&gt;serial, esc_buffer));</span></a>
<a name="530"><span class="lineNum"> 530 </span><span class="lineCov"> 72584 : if (devinfo-&gt;family[0])</span></a>
<a name="531"><span class="lineNum"> 531 </span><span class="lineCov"> 72572 : log_tag(&quot;attr:%s:%s:family:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name, esc_tag(devinfo-&gt;family, esc_buffer));</span></a>
<a name="532"><span class="lineNum"> 532 </span><span class="lineCov"> 72584 : if (devinfo-&gt;model[0])</span></a>
<a name="533"><span class="lineNum"> 533 </span><span class="lineCov"> 72584 : log_tag(&quot;attr:%s:%s:model:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name, esc_tag(devinfo-&gt;model, esc_buffer));</span></a>
<a name="534"><span class="lineNum"> 534 </span><span class="lineCov"> 72584 : if (devinfo-&gt;interf[0])</span></a>
<a name="535"><span class="lineNum"> 535 </span><span class="lineCov"> 72572 : log_tag(&quot;attr:%s:%s:interface:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name, esc_tag(devinfo-&gt;interf, esc_buffer));</span></a>
<a name="536"><span class="lineNum"> 536 </span><span class="lineCov"> 72584 : if (devinfo-&gt;info[INFO_SIZE] != SMART_UNASSIGNED)</span></a>
<a name="537"><span class="lineNum"> 537 </span><span class="lineCov"> 72584 : log_tag(&quot;attr:%s:%s:size:%&quot; PRIu64 &quot;\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;info[INFO_SIZE]);</span></a>
<a name="538"><span class="lineNum"> 538 </span><span class="lineCov"> 72584 : if (devinfo-&gt;info[INFO_ROTATION_RATE] != SMART_UNASSIGNED)</span></a>
<a name="539"><span class="lineNum"> 539 </span><span class="lineCov"> 72584 : log_tag(&quot;attr:%s:%s:rotationrate:%&quot; PRIu64 &quot;\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;info[INFO_ROTATION_RATE]);</span></a>
<a name="540"><span class="lineNum"> 540 </span><span class="lineCov"> 72584 : }</span></a>
<a name="541"><span class="lineNum"> 541 </span> : </a>
<a name="542"><span class="lineNum"> 542 </span><span class="lineCov"> 72570 : static void state_smart_ignore(struct snapraid_state* state, devinfo_t* devinfo)</span></a>
<a name="542"><span class="lineNum"> 542 </span><span class="lineCov"> 72584 : static void state_smart_ignore(struct snapraid_state* state, devinfo_t* devinfo)</span></a>
<a name="543"><span class="lineNum"> 543 </span> : {</a>
<a name="544"><span class="lineNum"> 544 </span> : /* clear attributes to ignore */</a>
<a name="545"><span class="lineNum"> 545 </span><span class="lineCov"> 362850 : for (int i = 0; i &lt; SMART_IGNORE_MAX; ++i) {</span></a>
<a name="546"><span class="lineNum"> 546 </span><span class="lineCov"> 290280 : devinfo-&gt;smart[state-&gt;smartignore[i]].raw = SMART_UNASSIGNED;</span></a>
<a name="547"><span class="lineNum"> 547 </span><span class="lineCov"> 290280 : devinfo-&gt;smart[devinfo-&gt;smartignore[i]].raw = SMART_UNASSIGNED;</span></a>
<a name="545"><span class="lineNum"> 545 </span><span class="lineCov"> 362920 : for (int i = 0; i &lt; SMART_IGNORE_MAX; ++i) {</span></a>
<a name="546"><span class="lineNum"> 546 </span><span class="lineCov"> 290336 : devinfo-&gt;smart[state-&gt;smartignore[i]].raw = SMART_UNASSIGNED;</span></a>
<a name="547"><span class="lineNum"> 547 </span><span class="lineCov"> 290336 : devinfo-&gt;smart[devinfo-&gt;smartignore[i]].raw = SMART_UNASSIGNED;</span></a>
<a name="548"><span class="lineNum"> 548 </span> : }</a>
<a name="549"><span class="lineNum"> 549 </span><span class="lineCov"> 72570 : }</span></a>
<a name="549"><span class="lineNum"> 549 </span><span class="lineCov"> 72584 : }</span></a>
<a name="550"><span class="lineNum"> 550 </span> : </a>
<a name="551"><span class="lineNum"> 551 </span><span class="lineCov"> 72570 : static void state_smart_log(devinfo_t* devinfo, double afr)</span></a>
<a name="551"><span class="lineNum"> 551 </span><span class="lineCov"> 72584 : static void state_smart_log(devinfo_t* devinfo, double afr)</span></a>
<a name="552"><span class="lineNum"> 552 </span> : {</a>
<a name="553"><span class="lineNum"> 553 </span> : unsigned j;</a>
<a name="554"><span class="lineNum"> 554 </span> : </a>
<a name="555"><span class="lineNum"> 555 </span><span class="lineCov"> 72570 : log_tag(&quot;smart:%s:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name);</span></a>
<a name="556"><span class="lineNum"> 556 </span><span class="lineCov"> 72570 : if (devinfo-&gt;smart[SMART_ERROR_PROTOCOL].raw != SMART_UNASSIGNED)</span></a>
<a name="557"><span class="lineNum"> 557 </span><span class="lineCov"> 72570 : log_tag(&quot;attr:%s:%s:error_protocol:%&quot; PRIu64 &quot;\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;smart[SMART_ERROR_PROTOCOL].raw);</span></a>
<a name="558"><span class="lineNum"> 558 </span><span class="lineCov"> 72570 : if (devinfo-&gt;smart[SMART_ERROR_MEDIUM].raw != SMART_UNASSIGNED)</span></a>
<a name="555"><span class="lineNum"> 555 </span><span class="lineCov"> 72584 : log_tag(&quot;smart:%s:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name);</span></a>
<a name="556"><span class="lineNum"> 556 </span><span class="lineCov"> 72584 : if (devinfo-&gt;smart[SMART_ERROR_PROTOCOL].raw != SMART_UNASSIGNED)</span></a>
<a name="557"><span class="lineNum"> 557 </span><span class="lineCov"> 72572 : log_tag(&quot;attr:%s:%s:error_protocol:%&quot; PRIu64 &quot;\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;smart[SMART_ERROR_PROTOCOL].raw);</span></a>
<a name="558"><span class="lineNum"> 558 </span><span class="lineCov"> 72584 : if (devinfo-&gt;smart[SMART_ERROR_MEDIUM].raw != SMART_UNASSIGNED)</span></a>
<a name="559"><span class="lineNum"> 559 </span><span class="lineCov"> 72570 : log_tag(&quot;attr:%s:%s:error_medium:%&quot; PRIu64 &quot;\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;smart[SMART_ERROR_MEDIUM].raw);</span></a>
<a name="560"><span class="lineNum"> 560 </span><span class="lineCov"> 72570 : if (devinfo-&gt;smart[SMART_WEAR_LEVEL].raw != SMART_UNASSIGNED)</span></a>
<a name="561"><span class="lineNum"> 561 </span><span class="lineCov"> 72570 : log_tag(&quot;attr:%s:%s:wear_level:%&quot; PRIu64 &quot;\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;smart[SMART_WEAR_LEVEL].raw);</span></a>
<a name="562"><span class="lineNum"> 562 </span><span class="lineCov"> 72570 : if (devinfo-&gt;smart[SMART_FLAGS].raw != SMART_UNASSIGNED)</span></a>
<a name="563"><span class="lineNum"> 563 </span><span class="lineCov"> 19352 : log_tag(&quot;attr:%s:%s:flags:%&quot; PRIu64 &quot;:%&quot; PRIx64 &quot;\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;smart[SMART_FLAGS].raw, devinfo-&gt;smart[SMART_FLAGS].raw);</span></a>
<a name="560"><span class="lineNum"> 560 </span><span class="lineCov"> 72584 : if (devinfo-&gt;smart[SMART_WEAR_LEVEL].raw != SMART_UNASSIGNED)</span></a>
<a name="561"><span class="lineNum"> 561 </span><span class="lineCov"> 72571 : log_tag(&quot;attr:%s:%s:wear_level:%&quot; PRIu64 &quot;\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;smart[SMART_WEAR_LEVEL].raw);</span></a>
<a name="562"><span class="lineNum"> 562 </span><span class="lineCov"> 72584 : if (devinfo-&gt;smart[SMART_FLAGS].raw != SMART_UNASSIGNED)</span></a>
<a name="563"><span class="lineNum"> 563 </span><span class="lineCov"> 19354 : log_tag(&quot;attr:%s:%s:flags:%&quot; PRIu64 &quot;:%&quot; PRIx64 &quot;\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;smart[SMART_FLAGS].raw, devinfo-&gt;smart[SMART_FLAGS].raw);</span></a>
<a name="564"><span class="lineNum"> 564 </span> : </a>
<a name="565"><span class="lineNum"> 565 </span><span class="lineCov"> 72570 : if (afr != 0)</span></a>
<a name="566"><span class="lineNum"> 566 </span><span class="lineNoCov"> 0 : log_tag(&quot;attr:%s:%s:afr:%g:%g\n&quot;, devinfo-&gt;file, devinfo-&gt;name, afr, poisson_prob_at_least_one_failure(afr));</span></a>
<a name="565"><span class="lineNum"> 565 </span><span class="lineCov"> 72584 : if (afr != 0)</span></a>
<a name="566"><span class="lineNum"> 566 </span><span class="lineCov"> 1 : log_tag(&quot;attr:%s:%s:afr:%g:%g\n&quot;, devinfo-&gt;file, devinfo-&gt;name, afr, poisson_prob_at_least_one_failure(afr));</span></a>
<a name="567"><span class="lineNum"> 567 </span> : </a>
<a name="568"><span class="lineNum"> 568 </span><span class="lineCov"> 18650490 : for (j = 0; j &lt; 256; ++j) {</span></a>
<a name="569"><span class="lineNum"> 569 </span><span class="lineCov"> 18577920 : struct smart_attr* attr = &amp;devinfo-&gt;smart[j];</span></a>
<a name="570"><span class="lineNum"> 570 </span><span class="lineCov"> 18577920 : if (attr-&gt;raw != SMART_UNASSIGNED) {</span></a>
<a name="571"><span class="lineNum"> 571 </span><span class="lineCov"> 17890837 : const char* type = &quot;&quot;;;</span></a>
<a name="572"><span class="lineNum"> 572 </span><span class="lineCov"> 17890837 : const char* updated = &quot;&quot;;</span></a>
<a name="573"><span class="lineNum"> 573 </span><span class="lineCov"> 17890837 : const char* when_failed = &quot;&quot;;</span></a>
<a name="568"><span class="lineNum"> 568 </span><span class="lineCov"> 18654088 : for (j = 0; j &lt; 256; ++j) {</span></a>
<a name="569"><span class="lineNum"> 569 </span><span class="lineCov"> 18581504 : struct smart_attr* attr = &amp;devinfo-&gt;smart[j];</span></a>
<a name="570"><span class="lineNum"> 570 </span><span class="lineCov"> 18581504 : if (attr-&gt;raw != SMART_UNASSIGNED) {</span></a>
<a name="571"><span class="lineNum"> 571 </span><span class="lineCov"> 17890868 : const char* type = &quot;&quot;;;</span></a>
<a name="572"><span class="lineNum"> 572 </span><span class="lineCov"> 17890868 : const char* updated = &quot;&quot;;</span></a>
<a name="573"><span class="lineNum"> 573 </span><span class="lineCov"> 17890868 : const char* when_failed = &quot;&quot;;</span></a>
<a name="574"><span class="lineNum"> 574 </span> : </a>
<a name="575"><span class="lineNum"> 575 </span><span class="lineCov"> 17890837 : if (attr-&gt;flags &amp; SMART_ATTR_TYPE_PREFAIL)</span></a>
<a name="576"><span class="lineNum"> 576 </span><span class="lineNoCov"> 0 : type = &quot;prefail&quot;;</span></a>
<a name="577"><span class="lineNum"> 577 </span><span class="lineCov"> 17890837 : else if (attr-&gt;flags &amp; SMART_ATTR_TYPE_OLDAGE)</span></a>
<a name="578"><span class="lineNum"> 578 </span><span class="lineNoCov"> 0 : type = &quot;oldage&quot;;</span></a>
<a name="579"><span class="lineNum"> 579 </span><span class="lineCov"> 17890837 : if (attr-&gt;flags &amp; SMART_ATTR_UPDATE_ALWAYS)</span></a>
<a name="580"><span class="lineNum"> 580 </span><span class="lineNoCov"> 0 : updated = &quot;always&quot;;</span></a>
<a name="581"><span class="lineNum"> 581 </span><span class="lineCov"> 17890837 : else if (attr-&gt;flags &amp; SMART_ATTR_UPDATE_OFFLINE)</span></a>
<a name="582"><span class="lineNum"> 582 </span><span class="lineNoCov"> 0 : updated = &quot;offline&quot;;</span></a>
<a name="583"><span class="lineNum"> 583 </span><span class="lineCov"> 17890837 : if (attr-&gt;flags &amp; SMART_ATTR_WHEN_FAILED_NOW)</span></a>
<a name="575"><span class="lineNum"> 575 </span><span class="lineCov"> 17890868 : if (attr-&gt;flags &amp; SMART_ATTR_TYPE_PREFAIL)</span></a>
<a name="576"><span class="lineNum"> 576 </span><span class="lineCov"> 11 : type = &quot;prefail&quot;;</span></a>
<a name="577"><span class="lineNum"> 577 </span><span class="lineCov"> 17890857 : else if (attr-&gt;flags &amp; SMART_ATTR_TYPE_OLDAGE)</span></a>
<a name="578"><span class="lineNum"> 578 </span><span class="lineCov"> 20 : type = &quot;oldage&quot;;</span></a>
<a name="579"><span class="lineNum"> 579 </span><span class="lineCov"> 17890868 : if (attr-&gt;flags &amp; SMART_ATTR_UPDATE_ALWAYS)</span></a>
<a name="580"><span class="lineNum"> 580 </span><span class="lineCov"> 28 : updated = &quot;always&quot;;</span></a>
<a name="581"><span class="lineNum"> 581 </span><span class="lineCov"> 17890840 : else if (attr-&gt;flags &amp; SMART_ATTR_UPDATE_OFFLINE)</span></a>
<a name="582"><span class="lineNum"> 582 </span><span class="lineCov"> 3 : updated = &quot;offline&quot;;</span></a>
<a name="583"><span class="lineNum"> 583 </span><span class="lineCov"> 17890868 : if (attr-&gt;flags &amp; SMART_ATTR_WHEN_FAILED_NOW)</span></a>
<a name="584"><span class="lineNum"> 584 </span><span class="lineNoCov"> 0 : when_failed = &quot;now&quot;;</span></a>
<a name="585"><span class="lineNum"> 585 </span><span class="lineCov"> 17890837 : else if (attr-&gt;flags &amp; SMART_ATTR_WHEN_FAILED_PAST)</span></a>
<a name="585"><span class="lineNum"> 585 </span><span class="lineCov"> 17890868 : else if (attr-&gt;flags &amp; SMART_ATTR_WHEN_FAILED_PAST)</span></a>
<a name="586"><span class="lineNum"> 586 </span><span class="lineNoCov"> 0 : when_failed = &quot;past&quot;;</span></a>
<a name="587"><span class="lineNum"> 587 </span><span class="lineCov"> 17890837 : else if (attr-&gt;flags &amp; SMART_ATTR_WHEN_FAILED_NEVER)</span></a>
<a name="588"><span class="lineNum"> 588 </span><span class="lineNoCov"> 0 : when_failed = &quot;never&quot;;</span></a>
<a name="587"><span class="lineNum"> 587 </span><span class="lineCov"> 17890868 : else if (attr-&gt;flags &amp; SMART_ATTR_WHEN_FAILED_NEVER)</span></a>
<a name="588"><span class="lineNum"> 588 </span><span class="lineCov"> 31 : when_failed = &quot;never&quot;;</span></a>
<a name="589"><span class="lineNum"> 589 </span> : </a>
<a name="590"><span class="lineNum"> 590 </span><span class="lineCov"> 17890837 : log_tag(&quot;attr:%s:%s:%u:%&quot; PRIu64 &quot;:%&quot; PRIx64 &quot;:%&quot; PRIu64 &quot;:%&quot; PRIu64 &quot;:%&quot; PRIu64 &quot;:%s:%s:%s:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name, j, attr-&gt;raw, attr-&gt;raw, attr-&gt;norm, attr-&gt;worst, attr-&gt;thresh, attr-&gt;name, type, updated, when_failed);</span></a>
<a name="590"><span class="lineNum"> 590 </span><span class="lineCov"> 17890868 : log_tag(&quot;attr:%s:%s:%u:%&quot; PRIu64 &quot;:%&quot; PRIx64 &quot;:%&quot; PRIu64 &quot;:%&quot; PRIu64 &quot;:%&quot; PRIu64 &quot;:%s:%s:%s:%s\n&quot;, devinfo-&gt;file, devinfo-&gt;name, j, attr-&gt;raw, attr-&gt;raw, attr-&gt;norm, attr-&gt;worst, attr-&gt;thresh, attr-&gt;name, type, updated, when_failed);</span></a>
<a name="591"><span class="lineNum"> 591 </span> : }</a>
<a name="592"><span class="lineNum"> 592 </span> : }</a>
<a name="593"><span class="lineNum"> 593 </span> : </a>
<a name="594"><span class="lineNum"> 594 </span><span class="lineCov"> 72570 : int temp = smart_temp(devinfo);</span></a>
<a name="595"><span class="lineNum"> 595 </span><span class="lineCov"> 72570 : if (temp &gt;= 0)</span></a>
<a name="596"><span class="lineNum"> 596 </span><span class="lineCov"> 72570 : log_tag(&quot;attr:%s:%s:temperature:%d\n&quot;, devinfo-&gt;file, devinfo-&gt;name, temp);</span></a>
<a name="597"><span class="lineNum"> 597 </span><span class="lineCov"> 72570 : }</span></a>
<a name="594"><span class="lineNum"> 594 </span><span class="lineCov"> 72584 : int temp = smart_temp(devinfo);</span></a>
<a name="595"><span class="lineNum"> 595 </span><span class="lineCov"> 72584 : if (temp &gt;= 0)</span></a>
<a name="596"><span class="lineNum"> 596 </span><span class="lineCov"> 72572 : log_tag(&quot;attr:%s:%s:temperature:%d\n&quot;, devinfo-&gt;file, devinfo-&gt;name, temp);</span></a>
<a name="597"><span class="lineNum"> 597 </span><span class="lineCov"> 72584 : }</span></a>
<a name="598"><span class="lineNum"> 598 </span> : </a>
<a name="599"><span class="lineNum"> 599 </span><span class="lineCov"> 1 : static void state_smart(struct snapraid_state* state, unsigned n, tommy_list* low)</span></a>
<a name="600"><span class="lineNum"> 600 </span> : {</a>
@ -894,7 +894,7 @@
<a name="832"><span class="lineNum"> 832 </span> : }</a>
<a name="833"><span class="lineNum"> 833 </span><span class="lineCov"> 2416 : }</span></a>
<a name="834"><span class="lineNum"> 834 </span> : </a>
<a name="835"><span class="lineNum"> 835 </span><span class="lineCov"> 2 : static void state_probe(struct snapraid_state* state, tommy_list* low)</span></a>
<a name="835"><span class="lineNum"> 835 </span><span class="lineCov"> 3 : static void state_probe(struct snapraid_state* state, tommy_list* low)</span></a>
<a name="836"><span class="lineNum"> 836 </span> : {</a>
<a name="837"><span class="lineNum"> 837 </span> : tommy_node* i;</a>
<a name="838"><span class="lineNum"> 838 </span> : size_t device_pad;</a>
@ -902,80 +902,80 @@
<a name="840"><span class="lineNum"> 840 </span> : (void)state;</a>
<a name="841"><span class="lineNum"> 841 </span> : </a>
<a name="842"><span class="lineNum"> 842 </span> : /* compute lengths for padding */</a>
<a name="843"><span class="lineNum"> 843 </span><span class="lineCov"> 2 : device_pad = 0;</span></a>
<a name="844"><span class="lineNum"> 844 </span><span class="lineCov"> 62 : for (i = tommy_list_head(low); i != 0; i = i-&gt;next) {</span></a>
<a name="843"><span class="lineNum"> 843 </span><span class="lineCov"> 3 : device_pad = 0;</span></a>
<a name="844"><span class="lineNum"> 844 </span><span class="lineCov"> 77 : for (i = tommy_list_head(low); i != 0; i = i-&gt;next) {</span></a>
<a name="845"><span class="lineNum"> 845 </span> : size_t len;</a>
<a name="846"><span class="lineNum"> 846 </span><span class="lineCov"> 60 : devinfo_t* devinfo = i-&gt;data;</span></a>
<a name="846"><span class="lineNum"> 846 </span><span class="lineCov"> 74 : devinfo_t* devinfo = i-&gt;data;</span></a>
<a name="847"><span class="lineNum"> 847 </span> : </a>
<a name="848"><span class="lineNum"> 848 </span><span class="lineCov"> 60 : state_smart_ignore(state, devinfo);</span></a>
<a name="848"><span class="lineNum"> 848 </span><span class="lineCov"> 74 : state_smart_ignore(state, devinfo);</span></a>
<a name="849"><span class="lineNum"> 849 </span> : </a>
<a name="850"><span class="lineNum"> 850 </span><span class="lineCov"> 60 : len = strlen(devinfo-&gt;file);</span></a>
<a name="851"><span class="lineNum"> 851 </span><span class="lineCov"> 60 : if (len &gt; device_pad)</span></a>
<a name="852"><span class="lineNum"> 852 </span><span class="lineCov"> 2 : device_pad = len;</span></a>
<a name="850"><span class="lineNum"> 850 </span><span class="lineCov"> 74 : len = strlen(devinfo-&gt;file);</span></a>
<a name="851"><span class="lineNum"> 851 </span><span class="lineCov"> 74 : if (len &gt; device_pad)</span></a>
<a name="852"><span class="lineNum"> 852 </span><span class="lineCov"> 3 : device_pad = len;</span></a>
<a name="853"><span class="lineNum"> 853 </span> : </a>
<a name="854"><span class="lineNum"> 854 </span><span class="lineCov"> 60 : double afr = smart_afr(devinfo-&gt;smart, devinfo-&gt;model);</span></a>
<a name="854"><span class="lineNum"> 854 </span><span class="lineCov"> 74 : double afr = smart_afr(devinfo-&gt;smart, devinfo-&gt;model);</span></a>
<a name="855"><span class="lineNum"> 855 </span> : </a>
<a name="856"><span class="lineNum"> 856 </span><span class="lineCov"> 60 : state_info_log(devinfo);</span></a>
<a name="857"><span class="lineNum"> 857 </span><span class="lineCov"> 60 : state_smart_log(devinfo, afr);</span></a>
<a name="856"><span class="lineNum"> 856 </span><span class="lineCov"> 74 : state_info_log(devinfo);</span></a>
<a name="857"><span class="lineNum"> 857 </span><span class="lineCov"> 74 : state_smart_log(devinfo, afr);</span></a>
<a name="858"><span class="lineNum"> 858 </span> : }</a>
<a name="859"><span class="lineNum"> 859 </span> : </a>
<a name="860"><span class="lineNum"> 860 </span><span class="lineCov"> 2 : printf(&quot;SnapRAID PROBE report:\n&quot;);</span></a>
<a name="861"><span class="lineNum"> 861 </span><span class="lineCov"> 2 : printf(&quot;\n&quot;);</span></a>
<a name="862"><span class="lineNum"> 862 </span><span class="lineCov"> 2 : printf(&quot; State &quot;);</span></a>
<a name="863"><span class="lineNum"> 863 </span><span class="lineCov"> 2 : printf(&quot; &quot;);</span></a>
<a name="864"><span class="lineNum"> 864 </span><span class="lineCov"> 2 : printl(&quot;Device&quot;, device_pad);</span></a>
<a name="865"><span class="lineNum"> 865 </span><span class="lineCov"> 2 : printf(&quot; Disk&quot;);</span></a>
<a name="866"><span class="lineNum"> 866 </span><span class="lineCov"> 2 : printf(&quot;\n&quot;);</span></a>
<a name="860"><span class="lineNum"> 860 </span><span class="lineCov"> 3 : printf(&quot;SnapRAID PROBE report:\n&quot;);</span></a>
<a name="861"><span class="lineNum"> 861 </span><span class="lineCov"> 3 : printf(&quot;\n&quot;);</span></a>
<a name="862"><span class="lineNum"> 862 </span><span class="lineCov"> 3 : printf(&quot; State &quot;);</span></a>
<a name="863"><span class="lineNum"> 863 </span><span class="lineCov"> 3 : printf(&quot; &quot;);</span></a>
<a name="864"><span class="lineNum"> 864 </span><span class="lineCov"> 3 : printl(&quot;Device&quot;, device_pad);</span></a>
<a name="865"><span class="lineNum"> 865 </span><span class="lineCov"> 3 : printf(&quot; Disk&quot;);</span></a>
<a name="866"><span class="lineNum"> 866 </span><span class="lineCov"> 3 : printf(&quot;\n&quot;);</span></a>
<a name="867"><span class="lineNum"> 867 </span> : /* |&lt;##################################################################72&gt;|####80&gt;| */</a>
<a name="868"><span class="lineNum"> 868 </span><span class="lineCov"> 2 : printf(&quot; -----------------------------------------------------------------------\n&quot;);</span></a>
<a name="868"><span class="lineNum"> 868 </span><span class="lineCov"> 3 : printf(&quot; -----------------------------------------------------------------------\n&quot;);</span></a>
<a name="869"><span class="lineNum"> 869 </span> : </a>
<a name="870"><span class="lineNum"> 870 </span><span class="lineCov"> 62 : for (i = tommy_list_head(low); i != 0; i = i-&gt;next) {</span></a>
<a name="871"><span class="lineNum"> 871 </span><span class="lineCov"> 60 : devinfo_t* devinfo = i-&gt;data;</span></a>
<a name="870"><span class="lineNum"> 870 </span><span class="lineCov"> 77 : for (i = tommy_list_head(low); i != 0; i = i-&gt;next) {</span></a>
<a name="871"><span class="lineNum"> 871 </span><span class="lineCov"> 74 : devinfo_t* devinfo = i-&gt;data;</span></a>
<a name="872"><span class="lineNum"> 872 </span> : </a>
<a name="873"><span class="lineNum"> 873 </span><span class="lineCov"> 60 : printf(&quot; &quot;);</span></a>
<a name="873"><span class="lineNum"> 873 </span><span class="lineCov"> 74 : printf(&quot; &quot;);</span></a>
<a name="874"><span class="lineNum"> 874 </span> : </a>
<a name="875"><span class="lineNum"> 875 </span><span class="lineCov"> 60 : switch (devinfo-&gt;power) {</span></a>
<a name="876"><span class="lineNum"> 876 </span><span class="lineNoCov"> 0 : case POWER_STANDBY : printf(&quot;StandBy&quot;); break;</span></a>
<a name="877"><span class="lineNum"> 877 </span><span class="lineCov"> 60 : case POWER_ACTIVE : printf(&quot; Active&quot;); break;</span></a>
<a name="875"><span class="lineNum"> 875 </span><span class="lineCov"> 74 : switch (devinfo-&gt;power) {</span></a>
<a name="876"><span class="lineNum"> 876 </span><span class="lineCov"> 12 : case POWER_STANDBY : printf(&quot;StandBy&quot;); break;</span></a>
<a name="877"><span class="lineNum"> 877 </span><span class="lineCov"> 62 : case POWER_ACTIVE : printf(&quot; Active&quot;); break;</span></a>
<a name="878"><span class="lineNum"> 878 </span><span class="lineNoCov"> 0 : default : printf(&quot;Unknown&quot;); break;</span></a>
<a name="879"><span class="lineNum"> 879 </span> : }</a>
<a name="880"><span class="lineNum"> 880 </span> : </a>
<a name="881"><span class="lineNum"> 881 </span><span class="lineCov"> 60 : printf(&quot; &quot;);</span></a>
<a name="882"><span class="lineNum"> 882 </span><span class="lineCov"> 60 : if (*devinfo-&gt;file)</span></a>
<a name="883"><span class="lineNum"> 883 </span><span class="lineCov"> 60 : printl(devinfo-&gt;file, device_pad);</span></a>
<a name="881"><span class="lineNum"> 881 </span><span class="lineCov"> 74 : printf(&quot; &quot;);</span></a>
<a name="882"><span class="lineNum"> 882 </span><span class="lineCov"> 74 : if (*devinfo-&gt;file)</span></a>
<a name="883"><span class="lineNum"> 883 </span><span class="lineCov"> 74 : printl(devinfo-&gt;file, device_pad);</span></a>
<a name="884"><span class="lineNum"> 884 </span> : else</a>
<a name="885"><span class="lineNum"> 885 </span><span class="lineNoCov"> 0 : printl(&quot;-&quot;, device_pad);</span></a>
<a name="886"><span class="lineNum"> 886 </span> : </a>
<a name="887"><span class="lineNum"> 887 </span><span class="lineCov"> 60 : printf(&quot; &quot;);</span></a>
<a name="888"><span class="lineNum"> 888 </span><span class="lineCov"> 60 : if (*devinfo-&gt;name)</span></a>
<a name="889"><span class="lineNum"> 889 </span><span class="lineCov"> 60 : printf(&quot;%s&quot;, devinfo-&gt;name);</span></a>
<a name="887"><span class="lineNum"> 887 </span><span class="lineCov"> 74 : printf(&quot; &quot;);</span></a>
<a name="888"><span class="lineNum"> 888 </span><span class="lineCov"> 74 : if (*devinfo-&gt;name)</span></a>
<a name="889"><span class="lineNum"> 889 </span><span class="lineCov"> 72 : printf(&quot;%s&quot;, devinfo-&gt;name);</span></a>
<a name="890"><span class="lineNum"> 890 </span> : else</a>
<a name="891"><span class="lineNum"> 891 </span><span class="lineNoCov"> 0 : printf(&quot;-&quot;);</span></a>
<a name="891"><span class="lineNum"> 891 </span><span class="lineCov"> 2 : printf(&quot;-&quot;);</span></a>
<a name="892"><span class="lineNum"> 892 </span> : </a>
<a name="893"><span class="lineNum"> 893 </span><span class="lineCov"> 60 : printf(&quot;\n&quot;);</span></a>
<a name="893"><span class="lineNum"> 893 </span><span class="lineCov"> 74 : printf(&quot;\n&quot;);</span></a>
<a name="894"><span class="lineNum"> 894 </span> : </a>
<a name="895"><span class="lineNum"> 895 </span><span class="lineCov"> 60 : log_tag(&quot;probe:%s:%s:%d\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;power);</span></a>
<a name="895"><span class="lineNum"> 895 </span><span class="lineCov"> 74 : log_tag(&quot;probe:%s:%s:%d\n&quot;, devinfo-&gt;file, devinfo-&gt;name, devinfo-&gt;power);</span></a>
<a name="896"><span class="lineNum"> 896 </span> : }</a>
<a name="897"><span class="lineNum"> 897 </span> : </a>
<a name="898"><span class="lineNum"> 898 </span><span class="lineCov"> 2 : printf(&quot;\n&quot;);</span></a>
<a name="899"><span class="lineNum"> 899 </span><span class="lineCov"> 2 : }</span></a>
<a name="898"><span class="lineNum"> 898 </span><span class="lineCov"> 3 : printf(&quot;\n&quot;);</span></a>
<a name="899"><span class="lineNum"> 899 </span><span class="lineCov"> 3 : }</span></a>
<a name="900"><span class="lineNum"> 900 </span> : </a>
<a name="901"><span class="lineNum"> 901 </span><span class="lineCov"> 4 : static void state_stat(struct snapraid_state* state, tommy_list* high)</span></a>
<a name="901"><span class="lineNum"> 901 </span><span class="lineCov"> 5 : static void state_stat(struct snapraid_state* state, tommy_list* high)</span></a>
<a name="902"><span class="lineNum"> 902 </span> : {</a>
<a name="903"><span class="lineNum"> 903 </span> : tommy_node* i;</a>
<a name="904"><span class="lineNum"> 904 </span> : </a>
<a name="905"><span class="lineNum"> 905 </span> : (void)state;</a>
<a name="906"><span class="lineNum"> 906 </span> : </a>
<a name="907"><span class="lineNum"> 907 </span> : /* compute lengths for padding */</a>
<a name="908"><span class="lineNum"> 908 </span><span class="lineCov"> 124 : for (i = tommy_list_head(high); i != 0; i = i-&gt;next) {</span></a>
<a name="909"><span class="lineNum"> 909 </span><span class="lineCov"> 120 : devinfo_t* devinfo = i-&gt;data;</span></a>
<a name="908"><span class="lineNum"> 908 </span><span class="lineCov"> 137 : for (i = tommy_list_head(high); i != 0; i = i-&gt;next) {</span></a>
<a name="909"><span class="lineNum"> 909 </span><span class="lineCov"> 132 : devinfo_t* devinfo = i-&gt;data;</span></a>
<a name="910"><span class="lineNum"> 910 </span> : </a>
<a name="911"><span class="lineNum"> 911 </span> : /* print disk access_stat (not split) */</a>
<a name="912"><span class="lineNum"> 912 </span><span class="lineCov"> 120 : if (devinfo-&gt;split == 0 &amp;&amp; devinfo-&gt;access_stat != 0) {</span></a>
<a name="913"><span class="lineNum"> 913 </span><span class="lineCov"> 12 : log_tag(&quot;stat:%s:%&quot; PRIu64 &quot;\n&quot;, devinfo-&gt;name, devinfo-&gt;access_stat);</span></a>
<a name="912"><span class="lineNum"> 912 </span><span class="lineCov"> 132 : if (devinfo-&gt;split == 0 &amp;&amp; devinfo-&gt;access_stat != 0) {</span></a>
<a name="913"><span class="lineNum"> 913 </span><span class="lineCov"> 24 : log_tag(&quot;stat:%s:%&quot; PRIu64 &quot;\n&quot;, devinfo-&gt;name, devinfo-&gt;access_stat);</span></a>
<a name="914"><span class="lineNum"> 914 </span> : }</a>
<a name="915"><span class="lineNum"> 915 </span> : }</a>
<a name="916"><span class="lineNum"> 916 </span><span class="lineCov"> 4 : }</span></a>
<a name="916"><span class="lineNum"> 916 </span><span class="lineCov"> 5 : }</span></a>
<a name="917"><span class="lineNum"> 917 </span> : </a>
<a name="918"><span class="lineNum"> 918 </span><span class="lineCov"> 2419 : int devtest(tommy_list* high, tommy_list* low, int operation)</span></a>
<a name="919"><span class="lineNum"> 919 </span> : {</a>
@ -1046,88 +1046,88 @@
<a name="984"><span class="lineNum"> 984 </span><span class="lineCov"> 2419 : return 0;</span></a>
<a name="985"><span class="lineNum"> 985 </span> : }</a>
<a name="986"><span class="lineNum"> 986 </span> : </a>
<a name="987"><span class="lineNum"> 987 </span><span class="lineCov"> 6 : void state_device(struct snapraid_state* state, int operation, tommy_list* filterlist_disk)</span></a>
<a name="987"><span class="lineNum"> 987 </span><span class="lineCov"> 7 : void state_device(struct snapraid_state* state, int operation, tommy_list* filterlist_disk)</span></a>
<a name="988"><span class="lineNum"> 988 </span> : {</a>
<a name="989"><span class="lineNum"> 989 </span> : tommy_node* i;</a>
<a name="990"><span class="lineNum"> 990 </span> : unsigned j;</a>
<a name="991"><span class="lineNum"> 991 </span> : tommy_list high;</a>
<a name="992"><span class="lineNum"> 992 </span> : tommy_list low;</a>
<a name="993"><span class="lineNum"> 993 </span> : int ret;</a>
<a name="994"><span class="lineNum"> 994 </span><span class="lineCov"> 6 : time_t now = time(0);</span></a>
<a name="994"><span class="lineNum"> 994 </span><span class="lineCov"> 7 : time_t now = time(0);</span></a>
<a name="995"><span class="lineNum"> 995 </span> : </a>
<a name="996"><span class="lineNum"> 996 </span><span class="lineCov"> 6 : switch (operation) {</span></a>
<a name="996"><span class="lineNum"> 996 </span><span class="lineCov"> 7 : switch (operation) {</span></a>
<a name="997"><span class="lineNum"> 997 </span><span class="lineCov"> 1 : case DEVICE_UP : msg_progress(&quot;Spinup...\n&quot;); break;</span></a>
<a name="998"><span class="lineNum"> 998 </span><span class="lineCov"> 1 : case DEVICE_DOWN : msg_progress(&quot;Spindown...\n&quot;); break;</span></a>
<a name="999"><span class="lineNum"> 999 </span> : }</a>
<a name="1000"><span class="lineNum"> 1000 </span> : </a>
<a name="1001"><span class="lineNum"> 1001 </span><span class="lineCov"> 6 : tommy_list_init(&amp;high);</span></a>
<a name="1002"><span class="lineNum"> 1002 </span><span class="lineCov"> 6 : tommy_list_init(&amp;low);</span></a>
<a name="1001"><span class="lineNum"> 1001 </span><span class="lineCov"> 7 : tommy_list_init(&amp;high);</span></a>
<a name="1002"><span class="lineNum"> 1002 </span><span class="lineCov"> 7 : tommy_list_init(&amp;low);</span></a>
<a name="1003"><span class="lineNum"> 1003 </span> : </a>
<a name="1004"><span class="lineNum"> 1004 </span> : /* for all disks */</a>
<a name="1005"><span class="lineNum"> 1005 </span><span class="lineCov"> 42 : for (i = state-&gt;disklist; i != 0; i = i-&gt;next) {</span></a>
<a name="1006"><span class="lineNum"> 1006 </span><span class="lineCov"> 36 : struct snapraid_disk* disk = i-&gt;data;</span></a>
<a name="1005"><span class="lineNum"> 1005 </span><span class="lineCov"> 53 : for (i = state-&gt;disklist; i != 0; i = i-&gt;next) {</span></a>
<a name="1006"><span class="lineNum"> 1006 </span><span class="lineCov"> 46 : struct snapraid_disk* disk = i-&gt;data;</span></a>
<a name="1007"><span class="lineNum"> 1007 </span> : devinfo_t* entry;</a>
<a name="1008"><span class="lineNum"> 1008 </span> : </a>
<a name="1009"><span class="lineNum"> 1009 </span><span class="lineCov"> 36 : if (filterlist_disk != 0 &amp;&amp; filter_path(filterlist_disk, 0, disk-&gt;name, 0) != 0)</span></a>
<a name="1009"><span class="lineNum"> 1009 </span><span class="lineCov"> 46 : if (filterlist_disk != 0 &amp;&amp; filter_path(filterlist_disk, 0, disk-&gt;name, 0) != 0)</span></a>
<a name="1010"><span class="lineNum"> 1010 </span><span class="lineCov"> 5 : continue;</span></a>
<a name="1011"><span class="lineNum"> 1011 </span> : </a>
<a name="1012"><span class="lineNum"> 1012 </span><span class="lineCov"> 31 : entry = calloc_nofail(1, sizeof(devinfo_t));</span></a>
<a name="1012"><span class="lineNum"> 1012 </span><span class="lineCov"> 41 : entry = calloc_nofail(1, sizeof(devinfo_t));</span></a>
<a name="1013"><span class="lineNum"> 1013 </span> : </a>
<a name="1014"><span class="lineNum"> 1014 </span><span class="lineCov"> 31 : entry-&gt;device = disk-&gt;device;</span></a>
<a name="1015"><span class="lineNum"> 1015 </span><span class="lineCov"> 31 : device_name_set(entry, disk-&gt;name, 0);</span></a>
<a name="1016"><span class="lineNum"> 1016 </span><span class="lineCov"> 31 : pathcpy(entry-&gt;mount, sizeof(entry-&gt;mount), disk-&gt;dir);</span></a>
<a name="1017"><span class="lineNum"> 1017 </span><span class="lineCov"> 31 : pathcpy(entry-&gt;smartctl, sizeof(entry-&gt;smartctl), disk-&gt;smartctl);</span></a>
<a name="1018"><span class="lineNum"> 1018 </span><span class="lineCov"> 31 : memcpy(entry-&gt;smartignore, disk-&gt;smartignore, sizeof(entry-&gt;smartignore));</span></a>
<a name="1014"><span class="lineNum"> 1014 </span><span class="lineCov"> 41 : entry-&gt;device = disk-&gt;device;</span></a>
<a name="1015"><span class="lineNum"> 1015 </span><span class="lineCov"> 41 : device_name_set(entry, disk-&gt;name, 0);</span></a>
<a name="1016"><span class="lineNum"> 1016 </span><span class="lineCov"> 41 : pathcpy(entry-&gt;mount, sizeof(entry-&gt;mount), disk-&gt;dir);</span></a>
<a name="1017"><span class="lineNum"> 1017 </span><span class="lineCov"> 41 : pathcpy(entry-&gt;smartctl, sizeof(entry-&gt;smartctl), disk-&gt;smartctl);</span></a>
<a name="1018"><span class="lineNum"> 1018 </span><span class="lineCov"> 41 : memcpy(entry-&gt;smartignore, disk-&gt;smartignore, sizeof(entry-&gt;smartignore));</span></a>
<a name="1019"><span class="lineNum"> 1019 </span> : </a>
<a name="1020"><span class="lineNum"> 1020 </span><span class="lineCov"> 31 : tommy_list_insert_tail(&amp;high, &amp;entry-&gt;node, entry);</span></a>
<a name="1020"><span class="lineNum"> 1020 </span><span class="lineCov"> 41 : tommy_list_insert_tail(&amp;high, &amp;entry-&gt;node, entry);</span></a>
<a name="1021"><span class="lineNum"> 1021 </span> : }</a>
<a name="1022"><span class="lineNum"> 1022 </span> : </a>
<a name="1023"><span class="lineNum"> 1023 </span> : /* for all parities */</a>
<a name="1024"><span class="lineNum"> 1024 </span><span class="lineCov"> 42 : for (j = 0; j &lt; state-&gt;level; ++j) {</span></a>
<a name="1024"><span class="lineNum"> 1024 </span><span class="lineCov"> 45 : for (j = 0; j &lt; state-&gt;level; ++j) {</span></a>
<a name="1025"><span class="lineNum"> 1025 </span> : devinfo_t* entry;</a>
<a name="1026"><span class="lineNum"> 1026 </span> : devinfo_t* split;</a>
<a name="1027"><span class="lineNum"> 1027 </span> : unsigned s;</a>
<a name="1028"><span class="lineNum"> 1028 </span> : </a>
<a name="1029"><span class="lineNum"> 1029 </span><span class="lineCov"> 36 : if (filterlist_disk != 0 &amp;&amp; filter_path(filterlist_disk, 0, lev_config_name(j), 0) != 0)</span></a>
<a name="1029"><span class="lineNum"> 1029 </span><span class="lineCov"> 38 : if (filterlist_disk != 0 &amp;&amp; filter_path(filterlist_disk, 0, lev_config_name(j), 0) != 0)</span></a>
<a name="1030"><span class="lineNum"> 1030 </span><span class="lineCov"> 5 : continue;</span></a>
<a name="1031"><span class="lineNum"> 1031 </span> : </a>
<a name="1032"><span class="lineNum"> 1032 </span><span class="lineCov"> 155 : for (s = 0; s &lt; state-&gt;parity[j].split_mac; ++s) {</span></a>
<a name="1033"><span class="lineNum"> 1033 </span><span class="lineCov"> 124 : entry = calloc_nofail(1, sizeof(devinfo_t));</span></a>
<a name="1032"><span class="lineNum"> 1032 </span><span class="lineCov"> 159 : for (s = 0; s &lt; state-&gt;parity[j].split_mac; ++s) {</span></a>
<a name="1033"><span class="lineNum"> 1033 </span><span class="lineCov"> 126 : entry = calloc_nofail(1, sizeof(devinfo_t));</span></a>
<a name="1034"><span class="lineNum"> 1034 </span> : </a>
<a name="1035"><span class="lineNum"> 1035 </span> : /* keep track of the first split */</a>
<a name="1036"><span class="lineNum"> 1036 </span><span class="lineCov"> 124 : if (s == 0)</span></a>
<a name="1037"><span class="lineNum"> 1037 </span><span class="lineCov"> 31 : split = entry;</span></a>
<a name="1036"><span class="lineNum"> 1036 </span><span class="lineCov"> 126 : if (s == 0)</span></a>
<a name="1037"><span class="lineNum"> 1037 </span><span class="lineCov"> 33 : split = entry;</span></a>
<a name="1038"><span class="lineNum"> 1038 </span> : else</a>
<a name="1039"><span class="lineNum"> 1039 </span><span class="lineCov"> 93 : entry-&gt;split = split;</span></a>
<a name="1040"><span class="lineNum"> 1040 </span> : </a>
<a name="1041"><span class="lineNum"> 1041 </span><span class="lineCov"> 124 : entry-&gt;device = state-&gt;parity[j].split_map[s].device;</span></a>
<a name="1042"><span class="lineNum"> 1042 </span><span class="lineCov"> 124 : device_name_set(entry, lev_config_name(j), s);</span></a>
<a name="1043"><span class="lineNum"> 1043 </span><span class="lineCov"> 124 : pathcpy(entry-&gt;mount, sizeof(entry-&gt;mount), state-&gt;parity[j].split_map[s].path);</span></a>
<a name="1044"><span class="lineNum"> 1044 </span><span class="lineCov"> 124 : pathcpy(entry-&gt;smartctl, sizeof(entry-&gt;smartctl), state-&gt;parity[j].smartctl);</span></a>
<a name="1045"><span class="lineNum"> 1045 </span><span class="lineCov"> 124 : memcpy(entry-&gt;smartignore, state-&gt;parity[j].smartignore, sizeof(entry-&gt;smartignore));</span></a>
<a name="1046"><span class="lineNum"> 1046 </span><span class="lineCov"> 124 : pathcut(entry-&gt;mount); /* remove the parity file */</span></a>
<a name="1041"><span class="lineNum"> 1041 </span><span class="lineCov"> 126 : entry-&gt;device = state-&gt;parity[j].split_map[s].device;</span></a>
<a name="1042"><span class="lineNum"> 1042 </span><span class="lineCov"> 126 : device_name_set(entry, lev_config_name(j), s);</span></a>
<a name="1043"><span class="lineNum"> 1043 </span><span class="lineCov"> 126 : pathcpy(entry-&gt;mount, sizeof(entry-&gt;mount), state-&gt;parity[j].split_map[s].path);</span></a>
<a name="1044"><span class="lineNum"> 1044 </span><span class="lineCov"> 126 : pathcpy(entry-&gt;smartctl, sizeof(entry-&gt;smartctl), state-&gt;parity[j].smartctl);</span></a>
<a name="1045"><span class="lineNum"> 1045 </span><span class="lineCov"> 126 : memcpy(entry-&gt;smartignore, state-&gt;parity[j].smartignore, sizeof(entry-&gt;smartignore));</span></a>
<a name="1046"><span class="lineNum"> 1046 </span><span class="lineCov"> 126 : pathcut(entry-&gt;mount); /* remove the parity file */</span></a>
<a name="1047"><span class="lineNum"> 1047 </span> : </a>
<a name="1048"><span class="lineNum"> 1048 </span><span class="lineCov"> 124 : tommy_list_insert_tail(&amp;high, &amp;entry-&gt;node, entry);</span></a>
<a name="1048"><span class="lineNum"> 1048 </span><span class="lineCov"> 126 : tommy_list_insert_tail(&amp;high, &amp;entry-&gt;node, entry);</span></a>
<a name="1049"><span class="lineNum"> 1049 </span> : }</a>
<a name="1050"><span class="lineNum"> 1050 </span> : }</a>
<a name="1051"><span class="lineNum"> 1051 </span> : </a>
<a name="1052"><span class="lineNum"> 1052 </span> : /* with a GUI always gives time reference */</a>
<a name="1053"><span class="lineNum"> 1053 </span><span class="lineCov"> 6 : if (state-&gt;opt.gui)</span></a>
<a name="1053"><span class="lineNum"> 1053 </span><span class="lineCov"> 7 : if (state-&gt;opt.gui)</span></a>
<a name="1054"><span class="lineNum"> 1054 </span><span class="lineCov"> 3 : log_tag(&quot;unixtime:%&quot; PRIi64 &quot;\n&quot;, (int64_t)now);</span></a>
<a name="1055"><span class="lineNum"> 1055 </span> : </a>
<a name="1056"><span class="lineNum"> 1056 </span><span class="lineCov"> 6 : if (state-&gt;opt.fake_device) {</span></a>
<a name="1056"><span class="lineNum"> 1056 </span><span class="lineCov"> 7 : if (state-&gt;opt.fake_device) {</span></a>
<a name="1057"><span class="lineNum"> 1057 </span><span class="lineCov"> 3 : ret = devtest(&amp;high, &amp;low, operation);</span></a>
<a name="1058"><span class="lineNum"> 1058 </span> : } else {</a>
<a name="1059"><span class="lineNum"> 1059 </span><span class="lineCov"> 3 : int others = operation == DEVICE_SMART || operation == DEVICE_PROBE;</span></a>
<a name="1059"><span class="lineNum"> 1059 </span><span class="lineCov"> 4 : int others = operation == DEVICE_SMART || operation == DEVICE_PROBE;</span></a>
<a name="1060"><span class="lineNum"> 1060 </span> : </a>
<a name="1061"><span class="lineNum"> 1061 </span><span class="lineCov"> 3 : ret = devquery(&amp;high, &amp;low, operation, others);</span></a>
<a name="1061"><span class="lineNum"> 1061 </span><span class="lineCov"> 4 : ret = devquery(&amp;high, &amp;low, operation, others);</span></a>
<a name="1062"><span class="lineNum"> 1062 </span> : }</a>
<a name="1063"><span class="lineNum"> 1063 </span> : </a>
<a name="1064"><span class="lineNum"> 1064 </span> : /* if the list is empty, it's not supported in this platform */</a>
<a name="1065"><span class="lineNum"> 1065 </span><span class="lineCov"> 6 : if (ret == 0 &amp;&amp; tommy_list_empty(&amp;low))</span></a>
<a name="1065"><span class="lineNum"> 1065 </span><span class="lineCov"> 7 : if (ret == 0 &amp;&amp; tommy_list_empty(&amp;low))</span></a>
<a name="1066"><span class="lineNum"> 1066 </span><span class="lineNoCov"> 0 : ret = -1;</span></a>
<a name="1067"><span class="lineNum"> 1067 </span> : </a>
<a name="1068"><span class="lineNum"> 1068 </span><span class="lineCov"> 6 : if (ret != 0) {</span></a>
<a name="1068"><span class="lineNum"> 1068 </span><span class="lineCov"> 7 : if (ret != 0) {</span></a>
<a name="1069"><span class="lineNum"> 1069 </span><span class="lineCov"> 2 : const char* ope = 0;</span></a>
<a name="1070"><span class="lineNum"> 1070 </span><span class="lineCov"> 2 : switch (operation) {</span></a>
<a name="1071"><span class="lineNum"> 1071 </span><span class="lineCov"> 1 : case DEVICE_UP : ope = &quot;Spinup&quot;; break;</span></a>
@ -1139,7 +1139,7 @@
<a name="1077"><span class="lineNum"> 1077 </span> : }</a>
<a name="1078"><span class="lineNum"> 1078 </span><span class="lineCov"> 2 : log_fatal(ESOFT, &quot;%s is unsupported in this platform.\n&quot;, ope);</span></a>
<a name="1079"><span class="lineNum"> 1079 </span> : } else {</a>
<a name="1080"><span class="lineNum"> 1080 </span><span class="lineCov"> 4 : if (operation == DEVICE_LIST) {</span></a>
<a name="1080"><span class="lineNum"> 1080 </span><span class="lineCov"> 5 : if (operation == DEVICE_LIST) {</span></a>
<a name="1081"><span class="lineNum"> 1081 </span><span class="lineCov"> 31 : for (i = tommy_list_head(&amp;low); i != 0; i = i-&gt;next) {</span></a>
<a name="1082"><span class="lineNum"> 1082 </span><span class="lineCov"> 30 : devinfo_t* devinfo = i-&gt;data;</span></a>
<a name="1083"><span class="lineNum"> 1083 </span><span class="lineCov"> 30 : devinfo_t* parent = devinfo-&gt;parent;</span></a>
@ -1151,21 +1151,21 @@
<a name="1089"><span class="lineNum"> 1089 </span> : }</a>
<a name="1090"><span class="lineNum"> 1090 </span> : }</a>
<a name="1091"><span class="lineNum"> 1091 </span> : </a>
<a name="1092"><span class="lineNum"> 1092 </span><span class="lineCov"> 4 : state_stat(state, &amp;high);</span></a>
<a name="1092"><span class="lineNum"> 1092 </span><span class="lineCov"> 5 : state_stat(state, &amp;high);</span></a>
<a name="1093"><span class="lineNum"> 1093 </span> : </a>
<a name="1094"><span class="lineNum"> 1094 </span><span class="lineCov"> 4 : if (operation == DEVICE_SMART)</span></a>
<a name="1094"><span class="lineNum"> 1094 </span><span class="lineCov"> 5 : if (operation == DEVICE_SMART)</span></a>
<a name="1095"><span class="lineNum"> 1095 </span><span class="lineCov"> 1 : state_smart(state, state-&gt;level + tommy_list_count(&amp;state-&gt;disklist), &amp;low);</span></a>
<a name="1096"><span class="lineNum"> 1096 </span> : </a>
<a name="1097"><span class="lineNum"> 1097 </span><span class="lineCov"> 3 : if (operation == DEVICE_PROBE)</span></a>
<a name="1098"><span class="lineNum"> 1098 </span><span class="lineCov"> 2 : state_probe(state, &amp;low);</span></a>
<a name="1097"><span class="lineNum"> 1097 </span><span class="lineCov"> 4 : if (operation == DEVICE_PROBE)</span></a>
<a name="1098"><span class="lineNum"> 1098 </span><span class="lineCov"> 3 : state_probe(state, &amp;low);</span></a>
<a name="1099"><span class="lineNum"> 1099 </span> : </a>
<a name="1100"><span class="lineNum"> 1100 </span><span class="lineCov"> 3 : if (operation == DEVICE_UP)</span></a>
<a name="1100"><span class="lineNum"> 1100 </span><span class="lineCov"> 4 : if (operation == DEVICE_UP)</span></a>
<a name="1101"><span class="lineNum"> 1101 </span><span class="lineNoCov"> 0 : state_attr(state, &amp;low);</span></a>
<a name="1102"><span class="lineNum"> 1102 </span> : }</a>
<a name="1103"><span class="lineNum"> 1103 </span> : </a>
<a name="1104"><span class="lineNum"> 1104 </span><span class="lineCov"> 5 : tommy_list_foreach(&amp;high, free);</span></a>
<a name="1105"><span class="lineNum"> 1105 </span><span class="lineCov"> 5 : tommy_list_foreach(&amp;low, free);</span></a>
<a name="1106"><span class="lineNum"> 1106 </span><span class="lineCov"> 5 : }</span></a>
<a name="1104"><span class="lineNum"> 1104 </span><span class="lineCov"> 6 : tommy_list_foreach(&amp;high, free);</span></a>
<a name="1105"><span class="lineNum"> 1105 </span><span class="lineCov"> 6 : tommy_list_foreach(&amp;low, free);</span></a>
<a name="1106"><span class="lineNum"> 1106 </span><span class="lineCov"> 6 : }</span></a>
<a name="1107"><span class="lineNum"> 1107 </span> : </a>
</pre>
</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="dup.c.gcov.html#80">hash_compare</a></td>
<td class="coverFnHi">20</td>
<td class="coverFnHi">18</td>
</tr>
<tr>
<td class="coverFn"><a href="dup.c.gcov.html#37">hash_alloc</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="dup.c.gcov.html#80">hash_compare</a></td>
<td class="coverFnHi">20</td>
<td class="coverFnHi">18</td>
</tr>
<tr>
<td class="coverFn"><a href="dup.c.gcov.html#75">hash_free</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
@ -141,12 +141,12 @@
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 16976 : free(hash);</span></a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineCov"> 16976 : }</span></a>
<a name="81"><span class="lineNum"> 81 </span> : </a>
<a name="82"><span class="lineNum"> 82 </span><span class="lineCov"> 20 : int hash_compare(const void* void_arg, const void* void_data)</span></a>
<a name="82"><span class="lineNum"> 82 </span><span class="lineCov"> 18 : int hash_compare(const void* void_arg, const void* void_data)</span></a>
<a name="83"><span class="lineNum"> 83 </span> : {</a>
<a name="84"><span class="lineNum"> 84 </span><span class="lineCov"> 20 : const char* arg = void_arg;</span></a>
<a name="85"><span class="lineNum"> 85 </span><span class="lineCov"> 20 : const struct snapraid_hash* hash = void_data;</span></a>
<a name="84"><span class="lineNum"> 84 </span><span class="lineCov"> 18 : const char* arg = void_arg;</span></a>
<a name="85"><span class="lineNum"> 85 </span><span class="lineCov"> 18 : const struct snapraid_hash* hash = void_data;</span></a>
<a name="86"><span class="lineNum"> 86 </span> : </a>
<a name="87"><span class="lineNum"> 87 </span><span class="lineCov"> 20 : return memcmp(arg, hash-&gt;hash, HASH_MAX);</span></a>
<a name="87"><span class="lineNum"> 87 </span><span class="lineCov"> 18 : return memcmp(arg, hash-&gt;hash, HASH_MAX);</span></a>
<a name="88"><span class="lineNum"> 88 </span> : }</a>
<a name="89"><span class="lineNum"> 89 </span> : </a>
<a name="90"><span class="lineNum"> 90 </span><span class="lineCov"> 3 : void state_dup(struct snapraid_state* state)</span></a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">70</td>
@ -97,23 +97,23 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1479">bucket_to_list</a></td>
<td class="coverFnHi">421</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#145">filter_free</a></td>
<td class="coverFnHi">547</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#44">filter_alloc_file</a></td>
<td class="coverFnHi">559</td>
<td class="coverFnHi">420</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1434">bucket_cmp</a></td>
<td class="coverFnHi">711</td>
<td class="coverFnHi">521</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#145">filter_free</a></td>
<td class="coverFnHi">552</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#44">filter_alloc_file</a></td>
<td class="coverFnHi">564</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1445">bucket_free</a></td>
<td class="coverFnHi">746</td>
<td class="coverFnHi">705</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#738">dir_free</a></td>
@ -125,23 +125,23 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#863">fs_is_empty</a></td>
<td class="coverFnHi">942</td>
<td class="coverFnHi">936</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#39">content_free</a></td>
<td class="coverFnHi">1551</td>
<td class="coverFnHi">1555</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1426">map_free</a></td>
<td class="coverFnHi">1573</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#805">disk_free</a></td>
<td class="coverFnHi">1603</td>
<td class="coverFn"><a href="elem.c.gcov.html#28">content_alloc</a></td>
<td class="coverFnHi">1610</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#28">content_alloc</a></td>
<td class="coverFnHi">1606</td>
<td class="coverFn"><a href="elem.c.gcov.html#805">disk_free</a></td>
<td class="coverFnHi">1613</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1412">map_alloc</a></td>
@ -149,11 +149,11 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#752">disk_alloc</a></td>
<td class="coverFnHi">1663</td>
<td class="coverFnHi">1673</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1088">fs_check</a></td>
<td class="coverFnHi">3120</td>
<td class="coverFnHi">3114</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#719">link_alpha_compare</a></td>
@ -165,7 +165,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#911">fs_size</a></td>
<td class="coverFnHi">4549</td>
<td class="coverFnHi">4543</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#404">file_dup</a></td>
@ -177,15 +177,15 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#585">file_stamp_compare</a></td>
<td class="coverFnHi">23671</td>
<td class="coverFnHi">23670</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#575">file_name_compare</a></td>
<td class="coverFnHi">23856</td>
<td class="coverFnHi">23865</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#608">file_namestamp_compare</a></td>
<td class="coverFnHi">23856</td>
<td class="coverFnHi">23865</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#711">link_name_compare_to_arg</a></td>
@ -197,31 +197,31 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#481">file_name</a></td>
<td class="coverFnHi">47712</td>
<td class="coverFnHi">47730</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#898">extent_disk_size_compare_unlock</a></td>
<td class="coverFnHi">52890</td>
<td class="coverFnHi">52796</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1450">bucket_insert</a></td>
<td class="coverFnHi">72052</td>
<td class="coverFnHi">55958</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#308">filter_existence</a></td>
<td class="coverFnHi">77701</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#567">file_path_compare_to_arg</a></td>
<td class="coverFnHi">97862</td>
<td class="coverFn"><a href="elem.c.gcov.html#555">file_physical_compare</a></td>
<td class="coverFnHi">96760</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#555">file_physical_compare</a></td>
<td class="coverFnHi">99756</td>
<td class="coverFn"><a href="elem.c.gcov.html#567">file_path_compare_to_arg</a></td>
<td class="coverFnHi">97805</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1309">fs_deallocate</a></td>
<td class="coverFnHi">102986</td>
<td class="coverFnHi">102931</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#704">link_free</a></td>
@ -233,47 +233,47 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#150">filter_type</a></td>
<td class="coverFnHi">125231</td>
<td class="coverFnHi">125314</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#547">file_path_compare</a></td>
<td class="coverFnHi">187689</td>
<td class="coverFnHi">187677</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1524">fmt_term</a></td>
<td class="coverFnHi">366067</td>
<td class="coverFnHi">366236</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#523">file_inode_compare_to_arg</a></td>
<td class="coverFnHi">1043743</td>
<td class="coverFnHi">1046316</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#354">filter_content</a></td>
<td class="coverFnHi">3231524</td>
<td class="coverFnHi">3231650</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#430">file_free</a></td>
<td class="coverFnHi">3784741</td>
<td class="coverFnHi">3784728</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#656">extent_free</a></td>
<td class="coverFnHi">3806435</td>
<td class="coverFnHi">3806358</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#379">file_alloc</a></td>
<td class="coverFnHi">3807696</td>
<td class="coverFnHi">3807720</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#630">extent_alloc</a></td>
<td class="coverFnHi">3852016</td>
<td class="coverFnHi">3851976</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#293">filter_path</a></td>
<td class="coverFnHi">4587023</td>
<td class="coverFnHi">4587158</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#235">filter_element</a></td>
<td class="coverFnHi">4591561</td>
<td class="coverFnHi">4591696</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#508">file_block_is_last</a></td>
@ -281,71 +281,71 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1241">fs_file2par_find</a></td>
<td class="coverFnHi">5301463</td>
<td class="coverFnHi">5260119</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#178">filter_apply</a></td>
<td class="coverFnHi">6355925</td>
<td class="coverFnHi">6356195</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#492">file_block_size</a></td>
<td class="coverFnHi">6817779</td>
<td class="coverFnHi">6817866</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#979">extent_file_check_foreach_unlock</a></td>
<td class="coverFnHi">6837675</td>
<td class="coverFnHi">6820724</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#929">extent_parity_check_foreach_unlock</a></td>
<td class="coverFnHi">6837675</td>
<td class="coverFnHi">6820724</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1260">fs_allocate</a></td>
<td class="coverFnHi">9473576</td>
<td class="coverFnHi">9473620</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1193">fs_file2extent_get_unlock</a></td>
<td class="coverFnHi">10949888</td>
<td class="coverFnHi">10908566</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1170">extent_file_inside_compare_unlock</a></td>
<td class="coverFnHi">22976989</td>
<td class="coverFnHi">22802303</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1400">fs_par2block_find</a></td>
<td class="coverFnHi">38360216</td>
<td class="coverFnHi">38266700</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#661">extent_parity_compare</a></td>
<td class="coverFnHi">45768745</td>
<td class="coverFnHi">45767042</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#674">extent_file_compare</a></td>
<td class="coverFnHi">46158505</td>
<td class="coverFnHi">46157545</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1218">fs_par2file_find</a></td>
<td class="coverFnHi">49865865</td>
<td class="coverFnHi">49771977</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1138">fs_par2extent_get_unlock</a></td>
<td class="coverFnHi">49968851</td>
<td class="coverFnHi">49874908</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1388">fs_file2block_get</a></td>
<td class="coverFnHi">56447214</td>
<td class="coverFnHi">56273071</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#825">fs_lock</a></td>
<td class="coverFnHi">64751658</td>
<td class="coverFnHi">64616403</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#834">fs_unlock</a></td>
<td class="coverFnHi">64751658</td>
<td class="coverFnHi">64616403</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1120">extent_parity_inside_compare_unlock</a></td>
<td class="coverFnHi">158551658</td>
<td class="coverFnHi">158133634</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">70</td>
@ -61,27 +61,27 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1434">bucket_cmp</a></td>
<td class="coverFnHi">711</td>
<td class="coverFnHi">521</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1445">bucket_free</a></td>
<td class="coverFnHi">746</td>
<td class="coverFnHi">705</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1450">bucket_insert</a></td>
<td class="coverFnHi">72052</td>
<td class="coverFnHi">55958</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1479">bucket_to_list</a></td>
<td class="coverFnHi">421</td>
<td class="coverFnHi">420</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#28">content_alloc</a></td>
<td class="coverFnHi">1606</td>
<td class="coverFnHi">1610</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#39">content_free</a></td>
<td class="coverFnHi">1551</td>
<td class="coverFnHi">1555</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#727">dir_alloc</a></td>
@ -97,15 +97,15 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#752">disk_alloc</a></td>
<td class="coverFnHi">1663</td>
<td class="coverFnHi">1673</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#805">disk_free</a></td>
<td class="coverFnHi">1603</td>
<td class="coverFnHi">1613</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#630">extent_alloc</a></td>
<td class="coverFnHi">3852016</td>
<td class="coverFnHi">3851976</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#850">extent_disk_empty_compare_unlock</a></td>
@ -113,39 +113,39 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#898">extent_disk_size_compare_unlock</a></td>
<td class="coverFnHi">52890</td>
<td class="coverFnHi">52796</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#979">extent_file_check_foreach_unlock</a></td>
<td class="coverFnHi">6837675</td>
<td class="coverFnHi">6820724</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#674">extent_file_compare</a></td>
<td class="coverFnHi">46158505</td>
<td class="coverFnHi">46157545</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1170">extent_file_inside_compare_unlock</a></td>
<td class="coverFnHi">22976989</td>
<td class="coverFnHi">22802303</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#656">extent_free</a></td>
<td class="coverFnHi">3806435</td>
<td class="coverFnHi">3806358</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#929">extent_parity_check_foreach_unlock</a></td>
<td class="coverFnHi">6837675</td>
<td class="coverFnHi">6820724</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#661">extent_parity_compare</a></td>
<td class="coverFnHi">45768745</td>
<td class="coverFnHi">45767042</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1120">extent_parity_inside_compare_unlock</a></td>
<td class="coverFnHi">158551658</td>
<td class="coverFnHi">158133634</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#379">file_alloc</a></td>
<td class="coverFnHi">3807696</td>
<td class="coverFnHi">3807720</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#508">file_block_is_last</a></td>
@ -153,7 +153,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#492">file_block_size</a></td>
<td class="coverFnHi">6817779</td>
<td class="coverFnHi">6817866</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#445">file_copy</a></td>
@ -165,7 +165,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#430">file_free</a></td>
<td class="coverFnHi">3784741</td>
<td class="coverFnHi">3784728</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#535">file_inode_compare</a></td>
@ -173,27 +173,27 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#523">file_inode_compare_to_arg</a></td>
<td class="coverFnHi">1043743</td>
<td class="coverFnHi">1046316</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#481">file_name</a></td>
<td class="coverFnHi">47712</td>
<td class="coverFnHi">47730</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#575">file_name_compare</a></td>
<td class="coverFnHi">23856</td>
<td class="coverFnHi">23865</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#608">file_namestamp_compare</a></td>
<td class="coverFnHi">23856</td>
<td class="coverFnHi">23865</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#547">file_path_compare</a></td>
<td class="coverFnHi">187689</td>
<td class="coverFnHi">187677</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#567">file_path_compare_to_arg</a></td>
<td class="coverFnHi">97862</td>
<td class="coverFnHi">97805</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#619">file_pathstamp_compare</a></td>
@ -201,7 +201,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#555">file_physical_compare</a></td>
<td class="coverFnHi">99756</td>
<td class="coverFnHi">96760</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#439">file_rename</a></td>
@ -209,7 +209,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#585">file_stamp_compare</a></td>
<td class="coverFnHi">23671</td>
<td class="coverFnHi">23670</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#121">filter_alloc_disk</a></td>
@ -217,15 +217,15 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#44">filter_alloc_file</a></td>
<td class="coverFnHi">559</td>
<td class="coverFnHi">564</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#178">filter_apply</a></td>
<td class="coverFnHi">6355925</td>
<td class="coverFnHi">6356195</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#354">filter_content</a></td>
<td class="coverFnHi">3231524</td>
<td class="coverFnHi">3231650</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#333">filter_correctness</a></td>
@ -233,7 +233,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#235">filter_element</a></td>
<td class="coverFnHi">4591561</td>
<td class="coverFnHi">4591696</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#303">filter_emptydir</a></td>
@ -245,11 +245,11 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#145">filter_free</a></td>
<td class="coverFnHi">547</td>
<td class="coverFnHi">552</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#293">filter_path</a></td>
<td class="coverFnHi">4587023</td>
<td class="coverFnHi">4587158</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#298">filter_subdir</a></td>
@ -257,7 +257,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#150">filter_type</a></td>
<td class="coverFnHi">125231</td>
<td class="coverFnHi">125314</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1515">fmt_poll</a></td>
@ -269,59 +269,59 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1524">fmt_term</a></td>
<td class="coverFnHi">366067</td>
<td class="coverFnHi">366236</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1260">fs_allocate</a></td>
<td class="coverFnHi">9473576</td>
<td class="coverFnHi">9473620</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1088">fs_check</a></td>
<td class="coverFnHi">3120</td>
<td class="coverFnHi">3114</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1309">fs_deallocate</a></td>
<td class="coverFnHi">102986</td>
<td class="coverFnHi">102931</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1388">fs_file2block_get</a></td>
<td class="coverFnHi">56447214</td>
<td class="coverFnHi">56273071</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1193">fs_file2extent_get_unlock</a></td>
<td class="coverFnHi">10949888</td>
<td class="coverFnHi">10908566</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1241">fs_file2par_find</a></td>
<td class="coverFnHi">5301463</td>
<td class="coverFnHi">5260119</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#863">fs_is_empty</a></td>
<td class="coverFnHi">942</td>
<td class="coverFnHi">936</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#825">fs_lock</a></td>
<td class="coverFnHi">64751658</td>
<td class="coverFnHi">64616403</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1400">fs_par2block_find</a></td>
<td class="coverFnHi">38360216</td>
<td class="coverFnHi">38266700</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1138">fs_par2extent_get_unlock</a></td>
<td class="coverFnHi">49968851</td>
<td class="coverFnHi">49874908</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1218">fs_par2file_find</a></td>
<td class="coverFnHi">49865865</td>
<td class="coverFnHi">49771977</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#911">fs_size</a></td>
<td class="coverFnHi">4549</td>
<td class="coverFnHi">4543</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#834">fs_unlock</a></td>
<td class="coverFnHi">64751658</td>
<td class="coverFnHi">64616403</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#692">link_alloc</a></td>

File diff suppressed because it is too large Load diff

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">41</td>
@ -77,7 +77,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1188">info_set_bad</a></td>
<td class="coverFnHi">1771</td>
<td class="coverFnHi">1772</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1196">info_set_rehash</a></td>
@ -85,7 +85,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#760">file_flag_clear</a></td>
<td class="coverFnHi">12545</td>
<td class="coverFnHi">13077</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1098">fs_par2block_get</a></td>
@ -93,7 +93,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1180">info_get_justsynced</a></td>
<td class="coverFnHi">23836</td>
<td class="coverFnHi">18930</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#900">link_flag_set</a></td>
@ -101,11 +101,11 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#632">hash_is_unique</a></td>
<td class="coverFnHi">44043</td>
<td class="coverFnHi">43988</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#916">link_flag_get</a></td>
<td class="coverFnHi">96285</td>
<td class="coverFnHi">95741</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#652">hash_zero_set</a></td>
@ -117,7 +117,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1134">info_make</a></td>
<td class="coverFnHi">191697</td>
<td class="coverFnHi">180457</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#895">link_flag_has</a></td>
@ -125,103 +125,103 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#743">block_has_file_and_valid_parity</a></td>
<td class="coverFnHi">226094</td>
<td class="coverFnHi">226098</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1162">info_get_bad</a></td>
<td class="coverFnHi">247612</td>
<td class="coverFnHi">242727</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#590">hash_is_invalid</a></td>
<td class="coverFnHi">756505</td>
<td class="coverFnHi">756707</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#612">hash_is_zero</a></td>
<td class="coverFnHi">760014</td>
<td class="coverFnHi">760217</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1153">info_get_time</a></td>
<td class="coverFnHi">798417</td>
<td class="coverFnHi">786514</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1205">info_set</a></td>
<td class="coverFnHi">1757573</td>
<td class="coverFnHi">1757522</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1171">info_get_rehash</a></td>
<td class="coverFnHi">2048435</td>
<td class="coverFnHi">2036469</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#692">block_has_updated_hash</a></td>
<td class="coverFnHi">2188335</td>
<td class="coverFnHi">2188345</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#705">block_has_past_hash</a></td>
<td class="coverFnHi">2686312</td>
<td class="coverFnHi">2686411</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1216">info_get</a></td>
<td class="coverFnHi">3171512</td>
<td class="coverFnHi">3152579</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#533">filter_hidden</a></td>
<td class="coverFnHi">3231524</td>
<td class="coverFnHi">3231650</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#862">file_path_hash</a></td>
<td class="coverFnHi">4002881</td>
<td class="coverFnHi">4002848</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1074">fs_file2par_get</a></td>
<td class="coverFnHi">4959524</td>
<td class="coverFnHi">4918180</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#841">file_inode_hash</a></td>
<td class="coverFnHi">5220350</td>
<td class="coverFnHi">5220892</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#755">file_flag_set</a></td>
<td class="coverFnHi">5792498</td>
<td class="coverFnHi">5793396</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#870">file_stamp_hash</a></td>
<td class="coverFnHi">6390305</td>
<td class="coverFnHi">6390630</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#644">hash_invalid_set</a></td>
<td class="coverFnHi">9532465</td>
<td class="coverFnHi">9532509</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1050">fs_par2file_get</a></td>
<td class="coverFnHi">11505649</td>
<td class="coverFnHi">11505277</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#682">block_state_set</a></td>
<td class="coverFnHi">19703104</td>
<td class="coverFnHi">19702751</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#730">block_has_invalid_parity</a></td>
<td class="coverFnHi">23228801</td>
<td class="coverFnHi">23186776</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#717">block_has_file</a></td>
<td class="coverFnHi">25304571</td>
<td class="coverFnHi">25253088</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#750">file_flag_has</a></td>
<td class="coverFnHi">39608750</td>
<td class="coverFnHi">39575710</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#795">file_block</a></td>
<td class="coverFnHi">66152513</td>
<td class="coverFnHi">65978414</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#660">block_sizeof</a></td>
<td class="coverFnHi">69982896</td>
<td class="coverFnHi">69808821</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#671">block_state_get</a></td>
<td class="coverFnHi">74577257</td>
<td class="coverFnHi">74400305</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">41</td>
@ -61,35 +61,35 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#717">block_has_file</a></td>
<td class="coverFnHi">25304571</td>
<td class="coverFnHi">25253088</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#743">block_has_file_and_valid_parity</a></td>
<td class="coverFnHi">226094</td>
<td class="coverFnHi">226098</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#730">block_has_invalid_parity</a></td>
<td class="coverFnHi">23228801</td>
<td class="coverFnHi">23186776</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#705">block_has_past_hash</a></td>
<td class="coverFnHi">2686312</td>
<td class="coverFnHi">2686411</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#692">block_has_updated_hash</a></td>
<td class="coverFnHi">2188335</td>
<td class="coverFnHi">2188345</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#660">block_sizeof</a></td>
<td class="coverFnHi">69982896</td>
<td class="coverFnHi">69808821</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#671">block_state_get</a></td>
<td class="coverFnHi">74577257</td>
<td class="coverFnHi">74400305</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#682">block_state_set</a></td>
<td class="coverFnHi">19703104</td>
<td class="coverFnHi">19702751</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#949">dir_flag_has</a></td>
@ -105,39 +105,39 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#795">file_block</a></td>
<td class="coverFnHi">66152513</td>
<td class="coverFnHi">65978414</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#760">file_flag_clear</a></td>
<td class="coverFnHi">12545</td>
<td class="coverFnHi">13077</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#750">file_flag_has</a></td>
<td class="coverFnHi">39608750</td>
<td class="coverFnHi">39575710</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#755">file_flag_set</a></td>
<td class="coverFnHi">5792498</td>
<td class="coverFnHi">5793396</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#841">file_inode_hash</a></td>
<td class="coverFnHi">5220350</td>
<td class="coverFnHi">5220892</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#862">file_path_hash</a></td>
<td class="coverFnHi">4002881</td>
<td class="coverFnHi">4002848</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#870">file_stamp_hash</a></td>
<td class="coverFnHi">6390305</td>
<td class="coverFnHi">6390630</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#533">filter_hidden</a></td>
<td class="coverFnHi">3231524</td>
<td class="coverFnHi">3231650</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1074">fs_file2par_get</a></td>
<td class="coverFnHi">4959524</td>
<td class="coverFnHi">4918180</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1098">fs_par2block_get</a></td>
@ -145,23 +145,23 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1050">fs_par2file_get</a></td>
<td class="coverFnHi">11505649</td>
<td class="coverFnHi">11505277</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#644">hash_invalid_set</a></td>
<td class="coverFnHi">9532465</td>
<td class="coverFnHi">9532509</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#590">hash_is_invalid</a></td>
<td class="coverFnHi">756505</td>
<td class="coverFnHi">756707</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#632">hash_is_unique</a></td>
<td class="coverFnHi">44043</td>
<td class="coverFnHi">43988</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#612">hash_is_zero</a></td>
<td class="coverFnHi">760014</td>
<td class="coverFnHi">760217</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#652">hash_zero_set</a></td>
@ -169,35 +169,35 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1216">info_get</a></td>
<td class="coverFnHi">3171512</td>
<td class="coverFnHi">3152579</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1162">info_get_bad</a></td>
<td class="coverFnHi">247612</td>
<td class="coverFnHi">242727</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1180">info_get_justsynced</a></td>
<td class="coverFnHi">23836</td>
<td class="coverFnHi">18930</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1171">info_get_rehash</a></td>
<td class="coverFnHi">2048435</td>
<td class="coverFnHi">2036469</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1153">info_get_time</a></td>
<td class="coverFnHi">798417</td>
<td class="coverFnHi">786514</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1134">info_make</a></td>
<td class="coverFnHi">191697</td>
<td class="coverFnHi">180457</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1205">info_set</a></td>
<td class="coverFnHi">1757573</td>
<td class="coverFnHi">1757522</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1188">info_set_bad</a></td>
<td class="coverFnHi">1771</td>
<td class="coverFnHi">1772</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1196">info_set_rehash</a></td>
@ -205,7 +205,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#916">link_flag_get</a></td>
<td class="coverFnHi">96285</td>
<td class="coverFnHi">95741</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#895">link_flag_has</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">41</td>
@ -594,13 +594,13 @@
<a name="532"><span class="lineNum"> 532 </span> : * Filter hidden files.</a>
<a name="533"><span class="lineNum"> 533 </span> : * Return !=0 if it matches and it should be excluded.</a>
<a name="534"><span class="lineNum"> 534 </span> : */</a>
<a name="535"><span class="lineNum"> 535 </span><span class="lineCov"> 3231524 : static inline int filter_hidden(int enable, struct dirent* dd)</span></a>
<a name="535"><span class="lineNum"> 535 </span><span class="lineCov"> 3231650 : static inline int filter_hidden(int enable, struct dirent* dd)</span></a>
<a name="536"><span class="lineNum"> 536 </span> : {</a>
<a name="537"><span class="lineNum"> 537 </span><span class="lineCov"> 3231524 : if (enable &amp;&amp; dirent_hidden(dd)) {</span></a>
<a name="537"><span class="lineNum"> 537 </span><span class="lineCov"> 3231650 : if (enable &amp;&amp; dirent_hidden(dd)) {</span></a>
<a name="538"><span class="lineNum"> 538 </span><span class="lineNoCov"> 0 : return 1; /* filter out */</span></a>
<a name="539"><span class="lineNum"> 539 </span> : }</a>
<a name="540"><span class="lineNum"> 540 </span> : </a>
<a name="541"><span class="lineNum"> 541 </span><span class="lineCov"> 3231524 : return 0;</span></a>
<a name="541"><span class="lineNum"> 541 </span><span class="lineCov"> 3231650 : return 0;</span></a>
<a name="542"><span class="lineNum"> 542 </span> : }</a>
<a name="543"><span class="lineNum"> 543 </span> : </a>
<a name="544"><span class="lineNum"> 544 </span> : /**</a>
@ -651,17 +651,17 @@
<a name="589"><span class="lineNum"> 589 </span> : *</a>
<a name="590"><span class="lineNum"> 590 </span> : * If working with reduced hash lengths, this function always return 0.</a>
<a name="591"><span class="lineNum"> 591 </span> : */</a>
<a name="592"><span class="lineNum"> 592 </span><span class="lineCov"> 756505 : static inline int hash_is_invalid(const unsigned char* hash)</span></a>
<a name="592"><span class="lineNum"> 592 </span><span class="lineCov"> 756707 : static inline int hash_is_invalid(const unsigned char* hash)</span></a>
<a name="593"><span class="lineNum"> 593 </span> : {</a>
<a name="594"><span class="lineNum"> 594 </span> : int i;</a>
<a name="595"><span class="lineNum"> 595 </span> : </a>
<a name="596"><span class="lineNum"> 596 </span> : /* if the hash is reduced, we cannot grant that it's a specific kind of hash */</a>
<a name="597"><span class="lineNum"> 597 </span><span class="lineCov"> 756505 : if (BLOCK_HASH_SIZE != HASH_MAX)</span></a>
<a name="597"><span class="lineNum"> 597 </span><span class="lineCov"> 756707 : if (BLOCK_HASH_SIZE != HASH_MAX)</span></a>
<a name="598"><span class="lineNum"> 598 </span><span class="lineNoCov"> 0 : return 0;</span></a>
<a name="599"><span class="lineNum"> 599 </span> : </a>
<a name="600"><span class="lineNum"> 600 </span><span class="lineCov"> 1176105 : for (i = 0; i &lt; BLOCK_HASH_SIZE; ++i)</span></a>
<a name="601"><span class="lineNum"> 601 </span><span class="lineCov"> 1150041 : if (hash[i] != 0x00)</span></a>
<a name="602"><span class="lineNum"> 602 </span><span class="lineCov"> 730441 : return 0;</span></a>
<a name="600"><span class="lineNum"> 600 </span><span class="lineCov"> 1176704 : for (i = 0; i &lt; BLOCK_HASH_SIZE; ++i)</span></a>
<a name="601"><span class="lineNum"> 601 </span><span class="lineCov"> 1150640 : if (hash[i] != 0x00)</span></a>
<a name="602"><span class="lineNum"> 602 </span><span class="lineCov"> 730643 : return 0;</span></a>
<a name="603"><span class="lineNum"> 603 </span> : </a>
<a name="604"><span class="lineNum"> 604 </span><span class="lineCov"> 26064 : return 1;</span></a>
<a name="605"><span class="lineNum"> 605 </span> : }</a>
@ -673,17 +673,17 @@
<a name="611"><span class="lineNum"> 611 </span> : *</a>
<a name="612"><span class="lineNum"> 612 </span> : * If working with reduced hash lengths, this function always return 0.</a>
<a name="613"><span class="lineNum"> 613 </span> : */</a>
<a name="614"><span class="lineNum"> 614 </span><span class="lineCov"> 760014 : static inline int hash_is_zero(const unsigned char* hash)</span></a>
<a name="614"><span class="lineNum"> 614 </span><span class="lineCov"> 760217 : static inline int hash_is_zero(const unsigned char* hash)</span></a>
<a name="615"><span class="lineNum"> 615 </span> : {</a>
<a name="616"><span class="lineNum"> 616 </span> : int i;</a>
<a name="617"><span class="lineNum"> 617 </span> : </a>
<a name="618"><span class="lineNum"> 618 </span> : /* if the hash is reduced, we cannot grant that it's a specific kind of hash */</a>
<a name="619"><span class="lineNum"> 619 </span><span class="lineCov"> 760014 : if (BLOCK_HASH_SIZE != HASH_MAX)</span></a>
<a name="619"><span class="lineNum"> 619 </span><span class="lineCov"> 760217 : if (BLOCK_HASH_SIZE != HASH_MAX)</span></a>
<a name="620"><span class="lineNum"> 620 </span><span class="lineNoCov"> 0 : return 0;</span></a>
<a name="621"><span class="lineNum"> 621 </span> : </a>
<a name="622"><span class="lineNum"> 622 </span><span class="lineCov"> 1027474 : for (i = 0; i &lt; BLOCK_HASH_SIZE; ++i)</span></a>
<a name="623"><span class="lineNum"> 623 </span><span class="lineCov"> 1010957 : if (hash[i] != 0xFF)</span></a>
<a name="624"><span class="lineNum"> 624 </span><span class="lineCov"> 743497 : return 0;</span></a>
<a name="622"><span class="lineNum"> 622 </span><span class="lineCov"> 1027299 : for (i = 0; i &lt; BLOCK_HASH_SIZE; ++i)</span></a>
<a name="623"><span class="lineNum"> 623 </span><span class="lineCov"> 1010782 : if (hash[i] != 0xFF)</span></a>
<a name="624"><span class="lineNum"> 624 </span><span class="lineCov"> 743700 : return 0;</span></a>
<a name="625"><span class="lineNum"> 625 </span> : </a>
<a name="626"><span class="lineNum"> 626 </span><span class="lineCov"> 16517 : return 1;</span></a>
<a name="627"><span class="lineNum"> 627 </span> : }</a>
@ -693,22 +693,22 @@
<a name="631"><span class="lineNum"> 631 </span> : *</a>
<a name="632"><span class="lineNum"> 632 </span> : * If working with reduced hash lengths, this function always return 0.</a>
<a name="633"><span class="lineNum"> 633 </span> : */</a>
<a name="634"><span class="lineNum"> 634 </span><span class="lineCov"> 44043 : static inline int hash_is_unique(const unsigned char* hash)</span></a>
<a name="634"><span class="lineNum"> 634 </span><span class="lineCov"> 43988 : static inline int hash_is_unique(const unsigned char* hash)</span></a>
<a name="635"><span class="lineNum"> 635 </span> : {</a>
<a name="636"><span class="lineNum"> 636 </span> : /* if the hash is reduced, we cannot grant that it's a specific kind of hash */</a>
<a name="637"><span class="lineNum"> 637 </span><span class="lineCov"> 44043 : if (BLOCK_HASH_SIZE != HASH_MAX)</span></a>
<a name="637"><span class="lineNum"> 637 </span><span class="lineCov"> 43988 : if (BLOCK_HASH_SIZE != HASH_MAX)</span></a>
<a name="638"><span class="lineNum"> 638 </span><span class="lineNoCov"> 0 : return 0;</span></a>
<a name="639"><span class="lineNum"> 639 </span> : </a>
<a name="640"><span class="lineNum"> 640 </span><span class="lineCov"> 44043 : return !hash_is_zero(hash) &amp;&amp; !hash_is_invalid(hash);</span></a>
<a name="640"><span class="lineNum"> 640 </span><span class="lineCov"> 43988 : return !hash_is_zero(hash) &amp;&amp; !hash_is_invalid(hash);</span></a>
<a name="641"><span class="lineNum"> 641 </span> : }</a>
<a name="642"><span class="lineNum"> 642 </span> : </a>
<a name="643"><span class="lineNum"> 643 </span> : /**</a>
<a name="644"><span class="lineNum"> 644 </span> : * Set the hash to the special INVALID value.</a>
<a name="645"><span class="lineNum"> 645 </span> : */</a>
<a name="646"><span class="lineNum"> 646 </span><span class="lineCov"> 9532465 : static inline void hash_invalid_set(unsigned char* hash)</span></a>
<a name="646"><span class="lineNum"> 646 </span><span class="lineCov"> 9532509 : static inline void hash_invalid_set(unsigned char* hash)</span></a>
<a name="647"><span class="lineNum"> 647 </span> : {</a>
<a name="648"><span class="lineNum"> 648 </span><span class="lineCov"> 9532465 : memset(hash, 0x00, BLOCK_HASH_SIZE);</span></a>
<a name="649"><span class="lineNum"> 649 </span><span class="lineCov"> 9532465 : }</span></a>
<a name="648"><span class="lineNum"> 648 </span><span class="lineCov"> 9532509 : memset(hash, 0x00, BLOCK_HASH_SIZE);</span></a>
<a name="649"><span class="lineNum"> 649 </span><span class="lineCov"> 9532509 : }</span></a>
<a name="650"><span class="lineNum"> 650 </span> : </a>
<a name="651"><span class="lineNum"> 651 </span> : /**</a>
<a name="652"><span class="lineNum"> 652 </span> : * Set the hash to the special ZERO value.</a>
@ -721,9 +721,9 @@
<a name="659"><span class="lineNum"> 659 </span> : /**</a>
<a name="660"><span class="lineNum"> 660 </span> : * Allocated space for block.</a>
<a name="661"><span class="lineNum"> 661 </span> : */</a>
<a name="662"><span class="lineNum"> 662 </span><span class="lineCov"> 69982896 : static inline size_t block_sizeof(void)</span></a>
<a name="662"><span class="lineNum"> 662 </span><span class="lineCov"> 69808821 : static inline size_t block_sizeof(void)</span></a>
<a name="663"><span class="lineNum"> 663 </span> : {</a>
<a name="664"><span class="lineNum"> 664 </span><span class="lineCov"> 69982896 : return 1 + BLOCK_HASH_SIZE;</span></a>
<a name="664"><span class="lineNum"> 664 </span><span class="lineCov"> 69808821 : return 1 + BLOCK_HASH_SIZE;</span></a>
<a name="665"><span class="lineNum"> 665 </span> : }</a>
<a name="666"><span class="lineNum"> 666 </span> : </a>
<a name="667"><span class="lineNum"> 667 </span> : /**</a>
@ -732,32 +732,32 @@
<a name="670"><span class="lineNum"> 670 </span> : * For this function, it's allowed to pass a NULL block</a>
<a name="671"><span class="lineNum"> 671 </span> : * pointer than results in the BLOCK_STATE_EMPTY state.</a>
<a name="672"><span class="lineNum"> 672 </span> : */</a>
<a name="673"><span class="lineNum"> 673 </span><span class="lineCov"> 74577257 : static inline unsigned block_state_get(const struct snapraid_block* block)</span></a>
<a name="673"><span class="lineNum"> 673 </span><span class="lineCov"> 74400305 : static inline unsigned block_state_get(const struct snapraid_block* block)</span></a>
<a name="674"><span class="lineNum"> 674 </span> : {</a>
<a name="675"><span class="lineNum"> 675 </span><span class="lineCov"> 74577257 : if (block == BLOCK_NULL)</span></a>
<a name="676"><span class="lineNum"> 676 </span><span class="lineCov"> 2302380 : return BLOCK_STATE_EMPTY;</span></a>
<a name="675"><span class="lineNum"> 675 </span><span class="lineCov"> 74400305 : if (block == BLOCK_NULL)</span></a>
<a name="676"><span class="lineNum"> 676 </span><span class="lineCov"> 2299617 : return BLOCK_STATE_EMPTY;</span></a>
<a name="677"><span class="lineNum"> 677 </span> : </a>
<a name="678"><span class="lineNum"> 678 </span><span class="lineCov"> 72274877 : return block-&gt;state;</span></a>
<a name="678"><span class="lineNum"> 678 </span><span class="lineCov"> 72100688 : return block-&gt;state;</span></a>
<a name="679"><span class="lineNum"> 679 </span> : }</a>
<a name="680"><span class="lineNum"> 680 </span> : </a>
<a name="681"><span class="lineNum"> 681 </span> : /**</a>
<a name="682"><span class="lineNum"> 682 </span> : * Set the state of the block.</a>
<a name="683"><span class="lineNum"> 683 </span> : */</a>
<a name="684"><span class="lineNum"> 684 </span><span class="lineCov"> 19703104 : static inline void block_state_set(struct snapraid_block* block, unsigned state)</span></a>
<a name="684"><span class="lineNum"> 684 </span><span class="lineCov"> 19702751 : static inline void block_state_set(struct snapraid_block* block, unsigned state)</span></a>
<a name="685"><span class="lineNum"> 685 </span> : {</a>
<a name="686"><span class="lineNum"> 686 </span><span class="lineCov"> 19703104 : block-&gt;state = state;</span></a>
<a name="687"><span class="lineNum"> 687 </span><span class="lineCov"> 19703104 : }</span></a>
<a name="686"><span class="lineNum"> 686 </span><span class="lineCov"> 19702751 : block-&gt;state = state;</span></a>
<a name="687"><span class="lineNum"> 687 </span><span class="lineCov"> 19702751 : }</span></a>
<a name="688"><span class="lineNum"> 688 </span> : </a>
<a name="689"><span class="lineNum"> 689 </span> : /**</a>
<a name="690"><span class="lineNum"> 690 </span> : * Check if the specified block has an updated hash.</a>
<a name="691"><span class="lineNum"> 691 </span> : *</a>
<a name="692"><span class="lineNum"> 692 </span> : * Note that EMPTY / CHG / DELETED return 0.</a>
<a name="693"><span class="lineNum"> 693 </span> : */</a>
<a name="694"><span class="lineNum"> 694 </span><span class="lineCov"> 2188335 : static inline int block_has_updated_hash(const struct snapraid_block* block)</span></a>
<a name="694"><span class="lineNum"> 694 </span><span class="lineCov"> 2188345 : static inline int block_has_updated_hash(const struct snapraid_block* block)</span></a>
<a name="695"><span class="lineNum"> 695 </span> : {</a>
<a name="696"><span class="lineNum"> 696 </span><span class="lineCov"> 2188335 : unsigned state = block_state_get(block);</span></a>
<a name="696"><span class="lineNum"> 696 </span><span class="lineCov"> 2188345 : unsigned state = block_state_get(block);</span></a>
<a name="697"><span class="lineNum"> 697 </span> : </a>
<a name="698"><span class="lineNum"> 698 </span><span class="lineCov"> 2188335 : return state == BLOCK_STATE_BLK || state == BLOCK_STATE_REP;</span></a>
<a name="698"><span class="lineNum"> 698 </span><span class="lineCov"> 2188345 : return state == BLOCK_STATE_BLK || state == BLOCK_STATE_REP;</span></a>
<a name="699"><span class="lineNum"> 699 </span> : }</a>
<a name="700"><span class="lineNum"> 700 </span> : </a>
<a name="701"><span class="lineNum"> 701 </span> : /**</a>
@ -766,11 +766,11 @@
<a name="704"><span class="lineNum"> 704 </span> : *</a>
<a name="705"><span class="lineNum"> 705 </span> : * Note that EMPTY / BLK / REP return 0.</a>
<a name="706"><span class="lineNum"> 706 </span> : */</a>
<a name="707"><span class="lineNum"> 707 </span><span class="lineCov"> 2686312 : static inline int block_has_past_hash(const struct snapraid_block* block)</span></a>
<a name="707"><span class="lineNum"> 707 </span><span class="lineCov"> 2686411 : static inline int block_has_past_hash(const struct snapraid_block* block)</span></a>
<a name="708"><span class="lineNum"> 708 </span> : {</a>
<a name="709"><span class="lineNum"> 709 </span><span class="lineCov"> 2686312 : unsigned state = block_state_get(block);</span></a>
<a name="709"><span class="lineNum"> 709 </span><span class="lineCov"> 2686411 : unsigned state = block_state_get(block);</span></a>
<a name="710"><span class="lineNum"> 710 </span> : </a>
<a name="711"><span class="lineNum"> 711 </span><span class="lineCov"> 2686312 : return state == BLOCK_STATE_CHG || state == BLOCK_STATE_DELETED;</span></a>
<a name="711"><span class="lineNum"> 711 </span><span class="lineCov"> 2686411 : return state == BLOCK_STATE_CHG || state == BLOCK_STATE_DELETED;</span></a>
<a name="712"><span class="lineNum"> 712 </span> : }</a>
<a name="713"><span class="lineNum"> 713 </span> : </a>
<a name="714"><span class="lineNum"> 714 </span> : /**</a>
@ -778,12 +778,12 @@
<a name="716"><span class="lineNum"> 716 </span> : *</a>
<a name="717"><span class="lineNum"> 717 </span> : * Note that EMPTY / DELETED return 0.</a>
<a name="718"><span class="lineNum"> 718 </span> : */</a>
<a name="719"><span class="lineNum"> 719 </span><span class="lineCov"> 25304571 : static inline int block_has_file(const struct snapraid_block* block)</span></a>
<a name="719"><span class="lineNum"> 719 </span><span class="lineCov"> 25253088 : static inline int block_has_file(const struct snapraid_block* block)</span></a>
<a name="720"><span class="lineNum"> 720 </span> : {</a>
<a name="721"><span class="lineNum"> 721 </span><span class="lineCov"> 25304571 : unsigned state = block_state_get(block);</span></a>
<a name="721"><span class="lineNum"> 721 </span><span class="lineCov"> 25253088 : unsigned state = block_state_get(block);</span></a>
<a name="722"><span class="lineNum"> 722 </span> : </a>
<a name="723"><span class="lineNum"> 723 </span> : return state == BLOCK_STATE_BLK</a>
<a name="724"><span class="lineNum"> 724 </span><span class="lineCov"> 25304571 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span></a>
<a name="724"><span class="lineNum"> 724 </span><span class="lineCov"> 25253088 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span></a>
<a name="725"><span class="lineNum"> 725 </span> : }</a>
<a name="726"><span class="lineNum"> 726 </span> : </a>
<a name="727"><span class="lineNum"> 727 </span> : /**</a>
@ -791,12 +791,12 @@
<a name="729"><span class="lineNum"> 729 </span> : *</a>
<a name="730"><span class="lineNum"> 730 </span> : * Note that EMPTY / BLK return 0.</a>
<a name="731"><span class="lineNum"> 731 </span> : */</a>
<a name="732"><span class="lineNum"> 732 </span><span class="lineCov"> 23228801 : static inline int block_has_invalid_parity(const struct snapraid_block* block)</span></a>
<a name="732"><span class="lineNum"> 732 </span><span class="lineCov"> 23186776 : static inline int block_has_invalid_parity(const struct snapraid_block* block)</span></a>
<a name="733"><span class="lineNum"> 733 </span> : {</a>
<a name="734"><span class="lineNum"> 734 </span><span class="lineCov"> 23228801 : unsigned state = block_state_get(block);</span></a>
<a name="734"><span class="lineNum"> 734 </span><span class="lineCov"> 23186776 : unsigned state = block_state_get(block);</span></a>
<a name="735"><span class="lineNum"> 735 </span> : </a>
<a name="736"><span class="lineNum"> 736 </span> : return state == BLOCK_STATE_DELETED</a>
<a name="737"><span class="lineNum"> 737 </span><span class="lineCov"> 23228801 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span></a>
<a name="737"><span class="lineNum"> 737 </span><span class="lineCov"> 23186776 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span></a>
<a name="738"><span class="lineNum"> 738 </span> : }</a>
<a name="739"><span class="lineNum"> 739 </span> : </a>
<a name="740"><span class="lineNum"> 740 </span> : /**</a>
@ -804,27 +804,27 @@
<a name="742"><span class="lineNum"> 742 </span> : *</a>
<a name="743"><span class="lineNum"> 743 </span> : * Note that anything different than BLK return 0.</a>
<a name="744"><span class="lineNum"> 744 </span> : */</a>
<a name="745"><span class="lineNum"> 745 </span><span class="lineCov"> 226094 : static inline int block_has_file_and_valid_parity(const struct snapraid_block* block)</span></a>
<a name="745"><span class="lineNum"> 745 </span><span class="lineCov"> 226098 : static inline int block_has_file_and_valid_parity(const struct snapraid_block* block)</span></a>
<a name="746"><span class="lineNum"> 746 </span> : {</a>
<a name="747"><span class="lineNum"> 747 </span><span class="lineCov"> 226094 : unsigned state = block_state_get(block);</span></a>
<a name="747"><span class="lineNum"> 747 </span><span class="lineCov"> 226098 : unsigned state = block_state_get(block);</span></a>
<a name="748"><span class="lineNum"> 748 </span> : </a>
<a name="749"><span class="lineNum"> 749 </span><span class="lineCov"> 226094 : return state == BLOCK_STATE_BLK;</span></a>
<a name="749"><span class="lineNum"> 749 </span><span class="lineCov"> 226098 : return state == BLOCK_STATE_BLK;</span></a>
<a name="750"><span class="lineNum"> 750 </span> : }</a>
<a name="751"><span class="lineNum"> 751 </span> : </a>
<a name="752"><span class="lineNum"> 752 </span><span class="lineCov"> 39608750 : static inline int file_flag_has(const struct snapraid_file* file, unsigned mask)</span></a>
<a name="752"><span class="lineNum"> 752 </span><span class="lineCov"> 39575710 : static inline int file_flag_has(const struct snapraid_file* file, unsigned mask)</span></a>
<a name="753"><span class="lineNum"> 753 </span> : {</a>
<a name="754"><span class="lineNum"> 754 </span><span class="lineCov"> 39608750 : return (file-&gt;flag &amp; mask) == mask;</span></a>
<a name="754"><span class="lineNum"> 754 </span><span class="lineCov"> 39575710 : return (file-&gt;flag &amp; mask) == mask;</span></a>
<a name="755"><span class="lineNum"> 755 </span> : }</a>
<a name="756"><span class="lineNum"> 756 </span> : </a>
<a name="757"><span class="lineNum"> 757 </span><span class="lineCov"> 5792498 : static inline void file_flag_set(struct snapraid_file* file, unsigned mask)</span></a>
<a name="757"><span class="lineNum"> 757 </span><span class="lineCov"> 5793396 : static inline void file_flag_set(struct snapraid_file* file, unsigned mask)</span></a>
<a name="758"><span class="lineNum"> 758 </span> : {</a>
<a name="759"><span class="lineNum"> 759 </span><span class="lineCov"> 5792498 : file-&gt;flag |= mask;</span></a>
<a name="760"><span class="lineNum"> 760 </span><span class="lineCov"> 5792498 : }</span></a>
<a name="759"><span class="lineNum"> 759 </span><span class="lineCov"> 5793396 : file-&gt;flag |= mask;</span></a>
<a name="760"><span class="lineNum"> 760 </span><span class="lineCov"> 5793396 : }</span></a>
<a name="761"><span class="lineNum"> 761 </span> : </a>
<a name="762"><span class="lineNum"> 762 </span><span class="lineCov"> 12545 : static inline void file_flag_clear(struct snapraid_file* file, unsigned mask)</span></a>
<a name="762"><span class="lineNum"> 762 </span><span class="lineCov"> 13077 : static inline void file_flag_clear(struct snapraid_file* file, unsigned mask)</span></a>
<a name="763"><span class="lineNum"> 763 </span> : {</a>
<a name="764"><span class="lineNum"> 764 </span><span class="lineCov"> 12545 : file-&gt;flag &amp;= ~mask;</span></a>
<a name="765"><span class="lineNum"> 765 </span><span class="lineCov"> 12545 : }</span></a>
<a name="764"><span class="lineNum"> 764 </span><span class="lineCov"> 13077 : file-&gt;flag &amp;= ~mask;</span></a>
<a name="765"><span class="lineNum"> 765 </span><span class="lineCov"> 13077 : }</span></a>
<a name="766"><span class="lineNum"> 766 </span> : </a>
<a name="767"><span class="lineNum"> 767 </span> : /**</a>
<a name="768"><span class="lineNum"> 768 </span> : * Allocate a file.</a>
@ -856,11 +856,11 @@
<a name="794"><span class="lineNum"> 794 </span> : *</a>
<a name="795"><span class="lineNum"> 795 </span> : * Note that the block size if a runtime value.</a>
<a name="796"><span class="lineNum"> 796 </span> : */</a>
<a name="797"><span class="lineNum"> 797 </span><span class="lineCov"> 66152513 : static inline struct snapraid_block* file_block(struct snapraid_file* file, size_t pos)</span></a>
<a name="797"><span class="lineNum"> 797 </span><span class="lineCov"> 65978414 : static inline struct snapraid_block* file_block(struct snapraid_file* file, size_t pos)</span></a>
<a name="798"><span class="lineNum"> 798 </span> : {</a>
<a name="799"><span class="lineNum"> 799 </span><span class="lineCov"> 66152513 : unsigned char* ptr = (unsigned char*)file-&gt;blockvec;</span></a>
<a name="799"><span class="lineNum"> 799 </span><span class="lineCov"> 65978414 : unsigned char* ptr = (unsigned char*)file-&gt;blockvec;</span></a>
<a name="800"><span class="lineNum"> 800 </span> : </a>
<a name="801"><span class="lineNum"> 801 </span><span class="lineCov"> 66152513 : return (struct snapraid_block*)(ptr + pos * block_sizeof());</span></a>
<a name="801"><span class="lineNum"> 801 </span><span class="lineCov"> 65978414 : return (struct snapraid_block*)(ptr + pos * block_sizeof());</span></a>
<a name="802"><span class="lineNum"> 802 </span> : }</a>
<a name="803"><span class="lineNum"> 803 </span> : </a>
<a name="804"><span class="lineNum"> 804 </span> : /**</a>
@ -902,9 +902,9 @@
<a name="840"><span class="lineNum"> 840 </span> : /**</a>
<a name="841"><span class="lineNum"> 841 </span> : * Compute the hash of a file inode.</a>
<a name="842"><span class="lineNum"> 842 </span> : */</a>
<a name="843"><span class="lineNum"> 843 </span><span class="lineCov"> 5220350 : static inline tommy_uint32_t file_inode_hash(uint64_t inode)</span></a>
<a name="843"><span class="lineNum"> 843 </span><span class="lineCov"> 5220892 : static inline tommy_uint32_t file_inode_hash(uint64_t inode)</span></a>
<a name="844"><span class="lineNum"> 844 </span> : {</a>
<a name="845"><span class="lineNum"> 845 </span><span class="lineCov"> 5220350 : return (tommy_uint32_t)tommy_inthash_u64(inode);</span></a>
<a name="845"><span class="lineNum"> 845 </span><span class="lineCov"> 5220892 : return (tommy_uint32_t)tommy_inthash_u64(inode);</span></a>
<a name="846"><span class="lineNum"> 846 </span> : }</a>
<a name="847"><span class="lineNum"> 847 </span> : </a>
<a name="848"><span class="lineNum"> 848 </span> : /**</a>
@ -923,17 +923,17 @@
<a name="861"><span class="lineNum"> 861 </span> : /**</a>
<a name="862"><span class="lineNum"> 862 </span> : * Compute the hash of a file path.</a>
<a name="863"><span class="lineNum"> 863 </span> : */</a>
<a name="864"><span class="lineNum"> 864 </span><span class="lineCov"> 4002881 : static inline tommy_uint32_t file_path_hash(const char* sub)</span></a>
<a name="864"><span class="lineNum"> 864 </span><span class="lineCov"> 4002848 : static inline tommy_uint32_t file_path_hash(const char* sub)</span></a>
<a name="865"><span class="lineNum"> 865 </span> : {</a>
<a name="866"><span class="lineNum"> 866 </span><span class="lineCov"> 4002881 : return tommy_hash_u32(0, sub, strlen(sub));</span></a>
<a name="866"><span class="lineNum"> 866 </span><span class="lineCov"> 4002848 : return tommy_hash_u32(0, sub, strlen(sub));</span></a>
<a name="867"><span class="lineNum"> 867 </span> : }</a>
<a name="868"><span class="lineNum"> 868 </span> : </a>
<a name="869"><span class="lineNum"> 869 </span> : /**</a>
<a name="870"><span class="lineNum"> 870 </span> : * Compute the hash of a file stamp.</a>
<a name="871"><span class="lineNum"> 871 </span> : */</a>
<a name="872"><span class="lineNum"> 872 </span><span class="lineCov"> 6390305 : static inline tommy_uint32_t file_stamp_hash(data_off_t size, int64_t mtime_sec, int mtime_nsec)</span></a>
<a name="872"><span class="lineNum"> 872 </span><span class="lineCov"> 6390630 : static inline tommy_uint32_t file_stamp_hash(data_off_t size, int64_t mtime_sec, int mtime_nsec)</span></a>
<a name="873"><span class="lineNum"> 873 </span> : {</a>
<a name="874"><span class="lineNum"> 874 </span><span class="lineCov"> 6390305 : return tommy_inthash_u32((tommy_uint32_t)size ^ tommy_inthash_u32(mtime_sec ^ tommy_inthash_u32(mtime_nsec)));</span></a>
<a name="874"><span class="lineNum"> 874 </span><span class="lineCov"> 6390630 : return tommy_inthash_u32((tommy_uint32_t)size ^ tommy_inthash_u32(mtime_sec ^ tommy_inthash_u32(mtime_nsec)));</span></a>
<a name="875"><span class="lineNum"> 875 </span> : }</a>
<a name="876"><span class="lineNum"> 876 </span> : </a>
<a name="877"><span class="lineNum"> 877 </span> : /**</a>
@ -977,9 +977,9 @@
<a name="915"><span class="lineNum"> 915 </span><span class="lineCov"> 6 : slink-&gt;flag |= flag &amp; mask;</span></a>
<a name="916"><span class="lineNum"> 916 </span><span class="lineCov"> 6 : }</span></a>
<a name="917"><span class="lineNum"> 917 </span> : </a>
<a name="918"><span class="lineNum"> 918 </span><span class="lineCov"> 96285 : static inline unsigned link_flag_get(struct snapraid_link* slink, unsigned mask)</span></a>
<a name="918"><span class="lineNum"> 918 </span><span class="lineCov"> 95741 : static inline unsigned link_flag_get(struct snapraid_link* slink, unsigned mask)</span></a>
<a name="919"><span class="lineNum"> 919 </span> : {</a>
<a name="920"><span class="lineNum"> 920 </span><span class="lineCov"> 96285 : return slink-&gt;flag &amp; mask;</span></a>
<a name="920"><span class="lineNum"> 920 </span><span class="lineCov"> 95741 : return slink-&gt;flag &amp; mask;</span></a>
<a name="921"><span class="lineNum"> 921 </span> : }</a>
<a name="922"><span class="lineNum"> 922 </span> : </a>
<a name="923"><span class="lineNum"> 923 </span> : /**</a>
@ -1111,19 +1111,19 @@
<a name="1049"><span class="lineNum"> 1049 </span> : /**</a>
<a name="1050"><span class="lineNum"> 1050 </span> : * Get the file position from the parity position.</a>
<a name="1051"><span class="lineNum"> 1051 </span> : */</a>
<a name="1052"><span class="lineNum"> 1052 </span><span class="lineCov"> 11505649 : static inline struct snapraid_file* fs_par2file_get(struct snapraid_disk* disk, block_off_t parity_pos, block_off_t* file_pos)</span></a>
<a name="1052"><span class="lineNum"> 1052 </span><span class="lineCov"> 11505277 : static inline struct snapraid_file* fs_par2file_get(struct snapraid_disk* disk, block_off_t parity_pos, block_off_t* file_pos)</span></a>
<a name="1053"><span class="lineNum"> 1053 </span> : {</a>
<a name="1054"><span class="lineNum"> 1054 </span> : struct snapraid_file* ret;</a>
<a name="1055"><span class="lineNum"> 1055 </span> : </a>
<a name="1056"><span class="lineNum"> 1056 </span><span class="lineCov"> 11505649 : ret = fs_par2file_find(disk, parity_pos, file_pos);</span></a>
<a name="1057"><span class="lineNum"> 1057 </span><span class="lineCov"> 11505649 : if (ret == 0) {</span></a>
<a name="1056"><span class="lineNum"> 1056 </span><span class="lineCov"> 11505277 : ret = fs_par2file_find(disk, parity_pos, file_pos);</span></a>
<a name="1057"><span class="lineNum"> 1057 </span><span class="lineCov"> 11505277 : if (ret == 0) {</span></a>
<a name="1058"><span class="lineNum"> 1058 </span> : /* LCOV_EXCL_START */</a>
<a name="1059"><span class="lineNum"> 1059 </span> : log_fatal(EINTERNAL, &quot;Internal inconsistency: Deresolving parity to file at position '%u' in disk '%s'\n&quot;, parity_pos, disk-&gt;name);</a>
<a name="1060"><span class="lineNum"> 1060 </span> : os_abort();</a>
<a name="1061"><span class="lineNum"> 1061 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1062"><span class="lineNum"> 1062 </span> : }</a>
<a name="1063"><span class="lineNum"> 1063 </span> : </a>
<a name="1064"><span class="lineNum"> 1064 </span><span class="lineCov"> 11505649 : return ret;</span></a>
<a name="1064"><span class="lineNum"> 1064 </span><span class="lineCov"> 11505277 : return ret;</span></a>
<a name="1065"><span class="lineNum"> 1065 </span> : }</a>
<a name="1066"><span class="lineNum"> 1066 </span> : </a>
<a name="1067"><span class="lineNum"> 1067 </span> : /**</a>
@ -1135,19 +1135,19 @@
<a name="1073"><span class="lineNum"> 1073 </span> : /**</a>
<a name="1074"><span class="lineNum"> 1074 </span> : * Get the parity position from the file position.</a>
<a name="1075"><span class="lineNum"> 1075 </span> : */</a>
<a name="1076"><span class="lineNum"> 1076 </span><span class="lineCov"> 4959524 : static inline block_off_t fs_file2par_get(struct snapraid_disk* disk, struct snapraid_file* file, block_off_t file_pos)</span></a>
<a name="1076"><span class="lineNum"> 1076 </span><span class="lineCov"> 4918180 : static inline block_off_t fs_file2par_get(struct snapraid_disk* disk, struct snapraid_file* file, block_off_t file_pos)</span></a>
<a name="1077"><span class="lineNum"> 1077 </span> : {</a>
<a name="1078"><span class="lineNum"> 1078 </span> : block_off_t ret;</a>
<a name="1079"><span class="lineNum"> 1079 </span> : </a>
<a name="1080"><span class="lineNum"> 1080 </span><span class="lineCov"> 4959524 : ret = fs_file2par_find(disk, file, file_pos);</span></a>
<a name="1081"><span class="lineNum"> 1081 </span><span class="lineCov"> 4959524 : if (ret == POS_NULL) {</span></a>
<a name="1080"><span class="lineNum"> 1080 </span><span class="lineCov"> 4918180 : ret = fs_file2par_find(disk, file, file_pos);</span></a>
<a name="1081"><span class="lineNum"> 1081 </span><span class="lineCov"> 4918180 : if (ret == POS_NULL) {</span></a>
<a name="1082"><span class="lineNum"> 1082 </span> : /* LCOV_EXCL_START */</a>
<a name="1083"><span class="lineNum"> 1083 </span> : log_fatal(EINTERNAL, &quot;Internal inconsistency: Resolving file '%s' at position '%u/%u' in disk '%s'\n&quot;, file-&gt;sub, file_pos, file-&gt;blockmax, disk-&gt;name);</a>
<a name="1084"><span class="lineNum"> 1084 </span> : os_abort();</a>
<a name="1085"><span class="lineNum"> 1085 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1086"><span class="lineNum"> 1086 </span> : }</a>
<a name="1087"><span class="lineNum"> 1087 </span> : </a>
<a name="1088"><span class="lineNum"> 1088 </span><span class="lineCov"> 4959524 : return ret;</span></a>
<a name="1088"><span class="lineNum"> 1088 </span><span class="lineCov"> 4918180 : return ret;</span></a>
<a name="1089"><span class="lineNum"> 1089 </span> : }</a>
<a name="1090"><span class="lineNum"> 1090 </span> : </a>
<a name="1091"><span class="lineNum"> 1091 </span> : /**</a>
@ -1195,18 +1195,18 @@
<a name="1133"><span class="lineNum"> 1133 </span> : /**</a>
<a name="1134"><span class="lineNum"> 1134 </span> : * Make an info.</a>
<a name="1135"><span class="lineNum"> 1135 </span> : */</a>
<a name="1136"><span class="lineNum"> 1136 </span><span class="lineCov"> 191697 : static inline snapraid_info info_make(time_t last_access, int error, int rehash, int justsynced)</span></a>
<a name="1136"><span class="lineNum"> 1136 </span><span class="lineCov"> 180457 : static inline snapraid_info info_make(time_t last_access, int error, int rehash, int justsynced)</span></a>
<a name="1137"><span class="lineNum"> 1137 </span> : {</a>
<a name="1138"><span class="lineNum"> 1138 </span> : /* clear the lowest bits as reserved for other information */</a>
<a name="1139"><span class="lineNum"> 1139 </span><span class="lineCov"> 191697 : snapraid_info info = last_access &amp; ~INFO_MASK;</span></a>
<a name="1139"><span class="lineNum"> 1139 </span><span class="lineCov"> 180457 : snapraid_info info = last_access &amp; ~INFO_MASK;</span></a>
<a name="1140"><span class="lineNum"> 1140 </span> : </a>
<a name="1141"><span class="lineNum"> 1141 </span><span class="lineCov"> 191697 : if (error != 0)</span></a>
<a name="1142"><span class="lineNum"> 1142 </span><span class="lineCov"> 5274 : info |= 0x1;</span></a>
<a name="1143"><span class="lineNum"> 1143 </span><span class="lineCov"> 191697 : if (rehash != 0)</span></a>
<a name="1144"><span class="lineNum"> 1144 </span><span class="lineCov"> 14426 : info |= 0x2;</span></a>
<a name="1145"><span class="lineNum"> 1145 </span><span class="lineCov"> 191697 : if (justsynced != 0)</span></a>
<a name="1146"><span class="lineNum"> 1146 </span><span class="lineCov"> 145610 : info |= 0x4;</span></a>
<a name="1147"><span class="lineNum"> 1147 </span><span class="lineCov"> 191697 : return info;</span></a>
<a name="1141"><span class="lineNum"> 1141 </span><span class="lineCov"> 180457 : if (error != 0)</span></a>
<a name="1142"><span class="lineNum"> 1142 </span><span class="lineCov"> 5276 : info |= 0x1;</span></a>
<a name="1143"><span class="lineNum"> 1143 </span><span class="lineCov"> 180457 : if (rehash != 0)</span></a>
<a name="1144"><span class="lineNum"> 1144 </span><span class="lineCov"> 14181 : info |= 0x2;</span></a>
<a name="1145"><span class="lineNum"> 1145 </span><span class="lineCov"> 180457 : if (justsynced != 0)</span></a>
<a name="1146"><span class="lineNum"> 1146 </span><span class="lineCov"> 134376 : info |= 0x4;</span></a>
<a name="1147"><span class="lineNum"> 1147 </span><span class="lineCov"> 180457 : return info;</span></a>
<a name="1148"><span class="lineNum"> 1148 </span> : }</a>
<a name="1149"><span class="lineNum"> 1149 </span> : </a>
<a name="1150"><span class="lineNum"> 1150 </span> : /**</a>
@ -1214,44 +1214,44 @@
<a name="1152"><span class="lineNum"> 1152 </span> : * This is the last time when the block was know to be correct.</a>
<a name="1153"><span class="lineNum"> 1153 </span> : * The &quot;scrubbed&quot; info tells if the time is referring at the latest sync or scrub.</a>
<a name="1154"><span class="lineNum"> 1154 </span> : */</a>
<a name="1155"><span class="lineNum"> 1155 </span><span class="lineCov"> 798417 : static inline time_t info_get_time(snapraid_info info)</span></a>
<a name="1155"><span class="lineNum"> 1155 </span><span class="lineCov"> 786514 : static inline time_t info_get_time(snapraid_info info)</span></a>
<a name="1156"><span class="lineNum"> 1156 </span> : {</a>
<a name="1157"><span class="lineNum"> 1157 </span><span class="lineCov"> 798417 : return info &amp; ~INFO_MASK;</span></a>
<a name="1157"><span class="lineNum"> 1157 </span><span class="lineCov"> 786514 : return info &amp; ~INFO_MASK;</span></a>
<a name="1158"><span class="lineNum"> 1158 </span> : }</a>
<a name="1159"><span class="lineNum"> 1159 </span> : </a>
<a name="1160"><span class="lineNum"> 1160 </span> : /**</a>
<a name="1161"><span class="lineNum"> 1161 </span> : * Extract the error information.</a>
<a name="1162"><span class="lineNum"> 1162 </span> : * Report if the block address had some problem.</a>
<a name="1163"><span class="lineNum"> 1163 </span> : */</a>
<a name="1164"><span class="lineNum"> 1164 </span><span class="lineCov"> 247612 : static inline int info_get_bad(snapraid_info info)</span></a>
<a name="1164"><span class="lineNum"> 1164 </span><span class="lineCov"> 242727 : static inline int info_get_bad(snapraid_info info)</span></a>
<a name="1165"><span class="lineNum"> 1165 </span> : {</a>
<a name="1166"><span class="lineNum"> 1166 </span><span class="lineCov"> 247612 : return (info &amp; 0x1) != 0;</span></a>
<a name="1166"><span class="lineNum"> 1166 </span><span class="lineCov"> 242727 : return (info &amp; 0x1) != 0;</span></a>
<a name="1167"><span class="lineNum"> 1167 </span> : }</a>
<a name="1168"><span class="lineNum"> 1168 </span> : </a>
<a name="1169"><span class="lineNum"> 1169 </span> : /**</a>
<a name="1170"><span class="lineNum"> 1170 </span> : * Extract the rehash information.</a>
<a name="1171"><span class="lineNum"> 1171 </span> : * Report if the block address is using the old hash and needs to be rehashed.</a>
<a name="1172"><span class="lineNum"> 1172 </span> : */</a>
<a name="1173"><span class="lineNum"> 1173 </span><span class="lineCov"> 2048435 : static inline int info_get_rehash(snapraid_info info)</span></a>
<a name="1173"><span class="lineNum"> 1173 </span><span class="lineCov"> 2036469 : static inline int info_get_rehash(snapraid_info info)</span></a>
<a name="1174"><span class="lineNum"> 1174 </span> : {</a>
<a name="1175"><span class="lineNum"> 1175 </span><span class="lineCov"> 2048435 : return (info &amp; 0x2) != 0;</span></a>
<a name="1175"><span class="lineNum"> 1175 </span><span class="lineCov"> 2036469 : return (info &amp; 0x2) != 0;</span></a>
<a name="1176"><span class="lineNum"> 1176 </span> : }</a>
<a name="1177"><span class="lineNum"> 1177 </span> : </a>
<a name="1178"><span class="lineNum"> 1178 </span> : /**</a>
<a name="1179"><span class="lineNum"> 1179 </span> : * Extract the scrubbed information.</a>
<a name="1180"><span class="lineNum"> 1180 </span> : * Report if the block address was never scrubbed.</a>
<a name="1181"><span class="lineNum"> 1181 </span> : */</a>
<a name="1182"><span class="lineNum"> 1182 </span><span class="lineCov"> 23836 : static inline int info_get_justsynced(snapraid_info info)</span></a>
<a name="1182"><span class="lineNum"> 1182 </span><span class="lineCov"> 18930 : static inline int info_get_justsynced(snapraid_info info)</span></a>
<a name="1183"><span class="lineNum"> 1183 </span> : {</a>
<a name="1184"><span class="lineNum"> 1184 </span><span class="lineCov"> 23836 : return (info &amp; 0x4) != 0;</span></a>
<a name="1184"><span class="lineNum"> 1184 </span><span class="lineCov"> 18930 : return (info &amp; 0x4) != 0;</span></a>
<a name="1185"><span class="lineNum"> 1185 </span> : }</a>
<a name="1186"><span class="lineNum"> 1186 </span> : </a>
<a name="1187"><span class="lineNum"> 1187 </span> : /**</a>
<a name="1188"><span class="lineNum"> 1188 </span> : * Mark the block address as with error.</a>
<a name="1189"><span class="lineNum"> 1189 </span> : */</a>
<a name="1190"><span class="lineNum"> 1190 </span><span class="lineCov"> 1771 : static inline snapraid_info info_set_bad(snapraid_info info)</span></a>
<a name="1190"><span class="lineNum"> 1190 </span><span class="lineCov"> 1772 : static inline snapraid_info info_set_bad(snapraid_info info)</span></a>
<a name="1191"><span class="lineNum"> 1191 </span> : {</a>
<a name="1192"><span class="lineNum"> 1192 </span><span class="lineCov"> 1771 : return info | 0x1;</span></a>
<a name="1192"><span class="lineNum"> 1192 </span><span class="lineCov"> 1772 : return info | 0x1;</span></a>
<a name="1193"><span class="lineNum"> 1193 </span> : }</a>
<a name="1194"><span class="lineNum"> 1194 </span> : </a>
<a name="1195"><span class="lineNum"> 1195 </span> : /**</a>
@ -1266,27 +1266,27 @@
<a name="1204"><span class="lineNum"> 1204 </span> : * Set the info at the specified position.</a>
<a name="1205"><span class="lineNum"> 1205 </span> : * The position is allocated if not yet done.</a>
<a name="1206"><span class="lineNum"> 1206 </span> : */</a>
<a name="1207"><span class="lineNum"> 1207 </span><span class="lineCov"> 1757573 : static inline void info_set(tommy_arrayblkof* array, block_off_t pos, snapraid_info info)</span></a>
<a name="1207"><span class="lineNum"> 1207 </span><span class="lineCov"> 1757522 : static inline void info_set(tommy_arrayblkof* array, block_off_t pos, snapraid_info info)</span></a>
<a name="1208"><span class="lineNum"> 1208 </span> : {</a>
<a name="1209"><span class="lineNum"> 1209 </span><span class="lineCov"> 1757573 : tommy_arrayblkof_grow(array, pos + 1);</span></a>
<a name="1209"><span class="lineNum"> 1209 </span><span class="lineCov"> 1757522 : tommy_arrayblkof_grow(array, pos + 1);</span></a>
<a name="1210"><span class="lineNum"> 1210 </span> : </a>
<a name="1211"><span class="lineNum"> 1211 </span><span class="lineCov"> 1757573 : memcpy(tommy_arrayblkof_ref(array, pos), &amp;info, sizeof(snapraid_info));</span></a>
<a name="1212"><span class="lineNum"> 1212 </span><span class="lineCov"> 1757573 : }</span></a>
<a name="1211"><span class="lineNum"> 1211 </span><span class="lineCov"> 1757522 : memcpy(tommy_arrayblkof_ref(array, pos), &amp;info, sizeof(snapraid_info));</span></a>
<a name="1212"><span class="lineNum"> 1212 </span><span class="lineCov"> 1757522 : }</span></a>
<a name="1213"><span class="lineNum"> 1213 </span> : </a>
<a name="1214"><span class="lineNum"> 1214 </span> : /**</a>
<a name="1215"><span class="lineNum"> 1215 </span> : * Get the info at the specified position.</a>
<a name="1216"><span class="lineNum"> 1216 </span> : * For not allocated position, 0 is returned.</a>
<a name="1217"><span class="lineNum"> 1217 </span> : */</a>
<a name="1218"><span class="lineNum"> 1218 </span><span class="lineCov"> 3171512 : static inline snapraid_info info_get(tommy_arrayblkof* array, block_off_t pos)</span></a>
<a name="1218"><span class="lineNum"> 1218 </span><span class="lineCov"> 3152579 : static inline snapraid_info info_get(tommy_arrayblkof* array, block_off_t pos)</span></a>
<a name="1219"><span class="lineNum"> 1219 </span> : {</a>
<a name="1220"><span class="lineNum"> 1220 </span> : snapraid_info info;</a>
<a name="1221"><span class="lineNum"> 1221 </span> : </a>
<a name="1222"><span class="lineNum"> 1222 </span><span class="lineCov"> 3171512 : if (pos &gt;= tommy_arrayblkof_size(array))</span></a>
<a name="1222"><span class="lineNum"> 1222 </span><span class="lineCov"> 3152579 : if (pos &gt;= tommy_arrayblkof_size(array))</span></a>
<a name="1223"><span class="lineNum"> 1223 </span><span class="lineCov"> 270497 : return 0;</span></a>
<a name="1224"><span class="lineNum"> 1224 </span> : </a>
<a name="1225"><span class="lineNum"> 1225 </span><span class="lineCov"> 2901015 : memcpy(&amp;info, tommy_arrayblkof_ref(array, pos), sizeof(snapraid_info));</span></a>
<a name="1225"><span class="lineNum"> 1225 </span><span class="lineCov"> 2882082 : memcpy(&amp;info, tommy_arrayblkof_ref(array, pos), sizeof(snapraid_info));</span></a>
<a name="1226"><span class="lineNum"> 1226 </span> : </a>
<a name="1227"><span class="lineNum"> 1227 </span><span class="lineCov"> 2901015 : return info;</span></a>
<a name="1227"><span class="lineNum"> 1227 </span><span class="lineCov"> 2882082 : return info;</span></a>
<a name="1228"><span class="lineNum"> 1228 </span> : }</a>
<a name="1229"><span class="lineNum"> 1229 </span> : </a>
<a name="1230"><span class="lineNum"> 1230 </span> : /****************************************************************************/</a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@ -65,31 +65,31 @@
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#120">handle_truncate</a></td>
<td class="coverFnHi">3256</td>
<td class="coverFnHi">3213</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#359">handle_utime</a></td>
<td class="coverFnHi">121173</td>
<td class="coverFnHi">121204</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#309">handle_write</a></td>
<td class="coverFnHi">288429</td>
<td class="coverFnHi">288463</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#25">handle_create</a></td>
<td class="coverFnHi">771292</td>
<td class="coverFnHi">771350</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#142">handle_open</a></td>
<td class="coverFnHi">2176884</td>
<td class="coverFnHi">2176417</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#209">handle_close</a></td>
<td class="coverFnHi">4649470</td>
<td class="coverFnHi">4649540</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#237">handle_read</a></td>
<td class="coverFnHi">5598886</td>
<td class="coverFnHi">5598293</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@ -61,11 +61,11 @@
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#209">handle_close</a></td>
<td class="coverFnHi">4649470</td>
<td class="coverFnHi">4649540</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#25">handle_create</a></td>
<td class="coverFnHi">771292</td>
<td class="coverFnHi">771350</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#379">handle_mapping</a></td>
@ -73,23 +73,23 @@
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#142">handle_open</a></td>
<td class="coverFnHi">2176884</td>
<td class="coverFnHi">2176417</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#237">handle_read</a></td>
<td class="coverFnHi">5598886</td>
<td class="coverFnHi">5598293</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#120">handle_truncate</a></td>
<td class="coverFnHi">3256</td>
<td class="coverFnHi">3213</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#359">handle_utime</a></td>
<td class="coverFnHi">121173</td>
<td class="coverFnHi">121204</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#309">handle_write</a></td>
<td class="coverFnHi">288429</td>
<td class="coverFnHi">288463</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@ -86,64 +86,64 @@
<a name="24"><span class="lineNum"> 24 </span> : /****************************************************************************/</a>
<a name="25"><span class="lineNum"> 25 </span> : /* handle */</a>
<a name="26"><span class="lineNum"> 26 </span> : </a>
<a name="27"><span class="lineNum"> 27 </span><span class="lineCov"> 771292 : int handle_create(struct snapraid_handle* handle, struct snapraid_file* file, int mode)</span></a>
<a name="27"><span class="lineNum"> 27 </span><span class="lineCov"> 771350 : int handle_create(struct snapraid_handle* handle, struct snapraid_file* file, int mode)</span></a>
<a name="28"><span class="lineNum"> 28 </span> : {</a>
<a name="29"><span class="lineNum"> 29 </span> : int ret;</a>
<a name="30"><span class="lineNum"> 30 </span> : int flags;</a>
<a name="31"><span class="lineNum"> 31 </span> : </a>
<a name="32"><span class="lineNum"> 32 </span> : /* if it's the same file, and already opened, nothing to do */</a>
<a name="33"><span class="lineNum"> 33 </span><span class="lineCov"> 771292 : if (handle-&gt;file == file &amp;&amp; handle-&gt;f != -1) {</span></a>
<a name="33"><span class="lineNum"> 33 </span><span class="lineCov"> 771350 : if (handle-&gt;file == file &amp;&amp; handle-&gt;f != -1) {</span></a>
<a name="34"><span class="lineNum"> 34 </span><span class="lineNoCov"> 0 : return 0;</span></a>
<a name="35"><span class="lineNum"> 35 </span> : }</a>
<a name="36"><span class="lineNum"> 36 </span> : </a>
<a name="37"><span class="lineNum"> 37 </span><span class="lineCov"> 771292 : advise_init(&amp;handle-&gt;advise, mode);</span></a>
<a name="38"><span class="lineNum"> 38 </span><span class="lineCov"> 771292 : pathprint(handle-&gt;path, sizeof(handle-&gt;path), &quot;%s%s&quot;, handle-&gt;disk-&gt;dir, file-&gt;sub);</span></a>
<a name="37"><span class="lineNum"> 37 </span><span class="lineCov"> 771350 : advise_init(&amp;handle-&gt;advise, mode);</span></a>
<a name="38"><span class="lineNum"> 38 </span><span class="lineCov"> 771350 : pathprint(handle-&gt;path, sizeof(handle-&gt;path), &quot;%s%s&quot;, handle-&gt;disk-&gt;dir, file-&gt;sub);</span></a>
<a name="39"><span class="lineNum"> 39 </span> : </a>
<a name="40"><span class="lineNum"> 40 </span><span class="lineCov"> 771292 : ret = mkancestor(handle-&gt;path);</span></a>
<a name="41"><span class="lineNum"> 41 </span><span class="lineCov"> 771292 : if (ret != 0) {</span></a>
<a name="40"><span class="lineNum"> 40 </span><span class="lineCov"> 771350 : ret = mkancestor(handle-&gt;path);</span></a>
<a name="41"><span class="lineNum"> 41 </span><span class="lineCov"> 771350 : if (ret != 0) {</span></a>
<a name="42"><span class="lineNum"> 42 </span> : /* LCOV_EXCL_START */</a>
<a name="43"><span class="lineNum"> 43 </span> : return -1;</a>
<a name="44"><span class="lineNum"> 44 </span> : /* LCOV_EXCL_STOP */</a>
<a name="45"><span class="lineNum"> 45 </span> : }</a>
<a name="46"><span class="lineNum"> 46 </span> : </a>
<a name="47"><span class="lineNum"> 47 </span> : /* initial values, changed later if required */</a>
<a name="48"><span class="lineNum"> 48 </span><span class="lineCov"> 771292 : handle-&gt;created = 0;</span></a>
<a name="48"><span class="lineNum"> 48 </span><span class="lineCov"> 771350 : handle-&gt;created = 0;</span></a>
<a name="49"><span class="lineNum"> 49 </span> : </a>
<a name="50"><span class="lineNum"> 50 </span> : /* flags for opening */</a>
<a name="51"><span class="lineNum"> 51 </span> : /* O_BINARY: open as binary file (Windows only) */</a>
<a name="52"><span class="lineNum"> 52 </span> : /* O_NOFOLLOW: do not follow links to ensure to open the real file */</a>
<a name="53"><span class="lineNum"> 53 </span><span class="lineCov"> 771292 : flags = O_BINARY | O_NOFOLLOW | advise_flags(&amp;handle-&gt;advise);</span></a>
<a name="53"><span class="lineNum"> 53 </span><span class="lineCov"> 771350 : flags = O_BINARY | O_NOFOLLOW | advise_flags(&amp;handle-&gt;advise);</span></a>
<a name="54"><span class="lineNum"> 54 </span> : </a>
<a name="55"><span class="lineNum"> 55 </span> : /* open for read write */</a>
<a name="56"><span class="lineNum"> 56 </span><span class="lineCov"> 771292 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR);</span></a>
<a name="56"><span class="lineNum"> 56 </span><span class="lineCov"> 771350 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR);</span></a>
<a name="57"><span class="lineNum"> 57 </span> : </a>
<a name="58"><span class="lineNum"> 58 </span> : /* if failed for missing write permission */</a>
<a name="59"><span class="lineNum"> 59 </span><span class="lineCov"> 771292 : if (handle-&gt;f == -1 &amp;&amp; (errno == EACCES || errno == EROFS)) {</span></a>
<a name="59"><span class="lineNum"> 59 </span><span class="lineCov"> 771350 : if (handle-&gt;f == -1 &amp;&amp; (errno == EACCES || errno == EROFS)) {</span></a>
<a name="60"><span class="lineNum"> 60 </span> : /* open for read-only */</a>
<a name="61"><span class="lineNum"> 61 </span><span class="lineNoCov"> 0 : handle-&gt;f = open(handle-&gt;path, flags | O_RDONLY);</span></a>
<a name="62"><span class="lineNum"> 62 </span> : }</a>
<a name="63"><span class="lineNum"> 63 </span> : </a>
<a name="64"><span class="lineNum"> 64 </span> : /* if failed for missing file */</a>
<a name="65"><span class="lineNum"> 65 </span><span class="lineCov"> 771292 : if (handle-&gt;f == -1 &amp;&amp; errno == ENOENT) {</span></a>
<a name="65"><span class="lineNum"> 65 </span><span class="lineCov"> 771350 : if (handle-&gt;f == -1 &amp;&amp; errno == ENOENT) {</span></a>
<a name="66"><span class="lineNum"> 66 </span> : char path_from[PATH_MAX];</a>
<a name="67"><span class="lineNum"> 67 </span> : </a>
<a name="68"><span class="lineNum"> 68 </span> : /* check if exists a .unrecoverable copy, and rename to the real one */</a>
<a name="69"><span class="lineNum"> 69 </span><span class="lineCov"> 176374 : pathprint(path_from, sizeof(path_from), &quot;%s.unrecoverable&quot;, handle-&gt;path);</span></a>
<a name="69"><span class="lineNum"> 69 </span><span class="lineCov"> 176369 : pathprint(path_from, sizeof(path_from), &quot;%s.unrecoverable&quot;, handle-&gt;path);</span></a>
<a name="70"><span class="lineNum"> 70 </span> : </a>
<a name="71"><span class="lineNum"> 71 </span><span class="lineCov"> 176374 : if (rename(path_from, handle-&gt;path) == 0) {</span></a>
<a name="71"><span class="lineNum"> 71 </span><span class="lineCov"> 176369 : if (rename(path_from, handle-&gt;path) == 0) {</span></a>
<a name="72"><span class="lineNum"> 72 </span> : /* open for read write */</a>
<a name="73"><span class="lineNum"> 73 </span><span class="lineCov"> 63261 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR);</span></a>
<a name="73"><span class="lineNum"> 73 </span><span class="lineCov"> 63300 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR);</span></a>
<a name="74"><span class="lineNum"> 74 </span> : } else {</a>
<a name="75"><span class="lineNum"> 75 </span> : /* create it */</a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineCov"> 113113 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR | O_CREAT, 0600);</span></a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 113113 : if (handle-&gt;f != -1) {</span></a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineCov"> 113069 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR | O_CREAT, 0600);</span></a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 113069 : if (handle-&gt;f != -1) {</span></a>
<a name="78"><span class="lineNum"> 78 </span> : /* mark it as created if really done */</a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 113113 : handle-&gt;created = 1;</span></a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 113069 : handle-&gt;created = 1;</span></a>
<a name="80"><span class="lineNum"> 80 </span> : }</a>
<a name="81"><span class="lineNum"> 81 </span> : }</a>
<a name="82"><span class="lineNum"> 82 </span> : }</a>
<a name="83"><span class="lineNum"> 83 </span> : </a>
<a name="84"><span class="lineNum"> 84 </span><span class="lineCov"> 771292 : if (handle-&gt;f == -1) {</span></a>
<a name="84"><span class="lineNum"> 84 </span><span class="lineCov"> 771350 : if (handle-&gt;f == -1) {</span></a>
<a name="85"><span class="lineNum"> 85 </span> : /* LCOV_EXCL_START */</a>
<a name="86"><span class="lineNum"> 86 </span> : /* invalidate for error */</a>
<a name="87"><span class="lineNum"> 87 </span> : handle-&gt;file = 0;</a>
@ -156,11 +156,11 @@
<a name="94"><span class="lineNum"> 94 </span> : }</a>
<a name="95"><span class="lineNum"> 95 </span> : </a>
<a name="96"><span class="lineNum"> 96 </span> : /* just opened */</a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineCov"> 771292 : handle-&gt;file = file;</span></a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineCov"> 771350 : handle-&gt;file = file;</span></a>
<a name="98"><span class="lineNum"> 98 </span> : </a>
<a name="99"><span class="lineNum"> 99 </span> : /* get the stat info */</a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineCov"> 771292 : ret = fstat(handle-&gt;f, &amp;handle-&gt;st);</span></a>
<a name="101"><span class="lineNum"> 101 </span><span class="lineCov"> 771292 : if (ret != 0) {</span></a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineCov"> 771350 : ret = fstat(handle-&gt;f, &amp;handle-&gt;st);</span></a>
<a name="101"><span class="lineNum"> 101 </span><span class="lineCov"> 771350 : if (ret != 0) {</span></a>
<a name="102"><span class="lineNum"> 102 </span> : /* LCOV_EXCL_START */</a>
<a name="103"><span class="lineNum"> 103 </span> : log_fatal(errno, &quot;Error accessing file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));</a>
<a name="104"><span class="lineNum"> 104 </span> : return -1;</a>
@ -168,25 +168,25 @@
<a name="106"><span class="lineNum"> 106 </span> : }</a>
<a name="107"><span class="lineNum"> 107 </span> : </a>
<a name="108"><span class="lineNum"> 108 </span> : /* get the size of the existing data */</a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 771292 : handle-&gt;valid_size = handle-&gt;st.st_size;</span></a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 771350 : handle-&gt;valid_size = handle-&gt;st.st_size;</span></a>
<a name="110"><span class="lineNum"> 110 </span> : </a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 771292 : ret = advise_open(&amp;handle-&gt;advise, handle-&gt;f);</span></a>
<a name="112"><span class="lineNum"> 112 </span><span class="lineCov"> 771292 : if (ret != 0) {</span></a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 771350 : ret = advise_open(&amp;handle-&gt;advise, handle-&gt;f);</span></a>
<a name="112"><span class="lineNum"> 112 </span><span class="lineCov"> 771350 : if (ret != 0) {</span></a>
<a name="113"><span class="lineNum"> 113 </span> : /* LCOV_EXCL_START */</a>
<a name="114"><span class="lineNum"> 114 </span> : log_fatal(errno, &quot;Error advising file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));</a>
<a name="115"><span class="lineNum"> 115 </span> : return -1;</a>
<a name="116"><span class="lineNum"> 116 </span> : /* LCOV_EXCL_STOP */</a>
<a name="117"><span class="lineNum"> 117 </span> : }</a>
<a name="118"><span class="lineNum"> 118 </span> : </a>
<a name="119"><span class="lineNum"> 119 </span><span class="lineCov"> 771292 : return 0;</span></a>
<a name="119"><span class="lineNum"> 119 </span><span class="lineCov"> 771350 : return 0;</span></a>
<a name="120"><span class="lineNum"> 120 </span> : }</a>
<a name="121"><span class="lineNum"> 121 </span> : </a>
<a name="122"><span class="lineNum"> 122 </span><span class="lineCov"> 3256 : int handle_truncate(struct snapraid_handle* handle, struct snapraid_file* file)</span></a>
<a name="122"><span class="lineNum"> 122 </span><span class="lineCov"> 3213 : int handle_truncate(struct snapraid_handle* handle, struct snapraid_file* file)</span></a>
<a name="123"><span class="lineNum"> 123 </span> : {</a>
<a name="124"><span class="lineNum"> 124 </span> : int ret;</a>
<a name="125"><span class="lineNum"> 125 </span> : </a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineCov"> 3256 : ret = ftruncate(handle-&gt;f, file-&gt;size);</span></a>
<a name="127"><span class="lineNum"> 127 </span><span class="lineCov"> 3256 : if (ret != 0) {</span></a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineCov"> 3213 : ret = ftruncate(handle-&gt;f, file-&gt;size);</span></a>
<a name="127"><span class="lineNum"> 127 </span><span class="lineCov"> 3213 : if (ret != 0) {</span></a>
<a name="128"><span class="lineNum"> 128 </span> : /* LCOV_EXCL_START */</a>
<a name="129"><span class="lineNum"> 129 </span> : if (errno == EACCES) {</a>
<a name="130"><span class="lineNum"> 130 </span> : log_fatal(errno, &quot;Failed to truncate file '%s' for missing write permission.\n&quot;, handle-&gt;path);</a>
@ -198,58 +198,58 @@
<a name="136"><span class="lineNum"> 136 </span> : }</a>
<a name="137"><span class="lineNum"> 137 </span> : </a>
<a name="138"><span class="lineNum"> 138 </span> : /* adjust the size to the truncated size */</a>
<a name="139"><span class="lineNum"> 139 </span><span class="lineCov"> 3256 : handle-&gt;valid_size = file-&gt;size;</span></a>
<a name="139"><span class="lineNum"> 139 </span><span class="lineCov"> 3213 : handle-&gt;valid_size = file-&gt;size;</span></a>
<a name="140"><span class="lineNum"> 140 </span> : </a>
<a name="141"><span class="lineNum"> 141 </span><span class="lineCov"> 3256 : return 0;</span></a>
<a name="141"><span class="lineNum"> 141 </span><span class="lineCov"> 3213 : return 0;</span></a>
<a name="142"><span class="lineNum"> 142 </span> : }</a>
<a name="143"><span class="lineNum"> 143 </span> : </a>
<a name="144"><span class="lineNum"> 144 </span><span class="lineCov"> 2176884 : int handle_open(struct snapraid_handle* handle, struct snapraid_file* file, int mode, log_ptr* out, log_ptr* out_missing)</span></a>
<a name="144"><span class="lineNum"> 144 </span><span class="lineCov"> 2176417 : int handle_open(struct snapraid_handle* handle, struct snapraid_file* file, int mode, log_ptr* out, log_ptr* out_missing)</span></a>
<a name="145"><span class="lineNum"> 145 </span> : {</a>
<a name="146"><span class="lineNum"> 146 </span> : int ret;</a>
<a name="147"><span class="lineNum"> 147 </span> : int flags;</a>
<a name="148"><span class="lineNum"> 148 </span> : </a>
<a name="149"><span class="lineNum"> 149 </span><span class="lineCov"> 2176884 : if (!out_missing)</span></a>
<a name="150"><span class="lineNum"> 150 </span><span class="lineCov"> 1576375 : out_missing = out;</span></a>
<a name="149"><span class="lineNum"> 149 </span><span class="lineCov"> 2176417 : if (!out_missing)</span></a>
<a name="150"><span class="lineNum"> 150 </span><span class="lineCov"> 1576294 : out_missing = out;</span></a>
<a name="151"><span class="lineNum"> 151 </span> : </a>
<a name="152"><span class="lineNum"> 152 </span> : /* if already opened, nothing to do */</a>
<a name="153"><span class="lineNum"> 153 </span><span class="lineCov"> 2176884 : if (handle-&gt;file == file &amp;&amp; handle-&gt;file != 0 &amp;&amp; handle-&gt;f != -1) {</span></a>
<a name="154"><span class="lineNum"> 154 </span><span class="lineCov"> 464548 : return 0;</span></a>
<a name="153"><span class="lineNum"> 153 </span><span class="lineCov"> 2176417 : if (handle-&gt;file == file &amp;&amp; handle-&gt;file != 0 &amp;&amp; handle-&gt;f != -1) {</span></a>
<a name="154"><span class="lineNum"> 154 </span><span class="lineCov"> 464272 : return 0;</span></a>
<a name="155"><span class="lineNum"> 155 </span> : }</a>
<a name="156"><span class="lineNum"> 156 </span> : </a>
<a name="157"><span class="lineNum"> 157 </span><span class="lineCov"> 1712336 : advise_init(&amp;handle-&gt;advise, mode);</span></a>
<a name="158"><span class="lineNum"> 158 </span><span class="lineCov"> 1712336 : pathprint(handle-&gt;path, sizeof(handle-&gt;path), &quot;%s%s&quot;, handle-&gt;disk-&gt;dir, file-&gt;sub);</span></a>
<a name="157"><span class="lineNum"> 157 </span><span class="lineCov"> 1712145 : advise_init(&amp;handle-&gt;advise, mode);</span></a>
<a name="158"><span class="lineNum"> 158 </span><span class="lineCov"> 1712145 : pathprint(handle-&gt;path, sizeof(handle-&gt;path), &quot;%s%s&quot;, handle-&gt;disk-&gt;dir, file-&gt;sub);</span></a>
<a name="159"><span class="lineNum"> 159 </span> : </a>
<a name="160"><span class="lineNum"> 160 </span> : /* for sure not created */</a>
<a name="161"><span class="lineNum"> 161 </span><span class="lineCov"> 1712336 : handle-&gt;created = 0;</span></a>
<a name="161"><span class="lineNum"> 161 </span><span class="lineCov"> 1712145 : handle-&gt;created = 0;</span></a>
<a name="162"><span class="lineNum"> 162 </span> : </a>
<a name="163"><span class="lineNum"> 163 </span> : /* flags for opening */</a>
<a name="164"><span class="lineNum"> 164 </span> : /* O_BINARY: open as binary file (Windows only) */</a>
<a name="165"><span class="lineNum"> 165 </span> : /* O_NOFOLLOW: do not follow links to ensure to open the real file */</a>
<a name="166"><span class="lineNum"> 166 </span><span class="lineCov"> 1712336 : flags = O_BINARY | O_NOFOLLOW | advise_flags(&amp;handle-&gt;advise);</span></a>
<a name="166"><span class="lineNum"> 166 </span><span class="lineCov"> 1712145 : flags = O_BINARY | O_NOFOLLOW | advise_flags(&amp;handle-&gt;advise);</span></a>
<a name="167"><span class="lineNum"> 167 </span> : </a>
<a name="168"><span class="lineNum"> 168 </span> : /* open for read */</a>
<a name="169"><span class="lineNum"> 169 </span><span class="lineCov"> 1712336 : handle-&gt;f = open_noatime(handle-&gt;path, flags | O_RDONLY);</span></a>
<a name="170"><span class="lineNum"> 170 </span><span class="lineCov"> 1712336 : if (handle-&gt;f == -1) {</span></a>
<a name="169"><span class="lineNum"> 169 </span><span class="lineCov"> 1712145 : handle-&gt;f = open_noatime(handle-&gt;path, flags | O_RDONLY);</span></a>
<a name="170"><span class="lineNum"> 170 </span><span class="lineCov"> 1712145 : if (handle-&gt;f == -1) {</span></a>
<a name="171"><span class="lineNum"> 171 </span> : /* invalidate for error */</a>
<a name="172"><span class="lineNum"> 172 </span><span class="lineCov"> 78731 : handle-&gt;file = 0;</span></a>
<a name="173"><span class="lineNum"> 173 </span><span class="lineCov"> 78731 : handle-&gt;f = -1;</span></a>
<a name="174"><span class="lineNum"> 174 </span><span class="lineCov"> 78731 : handle-&gt;valid_size = 0;</span></a>
<a name="172"><span class="lineNum"> 172 </span><span class="lineCov"> 78696 : handle-&gt;file = 0;</span></a>
<a name="173"><span class="lineNum"> 173 </span><span class="lineCov"> 78696 : handle-&gt;f = -1;</span></a>
<a name="174"><span class="lineNum"> 174 </span><span class="lineCov"> 78696 : handle-&gt;valid_size = 0;</span></a>
<a name="175"><span class="lineNum"> 175 </span> : </a>
<a name="176"><span class="lineNum"> 176 </span><span class="lineCov"> 78731 : if (errno == ENOENT)</span></a>
<a name="177"><span class="lineNum"> 177 </span><span class="lineCov"> 78719 : out_missing(errno, &quot;Missing file '%s'.\n&quot;, handle-&gt;path);</span></a>
<a name="176"><span class="lineNum"> 176 </span><span class="lineCov"> 78696 : if (errno == ENOENT)</span></a>
<a name="177"><span class="lineNum"> 177 </span><span class="lineCov"> 78684 : out_missing(errno, &quot;Missing file '%s'.\n&quot;, handle-&gt;path);</span></a>
<a name="178"><span class="lineNum"> 178 </span><span class="lineCov"> 12 : else if (errno == EACCES)</span></a>
<a name="179"><span class="lineNum"> 179 </span><span class="lineCov"> 12 : out(errno, &quot;Permission denied for file '%s'.\n&quot;, handle-&gt;path);</span></a>
<a name="180"><span class="lineNum"> 180 </span> : else</a>
<a name="181"><span class="lineNum"> 181 </span><span class="lineNoCov"> 0 : out(errno, &quot;Error opening file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));</span></a>
<a name="182"><span class="lineNum"> 182 </span><span class="lineCov"> 78731 : return -1;</span></a>
<a name="182"><span class="lineNum"> 182 </span><span class="lineCov"> 78696 : return -1;</span></a>
<a name="183"><span class="lineNum"> 183 </span> : }</a>
<a name="184"><span class="lineNum"> 184 </span> : </a>
<a name="185"><span class="lineNum"> 185 </span> : /* just opened */</a>
<a name="186"><span class="lineNum"> 186 </span><span class="lineCov"> 1633605 : handle-&gt;file = file;</span></a>
<a name="186"><span class="lineNum"> 186 </span><span class="lineCov"> 1633449 : handle-&gt;file = file;</span></a>
<a name="187"><span class="lineNum"> 187 </span> : </a>
<a name="188"><span class="lineNum"> 188 </span> : /* get the stat info */</a>
<a name="189"><span class="lineNum"> 189 </span><span class="lineCov"> 1633605 : ret = fstat(handle-&gt;f, &amp;handle-&gt;st);</span></a>
<a name="190"><span class="lineNum"> 190 </span><span class="lineCov"> 1633605 : if (ret != 0) {</span></a>
<a name="189"><span class="lineNum"> 189 </span><span class="lineCov"> 1633449 : ret = fstat(handle-&gt;f, &amp;handle-&gt;st);</span></a>
<a name="190"><span class="lineNum"> 190 </span><span class="lineCov"> 1633449 : if (ret != 0) {</span></a>
<a name="191"><span class="lineNum"> 191 </span> : /* LCOV_EXCL_START */</a>
<a name="192"><span class="lineNum"> 192 </span> : out(errno, &quot;Error accessing file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));</a>
<a name="193"><span class="lineNum"> 193 </span> : return -1;</a>
@ -257,27 +257,27 @@
<a name="195"><span class="lineNum"> 195 </span> : }</a>
<a name="196"><span class="lineNum"> 196 </span> : </a>
<a name="197"><span class="lineNum"> 197 </span> : /* get the size of the existing data */</a>
<a name="198"><span class="lineNum"> 198 </span><span class="lineCov"> 1633605 : handle-&gt;valid_size = handle-&gt;st.st_size;</span></a>
<a name="198"><span class="lineNum"> 198 </span><span class="lineCov"> 1633449 : handle-&gt;valid_size = handle-&gt;st.st_size;</span></a>
<a name="199"><span class="lineNum"> 199 </span> : </a>
<a name="200"><span class="lineNum"> 200 </span><span class="lineCov"> 1633605 : ret = advise_open(&amp;handle-&gt;advise, handle-&gt;f);</span></a>
<a name="201"><span class="lineNum"> 201 </span><span class="lineCov"> 1633605 : if (ret != 0) {</span></a>
<a name="200"><span class="lineNum"> 200 </span><span class="lineCov"> 1633449 : ret = advise_open(&amp;handle-&gt;advise, handle-&gt;f);</span></a>
<a name="201"><span class="lineNum"> 201 </span><span class="lineCov"> 1633449 : if (ret != 0) {</span></a>
<a name="202"><span class="lineNum"> 202 </span> : /* LCOV_EXCL_START */</a>
<a name="203"><span class="lineNum"> 203 </span> : out(errno, &quot;Error advising file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));</a>
<a name="204"><span class="lineNum"> 204 </span> : return -1;</a>
<a name="205"><span class="lineNum"> 205 </span> : /* LCOV_EXCL_STOP */</a>
<a name="206"><span class="lineNum"> 206 </span> : }</a>
<a name="207"><span class="lineNum"> 207 </span> : </a>
<a name="208"><span class="lineNum"> 208 </span><span class="lineCov"> 1633605 : return 0;</span></a>
<a name="208"><span class="lineNum"> 208 </span><span class="lineCov"> 1633449 : return 0;</span></a>
<a name="209"><span class="lineNum"> 209 </span> : }</a>
<a name="210"><span class="lineNum"> 210 </span> : </a>
<a name="211"><span class="lineNum"> 211 </span><span class="lineCov"> 4649470 : int handle_close(struct snapraid_handle* handle)</span></a>
<a name="211"><span class="lineNum"> 211 </span><span class="lineCov"> 4649540 : int handle_close(struct snapraid_handle* handle)</span></a>
<a name="212"><span class="lineNum"> 212 </span> : {</a>
<a name="213"><span class="lineNum"> 213 </span> : int ret;</a>
<a name="214"><span class="lineNum"> 214 </span> : </a>
<a name="215"><span class="lineNum"> 215 </span> : /* close if open */</a>
<a name="216"><span class="lineNum"> 216 </span><span class="lineCov"> 4649470 : if (handle-&gt;f != -1) {</span></a>
<a name="217"><span class="lineNum"> 217 </span><span class="lineCov"> 2404897 : ret = close(handle-&gt;f);</span></a>
<a name="218"><span class="lineNum"> 218 </span><span class="lineCov"> 2404897 : if (ret != 0) {</span></a>
<a name="216"><span class="lineNum"> 216 </span><span class="lineCov"> 4649540 : if (handle-&gt;f != -1) {</span></a>
<a name="217"><span class="lineNum"> 217 </span><span class="lineCov"> 2404799 : ret = close(handle-&gt;f);</span></a>
<a name="218"><span class="lineNum"> 218 </span><span class="lineCov"> 2404799 : if (ret != 0) {</span></a>
<a name="219"><span class="lineNum"> 219 </span> : /* LCOV_EXCL_START */</a>
<a name="220"><span class="lineNum"> 220 </span> : log_fatal(errno, &quot;Error closing file '%s'. %s.\n&quot;, handle-&gt;file-&gt;sub, strerror(errno));</a>
<a name="221"><span class="lineNum"> 221 </span> : </a>
@ -291,14 +291,14 @@
<a name="229"><span class="lineNum"> 229 </span> : }</a>
<a name="230"><span class="lineNum"> 230 </span> : </a>
<a name="231"><span class="lineNum"> 231 </span> : /* reset the descriptor */</a>
<a name="232"><span class="lineNum"> 232 </span><span class="lineCov"> 4649470 : handle-&gt;file = 0;</span></a>
<a name="233"><span class="lineNum"> 233 </span><span class="lineCov"> 4649470 : handle-&gt;f = -1;</span></a>
<a name="234"><span class="lineNum"> 234 </span><span class="lineCov"> 4649470 : handle-&gt;valid_size = 0;</span></a>
<a name="232"><span class="lineNum"> 232 </span><span class="lineCov"> 4649540 : handle-&gt;file = 0;</span></a>
<a name="233"><span class="lineNum"> 233 </span><span class="lineCov"> 4649540 : handle-&gt;f = -1;</span></a>
<a name="234"><span class="lineNum"> 234 </span><span class="lineCov"> 4649540 : handle-&gt;valid_size = 0;</span></a>
<a name="235"><span class="lineNum"> 235 </span> : </a>
<a name="236"><span class="lineNum"> 236 </span><span class="lineCov"> 4649470 : return 0;</span></a>
<a name="236"><span class="lineNum"> 236 </span><span class="lineCov"> 4649540 : return 0;</span></a>
<a name="237"><span class="lineNum"> 237 </span> : }</a>
<a name="238"><span class="lineNum"> 238 </span> : </a>
<a name="239"><span class="lineNum"> 239 </span><span class="lineCov"> 5598886 : int handle_read(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size, log_ptr* out, log_ptr* out_missing)</span></a>
<a name="239"><span class="lineNum"> 239 </span><span class="lineCov"> 5598293 : int handle_read(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size, log_ptr* out, log_ptr* out_missing)</span></a>
<a name="240"><span class="lineNum"> 240 </span> : {</a>
<a name="241"><span class="lineNum"> 241 </span> : ssize_t read_ret;</a>
<a name="242"><span class="lineNum"> 242 </span> : data_off_t offset;</a>
@ -306,43 +306,43 @@
<a name="244"><span class="lineNum"> 244 </span> : unsigned count;</a>
<a name="245"><span class="lineNum"> 245 </span> : int ret;</a>
<a name="246"><span class="lineNum"> 246 </span> : </a>
<a name="247"><span class="lineNum"> 247 </span><span class="lineCov"> 5598886 : offset = file_pos * (data_off_t)block_size;</span></a>
<a name="247"><span class="lineNum"> 247 </span><span class="lineCov"> 5598293 : offset = file_pos * (data_off_t)block_size;</span></a>
<a name="248"><span class="lineNum"> 248 </span> : </a>
<a name="249"><span class="lineNum"> 249 </span><span class="lineCov"> 5598886 : if (!out_missing)</span></a>
<a name="250"><span class="lineNum"> 250 </span><span class="lineCov"> 5592557 : out_missing = out;</span></a>
<a name="249"><span class="lineNum"> 249 </span><span class="lineCov"> 5598293 : if (!out_missing)</span></a>
<a name="250"><span class="lineNum"> 250 </span><span class="lineCov"> 5591964 : out_missing = out;</span></a>
<a name="251"><span class="lineNum"> 251 </span> : </a>
<a name="252"><span class="lineNum"> 252 </span> : /* check if we are going to read only not initialized data */</a>
<a name="253"><span class="lineNum"> 253 </span><span class="lineCov"> 5598886 : if (offset &gt;= handle-&gt;valid_size) {</span></a>
<a name="253"><span class="lineNum"> 253 </span><span class="lineCov"> 5598293 : if (offset &gt;= handle-&gt;valid_size) {</span></a>
<a name="254"><span class="lineNum"> 254 </span> : /* if the file is missing, it's at 0 size, or it's rebuilt while reading */</a>
<a name="255"><span class="lineNum"> 255 </span><span class="lineCov"> 176886 : if (offset == handle-&gt;valid_size || handle-&gt;valid_size == 0) {</span></a>
<a name="256"><span class="lineNum"> 256 </span><span class="lineCov"> 175792 : errno = ENOENT;</span></a>
<a name="257"><span class="lineNum"> 257 </span><span class="lineCov"> 175792 : if (offset == 0) {</span></a>
<a name="258"><span class="lineNum"> 258 </span><span class="lineCov"> 174839 : out_missing(errno, &quot;Missing file '%s'.\n&quot;, handle-&gt;path);</span></a>
<a name="255"><span class="lineNum"> 255 </span><span class="lineCov"> 176692 : if (offset == handle-&gt;valid_size || handle-&gt;valid_size == 0) {</span></a>
<a name="256"><span class="lineNum"> 256 </span><span class="lineCov"> 175708 : errno = ENOENT;</span></a>
<a name="257"><span class="lineNum"> 257 </span><span class="lineCov"> 175708 : if (offset == 0) {</span></a>
<a name="258"><span class="lineNum"> 258 </span><span class="lineCov"> 174804 : out_missing(errno, &quot;Missing file '%s'.\n&quot;, handle-&gt;path);</span></a>
<a name="259"><span class="lineNum"> 259 </span> : } else {</a>
<a name="260"><span class="lineNum"> 260 </span><span class="lineCov"> 953 : out_missing(errno, &quot;Missing data in file '%s' at offset %&quot; PRIu64 &quot;.\n&quot;, handle-&gt;path, offset);</span></a>
<a name="260"><span class="lineNum"> 260 </span><span class="lineCov"> 904 : out_missing(errno, &quot;Missing data in file '%s' at offset %&quot; PRIu64 &quot;.\n&quot;, handle-&gt;path, offset);</span></a>
<a name="261"><span class="lineNum"> 261 </span> : }</a>
<a name="262"><span class="lineNum"> 262 </span> : } else {</a>
<a name="263"><span class="lineNum"> 263 </span><span class="lineCov"> 1094 : errno = ENXIO;</span></a>
<a name="264"><span class="lineNum"> 264 </span><span class="lineCov"> 1094 : out(errno, &quot;Reading over the end from file '%s' at offset %&quot; PRIu64 &quot;.\n&quot;, handle-&gt;path, offset);</span></a>
<a name="263"><span class="lineNum"> 263 </span><span class="lineCov"> 984 : errno = ENXIO;</span></a>
<a name="264"><span class="lineNum"> 264 </span><span class="lineCov"> 984 : out(errno, &quot;Reading over the end from file '%s' at offset %&quot; PRIu64 &quot;.\n&quot;, handle-&gt;path, offset);</span></a>
<a name="265"><span class="lineNum"> 265 </span> : }</a>
<a name="266"><span class="lineNum"> 266 </span><span class="lineCov"> 176886 : return -1;</span></a>
<a name="266"><span class="lineNum"> 266 </span><span class="lineCov"> 176692 : return -1;</span></a>
<a name="267"><span class="lineNum"> 267 </span> : }</a>
<a name="268"><span class="lineNum"> 268 </span> : </a>
<a name="269"><span class="lineNum"> 269 </span><span class="lineCov"> 5422000 : read_size = file_block_size(handle-&gt;file, file_pos, block_size);</span></a>
<a name="269"><span class="lineNum"> 269 </span><span class="lineCov"> 5421601 : read_size = file_block_size(handle-&gt;file, file_pos, block_size);</span></a>
<a name="270"><span class="lineNum"> 270 </span> : </a>
<a name="271"><span class="lineNum"> 271 </span><span class="lineCov"> 5422000 : count = 0;</span></a>
<a name="272"><span class="lineNum"> 272 </span><span class="lineCov"> 5422000 : errno = 0;</span></a>
<a name="271"><span class="lineNum"> 271 </span><span class="lineCov"> 5421601 : count = 0;</span></a>
<a name="272"><span class="lineNum"> 272 </span><span class="lineCov"> 5421601 : errno = 0;</span></a>
<a name="273"><span class="lineNum"> 273 </span> : do {</a>
<a name="274"><span class="lineNum"> 274 </span><span class="lineCov"> 5430811 : bw_limit(handle-&gt;bw, block_size - count);</span></a>
<a name="274"><span class="lineNum"> 274 </span><span class="lineCov"> 5430426 : bw_limit(handle-&gt;bw, block_size - count);</span></a>
<a name="275"><span class="lineNum"> 275 </span> : </a>
<a name="276"><span class="lineNum"> 276 </span><span class="lineCov"> 5430811 : read_ret = pread(handle-&gt;f, block_buffer + count, block_size - count, offset + count);</span></a>
<a name="277"><span class="lineNum"> 277 </span><span class="lineCov"> 5430811 : if (read_ret == -1) {</span></a>
<a name="276"><span class="lineNum"> 276 </span><span class="lineCov"> 5430426 : read_ret = pread(handle-&gt;f, block_buffer + count, block_size - count, offset + count);</span></a>
<a name="277"><span class="lineNum"> 277 </span><span class="lineCov"> 5430426 : if (read_ret == -1) {</span></a>
<a name="278"><span class="lineNum"> 278 </span> : /* LCOV_EXCL_START */</a>
<a name="279"><span class="lineNum"> 279 </span> : out(errno, &quot;Error reading file '%s' at offset %&quot; PRIu64 &quot; for size %u. %s.\n&quot;, handle-&gt;path, offset + count, block_size - count, strerror(errno));</a>
<a name="280"><span class="lineNum"> 280 </span> : return -1;</a>
<a name="281"><span class="lineNum"> 281 </span> : /* LCOV_EXCL_STOP */</a>
<a name="282"><span class="lineNum"> 282 </span> : }</a>
<a name="283"><span class="lineNum"> 283 </span><span class="lineCov"> 5430811 : if (read_ret == 0) {</span></a>
<a name="283"><span class="lineNum"> 283 </span><span class="lineCov"> 5430426 : if (read_ret == 0) {</span></a>
<a name="284"><span class="lineNum"> 284 </span> : /* LCOV_EXCL_START */</a>
<a name="285"><span class="lineNum"> 285 </span> : if (errno == 0)</a>
<a name="286"><span class="lineNum"> 286 </span> : errno = ENXIO;</a>
@ -351,26 +351,26 @@
<a name="289"><span class="lineNum"> 289 </span> : /* LCOV_EXCL_STOP */</a>
<a name="290"><span class="lineNum"> 290 </span> : }</a>
<a name="291"><span class="lineNum"> 291 </span> : </a>
<a name="292"><span class="lineNum"> 292 </span><span class="lineCov"> 5422000 : count += read_ret;</span></a>
<a name="293"><span class="lineNum"> 293 </span><span class="lineCov"> 5422000 : } while (count &lt; read_size);</span></a>
<a name="292"><span class="lineNum"> 292 </span><span class="lineCov"> 5421601 : count += read_ret;</span></a>
<a name="293"><span class="lineNum"> 293 </span><span class="lineCov"> 5421601 : } while (count &lt; read_size);</span></a>
<a name="294"><span class="lineNum"> 294 </span> : </a>
<a name="295"><span class="lineNum"> 295 </span> : /* pad with 0 */</a>
<a name="296"><span class="lineNum"> 296 </span><span class="lineCov"> 5413189 : if (read_size &lt; block_size) {</span></a>
<a name="297"><span class="lineNum"> 297 </span><span class="lineCov"> 2187257 : memset(block_buffer + read_size, 0, block_size - read_size);</span></a>
<a name="296"><span class="lineNum"> 296 </span><span class="lineCov"> 5412776 : if (read_size &lt; block_size) {</span></a>
<a name="297"><span class="lineNum"> 297 </span><span class="lineCov"> 2187169 : memset(block_buffer + read_size, 0, block_size - read_size);</span></a>
<a name="298"><span class="lineNum"> 298 </span> : }</a>
<a name="299"><span class="lineNum"> 299 </span> : </a>
<a name="300"><span class="lineNum"> 300 </span><span class="lineCov"> 5413189 : ret = advise_read(&amp;handle-&gt;advise, handle-&gt;f, offset, block_size);</span></a>
<a name="301"><span class="lineNum"> 301 </span><span class="lineCov"> 5413189 : if (ret != 0) {</span></a>
<a name="300"><span class="lineNum"> 300 </span><span class="lineCov"> 5412776 : ret = advise_read(&amp;handle-&gt;advise, handle-&gt;f, offset, block_size);</span></a>
<a name="301"><span class="lineNum"> 301 </span><span class="lineCov"> 5412776 : if (ret != 0) {</span></a>
<a name="302"><span class="lineNum"> 302 </span> : /* LCOV_EXCL_START */</a>
<a name="303"><span class="lineNum"> 303 </span> : out(errno, &quot;Error advising file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));</a>
<a name="304"><span class="lineNum"> 304 </span> : return -1;</a>
<a name="305"><span class="lineNum"> 305 </span> : /* LCOV_EXCL_STOP */</a>
<a name="306"><span class="lineNum"> 306 </span> : }</a>
<a name="307"><span class="lineNum"> 307 </span> : </a>
<a name="308"><span class="lineNum"> 308 </span><span class="lineCov"> 5413189 : return read_size;</span></a>
<a name="308"><span class="lineNum"> 308 </span><span class="lineCov"> 5412776 : return read_size;</span></a>
<a name="309"><span class="lineNum"> 309 </span> : }</a>
<a name="310"><span class="lineNum"> 310 </span> : </a>
<a name="311"><span class="lineNum"> 311 </span><span class="lineCov"> 288429 : int handle_write(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size)</span></a>
<a name="311"><span class="lineNum"> 311 </span><span class="lineCov"> 288463 : int handle_write(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size)</span></a>
<a name="312"><span class="lineNum"> 312 </span> : {</a>
<a name="313"><span class="lineNum"> 313 </span> : ssize_t write_ret;</a>
<a name="314"><span class="lineNum"> 314 </span> : data_off_t offset;</a>
@ -378,22 +378,22 @@
<a name="316"><span class="lineNum"> 316 </span> : unsigned count;</a>
<a name="317"><span class="lineNum"> 317 </span> : int ret;</a>
<a name="318"><span class="lineNum"> 318 </span> : </a>
<a name="319"><span class="lineNum"> 319 </span><span class="lineCov"> 288429 : offset = file_pos * (data_off_t)block_size;</span></a>
<a name="319"><span class="lineNum"> 319 </span><span class="lineCov"> 288463 : offset = file_pos * (data_off_t)block_size;</span></a>
<a name="320"><span class="lineNum"> 320 </span> : </a>
<a name="321"><span class="lineNum"> 321 </span><span class="lineCov"> 288429 : write_size = file_block_size(handle-&gt;file, file_pos, block_size);</span></a>
<a name="321"><span class="lineNum"> 321 </span><span class="lineCov"> 288463 : write_size = file_block_size(handle-&gt;file, file_pos, block_size);</span></a>
<a name="322"><span class="lineNum"> 322 </span> : </a>
<a name="323"><span class="lineNum"> 323 </span><span class="lineCov"> 288429 : count = 0;</span></a>
<a name="323"><span class="lineNum"> 323 </span><span class="lineCov"> 288463 : count = 0;</span></a>
<a name="324"><span class="lineNum"> 324 </span> : do {</a>
<a name="325"><span class="lineNum"> 325 </span><span class="lineCov"> 288429 : bw_limit(handle-&gt;bw, write_size - count);</span></a>
<a name="325"><span class="lineNum"> 325 </span><span class="lineCov"> 288463 : bw_limit(handle-&gt;bw, write_size - count);</span></a>
<a name="326"><span class="lineNum"> 326 </span> : </a>
<a name="327"><span class="lineNum"> 327 </span><span class="lineCov"> 288429 : write_ret = pwrite(handle-&gt;f, block_buffer + count, write_size - count, offset + count);</span></a>
<a name="328"><span class="lineNum"> 328 </span><span class="lineCov"> 288429 : if (write_ret == -1) {</span></a>
<a name="327"><span class="lineNum"> 327 </span><span class="lineCov"> 288463 : write_ret = pwrite(handle-&gt;f, block_buffer + count, write_size - count, offset + count);</span></a>
<a name="328"><span class="lineNum"> 328 </span><span class="lineCov"> 288463 : if (write_ret == -1) {</span></a>
<a name="329"><span class="lineNum"> 329 </span> : /* LCOV_EXCL_START */</a>
<a name="330"><span class="lineNum"> 330 </span> : log_fatal(errno, &quot;Error writing file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));</a>
<a name="331"><span class="lineNum"> 331 </span> : return -1;</a>
<a name="332"><span class="lineNum"> 332 </span> : /* LCOV_EXCL_STOP */</a>
<a name="333"><span class="lineNum"> 333 </span> : }</a>
<a name="334"><span class="lineNum"> 334 </span><span class="lineCov"> 288429 : if (write_ret == 0) {</span></a>
<a name="334"><span class="lineNum"> 334 </span><span class="lineCov"> 288463 : if (write_ret == 0) {</span></a>
<a name="335"><span class="lineNum"> 335 </span> : /* LCOV_EXCL_START */</a>
<a name="336"><span class="lineNum"> 336 </span> : errno = ENXIO;</a>
<a name="337"><span class="lineNum"> 337 </span> : log_fatal(errno, &quot;Unexpected 0 write to file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));</a>
@ -401,43 +401,43 @@
<a name="339"><span class="lineNum"> 339 </span> : /* LCOV_EXCL_STOP */</a>
<a name="340"><span class="lineNum"> 340 </span> : }</a>
<a name="341"><span class="lineNum"> 341 </span> : </a>
<a name="342"><span class="lineNum"> 342 </span><span class="lineCov"> 288429 : count += write_ret;</span></a>
<a name="343"><span class="lineNum"> 343 </span><span class="lineCov"> 288429 : } while (count &lt; write_size);</span></a>
<a name="342"><span class="lineNum"> 342 </span><span class="lineCov"> 288463 : count += write_ret;</span></a>
<a name="343"><span class="lineNum"> 343 </span><span class="lineCov"> 288463 : } while (count &lt; write_size);</span></a>
<a name="344"><span class="lineNum"> 344 </span> : </a>
<a name="345"><span class="lineNum"> 345 </span> : /* adjust the size of the valid data */</a>
<a name="346"><span class="lineNum"> 346 </span><span class="lineCov"> 288429 : if (handle-&gt;valid_size &lt; offset + write_size) {</span></a>
<a name="347"><span class="lineNum"> 347 </span><span class="lineCov"> 282456 : handle-&gt;valid_size = offset + write_size;</span></a>
<a name="346"><span class="lineNum"> 346 </span><span class="lineCov"> 288463 : if (handle-&gt;valid_size &lt; offset + write_size) {</span></a>
<a name="347"><span class="lineNum"> 347 </span><span class="lineCov"> 282376 : handle-&gt;valid_size = offset + write_size;</span></a>
<a name="348"><span class="lineNum"> 348 </span> : }</a>
<a name="349"><span class="lineNum"> 349 </span> : </a>
<a name="350"><span class="lineNum"> 350 </span><span class="lineCov"> 288429 : ret = advise_write(&amp;handle-&gt;advise, handle-&gt;f, offset, block_size);</span></a>
<a name="351"><span class="lineNum"> 351 </span><span class="lineCov"> 288429 : if (ret != 0) {</span></a>
<a name="350"><span class="lineNum"> 350 </span><span class="lineCov"> 288463 : ret = advise_write(&amp;handle-&gt;advise, handle-&gt;f, offset, block_size);</span></a>
<a name="351"><span class="lineNum"> 351 </span><span class="lineCov"> 288463 : if (ret != 0) {</span></a>
<a name="352"><span class="lineNum"> 352 </span> : /* LCOV_EXCL_START */</a>
<a name="353"><span class="lineNum"> 353 </span> : log_fatal(errno, &quot;Error advising file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));</a>
<a name="354"><span class="lineNum"> 354 </span> : return -1;</a>
<a name="355"><span class="lineNum"> 355 </span> : /* LCOV_EXCL_STOP */</a>
<a name="356"><span class="lineNum"> 356 </span> : }</a>
<a name="357"><span class="lineNum"> 357 </span> : </a>
<a name="358"><span class="lineNum"> 358 </span><span class="lineCov"> 288429 : return 0;</span></a>
<a name="358"><span class="lineNum"> 358 </span><span class="lineCov"> 288463 : return 0;</span></a>
<a name="359"><span class="lineNum"> 359 </span> : }</a>
<a name="360"><span class="lineNum"> 360 </span> : </a>
<a name="361"><span class="lineNum"> 361 </span><span class="lineCov"> 121173 : int handle_utime(struct snapraid_handle* handle)</span></a>
<a name="361"><span class="lineNum"> 361 </span><span class="lineCov"> 121204 : int handle_utime(struct snapraid_handle* handle)</span></a>
<a name="362"><span class="lineNum"> 362 </span> : {</a>
<a name="363"><span class="lineNum"> 363 </span> : int ret;</a>
<a name="364"><span class="lineNum"> 364 </span> : </a>
<a name="365"><span class="lineNum"> 365 </span> : /* do nothing if not opened */</a>
<a name="366"><span class="lineNum"> 366 </span><span class="lineCov"> 121173 : if (handle-&gt;f == -1)</span></a>
<a name="366"><span class="lineNum"> 366 </span><span class="lineCov"> 121204 : if (handle-&gt;f == -1)</span></a>
<a name="367"><span class="lineNum"> 367 </span><span class="lineNoCov"> 0 : return 0;</span></a>
<a name="368"><span class="lineNum"> 368 </span> : </a>
<a name="369"><span class="lineNum"> 369 </span><span class="lineCov"> 121173 : ret = fmtime(handle-&gt;f, handle-&gt;file-&gt;mtime_sec, handle-&gt;file-&gt;mtime_nsec);</span></a>
<a name="369"><span class="lineNum"> 369 </span><span class="lineCov"> 121204 : ret = fmtime(handle-&gt;f, handle-&gt;file-&gt;mtime_sec, handle-&gt;file-&gt;mtime_nsec);</span></a>
<a name="370"><span class="lineNum"> 370 </span> : </a>
<a name="371"><span class="lineNum"> 371 </span><span class="lineCov"> 121173 : if (ret != 0) {</span></a>
<a name="371"><span class="lineNum"> 371 </span><span class="lineCov"> 121204 : if (ret != 0) {</span></a>
<a name="372"><span class="lineNum"> 372 </span> : /* LCOV_EXCL_START */</a>
<a name="373"><span class="lineNum"> 373 </span> : log_fatal(errno, &quot;Error timing file '%s'. %s.\n&quot;, handle-&gt;file-&gt;sub, strerror(errno));</a>
<a name="374"><span class="lineNum"> 374 </span> : return -1;</a>
<a name="375"><span class="lineNum"> 375 </span> : /* LCOV_EXCL_STOP */</a>
<a name="376"><span class="lineNum"> 376 </span> : }</a>
<a name="377"><span class="lineNum"> 377 </span> : </a>
<a name="378"><span class="lineNum"> 378 </span><span class="lineCov"> 121173 : return 0;</span></a>
<a name="378"><span class="lineNum"> 378 </span><span class="lineCov"> 121204 : return 0;</span></a>
<a name="379"><span class="lineNum"> 379 </span> : }</a>
<a name="380"><span class="lineNum"> 380 </span> : </a>
<a name="381"><span class="lineNum"> 381 </span><span class="lineCov"> 227 : struct snapraid_handle* handle_mapping(struct snapraid_state* state, unsigned* handlemax)</span></a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@ -85,11 +85,11 @@
</tr>
<tr>
<td class="coverFn"><a href="import.c.gcov.html#146">state_import_fetch</a></td>
<td class="coverFnHi">652266</td>
<td class="coverFnHi">652523</td>
</tr>
<tr>
<td class="coverFn"><a href="import.c.gcov.html#47">import_block_hash</a></td>
<td class="coverFnHi">656738</td>
<td class="coverFnHi">656995</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="import.c.gcov.html#47">import_block_hash</a></td>
<td class="coverFnHi">656738</td>
<td class="coverFnHi">656995</td>
</tr>
<tr>
<td class="coverFn"><a href="import.c.gcov.html#27">import_block_hash_compare</a></td>
@ -89,7 +89,7 @@
</tr>
<tr>
<td class="coverFn"><a href="import.c.gcov.html#146">state_import_fetch</a></td>
<td class="coverFnHi">652266</td>
<td class="coverFnHi">652523</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@ -108,10 +108,10 @@
<a name="46"><span class="lineNum"> 46 </span> : * Compute the hash of the hash for an import block.</a>
<a name="47"><span class="lineNum"> 47 </span> : * We just use the first 32 bit of the hash itself.</a>
<a name="48"><span class="lineNum"> 48 </span> : */</a>
<a name="49"><span class="lineNum"> 49 </span><span class="lineCov"> 656738 : static inline tommy_uint32_t import_block_hash(const unsigned char* hash)</span></a>
<a name="49"><span class="lineNum"> 49 </span><span class="lineCov"> 656995 : static inline tommy_uint32_t import_block_hash(const unsigned char* hash)</span></a>
<a name="50"><span class="lineNum"> 50 </span> : {</a>
<a name="51"><span class="lineNum"> 51 </span> : /* the hash data is not aligned, and we cannot access it with a direct cast */</a>
<a name="52"><span class="lineNum"> 52 </span><span class="lineCov"> 656738 : return hash[0] | ((uint32_t)hash[1] &lt;&lt; 8) | ((uint32_t)hash[2] &lt;&lt; 16) | ((uint32_t)hash[3] &lt;&lt; 24);</span></a>
<a name="52"><span class="lineNum"> 52 </span><span class="lineCov"> 656995 : return hash[0] | ((uint32_t)hash[1] &lt;&lt; 8) | ((uint32_t)hash[2] &lt;&lt; 16) | ((uint32_t)hash[3] &lt;&lt; 24);</span></a>
<a name="53"><span class="lineNum"> 53 </span> : }</a>
<a name="54"><span class="lineNum"> 54 </span> : </a>
<a name="55"><span class="lineNum"> 55 </span><span class="lineCov"> 1750 : static void import_file(struct snapraid_state* state, const char* path, uint64_t size)</span></a>
@ -207,24 +207,24 @@
<a name="145"><span class="lineNum"> 145 </span><span class="lineCov"> 1750 : free(file);</span></a>
<a name="146"><span class="lineNum"> 146 </span><span class="lineCov"> 1750 : }</span></a>
<a name="147"><span class="lineNum"> 147 </span> : </a>
<a name="148"><span class="lineNum"> 148 </span><span class="lineCov"> 652266 : int state_import_fetch(struct snapraid_state* state, int rehash, struct snapraid_block* missing_block, unsigned char* buffer)</span></a>
<a name="148"><span class="lineNum"> 148 </span><span class="lineCov"> 652523 : int state_import_fetch(struct snapraid_state* state, int rehash, struct snapraid_block* missing_block, unsigned char* buffer)</span></a>
<a name="149"><span class="lineNum"> 149 </span> : {</a>
<a name="150"><span class="lineNum"> 150 </span> : struct snapraid_import_block* block;</a>
<a name="151"><span class="lineNum"> 151 </span> : int ret;</a>
<a name="152"><span class="lineNum"> 152 </span> : int f;</a>
<a name="153"><span class="lineNum"> 153 </span><span class="lineCov"> 652266 : const unsigned char* hash = missing_block-&gt;hash;</span></a>
<a name="154"><span class="lineNum"> 154 </span><span class="lineCov"> 652266 : unsigned block_size = state-&gt;block_size;</span></a>
<a name="153"><span class="lineNum"> 153 </span><span class="lineCov"> 652523 : const unsigned char* hash = missing_block-&gt;hash;</span></a>
<a name="154"><span class="lineNum"> 154 </span><span class="lineCov"> 652523 : unsigned block_size = state-&gt;block_size;</span></a>
<a name="155"><span class="lineNum"> 155 </span> : unsigned read_size;</a>
<a name="156"><span class="lineNum"> 156 </span> : unsigned char buffer_hash[HASH_MAX];</a>
<a name="157"><span class="lineNum"> 157 </span> : const char* path;</a>
<a name="158"><span class="lineNum"> 158 </span> : </a>
<a name="159"><span class="lineNum"> 159 </span><span class="lineCov"> 652266 : if (rehash) {</span></a>
<a name="159"><span class="lineNum"> 159 </span><span class="lineCov"> 652523 : if (rehash) {</span></a>
<a name="160"><span class="lineNum"> 160 </span><span class="lineNoCov"> 0 : block = tommy_hashdyn_search(&amp;state-&gt;previmportset, import_block_prevhash_compare, hash, import_block_hash(hash));</span></a>
<a name="161"><span class="lineNum"> 161 </span> : } else {</a>
<a name="162"><span class="lineNum"> 162 </span><span class="lineCov"> 652266 : block = tommy_hashdyn_search(&amp;state-&gt;importset, import_block_hash_compare, hash, import_block_hash(hash));</span></a>
<a name="162"><span class="lineNum"> 162 </span><span class="lineCov"> 652523 : block = tommy_hashdyn_search(&amp;state-&gt;importset, import_block_hash_compare, hash, import_block_hash(hash));</span></a>
<a name="163"><span class="lineNum"> 163 </span> : }</a>
<a name="164"><span class="lineNum"> 164 </span><span class="lineCov"> 652266 : if (!block)</span></a>
<a name="165"><span class="lineNum"> 165 </span><span class="lineCov"> 647794 : return -1;</span></a>
<a name="164"><span class="lineNum"> 164 </span><span class="lineCov"> 652523 : if (!block)</span></a>
<a name="165"><span class="lineNum"> 165 </span><span class="lineCov"> 648051 : return -1;</span></a>
<a name="166"><span class="lineNum"> 166 </span> : </a>
<a name="167"><span class="lineNum"> 167 </span><span class="lineCov"> 4472 : path = block-&gt;file-&gt;path;</span></a>
<a name="168"><span class="lineNum"> 168 </span><span class="lineCov"> 4472 : read_size = block-&gt;size;</span></a>

View file

@ -31,18 +31,18 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">10504</td>
<td class="headerCovTableEntry">12155</td>
<td class="headerCovTableEntryMed">86.4 %</td>
<td class="headerCovTableEntry">10781</td>
<td class="headerCovTableEntry">12115</td>
<td class="headerCovTableEntryMed">89.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">565</td>
<td class="headerCovTableEntry">573</td>
<td class="headerCovTableEntry">600</td>
<td class="headerCovTableEntryHi">94.2 %</td>
<td class="headerCovTableEntryHi">95.5 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
@ -69,16 +69,6 @@
<td class="tableHead" colspan=3>Line Coverage <span class="tableHeadSort"><a href="index-sort-l.html"><img src="../updown.png" width=10 height=14 alt="Sort by line coverage" title="Sort by line coverage" border=0></a></span></td>
<td class="tableHead" colspan=2>Functions <span class="tableHeadSort"><img src="../glass.png" width=10 height=14 alt="Sort by function coverage" title="Sort by function coverage" border=0></span></td>
</tr>
<tr>
<td class="coverFile"><a href="unix.c.gcov.html">unix.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=56 height=10 alt="56.2%"><img src="../snow.png" width=44 height=10 alt="56.2%"></td></tr></table>
</td>
<td class="coverPerLo">56.2&nbsp;%</td>
<td class="coverNumLo">381 / 678</td>
<td class="coverPerLo">73.8&nbsp;%</td>
<td class="coverNumLo">31 / 42</td>
</tr>
<tr>
<td class="coverFile"><a href="dry.c.gcov.html">dry.c</a></td>
<td class="coverBar" align="center">
@ -90,14 +80,14 @@
<td class="coverNumMed">4 / 5</td>
</tr>
<tr>
<td class="coverFile"><a href="scrub.c.gcov.html">scrub.c</a></td>
<td class="coverFile"><a href="unix.c.gcov.html">unix.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=79 height=10 alt="79.3%"><img src="../snow.png" width=21 height=10 alt="79.3%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="70.6%"><img src="../snow.png" width=29 height=10 alt="70.6%"></td></tr></table>
</td>
<td class="coverPerMed">79.3&nbsp;%</td>
<td class="coverNumMed">303 / 382</td>
<td class="coverPerMed">85.7&nbsp;%</td>
<td class="coverNumMed">6 / 7</td>
<td class="coverPerLo">70.6&nbsp;%</td>
<td class="coverNumLo">475 / 673</td>
<td class="coverPerMed">83.3&nbsp;%</td>
<td class="coverNumMed">35 / 42</td>
</tr>
<tr>
<td class="coverFile"><a href="thermal.c.gcov.html">thermal.c</a></td>
@ -109,6 +99,16 @@
<td class="coverPerMed">85.7&nbsp;%</td>
<td class="coverNumMed">6 / 7</td>
</tr>
<tr>
<td class="coverFile"><a href="scrub.c.gcov.html">scrub.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=79 height=10 alt="79.3%"><img src="../snow.png" width=21 height=10 alt="79.3%"></td></tr></table>
</td>
<td class="coverPerMed">79.3&nbsp;%</td>
<td class="coverNumMed">303 / 382</td>
<td class="coverPerMed">85.7&nbsp;%</td>
<td class="coverNumMed">6 / 7</td>
</tr>
<tr>
<td class="coverFile"><a href="import.c.gcov.html">import.c</a></td>
<td class="coverBar" align="center">
@ -119,16 +119,6 @@
<td class="coverPerMed">87.5&nbsp;%</td>
<td class="coverNumMed">7 / 8</td>
</tr>
<tr>
<td class="coverFile"><a href="support.c.gcov.html">support.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=64 height=10 alt="63.9%"><img src="../snow.png" width=36 height=10 alt="63.9%"></td></tr></table>
</td>
<td class="coverPerLo">63.9&nbsp;%</td>
<td class="coverNumLo">633 / 991</td>
<td class="coverPerMed">89.3&nbsp;%</td>
<td class="coverNumMed">75 / 84</td>
</tr>
<tr>
<td class="coverFile"><a href="stream.h.gcov.html">stream.h</a></td>
<td class="coverBar" align="center">
@ -140,14 +130,14 @@
<td class="coverNumHi">10 / 11</td>
</tr>
<tr>
<td class="coverFile"><a href="device.c.gcov.html">device.c</a></td>
<td class="coverFile"><a href="support.c.gcov.html">support.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=84 height=10 alt="84.4%"><img src="../snow.png" width=16 height=10 alt="84.4%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="80.4%"><img src="../snow.png" width=20 height=10 alt="80.4%"></td></tr></table>
</td>
<td class="coverPerMed">84.4&nbsp;%</td>
<td class="coverNumMed">345 / 409</td>
<td class="coverPerMed">80.4&nbsp;%</td>
<td class="coverNumMed">769 / 956</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumHi">13 / 14</td>
<td class="coverNumHi">78 / 84</td>
</tr>
<tr>
<td class="coverFile"><a href="io.c.gcov.html">io.c</a></td>
@ -172,10 +162,10 @@
<tr>
<td class="coverFile"><a href="state.c.gcov.html">state.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.9%"><img src="../snow.png" width=11 height=10 alt="88.9%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=90 height=10 alt="90.3%"><img src="../snow.png" width=10 height=10 alt="90.3%"></td></tr></table>
</td>
<td class="coverPerMed">88.9&nbsp;%</td>
<td class="coverNumMed">1737 / 1954</td>
<td class="coverPerHi">90.3&nbsp;%</td>
<td class="coverNumHi">1765 / 1954</td>
<td class="coverPerHi">96.1&nbsp;%</td>
<td class="coverNumHi">49 / 51</td>
</tr>
@ -209,26 +199,6 @@
<td class="coverPerHi">97.2&nbsp;%</td>
<td class="coverNumHi">70 / 72</td>
</tr>
<tr>
<td class="coverFile"><a href="spooky2.c.gcov.html">spooky2.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="portable.h.gcov.html">portable.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="list.c.gcov.html">list.c</a></td>
<td class="coverBar" align="center">
@ -239,26 +209,6 @@
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="rehash.c.gcov.html">rehash.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=95 height=10 alt="95.2%"><img src="../snow.png" width=5 height=10 alt="95.2%"></td></tr></table>
</td>
<td class="coverPerHi">95.2&nbsp;%</td>
<td class="coverNumHi">20 / 21</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="touch.c.gcov.html">touch.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">28 / 28</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="museair.c.gcov.html">museair.c</a></td>
<td class="coverBar" align="center">
@ -279,6 +229,36 @@
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="portable.h.gcov.html">portable.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="touch.c.gcov.html">touch.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">28 / 28</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="rehash.c.gcov.html">rehash.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=95 height=10 alt="95.2%"><img src="../snow.png" width=5 height=10 alt="95.2%"></td></tr></table>
</td>
<td class="coverPerHi">95.2&nbsp;%</td>
<td class="coverNumHi">20 / 21</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="metro.c.gcov.html">metro.c</a></td>
<td class="coverBar" align="center">
@ -290,12 +270,22 @@
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="main.c.gcov.html">main.c</a></td>
<td class="coverFile"><a href="spooky2.c.gcov.html">spooky2.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=84 height=10 alt="83.6%"><img src="../snow.png" width=16 height=10 alt="83.6%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerMed">83.6&nbsp;%</td>
<td class="coverNumMed">51 / 61</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">20 / 20</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="speed.c.gcov.html">speed.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.6%"><img src="../snow.png" width=1 height=10 alt="99.6%"></td></tr></table>
</td>
<td class="coverPerHi">99.6&nbsp;%</td>
<td class="coverNumHi">490 / 492</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
</tr>
@ -310,32 +300,12 @@
<td class="coverNumHi">2 / 2</td>
</tr>
<tr>
<td class="coverFile"><a href="mkstream.c.gcov.html">mkstream.c</a></td>
<td class="coverFile"><a href="main.c.gcov.html">main.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=84 height=10 alt="83.6%"><img src="../snow.png" width=16 height=10 alt="83.6%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">69 / 69</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
</tr>
<tr>
<td class="coverFile"><a href="status.c.gcov.html">status.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="96.2%"><img src="../snow.png" width=4 height=10 alt="96.2%"></td></tr></table>
</td>
<td class="coverPerHi">96.2&nbsp;%</td>
<td class="coverNumHi">256 / 266</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
</tr>
<tr>
<td class="coverFile"><a href="speed.c.gcov.html">speed.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.6%"><img src="../snow.png" width=1 height=10 alt="99.6%"></td></tr></table>
</td>
<td class="coverPerHi">99.6&nbsp;%</td>
<td class="coverNumHi">490 / 492</td>
<td class="coverPerMed">83.6&nbsp;%</td>
<td class="coverNumMed">51 / 61</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
</tr>
@ -349,6 +319,26 @@
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
</tr>
<tr>
<td class="coverFile"><a href="status.c.gcov.html">status.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=96 height=10 alt="96.2%"><img src="../snow.png" width=4 height=10 alt="96.2%"></td></tr></table>
</td>
<td class="coverPerHi">96.2&nbsp;%</td>
<td class="coverNumHi">256 / 266</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
</tr>
<tr>
<td class="coverFile"><a href="mkstream.c.gcov.html">mkstream.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">69 / 69</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
</tr>
<tr>
<td class="coverFile"><a href="dup.c.gcov.html">dup.c</a></td>
<td class="coverBar" align="center">
@ -359,16 +349,6 @@
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">5 / 5</td>
</tr>
<tr>
<td class="coverFile"><a href="locate.c.gcov.html">locate.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.4%"><img src="../snow.png" width=6 height=10 alt="94.4%"></td></tr></table>
</td>
<td class="coverPerHi">94.4&nbsp;%</td>
<td class="coverNumHi">119 / 126</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
</tr>
<tr>
<td class="coverFile"><a href="util.h.gcov.html">util.h</a></td>
<td class="coverBar" align="center">
@ -382,10 +362,20 @@
<tr>
<td class="coverFile"><a href="search.c.gcov.html">search.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=91 height=10 alt="90.9%"><img src="../snow.png" width=9 height=10 alt="90.9%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.9%"><img src="../snow.png" width=8 height=10 alt="91.9%"></td></tr></table>
</td>
<td class="coverPerHi">90.9&nbsp;%</td>
<td class="coverNumHi">90 / 99</td>
<td class="coverPerHi">91.9&nbsp;%</td>
<td class="coverNumHi">91 / 99</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
</tr>
<tr>
<td class="coverFile"><a href="locate.c.gcov.html">locate.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="94.4%"><img src="../snow.png" width=6 height=10 alt="94.4%"></td></tr></table>
</td>
<td class="coverPerHi">94.4&nbsp;%</td>
<td class="coverNumHi">119 / 126</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
</tr>
@ -429,16 +419,6 @@
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">9 / 9</td>
</tr>
<tr>
<td class="coverFile"><a href="check.c.gcov.html">check.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.9%"><img src="../snow.png" width=11 height=10 alt="88.9%"></td></tr></table>
</td>
<td class="coverPerMed">88.9&nbsp;%</td>
<td class="coverNumMed">766 / 862</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">10 / 10</td>
</tr>
<tr>
<td class="coverFile"><a href="snapraid.c.gcov.html">snapraid.c</a></td>
<td class="coverBar" align="center">
@ -449,13 +429,33 @@
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">10 / 10</td>
</tr>
<tr>
<td class="coverFile"><a href="check.c.gcov.html">check.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.7%"><img src="../snow.png" width=11 height=10 alt="88.7%"></td></tr></table>
</td>
<td class="coverPerMed">88.7&nbsp;%</td>
<td class="coverNumMed">765 / 862</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">10 / 10</td>
</tr>
<tr>
<td class="coverFile"><a href="device.c.gcov.html">device.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.8%"><img src="../snow.png" width=11 height=10 alt="88.8%"></td></tr></table>
</td>
<td class="coverPerMed">88.8&nbsp;%</td>
<td class="coverNumMed">363 / 409</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">14 / 14</td>
</tr>
<tr>
<td class="coverFile"><a href="mktest.c.gcov.html">mktest.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=93 height=10 alt="92.8%"><img src="../snow.png" width=7 height=10 alt="92.8%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=93 height=10 alt="93.2%"><img src="../snow.png" width=7 height=10 alt="93.2%"></td></tr></table>
</td>
<td class="coverPerHi">92.8&nbsp;%</td>
<td class="coverNumHi">220 / 237</td>
<td class="coverPerHi">93.2&nbsp;%</td>
<td class="coverNumHi">221 / 237</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">18 / 18</td>
</tr>

View file

@ -31,18 +31,18 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">10504</td>
<td class="headerCovTableEntry">12155</td>
<td class="headerCovTableEntryMed">86.4 %</td>
<td class="headerCovTableEntry">10781</td>
<td class="headerCovTableEntry">12115</td>
<td class="headerCovTableEntryMed">89.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">565</td>
<td class="headerCovTableEntry">573</td>
<td class="headerCovTableEntry">600</td>
<td class="headerCovTableEntryHi">94.2 %</td>
<td class="headerCovTableEntryHi">95.5 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
@ -72,22 +72,12 @@
<tr>
<td class="coverFile"><a href="unix.c.gcov.html">unix.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=56 height=10 alt="56.2%"><img src="../snow.png" width=44 height=10 alt="56.2%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="70.6%"><img src="../snow.png" width=29 height=10 alt="70.6%"></td></tr></table>
</td>
<td class="coverPerLo">56.2&nbsp;%</td>
<td class="coverNumLo">381 / 678</td>
<td class="coverPerLo">73.8&nbsp;%</td>
<td class="coverNumLo">31 / 42</td>
</tr>
<tr>
<td class="coverFile"><a href="support.c.gcov.html">support.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=64 height=10 alt="63.9%"><img src="../snow.png" width=36 height=10 alt="63.9%"></td></tr></table>
</td>
<td class="coverPerLo">63.9&nbsp;%</td>
<td class="coverNumLo">633 / 991</td>
<td class="coverPerMed">89.3&nbsp;%</td>
<td class="coverNumMed">75 / 84</td>
<td class="coverPerLo">70.6&nbsp;%</td>
<td class="coverNumLo">475 / 673</td>
<td class="coverPerMed">83.3&nbsp;%</td>
<td class="coverNumMed">35 / 42</td>
</tr>
<tr>
<td class="coverFile"><a href="dry.c.gcov.html">dry.c</a></td>
@ -109,6 +99,16 @@
<td class="coverPerMed">85.7&nbsp;%</td>
<td class="coverNumMed">6 / 7</td>
</tr>
<tr>
<td class="coverFile"><a href="support.c.gcov.html">support.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="80.4%"><img src="../snow.png" width=20 height=10 alt="80.4%"></td></tr></table>
</td>
<td class="coverPerMed">80.4&nbsp;%</td>
<td class="coverNumMed">769 / 956</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumHi">78 / 84</td>
</tr>
<tr>
<td class="coverFile"><a href="thermal.c.gcov.html">thermal.c</a></td>
<td class="coverBar" align="center">
@ -129,16 +129,6 @@
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">2 / 2</td>
</tr>
<tr>
<td class="coverFile"><a href="device.c.gcov.html">device.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=84 height=10 alt="84.4%"><img src="../snow.png" width=16 height=10 alt="84.4%"></td></tr></table>
</td>
<td class="coverPerMed">84.4&nbsp;%</td>
<td class="coverNumMed">345 / 409</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumHi">13 / 14</td>
</tr>
<tr>
<td class="coverFile"><a href="snapraid.c.gcov.html">snapraid.c</a></td>
<td class="coverBar" align="center">
@ -150,24 +140,24 @@
<td class="coverNumHi">10 / 10</td>
</tr>
<tr>
<td class="coverFile"><a href="check.c.gcov.html">check.c</a></td>
<td class="coverFile"><a href="device.c.gcov.html">device.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.9%"><img src="../snow.png" width=11 height=10 alt="88.9%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.8%"><img src="../snow.png" width=11 height=10 alt="88.8%"></td></tr></table>
</td>
<td class="coverPerMed">88.9&nbsp;%</td>
<td class="coverNumMed">766 / 862</td>
<td class="coverPerMed">88.8&nbsp;%</td>
<td class="coverNumMed">363 / 409</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">10 / 10</td>
<td class="coverNumHi">14 / 14</td>
</tr>
<tr>
<td class="coverFile"><a href="state.c.gcov.html">state.c</a></td>
<td class="coverFile"><a href="check.c.gcov.html">check.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.9%"><img src="../snow.png" width=11 height=10 alt="88.9%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.7%"><img src="../snow.png" width=11 height=10 alt="88.7%"></td></tr></table>
</td>
<td class="coverPerMed">88.9&nbsp;%</td>
<td class="coverNumMed">1737 / 1954</td>
<td class="coverPerHi">96.1&nbsp;%</td>
<td class="coverNumHi">49 / 51</td>
<td class="coverPerMed">88.7&nbsp;%</td>
<td class="coverNumMed">765 / 862</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">10 / 10</td>
</tr>
<tr>
<td class="coverFile"><a href="scan.c.gcov.html">scan.c</a></td>
@ -199,6 +189,16 @@
<td class="coverPerMed">87.5&nbsp;%</td>
<td class="coverNumMed">7 / 8</td>
</tr>
<tr>
<td class="coverFile"><a href="state.c.gcov.html">state.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=90 height=10 alt="90.3%"><img src="../snow.png" width=10 height=10 alt="90.3%"></td></tr></table>
</td>
<td class="coverPerHi">90.3&nbsp;%</td>
<td class="coverNumHi">1765 / 1954</td>
<td class="coverPerHi">96.1&nbsp;%</td>
<td class="coverNumHi">49 / 51</td>
</tr>
<tr>
<td class="coverFile"><a href="stream.h.gcov.html">stream.h</a></td>
<td class="coverBar" align="center">
@ -219,16 +219,6 @@
<td class="coverPerHi">96.4&nbsp;%</td>
<td class="coverNumHi">27 / 28</td>
</tr>
<tr>
<td class="coverFile"><a href="search.c.gcov.html">search.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=91 height=10 alt="90.9%"><img src="../snow.png" width=9 height=10 alt="90.9%"></td></tr></table>
</td>
<td class="coverPerHi">90.9&nbsp;%</td>
<td class="coverNumHi">90 / 99</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
</tr>
<tr>
<td class="coverFile"><a href="parity.c.gcov.html">parity.c</a></td>
<td class="coverBar" align="center">
@ -249,6 +239,16 @@
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="search.c.gcov.html">search.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.9%"><img src="../snow.png" width=8 height=10 alt="91.9%"></td></tr></table>
</td>
<td class="coverPerHi">91.9&nbsp;%</td>
<td class="coverNumHi">91 / 99</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
</tr>
<tr>
<td class="coverFile"><a href="util.c.gcov.html">util.c</a></td>
<td class="coverBar" align="center">
@ -262,10 +262,10 @@
<tr>
<td class="coverFile"><a href="mktest.c.gcov.html">mktest.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=93 height=10 alt="92.8%"><img src="../snow.png" width=7 height=10 alt="92.8%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=93 height=10 alt="93.2%"><img src="../snow.png" width=7 height=10 alt="93.2%"></td></tr></table>
</td>
<td class="coverPerHi">92.8&nbsp;%</td>
<td class="coverNumHi">220 / 237</td>
<td class="coverPerHi">93.2&nbsp;%</td>
<td class="coverNumHi">221 / 237</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">18 / 18</td>
</tr>
@ -390,7 +390,7 @@
<td class="coverNumHi">2 / 2</td>
</tr>
<tr>
<td class="coverFile"><a href="portable.h.gcov.html">portable.h</a></td>
<td class="coverFile"><a href="support.h.gcov.html">support.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>
@ -400,7 +400,7 @@
<td class="coverNumHi">1 / 1</td>
</tr>
<tr>
<td class="coverFile"><a href="support.h.gcov.html">support.h</a></td>
<td class="coverFile"><a href="portable.h.gcov.html">portable.h</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=100 height=10 alt="100.0%"></td></tr></table>
</td>

View file

@ -31,18 +31,18 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">10504</td>
<td class="headerCovTableEntry">12155</td>
<td class="headerCovTableEntryMed">86.4 %</td>
<td class="headerCovTableEntry">10781</td>
<td class="headerCovTableEntry">12115</td>
<td class="headerCovTableEntryMed">89.0 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">565</td>
<td class="headerCovTableEntry">573</td>
<td class="headerCovTableEntry">600</td>
<td class="headerCovTableEntryHi">94.2 %</td>
<td class="headerCovTableEntryHi">95.5 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
@ -82,22 +82,22 @@
<tr>
<td class="coverFile"><a href="check.c.gcov.html">check.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.9%"><img src="../snow.png" width=11 height=10 alt="88.9%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.7%"><img src="../snow.png" width=11 height=10 alt="88.7%"></td></tr></table>
</td>
<td class="coverPerMed">88.9&nbsp;%</td>
<td class="coverNumMed">766 / 862</td>
<td class="coverPerMed">88.7&nbsp;%</td>
<td class="coverNumMed">765 / 862</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">10 / 10</td>
</tr>
<tr>
<td class="coverFile"><a href="device.c.gcov.html">device.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=84 height=10 alt="84.4%"><img src="../snow.png" width=16 height=10 alt="84.4%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.8%"><img src="../snow.png" width=11 height=10 alt="88.8%"></td></tr></table>
</td>
<td class="coverPerMed">84.4&nbsp;%</td>
<td class="coverNumMed">345 / 409</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumHi">13 / 14</td>
<td class="coverPerMed">88.8&nbsp;%</td>
<td class="coverNumMed">363 / 409</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">14 / 14</td>
</tr>
<tr>
<td class="coverFile"><a href="dry.c.gcov.html">dry.c</a></td>
@ -222,10 +222,10 @@
<tr>
<td class="coverFile"><a href="mktest.c.gcov.html">mktest.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=93 height=10 alt="92.8%"><img src="../snow.png" width=7 height=10 alt="92.8%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=93 height=10 alt="93.2%"><img src="../snow.png" width=7 height=10 alt="93.2%"></td></tr></table>
</td>
<td class="coverPerHi">92.8&nbsp;%</td>
<td class="coverNumHi">220 / 237</td>
<td class="coverPerHi">93.2&nbsp;%</td>
<td class="coverNumHi">221 / 237</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">18 / 18</td>
</tr>
@ -312,10 +312,10 @@
<tr>
<td class="coverFile"><a href="search.c.gcov.html">search.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=91 height=10 alt="90.9%"><img src="../snow.png" width=9 height=10 alt="90.9%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="91.9%"><img src="../snow.png" width=8 height=10 alt="91.9%"></td></tr></table>
</td>
<td class="coverPerHi">90.9&nbsp;%</td>
<td class="coverNumHi">90 / 99</td>
<td class="coverPerHi">91.9&nbsp;%</td>
<td class="coverNumHi">91 / 99</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">7 / 7</td>
</tr>
@ -362,10 +362,10 @@
<tr>
<td class="coverFile"><a href="state.c.gcov.html">state.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=89 height=10 alt="88.9%"><img src="../snow.png" width=11 height=10 alt="88.9%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=90 height=10 alt="90.3%"><img src="../snow.png" width=10 height=10 alt="90.3%"></td></tr></table>
</td>
<td class="coverPerMed">88.9&nbsp;%</td>
<td class="coverNumMed">1737 / 1954</td>
<td class="coverPerHi">90.3&nbsp;%</td>
<td class="coverNumHi">1765 / 1954</td>
<td class="coverPerHi">96.1&nbsp;%</td>
<td class="coverNumHi">49 / 51</td>
</tr>
@ -402,12 +402,12 @@
<tr>
<td class="coverFile"><a href="support.c.gcov.html">support.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=64 height=10 alt="63.9%"><img src="../snow.png" width=36 height=10 alt="63.9%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=80 height=10 alt="80.4%"><img src="../snow.png" width=20 height=10 alt="80.4%"></td></tr></table>
</td>
<td class="coverPerLo">63.9&nbsp;%</td>
<td class="coverNumLo">633 / 991</td>
<td class="coverPerMed">89.3&nbsp;%</td>
<td class="coverNumMed">75 / 84</td>
<td class="coverPerMed">80.4&nbsp;%</td>
<td class="coverNumMed">769 / 956</td>
<td class="coverPerHi">92.9&nbsp;%</td>
<td class="coverNumHi">78 / 84</td>
</tr>
<tr>
<td class="coverFile"><a href="support.h.gcov.html">support.h</a></td>
@ -452,12 +452,12 @@
<tr>
<td class="coverFile"><a href="unix.c.gcov.html">unix.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=56 height=10 alt="56.2%"><img src="../snow.png" width=44 height=10 alt="56.2%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../ruby.png" width=71 height=10 alt="70.6%"><img src="../snow.png" width=29 height=10 alt="70.6%"></td></tr></table>
</td>
<td class="coverPerLo">56.2&nbsp;%</td>
<td class="coverNumLo">381 / 678</td>
<td class="coverPerLo">73.8&nbsp;%</td>
<td class="coverNumLo">31 / 42</td>
<td class="coverPerLo">70.6&nbsp;%</td>
<td class="coverNumLo">475 / 673</td>
<td class="coverPerMed">83.3&nbsp;%</td>
<td class="coverNumMed">35 / 42</td>
</tr>
<tr>
<td class="coverFile"><a href="util.c.gcov.html">util.c</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">31</td>
@ -113,7 +113,7 @@
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#117">io_writer_sched_empty</a></td>
<td class="coverFnHi">931</td>
<td class="coverFnHi">920</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#240">io_parity_write_mono</a></td>
@ -141,27 +141,27 @@
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#454">io_write_next_thread</a></td>
<td class="coverFnHi">111042</td>
<td class="coverFnHi">110979</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#447">io_write_preset_thread</a></td>
<td class="coverFnHi">111042</td>
<td class="coverFnHi">110979</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#92">io_writer_sched</a></td>
<td class="coverFnHi">114798</td>
<td class="coverFnHi">114746</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#410">io_read_next_thread</a></td>
<td class="coverFnHi">146427</td>
<td class="coverFnHi">146364</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#36">io_position_next</a></td>
<td class="coverFnHi">163942</td>
<td class="coverFnHi">163879</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#57">io_reader_sched</a></td>
<td class="coverFnHi">163942</td>
<td class="coverFnHi">163879</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#654">io_parity_read_thread</a></td>
@ -169,27 +169,27 @@
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#659">io_parity_write_thread</a></td>
<td class="coverFnHi">559582</td>
<td class="coverFnHi">559204</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#348">io_writer_step</a></td>
<td class="coverFnHi">560074</td>
<td class="coverFnHi">559696</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#649">io_data_read_thread</a></td>
<td class="coverFnHi">877956</td>
<td class="coverFnHi">877578</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#571">io_task_read_thread</a></td>
<td class="coverFnHi">1089660</td>
<td class="coverFnHi">1089282</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#734">io_reader_worker</a></td>
<td class="coverFnHi">1089792</td>
<td class="coverFnHi">1089420</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#292">io_reader_step</a></td>
<td class="coverFnHi">1177886</td>
<td class="coverFnHi">1177263</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">31</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#649">io_data_read_thread</a></td>
<td class="coverFnHi">877956</td>
<td class="coverFnHi">877578</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#1048">io_done</a></td>
@ -97,11 +97,11 @@
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#659">io_parity_write_thread</a></td>
<td class="coverFnHi">559582</td>
<td class="coverFnHi">559204</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#36">io_position_next</a></td>
<td class="coverFnHi">163942</td>
<td class="coverFnHi">163879</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#142">io_read_next_mono</a></td>
@ -109,15 +109,15 @@
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#410">io_read_next_thread</a></td>
<td class="coverFnHi">146427</td>
<td class="coverFnHi">146364</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#57">io_reader_sched</a></td>
<td class="coverFnHi">163942</td>
<td class="coverFnHi">163879</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#292">io_reader_step</a></td>
<td class="coverFnHi">1177886</td>
<td class="coverFnHi">1177263</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#745">io_reader_thread</a></td>
@ -125,7 +125,7 @@
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#734">io_reader_worker</a></td>
<td class="coverFnHi">1089792</td>
<td class="coverFnHi">1089420</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#192">io_refresh_mono</a></td>
@ -157,7 +157,7 @@
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#571">io_task_read_thread</a></td>
<td class="coverFnHi">1089660</td>
<td class="coverFnHi">1089282</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#180">io_write_next_mono</a></td>
@ -165,7 +165,7 @@
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#454">io_write_next_thread</a></td>
<td class="coverFnHi">111042</td>
<td class="coverFnHi">110979</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#160">io_write_preset_mono</a></td>
@ -173,19 +173,19 @@
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#447">io_write_preset_thread</a></td>
<td class="coverFnHi">111042</td>
<td class="coverFnHi">110979</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#92">io_writer_sched</a></td>
<td class="coverFnHi">114798</td>
<td class="coverFnHi">114746</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#117">io_writer_sched_empty</a></td>
<td class="coverFnHi">931</td>
<td class="coverFnHi">920</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#348">io_writer_step</a></td>
<td class="coverFnHi">560074</td>
<td class="coverFnHi">559696</td>
</tr>
<tr>
<td class="coverFn"><a href="io.c.gcov.html#775">io_writer_thread</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">31</td>
@ -97,108 +97,108 @@
<a name="35"><span class="lineNum"> 35 </span> : /**</a>
<a name="36"><span class="lineNum"> 36 </span> : * Get the next block position to process.</a>
<a name="37"><span class="lineNum"> 37 </span> : */</a>
<a name="38"><span class="lineNum"> 38 </span><span class="lineCov"> 163942 : static block_off_t io_position_next(struct snapraid_io* io)</span></a>
<a name="38"><span class="lineNum"> 38 </span><span class="lineCov"> 163879 : static block_off_t io_position_next(struct snapraid_io* io)</span></a>
<a name="39"><span class="lineNum"> 39 </span> : {</a>
<a name="40"><span class="lineNum"> 40 </span> : block_off_t blockcur;</a>
<a name="41"><span class="lineNum"> 41 </span> : </a>
<a name="42"><span class="lineNum"> 42 </span> : /* get the next position */</a>
<a name="43"><span class="lineNum"> 43 </span><span class="lineCov"> 163942 : if (io-&gt;block_enabled) {</span></a>
<a name="43"><span class="lineNum"> 43 </span><span class="lineCov"> 163879 : if (io-&gt;block_enabled) {</span></a>
<a name="44"><span class="lineNum"> 44 </span><span class="lineCov"> 507954 : while (io-&gt;block_next &lt; io-&gt;block_max &amp;&amp; !bit_vect_test(io-&gt;block_enabled, io-&gt;block_next))</span></a>
<a name="45"><span class="lineNum"> 45 </span><span class="lineCov"> 353913 : ++io-&gt;block_next;</span></a>
<a name="45"><span class="lineNum"> 45 </span><span class="lineCov"> 353976 : ++io-&gt;block_next;</span></a>
<a name="46"><span class="lineNum"> 46 </span> : }</a>
<a name="47"><span class="lineNum"> 47 </span> : </a>
<a name="48"><span class="lineNum"> 48 </span><span class="lineCov"> 163942 : blockcur = io-&gt;block_next;</span></a>
<a name="48"><span class="lineNum"> 48 </span><span class="lineCov"> 163879 : blockcur = io-&gt;block_next;</span></a>
<a name="49"><span class="lineNum"> 49 </span> : </a>
<a name="50"><span class="lineNum"> 50 </span> : /* next block for the next call */</a>
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 163942 : ++io-&gt;block_next;</span></a>
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 163879 : ++io-&gt;block_next;</span></a>
<a name="52"><span class="lineNum"> 52 </span> : </a>
<a name="53"><span class="lineNum"> 53 </span><span class="lineCov"> 163942 : return blockcur;</span></a>
<a name="53"><span class="lineNum"> 53 </span><span class="lineCov"> 163879 : return blockcur;</span></a>
<a name="54"><span class="lineNum"> 54 </span> : }</a>
<a name="55"><span class="lineNum"> 55 </span> : </a>
<a name="56"><span class="lineNum"> 56 </span> : /**</a>
<a name="57"><span class="lineNum"> 57 </span> : * Setup the next pending task for all readers.</a>
<a name="58"><span class="lineNum"> 58 </span> : */</a>
<a name="59"><span class="lineNum"> 59 </span><span class="lineCov"> 163942 : static void io_reader_sched(struct snapraid_io* io, int task_index, block_off_t blockcur)</span></a>
<a name="59"><span class="lineNum"> 59 </span><span class="lineCov"> 163879 : static void io_reader_sched(struct snapraid_io* io, int task_index, block_off_t blockcur)</span></a>
<a name="60"><span class="lineNum"> 60 </span> : {</a>
<a name="61"><span class="lineNum"> 61 </span> : unsigned i;</a>
<a name="62"><span class="lineNum"> 62 </span> : </a>
<a name="63"><span class="lineNum"> 63 </span><span class="lineCov"> 1370050 : for (i = 0; i &lt; io-&gt;reader_max; ++i) {</span></a>
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 1206108 : struct snapraid_worker* worker = &amp;io-&gt;reader_map[i];</span></a>
<a name="65"><span class="lineNum"> 65 </span><span class="lineCov"> 1206108 : struct snapraid_task* task = &amp;worker-&gt;task_map[task_index];</span></a>
<a name="63"><span class="lineNum"> 63 </span><span class="lineCov"> 1369609 : for (i = 0; i &lt; io-&gt;reader_max; ++i) {</span></a>
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 1205730 : struct snapraid_worker* worker = &amp;io-&gt;reader_map[i];</span></a>
<a name="65"><span class="lineNum"> 65 </span><span class="lineCov"> 1205730 : struct snapraid_task* task = &amp;worker-&gt;task_map[task_index];</span></a>
<a name="66"><span class="lineNum"> 66 </span> : </a>
<a name="67"><span class="lineNum"> 67 </span> : /* setup the new pending task */</a>
<a name="68"><span class="lineNum"> 68 </span><span class="lineCov"> 1206108 : if (blockcur &lt; io-&gt;block_max)</span></a>
<a name="69"><span class="lineNum"> 69 </span><span class="lineCov"> 1117782 : task-&gt;state = TASK_STATE_READY;</span></a>
<a name="68"><span class="lineNum"> 68 </span><span class="lineCov"> 1205730 : if (blockcur &lt; io-&gt;block_max)</span></a>
<a name="69"><span class="lineNum"> 69 </span><span class="lineCov"> 1117404 : task-&gt;state = TASK_STATE_READY;</span></a>
<a name="70"><span class="lineNum"> 70 </span> : else</a>
<a name="71"><span class="lineNum"> 71 </span><span class="lineCov"> 88326 : task-&gt;state = TASK_STATE_EMPTY;</span></a>
<a name="72"><span class="lineNum"> 72 </span> : </a>
<a name="73"><span class="lineNum"> 73 </span><span class="lineCov"> 1206108 : task-&gt;path[0] = 0;</span></a>
<a name="74"><span class="lineNum"> 74 </span><span class="lineCov"> 1206108 : if (worker-&gt;handle)</span></a>
<a name="75"><span class="lineNum"> 75 </span><span class="lineCov"> 983652 : task-&gt;disk = worker-&gt;handle-&gt;disk;</span></a>
<a name="73"><span class="lineNum"> 73 </span><span class="lineCov"> 1205730 : task-&gt;path[0] = 0;</span></a>
<a name="74"><span class="lineNum"> 74 </span><span class="lineCov"> 1205730 : if (worker-&gt;handle)</span></a>
<a name="75"><span class="lineNum"> 75 </span><span class="lineCov"> 983274 : task-&gt;disk = worker-&gt;handle-&gt;disk;</span></a>
<a name="76"><span class="lineNum"> 76 </span> : else</a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 222456 : task-&gt;disk = 0;</span></a>
<a name="78"><span class="lineNum"> 78 </span> : </a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 1206108 : assert(worker-&gt;buffer_skew + i &lt; io-&gt;buffer_max);</span></a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 1205730 : assert(worker-&gt;buffer_skew + i &lt; io-&gt;buffer_max);</span></a>
<a name="80"><span class="lineNum"> 80 </span> : </a>
<a name="81"><span class="lineNum"> 81 </span><span class="lineCov"> 1206108 : task-&gt;buffer = io-&gt;buffer_map[task_index][worker-&gt;buffer_skew + i];</span></a>
<a name="82"><span class="lineNum"> 82 </span><span class="lineCov"> 1206108 : task-&gt;position = blockcur;</span></a>
<a name="83"><span class="lineNum"> 83 </span><span class="lineCov"> 1206108 : task-&gt;block = 0;</span></a>
<a name="84"><span class="lineNum"> 84 </span><span class="lineCov"> 1206108 : task-&gt;file = 0;</span></a>
<a name="85"><span class="lineNum"> 85 </span><span class="lineCov"> 1206108 : task-&gt;file_pos = 0;</span></a>
<a name="86"><span class="lineNum"> 86 </span><span class="lineCov"> 1206108 : task-&gt;read_size = 0;</span></a>
<a name="87"><span class="lineNum"> 87 </span><span class="lineCov"> 1206108 : task-&gt;is_timestamp_different = 0;</span></a>
<a name="81"><span class="lineNum"> 81 </span><span class="lineCov"> 1205730 : task-&gt;buffer = io-&gt;buffer_map[task_index][worker-&gt;buffer_skew + i];</span></a>
<a name="82"><span class="lineNum"> 82 </span><span class="lineCov"> 1205730 : task-&gt;position = blockcur;</span></a>
<a name="83"><span class="lineNum"> 83 </span><span class="lineCov"> 1205730 : task-&gt;block = 0;</span></a>
<a name="84"><span class="lineNum"> 84 </span><span class="lineCov"> 1205730 : task-&gt;file = 0;</span></a>
<a name="85"><span class="lineNum"> 85 </span><span class="lineCov"> 1205730 : task-&gt;file_pos = 0;</span></a>
<a name="86"><span class="lineNum"> 86 </span><span class="lineCov"> 1205730 : task-&gt;read_size = 0;</span></a>
<a name="87"><span class="lineNum"> 87 </span><span class="lineCov"> 1205730 : task-&gt;is_timestamp_different = 0;</span></a>
<a name="88"><span class="lineNum"> 88 </span> : }</a>
<a name="89"><span class="lineNum"> 89 </span><span class="lineCov"> 163942 : }</span></a>
<a name="89"><span class="lineNum"> 89 </span><span class="lineCov"> 163879 : }</span></a>
<a name="90"><span class="lineNum"> 90 </span> : </a>
<a name="91"><span class="lineNum"> 91 </span> : /**</a>
<a name="92"><span class="lineNum"> 92 </span> : * Setup the next pending task for all writers.</a>
<a name="93"><span class="lineNum"> 93 </span> : */</a>
<a name="94"><span class="lineNum"> 94 </span><span class="lineCov"> 114798 : static void io_writer_sched(struct snapraid_io* io, int task_index, block_off_t blockcur)</span></a>
<a name="94"><span class="lineNum"> 94 </span><span class="lineCov"> 114746 : static void io_writer_sched(struct snapraid_io* io, int task_index, block_off_t blockcur)</span></a>
<a name="95"><span class="lineNum"> 95 </span> : {</a>
<a name="96"><span class="lineNum"> 96 </span> : unsigned i;</a>
<a name="97"><span class="lineNum"> 97 </span> : </a>
<a name="98"><span class="lineNum"> 98 </span><span class="lineCov"> 673481 : for (i = 0; i &lt; io-&gt;writer_max; ++i) {</span></a>
<a name="99"><span class="lineNum"> 99 </span><span class="lineCov"> 558683 : struct snapraid_worker* worker = &amp;io-&gt;writer_map[i];</span></a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineCov"> 558683 : struct snapraid_task* task = &amp;worker-&gt;task_map[task_index];</span></a>
<a name="98"><span class="lineNum"> 98 </span><span class="lineCov"> 673117 : for (i = 0; i &lt; io-&gt;writer_max; ++i) {</span></a>
<a name="99"><span class="lineNum"> 99 </span><span class="lineCov"> 558371 : struct snapraid_worker* worker = &amp;io-&gt;writer_map[i];</span></a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineCov"> 558371 : struct snapraid_task* task = &amp;worker-&gt;task_map[task_index];</span></a>
<a name="101"><span class="lineNum"> 101 </span> : </a>
<a name="102"><span class="lineNum"> 102 </span> : /* setup the new pending task */</a>
<a name="103"><span class="lineNum"> 103 </span><span class="lineCov"> 558683 : task-&gt;state = TASK_STATE_READY;</span></a>
<a name="104"><span class="lineNum"> 104 </span><span class="lineCov"> 558683 : task-&gt;path[0] = 0;</span></a>
<a name="105"><span class="lineNum"> 105 </span><span class="lineCov"> 558683 : task-&gt;disk = 0;</span></a>
<a name="106"><span class="lineNum"> 106 </span><span class="lineCov"> 558683 : task-&gt;buffer = io-&gt;buffer_map[task_index][worker-&gt;buffer_skew + i];</span></a>
<a name="107"><span class="lineNum"> 107 </span><span class="lineCov"> 558683 : task-&gt;position = blockcur;</span></a>
<a name="108"><span class="lineNum"> 108 </span><span class="lineCov"> 558683 : task-&gt;block = 0;</span></a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 558683 : task-&gt;file = 0;</span></a>
<a name="110"><span class="lineNum"> 110 </span><span class="lineCov"> 558683 : task-&gt;file_pos = 0;</span></a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 558683 : task-&gt;read_size = 0;</span></a>
<a name="112"><span class="lineNum"> 112 </span><span class="lineCov"> 558683 : task-&gt;is_timestamp_different = 0;</span></a>
<a name="103"><span class="lineNum"> 103 </span><span class="lineCov"> 558371 : task-&gt;state = TASK_STATE_READY;</span></a>
<a name="104"><span class="lineNum"> 104 </span><span class="lineCov"> 558371 : task-&gt;path[0] = 0;</span></a>
<a name="105"><span class="lineNum"> 105 </span><span class="lineCov"> 558371 : task-&gt;disk = 0;</span></a>
<a name="106"><span class="lineNum"> 106 </span><span class="lineCov"> 558371 : task-&gt;buffer = io-&gt;buffer_map[task_index][worker-&gt;buffer_skew + i];</span></a>
<a name="107"><span class="lineNum"> 107 </span><span class="lineCov"> 558371 : task-&gt;position = blockcur;</span></a>
<a name="108"><span class="lineNum"> 108 </span><span class="lineCov"> 558371 : task-&gt;block = 0;</span></a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 558371 : task-&gt;file = 0;</span></a>
<a name="110"><span class="lineNum"> 110 </span><span class="lineCov"> 558371 : task-&gt;file_pos = 0;</span></a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 558371 : task-&gt;read_size = 0;</span></a>
<a name="112"><span class="lineNum"> 112 </span><span class="lineCov"> 558371 : task-&gt;is_timestamp_different = 0;</span></a>
<a name="113"><span class="lineNum"> 113 </span> : }</a>
<a name="114"><span class="lineNum"> 114 </span><span class="lineCov"> 114798 : }</span></a>
<a name="114"><span class="lineNum"> 114 </span><span class="lineCov"> 114746 : }</span></a>
<a name="115"><span class="lineNum"> 115 </span> : </a>
<a name="116"><span class="lineNum"> 116 </span> : /**</a>
<a name="117"><span class="lineNum"> 117 </span> : * Setup an empty next pending task for all writers.</a>
<a name="118"><span class="lineNum"> 118 </span> : */</a>
<a name="119"><span class="lineNum"> 119 </span><span class="lineCov"> 931 : static void io_writer_sched_empty(struct snapraid_io* io, int task_index, block_off_t blockcur)</span></a>
<a name="119"><span class="lineNum"> 119 </span><span class="lineCov"> 920 : static void io_writer_sched_empty(struct snapraid_io* io, int task_index, block_off_t blockcur)</span></a>
<a name="120"><span class="lineNum"> 120 </span> : {</a>
<a name="121"><span class="lineNum"> 121 </span> : unsigned i;</a>
<a name="122"><span class="lineNum"> 122 </span> : </a>
<a name="123"><span class="lineNum"> 123 </span><span class="lineCov"> 6517 : for (i = 0; i &lt; io-&gt;writer_max; ++i) {</span></a>
<a name="124"><span class="lineNum"> 124 </span><span class="lineCov"> 5586 : struct snapraid_worker* worker = &amp;io-&gt;writer_map[i];</span></a>
<a name="125"><span class="lineNum"> 125 </span><span class="lineCov"> 5586 : struct snapraid_task* task = &amp;worker-&gt;task_map[task_index];</span></a>
<a name="123"><span class="lineNum"> 123 </span><span class="lineCov"> 6440 : for (i = 0; i &lt; io-&gt;writer_max; ++i) {</span></a>
<a name="124"><span class="lineNum"> 124 </span><span class="lineCov"> 5520 : struct snapraid_worker* worker = &amp;io-&gt;writer_map[i];</span></a>
<a name="125"><span class="lineNum"> 125 </span><span class="lineCov"> 5520 : struct snapraid_task* task = &amp;worker-&gt;task_map[task_index];</span></a>
<a name="126"><span class="lineNum"> 126 </span> : </a>
<a name="127"><span class="lineNum"> 127 </span> : /* setup the new pending task */</a>
<a name="128"><span class="lineNum"> 128 </span><span class="lineCov"> 5586 : task-&gt;state = TASK_STATE_EMPTY;</span></a>
<a name="129"><span class="lineNum"> 129 </span><span class="lineCov"> 5586 : task-&gt;path[0] = 0;</span></a>
<a name="130"><span class="lineNum"> 130 </span><span class="lineCov"> 5586 : task-&gt;disk = 0;</span></a>
<a name="131"><span class="lineNum"> 131 </span><span class="lineCov"> 5586 : task-&gt;buffer = 0;</span></a>
<a name="132"><span class="lineNum"> 132 </span><span class="lineCov"> 5586 : task-&gt;position = blockcur;</span></a>
<a name="133"><span class="lineNum"> 133 </span><span class="lineCov"> 5586 : task-&gt;block = 0;</span></a>
<a name="134"><span class="lineNum"> 134 </span><span class="lineCov"> 5586 : task-&gt;file = 0;</span></a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 5586 : task-&gt;file_pos = 0;</span></a>
<a name="136"><span class="lineNum"> 136 </span><span class="lineCov"> 5586 : task-&gt;read_size = 0;</span></a>
<a name="137"><span class="lineNum"> 137 </span><span class="lineCov"> 5586 : task-&gt;is_timestamp_different = 0;</span></a>
<a name="128"><span class="lineNum"> 128 </span><span class="lineCov"> 5520 : task-&gt;state = TASK_STATE_EMPTY;</span></a>
<a name="129"><span class="lineNum"> 129 </span><span class="lineCov"> 5520 : task-&gt;path[0] = 0;</span></a>
<a name="130"><span class="lineNum"> 130 </span><span class="lineCov"> 5520 : task-&gt;disk = 0;</span></a>
<a name="131"><span class="lineNum"> 131 </span><span class="lineCov"> 5520 : task-&gt;buffer = 0;</span></a>
<a name="132"><span class="lineNum"> 132 </span><span class="lineCov"> 5520 : task-&gt;position = blockcur;</span></a>
<a name="133"><span class="lineNum"> 133 </span><span class="lineCov"> 5520 : task-&gt;block = 0;</span></a>
<a name="134"><span class="lineNum"> 134 </span><span class="lineCov"> 5520 : task-&gt;file = 0;</span></a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 5520 : task-&gt;file_pos = 0;</span></a>
<a name="136"><span class="lineNum"> 136 </span><span class="lineCov"> 5520 : task-&gt;read_size = 0;</span></a>
<a name="137"><span class="lineNum"> 137 </span><span class="lineCov"> 5520 : task-&gt;is_timestamp_different = 0;</span></a>
<a name="138"><span class="lineNum"> 138 </span> : }</a>
<a name="139"><span class="lineNum"> 139 </span><span class="lineCov"> 931 : }</span></a>
<a name="139"><span class="lineNum"> 139 </span><span class="lineCov"> 920 : }</span></a>
<a name="140"><span class="lineNum"> 140 </span> : </a>
<a name="141"><span class="lineNum"> 141 </span> : /*****************************************************************************/</a>
<a name="142"><span class="lineNum"> 142 </span> : /* mono thread */</a>
@ -353,54 +353,54 @@
<a name="291"><span class="lineNum"> 291 </span> : *</a>
<a name="292"><span class="lineNum"> 292 </span> : * This is the synchronization point for workers with the io.</a>
<a name="293"><span class="lineNum"> 293 </span> : */</a>
<a name="294"><span class="lineNum"> 294 </span><span class="lineCov"> 1177886 : static struct snapraid_task* io_reader_step(struct snapraid_worker* worker)</span></a>
<a name="294"><span class="lineNum"> 294 </span><span class="lineCov"> 1177263 : static struct snapraid_task* io_reader_step(struct snapraid_worker* worker)</span></a>
<a name="295"><span class="lineNum"> 295 </span> : {</a>
<a name="296"><span class="lineNum"> 296 </span><span class="lineCov"> 1177886 : struct snapraid_io* io = worker-&gt;io;</span></a>
<a name="296"><span class="lineNum"> 296 </span><span class="lineCov"> 1177263 : struct snapraid_io* io = worker-&gt;io;</span></a>
<a name="297"><span class="lineNum"> 297 </span> : </a>
<a name="298"><span class="lineNum"> 298 </span> : /* the synchronization is protected by the io mutex */</a>
<a name="299"><span class="lineNum"> 299 </span><span class="lineCov"> 1177886 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="299"><span class="lineNum"> 299 </span><span class="lineCov"> 1177263 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="300"><span class="lineNum"> 300 </span> : </a>
<a name="301"><span class="lineNum"> 301 </span><span class="lineCov"> 1004268 : while (1) {</span></a>
<a name="301"><span class="lineNum"> 301 </span><span class="lineCov"> 1002477 : while (1) {</span></a>
<a name="302"><span class="lineNum"> 302 </span> : unsigned next_index;</a>
<a name="303"><span class="lineNum"> 303 </span> : </a>
<a name="304"><span class="lineNum"> 304 </span> : /* check if the worker has to exit */</a>
<a name="305"><span class="lineNum"> 305 </span> : /* even if there is work to do */</a>
<a name="306"><span class="lineNum"> 306 </span><span class="lineCov"> 2182154 : if (io-&gt;done) {</span></a>
<a name="306"><span class="lineNum"> 306 </span><span class="lineCov"> 2179740 : if (io-&gt;done) {</span></a>
<a name="307"><span class="lineNum"> 307 </span><span class="lineCov"> 690 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="308"><span class="lineNum"> 308 </span><span class="lineCov"> 690 : return 0;</span></a>
<a name="309"><span class="lineNum"> 309 </span> : }</a>
<a name="310"><span class="lineNum"> 310 </span> : </a>
<a name="311"><span class="lineNum"> 311 </span> : /* get the next pending task */</a>
<a name="312"><span class="lineNum"> 312 </span><span class="lineCov"> 2181464 : next_index = (worker-&gt;index + 1) % io-&gt;io_max;</span></a>
<a name="312"><span class="lineNum"> 312 </span><span class="lineCov"> 2179050 : next_index = (worker-&gt;index + 1) % io-&gt;io_max;</span></a>
<a name="313"><span class="lineNum"> 313 </span> : </a>
<a name="314"><span class="lineNum"> 314 </span> : /* if the queue of pending tasks is not empty */</a>
<a name="315"><span class="lineNum"> 315 </span><span class="lineCov"> 2181464 : if (next_index != io-&gt;reader_index) {</span></a>
<a name="315"><span class="lineNum"> 315 </span><span class="lineCov"> 2179050 : if (next_index != io-&gt;reader_index) {</span></a>
<a name="316"><span class="lineNum"> 316 </span> : struct snapraid_task* task;</a>
<a name="317"><span class="lineNum"> 317 </span> : </a>
<a name="318"><span class="lineNum"> 318 </span> : /* the index that the IO may be waiting for */</a>
<a name="319"><span class="lineNum"> 319 </span><span class="lineCov"> 1177196 : unsigned waiting_index = io-&gt;reader_index;</span></a>
<a name="319"><span class="lineNum"> 319 </span><span class="lineCov"> 1176573 : unsigned waiting_index = io-&gt;reader_index;</span></a>
<a name="320"><span class="lineNum"> 320 </span> : </a>
<a name="321"><span class="lineNum"> 321 </span> : /* the index that worker just completed */</a>
<a name="322"><span class="lineNum"> 322 </span><span class="lineCov"> 1177196 : unsigned done_index = worker-&gt;index;</span></a>
<a name="322"><span class="lineNum"> 322 </span><span class="lineCov"> 1176573 : unsigned done_index = worker-&gt;index;</span></a>
<a name="323"><span class="lineNum"> 323 </span> : </a>
<a name="324"><span class="lineNum"> 324 </span> : /* get the new working task */</a>
<a name="325"><span class="lineNum"> 325 </span><span class="lineCov"> 1177196 : worker-&gt;index = next_index;</span></a>
<a name="326"><span class="lineNum"> 326 </span><span class="lineCov"> 1177196 : task = &amp;worker-&gt;task_map[worker-&gt;index];</span></a>
<a name="325"><span class="lineNum"> 325 </span><span class="lineCov"> 1176573 : worker-&gt;index = next_index;</span></a>
<a name="326"><span class="lineNum"> 326 </span><span class="lineCov"> 1176573 : task = &amp;worker-&gt;task_map[worker-&gt;index];</span></a>
<a name="327"><span class="lineNum"> 327 </span> : </a>
<a name="328"><span class="lineNum"> 328 </span> : /* if the just completed task is at this index */</a>
<a name="329"><span class="lineNum"> 329 </span><span class="lineCov"> 1177196 : if (done_index == waiting_index) {</span></a>
<a name="329"><span class="lineNum"> 329 </span><span class="lineCov"> 1176573 : if (done_index == waiting_index) {</span></a>
<a name="330"><span class="lineNum"> 330 </span> : /* notify the IO that a new read is complete */</a>
<a name="331"><span class="lineNum"> 331 </span><span class="lineCov"> 668 : thread_cond_signal_and_unlock(&amp;io-&gt;read_done, &amp;io-&gt;io_mutex);</span></a>
<a name="331"><span class="lineNum"> 331 </span><span class="lineCov"> 827 : thread_cond_signal_and_unlock(&amp;io-&gt;read_done, &amp;io-&gt;io_mutex);</span></a>
<a name="332"><span class="lineNum"> 332 </span> : } else {</a>
<a name="333"><span class="lineNum"> 333 </span><span class="lineCov"> 1176528 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="333"><span class="lineNum"> 333 </span><span class="lineCov"> 1175746 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="334"><span class="lineNum"> 334 </span> : }</a>
<a name="335"><span class="lineNum"> 335 </span> : </a>
<a name="336"><span class="lineNum"> 336 </span> : /* return the new task */</a>
<a name="337"><span class="lineNum"> 337 </span><span class="lineCov"> 1177196 : return task;</span></a>
<a name="337"><span class="lineNum"> 337 </span><span class="lineCov"> 1176573 : return task;</span></a>
<a name="338"><span class="lineNum"> 338 </span> : }</a>
<a name="339"><span class="lineNum"> 339 </span> : </a>
<a name="340"><span class="lineNum"> 340 </span> : /* otherwise wait for a read_sched event */</a>
<a name="341"><span class="lineNum"> 341 </span><span class="lineCov"> 1004268 : thread_cond_wait(&amp;io-&gt;read_sched, &amp;io-&gt;io_mutex);</span></a>
<a name="341"><span class="lineNum"> 341 </span><span class="lineCov"> 1002477 : thread_cond_wait(&amp;io-&gt;read_sched, &amp;io-&gt;io_mutex);</span></a>
<a name="342"><span class="lineNum"> 342 </span> : }</a>
<a name="343"><span class="lineNum"> 343 </span> : }</a>
<a name="344"><span class="lineNum"> 344 </span> : </a>
@ -409,60 +409,60 @@
<a name="347"><span class="lineNum"> 347 </span> : *</a>
<a name="348"><span class="lineNum"> 348 </span> : * This is the synchronization point for workers with the io.</a>
<a name="349"><span class="lineNum"> 349 </span> : */</a>
<a name="350"><span class="lineNum"> 350 </span><span class="lineCov"> 560074 : static struct snapraid_task* io_writer_step(struct snapraid_worker* worker, int state)</span></a>
<a name="350"><span class="lineNum"> 350 </span><span class="lineCov"> 559696 : static struct snapraid_task* io_writer_step(struct snapraid_worker* worker, int state)</span></a>
<a name="351"><span class="lineNum"> 351 </span> : {</a>
<a name="352"><span class="lineNum"> 352 </span><span class="lineCov"> 560074 : struct snapraid_io* io = worker-&gt;io;</span></a>
<a name="352"><span class="lineNum"> 352 </span><span class="lineCov"> 559696 : struct snapraid_io* io = worker-&gt;io;</span></a>
<a name="353"><span class="lineNum"> 353 </span> : int error_index;</a>
<a name="354"><span class="lineNum"> 354 </span> : </a>
<a name="355"><span class="lineNum"> 355 </span> : /* the synchronization is protected by the io mutex */</a>
<a name="356"><span class="lineNum"> 356 </span><span class="lineCov"> 560074 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="356"><span class="lineNum"> 356 </span><span class="lineCov"> 559696 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="357"><span class="lineNum"> 357 </span> : </a>
<a name="358"><span class="lineNum"> 358 </span> : /* counts the number of errors in the global state */</a>
<a name="359"><span class="lineNum"> 359 </span><span class="lineCov"> 560074 : error_index = state - IO_WRITER_ERROR_BASE;</span></a>
<a name="360"><span class="lineNum"> 360 </span><span class="lineCov"> 560074 : if (error_index &gt;= 0 &amp;&amp; error_index &lt; IO_WRITER_ERROR_MAX)</span></a>
<a name="359"><span class="lineNum"> 359 </span><span class="lineCov"> 559696 : error_index = state - IO_WRITER_ERROR_BASE;</span></a>
<a name="360"><span class="lineNum"> 360 </span><span class="lineCov"> 559696 : if (error_index &gt;= 0 &amp;&amp; error_index &lt; IO_WRITER_ERROR_MAX)</span></a>
<a name="361"><span class="lineNum"> 361 </span><span class="lineNoCov"> 0 : ++io-&gt;writer_error[error_index];</span></a>
<a name="362"><span class="lineNum"> 362 </span> : </a>
<a name="363"><span class="lineNum"> 363 </span><span class="lineCov"> 549486 : while (1) {</span></a>
<a name="363"><span class="lineNum"> 363 </span><span class="lineCov"> 551113 : while (1) {</span></a>
<a name="364"><span class="lineNum"> 364 </span> : unsigned next_index;</a>
<a name="365"><span class="lineNum"> 365 </span> : </a>
<a name="366"><span class="lineNum"> 366 </span> : /* get the next pending task */</a>
<a name="367"><span class="lineNum"> 367 </span><span class="lineCov"> 1109560 : next_index = (worker-&gt;index + 1) % io-&gt;io_max;</span></a>
<a name="367"><span class="lineNum"> 367 </span><span class="lineCov"> 1110809 : next_index = (worker-&gt;index + 1) % io-&gt;io_max;</span></a>
<a name="368"><span class="lineNum"> 368 </span> : </a>
<a name="369"><span class="lineNum"> 369 </span> : /* if the queue of pending tasks is not empty */</a>
<a name="370"><span class="lineNum"> 370 </span><span class="lineCov"> 1109560 : if (next_index != io-&gt;writer_index) {</span></a>
<a name="370"><span class="lineNum"> 370 </span><span class="lineCov"> 1110809 : if (next_index != io-&gt;writer_index) {</span></a>
<a name="371"><span class="lineNum"> 371 </span> : struct snapraid_task* task;</a>
<a name="372"><span class="lineNum"> 372 </span> : </a>
<a name="373"><span class="lineNum"> 373 </span> : /* the index that the IO may be waiting for */</a>
<a name="374"><span class="lineNum"> 374 </span><span class="lineCov"> 559582 : unsigned waiting_index = (io-&gt;writer_index + 1) % io-&gt;io_max;</span></a>
<a name="374"><span class="lineNum"> 374 </span><span class="lineCov"> 559204 : unsigned waiting_index = (io-&gt;writer_index + 1) % io-&gt;io_max;</span></a>
<a name="375"><span class="lineNum"> 375 </span> : </a>
<a name="376"><span class="lineNum"> 376 </span> : /* the index that worker just completed */</a>
<a name="377"><span class="lineNum"> 377 </span><span class="lineCov"> 559582 : unsigned done_index = worker-&gt;index;</span></a>
<a name="377"><span class="lineNum"> 377 </span><span class="lineCov"> 559204 : unsigned done_index = worker-&gt;index;</span></a>
<a name="378"><span class="lineNum"> 378 </span> : </a>
<a name="379"><span class="lineNum"> 379 </span> : /* get the new working task */</a>
<a name="380"><span class="lineNum"> 380 </span><span class="lineCov"> 559582 : worker-&gt;index = next_index;</span></a>
<a name="381"><span class="lineNum"> 381 </span><span class="lineCov"> 559582 : task = &amp;worker-&gt;task_map[worker-&gt;index];</span></a>
<a name="380"><span class="lineNum"> 380 </span><span class="lineCov"> 559204 : worker-&gt;index = next_index;</span></a>
<a name="381"><span class="lineNum"> 381 </span><span class="lineCov"> 559204 : task = &amp;worker-&gt;task_map[worker-&gt;index];</span></a>
<a name="382"><span class="lineNum"> 382 </span> : </a>
<a name="383"><span class="lineNum"> 383 </span> : /* if the just completed task is at this index */</a>
<a name="384"><span class="lineNum"> 384 </span><span class="lineCov"> 559582 : if (done_index == waiting_index) {</span></a>
<a name="384"><span class="lineNum"> 384 </span><span class="lineCov"> 559204 : if (done_index == waiting_index) {</span></a>
<a name="385"><span class="lineNum"> 385 </span> : /* notify the IO that a new write is complete */</a>
<a name="386"><span class="lineNum"> 386 </span><span class="lineNoCov"> 0 : thread_cond_signal_and_unlock(&amp;io-&gt;write_done, &amp;io-&gt;io_mutex);</span></a>
<a name="387"><span class="lineNum"> 387 </span> : } else {</a>
<a name="388"><span class="lineNum"> 388 </span><span class="lineCov"> 559582 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="388"><span class="lineNum"> 388 </span><span class="lineCov"> 559204 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="389"><span class="lineNum"> 389 </span> : }</a>
<a name="390"><span class="lineNum"> 390 </span> : </a>
<a name="391"><span class="lineNum"> 391 </span> : /* return the new task */</a>
<a name="392"><span class="lineNum"> 392 </span><span class="lineCov"> 559582 : return task;</span></a>
<a name="392"><span class="lineNum"> 392 </span><span class="lineCov"> 559204 : return task;</span></a>
<a name="393"><span class="lineNum"> 393 </span> : }</a>
<a name="394"><span class="lineNum"> 394 </span> : </a>
<a name="395"><span class="lineNum"> 395 </span> : /* check if the worker has to exit */</a>
<a name="396"><span class="lineNum"> 396 </span> : /* but only if there is no work to do */</a>
<a name="397"><span class="lineNum"> 397 </span><span class="lineCov"> 549978 : if (io-&gt;done) {</span></a>
<a name="397"><span class="lineNum"> 397 </span><span class="lineCov"> 551605 : if (io-&gt;done) {</span></a>
<a name="398"><span class="lineNum"> 398 </span><span class="lineCov"> 492 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="399"><span class="lineNum"> 399 </span><span class="lineCov"> 492 : return 0;</span></a>
<a name="400"><span class="lineNum"> 400 </span> : }</a>
<a name="401"><span class="lineNum"> 401 </span> : </a>
<a name="402"><span class="lineNum"> 402 </span> : /* otherwise wait for a write_sched event */</a>
<a name="403"><span class="lineNum"> 403 </span><span class="lineCov"> 549486 : thread_cond_wait(&amp;io-&gt;write_sched, &amp;io-&gt;io_mutex);</span></a>
<a name="403"><span class="lineNum"> 403 </span><span class="lineCov"> 551113 : thread_cond_wait(&amp;io-&gt;write_sched, &amp;io-&gt;io_mutex);</span></a>
<a name="404"><span class="lineNum"> 404 </span> : }</a>
<a name="405"><span class="lineNum"> 405 </span> : }</a>
<a name="406"><span class="lineNum"> 406 </span> : </a>
@ -471,87 +471,87 @@
<a name="409"><span class="lineNum"> 409 </span> : *</a>
<a name="410"><span class="lineNum"> 410 </span> : * This is the synchronization point for workers with the io.</a>
<a name="411"><span class="lineNum"> 411 </span> : */</a>
<a name="412"><span class="lineNum"> 412 </span><span class="lineCov"> 146427 : static block_off_t io_read_next_thread(struct snapraid_io* io, void*** buffer)</span></a>
<a name="412"><span class="lineNum"> 412 </span><span class="lineCov"> 146364 : static block_off_t io_read_next_thread(struct snapraid_io* io, void*** buffer)</span></a>
<a name="413"><span class="lineNum"> 413 </span> : {</a>
<a name="414"><span class="lineNum"> 414 </span> : block_off_t blockcur_schedule;</a>
<a name="415"><span class="lineNum"> 415 </span> : block_off_t blockcur_caller;</a>
<a name="416"><span class="lineNum"> 416 </span> : unsigned i;</a>
<a name="417"><span class="lineNum"> 417 </span> : </a>
<a name="418"><span class="lineNum"> 418 </span> : /* get the next parity position to process */</a>
<a name="419"><span class="lineNum"> 419 </span><span class="lineCov"> 146427 : blockcur_schedule = io_position_next(io);</span></a>
<a name="419"><span class="lineNum"> 419 </span><span class="lineCov"> 146364 : blockcur_schedule = io_position_next(io);</span></a>
<a name="420"><span class="lineNum"> 420 </span> : </a>
<a name="421"><span class="lineNum"> 421 </span> : /* ensure that all data/parity was read */</a>
<a name="422"><span class="lineNum"> 422 </span><span class="lineCov"> 146427 : assert(io-&gt;reader_list[0] == io-&gt;reader_max);</span></a>
<a name="422"><span class="lineNum"> 422 </span><span class="lineCov"> 146364 : assert(io-&gt;reader_list[0] == io-&gt;reader_max);</span></a>
<a name="423"><span class="lineNum"> 423 </span> : </a>
<a name="424"><span class="lineNum"> 424 </span> : /* setup the list of workers to process */</a>
<a name="425"><span class="lineNum"> 425 </span><span class="lineCov"> 1383204 : for (i = 0; i &lt;= io-&gt;reader_max; ++i)</span></a>
<a name="426"><span class="lineNum"> 426 </span><span class="lineCov"> 1236777 : io-&gt;reader_list[i] = i;</span></a>
<a name="425"><span class="lineNum"> 425 </span><span class="lineCov"> 1382700 : for (i = 0; i &lt;= io-&gt;reader_max; ++i)</span></a>
<a name="426"><span class="lineNum"> 426 </span><span class="lineCov"> 1236336 : io-&gt;reader_list[i] = i;</span></a>
<a name="427"><span class="lineNum"> 427 </span> : </a>
<a name="428"><span class="lineNum"> 428 </span> : /* the synchronization is protected by the io mutex */</a>
<a name="429"><span class="lineNum"> 429 </span><span class="lineCov"> 146427 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="429"><span class="lineNum"> 429 </span><span class="lineCov"> 146364 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="430"><span class="lineNum"> 430 </span> : </a>
<a name="431"><span class="lineNum"> 431 </span> : /* schedule the next read */</a>
<a name="432"><span class="lineNum"> 432 </span><span class="lineCov"> 146427 : io_reader_sched(io, io-&gt;reader_index, blockcur_schedule);</span></a>
<a name="432"><span class="lineNum"> 432 </span><span class="lineCov"> 146364 : io_reader_sched(io, io-&gt;reader_index, blockcur_schedule);</span></a>
<a name="433"><span class="lineNum"> 433 </span> : </a>
<a name="434"><span class="lineNum"> 434 </span> : /* set the index for the tasks to return to the caller */</a>
<a name="435"><span class="lineNum"> 435 </span><span class="lineCov"> 146427 : io-&gt;reader_index = (io-&gt;reader_index + 1) % io-&gt;io_max;</span></a>
<a name="435"><span class="lineNum"> 435 </span><span class="lineCov"> 146364 : io-&gt;reader_index = (io-&gt;reader_index + 1) % io-&gt;io_max;</span></a>
<a name="436"><span class="lineNum"> 436 </span> : </a>
<a name="437"><span class="lineNum"> 437 </span> : /* get the position to operate at high level from one task */</a>
<a name="438"><span class="lineNum"> 438 </span><span class="lineCov"> 146427 : blockcur_caller = io-&gt;reader_map[0].task_map[io-&gt;reader_index].position;</span></a>
<a name="438"><span class="lineNum"> 438 </span><span class="lineCov"> 146364 : blockcur_caller = io-&gt;reader_map[0].task_map[io-&gt;reader_index].position;</span></a>
<a name="439"><span class="lineNum"> 439 </span> : </a>
<a name="440"><span class="lineNum"> 440 </span> : /* set the buffer to use */</a>
<a name="441"><span class="lineNum"> 441 </span><span class="lineCov"> 146427 : *buffer = io-&gt;buffer_map[io-&gt;reader_index];</span></a>
<a name="441"><span class="lineNum"> 441 </span><span class="lineCov"> 146364 : *buffer = io-&gt;buffer_map[io-&gt;reader_index];</span></a>
<a name="442"><span class="lineNum"> 442 </span> : </a>
<a name="443"><span class="lineNum"> 443 </span> : /* signal all the workers that there is a new pending task */</a>
<a name="444"><span class="lineNum"> 444 </span><span class="lineCov"> 146427 : thread_cond_broadcast_and_unlock(&amp;io-&gt;read_sched, &amp;io-&gt;io_mutex);</span></a>
<a name="444"><span class="lineNum"> 444 </span><span class="lineCov"> 146364 : thread_cond_broadcast_and_unlock(&amp;io-&gt;read_sched, &amp;io-&gt;io_mutex);</span></a>
<a name="445"><span class="lineNum"> 445 </span> : </a>
<a name="446"><span class="lineNum"> 446 </span><span class="lineCov"> 146427 : return blockcur_caller;</span></a>
<a name="446"><span class="lineNum"> 446 </span><span class="lineCov"> 146364 : return blockcur_caller;</span></a>
<a name="447"><span class="lineNum"> 447 </span> : }</a>
<a name="448"><span class="lineNum"> 448 </span> : </a>
<a name="449"><span class="lineNum"> 449 </span><span class="lineCov"> 111042 : static void io_write_preset_thread(struct snapraid_io* io, block_off_t blockcur, int skip)</span></a>
<a name="449"><span class="lineNum"> 449 </span><span class="lineCov"> 110979 : static void io_write_preset_thread(struct snapraid_io* io, block_off_t blockcur, int skip)</span></a>
<a name="450"><span class="lineNum"> 450 </span> : {</a>
<a name="451"><span class="lineNum"> 451 </span> : (void)io;</a>
<a name="452"><span class="lineNum"> 452 </span> : (void)blockcur;</a>
<a name="453"><span class="lineNum"> 453 </span> : (void)skip;</a>
<a name="454"><span class="lineNum"> 454 </span><span class="lineCov"> 111042 : }</span></a>
<a name="454"><span class="lineNum"> 454 </span><span class="lineCov"> 110979 : }</span></a>
<a name="455"><span class="lineNum"> 455 </span> : </a>
<a name="456"><span class="lineNum"> 456 </span><span class="lineCov"> 111042 : static void io_write_next_thread(struct snapraid_io* io, block_off_t blockcur, int skip, int* writer_error)</span></a>
<a name="456"><span class="lineNum"> 456 </span><span class="lineCov"> 110979 : static void io_write_next_thread(struct snapraid_io* io, block_off_t blockcur, int skip, int* writer_error)</span></a>
<a name="457"><span class="lineNum"> 457 </span> : {</a>
<a name="458"><span class="lineNum"> 458 </span> : unsigned i;</a>
<a name="459"><span class="lineNum"> 459 </span> : </a>
<a name="460"><span class="lineNum"> 460 </span> : /* ensure that all parity was written */</a>
<a name="461"><span class="lineNum"> 461 </span><span class="lineCov"> 111042 : assert(io-&gt;writer_list[0] == io-&gt;writer_max);</span></a>
<a name="461"><span class="lineNum"> 461 </span><span class="lineCov"> 110979 : assert(io-&gt;writer_list[0] == io-&gt;writer_max);</span></a>
<a name="462"><span class="lineNum"> 462 </span> : </a>
<a name="463"><span class="lineNum"> 463 </span> : /* setup the list of workers to process */</a>
<a name="464"><span class="lineNum"> 464 </span><span class="lineCov"> 781666 : for (i = 0; i &lt;= io-&gt;writer_max; ++i)</span></a>
<a name="465"><span class="lineNum"> 465 </span><span class="lineCov"> 670624 : io-&gt;writer_list[i] = i;</span></a>
<a name="464"><span class="lineNum"> 464 </span><span class="lineCov"> 781162 : for (i = 0; i &lt;= io-&gt;writer_max; ++i)</span></a>
<a name="465"><span class="lineNum"> 465 </span><span class="lineCov"> 670183 : io-&gt;writer_list[i] = i;</span></a>
<a name="466"><span class="lineNum"> 466 </span> : </a>
<a name="467"><span class="lineNum"> 467 </span> : /* the synchronization is protected by the io mutex */</a>
<a name="468"><span class="lineNum"> 468 </span><span class="lineCov"> 111042 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="468"><span class="lineNum"> 468 </span><span class="lineCov"> 110979 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="469"><span class="lineNum"> 469 </span> : </a>
<a name="470"><span class="lineNum"> 470 </span> : /* report errors */</a>
<a name="471"><span class="lineNum"> 471 </span><span class="lineCov"> 555210 : for (i = 0; i &lt; IO_WRITER_ERROR_MAX; ++i) {</span></a>
<a name="472"><span class="lineNum"> 472 </span><span class="lineCov"> 444168 : writer_error[i] = io-&gt;writer_error[i];</span></a>
<a name="473"><span class="lineNum"> 473 </span><span class="lineCov"> 444168 : io-&gt;writer_error[i] = 0;</span></a>
<a name="471"><span class="lineNum"> 471 </span><span class="lineCov"> 554895 : for (i = 0; i &lt; IO_WRITER_ERROR_MAX; ++i) {</span></a>
<a name="472"><span class="lineNum"> 472 </span><span class="lineCov"> 443916 : writer_error[i] = io-&gt;writer_error[i];</span></a>
<a name="473"><span class="lineNum"> 473 </span><span class="lineCov"> 443916 : io-&gt;writer_error[i] = 0;</span></a>
<a name="474"><span class="lineNum"> 474 </span> : }</a>
<a name="475"><span class="lineNum"> 475 </span> : </a>
<a name="476"><span class="lineNum"> 476 </span><span class="lineCov"> 111042 : if (skip) {</span></a>
<a name="476"><span class="lineNum"> 476 </span><span class="lineCov"> 110979 : if (skip) {</span></a>
<a name="477"><span class="lineNum"> 477 </span> : /* skip the next write */</a>
<a name="478"><span class="lineNum"> 478 </span><span class="lineCov"> 931 : io_writer_sched_empty(io, io-&gt;writer_index, blockcur);</span></a>
<a name="478"><span class="lineNum"> 478 </span><span class="lineCov"> 920 : io_writer_sched_empty(io, io-&gt;writer_index, blockcur);</span></a>
<a name="479"><span class="lineNum"> 479 </span> : } else {</a>
<a name="480"><span class="lineNum"> 480 </span> : /* schedule the next write */</a>
<a name="481"><span class="lineNum"> 481 </span><span class="lineCov"> 110111 : io_writer_sched(io, io-&gt;writer_index, blockcur);</span></a>
<a name="481"><span class="lineNum"> 481 </span><span class="lineCov"> 110059 : io_writer_sched(io, io-&gt;writer_index, blockcur);</span></a>
<a name="482"><span class="lineNum"> 482 </span> : }</a>
<a name="483"><span class="lineNum"> 483 </span> : </a>
<a name="484"><span class="lineNum"> 484 </span> : /* at this point the writers must be in sync with the readers */</a>
<a name="485"><span class="lineNum"> 485 </span><span class="lineCov"> 111042 : assert(io-&gt;writer_index == io-&gt;reader_index);</span></a>
<a name="485"><span class="lineNum"> 485 </span><span class="lineCov"> 110979 : assert(io-&gt;writer_index == io-&gt;reader_index);</span></a>
<a name="486"><span class="lineNum"> 486 </span> : </a>
<a name="487"><span class="lineNum"> 487 </span> : /* set the index to be used for the next write */</a>
<a name="488"><span class="lineNum"> 488 </span><span class="lineCov"> 111042 : io-&gt;writer_index = (io-&gt;writer_index + 1) % io-&gt;io_max;</span></a>
<a name="488"><span class="lineNum"> 488 </span><span class="lineCov"> 110979 : io-&gt;writer_index = (io-&gt;writer_index + 1) % io-&gt;io_max;</span></a>
<a name="489"><span class="lineNum"> 489 </span> : </a>
<a name="490"><span class="lineNum"> 490 </span> : /* signal all the workers that there is a new pending task */</a>
<a name="491"><span class="lineNum"> 491 </span><span class="lineCov"> 111042 : thread_cond_broadcast_and_unlock(&amp;io-&gt;write_sched, &amp;io-&gt;io_mutex);</span></a>
<a name="492"><span class="lineNum"> 492 </span><span class="lineCov"> 111042 : }</span></a>
<a name="491"><span class="lineNum"> 491 </span><span class="lineCov"> 110979 : thread_cond_broadcast_and_unlock(&amp;io-&gt;write_sched, &amp;io-&gt;io_mutex);</span></a>
<a name="492"><span class="lineNum"> 492 </span><span class="lineCov"> 110979 : }</span></a>
<a name="493"><span class="lineNum"> 493 </span> : </a>
<a name="494"><span class="lineNum"> 494 </span><span class="lineCov"> 1 : static void io_refresh_thread(struct snapraid_io* io)</span></a>
<a name="495"><span class="lineNum"> 495 </span> : {</a>
@ -599,120 +599,120 @@
<a name="537"><span class="lineNum"> 537 </span><span class="lineCov"> 1 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="538"><span class="lineNum"> 538 </span><span class="lineCov"> 1 : }</span></a>
<a name="539"><span class="lineNum"> 539 </span> : </a>
<a name="540"><span class="lineNum"> 540 </span><span class="lineCov"> 105587 : static void io_flush_thread(struct snapraid_io* io)</span></a>
<a name="540"><span class="lineNum"> 540 </span><span class="lineCov"> 108200 : static void io_flush_thread(struct snapraid_io* io)</span></a>
<a name="541"><span class="lineNum"> 541 </span> : {</a>
<a name="542"><span class="lineNum"> 542 </span> : unsigned i;</a>
<a name="543"><span class="lineNum"> 543 </span> : </a>
<a name="544"><span class="lineNum"> 544 </span><span class="lineCov"> 105499 : while (1) {</span></a>
<a name="545"><span class="lineNum"> 545 </span><span class="lineCov"> 105587 : int all_done = 1;</span></a>
<a name="544"><span class="lineNum"> 544 </span><span class="lineCov"> 108112 : while (1) {</span></a>
<a name="545"><span class="lineNum"> 545 </span><span class="lineCov"> 108200 : int all_done = 1;</span></a>
<a name="546"><span class="lineNum"> 546 </span> : </a>
<a name="547"><span class="lineNum"> 547 </span> : /* the synchronization is protected by the io mutex */</a>
<a name="548"><span class="lineNum"> 548 </span><span class="lineCov"> 105587 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="548"><span class="lineNum"> 548 </span><span class="lineCov"> 108200 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="549"><span class="lineNum"> 549 </span> : </a>
<a name="550"><span class="lineNum"> 550 </span><span class="lineCov"> 161400 : for (i = 0; i &lt; io-&gt;writer_max; ++i) {</span></a>
<a name="551"><span class="lineNum"> 551 </span><span class="lineCov"> 161312 : struct snapraid_worker* worker = &amp;io-&gt;writer_map[i];</span></a>
<a name="550"><span class="lineNum"> 550 </span><span class="lineCov"> 194281 : for (i = 0; i &lt; io-&gt;writer_max; ++i) {</span></a>
<a name="551"><span class="lineNum"> 551 </span><span class="lineCov"> 194193 : struct snapraid_worker* worker = &amp;io-&gt;writer_map[i];</span></a>
<a name="552"><span class="lineNum"> 552 </span> : </a>
<a name="553"><span class="lineNum"> 553 </span> : /* get the next pending task */</a>
<a name="554"><span class="lineNum"> 554 </span><span class="lineCov"> 161312 : unsigned next_index = (worker-&gt;index + 1) % io-&gt;io_max;</span></a>
<a name="554"><span class="lineNum"> 554 </span><span class="lineCov"> 194193 : unsigned next_index = (worker-&gt;index + 1) % io-&gt;io_max;</span></a>
<a name="555"><span class="lineNum"> 555 </span> : </a>
<a name="556"><span class="lineNum"> 556 </span> : /* if the queue of pending tasks is not empty */</a>
<a name="557"><span class="lineNum"> 557 </span><span class="lineCov"> 161312 : if (next_index != io-&gt;writer_index) {</span></a>
<a name="558"><span class="lineNum"> 558 </span><span class="lineCov"> 105499 : all_done = 0;</span></a>
<a name="559"><span class="lineNum"> 559 </span><span class="lineCov"> 105499 : break;</span></a>
<a name="557"><span class="lineNum"> 557 </span><span class="lineCov"> 194193 : if (next_index != io-&gt;writer_index) {</span></a>
<a name="558"><span class="lineNum"> 558 </span><span class="lineCov"> 108112 : all_done = 0;</span></a>
<a name="559"><span class="lineNum"> 559 </span><span class="lineCov"> 108112 : break;</span></a>
<a name="560"><span class="lineNum"> 560 </span> : }</a>
<a name="561"><span class="lineNum"> 561 </span> : }</a>
<a name="562"><span class="lineNum"> 562 </span> : </a>
<a name="563"><span class="lineNum"> 563 </span><span class="lineCov"> 105587 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="563"><span class="lineNum"> 563 </span><span class="lineCov"> 108200 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="564"><span class="lineNum"> 564 </span> : </a>
<a name="565"><span class="lineNum"> 565 </span><span class="lineCov"> 105587 : if (all_done)</span></a>
<a name="565"><span class="lineNum"> 565 </span><span class="lineCov"> 108200 : if (all_done)</span></a>
<a name="566"><span class="lineNum"> 566 </span><span class="lineCov"> 88 : break;</span></a>
<a name="567"><span class="lineNum"> 567 </span> : </a>
<a name="568"><span class="lineNum"> 568 </span> : /* wait for something to complete */</a>
<a name="569"><span class="lineNum"> 569 </span><span class="lineCov"> 105499 : thread_yield();</span></a>
<a name="569"><span class="lineNum"> 569 </span><span class="lineCov"> 108112 : thread_yield();</span></a>
<a name="570"><span class="lineNum"> 570 </span> : }</a>
<a name="571"><span class="lineNum"> 571 </span><span class="lineCov"> 88 : }</span></a>
<a name="572"><span class="lineNum"> 572 </span> : </a>
<a name="573"><span class="lineNum"> 573 </span><span class="lineCov"> 1089660 : static struct snapraid_task* io_task_read_thread(struct snapraid_io* io, unsigned base, unsigned count, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span></a>
<a name="573"><span class="lineNum"> 573 </span><span class="lineCov"> 1089282 : static struct snapraid_task* io_task_read_thread(struct snapraid_io* io, unsigned base, unsigned count, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span></a>
<a name="574"><span class="lineNum"> 574 </span> : {</a>
<a name="575"><span class="lineNum"> 575 </span> : unsigned waiting_cycle;</a>
<a name="576"><span class="lineNum"> 576 </span> : </a>
<a name="577"><span class="lineNum"> 577 </span> : /* count the waiting cycle */</a>
<a name="578"><span class="lineNum"> 578 </span><span class="lineCov"> 1089660 : waiting_cycle = 0;</span></a>
<a name="578"><span class="lineNum"> 578 </span><span class="lineCov"> 1089282 : waiting_cycle = 0;</span></a>
<a name="579"><span class="lineNum"> 579 </span> : </a>
<a name="580"><span class="lineNum"> 580 </span> : /* clear the waiting indexes */</a>
<a name="581"><span class="lineNum"> 581 </span><span class="lineCov"> 1089660 : *waiting_mac = 0;</span></a>
<a name="581"><span class="lineNum"> 581 </span><span class="lineCov"> 1089282 : *waiting_mac = 0;</span></a>
<a name="582"><span class="lineNum"> 582 </span> : </a>
<a name="583"><span class="lineNum"> 583 </span> : /* the synchronization is protected by the io mutex */</a>
<a name="584"><span class="lineNum"> 584 </span><span class="lineCov"> 1089660 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="584"><span class="lineNum"> 584 </span><span class="lineCov"> 1089282 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="585"><span class="lineNum"> 585 </span> : </a>
<a name="586"><span class="lineNum"> 586 </span><span class="lineCov"> 576 : while (1) {</span></a>
<a name="586"><span class="lineNum"> 586 </span><span class="lineCov"> 700 : while (1) {</span></a>
<a name="587"><span class="lineNum"> 587 </span> : unsigned char* let;</a>
<a name="588"><span class="lineNum"> 588 </span> : unsigned busy_index;</a>
<a name="589"><span class="lineNum"> 589 </span> : </a>
<a name="590"><span class="lineNum"> 590 </span> : /* get the index the IO is using */</a>
<a name="591"><span class="lineNum"> 591 </span> : /* we must ensure that this index has not a read in progress */</a>
<a name="592"><span class="lineNum"> 592 </span> : /* to avoid a concurrent access */</a>
<a name="593"><span class="lineNum"> 593 </span><span class="lineCov"> 1090236 : busy_index = io-&gt;reader_index;</span></a>
<a name="593"><span class="lineNum"> 593 </span><span class="lineCov"> 1089982 : busy_index = io-&gt;reader_index;</span></a>
<a name="594"><span class="lineNum"> 594 </span> : </a>
<a name="595"><span class="lineNum"> 595 </span> : /* search for a worker that has already finished */</a>
<a name="596"><span class="lineNum"> 596 </span><span class="lineCov"> 1090236 : let = &amp;io-&gt;reader_list[0];</span></a>
<a name="597"><span class="lineNum"> 597 </span><span class="lineCov"> 4632 : while (1) {</span></a>
<a name="598"><span class="lineNum"> 598 </span><span class="lineCov"> 1094868 : unsigned i = *let;</span></a>
<a name="596"><span class="lineNum"> 596 </span><span class="lineCov"> 1089982 : let = &amp;io-&gt;reader_list[0];</span></a>
<a name="597"><span class="lineNum"> 597 </span><span class="lineCov"> 5383 : while (1) {</span></a>
<a name="598"><span class="lineNum"> 598 </span><span class="lineCov"> 1095365 : unsigned i = *let;</span></a>
<a name="599"><span class="lineNum"> 599 </span> : </a>
<a name="600"><span class="lineNum"> 600 </span> : /* if we are at the end */</a>
<a name="601"><span class="lineNum"> 601 </span><span class="lineCov"> 1094868 : if (i == io-&gt;reader_max)</span></a>
<a name="602"><span class="lineNum"> 602 </span><span class="lineCov"> 576 : break;</span></a>
<a name="601"><span class="lineNum"> 601 </span><span class="lineCov"> 1095365 : if (i == io-&gt;reader_max)</span></a>
<a name="602"><span class="lineNum"> 602 </span><span class="lineCov"> 700 : break;</span></a>
<a name="603"><span class="lineNum"> 603 </span> : </a>
<a name="604"><span class="lineNum"> 604 </span> : /* if it's in range */</a>
<a name="605"><span class="lineNum"> 605 </span><span class="lineCov"> 1094292 : if (base &lt;= i &amp;&amp; i &lt; base + count) {</span></a>
<a name="605"><span class="lineNum"> 605 </span><span class="lineCov"> 1094665 : if (base &lt;= i &amp;&amp; i &lt; base + count) {</span></a>
<a name="606"><span class="lineNum"> 606 </span> : struct snapraid_worker* worker;</a>
<a name="607"><span class="lineNum"> 607 </span> : </a>
<a name="608"><span class="lineNum"> 608 </span> : /* if it's the first cycle */</a>
<a name="609"><span class="lineNum"> 609 </span><span class="lineCov"> 1091472 : if (waiting_cycle == 0) {</span></a>
<a name="609"><span class="lineNum"> 609 </span><span class="lineCov"> 1091581 : if (waiting_cycle == 0) {</span></a>
<a name="610"><span class="lineNum"> 610 </span> : /* store the waiting indexes */</a>
<a name="611"><span class="lineNum"> 611 </span><span class="lineCov"> 1090868 : waiting_map[(*waiting_mac)++] = i - base;</span></a>
<a name="611"><span class="lineNum"> 611 </span><span class="lineCov"> 1090833 : waiting_map[(*waiting_mac)++] = i - base;</span></a>
<a name="612"><span class="lineNum"> 612 </span> : }</a>
<a name="613"><span class="lineNum"> 613 </span> : </a>
<a name="614"><span class="lineNum"> 614 </span><span class="lineCov"> 1091472 : worker = &amp;io-&gt;reader_map[i];</span></a>
<a name="614"><span class="lineNum"> 614 </span><span class="lineCov"> 1091581 : worker = &amp;io-&gt;reader_map[i];</span></a>
<a name="615"><span class="lineNum"> 615 </span> : </a>
<a name="616"><span class="lineNum"> 616 </span> : /* if the worker has finished this index */</a>
<a name="617"><span class="lineNum"> 617 </span><span class="lineCov"> 1091472 : if (busy_index != worker-&gt;index) {</span></a>
<a name="617"><span class="lineNum"> 617 </span><span class="lineCov"> 1091581 : if (busy_index != worker-&gt;index) {</span></a>
<a name="618"><span class="lineNum"> 618 </span> : struct snapraid_task* task;</a>
<a name="619"><span class="lineNum"> 619 </span> : </a>
<a name="620"><span class="lineNum"> 620 </span><span class="lineCov"> 1089660 : task = &amp;worker-&gt;task_map[io-&gt;reader_index];</span></a>
<a name="620"><span class="lineNum"> 620 </span><span class="lineCov"> 1089282 : task = &amp;worker-&gt;task_map[io-&gt;reader_index];</span></a>
<a name="621"><span class="lineNum"> 621 </span> : </a>
<a name="622"><span class="lineNum"> 622 </span><span class="lineCov"> 1089660 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="622"><span class="lineNum"> 622 </span><span class="lineCov"> 1089282 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="623"><span class="lineNum"> 623 </span> : </a>
<a name="624"><span class="lineNum"> 624 </span> : /* mark the worker as processed */</a>
<a name="625"><span class="lineNum"> 625 </span> : /* setting the previous one to point at the next one */</a>
<a name="626"><span class="lineNum"> 626 </span><span class="lineCov"> 1089660 : *let = io-&gt;reader_list[i + 1];</span></a>
<a name="626"><span class="lineNum"> 626 </span><span class="lineCov"> 1089282 : *let = io-&gt;reader_list[i + 1];</span></a>
<a name="627"><span class="lineNum"> 627 </span> : </a>
<a name="628"><span class="lineNum"> 628 </span> : /* return the position */</a>
<a name="629"><span class="lineNum"> 629 </span><span class="lineCov"> 1089660 : *pos = i - base;</span></a>
<a name="629"><span class="lineNum"> 629 </span><span class="lineCov"> 1089282 : *pos = i - base;</span></a>
<a name="630"><span class="lineNum"> 630 </span> : </a>
<a name="631"><span class="lineNum"> 631 </span> : /* on the first cycle, no one is waiting */</a>
<a name="632"><span class="lineNum"> 632 </span><span class="lineCov"> 1089660 : if (waiting_cycle == 0)</span></a>
<a name="633"><span class="lineNum"> 633 </span><span class="lineCov"> 1089084 : *waiting_mac = 0;</span></a>
<a name="632"><span class="lineNum"> 632 </span><span class="lineCov"> 1089282 : if (waiting_cycle == 0)</span></a>
<a name="633"><span class="lineNum"> 633 </span><span class="lineCov"> 1088587 : *waiting_mac = 0;</span></a>
<a name="634"><span class="lineNum"> 634 </span> : </a>
<a name="635"><span class="lineNum"> 635 </span><span class="lineCov"> 1089660 : return task;</span></a>
<a name="635"><span class="lineNum"> 635 </span><span class="lineCov"> 1089282 : return task;</span></a>
<a name="636"><span class="lineNum"> 636 </span> : }</a>
<a name="637"><span class="lineNum"> 637 </span> : }</a>
<a name="638"><span class="lineNum"> 638 </span> : </a>
<a name="639"><span class="lineNum"> 639 </span> : /* next position to check */</a>
<a name="640"><span class="lineNum"> 640 </span><span class="lineCov"> 4632 : let = &amp;io-&gt;reader_list[i + 1];</span></a>
<a name="640"><span class="lineNum"> 640 </span><span class="lineCov"> 5383 : let = &amp;io-&gt;reader_list[i + 1];</span></a>
<a name="641"><span class="lineNum"> 641 </span> : }</a>
<a name="642"><span class="lineNum"> 642 </span> : </a>
<a name="643"><span class="lineNum"> 643 </span> : /* if no worker is ready, wait for an event */</a>
<a name="644"><span class="lineNum"> 644 </span><span class="lineCov"> 576 : thread_cond_wait(&amp;io-&gt;read_done, &amp;io-&gt;io_mutex);</span></a>
<a name="644"><span class="lineNum"> 644 </span><span class="lineCov"> 700 : thread_cond_wait(&amp;io-&gt;read_done, &amp;io-&gt;io_mutex);</span></a>
<a name="645"><span class="lineNum"> 645 </span> : </a>
<a name="646"><span class="lineNum"> 646 </span> : /* count the cycles */</a>
<a name="647"><span class="lineNum"> 647 </span><span class="lineCov"> 576 : ++waiting_cycle;</span></a>
<a name="647"><span class="lineNum"> 647 </span><span class="lineCov"> 700 : ++waiting_cycle;</span></a>
<a name="648"><span class="lineNum"> 648 </span> : }</a>
<a name="649"><span class="lineNum"> 649 </span> : }</a>
<a name="650"><span class="lineNum"> 650 </span> : </a>
<a name="651"><span class="lineNum"> 651 </span><span class="lineCov"> 877956 : static struct snapraid_task* io_data_read_thread(struct snapraid_io* io, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span></a>
<a name="651"><span class="lineNum"> 651 </span><span class="lineCov"> 877578 : static struct snapraid_task* io_data_read_thread(struct snapraid_io* io, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span></a>
<a name="652"><span class="lineNum"> 652 </span> : {</a>
<a name="653"><span class="lineNum"> 653 </span><span class="lineCov"> 877956 : return io_task_read_thread(io, io-&gt;data_base, io-&gt;data_count, pos, waiting_map, waiting_mac);</span></a>
<a name="653"><span class="lineNum"> 653 </span><span class="lineCov"> 877578 : return io_task_read_thread(io, io-&gt;data_base, io-&gt;data_count, pos, waiting_map, waiting_mac);</span></a>
<a name="654"><span class="lineNum"> 654 </span> : }</a>
<a name="655"><span class="lineNum"> 655 </span> : </a>
<a name="656"><span class="lineNum"> 656 </span><span class="lineCov"> 211704 : static struct snapraid_task* io_parity_read_thread(struct snapraid_io* io, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span></a>
@ -720,18 +720,18 @@
<a name="658"><span class="lineNum"> 658 </span><span class="lineCov"> 211704 : return io_task_read_thread(io, io-&gt;parity_base, io-&gt;parity_count, pos, waiting_map, waiting_mac);</span></a>
<a name="659"><span class="lineNum"> 659 </span> : }</a>
<a name="660"><span class="lineNum"> 660 </span> : </a>
<a name="661"><span class="lineNum"> 661 </span><span class="lineCov"> 559582 : static void io_parity_write_thread(struct snapraid_io* io, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span></a>
<a name="661"><span class="lineNum"> 661 </span><span class="lineCov"> 559204 : static void io_parity_write_thread(struct snapraid_io* io, unsigned* pos, unsigned* waiting_map, unsigned* waiting_mac)</span></a>
<a name="662"><span class="lineNum"> 662 </span> : {</a>
<a name="663"><span class="lineNum"> 663 </span> : unsigned waiting_cycle;</a>
<a name="664"><span class="lineNum"> 664 </span> : </a>
<a name="665"><span class="lineNum"> 665 </span> : /* count the waiting cycle */</a>
<a name="666"><span class="lineNum"> 666 </span><span class="lineCov"> 559582 : waiting_cycle = 0;</span></a>
<a name="666"><span class="lineNum"> 666 </span><span class="lineCov"> 559204 : waiting_cycle = 0;</span></a>
<a name="667"><span class="lineNum"> 667 </span> : </a>
<a name="668"><span class="lineNum"> 668 </span> : /* clear the waiting indexes */</a>
<a name="669"><span class="lineNum"> 669 </span><span class="lineCov"> 559582 : *waiting_mac = 0;</span></a>
<a name="669"><span class="lineNum"> 669 </span><span class="lineCov"> 559204 : *waiting_mac = 0;</span></a>
<a name="670"><span class="lineNum"> 670 </span> : </a>
<a name="671"><span class="lineNum"> 671 </span> : /* the synchronization is protected by the io mutex */</a>
<a name="672"><span class="lineNum"> 672 </span><span class="lineCov"> 559582 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="672"><span class="lineNum"> 672 </span><span class="lineCov"> 559204 : thread_mutex_lock(&amp;io-&gt;io_mutex);</span></a>
<a name="673"><span class="lineNum"> 673 </span> : </a>
<a name="674"><span class="lineNum"> 674 </span><span class="lineNoCov"> 0 : while (1) {</span></a>
<a name="675"><span class="lineNum"> 675 </span> : unsigned char* let;</a>
@ -742,45 +742,45 @@
<a name="680"><span class="lineNum"> 680 </span> : /* to avoid a concurrent access */</a>
<a name="681"><span class="lineNum"> 681 </span> : /* note that we are already sure that a write is not in progress */</a>
<a name="682"><span class="lineNum"> 682 </span> : /* at the index the IO is using at now */</a>
<a name="683"><span class="lineNum"> 683 </span><span class="lineCov"> 559582 : busy_index = (io-&gt;writer_index + 1) % io-&gt;io_max;</span></a>
<a name="683"><span class="lineNum"> 683 </span><span class="lineCov"> 559204 : busy_index = (io-&gt;writer_index + 1) % io-&gt;io_max;</span></a>
<a name="684"><span class="lineNum"> 684 </span> : </a>
<a name="685"><span class="lineNum"> 685 </span> : /* search for a worker that has already finished */</a>
<a name="686"><span class="lineNum"> 686 </span><span class="lineCov"> 559582 : let = &amp;io-&gt;writer_list[0];</span></a>
<a name="686"><span class="lineNum"> 686 </span><span class="lineCov"> 559204 : let = &amp;io-&gt;writer_list[0];</span></a>
<a name="687"><span class="lineNum"> 687 </span><span class="lineNoCov"> 0 : while (1) {</span></a>
<a name="688"><span class="lineNum"> 688 </span><span class="lineCov"> 559582 : unsigned i = *let;</span></a>
<a name="688"><span class="lineNum"> 688 </span><span class="lineCov"> 559204 : unsigned i = *let;</span></a>
<a name="689"><span class="lineNum"> 689 </span> : struct snapraid_worker* worker;</a>
<a name="690"><span class="lineNum"> 690 </span> : </a>
<a name="691"><span class="lineNum"> 691 </span> : /* if we are at the end */</a>
<a name="692"><span class="lineNum"> 692 </span><span class="lineCov"> 559582 : if (i == io-&gt;writer_max)</span></a>
<a name="692"><span class="lineNum"> 692 </span><span class="lineCov"> 559204 : if (i == io-&gt;writer_max)</span></a>
<a name="693"><span class="lineNum"> 693 </span><span class="lineNoCov"> 0 : break;</span></a>
<a name="694"><span class="lineNum"> 694 </span> : </a>
<a name="695"><span class="lineNum"> 695 </span> : /* if it's the first cycle */</a>
<a name="696"><span class="lineNum"> 696 </span><span class="lineCov"> 559582 : if (waiting_cycle == 0) {</span></a>
<a name="696"><span class="lineNum"> 696 </span><span class="lineCov"> 559204 : if (waiting_cycle == 0) {</span></a>
<a name="697"><span class="lineNum"> 697 </span> : /* store the waiting indexes */</a>
<a name="698"><span class="lineNum"> 698 </span><span class="lineCov"> 559582 : waiting_map[(*waiting_mac)++] = i;</span></a>
<a name="698"><span class="lineNum"> 698 </span><span class="lineCov"> 559204 : waiting_map[(*waiting_mac)++] = i;</span></a>
<a name="699"><span class="lineNum"> 699 </span> : }</a>
<a name="700"><span class="lineNum"> 700 </span> : </a>
<a name="701"><span class="lineNum"> 701 </span><span class="lineCov"> 559582 : worker = &amp;io-&gt;writer_map[i];</span></a>
<a name="701"><span class="lineNum"> 701 </span><span class="lineCov"> 559204 : worker = &amp;io-&gt;writer_map[i];</span></a>
<a name="702"><span class="lineNum"> 702 </span> : </a>
<a name="703"><span class="lineNum"> 703 </span> : /* the two indexes cannot be equal */</a>
<a name="704"><span class="lineNum"> 704 </span><span class="lineCov"> 559582 : assert(io-&gt;writer_index != worker-&gt;index);</span></a>
<a name="704"><span class="lineNum"> 704 </span><span class="lineCov"> 559204 : assert(io-&gt;writer_index != worker-&gt;index);</span></a>
<a name="705"><span class="lineNum"> 705 </span> : </a>
<a name="706"><span class="lineNum"> 706 </span> : /* if the worker has finished this index */</a>
<a name="707"><span class="lineNum"> 707 </span><span class="lineCov"> 559582 : if (busy_index != worker-&gt;index) {</span></a>
<a name="708"><span class="lineNum"> 708 </span><span class="lineCov"> 559582 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="707"><span class="lineNum"> 707 </span><span class="lineCov"> 559204 : if (busy_index != worker-&gt;index) {</span></a>
<a name="708"><span class="lineNum"> 708 </span><span class="lineCov"> 559204 : thread_mutex_unlock(&amp;io-&gt;io_mutex);</span></a>
<a name="709"><span class="lineNum"> 709 </span> : </a>
<a name="710"><span class="lineNum"> 710 </span> : /* mark the worker as processed */</a>
<a name="711"><span class="lineNum"> 711 </span> : /* setting the previous one to point at the next one */</a>
<a name="712"><span class="lineNum"> 712 </span><span class="lineCov"> 559582 : *let = io-&gt;writer_list[i + 1];</span></a>
<a name="712"><span class="lineNum"> 712 </span><span class="lineCov"> 559204 : *let = io-&gt;writer_list[i + 1];</span></a>
<a name="713"><span class="lineNum"> 713 </span> : </a>
<a name="714"><span class="lineNum"> 714 </span> : /* return the position */</a>
<a name="715"><span class="lineNum"> 715 </span><span class="lineCov"> 559582 : *pos = i;</span></a>
<a name="715"><span class="lineNum"> 715 </span><span class="lineCov"> 559204 : *pos = i;</span></a>
<a name="716"><span class="lineNum"> 716 </span> : </a>
<a name="717"><span class="lineNum"> 717 </span> : /* on the first cycle, no one is waiting */</a>
<a name="718"><span class="lineNum"> 718 </span><span class="lineCov"> 559582 : if (waiting_cycle == 0)</span></a>
<a name="719"><span class="lineNum"> 719 </span><span class="lineCov"> 559582 : *waiting_mac = 0;</span></a>
<a name="718"><span class="lineNum"> 718 </span><span class="lineCov"> 559204 : if (waiting_cycle == 0)</span></a>
<a name="719"><span class="lineNum"> 719 </span><span class="lineCov"> 559204 : *waiting_mac = 0;</span></a>
<a name="720"><span class="lineNum"> 720 </span> : </a>
<a name="721"><span class="lineNum"> 721 </span><span class="lineCov"> 559582 : return;</span></a>
<a name="721"><span class="lineNum"> 721 </span><span class="lineCov"> 559204 : return;</span></a>
<a name="722"><span class="lineNum"> 722 </span> : }</a>
<a name="723"><span class="lineNum"> 723 </span> : </a>
<a name="724"><span class="lineNum"> 724 </span> : /* next position to check */</a>
@ -795,16 +795,16 @@
<a name="733"><span class="lineNum"> 733 </span> : }</a>
<a name="734"><span class="lineNum"> 734 </span> : }</a>
<a name="735"><span class="lineNum"> 735 </span> : </a>
<a name="736"><span class="lineNum"> 736 </span><span class="lineCov"> 1089792 : static void io_reader_worker(struct snapraid_worker* worker, struct snapraid_task* task)</span></a>
<a name="736"><span class="lineNum"> 736 </span><span class="lineCov"> 1089420 : static void io_reader_worker(struct snapraid_worker* worker, struct snapraid_task* task)</span></a>
<a name="737"><span class="lineNum"> 737 </span> : {</a>
<a name="738"><span class="lineNum"> 738 </span> : /* if we reached the end */</a>
<a name="739"><span class="lineNum"> 739 </span><span class="lineCov"> 1089792 : if (task-&gt;position &gt;= worker-&gt;io-&gt;block_max) {</span></a>
<a name="739"><span class="lineNum"> 739 </span><span class="lineCov"> 1089420 : if (task-&gt;position &gt;= worker-&gt;io-&gt;block_max) {</span></a>
<a name="740"><span class="lineNum"> 740 </span> : /* complete a dummy task */</a>
<a name="741"><span class="lineNum"> 741 </span><span class="lineCov"> 132 : task-&gt;state = TASK_STATE_EMPTY;</span></a>
<a name="741"><span class="lineNum"> 741 </span><span class="lineCov"> 138 : task-&gt;state = TASK_STATE_EMPTY;</span></a>
<a name="742"><span class="lineNum"> 742 </span> : } else {</a>
<a name="743"><span class="lineNum"> 743 </span><span class="lineCov"> 1089660 : worker-&gt;func(worker, task);</span></a>
<a name="743"><span class="lineNum"> 743 </span><span class="lineCov"> 1089282 : worker-&gt;func(worker, task);</span></a>
<a name="744"><span class="lineNum"> 744 </span> : }</a>
<a name="745"><span class="lineNum"> 745 </span><span class="lineCov"> 1089792 : }</span></a>
<a name="745"><span class="lineNum"> 745 </span><span class="lineCov"> 1089420 : }</span></a>
<a name="746"><span class="lineNum"> 746 </span> : </a>
<a name="747"><span class="lineNum"> 747 </span><span class="lineCov"> 690 : static void* io_reader_thread(void* arg)</span></a>
<a name="748"><span class="lineNum"> 748 </span> : {</a>
@ -813,24 +813,24 @@
<a name="751"><span class="lineNum"> 751 </span> : /* force completion of the first task */</a>
<a name="752"><span class="lineNum"> 752 </span><span class="lineCov"> 690 : io_reader_worker(worker, &amp;worker-&gt;task_map[0]);</span></a>
<a name="753"><span class="lineNum"> 753 </span> : </a>
<a name="754"><span class="lineNum"> 754 </span><span class="lineCov"> 1177196 : while (1) {</span></a>
<a name="754"><span class="lineNum"> 754 </span><span class="lineCov"> 1176573 : while (1) {</span></a>
<a name="755"><span class="lineNum"> 755 </span> : struct snapraid_task* task;</a>
<a name="756"><span class="lineNum"> 756 </span> : </a>
<a name="757"><span class="lineNum"> 757 </span> : /* get the new task */</a>
<a name="758"><span class="lineNum"> 758 </span><span class="lineCov"> 1177886 : task = io_reader_step(worker);</span></a>
<a name="758"><span class="lineNum"> 758 </span><span class="lineCov"> 1177263 : task = io_reader_step(worker);</span></a>
<a name="759"><span class="lineNum"> 759 </span> : </a>
<a name="760"><span class="lineNum"> 760 </span> : /* if no task, it means to exit */</a>
<a name="761"><span class="lineNum"> 761 </span><span class="lineCov"> 1177886 : if (!task)</span></a>
<a name="761"><span class="lineNum"> 761 </span><span class="lineCov"> 1177263 : if (!task)</span></a>
<a name="762"><span class="lineNum"> 762 </span><span class="lineCov"> 690 : break;</span></a>
<a name="763"><span class="lineNum"> 763 </span> : </a>
<a name="764"><span class="lineNum"> 764 </span> : /* nothing more to do */</a>
<a name="765"><span class="lineNum"> 765 </span><span class="lineCov"> 1177196 : if (task-&gt;state == TASK_STATE_EMPTY)</span></a>
<a name="766"><span class="lineNum"> 766 </span><span class="lineCov"> 88094 : continue;</span></a>
<a name="765"><span class="lineNum"> 765 </span><span class="lineCov"> 1176573 : if (task-&gt;state == TASK_STATE_EMPTY)</span></a>
<a name="766"><span class="lineNum"> 766 </span><span class="lineCov"> 87843 : continue;</span></a>
<a name="767"><span class="lineNum"> 767 </span> : </a>
<a name="768"><span class="lineNum"> 768 </span><span class="lineCov"> 1089102 : assert(task-&gt;state == TASK_STATE_READY);</span></a>
<a name="768"><span class="lineNum"> 768 </span><span class="lineCov"> 1088730 : assert(task-&gt;state == TASK_STATE_READY);</span></a>
<a name="769"><span class="lineNum"> 769 </span> : </a>
<a name="770"><span class="lineNum"> 770 </span> : /* work on the assigned task */</a>
<a name="771"><span class="lineNum"> 771 </span><span class="lineCov"> 1089102 : io_reader_worker(worker, task);</span></a>
<a name="771"><span class="lineNum"> 771 </span><span class="lineCov"> 1088730 : io_reader_worker(worker, task);</span></a>
<a name="772"><span class="lineNum"> 772 </span> : }</a>
<a name="773"><span class="lineNum"> 773 </span> : </a>
<a name="774"><span class="lineNum"> 774 </span><span class="lineCov"> 690 : return 0;</span></a>
@ -841,29 +841,29 @@
<a name="779"><span class="lineNum"> 779 </span><span class="lineCov"> 492 : struct snapraid_worker* worker = arg;</span></a>
<a name="780"><span class="lineNum"> 780 </span><span class="lineCov"> 492 : int latest_state = TASK_STATE_DONE;</span></a>
<a name="781"><span class="lineNum"> 781 </span> : </a>
<a name="782"><span class="lineNum"> 782 </span><span class="lineCov"> 559582 : while (1) {</span></a>
<a name="782"><span class="lineNum"> 782 </span><span class="lineCov"> 559204 : while (1) {</span></a>
<a name="783"><span class="lineNum"> 783 </span> : struct snapraid_task* task;</a>
<a name="784"><span class="lineNum"> 784 </span> : </a>
<a name="785"><span class="lineNum"> 785 </span> : /* get the new task */</a>
<a name="786"><span class="lineNum"> 786 </span><span class="lineCov"> 560074 : task = io_writer_step(worker, latest_state);</span></a>
<a name="786"><span class="lineNum"> 786 </span><span class="lineCov"> 559696 : task = io_writer_step(worker, latest_state);</span></a>
<a name="787"><span class="lineNum"> 787 </span> : </a>
<a name="788"><span class="lineNum"> 788 </span> : /* if no task, it means to exit */</a>
<a name="789"><span class="lineNum"> 789 </span><span class="lineCov"> 560074 : if (!task)</span></a>
<a name="789"><span class="lineNum"> 789 </span><span class="lineCov"> 559696 : if (!task)</span></a>
<a name="790"><span class="lineNum"> 790 </span><span class="lineCov"> 492 : break;</span></a>
<a name="791"><span class="lineNum"> 791 </span> : </a>
<a name="792"><span class="lineNum"> 792 </span> : /* nothing more to do */</a>
<a name="793"><span class="lineNum"> 793 </span><span class="lineCov"> 559582 : if (task-&gt;state == TASK_STATE_EMPTY) {</span></a>
<a name="794"><span class="lineNum"> 794 </span><span class="lineCov"> 5586 : latest_state = TASK_STATE_DONE;</span></a>
<a name="795"><span class="lineNum"> 795 </span><span class="lineCov"> 5586 : continue;</span></a>
<a name="793"><span class="lineNum"> 793 </span><span class="lineCov"> 559204 : if (task-&gt;state == TASK_STATE_EMPTY) {</span></a>
<a name="794"><span class="lineNum"> 794 </span><span class="lineCov"> 5520 : latest_state = TASK_STATE_DONE;</span></a>
<a name="795"><span class="lineNum"> 795 </span><span class="lineCov"> 5520 : continue;</span></a>
<a name="796"><span class="lineNum"> 796 </span> : }</a>
<a name="797"><span class="lineNum"> 797 </span> : </a>
<a name="798"><span class="lineNum"> 798 </span><span class="lineCov"> 553996 : assert(task-&gt;state == TASK_STATE_READY);</span></a>
<a name="798"><span class="lineNum"> 798 </span><span class="lineCov"> 553684 : assert(task-&gt;state == TASK_STATE_READY);</span></a>
<a name="799"><span class="lineNum"> 799 </span> : </a>
<a name="800"><span class="lineNum"> 800 </span> : /* work on the assigned task */</a>
<a name="801"><span class="lineNum"> 801 </span><span class="lineCov"> 553996 : worker-&gt;func(worker, task);</span></a>
<a name="801"><span class="lineNum"> 801 </span><span class="lineCov"> 553684 : worker-&gt;func(worker, task);</span></a>
<a name="802"><span class="lineNum"> 802 </span> : </a>
<a name="803"><span class="lineNum"> 803 </span> : /* save the resulting state */</a>
<a name="804"><span class="lineNum"> 804 </span><span class="lineCov"> 553996 : latest_state = task-&gt;state;</span></a>
<a name="804"><span class="lineNum"> 804 </span><span class="lineCov"> 553684 : latest_state = task-&gt;state;</span></a>
<a name="805"><span class="lineNum"> 805 </span> : }</a>
<a name="806"><span class="lineNum"> 806 </span> : </a>
<a name="807"><span class="lineNum"> 807 </span><span class="lineCov"> 492 : return 0;</span></a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="main.c.gcov.html#320">main</a></td>
<td class="coverFnHi">289</td>
<td class="coverFnHi">290</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="main.c.gcov.html#320">main</a></td>
<td class="coverFnHi">289</td>
<td class="coverFnHi">290</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -381,27 +381,27 @@
<a name="319"><span class="lineNum"> 319 </span> : }</a>
<a name="320"><span class="lineNum"> 320 </span> : /* LCOV_EXCL_STOP */</a>
<a name="321"><span class="lineNum"> 321 </span> : </a>
<a name="322"><span class="lineNum"> 322 </span><span class="lineCov"> 289 : int main(int argc, char* argv[])</span></a>
<a name="322"><span class="lineNum"> 322 </span><span class="lineCov"> 290 : int main(int argc, char* argv[])</span></a>
<a name="323"><span class="lineNum"> 323 </span> : {</a>
<a name="324"><span class="lineNum"> 324 </span> : int mode;</a>
<a name="325"><span class="lineNum"> 325 </span> : int i, j;</a>
<a name="326"><span class="lineNum"> 326 </span> : int ret;</a>
<a name="327"><span class="lineNum"> 327 </span> : </a>
<a name="328"><span class="lineNum"> 328 </span><span class="lineCov"> 289 : mode = MODE_DEFAULT;</span></a>
<a name="329"><span class="lineNum"> 329 </span><span class="lineCov"> 289 : j = 1;</span></a>
<a name="330"><span class="lineNum"> 330 </span><span class="lineCov"> 4328 : for (i = 1; i &lt; argc; ++i) {</span></a>
<a name="331"><span class="lineNum"> 331 </span><span class="lineCov"> 4039 : if (strcmp(argv[i], &quot;-s&quot;) == 0 || strcmp(argv[i], &quot;--spin-down-on-error&quot;) == 0) {</span></a>
<a name="328"><span class="lineNum"> 328 </span><span class="lineCov"> 290 : mode = MODE_DEFAULT;</span></a>
<a name="329"><span class="lineNum"> 329 </span><span class="lineCov"> 290 : j = 1;</span></a>
<a name="330"><span class="lineNum"> 330 </span><span class="lineCov"> 4330 : for (i = 1; i &lt; argc; ++i) {</span></a>
<a name="331"><span class="lineNum"> 331 </span><span class="lineCov"> 4040 : if (strcmp(argv[i], &quot;-s&quot;) == 0 || strcmp(argv[i], &quot;--spin-down-on-error&quot;) == 0) {</span></a>
<a name="332"><span class="lineNum"> 332 </span><span class="lineCov"> 1 : mode = MODE_SPINDOWN;</span></a>
<a name="333"><span class="lineNum"> 333 </span> : } else {</a>
<a name="334"><span class="lineNum"> 334 </span><span class="lineCov"> 4038 : argv[j] = argv[i];</span></a>
<a name="335"><span class="lineNum"> 335 </span><span class="lineCov"> 4038 : ++j;</span></a>
<a name="334"><span class="lineNum"> 334 </span><span class="lineCov"> 4039 : argv[j] = argv[i];</span></a>
<a name="335"><span class="lineNum"> 335 </span><span class="lineCov"> 4039 : ++j;</span></a>
<a name="336"><span class="lineNum"> 336 </span> : }</a>
<a name="337"><span class="lineNum"> 337 </span> : }</a>
<a name="338"><span class="lineNum"> 338 </span><span class="lineCov"> 289 : argc = j;</span></a>
<a name="339"><span class="lineNum"> 339 </span><span class="lineCov"> 289 : argv[argc] = 0;</span></a>
<a name="338"><span class="lineNum"> 338 </span><span class="lineCov"> 290 : argc = j;</span></a>
<a name="339"><span class="lineNum"> 339 </span><span class="lineCov"> 290 : argv[argc] = 0;</span></a>
<a name="340"><span class="lineNum"> 340 </span> : </a>
<a name="341"><span class="lineNum"> 341 </span><span class="lineCov"> 289 : if (mode == MODE_DEFAULT) {</span></a>
<a name="342"><span class="lineNum"> 342 </span><span class="lineCov"> 288 : ret = snapraid_main(argc, argv);</span></a>
<a name="341"><span class="lineNum"> 341 </span><span class="lineCov"> 290 : if (mode == MODE_DEFAULT) {</span></a>
<a name="342"><span class="lineNum"> 342 </span><span class="lineCov"> 289 : ret = snapraid_main(argc, argv);</span></a>
<a name="343"><span class="lineNum"> 343 </span> : } else {</a>
<a name="344"><span class="lineNum"> 344 </span> : struct sigaction sa;</a>
<a name="345"><span class="lineNum"> 345 </span> : </a>
@ -499,7 +499,7 @@
<a name="437"><span class="lineNum"> 437 </span> : }</a>
<a name="438"><span class="lineNum"> 438 </span> : }</a>
<a name="439"><span class="lineNum"> 439 </span> : </a>
<a name="440"><span class="lineNum"> 440 </span><span class="lineCov"> 256 : return ret;</span></a>
<a name="440"><span class="lineNum"> 440 </span><span class="lineCov"> 257 : return ret;</span></a>
<a name="441"><span class="lineNum"> 441 </span> : }</a>
<a name="442"><span class="lineNum"> 442 </span> : #endif</a>
<a name="443"><span class="lineNum"> 443 </span> : </a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="metro.c.gcov.html#46">MetroHash128</a></td>
<td class="coverFnHi">369</td>
<td class="coverFnHi">393</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="metro.c.gcov.html#46">MetroHash128</a></td>
<td class="coverFnHi">369</td>
<td class="coverFnHi">393</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@ -107,9 +107,9 @@
<a name="45"><span class="lineNum"> 45 </span> : static const uint64_t k2 = 0x7BDEC03B;</a>
<a name="46"><span class="lineNum"> 46 </span> : static const uint64_t k3 = 0x2F5870A5;</a>
<a name="47"><span class="lineNum"> 47 </span> : </a>
<a name="48"><span class="lineNum"> 48 </span><span class="lineCov"> 369 : void MetroHash128(const void* data, size_t size, const uint8_t* seed, uint8_t* digest)</span></a>
<a name="48"><span class="lineNum"> 48 </span><span class="lineCov"> 393 : void MetroHash128(const void* data, size_t size, const uint8_t* seed, uint8_t* digest)</span></a>
<a name="49"><span class="lineNum"> 49 </span> : {</a>
<a name="50"><span class="lineNum"> 50 </span><span class="lineCov"> 369 : const uint8_t* ptr = data;</span></a>
<a name="50"><span class="lineNum"> 50 </span><span class="lineCov"> 393 : const uint8_t* ptr = data;</span></a>
<a name="51"><span class="lineNum"> 51 </span> : uint64_t v[4];</a>
<a name="52"><span class="lineNum"> 52 </span> : </a>
<a name="53"><span class="lineNum"> 53 </span> : /*</a>
@ -120,10 +120,10 @@
<a name="58"><span class="lineNum"> 58 </span> : * v[0] = (static_cast&lt;uint64_t&gt;(seed) - k0) * k3;</a>
<a name="59"><span class="lineNum"> 59 </span> : * v[1] = (static_cast&lt;uint64_t&gt;(seed) + k1) * k2;</a>
<a name="60"><span class="lineNum"> 60 </span> : */</a>
<a name="61"><span class="lineNum"> 61 </span><span class="lineCov"> 369 : v[0] = (util_read64(seed) - k0) * k3;</span></a>
<a name="62"><span class="lineNum"> 62 </span><span class="lineCov"> 369 : v[1] = (util_read64(seed + 8) + k1) * k2;</span></a>
<a name="61"><span class="lineNum"> 61 </span><span class="lineCov"> 393 : v[0] = (util_read64(seed) - k0) * k3;</span></a>
<a name="62"><span class="lineNum"> 62 </span><span class="lineCov"> 393 : v[1] = (util_read64(seed + 8) + k1) * k2;</span></a>
<a name="63"><span class="lineNum"> 63 </span> : </a>
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 369 : if (size &gt;= 32) {</span></a>
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 393 : if (size &gt;= 32) {</span></a>
<a name="65"><span class="lineNum"> 65 </span> : /*</a>
<a name="66"><span class="lineNum"> 66 </span> : * EXTENSION: Initialize secondary state using both halves of the 128-bit seed</a>
<a name="67"><span class="lineNum"> 67 </span> : *</a>
@ -131,24 +131,24 @@
<a name="69"><span class="lineNum"> 69 </span> : * v[2] = (static_cast&lt;uint64_t&gt;(seed) + k0) * k2;</a>
<a name="70"><span class="lineNum"> 70 </span> : * v[3] = (static_cast&lt;uint64_t&gt;(seed) - k1) * k3;</a>
<a name="71"><span class="lineNum"> 71 </span> : */</a>
<a name="72"><span class="lineNum"> 72 </span><span class="lineCov"> 333 : v[2] = (util_read64(seed) + k0) * k2;</span></a>
<a name="73"><span class="lineNum"> 73 </span><span class="lineCov"> 333 : v[3] = (util_read64(seed + 8) - k1) * k3;</span></a>
<a name="72"><span class="lineNum"> 72 </span><span class="lineCov"> 357 : v[2] = (util_read64(seed) + k0) * k2;</span></a>
<a name="73"><span class="lineNum"> 73 </span><span class="lineCov"> 357 : v[3] = (util_read64(seed + 8) - k1) * k3;</span></a>
<a name="74"><span class="lineNum"> 74 </span> : </a>
<a name="75"><span class="lineNum"> 75 </span> : do {</a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineCov"> 852876 : v[0] += util_read64(ptr) * k0; ptr += 8; v[0] = util_rotr64(v[0], 29) + v[2];</span></a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 852876 : v[1] += util_read64(ptr) * k1; ptr += 8; v[1] = util_rotr64(v[1], 29) + v[3];</span></a>
<a name="78"><span class="lineNum"> 78 </span><span class="lineCov"> 852876 : v[2] += util_read64(ptr) * k2; ptr += 8; v[2] = util_rotr64(v[2], 29) + v[0];</span></a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 852876 : v[3] += util_read64(ptr) * k3; ptr += 8; v[3] = util_rotr64(v[3], 29) + v[1];</span></a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineCov"> 852876 : size -= 32;</span></a>
<a name="81"><span class="lineNum"> 81 </span><span class="lineCov"> 852876 : } while (size &gt;= 32);</span></a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineCov"> 1049484 : v[0] += util_read64(ptr) * k0; ptr += 8; v[0] = util_rotr64(v[0], 29) + v[2];</span></a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 1049484 : v[1] += util_read64(ptr) * k1; ptr += 8; v[1] = util_rotr64(v[1], 29) + v[3];</span></a>
<a name="78"><span class="lineNum"> 78 </span><span class="lineCov"> 1049484 : v[2] += util_read64(ptr) * k2; ptr += 8; v[2] = util_rotr64(v[2], 29) + v[0];</span></a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 1049484 : v[3] += util_read64(ptr) * k3; ptr += 8; v[3] = util_rotr64(v[3], 29) + v[1];</span></a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineCov"> 1049484 : size -= 32;</span></a>
<a name="81"><span class="lineNum"> 81 </span><span class="lineCov"> 1049484 : } while (size &gt;= 32);</span></a>
<a name="82"><span class="lineNum"> 82 </span> : </a>
<a name="83"><span class="lineNum"> 83 </span><span class="lineCov"> 333 : v[2] ^= util_rotr64(((v[0] + v[3]) * k0) + v[1], 21) * k1;</span></a>
<a name="84"><span class="lineNum"> 84 </span><span class="lineCov"> 333 : v[3] ^= util_rotr64(((v[1] + v[2]) * k1) + v[0], 21) * k0;</span></a>
<a name="85"><span class="lineNum"> 85 </span><span class="lineCov"> 333 : v[0] ^= util_rotr64(((v[0] + v[2]) * k0) + v[3], 21) * k1;</span></a>
<a name="86"><span class="lineNum"> 86 </span><span class="lineCov"> 333 : v[1] ^= util_rotr64(((v[1] + v[3]) * k1) + v[2], 21) * k0;</span></a>
<a name="83"><span class="lineNum"> 83 </span><span class="lineCov"> 357 : v[2] ^= util_rotr64(((v[0] + v[3]) * k0) + v[1], 21) * k1;</span></a>
<a name="84"><span class="lineNum"> 84 </span><span class="lineCov"> 357 : v[3] ^= util_rotr64(((v[1] + v[2]) * k1) + v[0], 21) * k0;</span></a>
<a name="85"><span class="lineNum"> 85 </span><span class="lineCov"> 357 : v[0] ^= util_rotr64(((v[0] + v[2]) * k0) + v[3], 21) * k1;</span></a>
<a name="86"><span class="lineNum"> 86 </span><span class="lineCov"> 357 : v[1] ^= util_rotr64(((v[1] + v[3]) * k1) + v[2], 21) * k0;</span></a>
<a name="87"><span class="lineNum"> 87 </span> : }</a>
<a name="88"><span class="lineNum"> 88 </span> : </a>
<a name="89"><span class="lineNum"> 89 </span><span class="lineCov"> 369 : if (size &gt;= 16) {</span></a>
<a name="89"><span class="lineNum"> 89 </span><span class="lineCov"> 393 : if (size &gt;= 16) {</span></a>
<a name="90"><span class="lineNum"> 90 </span><span class="lineCov"> 132 : v[0] += util_read64(ptr) * k2; ptr += 8; v[0] = util_rotr64(v[0], 33) * k3;</span></a>
<a name="91"><span class="lineNum"> 91 </span><span class="lineCov"> 132 : v[1] += util_read64(ptr) * k2; ptr += 8; v[1] = util_rotr64(v[1], 33) * k3;</span></a>
<a name="92"><span class="lineNum"> 92 </span><span class="lineCov"> 132 : v[0] ^= util_rotr64((v[0] * k2) + v[1], 45) * k1;</span></a>
@ -156,37 +156,37 @@
<a name="94"><span class="lineNum"> 94 </span><span class="lineCov"> 132 : size -= 16;</span></a>
<a name="95"><span class="lineNum"> 95 </span> : }</a>
<a name="96"><span class="lineNum"> 96 </span> : </a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineCov"> 369 : if (size &gt;= 8) {</span></a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineCov"> 393 : if (size &gt;= 8) {</span></a>
<a name="98"><span class="lineNum"> 98 </span><span class="lineCov"> 134 : v[0] += util_read64(ptr) * k2; ptr += 8; v[0] = util_rotr64(v[0], 33) * k3;</span></a>
<a name="99"><span class="lineNum"> 99 </span><span class="lineCov"> 134 : v[0] ^= util_rotr64((v[0] * k2) + v[1], 27) * k1;</span></a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineCov"> 134 : size -= 8;</span></a>
<a name="101"><span class="lineNum"> 101 </span> : }</a>
<a name="102"><span class="lineNum"> 102 </span> : </a>
<a name="103"><span class="lineNum"> 103 </span><span class="lineCov"> 369 : if (size &gt;= 4) {</span></a>
<a name="103"><span class="lineNum"> 103 </span><span class="lineCov"> 393 : if (size &gt;= 4) {</span></a>
<a name="104"><span class="lineNum"> 104 </span><span class="lineCov"> 132 : v[1] += util_read32(ptr) * k2; ptr += 4; v[1] = util_rotr64(v[1], 33) * k3;</span></a>
<a name="105"><span class="lineNum"> 105 </span><span class="lineCov"> 132 : v[1] ^= util_rotr64((v[1] * k3) + v[0], 46) * k0;</span></a>
<a name="106"><span class="lineNum"> 106 </span><span class="lineCov"> 132 : size -= 4;</span></a>
<a name="107"><span class="lineNum"> 107 </span> : }</a>
<a name="108"><span class="lineNum"> 108 </span> : </a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 369 : if (size &gt;= 2) {</span></a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 393 : if (size &gt;= 2) {</span></a>
<a name="110"><span class="lineNum"> 110 </span><span class="lineCov"> 135 : v[0] += util_read16(ptr) * k2; ptr += 2; v[0] = util_rotr64(v[0], 33) * k3;</span></a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 135 : v[0] ^= util_rotr64((v[0] * k2) + v[1], 22) * k1;</span></a>
<a name="112"><span class="lineNum"> 112 </span><span class="lineCov"> 135 : size -= 2;</span></a>
<a name="113"><span class="lineNum"> 113 </span> : }</a>
<a name="114"><span class="lineNum"> 114 </span> : </a>
<a name="115"><span class="lineNum"> 115 </span><span class="lineCov"> 369 : if (size &gt;= 1) {</span></a>
<a name="115"><span class="lineNum"> 115 </span><span class="lineCov"> 393 : if (size &gt;= 1) {</span></a>
<a name="116"><span class="lineNum"> 116 </span><span class="lineCov"> 133 : v[1] += util_read8(ptr) * k2; v[1] = util_rotr64(v[1], 33) * k3;</span></a>
<a name="117"><span class="lineNum"> 117 </span><span class="lineCov"> 133 : v[1] ^= util_rotr64((v[1] * k3) + v[0], 58) * k0;</span></a>
<a name="118"><span class="lineNum"> 118 </span> : }</a>
<a name="119"><span class="lineNum"> 119 </span> : </a>
<a name="120"><span class="lineNum"> 120 </span><span class="lineCov"> 369 : v[0] += util_rotr64((v[0] * k0) + v[1], 13);</span></a>
<a name="121"><span class="lineNum"> 121 </span><span class="lineCov"> 369 : v[1] += util_rotr64((v[1] * k1) + v[0], 37);</span></a>
<a name="122"><span class="lineNum"> 122 </span><span class="lineCov"> 369 : v[0] += util_rotr64((v[0] * k2) + v[1], 13);</span></a>
<a name="123"><span class="lineNum"> 123 </span><span class="lineCov"> 369 : v[1] += util_rotr64((v[1] * k3) + v[0], 37);</span></a>
<a name="120"><span class="lineNum"> 120 </span><span class="lineCov"> 393 : v[0] += util_rotr64((v[0] * k0) + v[1], 13);</span></a>
<a name="121"><span class="lineNum"> 121 </span><span class="lineCov"> 393 : v[1] += util_rotr64((v[1] * k1) + v[0], 37);</span></a>
<a name="122"><span class="lineNum"> 122 </span><span class="lineCov"> 393 : v[0] += util_rotr64((v[0] * k2) + v[1], 13);</span></a>
<a name="123"><span class="lineNum"> 123 </span><span class="lineCov"> 393 : v[1] += util_rotr64((v[1] * k3) + v[0], 37);</span></a>
<a name="124"><span class="lineNum"> 124 </span> : </a>
<a name="125"><span class="lineNum"> 125 </span><span class="lineCov"> 369 : util_write64(digest, v[0]);</span></a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineCov"> 369 : util_write64(digest + 8, v[1]);</span></a>
<a name="127"><span class="lineNum"> 127 </span><span class="lineCov"> 369 : }</span></a>
<a name="125"><span class="lineNum"> 125 </span><span class="lineCov"> 393 : util_write64(digest, v[0]);</span></a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineCov"> 393 : util_write64(digest + 8, v[1]);</span></a>
<a name="127"><span class="lineNum"> 127 </span><span class="lineCov"> 393 : }</span></a>
<a name="128"><span class="lineNum"> 128 </span> : </a>
</pre>
</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">220</td>
<td class="headerCovTableEntry">221</td>
<td class="headerCovTableEntry">237</td>
<td class="headerCovTableEntryHi">92.8 %</td>
<td class="headerCovTableEntryHi">93.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
@ -69,7 +69,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#200">cmd_generate_symlink</a></td>
<td class="coverFnHi">940</td>
<td class="coverFnHi">932</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#91">fallback</a></td>
@ -85,19 +85,19 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#510">cmd_truncate</a></td>
<td class="coverFnHi">3121</td>
<td class="coverFnHi">3136</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#564">cmd_delete</a></td>
<td class="coverFnHi">3205</td>
<td class="coverFnHi">3160</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#459">cmd_append</a></td>
<td class="coverFnHi">3258</td>
<td class="coverFnHi">3215</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#291">cmd_write</a></td>
<td class="coverFnHi">6176</td>
<td class="coverFnHi">6236</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#578">cmd_change</a></td>
@ -113,23 +113,23 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#72">rnd_name</a></td>
<td class="coverFnHi">26849</td>
<td class="coverFnHi">26841</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#45">rndnz_range</a></td>
<td class="coverFnHi">32674</td>
<td class="coverFnHi">32691</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#86">file_cmp</a></td>
<td class="coverFnHi">146738</td>
<td class="coverFnHi">146742</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#37">rndnz</a></td>
<td class="coverFnHi">55633505</td>
<td class="coverFnHi">55624443</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#30">rnd</a></td>
<td class="coverFnHi">56044755</td>
<td class="coverFnHi">56035837</td>
</tr>
</table>
<br>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">220</td>
<td class="headerCovTableEntry">221</td>
<td class="headerCovTableEntry">237</td>
<td class="headerCovTableEntryHi">92.8 %</td>
<td class="headerCovTableEntryHi">93.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#459">cmd_append</a></td>
<td class="coverFnHi">3258</td>
<td class="coverFnHi">3215</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#578">cmd_change</a></td>
@ -73,7 +73,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#564">cmd_delete</a></td>
<td class="coverFnHi">3205</td>
<td class="coverFnHi">3160</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#223">cmd_generate</a></td>
@ -85,15 +85,15 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#200">cmd_generate_symlink</a></td>
<td class="coverFnHi">940</td>
<td class="coverFnHi">932</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#510">cmd_truncate</a></td>
<td class="coverFnHi">3121</td>
<td class="coverFnHi">3136</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#291">cmd_write</a></td>
<td class="coverFnHi">6176</td>
<td class="coverFnHi">6236</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#91">fallback</a></td>
@ -101,7 +101,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#86">file_cmp</a></td>
<td class="coverFnHi">146738</td>
<td class="coverFnHi">146742</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#634">help</a></td>
@ -113,15 +113,15 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#30">rnd</a></td>
<td class="coverFnHi">56044755</td>
<td class="coverFnHi">56035837</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#72">rnd_name</a></td>
<td class="coverFnHi">26849</td>
<td class="coverFnHi">26841</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#37">rndnz</a></td>
<td class="coverFnHi">55633505</td>
<td class="coverFnHi">55624443</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#53">rndnz_damage</a></td>
@ -129,7 +129,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#45">rndnz_range</a></td>
<td class="coverFnHi">32674</td>
<td class="coverFnHi">32691</td>
</tr>
</table>
<br>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">220</td>
<td class="headerCovTableEntry">221</td>
<td class="headerCovTableEntry">237</td>
<td class="headerCovTableEntryHi">92.8 %</td>
<td class="headerCovTableEntryHi">93.2 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
@ -91,28 +91,28 @@
<a name="29"><span class="lineNum"> 29 </span> : */</a>
<a name="30"><span class="lineNum"> 30 </span> : unsigned long long seed = 0;</a>
<a name="31"><span class="lineNum"> 31 </span> : </a>
<a name="32"><span class="lineNum"> 32 </span><span class="lineCov"> 56044755 : unsigned rnd(unsigned max)</span></a>
<a name="32"><span class="lineNum"> 32 </span><span class="lineCov"> 56035837 : unsigned rnd(unsigned max)</span></a>
<a name="33"><span class="lineNum"> 33 </span> : {</a>
<a name="34"><span class="lineNum"> 34 </span><span class="lineCov"> 56044755 : seed = seed * 6364136223846793005LL + 1442695040888963407LL;</span></a>
<a name="34"><span class="lineNum"> 34 </span><span class="lineCov"> 56035837 : seed = seed * 6364136223846793005LL + 1442695040888963407LL;</span></a>
<a name="35"><span class="lineNum"> 35 </span> : </a>
<a name="36"><span class="lineNum"> 36 </span><span class="lineCov"> 56044755 : return (seed &gt;&gt; 32) % max;</span></a>
<a name="36"><span class="lineNum"> 36 </span><span class="lineCov"> 56035837 : return (seed &gt;&gt; 32) % max;</span></a>
<a name="37"><span class="lineNum"> 37 </span> : }</a>
<a name="38"><span class="lineNum"> 38 </span> : </a>
<a name="39"><span class="lineNum"> 39 </span><span class="lineCov"> 55633505 : unsigned rndnz(unsigned max)</span></a>
<a name="39"><span class="lineNum"> 39 </span><span class="lineCov"> 55624443 : unsigned rndnz(unsigned max)</span></a>
<a name="40"><span class="lineNum"> 40 </span> : {</a>
<a name="41"><span class="lineNum"> 41 </span><span class="lineCov"> 55633505 : if (max &lt;= 1)</span></a>
<a name="41"><span class="lineNum"> 41 </span><span class="lineCov"> 55624443 : if (max &lt;= 1)</span></a>
<a name="42"><span class="lineNum"> 42 </span><span class="lineCov"> 2831 : return 1;</span></a>
<a name="43"><span class="lineNum"> 43 </span> : else</a>
<a name="44"><span class="lineNum"> 44 </span><span class="lineCov"> 55630674 : return rnd(max - 1) + 1;</span></a>
<a name="44"><span class="lineNum"> 44 </span><span class="lineCov"> 55621612 : return rnd(max - 1) + 1;</span></a>
<a name="45"><span class="lineNum"> 45 </span> : }</a>
<a name="46"><span class="lineNum"> 46 </span> : </a>
<a name="47"><span class="lineNum"> 47 </span><span class="lineCov"> 32674 : void rndnz_range(unsigned char* data, int size)</span></a>
<a name="47"><span class="lineNum"> 47 </span><span class="lineCov"> 32691 : void rndnz_range(unsigned char* data, int size)</span></a>
<a name="48"><span class="lineNum"> 48 </span> : {</a>
<a name="49"><span class="lineNum"> 49 </span> : int i;</a>
<a name="50"><span class="lineNum"> 50 </span> : </a>
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 55659420 : for (i = 0; i &lt; size; ++i)</span></a>
<a name="52"><span class="lineNum"> 52 </span><span class="lineCov"> 55626746 : data[i] = rndnz(256);</span></a>
<a name="53"><span class="lineNum"> 53 </span><span class="lineCov"> 32674 : }</span></a>
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 55650371 : for (i = 0; i &lt; size; ++i)</span></a>
<a name="52"><span class="lineNum"> 52 </span><span class="lineCov"> 55617680 : data[i] = rndnz(256);</span></a>
<a name="53"><span class="lineNum"> 53 </span><span class="lineCov"> 32691 : }</span></a>
<a name="54"><span class="lineNum"> 54 </span> : </a>
<a name="55"><span class="lineNum"> 55 </span><span class="lineCov"> 1821 : void rndnz_damage(unsigned char* data, int size)</span></a>
<a name="56"><span class="lineNum"> 56 </span> : {</a>
@ -123,8 +123,8 @@
<a name="61"><span class="lineNum"> 61 </span> : unsigned char c;</a>
<a name="62"><span class="lineNum"> 62 </span> : </a>
<a name="63"><span class="lineNum"> 63 </span> : do {</a>
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 1828 : c = rndnz(256);</span></a>
<a name="65"><span class="lineNum"> 65 </span><span class="lineCov"> 1828 : } while (c == data[i]);</span></a>
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 1832 : c = rndnz(256);</span></a>
<a name="65"><span class="lineNum"> 65 </span><span class="lineCov"> 1832 : } while (c == data[i]);</span></a>
<a name="66"><span class="lineNum"> 66 </span> : </a>
<a name="67"><span class="lineNum"> 67 </span><span class="lineCov"> 1821 : data[i] = c;</span></a>
<a name="68"><span class="lineNum"> 68 </span> : }</a>
@ -133,23 +133,23 @@
<a name="71"><span class="lineNum"> 71 </span> : char CHARSET[] = &quot;qwertyuiopasdfghjklzxcvbnm1234567890 .-+&quot;;</a>
<a name="72"><span class="lineNum"> 72 </span> : #define CHARSET_LEN (sizeof(CHARSET) - 1)</a>
<a name="73"><span class="lineNum"> 73 </span> : </a>
<a name="74"><span class="lineNum"> 74 </span><span class="lineCov"> 26849 : void rnd_name(char* file)</span></a>
<a name="74"><span class="lineNum"> 74 </span><span class="lineCov"> 26841 : void rnd_name(char* file)</span></a>
<a name="75"><span class="lineNum"> 75 </span> : {</a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineCov"> 26849 : int l = 1 + rnd(20);</span></a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineCov"> 26841 : int l = 1 + rnd(20);</span></a>
<a name="77"><span class="lineNum"> 77 </span> : </a>
<a name="78"><span class="lineNum"> 78 </span><span class="lineCov"> 308613 : while (l) {</span></a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 281764 : *file++ = CHARSET[rnd(CHARSET_LEN)];</span></a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineCov"> 281764 : --l;</span></a>
<a name="78"><span class="lineNum"> 78 </span><span class="lineCov"> 308703 : while (l) {</span></a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 281862 : *file++ = CHARSET[rnd(CHARSET_LEN)];</span></a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineCov"> 281862 : --l;</span></a>
<a name="81"><span class="lineNum"> 81 </span> : }</a>
<a name="82"><span class="lineNum"> 82 </span><span class="lineCov"> 26849 : *file = 0;</span></a>
<a name="83"><span class="lineNum"> 83 </span><span class="lineCov"> 26849 : }</span></a>
<a name="82"><span class="lineNum"> 82 </span><span class="lineCov"> 26841 : *file = 0;</span></a>
<a name="83"><span class="lineNum"> 83 </span><span class="lineCov"> 26841 : }</span></a>
<a name="84"><span class="lineNum"> 84 </span> : </a>
<a name="85"><span class="lineNum"> 85 </span> : /****************************************************************************/</a>
<a name="86"><span class="lineNum"> 86 </span> : /* file */</a>
<a name="87"><span class="lineNum"> 87 </span> : </a>
<a name="88"><span class="lineNum"> 88 </span><span class="lineCov"> 146738 : int file_cmp(const void* a, const void* b)</span></a>
<a name="88"><span class="lineNum"> 88 </span><span class="lineCov"> 146742 : int file_cmp(const void* a, const void* b)</span></a>
<a name="89"><span class="lineNum"> 89 </span> : {</a>
<a name="90"><span class="lineNum"> 90 </span><span class="lineCov"> 146738 : return strcmp(a, b);</span></a>
<a name="90"><span class="lineNum"> 90 </span><span class="lineCov"> 146742 : return strcmp(a, b);</span></a>
<a name="91"><span class="lineNum"> 91 </span> : }</a>
<a name="92"><span class="lineNum"> 92 </span> : </a>
<a name="93"><span class="lineNum"> 93 </span><span class="lineCov"> 1821 : int fallback(int f, struct stat* st)</span></a>
@ -261,11 +261,11 @@
<a name="199"><span class="lineNum"> 199 </span> : * Create a symlink.</a>
<a name="200"><span class="lineNum"> 200 </span> : * - If the file already exists, it's removed.</a>
<a name="201"><span class="lineNum"> 201 </span> : */</a>
<a name="202"><span class="lineNum"> 202 </span><span class="lineCov"> 940 : void cmd_generate_symlink(const char* path, const char* linkto)</span></a>
<a name="202"><span class="lineNum"> 202 </span><span class="lineCov"> 932 : void cmd_generate_symlink(const char* path, const char* linkto)</span></a>
<a name="203"><span class="lineNum"> 203 </span> : {</a>
<a name="204"><span class="lineNum"> 204 </span> : /* remove the existing file/symlink if any */</a>
<a name="205"><span class="lineNum"> 205 </span><span class="lineCov"> 940 : if (remove(path) != 0) {</span></a>
<a name="206"><span class="lineNum"> 206 </span><span class="lineCov"> 919 : if (errno != ENOENT) {</span></a>
<a name="205"><span class="lineNum"> 205 </span><span class="lineCov"> 932 : if (remove(path) != 0) {</span></a>
<a name="206"><span class="lineNum"> 206 </span><span class="lineCov"> 911 : if (errno != ENOENT) {</span></a>
<a name="207"><span class="lineNum"> 207 </span> : /* LCOV_EXCL_START */</a>
<a name="208"><span class="lineNum"> 208 </span> : log_fatal(errno, &quot;Error removing file %s\n&quot;, path);</a>
<a name="209"><span class="lineNum"> 209 </span> : exit(EXIT_FAILURE);</a>
@ -273,13 +273,13 @@
<a name="211"><span class="lineNum"> 211 </span> : }</a>
<a name="212"><span class="lineNum"> 212 </span> : }</a>
<a name="213"><span class="lineNum"> 213 </span> : </a>
<a name="214"><span class="lineNum"> 214 </span><span class="lineCov"> 940 : if (symlink(linkto, path) != 0) {</span></a>
<a name="214"><span class="lineNum"> 214 </span><span class="lineCov"> 932 : if (symlink(linkto, path) != 0) {</span></a>
<a name="215"><span class="lineNum"> 215 </span> : /* LCOV_EXCL_START */</a>
<a name="216"><span class="lineNum"> 216 </span> : log_fatal(errno, &quot;Error writing symlink %s\n&quot;, path);</a>
<a name="217"><span class="lineNum"> 217 </span> : exit(EXIT_FAILURE);</a>
<a name="218"><span class="lineNum"> 218 </span> : /* LCOV_EXCL_STOP */</a>
<a name="219"><span class="lineNum"> 219 </span> : }</a>
<a name="220"><span class="lineNum"> 220 </span><span class="lineCov"> 940 : }</span></a>
<a name="220"><span class="lineNum"> 220 </span><span class="lineCov"> 932 : }</span></a>
<a name="221"><span class="lineNum"> 221 </span> : </a>
<a name="222"><span class="lineNum"> 222 </span> : /**</a>
<a name="223"><span class="lineNum"> 223 </span> : * Create a file or a symlink with a random name.</a>
@ -352,68 +352,68 @@
<a name="290"><span class="lineNum"> 290 </span> : * - The written data may be equal or not at the already existing one.</a>
<a name="291"><span class="lineNum"> 291 </span> : * - If it's a symlink nothing is done.</a>
<a name="292"><span class="lineNum"> 292 </span> : */</a>
<a name="293"><span class="lineNum"> 293 </span><span class="lineCov"> 6176 : void cmd_write(const char* path, int size)</span></a>
<a name="293"><span class="lineNum"> 293 </span><span class="lineCov"> 6236 : void cmd_write(const char* path, int size)</span></a>
<a name="294"><span class="lineNum"> 294 </span> : {</a>
<a name="295"><span class="lineNum"> 295 </span> : struct stat st;</a>
<a name="296"><span class="lineNum"> 296 </span> : </a>
<a name="297"><span class="lineNum"> 297 </span><span class="lineCov"> 6176 : if (lstat(path, &amp;st) != 0) {</span></a>
<a name="297"><span class="lineNum"> 297 </span><span class="lineCov"> 6236 : if (lstat(path, &amp;st) != 0) {</span></a>
<a name="298"><span class="lineNum"> 298 </span> : /* LCOV_EXCL_START */</a>
<a name="299"><span class="lineNum"> 299 </span> : log_fatal(errno, &quot;Error accessing %s\n&quot;, path);</a>
<a name="300"><span class="lineNum"> 300 </span> : exit(EXIT_FAILURE);</a>
<a name="301"><span class="lineNum"> 301 </span> : /* LCOV_EXCL_STOP */</a>
<a name="302"><span class="lineNum"> 302 </span> : }</a>
<a name="303"><span class="lineNum"> 303 </span> : </a>
<a name="304"><span class="lineNum"> 304 </span><span class="lineCov"> 6176 : if (S_ISREG(st.st_mode)) {</span></a>
<a name="304"><span class="lineNum"> 304 </span><span class="lineCov"> 6236 : if (S_ISREG(st.st_mode)) {</span></a>
<a name="305"><span class="lineNum"> 305 </span> : unsigned char* data;</a>
<a name="306"><span class="lineNum"> 306 </span> : off_t off;</a>
<a name="307"><span class="lineNum"> 307 </span> : int f;</a>
<a name="308"><span class="lineNum"> 308 </span> : </a>
<a name="309"><span class="lineNum"> 309 </span> : /* not over the end */</a>
<a name="310"><span class="lineNum"> 310 </span><span class="lineCov"> 6149 : if (size &gt; st.st_size)</span></a>
<a name="311"><span class="lineNum"> 311 </span><span class="lineCov"> 686 : size = st.st_size;</span></a>
<a name="310"><span class="lineNum"> 310 </span><span class="lineCov"> 6209 : if (size &gt; st.st_size)</span></a>
<a name="311"><span class="lineNum"> 311 </span><span class="lineCov"> 677 : size = st.st_size;</span></a>
<a name="312"><span class="lineNum"> 312 </span> : </a>
<a name="313"><span class="lineNum"> 313 </span> : /* start at random position inside the file */</a>
<a name="314"><span class="lineNum"> 314 </span><span class="lineCov"> 6149 : if (size &lt; st.st_size)</span></a>
<a name="315"><span class="lineNum"> 315 </span><span class="lineCov"> 5463 : off = rnd(st.st_size - size);</span></a>
<a name="314"><span class="lineNum"> 314 </span><span class="lineCov"> 6209 : if (size &lt; st.st_size)</span></a>
<a name="315"><span class="lineNum"> 315 </span><span class="lineCov"> 5530 : off = rnd(st.st_size - size);</span></a>
<a name="316"><span class="lineNum"> 316 </span> : else</a>
<a name="317"><span class="lineNum"> 317 </span><span class="lineCov"> 686 : off = 0;</span></a>
<a name="317"><span class="lineNum"> 317 </span><span class="lineCov"> 679 : off = 0;</span></a>
<a name="318"><span class="lineNum"> 318 </span> : </a>
<a name="319"><span class="lineNum"> 319 </span><span class="lineCov"> 6149 : data = malloc(size);</span></a>
<a name="319"><span class="lineNum"> 319 </span><span class="lineCov"> 6209 : data = malloc(size);</span></a>
<a name="320"><span class="lineNum"> 320 </span> : </a>
<a name="321"><span class="lineNum"> 321 </span><span class="lineCov"> 6149 : rndnz_range(data, size);</span></a>
<a name="321"><span class="lineNum"> 321 </span><span class="lineCov"> 6209 : rndnz_range(data, size);</span></a>
<a name="322"><span class="lineNum"> 322 </span> : </a>
<a name="323"><span class="lineNum"> 323 </span><span class="lineCov"> 6149 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span></a>
<a name="324"><span class="lineNum"> 324 </span><span class="lineCov"> 6149 : if (f &lt; 0) {</span></a>
<a name="323"><span class="lineNum"> 323 </span><span class="lineCov"> 6209 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span></a>
<a name="324"><span class="lineNum"> 324 </span><span class="lineCov"> 6209 : if (f &lt; 0) {</span></a>
<a name="325"><span class="lineNum"> 325 </span> : /* LCOV_EXCL_START */</a>
<a name="326"><span class="lineNum"> 326 </span> : log_fatal(errno, &quot;Error creating file %s\n&quot;, path);</a>
<a name="327"><span class="lineNum"> 327 </span> : exit(EXIT_FAILURE);</a>
<a name="328"><span class="lineNum"> 328 </span> : /* LCOV_EXCL_STOP */</a>
<a name="329"><span class="lineNum"> 329 </span> : }</a>
<a name="330"><span class="lineNum"> 330 </span> : </a>
<a name="331"><span class="lineNum"> 331 </span><span class="lineCov"> 6149 : if (lseek(f, off, SEEK_SET) != off) {</span></a>
<a name="331"><span class="lineNum"> 331 </span><span class="lineCov"> 6209 : if (lseek(f, off, SEEK_SET) != off) {</span></a>
<a name="332"><span class="lineNum"> 332 </span> : /* LCOV_EXCL_START */</a>
<a name="333"><span class="lineNum"> 333 </span> : log_fatal(errno, &quot;Error seeking file %s\n&quot;, path);</a>
<a name="334"><span class="lineNum"> 334 </span> : exit(EXIT_FAILURE);</a>
<a name="335"><span class="lineNum"> 335 </span> : /* LCOV_EXCL_STOP */</a>
<a name="336"><span class="lineNum"> 336 </span> : }</a>
<a name="337"><span class="lineNum"> 337 </span> : </a>
<a name="338"><span class="lineNum"> 338 </span><span class="lineCov"> 6149 : if (write(f, data, size) != size) {</span></a>
<a name="338"><span class="lineNum"> 338 </span><span class="lineCov"> 6209 : if (write(f, data, size) != size) {</span></a>
<a name="339"><span class="lineNum"> 339 </span> : /* LCOV_EXCL_START */</a>
<a name="340"><span class="lineNum"> 340 </span> : log_fatal(errno, &quot;Error writing file %s\n&quot;, path);</a>
<a name="341"><span class="lineNum"> 341 </span> : exit(EXIT_FAILURE);</a>
<a name="342"><span class="lineNum"> 342 </span> : /* LCOV_EXCL_STOP */</a>
<a name="343"><span class="lineNum"> 343 </span> : }</a>
<a name="344"><span class="lineNum"> 344 </span> : </a>
<a name="345"><span class="lineNum"> 345 </span><span class="lineCov"> 6149 : if (close(f) != 0) {</span></a>
<a name="345"><span class="lineNum"> 345 </span><span class="lineCov"> 6209 : if (close(f) != 0) {</span></a>
<a name="346"><span class="lineNum"> 346 </span> : /* LCOV_EXCL_START */</a>
<a name="347"><span class="lineNum"> 347 </span> : log_fatal(errno, &quot;Error closing file %s\n&quot;, path);</a>
<a name="348"><span class="lineNum"> 348 </span> : exit(EXIT_FAILURE);</a>
<a name="349"><span class="lineNum"> 349 </span> : /* LCOV_EXCL_STOP */</a>
<a name="350"><span class="lineNum"> 350 </span> : }</a>
<a name="351"><span class="lineNum"> 351 </span> : </a>
<a name="352"><span class="lineNum"> 352 </span><span class="lineCov"> 6149 : free(data);</span></a>
<a name="352"><span class="lineNum"> 352 </span><span class="lineCov"> 6209 : free(data);</span></a>
<a name="353"><span class="lineNum"> 353 </span> : }</a>
<a name="354"><span class="lineNum"> 354 </span><span class="lineCov"> 6176 : }</span></a>
<a name="354"><span class="lineNum"> 354 </span><span class="lineCov"> 6236 : }</span></a>
<a name="355"><span class="lineNum"> 355 </span> : </a>
<a name="356"><span class="lineNum"> 356 </span> : /**</a>
<a name="357"><span class="lineNum"> 357 </span> : * Damage a file.</a>
@ -520,50 +520,50 @@
<a name="458"><span class="lineNum"> 458 </span> : * - The file must exist.</a>
<a name="459"><span class="lineNum"> 459 </span> : * - If it's a symlink nothing is done.</a>
<a name="460"><span class="lineNum"> 460 </span> : */</a>
<a name="461"><span class="lineNum"> 461 </span><span class="lineCov"> 3258 : void cmd_append(const char* path, int size)</span></a>
<a name="461"><span class="lineNum"> 461 </span><span class="lineCov"> 3215 : void cmd_append(const char* path, int size)</span></a>
<a name="462"><span class="lineNum"> 462 </span> : {</a>
<a name="463"><span class="lineNum"> 463 </span> : struct stat st;</a>
<a name="464"><span class="lineNum"> 464 </span> : </a>
<a name="465"><span class="lineNum"> 465 </span><span class="lineCov"> 3258 : if (lstat(path, &amp;st) != 0) {</span></a>
<a name="465"><span class="lineNum"> 465 </span><span class="lineCov"> 3215 : if (lstat(path, &amp;st) != 0) {</span></a>
<a name="466"><span class="lineNum"> 466 </span> : /* LCOV_EXCL_START */</a>
<a name="467"><span class="lineNum"> 467 </span> : log_fatal(errno, &quot;Error accessing %s\n&quot;, path);</a>
<a name="468"><span class="lineNum"> 468 </span> : exit(EXIT_FAILURE);</a>
<a name="469"><span class="lineNum"> 469 </span> : /* LCOV_EXCL_STOP */</a>
<a name="470"><span class="lineNum"> 470 </span> : }</a>
<a name="471"><span class="lineNum"> 471 </span> : </a>
<a name="472"><span class="lineNum"> 472 </span><span class="lineCov"> 3258 : if (S_ISREG(st.st_mode)) {</span></a>
<a name="472"><span class="lineNum"> 472 </span><span class="lineCov"> 3215 : if (S_ISREG(st.st_mode)) {</span></a>
<a name="473"><span class="lineNum"> 473 </span> : unsigned char* data;</a>
<a name="474"><span class="lineNum"> 474 </span> : int f;</a>
<a name="475"><span class="lineNum"> 475 </span> : </a>
<a name="476"><span class="lineNum"> 476 </span><span class="lineCov"> 3258 : data = malloc(size);</span></a>
<a name="476"><span class="lineNum"> 476 </span><span class="lineCov"> 3215 : data = malloc(size);</span></a>
<a name="477"><span class="lineNum"> 477 </span> : </a>
<a name="478"><span class="lineNum"> 478 </span><span class="lineCov"> 3258 : rndnz_range(data, size);</span></a>
<a name="478"><span class="lineNum"> 478 </span><span class="lineCov"> 3215 : rndnz_range(data, size);</span></a>
<a name="479"><span class="lineNum"> 479 </span> : </a>
<a name="480"><span class="lineNum"> 480 </span><span class="lineCov"> 3258 : f = open(path, O_WRONLY | O_APPEND | O_BINARY | O_NOFOLLOW);</span></a>
<a name="481"><span class="lineNum"> 481 </span><span class="lineCov"> 3258 : if (f &lt; 0) {</span></a>
<a name="480"><span class="lineNum"> 480 </span><span class="lineCov"> 3215 : f = open(path, O_WRONLY | O_APPEND | O_BINARY | O_NOFOLLOW);</span></a>
<a name="481"><span class="lineNum"> 481 </span><span class="lineCov"> 3215 : if (f &lt; 0) {</span></a>
<a name="482"><span class="lineNum"> 482 </span> : /* LCOV_EXCL_START */</a>
<a name="483"><span class="lineNum"> 483 </span> : log_fatal(errno, &quot;Error opening file %s\n&quot;, path);</a>
<a name="484"><span class="lineNum"> 484 </span> : exit(EXIT_FAILURE);</a>
<a name="485"><span class="lineNum"> 485 </span> : /* LCOV_EXCL_STOP */</a>
<a name="486"><span class="lineNum"> 486 </span> : }</a>
<a name="487"><span class="lineNum"> 487 </span> : </a>
<a name="488"><span class="lineNum"> 488 </span><span class="lineCov"> 3258 : if (write(f, data, size) != size) {</span></a>
<a name="488"><span class="lineNum"> 488 </span><span class="lineCov"> 3215 : if (write(f, data, size) != size) {</span></a>
<a name="489"><span class="lineNum"> 489 </span> : /* LCOV_EXCL_START */</a>
<a name="490"><span class="lineNum"> 490 </span> : log_fatal(errno, &quot;Error writing file %s\n&quot;, path);</a>
<a name="491"><span class="lineNum"> 491 </span> : exit(EXIT_FAILURE);</a>
<a name="492"><span class="lineNum"> 492 </span> : /* LCOV_EXCL_STOP */</a>
<a name="493"><span class="lineNum"> 493 </span> : }</a>
<a name="494"><span class="lineNum"> 494 </span> : </a>
<a name="495"><span class="lineNum"> 495 </span><span class="lineCov"> 3258 : if (close(f) != 0) {</span></a>
<a name="495"><span class="lineNum"> 495 </span><span class="lineCov"> 3215 : if (close(f) != 0) {</span></a>
<a name="496"><span class="lineNum"> 496 </span> : /* LCOV_EXCL_START */</a>
<a name="497"><span class="lineNum"> 497 </span> : log_fatal(errno, &quot;Error closing file %s\n&quot;, path);</a>
<a name="498"><span class="lineNum"> 498 </span> : exit(EXIT_FAILURE);</a>
<a name="499"><span class="lineNum"> 499 </span> : /* LCOV_EXCL_STOP */</a>
<a name="500"><span class="lineNum"> 500 </span> : }</a>
<a name="501"><span class="lineNum"> 501 </span> : </a>
<a name="502"><span class="lineNum"> 502 </span><span class="lineCov"> 3258 : free(data);</span></a>
<a name="502"><span class="lineNum"> 502 </span><span class="lineCov"> 3215 : free(data);</span></a>
<a name="503"><span class="lineNum"> 503 </span> : }</a>
<a name="504"><span class="lineNum"> 504 </span><span class="lineCov"> 3258 : }</span></a>
<a name="504"><span class="lineNum"> 504 </span><span class="lineCov"> 3215 : }</span></a>
<a name="505"><span class="lineNum"> 505 </span> : </a>
<a name="506"><span class="lineNum"> 506 </span> : /**</a>
<a name="507"><span class="lineNum"> 507 </span> : * Truncate a file.</a>
@ -571,69 +571,69 @@
<a name="509"><span class="lineNum"> 509 </span> : * - The file is NEVER truncated to 0.</a>
<a name="510"><span class="lineNum"> 510 </span> : * - If it's a symlink nothing is done.</a>
<a name="511"><span class="lineNum"> 511 </span> : */</a>
<a name="512"><span class="lineNum"> 512 </span><span class="lineCov"> 3121 : void cmd_truncate(const char* path, int size)</span></a>
<a name="512"><span class="lineNum"> 512 </span><span class="lineCov"> 3136 : void cmd_truncate(const char* path, int size)</span></a>
<a name="513"><span class="lineNum"> 513 </span> : {</a>
<a name="514"><span class="lineNum"> 514 </span> : struct stat st;</a>
<a name="515"><span class="lineNum"> 515 </span> : </a>
<a name="516"><span class="lineNum"> 516 </span><span class="lineCov"> 3121 : if (lstat(path, &amp;st) != 0) {</span></a>
<a name="516"><span class="lineNum"> 516 </span><span class="lineCov"> 3136 : if (lstat(path, &amp;st) != 0) {</span></a>
<a name="517"><span class="lineNum"> 517 </span> : /* LCOV_EXCL_START */</a>
<a name="518"><span class="lineNum"> 518 </span> : log_fatal(errno, &quot;Error accessing %s\n&quot;, path);</a>
<a name="519"><span class="lineNum"> 519 </span> : exit(EXIT_FAILURE);</a>
<a name="520"><span class="lineNum"> 520 </span> : /* LCOV_EXCL_STOP */</a>
<a name="521"><span class="lineNum"> 521 </span> : }</a>
<a name="522"><span class="lineNum"> 522 </span> : </a>
<a name="523"><span class="lineNum"> 523 </span><span class="lineCov"> 3121 : if (S_ISREG(st.st_mode)) {</span></a>
<a name="523"><span class="lineNum"> 523 </span><span class="lineCov"> 3136 : if (S_ISREG(st.st_mode)) {</span></a>
<a name="524"><span class="lineNum"> 524 </span> : off_t off;</a>
<a name="525"><span class="lineNum"> 525 </span> : int f;</a>
<a name="526"><span class="lineNum"> 526 </span> : </a>
<a name="527"><span class="lineNum"> 527 </span> : /* if file is empty, just rewrite it */</a>
<a name="528"><span class="lineNum"> 528 </span><span class="lineCov"> 3121 : if (st.st_size == 0) {</span></a>
<a name="529"><span class="lineNum"> 529 </span><span class="lineNoCov"> 0 : size = 0;</span></a>
<a name="528"><span class="lineNum"> 528 </span><span class="lineCov"> 3136 : if (st.st_size == 0) {</span></a>
<a name="529"><span class="lineNum"> 529 </span><span class="lineCov"> 4 : size = 0;</span></a>
<a name="530"><span class="lineNum"> 530 </span> : } else {</a>
<a name="531"><span class="lineNum"> 531 </span> : /* don't truncate files to 0 size to avoid ZERO file size protection */</a>
<a name="532"><span class="lineNum"> 532 </span><span class="lineCov"> 3121 : if (size &gt;= st.st_size)</span></a>
<a name="533"><span class="lineNum"> 533 </span><span class="lineCov"> 196 : size = st.st_size - 1;</span></a>
<a name="532"><span class="lineNum"> 532 </span><span class="lineCov"> 3132 : if (size &gt;= st.st_size)</span></a>
<a name="533"><span class="lineNum"> 533 </span><span class="lineCov"> 182 : size = st.st_size - 1;</span></a>
<a name="534"><span class="lineNum"> 534 </span> : }</a>
<a name="535"><span class="lineNum"> 535 </span> : </a>
<a name="536"><span class="lineNum"> 536 </span><span class="lineCov"> 3121 : off = st.st_size - size;</span></a>
<a name="536"><span class="lineNum"> 536 </span><span class="lineCov"> 3136 : off = st.st_size - size;</span></a>
<a name="537"><span class="lineNum"> 537 </span> : </a>
<a name="538"><span class="lineNum"> 538 </span><span class="lineCov"> 3121 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span></a>
<a name="539"><span class="lineNum"> 539 </span><span class="lineCov"> 3121 : if (f &lt; 0) {</span></a>
<a name="538"><span class="lineNum"> 538 </span><span class="lineCov"> 3136 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span></a>
<a name="539"><span class="lineNum"> 539 </span><span class="lineCov"> 3136 : if (f &lt; 0) {</span></a>
<a name="540"><span class="lineNum"> 540 </span> : /* LCOV_EXCL_START */</a>
<a name="541"><span class="lineNum"> 541 </span> : log_fatal(errno, &quot;Error opening file %s\n&quot;, path);</a>
<a name="542"><span class="lineNum"> 542 </span> : exit(EXIT_FAILURE);</a>
<a name="543"><span class="lineNum"> 543 </span> : /* LCOV_EXCL_STOP */</a>
<a name="544"><span class="lineNum"> 544 </span> : }</a>
<a name="545"><span class="lineNum"> 545 </span> : </a>
<a name="546"><span class="lineNum"> 546 </span><span class="lineCov"> 3121 : if (ftruncate(f, off) != 0) {</span></a>
<a name="546"><span class="lineNum"> 546 </span><span class="lineCov"> 3136 : if (ftruncate(f, off) != 0) {</span></a>
<a name="547"><span class="lineNum"> 547 </span> : /* LCOV_EXCL_START */</a>
<a name="548"><span class="lineNum"> 548 </span> : log_fatal(errno, &quot;Error truncating file %s\n&quot;, path);</a>
<a name="549"><span class="lineNum"> 549 </span> : exit(EXIT_FAILURE);</a>
<a name="550"><span class="lineNum"> 550 </span> : /* LCOV_EXCL_STOP */</a>
<a name="551"><span class="lineNum"> 551 </span> : }</a>
<a name="552"><span class="lineNum"> 552 </span> : </a>
<a name="553"><span class="lineNum"> 553 </span><span class="lineCov"> 3121 : if (close(f) != 0) {</span></a>
<a name="553"><span class="lineNum"> 553 </span><span class="lineCov"> 3136 : if (close(f) != 0) {</span></a>
<a name="554"><span class="lineNum"> 554 </span> : /* LCOV_EXCL_START */</a>
<a name="555"><span class="lineNum"> 555 </span> : log_fatal(errno, &quot;Error closing file %s\n&quot;, path);</a>
<a name="556"><span class="lineNum"> 556 </span> : exit(EXIT_FAILURE);</a>
<a name="557"><span class="lineNum"> 557 </span> : /* LCOV_EXCL_STOP */</a>
<a name="558"><span class="lineNum"> 558 </span> : }</a>
<a name="559"><span class="lineNum"> 559 </span> : }</a>
<a name="560"><span class="lineNum"> 560 </span><span class="lineCov"> 3121 : }</span></a>
<a name="560"><span class="lineNum"> 560 </span><span class="lineCov"> 3136 : }</span></a>
<a name="561"><span class="lineNum"> 561 </span> : </a>
<a name="562"><span class="lineNum"> 562 </span> : /**</a>
<a name="563"><span class="lineNum"> 563 </span> : * Delete a file.</a>
<a name="564"><span class="lineNum"> 564 </span> : * - The file must exist.</a>
<a name="565"><span class="lineNum"> 565 </span> : */</a>
<a name="566"><span class="lineNum"> 566 </span><span class="lineCov"> 3205 : void cmd_delete(const char* path)</span></a>
<a name="566"><span class="lineNum"> 566 </span><span class="lineCov"> 3160 : void cmd_delete(const char* path)</span></a>
<a name="567"><span class="lineNum"> 567 </span> : {</a>
<a name="568"><span class="lineNum"> 568 </span><span class="lineCov"> 3205 : if (remove(path) != 0) {</span></a>
<a name="568"><span class="lineNum"> 568 </span><span class="lineCov"> 3160 : if (remove(path) != 0) {</span></a>
<a name="569"><span class="lineNum"> 569 </span> : /* LCOV_EXCL_START */</a>
<a name="570"><span class="lineNum"> 570 </span> : log_fatal(errno, &quot;Error removing %s\n&quot;, path);</a>
<a name="571"><span class="lineNum"> 571 </span> : exit(EXIT_FAILURE);</a>
<a name="572"><span class="lineNum"> 572 </span> : /* LCOV_EXCL_STOP */</a>
<a name="573"><span class="lineNum"> 573 </span> : }</a>
<a name="574"><span class="lineNum"> 574 </span><span class="lineCov"> 3205 : }</span></a>
<a name="574"><span class="lineNum"> 574 </span><span class="lineCov"> 3160 : }</span></a>
<a name="575"><span class="lineNum"> 575 </span> : </a>
<a name="576"><span class="lineNum"> 576 </span> : /**</a>
<a name="577"><span class="lineNum"> 577 </span> : * Change a file. Or deleted/truncated/append/created.</a>
@ -644,20 +644,20 @@
<a name="582"><span class="lineNum"> 582 </span> : struct stat st;</a>
<a name="583"><span class="lineNum"> 583 </span> : </a>
<a name="584"><span class="lineNum"> 584 </span><span class="lineCov"> 13128 : if (!size)</span></a>
<a name="585"><span class="lineNum"> 585 </span><span class="lineCov"> 23 : return;</span></a>
<a name="585"><span class="lineNum"> 585 </span><span class="lineCov"> 36 : return;</span></a>
<a name="586"><span class="lineNum"> 586 </span> : </a>
<a name="587"><span class="lineNum"> 587 </span><span class="lineCov"> 13105 : if (lstat(path, &amp;st) != 0) {</span></a>
<a name="587"><span class="lineNum"> 587 </span><span class="lineCov"> 13092 : if (lstat(path, &amp;st) != 0) {</span></a>
<a name="588"><span class="lineNum"> 588 </span> : /* LCOV_EXCL_START */</a>
<a name="589"><span class="lineNum"> 589 </span> : log_fatal(errno, &quot;Error accessing %s\n&quot;, path);</a>
<a name="590"><span class="lineNum"> 590 </span> : exit(EXIT_FAILURE);</a>
<a name="591"><span class="lineNum"> 591 </span> : /* LCOV_EXCL_STOP */</a>
<a name="592"><span class="lineNum"> 592 </span> : }</a>
<a name="593"><span class="lineNum"> 593 </span> : </a>
<a name="594"><span class="lineNum"> 594 </span><span class="lineCov"> 13105 : if (S_ISLNK(st.st_mode)) {</span></a>
<a name="594"><span class="lineNum"> 594 </span><span class="lineCov"> 13092 : if (S_ISLNK(st.st_mode)) {</span></a>
<a name="595"><span class="lineNum"> 595 </span> : /* symlink */</a>
<a name="596"><span class="lineNum"> 596 </span><span class="lineCov"> 394 : if (rnd(2) == 0) {</span></a>
<a name="597"><span class="lineNum"> 597 </span> : /* delete */</a>
<a name="598"><span class="lineNum"> 598 </span><span class="lineCov"> 187 : if (remove(path) != 0) {</span></a>
<a name="598"><span class="lineNum"> 598 </span><span class="lineCov"> 195 : if (remove(path) != 0) {</span></a>
<a name="599"><span class="lineNum"> 599 </span> : /* LCOV_EXCL_START */</a>
<a name="600"><span class="lineNum"> 600 </span> : log_fatal(errno, &quot;Error removing %s\n&quot;, path);</a>
<a name="601"><span class="lineNum"> 601 </span> : exit(EXIT_FAILURE);</a>
@ -667,30 +667,30 @@
<a name="605"><span class="lineNum"> 605 </span> : /* recreate */</a>
<a name="606"><span class="lineNum"> 606 </span> : char linkto[PATH_MAX];</a>
<a name="607"><span class="lineNum"> 607 </span> : </a>
<a name="608"><span class="lineNum"> 608 </span><span class="lineCov"> 207 : if (remove(path) != 0) {</span></a>
<a name="608"><span class="lineNum"> 608 </span><span class="lineCov"> 199 : if (remove(path) != 0) {</span></a>
<a name="609"><span class="lineNum"> 609 </span> : /* LCOV_EXCL_START */</a>
<a name="610"><span class="lineNum"> 610 </span> : log_fatal(errno, &quot;Error removing %s\n&quot;, path);</a>
<a name="611"><span class="lineNum"> 611 </span> : exit(EXIT_FAILURE);</a>
<a name="612"><span class="lineNum"> 612 </span> : /* LCOV_EXCL_STOP */</a>
<a name="613"><span class="lineNum"> 613 </span> : }</a>
<a name="614"><span class="lineNum"> 614 </span> : </a>
<a name="615"><span class="lineNum"> 615 </span><span class="lineCov"> 207 : rnd_name(linkto);</span></a>
<a name="615"><span class="lineNum"> 615 </span><span class="lineCov"> 199 : rnd_name(linkto);</span></a>
<a name="616"><span class="lineNum"> 616 </span> : </a>
<a name="617"><span class="lineNum"> 617 </span><span class="lineCov"> 207 : cmd_generate_symlink(path, linkto);</span></a>
<a name="617"><span class="lineNum"> 617 </span><span class="lineCov"> 199 : cmd_generate_symlink(path, linkto);</span></a>
<a name="618"><span class="lineNum"> 618 </span> : }</a>
<a name="619"><span class="lineNum"> 619 </span><span class="lineCov"> 12711 : } else if (S_ISREG(st.st_mode)) {</span></a>
<a name="619"><span class="lineNum"> 619 </span><span class="lineCov"> 12698 : } else if (S_ISREG(st.st_mode)) {</span></a>
<a name="620"><span class="lineNum"> 620 </span> : int r;</a>
<a name="621"><span class="lineNum"> 621 </span> : </a>
<a name="622"><span class="lineNum"> 622 </span><span class="lineCov"> 12711 : r = rnd(4);</span></a>
<a name="622"><span class="lineNum"> 622 </span><span class="lineCov"> 12698 : r = rnd(4);</span></a>
<a name="623"><span class="lineNum"> 623 </span> : </a>
<a name="624"><span class="lineNum"> 624 </span><span class="lineCov"> 12711 : if (r == 0) {</span></a>
<a name="625"><span class="lineNum"> 625 </span><span class="lineCov"> 3127 : cmd_write(path, size);</span></a>
<a name="626"><span class="lineNum"> 626 </span><span class="lineCov"> 9584 : } else if (r == 1) {</span></a>
<a name="627"><span class="lineNum"> 627 </span><span class="lineCov"> 3258 : cmd_append(path, size);</span></a>
<a name="628"><span class="lineNum"> 628 </span><span class="lineCov"> 6326 : } else if (r == 2) {</span></a>
<a name="629"><span class="lineNum"> 629 </span><span class="lineCov"> 3121 : cmd_truncate(path, size);</span></a>
<a name="624"><span class="lineNum"> 624 </span><span class="lineCov"> 12698 : if (r == 0) {</span></a>
<a name="625"><span class="lineNum"> 625 </span><span class="lineCov"> 3187 : cmd_write(path, size);</span></a>
<a name="626"><span class="lineNum"> 626 </span><span class="lineCov"> 9511 : } else if (r == 1) {</span></a>
<a name="627"><span class="lineNum"> 627 </span><span class="lineCov"> 3215 : cmd_append(path, size);</span></a>
<a name="628"><span class="lineNum"> 628 </span><span class="lineCov"> 6296 : } else if (r == 2) {</span></a>
<a name="629"><span class="lineNum"> 629 </span><span class="lineCov"> 3136 : cmd_truncate(path, size);</span></a>
<a name="630"><span class="lineNum"> 630 </span> : } else {</a>
<a name="631"><span class="lineNum"> 631 </span><span class="lineCov"> 3205 : cmd_delete(path);</span></a>
<a name="631"><span class="lineNum"> 631 </span><span class="lineCov"> 3160 : cmd_delete(path);</span></a>
<a name="632"><span class="lineNum"> 632 </span> : }</a>
<a name="633"><span class="lineNum"> 633 </span> : }</a>
<a name="634"><span class="lineNum"> 634 </span> : }</a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -61,11 +61,11 @@
</tr>
<tr>
<td class="coverFn"><a href="murmur3.c.gcov.html#76">MurmurHash3_x86_128</a></td>
<td class="coverFnHi">2030257</td>
<td class="coverFnHi">2030240</td>
</tr>
<tr>
<td class="coverFn"><a href="murmur3.c.gcov.html#30">fmix32</a></td>
<td class="coverFnHi">8121028</td>
<td class="coverFnHi">8120960</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -61,11 +61,11 @@
</tr>
<tr>
<td class="coverFn"><a href="murmur3.c.gcov.html#76">MurmurHash3_x86_128</a></td>
<td class="coverFnHi">2030257</td>
<td class="coverFnHi">2030240</td>
</tr>
<tr>
<td class="coverFn"><a href="murmur3.c.gcov.html#30">fmix32</a></td>
<td class="coverFnHi">8121028</td>
<td class="coverFnHi">8120960</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -91,14 +91,14 @@
<a name="29"><span class="lineNum"> 29 </span> : // domain. The author hereby disclaims copyright to this source code.</a>
<a name="30"><span class="lineNum"> 30 </span> : </a>
<a name="31"><span class="lineNum"> 31 </span> : /* Finalization mix - force all bits of a hash block to avalanche */</a>
<a name="32"><span class="lineNum"> 32 </span><span class="lineCov"> 8121028 : static inline uint32_t fmix32(uint32_t h)</span></a>
<a name="32"><span class="lineNum"> 32 </span><span class="lineCov"> 8120960 : static inline uint32_t fmix32(uint32_t h)</span></a>
<a name="33"><span class="lineNum"> 33 </span> : {</a>
<a name="34"><span class="lineNum"> 34 </span><span class="lineCov"> 8121028 : h ^= h &gt;&gt; 16;</span></a>
<a name="35"><span class="lineNum"> 35 </span><span class="lineCov"> 8121028 : h *= 0x85ebca6b;</span></a>
<a name="36"><span class="lineNum"> 36 </span><span class="lineCov"> 8121028 : h ^= h &gt;&gt; 13;</span></a>
<a name="37"><span class="lineNum"> 37 </span><span class="lineCov"> 8121028 : h *= 0xc2b2ae35;</span></a>
<a name="38"><span class="lineNum"> 38 </span><span class="lineCov"> 8121028 : h ^= h &gt;&gt; 16;</span></a>
<a name="39"><span class="lineNum"> 39 </span><span class="lineCov"> 8121028 : return h;</span></a>
<a name="34"><span class="lineNum"> 34 </span><span class="lineCov"> 8120960 : h ^= h &gt;&gt; 16;</span></a>
<a name="35"><span class="lineNum"> 35 </span><span class="lineCov"> 8120960 : h *= 0x85ebca6b;</span></a>
<a name="36"><span class="lineNum"> 36 </span><span class="lineCov"> 8120960 : h ^= h &gt;&gt; 13;</span></a>
<a name="37"><span class="lineNum"> 37 </span><span class="lineCov"> 8120960 : h *= 0xc2b2ae35;</span></a>
<a name="38"><span class="lineNum"> 38 </span><span class="lineCov"> 8120960 : h ^= h &gt;&gt; 16;</span></a>
<a name="39"><span class="lineNum"> 39 </span><span class="lineCov"> 8120960 : return h;</span></a>
<a name="40"><span class="lineNum"> 40 </span> : }</a>
<a name="41"><span class="lineNum"> 41 </span> : </a>
<a name="42"><span class="lineNum"> 42 </span> : /*</a>
@ -137,7 +137,7 @@
<a name="75"><span class="lineNum"> 75 </span> : uint32_t c3 = 0x38b34ae5;</a>
<a name="76"><span class="lineNum"> 76 </span> : uint32_t c4 = 0xa1e38b93;</a>
<a name="77"><span class="lineNum"> 77 </span> : </a>
<a name="78"><span class="lineNum"> 78 </span><span class="lineCov"> 2030257 : void MurmurHash3_x86_128(const void* data, size_t size, const uint8_t* seed, void* digest)</span></a>
<a name="78"><span class="lineNum"> 78 </span><span class="lineCov"> 2030240 : void MurmurHash3_x86_128(const void* data, size_t size, const uint8_t* seed, void* digest)</span></a>
<a name="79"><span class="lineNum"> 79 </span> : {</a>
<a name="80"><span class="lineNum"> 80 </span> : size_t nblocks;</a>
<a name="81"><span class="lineNum"> 81 </span> : const uint32_t* blocks;</a>
@ -145,21 +145,21 @@
<a name="83"><span class="lineNum"> 83 </span> : size_t size_remainder;</a>
<a name="84"><span class="lineNum"> 84 </span> : uint32_t h1, h2, h3, h4;</a>
<a name="85"><span class="lineNum"> 85 </span> : </a>
<a name="86"><span class="lineNum"> 86 </span><span class="lineCov"> 2030257 : h1 = util_read32(seed + 0);</span></a>
<a name="87"><span class="lineNum"> 87 </span><span class="lineCov"> 2030257 : h2 = util_read32(seed + 4);</span></a>
<a name="88"><span class="lineNum"> 88 </span><span class="lineCov"> 2030257 : h3 = util_read32(seed + 8);</span></a>
<a name="89"><span class="lineNum"> 89 </span><span class="lineCov"> 2030257 : h4 = util_read32(seed + 12);</span></a>
<a name="86"><span class="lineNum"> 86 </span><span class="lineCov"> 2030240 : h1 = util_read32(seed + 0);</span></a>
<a name="87"><span class="lineNum"> 87 </span><span class="lineCov"> 2030240 : h2 = util_read32(seed + 4);</span></a>
<a name="88"><span class="lineNum"> 88 </span><span class="lineCov"> 2030240 : h3 = util_read32(seed + 8);</span></a>
<a name="89"><span class="lineNum"> 89 </span><span class="lineCov"> 2030240 : h4 = util_read32(seed + 12);</span></a>
<a name="90"><span class="lineNum"> 90 </span> : </a>
<a name="91"><span class="lineNum"> 91 </span><span class="lineCov"> 2030257 : nblocks = size / 16;</span></a>
<a name="92"><span class="lineNum"> 92 </span><span class="lineCov"> 2030257 : blocks = data;</span></a>
<a name="93"><span class="lineNum"> 93 </span><span class="lineCov"> 2030257 : end = blocks + nblocks * 4;</span></a>
<a name="91"><span class="lineNum"> 91 </span><span class="lineCov"> 2030240 : nblocks = size / 16;</span></a>
<a name="92"><span class="lineNum"> 92 </span><span class="lineCov"> 2030240 : blocks = data;</span></a>
<a name="93"><span class="lineNum"> 93 </span><span class="lineCov"> 2030240 : end = blocks + nblocks * 4;</span></a>
<a name="94"><span class="lineNum"> 94 </span> : </a>
<a name="95"><span class="lineNum"> 95 </span> : /* body */</a>
<a name="96"><span class="lineNum"> 96 </span><span class="lineCov"> 105999566 : while (blocks &lt; end) {</span></a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineCov"> 103969309 : uint32_t k1 = blocks[0];</span></a>
<a name="98"><span class="lineNum"> 98 </span><span class="lineCov"> 103969309 : uint32_t k2 = blocks[1];</span></a>
<a name="99"><span class="lineNum"> 99 </span><span class="lineCov"> 103969309 : uint32_t k3 = blocks[2];</span></a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineCov"> 103969309 : uint32_t k4 = blocks[3];</span></a>
<a name="96"><span class="lineNum"> 96 </span><span class="lineCov"> 106001256 : while (blocks &lt; end) {</span></a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineCov"> 103971016 : uint32_t k1 = blocks[0];</span></a>
<a name="98"><span class="lineNum"> 98 </span><span class="lineCov"> 103971016 : uint32_t k2 = blocks[1];</span></a>
<a name="99"><span class="lineNum"> 99 </span><span class="lineCov"> 103971016 : uint32_t k3 = blocks[2];</span></a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineCov"> 103971016 : uint32_t k4 = blocks[3];</span></a>
<a name="101"><span class="lineNum"> 101 </span> : </a>
<a name="102"><span class="lineNum"> 102 </span> : #if WORDS_BIGENDIAN</a>
<a name="103"><span class="lineNum"> 103 </span> : k1 = util_swap32(k1);</a>
@ -168,81 +168,81 @@
<a name="106"><span class="lineNum"> 106 </span> : k4 = util_swap32(k4);</a>
<a name="107"><span class="lineNum"> 107 </span> : #endif</a>
<a name="108"><span class="lineNum"> 108 </span> : </a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 103969309 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span></a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 103971016 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span></a>
<a name="110"><span class="lineNum"> 110 </span> : </a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 103969309 : h1 = util_rotl32(h1, 19); h1 += h2; h1 = h1 * 5 + 0x561ccd1b;</span></a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 103971016 : h1 = util_rotl32(h1, 19); h1 += h2; h1 = h1 * 5 + 0x561ccd1b;</span></a>
<a name="112"><span class="lineNum"> 112 </span> : </a>
<a name="113"><span class="lineNum"> 113 </span><span class="lineCov"> 103969309 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span></a>
<a name="113"><span class="lineNum"> 113 </span><span class="lineCov"> 103971016 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span></a>
<a name="114"><span class="lineNum"> 114 </span> : </a>
<a name="115"><span class="lineNum"> 115 </span><span class="lineCov"> 103969309 : h2 = util_rotl32(h2, 17); h2 += h3; h2 = h2 * 5 + 0x0bcaa747;</span></a>
<a name="115"><span class="lineNum"> 115 </span><span class="lineCov"> 103971016 : h2 = util_rotl32(h2, 17); h2 += h3; h2 = h2 * 5 + 0x0bcaa747;</span></a>
<a name="116"><span class="lineNum"> 116 </span> : </a>
<a name="117"><span class="lineNum"> 117 </span><span class="lineCov"> 103969309 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span></a>
<a name="117"><span class="lineNum"> 117 </span><span class="lineCov"> 103971016 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span></a>
<a name="118"><span class="lineNum"> 118 </span> : </a>
<a name="119"><span class="lineNum"> 119 </span><span class="lineCov"> 103969309 : h3 = util_rotl32(h3, 15); h3 += h4; h3 = h3 * 5 + 0x96cd1c35;</span></a>
<a name="119"><span class="lineNum"> 119 </span><span class="lineCov"> 103971016 : h3 = util_rotl32(h3, 15); h3 += h4; h3 = h3 * 5 + 0x96cd1c35;</span></a>
<a name="120"><span class="lineNum"> 120 </span> : </a>
<a name="121"><span class="lineNum"> 121 </span><span class="lineCov"> 103969309 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span></a>
<a name="121"><span class="lineNum"> 121 </span><span class="lineCov"> 103971016 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span></a>
<a name="122"><span class="lineNum"> 122 </span> : </a>
<a name="123"><span class="lineNum"> 123 </span><span class="lineCov"> 103969309 : h4 = util_rotl32(h4, 13); h4 += h1; h4 = h4 * 5 + 0x32ac3b17;</span></a>
<a name="123"><span class="lineNum"> 123 </span><span class="lineCov"> 103971016 : h4 = util_rotl32(h4, 13); h4 += h1; h4 = h4 * 5 + 0x32ac3b17;</span></a>
<a name="124"><span class="lineNum"> 124 </span> : </a>
<a name="125"><span class="lineNum"> 125 </span><span class="lineCov"> 103969309 : blocks += 4;</span></a>
<a name="125"><span class="lineNum"> 125 </span><span class="lineCov"> 103971016 : blocks += 4;</span></a>
<a name="126"><span class="lineNum"> 126 </span> : }</a>
<a name="127"><span class="lineNum"> 127 </span> : </a>
<a name="128"><span class="lineNum"> 128 </span> : /* tail */</a>
<a name="129"><span class="lineNum"> 129 </span><span class="lineCov"> 2030257 : size_remainder = size &amp; 15;</span></a>
<a name="130"><span class="lineNum"> 130 </span><span class="lineCov"> 2030257 : if (size_remainder != 0) {</span></a>
<a name="131"><span class="lineNum"> 131 </span><span class="lineCov"> 767192 : const uint8_t* tail = (const uint8_t*)blocks;</span></a>
<a name="129"><span class="lineNum"> 129 </span><span class="lineCov"> 2030240 : size_remainder = size &amp; 15;</span></a>
<a name="130"><span class="lineNum"> 130 </span><span class="lineCov"> 2030240 : if (size_remainder != 0) {</span></a>
<a name="131"><span class="lineNum"> 131 </span><span class="lineCov"> 767156 : const uint8_t* tail = (const uint8_t*)blocks;</span></a>
<a name="132"><span class="lineNum"> 132 </span> : </a>
<a name="133"><span class="lineNum"> 133 </span><span class="lineCov"> 767192 : uint32_t k1 = 0;</span></a>
<a name="134"><span class="lineNum"> 134 </span><span class="lineCov"> 767192 : uint32_t k2 = 0;</span></a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 767192 : uint32_t k3 = 0;</span></a>
<a name="136"><span class="lineNum"> 136 </span><span class="lineCov"> 767192 : uint32_t k4 = 0;</span></a>
<a name="133"><span class="lineNum"> 133 </span><span class="lineCov"> 767156 : uint32_t k1 = 0;</span></a>
<a name="134"><span class="lineNum"> 134 </span><span class="lineCov"> 767156 : uint32_t k2 = 0;</span></a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 767156 : uint32_t k3 = 0;</span></a>
<a name="136"><span class="lineNum"> 136 </span><span class="lineCov"> 767156 : uint32_t k4 = 0;</span></a>
<a name="137"><span class="lineNum"> 137 </span> : </a>
<a name="138"><span class="lineNum"> 138 </span><span class="lineCov"> 767192 : switch (size_remainder) {</span></a>
<a name="139"><span class="lineNum"> 139 </span><span class="lineCov"> 50471 : case 15 : k4 ^= (uint32_t)tail[14] &lt;&lt; 16; /* fallthrough */</span></a>
<a name="140"><span class="lineNum"> 140 </span><span class="lineCov"> 102429 : case 14 : k4 ^= (uint32_t)tail[13] &lt;&lt; 8; /* fallthrough */</span></a>
<a name="141"><span class="lineNum"> 141 </span><span class="lineCov"> 153813 : case 13 : k4 ^= (uint32_t)tail[12] &lt;&lt; 0; /* fallthrough */</span></a>
<a name="142"><span class="lineNum"> 142 </span><span class="lineCov"> 153813 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span></a>
<a name="138"><span class="lineNum"> 138 </span><span class="lineCov"> 767156 : switch (size_remainder) {</span></a>
<a name="139"><span class="lineNum"> 139 </span><span class="lineCov"> 50451 : case 15 : k4 ^= (uint32_t)tail[14] &lt;&lt; 16; /* fallthrough */</span></a>
<a name="140"><span class="lineNum"> 140 </span><span class="lineCov"> 102402 : case 14 : k4 ^= (uint32_t)tail[13] &lt;&lt; 8; /* fallthrough */</span></a>
<a name="141"><span class="lineNum"> 141 </span><span class="lineCov"> 153791 : case 13 : k4 ^= (uint32_t)tail[12] &lt;&lt; 0; /* fallthrough */</span></a>
<a name="142"><span class="lineNum"> 142 </span><span class="lineCov"> 153791 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span></a>
<a name="143"><span class="lineNum"> 143 </span> : /* fallthrough */</a>
<a name="144"><span class="lineNum"> 144 </span><span class="lineCov"> 205844 : case 12 : k3 ^= (uint32_t)tail[11] &lt;&lt; 24; /* fallthrough */</span></a>
<a name="145"><span class="lineNum"> 145 </span><span class="lineCov"> 257558 : case 11 : k3 ^= (uint32_t)tail[10] &lt;&lt; 16; /* fallthrough */</span></a>
<a name="146"><span class="lineNum"> 146 </span><span class="lineCov"> 308901 : case 10 : k3 ^= (uint32_t)tail[ 9] &lt;&lt; 8; /* fallthrough */</span></a>
<a name="147"><span class="lineNum"> 147 </span><span class="lineCov"> 361309 : case 9 : k3 ^= (uint32_t)tail[ 8] &lt;&lt; 0; /* fallthrough */</span></a>
<a name="148"><span class="lineNum"> 148 </span><span class="lineCov"> 361309 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span></a>
<a name="144"><span class="lineNum"> 144 </span><span class="lineCov"> 205797 : case 12 : k3 ^= (uint32_t)tail[11] &lt;&lt; 24; /* fallthrough */</span></a>
<a name="145"><span class="lineNum"> 145 </span><span class="lineCov"> 257494 : case 11 : k3 ^= (uint32_t)tail[10] &lt;&lt; 16; /* fallthrough */</span></a>
<a name="146"><span class="lineNum"> 146 </span><span class="lineCov"> 308851 : case 10 : k3 ^= (uint32_t)tail[ 9] &lt;&lt; 8; /* fallthrough */</span></a>
<a name="147"><span class="lineNum"> 147 </span><span class="lineCov"> 361271 : case 9 : k3 ^= (uint32_t)tail[ 8] &lt;&lt; 0; /* fallthrough */</span></a>
<a name="148"><span class="lineNum"> 148 </span><span class="lineCov"> 361271 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span></a>
<a name="149"><span class="lineNum"> 149 </span> : /* fallthrough */</a>
<a name="150"><span class="lineNum"> 150 </span><span class="lineCov"> 414370 : case 8 : k2 ^= (uint32_t)tail[ 7] &lt;&lt; 24; /* fallthrough */</span></a>
<a name="151"><span class="lineNum"> 151 </span><span class="lineCov"> 463089 : case 7 : k2 ^= (uint32_t)tail[ 6] &lt;&lt; 16; /* fallthrough */</span></a>
<a name="152"><span class="lineNum"> 152 </span><span class="lineCov"> 514935 : case 6 : k2 ^= (uint32_t)tail[ 5] &lt;&lt; 8; /* fallthrough */</span></a>
<a name="153"><span class="lineNum"> 153 </span><span class="lineCov"> 564647 : case 5 : k2 ^= (uint32_t)tail[ 4] &lt;&lt; 0; /* fallthrough */</span></a>
<a name="154"><span class="lineNum"> 154 </span><span class="lineCov"> 564647 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span></a>
<a name="150"><span class="lineNum"> 150 </span><span class="lineCov"> 414299 : case 8 : k2 ^= (uint32_t)tail[ 7] &lt;&lt; 24; /* fallthrough */</span></a>
<a name="151"><span class="lineNum"> 151 </span><span class="lineCov"> 463009 : case 7 : k2 ^= (uint32_t)tail[ 6] &lt;&lt; 16; /* fallthrough */</span></a>
<a name="152"><span class="lineNum"> 152 </span><span class="lineCov"> 514868 : case 6 : k2 ^= (uint32_t)tail[ 5] &lt;&lt; 8; /* fallthrough */</span></a>
<a name="153"><span class="lineNum"> 153 </span><span class="lineCov"> 564597 : case 5 : k2 ^= (uint32_t)tail[ 4] &lt;&lt; 0; /* fallthrough */</span></a>
<a name="154"><span class="lineNum"> 154 </span><span class="lineCov"> 564597 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span></a>
<a name="155"><span class="lineNum"> 155 </span> : /* fallthrough */</a>
<a name="156"><span class="lineNum"> 156 </span><span class="lineCov"> 615781 : case 4 : k1 ^= (uint32_t)tail[ 3] &lt;&lt; 24; /* fallthrough */</span></a>
<a name="157"><span class="lineNum"> 157 </span><span class="lineCov"> 665404 : case 3 : k1 ^= (uint32_t)tail[ 2] &lt;&lt; 16; /* fallthrough */</span></a>
<a name="158"><span class="lineNum"> 158 </span><span class="lineCov"> 715694 : case 2 : k1 ^= (uint32_t)tail[ 1] &lt;&lt; 8; /* fallthrough */</span></a>
<a name="159"><span class="lineNum"> 159 </span><span class="lineCov"> 767192 : case 1 : k1 ^= (uint32_t)tail[ 0] &lt;&lt; 0; /* fallthrough */</span></a>
<a name="160"><span class="lineNum"> 160 </span><span class="lineCov"> 767192 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span></a>
<a name="156"><span class="lineNum"> 156 </span><span class="lineCov"> 615741 : case 4 : k1 ^= (uint32_t)tail[ 3] &lt;&lt; 24; /* fallthrough */</span></a>
<a name="157"><span class="lineNum"> 157 </span><span class="lineCov"> 665352 : case 3 : k1 ^= (uint32_t)tail[ 2] &lt;&lt; 16; /* fallthrough */</span></a>
<a name="158"><span class="lineNum"> 158 </span><span class="lineCov"> 715670 : case 2 : k1 ^= (uint32_t)tail[ 1] &lt;&lt; 8; /* fallthrough */</span></a>
<a name="159"><span class="lineNum"> 159 </span><span class="lineCov"> 767156 : case 1 : k1 ^= (uint32_t)tail[ 0] &lt;&lt; 0; /* fallthrough */</span></a>
<a name="160"><span class="lineNum"> 160 </span><span class="lineCov"> 767156 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span></a>
<a name="161"><span class="lineNum"> 161 </span> : /* fallthrough */</a>
<a name="162"><span class="lineNum"> 162 </span> : }</a>
<a name="163"><span class="lineNum"> 163 </span> : }</a>
<a name="164"><span class="lineNum"> 164 </span> : </a>
<a name="165"><span class="lineNum"> 165 </span> : /* finalization */</a>
<a name="166"><span class="lineNum"> 166 </span><span class="lineCov"> 2030257 : h1 ^= size; h2 ^= size; h3 ^= size; h4 ^= size;</span></a>
<a name="166"><span class="lineNum"> 166 </span><span class="lineCov"> 2030240 : h1 ^= size; h2 ^= size; h3 ^= size; h4 ^= size;</span></a>
<a name="167"><span class="lineNum"> 167 </span> : </a>
<a name="168"><span class="lineNum"> 168 </span><span class="lineCov"> 2030257 : h1 += h2; h1 += h3; h1 += h4;</span></a>
<a name="169"><span class="lineNum"> 169 </span><span class="lineCov"> 2030257 : h2 += h1; h3 += h1; h4 += h1;</span></a>
<a name="168"><span class="lineNum"> 168 </span><span class="lineCov"> 2030240 : h1 += h2; h1 += h3; h1 += h4;</span></a>
<a name="169"><span class="lineNum"> 169 </span><span class="lineCov"> 2030240 : h2 += h1; h3 += h1; h4 += h1;</span></a>
<a name="170"><span class="lineNum"> 170 </span> : </a>
<a name="171"><span class="lineNum"> 171 </span><span class="lineCov"> 2030257 : h1 = fmix32(h1);</span></a>
<a name="172"><span class="lineNum"> 172 </span><span class="lineCov"> 2030257 : h2 = fmix32(h2);</span></a>
<a name="173"><span class="lineNum"> 173 </span><span class="lineCov"> 2030257 : h3 = fmix32(h3);</span></a>
<a name="174"><span class="lineNum"> 174 </span><span class="lineCov"> 2030257 : h4 = fmix32(h4);</span></a>
<a name="171"><span class="lineNum"> 171 </span><span class="lineCov"> 2030240 : h1 = fmix32(h1);</span></a>
<a name="172"><span class="lineNum"> 172 </span><span class="lineCov"> 2030240 : h2 = fmix32(h2);</span></a>
<a name="173"><span class="lineNum"> 173 </span><span class="lineCov"> 2030240 : h3 = fmix32(h3);</span></a>
<a name="174"><span class="lineNum"> 174 </span><span class="lineCov"> 2030240 : h4 = fmix32(h4);</span></a>
<a name="175"><span class="lineNum"> 175 </span> : </a>
<a name="176"><span class="lineNum"> 176 </span><span class="lineCov"> 2030257 : h1 += h2; h1 += h3; h1 += h4;</span></a>
<a name="177"><span class="lineNum"> 177 </span><span class="lineCov"> 2030257 : h2 += h1; h3 += h1; h4 += h1;</span></a>
<a name="176"><span class="lineNum"> 176 </span><span class="lineCov"> 2030240 : h1 += h2; h1 += h3; h1 += h4;</span></a>
<a name="177"><span class="lineNum"> 177 </span><span class="lineCov"> 2030240 : h2 += h1; h3 += h1; h4 += h1;</span></a>
<a name="178"><span class="lineNum"> 178 </span> : </a>
<a name="179"><span class="lineNum"> 179 </span><span class="lineCov"> 2030257 : util_write32(digest + 0, h1);</span></a>
<a name="180"><span class="lineNum"> 180 </span><span class="lineCov"> 2030257 : util_write32(digest + 4, h2);</span></a>
<a name="181"><span class="lineNum"> 181 </span><span class="lineCov"> 2030257 : util_write32(digest + 8, h3);</span></a>
<a name="182"><span class="lineNum"> 182 </span><span class="lineCov"> 2030257 : util_write32(digest + 12, h4);</span></a>
<a name="183"><span class="lineNum"> 183 </span><span class="lineCov"> 2030257 : }</span></a>
<a name="179"><span class="lineNum"> 179 </span><span class="lineCov"> 2030240 : util_write32(digest + 0, h1);</span></a>
<a name="180"><span class="lineNum"> 180 </span><span class="lineCov"> 2030240 : util_write32(digest + 4, h2);</span></a>
<a name="181"><span class="lineNum"> 181 </span><span class="lineCov"> 2030240 : util_write32(digest + 8, h3);</span></a>
<a name="182"><span class="lineNum"> 182 </span><span class="lineCov"> 2030240 : util_write32(digest + 12, h4);</span></a>
<a name="183"><span class="lineNum"> 183 </span><span class="lineCov"> 2030240 : }</span></a>
<a name="184"><span class="lineNum"> 184 </span> : </a>
</pre>
</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
@ -101,7 +101,7 @@
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#33">parity_allocated_size</a></td>
<td class="coverFnHi">668</td>
<td class="coverFnHi">667</td>
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#330">hbit_u64</a></td>
@ -125,15 +125,15 @@
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#817">parity_write</a></td>
<td class="coverFnHi">626146</td>
<td class="coverFnHi">625834</td>
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#877">parity_read</a></td>
<td class="coverFnHi">3511017</td>
<td class="coverFnHi">3511023</td>
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#798">parity_split_find</a></td>
<td class="coverFnHi">4137163</td>
<td class="coverFnHi">4136857</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#33">parity_allocated_size</a></td>
<td class="coverFnHi">668</td>
<td class="coverFnHi">667</td>
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#523">parity_chsize</a></td>
@ -105,7 +105,7 @@
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#877">parity_read</a></td>
<td class="coverFnHi">3511017</td>
<td class="coverFnHi">3511023</td>
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#125">parity_size</a></td>
@ -113,7 +113,7 @@
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#798">parity_split_find</a></td>
<td class="coverFnHi">4137163</td>
<td class="coverFnHi">4136857</td>
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#507">parity_split_is_fixed</a></td>
@ -133,7 +133,7 @@
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#817">parity_write</a></td>
<td class="coverFnHi">626146</td>
<td class="coverFnHi">625834</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
@ -94,31 +94,31 @@
<a name="32"><span class="lineNum"> 32 </span> : /****************************************************************************/</a>
<a name="33"><span class="lineNum"> 33 </span> : /* parity */</a>
<a name="34"><span class="lineNum"> 34 </span> : </a>
<a name="35"><span class="lineNum"> 35 </span><span class="lineCov"> 668 : block_off_t parity_allocated_size(struct snapraid_state* state)</span></a>
<a name="35"><span class="lineNum"> 35 </span><span class="lineCov"> 667 : block_off_t parity_allocated_size(struct snapraid_state* state)</span></a>
<a name="36"><span class="lineNum"> 36 </span> : {</a>
<a name="37"><span class="lineNum"> 37 </span> : block_off_t parity_block;</a>
<a name="38"><span class="lineNum"> 38 </span> : tommy_node* i;</a>
<a name="39"><span class="lineNum"> 39 </span> : </a>
<a name="40"><span class="lineNum"> 40 </span> : /* compute the size of the parity file */</a>
<a name="41"><span class="lineNum"> 41 </span><span class="lineCov"> 668 : parity_block = 0;</span></a>
<a name="42"><span class="lineNum"> 42 </span><span class="lineCov"> 4666 : for (i = state-&gt;disklist; i != 0; i = i-&gt;next) {</span></a>
<a name="43"><span class="lineNum"> 43 </span><span class="lineCov"> 3998 : struct snapraid_disk* disk = i-&gt;data;</span></a>
<a name="41"><span class="lineNum"> 41 </span><span class="lineCov"> 667 : parity_block = 0;</span></a>
<a name="42"><span class="lineNum"> 42 </span><span class="lineCov"> 4659 : for (i = state-&gt;disklist; i != 0; i = i-&gt;next) {</span></a>
<a name="43"><span class="lineNum"> 43 </span><span class="lineCov"> 3992 : struct snapraid_disk* disk = i-&gt;data;</span></a>
<a name="44"><span class="lineNum"> 44 </span> : </a>
<a name="45"><span class="lineNum"> 45 </span> : /* start from the declared size */</a>
<a name="46"><span class="lineNum"> 46 </span><span class="lineCov"> 3998 : block_off_t block = fs_size(disk);</span></a>
<a name="46"><span class="lineNum"> 46 </span><span class="lineCov"> 3992 : block_off_t block = fs_size(disk);</span></a>
<a name="47"><span class="lineNum"> 47 </span> : </a>
<a name="48"><span class="lineNum"> 48 </span> : /* decrease the block until an allocated one, but part of a file */</a>
<a name="49"><span class="lineNum"> 49 </span> : /* we don't stop at deleted blocks, because we want to have them cleared */</a>
<a name="50"><span class="lineNum"> 50 </span> : /* if they are at the end of the parity */</a>
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 192692 : while (block &gt; parity_block &amp;&amp; !block_has_file(fs_par2block_find(disk, block - 1)))</span></a>
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 192686 : while (block &gt; parity_block &amp;&amp; !block_has_file(fs_par2block_find(disk, block - 1)))</span></a>
<a name="52"><span class="lineNum"> 52 </span><span class="lineCov"> 188694 : --block;</span></a>
<a name="53"><span class="lineNum"> 53 </span> : </a>
<a name="54"><span class="lineNum"> 54 </span> : /* get the highest value */</a>
<a name="55"><span class="lineNum"> 55 </span><span class="lineCov"> 3998 : if (block &gt; parity_block)</span></a>
<a name="56"><span class="lineNum"> 56 </span><span class="lineCov"> 2313 : parity_block = block;</span></a>
<a name="55"><span class="lineNum"> 55 </span><span class="lineCov"> 3992 : if (block &gt; parity_block)</span></a>
<a name="56"><span class="lineNum"> 56 </span><span class="lineCov"> 2308 : parity_block = block;</span></a>
<a name="57"><span class="lineNum"> 57 </span> : }</a>
<a name="58"><span class="lineNum"> 58 </span> : </a>
<a name="59"><span class="lineNum"> 59 </span><span class="lineCov"> 668 : return parity_block;</span></a>
<a name="59"><span class="lineNum"> 59 </span><span class="lineCov"> 667 : return parity_block;</span></a>
<a name="60"><span class="lineNum"> 60 </span> : }</a>
<a name="61"><span class="lineNum"> 61 </span> : </a>
<a name="62"><span class="lineNum"> 62 </span><span class="lineCov"> 92 : block_off_t parity_used_size(struct snapraid_state* state)</span></a>
@ -135,8 +135,8 @@
<a name="73"><span class="lineNum"> 73 </span><span class="lineCov"> 551 : block_off_t block = fs_size(disk);</span></a>
<a name="74"><span class="lineNum"> 74 </span> : </a>
<a name="75"><span class="lineNum"> 75 </span> : /* decrease the block until an used one */</a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineCov"> 226345 : while (block &gt; parity_block &amp;&amp; !block_has_file_and_valid_parity(fs_par2block_find(disk, block - 1)))</span></a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 225794 : --block;</span></a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineCov"> 226349 : while (block &gt; parity_block &amp;&amp; !block_has_file_and_valid_parity(fs_par2block_find(disk, block - 1)))</span></a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 225798 : --block;</span></a>
<a name="78"><span class="lineNum"> 78 </span> : </a>
<a name="79"><span class="lineNum"> 79 </span> : /* get the highest value */</a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineCov"> 551 : if (block &gt; parity_block)</span></a>
@ -859,26 +859,26 @@
<a name="797"><span class="lineNum"> 797 </span><span class="lineCov"> 1058 : return f_ret;</span></a>
<a name="798"><span class="lineNum"> 798 </span> : }</a>
<a name="799"><span class="lineNum"> 799 </span> : </a>
<a name="800"><span class="lineNum"> 800 </span><span class="lineCov"> 4137163 : struct snapraid_split_handle* parity_split_find(struct snapraid_parity_handle* handle, data_off_t* offset)</span></a>
<a name="800"><span class="lineNum"> 800 </span><span class="lineCov"> 4136857 : struct snapraid_split_handle* parity_split_find(struct snapraid_parity_handle* handle, data_off_t* offset)</span></a>
<a name="801"><span class="lineNum"> 801 </span> : {</a>
<a name="802"><span class="lineNum"> 802 </span> : unsigned s;</a>
<a name="803"><span class="lineNum"> 803 </span> : </a>
<a name="804"><span class="lineNum"> 804 </span><span class="lineCov"> 4137163 : if (*offset &lt; 0)</span></a>
<a name="804"><span class="lineNum"> 804 </span><span class="lineCov"> 4136857 : if (*offset &lt; 0)</span></a>
<a name="805"><span class="lineNum"> 805 </span><span class="lineNoCov"> 0 : return 0;</span></a>
<a name="806"><span class="lineNum"> 806 </span> : </a>
<a name="807"><span class="lineNum"> 807 </span><span class="lineCov"> 6542594 : for (s = 0; s &lt; handle-&gt;split_mac; ++s) {</span></a>
<a name="808"><span class="lineNum"> 808 </span><span class="lineCov"> 6531234 : struct snapraid_split_handle* split = &amp;handle-&gt;split_map[s];</span></a>
<a name="807"><span class="lineNum"> 807 </span><span class="lineCov"> 6542370 : for (s = 0; s &lt; handle-&gt;split_mac; ++s) {</span></a>
<a name="808"><span class="lineNum"> 808 </span><span class="lineCov"> 6531010 : struct snapraid_split_handle* split = &amp;handle-&gt;split_map[s];</span></a>
<a name="809"><span class="lineNum"> 809 </span> : </a>
<a name="810"><span class="lineNum"> 810 </span><span class="lineCov"> 6531234 : if (*offset &lt; split-&gt;size)</span></a>
<a name="811"><span class="lineNum"> 811 </span><span class="lineCov"> 4125803 : return split;</span></a>
<a name="810"><span class="lineNum"> 810 </span><span class="lineCov"> 6531010 : if (*offset &lt; split-&gt;size)</span></a>
<a name="811"><span class="lineNum"> 811 </span><span class="lineCov"> 4125497 : return split;</span></a>
<a name="812"><span class="lineNum"> 812 </span> : </a>
<a name="813"><span class="lineNum"> 813 </span><span class="lineCov"> 2405431 : *offset -= split-&gt;size;</span></a>
<a name="813"><span class="lineNum"> 813 </span><span class="lineCov"> 2405513 : *offset -= split-&gt;size;</span></a>
<a name="814"><span class="lineNum"> 814 </span> : }</a>
<a name="815"><span class="lineNum"> 815 </span> : </a>
<a name="816"><span class="lineNum"> 816 </span><span class="lineCov"> 11360 : return 0;</span></a>
<a name="817"><span class="lineNum"> 817 </span> : }</a>
<a name="818"><span class="lineNum"> 818 </span> : </a>
<a name="819"><span class="lineNum"> 819 </span><span class="lineCov"> 626146 : int parity_write(struct snapraid_parity_handle* handle, block_off_t pos, unsigned char* block_buffer, unsigned block_size)</span></a>
<a name="819"><span class="lineNum"> 819 </span><span class="lineCov"> 625834 : int parity_write(struct snapraid_parity_handle* handle, block_off_t pos, unsigned char* block_buffer, unsigned block_size)</span></a>
<a name="820"><span class="lineNum"> 820 </span> : {</a>
<a name="821"><span class="lineNum"> 821 </span> : ssize_t write_ret;</a>
<a name="822"><span class="lineNum"> 822 </span> : data_off_t offset;</a>
@ -886,10 +886,10 @@
<a name="824"><span class="lineNum"> 824 </span> : unsigned count;</a>
<a name="825"><span class="lineNum"> 825 </span> : int ret;</a>
<a name="826"><span class="lineNum"> 826 </span> : </a>
<a name="827"><span class="lineNum"> 827 </span><span class="lineCov"> 626146 : offset = pos * (data_off_t)block_size;</span></a>
<a name="827"><span class="lineNum"> 827 </span><span class="lineCov"> 625834 : offset = pos * (data_off_t)block_size;</span></a>
<a name="828"><span class="lineNum"> 828 </span> : </a>
<a name="829"><span class="lineNum"> 829 </span><span class="lineCov"> 626146 : split = parity_split_find(handle, &amp;offset);</span></a>
<a name="830"><span class="lineNum"> 830 </span><span class="lineCov"> 626146 : if (!split) {</span></a>
<a name="829"><span class="lineNum"> 829 </span><span class="lineCov"> 625834 : split = parity_split_find(handle, &amp;offset);</span></a>
<a name="830"><span class="lineNum"> 830 </span><span class="lineCov"> 625834 : if (!split) {</span></a>
<a name="831"><span class="lineNum"> 831 </span> : /* LCOV_EXCL_START */</a>
<a name="832"><span class="lineNum"> 832 </span> : errno = ENXIO;</a>
<a name="833"><span class="lineNum"> 833 </span> : log_fatal(errno, &quot;Writing parity data outside range at extra offset %&quot; PRIu64 &quot;.\n&quot;, offset);</a>
@ -898,15 +898,15 @@
<a name="836"><span class="lineNum"> 836 </span> : }</a>
<a name="837"><span class="lineNum"> 837 </span> : </a>
<a name="838"><span class="lineNum"> 838 </span> : /* update the valid range */</a>
<a name="839"><span class="lineNum"> 839 </span><span class="lineCov"> 626146 : if (split-&gt;valid_size &lt; offset + block_size)</span></a>
<a name="839"><span class="lineNum"> 839 </span><span class="lineCov"> 625834 : if (split-&gt;valid_size &lt; offset + block_size)</span></a>
<a name="840"><span class="lineNum"> 840 </span><span class="lineCov"> 182791 : split-&gt;valid_size = offset + block_size;</span></a>
<a name="841"><span class="lineNum"> 841 </span> : </a>
<a name="842"><span class="lineNum"> 842 </span><span class="lineCov"> 626146 : count = 0;</span></a>
<a name="842"><span class="lineNum"> 842 </span><span class="lineCov"> 625834 : count = 0;</span></a>
<a name="843"><span class="lineNum"> 843 </span> : do {</a>
<a name="844"><span class="lineNum"> 844 </span><span class="lineCov"> 626146 : bw_limit(handle-&gt;bw, block_size - count);</span></a>
<a name="844"><span class="lineNum"> 844 </span><span class="lineCov"> 625834 : bw_limit(handle-&gt;bw, block_size - count);</span></a>
<a name="845"><span class="lineNum"> 845 </span> : </a>
<a name="846"><span class="lineNum"> 846 </span><span class="lineCov"> 626146 : write_ret = pwrite(split-&gt;f, block_buffer + count, block_size - count, offset + count);</span></a>
<a name="847"><span class="lineNum"> 847 </span><span class="lineCov"> 626146 : if (write_ret == -1) {</span></a>
<a name="846"><span class="lineNum"> 846 </span><span class="lineCov"> 625834 : write_ret = pwrite(split-&gt;f, block_buffer + count, block_size - count, offset + count);</span></a>
<a name="847"><span class="lineNum"> 847 </span><span class="lineCov"> 625834 : if (write_ret == -1) {</span></a>
<a name="848"><span class="lineNum"> 848 </span> : /* LCOV_EXCL_START */</a>
<a name="849"><span class="lineNum"> 849 </span> : if (errno == ENOSPC) {</a>
<a name="850"><span class="lineNum"> 850 </span> : log_fatal(errno, &quot;Failed to grow parity file '%s' using write due lack of space.\n&quot;, split-&gt;path);</a>
@ -916,7 +916,7 @@
<a name="854"><span class="lineNum"> 854 </span> : return -1;</a>
<a name="855"><span class="lineNum"> 855 </span> : /* LCOV_EXCL_STOP */</a>
<a name="856"><span class="lineNum"> 856 </span> : }</a>
<a name="857"><span class="lineNum"> 857 </span><span class="lineCov"> 626146 : if (write_ret == 0) {</span></a>
<a name="857"><span class="lineNum"> 857 </span><span class="lineCov"> 625834 : if (write_ret == 0) {</span></a>
<a name="858"><span class="lineNum"> 858 </span> : /* LCOV_EXCL_START */</a>
<a name="859"><span class="lineNum"> 859 </span> : errno = ENXIO;</a>
<a name="860"><span class="lineNum"> 860 </span> : log_fatal(errno, &quot;Unexpected 0 write to file '%s'. %s.\n&quot;, split-&gt;path, strerror(errno));</a>
@ -924,21 +924,21 @@
<a name="862"><span class="lineNum"> 862 </span> : /* LCOV_EXCL_STOP */</a>
<a name="863"><span class="lineNum"> 863 </span> : }</a>
<a name="864"><span class="lineNum"> 864 </span> : </a>
<a name="865"><span class="lineNum"> 865 </span><span class="lineCov"> 626146 : count += write_ret;</span></a>
<a name="866"><span class="lineNum"> 866 </span><span class="lineCov"> 626146 : } while (count &lt; block_size);</span></a>
<a name="865"><span class="lineNum"> 865 </span><span class="lineCov"> 625834 : count += write_ret;</span></a>
<a name="866"><span class="lineNum"> 866 </span><span class="lineCov"> 625834 : } while (count &lt; block_size);</span></a>
<a name="867"><span class="lineNum"> 867 </span> : </a>
<a name="868"><span class="lineNum"> 868 </span><span class="lineCov"> 626146 : ret = advise_write(&amp;split-&gt;advise, split-&gt;f, offset, block_size);</span></a>
<a name="869"><span class="lineNum"> 869 </span><span class="lineCov"> 626146 : if (ret != 0) {</span></a>
<a name="868"><span class="lineNum"> 868 </span><span class="lineCov"> 625834 : ret = advise_write(&amp;split-&gt;advise, split-&gt;f, offset, block_size);</span></a>
<a name="869"><span class="lineNum"> 869 </span><span class="lineCov"> 625834 : if (ret != 0) {</span></a>
<a name="870"><span class="lineNum"> 870 </span> : /* LCOV_EXCL_START */</a>
<a name="871"><span class="lineNum"> 871 </span> : log_fatal(errno, &quot;Error advising parity file '%s'. %s.\n&quot;, split-&gt;path, strerror(errno));</a>
<a name="872"><span class="lineNum"> 872 </span> : return -1;</a>
<a name="873"><span class="lineNum"> 873 </span> : /* LCOV_EXCL_STOP */</a>
<a name="874"><span class="lineNum"> 874 </span> : }</a>
<a name="875"><span class="lineNum"> 875 </span> : </a>
<a name="876"><span class="lineNum"> 876 </span><span class="lineCov"> 626146 : return 0;</span></a>
<a name="876"><span class="lineNum"> 876 </span><span class="lineCov"> 625834 : return 0;</span></a>
<a name="877"><span class="lineNum"> 877 </span> : }</a>
<a name="878"><span class="lineNum"> 878 </span> : </a>
<a name="879"><span class="lineNum"> 879 </span><span class="lineCov"> 3511017 : int parity_read(struct snapraid_parity_handle* handle, block_off_t pos, unsigned char* block_buffer, unsigned block_size, log_ptr* out)</span></a>
<a name="879"><span class="lineNum"> 879 </span><span class="lineCov"> 3511023 : int parity_read(struct snapraid_parity_handle* handle, block_off_t pos, unsigned char* block_buffer, unsigned block_size, log_ptr* out)</span></a>
<a name="880"><span class="lineNum"> 880 </span> : {</a>
<a name="881"><span class="lineNum"> 881 </span> : ssize_t read_ret;</a>
<a name="882"><span class="lineNum"> 882 </span> : data_off_t offset;</a>
@ -946,10 +946,10 @@
<a name="884"><span class="lineNum"> 884 </span> : struct snapraid_split_handle* split;</a>
<a name="885"><span class="lineNum"> 885 </span> : int ret;</a>
<a name="886"><span class="lineNum"> 886 </span> : </a>
<a name="887"><span class="lineNum"> 887 </span><span class="lineCov"> 3511017 : offset = pos * (data_off_t)block_size;</span></a>
<a name="887"><span class="lineNum"> 887 </span><span class="lineCov"> 3511023 : offset = pos * (data_off_t)block_size;</span></a>
<a name="888"><span class="lineNum"> 888 </span> : </a>
<a name="889"><span class="lineNum"> 889 </span><span class="lineCov"> 3511017 : split = parity_split_find(handle, &amp;offset);</span></a>
<a name="890"><span class="lineNum"> 890 </span><span class="lineCov"> 3511017 : if (!split) {</span></a>
<a name="889"><span class="lineNum"> 889 </span><span class="lineCov"> 3511023 : split = parity_split_find(handle, &amp;offset);</span></a>
<a name="890"><span class="lineNum"> 890 </span><span class="lineCov"> 3511023 : if (!split) {</span></a>
<a name="891"><span class="lineNum"> 891 </span> : /* LCOV_EXCL_START */</a>
<a name="892"><span class="lineNum"> 892 </span> : errno = ENXIO;</a>
<a name="893"><span class="lineNum"> 893 </span> : out(errno, &quot;Reading parity data outside range at extra offset %&quot; PRIu64 &quot;.\n&quot;, offset);</a>
@ -958,7 +958,7 @@
<a name="896"><span class="lineNum"> 896 </span> : }</a>
<a name="897"><span class="lineNum"> 897 </span> : </a>
<a name="898"><span class="lineNum"> 898 </span> : /* if read is completely out of the valid range */</a>
<a name="899"><span class="lineNum"> 899 </span><span class="lineCov"> 3499657 : if (offset &gt;= split-&gt;valid_size) {</span></a>
<a name="899"><span class="lineNum"> 899 </span><span class="lineCov"> 3499663 : if (offset &gt;= split-&gt;valid_size) {</span></a>
<a name="900"><span class="lineNum"> 900 </span> : /* LCOV_EXCL_START */</a>
<a name="901"><span class="lineNum"> 901 </span> : errno = ENXIO;</a>
<a name="902"><span class="lineNum"> 902 </span> : out(errno, &quot;Reading over the end from parity file '%s' at offset %&quot; PRIu64 &quot; for size %u.\n&quot;, split-&gt;path, offset, block_size);</a>
@ -966,19 +966,19 @@
<a name="904"><span class="lineNum"> 904 </span> : /* LCOV_EXCL_STOP */</a>
<a name="905"><span class="lineNum"> 905 </span> : }</a>
<a name="906"><span class="lineNum"> 906 </span> : </a>
<a name="907"><span class="lineNum"> 907 </span><span class="lineCov"> 3420682 : count = 0;</span></a>
<a name="908"><span class="lineNum"> 908 </span><span class="lineCov"> 3420682 : errno = 0;</span></a>
<a name="907"><span class="lineNum"> 907 </span><span class="lineCov"> 3420688 : count = 0;</span></a>
<a name="908"><span class="lineNum"> 908 </span><span class="lineCov"> 3420688 : errno = 0;</span></a>
<a name="909"><span class="lineNum"> 909 </span> : do {</a>
<a name="910"><span class="lineNum"> 910 </span><span class="lineCov"> 3420682 : bw_limit(handle-&gt;bw, block_size - count);</span></a>
<a name="910"><span class="lineNum"> 910 </span><span class="lineCov"> 3420688 : bw_limit(handle-&gt;bw, block_size - count);</span></a>
<a name="911"><span class="lineNum"> 911 </span> : </a>
<a name="912"><span class="lineNum"> 912 </span><span class="lineCov"> 3420682 : read_ret = pread(split-&gt;f, block_buffer + count, block_size - count, offset + count);</span></a>
<a name="913"><span class="lineNum"> 913 </span><span class="lineCov"> 3420682 : if (read_ret == -1) {</span></a>
<a name="912"><span class="lineNum"> 912 </span><span class="lineCov"> 3420688 : read_ret = pread(split-&gt;f, block_buffer + count, block_size - count, offset + count);</span></a>
<a name="913"><span class="lineNum"> 913 </span><span class="lineCov"> 3420688 : if (read_ret == -1) {</span></a>
<a name="914"><span class="lineNum"> 914 </span> : /* LCOV_EXCL_START */</a>
<a name="915"><span class="lineNum"> 915 </span> : out(errno, &quot;Error reading parity file '%s' at offset %&quot; PRIu64 &quot; for size %u. %s.\n&quot;, split-&gt;path, offset + count, block_size - count, strerror(errno));</a>
<a name="916"><span class="lineNum"> 916 </span> : return -1;</a>
<a name="917"><span class="lineNum"> 917 </span> : /* LCOV_EXCL_STOP */</a>
<a name="918"><span class="lineNum"> 918 </span> : }</a>
<a name="919"><span class="lineNum"> 919 </span><span class="lineCov"> 3420682 : if (read_ret == 0) {</span></a>
<a name="919"><span class="lineNum"> 919 </span><span class="lineCov"> 3420688 : if (read_ret == 0) {</span></a>
<a name="920"><span class="lineNum"> 920 </span> : /* LCOV_EXCL_START */</a>
<a name="921"><span class="lineNum"> 921 </span> : if (errno == 0)</a>
<a name="922"><span class="lineNum"> 922 </span> : errno = ENXIO;</a>
@ -987,18 +987,18 @@
<a name="925"><span class="lineNum"> 925 </span> : /* LCOV_EXCL_STOP */</a>
<a name="926"><span class="lineNum"> 926 </span> : }</a>
<a name="927"><span class="lineNum"> 927 </span> : </a>
<a name="928"><span class="lineNum"> 928 </span><span class="lineCov"> 3420682 : count += read_ret;</span></a>
<a name="929"><span class="lineNum"> 929 </span><span class="lineCov"> 3420682 : } while (count &lt; block_size);</span></a>
<a name="928"><span class="lineNum"> 928 </span><span class="lineCov"> 3420688 : count += read_ret;</span></a>
<a name="929"><span class="lineNum"> 929 </span><span class="lineCov"> 3420688 : } while (count &lt; block_size);</span></a>
<a name="930"><span class="lineNum"> 930 </span> : </a>
<a name="931"><span class="lineNum"> 931 </span><span class="lineCov"> 3420682 : ret = advise_read(&amp;split-&gt;advise, split-&gt;f, offset, block_size);</span></a>
<a name="932"><span class="lineNum"> 932 </span><span class="lineCov"> 3420682 : if (ret != 0) {</span></a>
<a name="931"><span class="lineNum"> 931 </span><span class="lineCov"> 3420688 : ret = advise_read(&amp;split-&gt;advise, split-&gt;f, offset, block_size);</span></a>
<a name="932"><span class="lineNum"> 932 </span><span class="lineCov"> 3420688 : if (ret != 0) {</span></a>
<a name="933"><span class="lineNum"> 933 </span> : /* LCOV_EXCL_START */</a>
<a name="934"><span class="lineNum"> 934 </span> : out(errno, &quot;Error advising parity file '%s'. %s.\n&quot;, split-&gt;path, strerror(errno));</a>
<a name="935"><span class="lineNum"> 935 </span> : return -1;</a>
<a name="936"><span class="lineNum"> 936 </span> : /* LCOV_EXCL_STOP */</a>
<a name="937"><span class="lineNum"> 937 </span> : }</a>
<a name="938"><span class="lineNum"> 938 </span> : </a>
<a name="939"><span class="lineNum"> 939 </span><span class="lineCov"> 3420682 : return block_size;</span></a>
<a name="939"><span class="lineNum"> 939 </span><span class="lineCov"> 3420688 : return block_size;</span></a>
<a name="940"><span class="lineNum"> 940 </span> : }</a>
<a name="941"><span class="lineNum"> 941 </span> : </a>
</pre>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
@ -392,7 +392,7 @@
<a name="330"><span class="lineNum"> 330 </span> : </a>
<a name="331"><span class="lineNum"> 331 </span> : /* check if the info match */</a>
<a name="332"><span class="lineNum"> 332 </span><span class="lineCov"> 5690 : if (found-&gt;mtime_sec == mtime_sec</span></a>
<a name="333"><span class="lineNum"> 333 </span><span class="lineCov"> 5399 : &amp;&amp; found-&gt;mtime_nsec == mtime_nsec</span></a>
<a name="333"><span class="lineNum"> 333 </span><span class="lineCov"> 5406 : &amp;&amp; found-&gt;mtime_nsec == mtime_nsec</span></a>
<a name="334"><span class="lineNum"> 334 </span><span class="lineCov"> 5385 : &amp;&amp; strcmp(found-&gt;linkto, linkto) == 0</span></a>
<a name="335"><span class="lineNum"> 335 </span> : ) {</a>
<a name="336"><span class="lineNum"> 336 </span> : /* nothing to do */</a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">29</td>
@ -113,7 +113,7 @@
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#472">file_is_full_hashed_and_stable</a></td>
<td class="coverFnHi">23671</td>
<td class="coverFnHi">23670</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#149">scan_link</a></td>
@ -121,27 +121,27 @@
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#323">scan_file_deallocate</a></td>
<td class="coverFnHi">55231</td>
<td class="coverFnHi">55218</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#644">scan_file_remove</a></td>
<td class="coverFnHi">55231</td>
<td class="coverFnHi">55218</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#529">scan_file_refresh</a></td>
<td class="coverFnHi">77410</td>
<td class="coverFnHi">77397</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#224">scan_file_allocate</a></td>
<td class="coverFnHi">100097</td>
<td class="coverFnHi">100084</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#397">scan_file_delayed_allocate</a></td>
<td class="coverFnHi">100097</td>
<td class="coverFnHi">100084</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#622">scan_file_insert</a></td>
<td class="coverFnHi">100097</td>
<td class="coverFnHi">100084</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1195">dd_ino_compare</a></td>
@ -149,19 +149,19 @@
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#95">stamp_lock</a></td>
<td class="coverFnHi">512471</td>
<td class="coverFnHi">512368</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#104">stamp_unlock</a></td>
<td class="coverFnHi">512471</td>
<td class="coverFnHi">512368</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#426">file_is_full_invalid_parity_and_stable</a></td>
<td class="coverFnHi">1083709</td>
<td class="coverFnHi">1083722</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#672">scan_file_keep</a></td>
<td class="coverFnHi">1083709</td>
<td class="coverFnHi">1083722</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#691">scan_file</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">29</td>
@ -73,11 +73,11 @@
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#472">file_is_full_hashed_and_stable</a></td>
<td class="coverFnHi">23671</td>
<td class="coverFnHi">23670</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#426">file_is_full_invalid_parity_and_stable</a></td>
<td class="coverFnHi">1083709</td>
<td class="coverFnHi">1083722</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#58">scan_alloc</a></td>
@ -109,31 +109,31 @@
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#224">scan_file_allocate</a></td>
<td class="coverFnHi">100097</td>
<td class="coverFnHi">100084</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#323">scan_file_deallocate</a></td>
<td class="coverFnHi">55231</td>
<td class="coverFnHi">55218</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#397">scan_file_delayed_allocate</a></td>
<td class="coverFnHi">100097</td>
<td class="coverFnHi">100084</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#622">scan_file_insert</a></td>
<td class="coverFnHi">100097</td>
<td class="coverFnHi">100084</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#672">scan_file_keep</a></td>
<td class="coverFnHi">1083709</td>
<td class="coverFnHi">1083722</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#529">scan_file_refresh</a></td>
<td class="coverFnHi">77410</td>
<td class="coverFnHi">77397</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#644">scan_file_remove</a></td>
<td class="coverFnHi">55231</td>
<td class="coverFnHi">55218</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#86">scan_free</a></td>
@ -157,11 +157,11 @@
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#95">stamp_lock</a></td>
<td class="coverFnHi">512471</td>
<td class="coverFnHi">512368</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#104">stamp_unlock</a></td>
<td class="coverFnHi">512471</td>
<td class="coverFnHi">512368</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#2055">state_diff</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">29</td>
@ -156,23 +156,23 @@
<a name="94"><span class="lineNum"> 94 </span><span class="lineCov"> 599 : free(scan);</span></a>
<a name="95"><span class="lineNum"> 95 </span><span class="lineCov"> 599 : }</span></a>
<a name="96"><span class="lineNum"> 96 </span> : </a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineCov"> 512471 : static void stamp_lock(struct snapraid_disk* disk)</span></a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineCov"> 512368 : static void stamp_lock(struct snapraid_disk* disk)</span></a>
<a name="98"><span class="lineNum"> 98 </span> : {</a>
<a name="99"><span class="lineNum"> 99 </span> : #if HAVE_THREAD</a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineCov"> 512471 : thread_mutex_lock(&amp;disk-&gt;stamp_mutex);</span></a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineCov"> 512368 : thread_mutex_lock(&amp;disk-&gt;stamp_mutex);</span></a>
<a name="101"><span class="lineNum"> 101 </span> : #else</a>
<a name="102"><span class="lineNum"> 102 </span> : (void)disk;</a>
<a name="103"><span class="lineNum"> 103 </span> : #endif</a>
<a name="104"><span class="lineNum"> 104 </span><span class="lineCov"> 512471 : }</span></a>
<a name="104"><span class="lineNum"> 104 </span><span class="lineCov"> 512368 : }</span></a>
<a name="105"><span class="lineNum"> 105 </span> : </a>
<a name="106"><span class="lineNum"> 106 </span><span class="lineCov"> 512471 : static void stamp_unlock(struct snapraid_disk* disk)</span></a>
<a name="106"><span class="lineNum"> 106 </span><span class="lineCov"> 512368 : static void stamp_unlock(struct snapraid_disk* disk)</span></a>
<a name="107"><span class="lineNum"> 107 </span> : {</a>
<a name="108"><span class="lineNum"> 108 </span> : #if HAVE_THREAD</a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 512471 : thread_mutex_unlock(&amp;disk-&gt;stamp_mutex);</span></a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 512368 : thread_mutex_unlock(&amp;disk-&gt;stamp_mutex);</span></a>
<a name="110"><span class="lineNum"> 110 </span> : #else</a>
<a name="111"><span class="lineNum"> 111 </span> : (void)disk;</a>
<a name="112"><span class="lineNum"> 112 </span> : #endif</a>
<a name="113"><span class="lineNum"> 113 </span><span class="lineCov"> 512471 : }</span></a>
<a name="113"><span class="lineNum"> 113 </span><span class="lineCov"> 512368 : }</span></a>
<a name="114"><span class="lineNum"> 114 </span> : </a>
<a name="115"><span class="lineNum"> 115 </span> : /**</a>
<a name="116"><span class="lineNum"> 116 </span> : * Remove the specified link from the data set.</a>
@ -285,42 +285,42 @@
<a name="223"><span class="lineNum"> 223 </span> : /**</a>
<a name="224"><span class="lineNum"> 224 </span> : * Insert the specified file in the parity.</a>
<a name="225"><span class="lineNum"> 225 </span> : */</a>
<a name="226"><span class="lineNum"> 226 </span><span class="lineCov"> 100097 : static void scan_file_allocate(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="226"><span class="lineNum"> 226 </span><span class="lineCov"> 100084 : static void scan_file_allocate(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="227"><span class="lineNum"> 227 </span> : {</a>
<a name="228"><span class="lineNum"> 228 </span><span class="lineCov"> 100097 : struct snapraid_state* state = scan-&gt;state;</span></a>
<a name="229"><span class="lineNum"> 229 </span><span class="lineCov"> 100097 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="228"><span class="lineNum"> 228 </span><span class="lineCov"> 100084 : struct snapraid_state* state = scan-&gt;state;</span></a>
<a name="229"><span class="lineNum"> 229 </span><span class="lineCov"> 100084 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="230"><span class="lineNum"> 230 </span> : block_off_t i;</a>
<a name="231"><span class="lineNum"> 231 </span> : block_off_t parity_pos;</a>
<a name="232"><span class="lineNum"> 232 </span> : </a>
<a name="233"><span class="lineNum"> 233 </span> : /* state changed */</a>
<a name="234"><span class="lineNum"> 234 </span><span class="lineCov"> 100097 : scan-&gt;need_write = 1;</span></a>
<a name="234"><span class="lineNum"> 234 </span><span class="lineCov"> 100084 : scan-&gt;need_write = 1;</span></a>
<a name="235"><span class="lineNum"> 235 </span> : </a>
<a name="236"><span class="lineNum"> 236 </span> : /* allocate the blocks of the file */</a>
<a name="237"><span class="lineNum"> 237 </span><span class="lineCov"> 100097 : parity_pos = disk-&gt;first_free_block;</span></a>
<a name="238"><span class="lineNum"> 238 </span><span class="lineCov"> 350007 : for (i = 0; i &lt; file-&gt;blockmax; ++i) {</span></a>
<a name="237"><span class="lineNum"> 237 </span><span class="lineCov"> 100084 : parity_pos = disk-&gt;first_free_block;</span></a>
<a name="238"><span class="lineNum"> 238 </span><span class="lineCov"> 349939 : for (i = 0; i &lt; file-&gt;blockmax; ++i) {</span></a>
<a name="239"><span class="lineNum"> 239 </span> : struct snapraid_block* block;</a>
<a name="240"><span class="lineNum"> 240 </span> : struct snapraid_block* over_block;</a>
<a name="241"><span class="lineNum"> 241 </span> : snapraid_info info;</a>
<a name="242"><span class="lineNum"> 242 </span> : </a>
<a name="243"><span class="lineNum"> 243 </span> : /* increment the position until the first really free block */</a>
<a name="244"><span class="lineNum"> 244 </span><span class="lineCov"> 784407 : while (block_has_file(fs_par2block_find(disk, parity_pos)))</span></a>
<a name="245"><span class="lineNum"> 245 </span><span class="lineCov"> 534497 : ++parity_pos;</span></a>
<a name="244"><span class="lineNum"> 244 </span><span class="lineCov"> 782963 : while (block_has_file(fs_par2block_find(disk, parity_pos)))</span></a>
<a name="245"><span class="lineNum"> 245 </span><span class="lineCov"> 533108 : ++parity_pos;</span></a>
<a name="246"><span class="lineNum"> 246 </span> : </a>
<a name="247"><span class="lineNum"> 247 </span> : /* get block we are going to overwrite, if any */</a>
<a name="248"><span class="lineNum"> 248 </span><span class="lineCov"> 249910 : over_block = fs_par2block_find(disk, parity_pos);</span></a>
<a name="248"><span class="lineNum"> 248 </span><span class="lineCov"> 249855 : over_block = fs_par2block_find(disk, parity_pos);</span></a>
<a name="249"><span class="lineNum"> 249 </span> : </a>
<a name="250"><span class="lineNum"> 250 </span> : /* deallocate it */</a>
<a name="251"><span class="lineNum"> 251 </span><span class="lineCov"> 249910 : if (over_block != BLOCK_NULL)</span></a>
<a name="252"><span class="lineNum"> 252 </span><span class="lineCov"> 90924 : fs_deallocate(disk, parity_pos);</span></a>
<a name="251"><span class="lineNum"> 251 </span><span class="lineCov"> 249855 : if (over_block != BLOCK_NULL)</span></a>
<a name="252"><span class="lineNum"> 252 </span><span class="lineCov"> 90869 : fs_deallocate(disk, parity_pos);</span></a>
<a name="253"><span class="lineNum"> 253 </span> : </a>
<a name="254"><span class="lineNum"> 254 </span> : /* get block specific info */</a>
<a name="255"><span class="lineNum"> 255 </span><span class="lineCov"> 249910 : info = info_get(&amp;state-&gt;infoarr, parity_pos);</span></a>
<a name="255"><span class="lineNum"> 255 </span><span class="lineCov"> 249855 : info = info_get(&amp;state-&gt;infoarr, parity_pos);</span></a>
<a name="256"><span class="lineNum"> 256 </span> : </a>
<a name="257"><span class="lineNum"> 257 </span> : /* get the new block we are going to write */</a>
<a name="258"><span class="lineNum"> 258 </span><span class="lineCov"> 249910 : block = fs_file2block_get(file, i);</span></a>
<a name="258"><span class="lineNum"> 258 </span><span class="lineCov"> 249855 : block = fs_file2block_get(file, i);</span></a>
<a name="259"><span class="lineNum"> 259 </span> : </a>
<a name="260"><span class="lineNum"> 260 </span> : /* if the file block already has an updated hash without rehash */</a>
<a name="261"><span class="lineNum"> 261 </span><span class="lineCov"> 249910 : if (block_has_updated_hash(block) &amp;&amp; !info_get_rehash(info)) {</span></a>
<a name="261"><span class="lineNum"> 261 </span><span class="lineCov"> 249855 : if (block_has_updated_hash(block) &amp;&amp; !info_get_rehash(info)) {</span></a>
<a name="262"><span class="lineNum"> 262 </span> : /* the only possible case is for REP blocks */</a>
<a name="263"><span class="lineNum"> 263 </span><span class="lineCov"> 87239 : assert(block_state_get(block) == BLOCK_STATE_REP);</span></a>
<a name="264"><span class="lineNum"> 264 </span> : </a>
@ -332,25 +332,25 @@
<a name="270"><span class="lineNum"> 270 </span> : unsigned over_state;</a>
<a name="271"><span class="lineNum"> 271 </span> : </a>
<a name="272"><span class="lineNum"> 272 </span> : /* convert to a CHG block */</a>
<a name="273"><span class="lineNum"> 273 </span><span class="lineCov"> 162671 : block_state_set(block, BLOCK_STATE_CHG);</span></a>
<a name="273"><span class="lineNum"> 273 </span><span class="lineCov"> 162616 : block_state_set(block, BLOCK_STATE_CHG);</span></a>
<a name="274"><span class="lineNum"> 274 </span> : </a>
<a name="275"><span class="lineNum"> 275 </span> : /* state of the block we are going to overwrite */</a>
<a name="276"><span class="lineNum"> 276 </span><span class="lineCov"> 162671 : over_state = block_state_get(over_block);</span></a>
<a name="276"><span class="lineNum"> 276 </span><span class="lineCov"> 162616 : over_state = block_state_get(over_block);</span></a>
<a name="277"><span class="lineNum"> 277 </span> : </a>
<a name="278"><span class="lineNum"> 278 </span> : /* if the block is an empty one */</a>
<a name="279"><span class="lineNum"> 279 </span><span class="lineCov"> 162671 : if (over_state == BLOCK_STATE_EMPTY) {</span></a>
<a name="279"><span class="lineNum"> 279 </span><span class="lineCov"> 162616 : if (over_state == BLOCK_STATE_EMPTY) {</span></a>
<a name="280"><span class="lineNum"> 280 </span> : /* the block was empty and filled with zeros */</a>
<a name="281"><span class="lineNum"> 281 </span> : /* set the hash to the special ZERO value */</a>
<a name="282"><span class="lineNum"> 282 </span><span class="lineCov"> 117591 : hash_zero_set(block-&gt;hash);</span></a>
<a name="283"><span class="lineNum"> 283 </span> : } else {</a>
<a name="284"><span class="lineNum"> 284 </span> : /* otherwise it's a DELETED one */</a>
<a name="285"><span class="lineNum"> 285 </span><span class="lineCov"> 45080 : assert(over_state == BLOCK_STATE_DELETED);</span></a>
<a name="285"><span class="lineNum"> 285 </span><span class="lineCov"> 45025 : assert(over_state == BLOCK_STATE_DELETED);</span></a>
<a name="286"><span class="lineNum"> 286 </span> : </a>
<a name="287"><span class="lineNum"> 287 </span> : /* copy the past hash of the block */</a>
<a name="288"><span class="lineNum"> 288 </span><span class="lineCov"> 45080 : memcpy(block-&gt;hash, over_block-&gt;hash, BLOCK_HASH_SIZE);</span></a>
<a name="288"><span class="lineNum"> 288 </span><span class="lineCov"> 45025 : memcpy(block-&gt;hash, over_block-&gt;hash, BLOCK_HASH_SIZE);</span></a>
<a name="289"><span class="lineNum"> 289 </span> : </a>
<a name="290"><span class="lineNum"> 290 </span> : /* if we have not already cleared the past hash */</a>
<a name="291"><span class="lineNum"> 291 </span><span class="lineCov"> 45080 : if (!state-&gt;clear_past_hash) {</span></a>
<a name="291"><span class="lineNum"> 291 </span><span class="lineCov"> 45025 : if (!state-&gt;clear_past_hash) {</span></a>
<a name="292"><span class="lineNum"> 292 </span> : /* in this case we don't know if the old state is still the one */</a>
<a name="293"><span class="lineNum"> 293 </span> : /* stored inside the parity, because after an aborted sync, the parity */</a>
<a name="294"><span class="lineNum"> 294 </span> : /* may be or may be not have been updated with the new data */</a>
@ -367,15 +367,15 @@
<a name="305"><span class="lineNum"> 305 </span> : }</a>
<a name="306"><span class="lineNum"> 306 </span> : </a>
<a name="307"><span class="lineNum"> 307 </span> : /* store in the disk map, after invalidating all the other blocks */</a>
<a name="308"><span class="lineNum"> 308 </span><span class="lineCov"> 249910 : fs_allocate(disk, parity_pos, file, i);</span></a>
<a name="308"><span class="lineNum"> 308 </span><span class="lineCov"> 249855 : fs_allocate(disk, parity_pos, file, i);</span></a>
<a name="309"><span class="lineNum"> 309 </span> : </a>
<a name="310"><span class="lineNum"> 310 </span> : /* set the new free position */</a>
<a name="311"><span class="lineNum"> 311 </span><span class="lineCov"> 249910 : disk-&gt;first_free_block = parity_pos + 1;</span></a>
<a name="311"><span class="lineNum"> 311 </span><span class="lineCov"> 249855 : disk-&gt;first_free_block = parity_pos + 1;</span></a>
<a name="312"><span class="lineNum"> 312 </span> : }</a>
<a name="313"><span class="lineNum"> 313 </span> : </a>
<a name="314"><span class="lineNum"> 314 </span> : /* insert in the list of contained files */</a>
<a name="315"><span class="lineNum"> 315 </span><span class="lineCov"> 100097 : tommy_list_insert_tail(&amp;disk-&gt;filelist, &amp;file-&gt;nodelist, file);</span></a>
<a name="316"><span class="lineNum"> 316 </span><span class="lineCov"> 100097 : }</span></a>
<a name="315"><span class="lineNum"> 315 </span><span class="lineCov"> 100084 : tommy_list_insert_tail(&amp;disk-&gt;filelist, &amp;file-&gt;nodelist, file);</span></a>
<a name="316"><span class="lineNum"> 316 </span><span class="lineCov"> 100084 : }</span></a>
<a name="317"><span class="lineNum"> 317 </span> : </a>
<a name="318"><span class="lineNum"> 318 </span> : /**</a>
<a name="319"><span class="lineNum"> 319 </span> : * Delete the specified file from the parity.</a>
@ -384,23 +384,23 @@
<a name="322"><span class="lineNum"> 322 </span> : * The file is then inserted in the deleted set, and it should not be deallocated,</a>
<a name="323"><span class="lineNum"> 323 </span> : * as the parity still references it.</a>
<a name="324"><span class="lineNum"> 324 </span> : */</a>
<a name="325"><span class="lineNum"> 325 </span><span class="lineCov"> 55231 : static void scan_file_deallocate(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="325"><span class="lineNum"> 325 </span><span class="lineCov"> 55218 : static void scan_file_deallocate(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="326"><span class="lineNum"> 326 </span> : {</a>
<a name="327"><span class="lineNum"> 327 </span><span class="lineCov"> 55231 : struct snapraid_state* state = scan-&gt;state;</span></a>
<a name="328"><span class="lineNum"> 328 </span><span class="lineCov"> 55231 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="327"><span class="lineNum"> 327 </span><span class="lineCov"> 55218 : struct snapraid_state* state = scan-&gt;state;</span></a>
<a name="328"><span class="lineNum"> 328 </span><span class="lineCov"> 55218 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="329"><span class="lineNum"> 329 </span> : block_off_t i;</a>
<a name="330"><span class="lineNum"> 330 </span> : </a>
<a name="331"><span class="lineNum"> 331 </span> : /* remove from the list of contained files */</a>
<a name="332"><span class="lineNum"> 332 </span><span class="lineCov"> 55231 : tommy_list_remove_existing(&amp;disk-&gt;filelist, &amp;file-&gt;nodelist);</span></a>
<a name="332"><span class="lineNum"> 332 </span><span class="lineCov"> 55218 : tommy_list_remove_existing(&amp;disk-&gt;filelist, &amp;file-&gt;nodelist);</span></a>
<a name="333"><span class="lineNum"> 333 </span> : </a>
<a name="334"><span class="lineNum"> 334 </span> : /* state changed */</a>
<a name="335"><span class="lineNum"> 335 </span><span class="lineCov"> 55231 : scan-&gt;need_write = 1;</span></a>
<a name="335"><span class="lineNum"> 335 </span><span class="lineCov"> 55218 : scan-&gt;need_write = 1;</span></a>
<a name="336"><span class="lineNum"> 336 </span> : </a>
<a name="337"><span class="lineNum"> 337 </span> : /* here we are supposed to adjust the ::first_free_block position */</a>
<a name="338"><span class="lineNum"> 338 </span> : /* with the parity position we are deleting */</a>
<a name="339"><span class="lineNum"> 339 </span> : /* but we also know that we do only delayed insert, after all the deletion, */</a>
<a name="340"><span class="lineNum"> 340 </span> : /* so at this point ::first_free_block is always at 0, and we don't need to update it */</a>
<a name="341"><span class="lineNum"> 341 </span><span class="lineCov"> 55231 : if (disk-&gt;first_free_block != 0) {</span></a>
<a name="341"><span class="lineNum"> 341 </span><span class="lineCov"> 55218 : if (disk-&gt;first_free_block != 0) {</span></a>
<a name="342"><span class="lineNum"> 342 </span> : /* LCOV_EXCL_START */</a>
<a name="343"><span class="lineNum"> 343 </span> : log_fatal(EINTERNAL, &quot;Internal inconsistency for first free position at '%u' deallocating file '%s'\n&quot;, disk-&gt;first_free_block, file-&gt;sub);</a>
<a name="344"><span class="lineNum"> 344 </span> : os_abort();</a>
@ -408,17 +408,17 @@
<a name="346"><span class="lineNum"> 346 </span> : }</a>
<a name="347"><span class="lineNum"> 347 </span> : </a>
<a name="348"><span class="lineNum"> 348 </span> : /* free all the blocks of the file */</a>
<a name="349"><span class="lineNum"> 349 </span><span class="lineCov"> 194526 : for (i = 0; i &lt; file-&gt;blockmax; ++i) {</span></a>
<a name="350"><span class="lineNum"> 350 </span><span class="lineCov"> 139295 : struct snapraid_block* block = fs_file2block_get(file, i);</span></a>
<a name="349"><span class="lineNum"> 349 </span><span class="lineCov"> 194458 : for (i = 0; i &lt; file-&gt;blockmax; ++i) {</span></a>
<a name="350"><span class="lineNum"> 350 </span><span class="lineCov"> 139240 : struct snapraid_block* block = fs_file2block_get(file, i);</span></a>
<a name="351"><span class="lineNum"> 351 </span> : unsigned block_state;</a>
<a name="352"><span class="lineNum"> 352 </span> : </a>
<a name="353"><span class="lineNum"> 353 </span> : /* in case we scan after an aborted sync, */</a>
<a name="354"><span class="lineNum"> 354 </span> : /* we could get also intermediate states */</a>
<a name="355"><span class="lineNum"> 355 </span><span class="lineCov"> 139295 : block_state = block_state_get(block);</span></a>
<a name="356"><span class="lineNum"> 356 </span><span class="lineCov"> 139295 : switch (block_state) {</span></a>
<a name="357"><span class="lineNum"> 357 </span><span class="lineCov"> 33275 : case BLOCK_STATE_BLK :</span></a>
<a name="355"><span class="lineNum"> 355 </span><span class="lineCov"> 139240 : block_state = block_state_get(block);</span></a>
<a name="356"><span class="lineNum"> 356 </span><span class="lineCov"> 139240 : switch (block_state) {</span></a>
<a name="357"><span class="lineNum"> 357 </span><span class="lineCov"> 33220 : case BLOCK_STATE_BLK :</span></a>
<a name="358"><span class="lineNum"> 358 </span> : /* we keep the hash making it an &quot;old&quot; hash, because the parity is still containing data for it */</a>
<a name="359"><span class="lineNum"> 359 </span><span class="lineCov"> 33275 : break;</span></a>
<a name="359"><span class="lineNum"> 359 </span><span class="lineCov"> 33220 : break;</span></a>
<a name="360"><span class="lineNum"> 360 </span><span class="lineCov"> 28040 : case BLOCK_STATE_CHG :</span></a>
<a name="361"><span class="lineNum"> 361 </span> : /* if we have not already cleared the past hash */</a>
<a name="362"><span class="lineNum"> 362 </span><span class="lineCov"> 28040 : if (!state-&gt;clear_past_hash) {</span></a>
@ -448,23 +448,23 @@
<a name="386"><span class="lineNum"> 386 </span> : }</a>
<a name="387"><span class="lineNum"> 387 </span> : </a>
<a name="388"><span class="lineNum"> 388 </span> : /* set the block as deleted */</a>
<a name="389"><span class="lineNum"> 389 </span><span class="lineCov"> 139295 : block_state_set(block, BLOCK_STATE_DELETED);</span></a>
<a name="389"><span class="lineNum"> 389 </span><span class="lineCov"> 139240 : block_state_set(block, BLOCK_STATE_DELETED);</span></a>
<a name="390"><span class="lineNum"> 390 </span> : }</a>
<a name="391"><span class="lineNum"> 391 </span> : </a>
<a name="392"><span class="lineNum"> 392 </span> : /* mark the file as deleted */</a>
<a name="393"><span class="lineNum"> 393 </span><span class="lineCov"> 55231 : file_flag_set(file, FILE_IS_DELETED);</span></a>
<a name="393"><span class="lineNum"> 393 </span><span class="lineCov"> 55218 : file_flag_set(file, FILE_IS_DELETED);</span></a>
<a name="394"><span class="lineNum"> 394 </span> : </a>
<a name="395"><span class="lineNum"> 395 </span> : /* insert it in the list of deleted blocks */</a>
<a name="396"><span class="lineNum"> 396 </span><span class="lineCov"> 55231 : tommy_list_insert_tail(&amp;disk-&gt;deletedlist, &amp;file-&gt;nodelist, file);</span></a>
<a name="397"><span class="lineNum"> 397 </span><span class="lineCov"> 55231 : }</span></a>
<a name="396"><span class="lineNum"> 396 </span><span class="lineCov"> 55218 : tommy_list_insert_tail(&amp;disk-&gt;deletedlist, &amp;file-&gt;nodelist, file);</span></a>
<a name="397"><span class="lineNum"> 397 </span><span class="lineCov"> 55218 : }</span></a>
<a name="398"><span class="lineNum"> 398 </span> : </a>
<a name="399"><span class="lineNum"> 399 </span><span class="lineCov"> 100097 : static void scan_file_delayed_allocate(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="399"><span class="lineNum"> 399 </span><span class="lineCov"> 100084 : static void scan_file_delayed_allocate(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="400"><span class="lineNum"> 400 </span> : {</a>
<a name="401"><span class="lineNum"> 401 </span><span class="lineCov"> 100097 : struct snapraid_state* state = scan-&gt;state;</span></a>
<a name="402"><span class="lineNum"> 402 </span><span class="lineCov"> 100097 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="401"><span class="lineNum"> 401 </span><span class="lineCov"> 100084 : struct snapraid_state* state = scan-&gt;state;</span></a>
<a name="402"><span class="lineNum"> 402 </span><span class="lineCov"> 100084 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="403"><span class="lineNum"> 403 </span> : </a>
<a name="404"><span class="lineNum"> 404 </span> : /* if we sort for physical offsets we have to read them for new files */</a>
<a name="405"><span class="lineNum"> 405 </span><span class="lineCov"> 100097 : if (state-&gt;opt.force_order == SORT_PHYSICAL</span></a>
<a name="405"><span class="lineNum"> 405 </span><span class="lineCov"> 100084 : if (state-&gt;opt.force_order == SORT_PHYSICAL</span></a>
<a name="406"><span class="lineNum"> 406 </span><span class="lineCov"> 11432 : &amp;&amp; file-&gt;physical == FILEPHY_UNREAD_OFFSET</span></a>
<a name="407"><span class="lineNum"> 407 </span> : ) {</a>
<a name="408"><span class="lineNum"> 408 </span> : char path_next[PATH_MAX];</a>
@ -480,30 +480,30 @@
<a name="418"><span class="lineNum"> 418 </span> : }</a>
<a name="419"><span class="lineNum"> 419 </span> : </a>
<a name="420"><span class="lineNum"> 420 </span> : /* insert in the delayed list */</a>
<a name="421"><span class="lineNum"> 421 </span><span class="lineCov"> 100097 : tommy_list_insert_tail(&amp;scan-&gt;file_insert_list, &amp;file-&gt;nodelist, file);</span></a>
<a name="422"><span class="lineNum"> 422 </span><span class="lineCov"> 100097 : }</span></a>
<a name="421"><span class="lineNum"> 421 </span><span class="lineCov"> 100084 : tommy_list_insert_tail(&amp;scan-&gt;file_insert_list, &amp;file-&gt;nodelist, file);</span></a>
<a name="422"><span class="lineNum"> 422 </span><span class="lineCov"> 100084 : }</span></a>
<a name="423"><span class="lineNum"> 423 </span> : </a>
<a name="424"><span class="lineNum"> 424 </span> : /**</a>
<a name="425"><span class="lineNum"> 425 </span> : * Check if a file is completely formed of blocks with invalid parity,</a>
<a name="426"><span class="lineNum"> 426 </span> : * and no rehash is tagged, and if it has at least one block.</a>
<a name="427"><span class="lineNum"> 427 </span> : */</a>
<a name="428"><span class="lineNum"> 428 </span><span class="lineCov"> 1083709 : static int file_is_full_invalid_parity_and_stable(struct snapraid_state* state, struct snapraid_disk* disk, struct snapraid_file* file)</span></a>
<a name="428"><span class="lineNum"> 428 </span><span class="lineCov"> 1083722 : static int file_is_full_invalid_parity_and_stable(struct snapraid_state* state, struct snapraid_disk* disk, struct snapraid_file* file)</span></a>
<a name="429"><span class="lineNum"> 429 </span> : {</a>
<a name="430"><span class="lineNum"> 430 </span> : block_off_t i;</a>
<a name="431"><span class="lineNum"> 431 </span> : </a>
<a name="432"><span class="lineNum"> 432 </span> : /* with no block, it never has an invalid parity */</a>
<a name="433"><span class="lineNum"> 433 </span><span class="lineCov"> 1083709 : if (file-&gt;blockmax == 0)</span></a>
<a name="434"><span class="lineNum"> 434 </span><span class="lineCov"> 1525 : return 0;</span></a>
<a name="433"><span class="lineNum"> 433 </span><span class="lineCov"> 1083722 : if (file-&gt;blockmax == 0)</span></a>
<a name="434"><span class="lineNum"> 434 </span><span class="lineCov"> 1523 : return 0;</span></a>
<a name="435"><span class="lineNum"> 435 </span> : </a>
<a name="436"><span class="lineNum"> 436 </span> : /* check all blocks */</a>
<a name="437"><span class="lineNum"> 437 </span><span class="lineCov"> 1139175 : for (i = 0; i &lt; file-&gt;blockmax; ++i) {</span></a>
<a name="437"><span class="lineNum"> 437 </span><span class="lineCov"> 1139190 : for (i = 0; i &lt; file-&gt;blockmax; ++i) {</span></a>
<a name="438"><span class="lineNum"> 438 </span> : snapraid_info info;</a>
<a name="439"><span class="lineNum"> 439 </span><span class="lineCov"> 1116488 : struct snapraid_block* block = fs_file2block_get(file, i);</span></a>
<a name="439"><span class="lineNum"> 439 </span><span class="lineCov"> 1116503 : struct snapraid_block* block = fs_file2block_get(file, i);</span></a>
<a name="440"><span class="lineNum"> 440 </span> : block_off_t parity_pos;</a>
<a name="441"><span class="lineNum"> 441 </span> : </a>
<a name="442"><span class="lineNum"> 442 </span> : /* exclude blocks with parity */</a>
<a name="443"><span class="lineNum"> 443 </span><span class="lineCov"> 1116488 : if (!block_has_invalid_parity(block))</span></a>
<a name="444"><span class="lineNum"> 444 </span><span class="lineCov"> 1059497 : return 0;</span></a>
<a name="443"><span class="lineNum"> 443 </span><span class="lineCov"> 1116503 : if (!block_has_invalid_parity(block))</span></a>
<a name="444"><span class="lineNum"> 444 </span><span class="lineCov"> 1059512 : return 0;</span></a>
<a name="445"><span class="lineNum"> 445 </span> : </a>
<a name="446"><span class="lineNum"> 446 </span> : /*</a>
<a name="447"><span class="lineNum"> 447 </span> : * Get the parity position.</a>
@ -533,23 +533,23 @@
<a name="471"><span class="lineNum"> 471 </span> : * Check if a file is completely formed of blocks with an updated hash,</a>
<a name="472"><span class="lineNum"> 472 </span> : * and no rehash is tagged, and if it has at least one block.</a>
<a name="473"><span class="lineNum"> 473 </span> : */</a>
<a name="474"><span class="lineNum"> 474 </span><span class="lineCov"> 23671 : static int file_is_full_hashed_and_stable(struct snapraid_state* state, struct snapraid_disk* disk, struct snapraid_file* file)</span></a>
<a name="474"><span class="lineNum"> 474 </span><span class="lineCov"> 23670 : static int file_is_full_hashed_and_stable(struct snapraid_state* state, struct snapraid_disk* disk, struct snapraid_file* file)</span></a>
<a name="475"><span class="lineNum"> 475 </span> : {</a>
<a name="476"><span class="lineNum"> 476 </span> : block_off_t i;</a>
<a name="477"><span class="lineNum"> 477 </span> : </a>
<a name="478"><span class="lineNum"> 478 </span> : /* with no block, it never has a hash */</a>
<a name="479"><span class="lineNum"> 479 </span><span class="lineCov"> 23671 : if (file-&gt;blockmax == 0)</span></a>
<a name="479"><span class="lineNum"> 479 </span><span class="lineCov"> 23670 : if (file-&gt;blockmax == 0)</span></a>
<a name="480"><span class="lineNum"> 480 </span><span class="lineCov"> 27 : return 0;</span></a>
<a name="481"><span class="lineNum"> 481 </span> : </a>
<a name="482"><span class="lineNum"> 482 </span> : /* check all blocks */</a>
<a name="483"><span class="lineNum"> 483 </span><span class="lineCov"> 81888 : for (i = 0; i &lt; file-&gt;blockmax; ++i) {</span></a>
<a name="483"><span class="lineNum"> 483 </span><span class="lineCov"> 81887 : for (i = 0; i &lt; file-&gt;blockmax; ++i) {</span></a>
<a name="484"><span class="lineNum"> 484 </span> : snapraid_info info;</a>
<a name="485"><span class="lineNum"> 485 </span><span class="lineCov"> 58251 : struct snapraid_block* block = fs_file2block_get(file, i);</span></a>
<a name="485"><span class="lineNum"> 485 </span><span class="lineCov"> 58250 : struct snapraid_block* block = fs_file2block_get(file, i);</span></a>
<a name="486"><span class="lineNum"> 486 </span> : block_off_t parity_pos;</a>
<a name="487"><span class="lineNum"> 487 </span> : </a>
<a name="488"><span class="lineNum"> 488 </span> : /* exclude blocks without hash */</a>
<a name="489"><span class="lineNum"> 489 </span><span class="lineCov"> 58251 : if (!block_has_updated_hash(block))</span></a>
<a name="490"><span class="lineNum"> 490 </span><span class="lineCov"> 7 : return 0;</span></a>
<a name="489"><span class="lineNum"> 489 </span><span class="lineCov"> 58250 : if (!block_has_updated_hash(block))</span></a>
<a name="490"><span class="lineNum"> 490 </span><span class="lineCov"> 6 : return 0;</span></a>
<a name="491"><span class="lineNum"> 491 </span> : </a>
<a name="492"><span class="lineNum"> 492 </span> : /*</a>
<a name="493"><span class="lineNum"> 493 </span> : * Get the parity position.</a>
@ -590,7 +590,7 @@
<a name="528"><span class="lineNum"> 528 </span> : *</a>
<a name="529"><span class="lineNum"> 529 </span> : * If this happens, we read also the physical offset, to avoid to read it later.</a>
<a name="530"><span class="lineNum"> 530 </span> : */</a>
<a name="531"><span class="lineNum"> 531 </span><span class="lineCov"> 77410 : static void scan_file_refresh(struct snapraid_scan* scan, const char* sub, struct stat* st, uint64_t* physical)</span></a>
<a name="531"><span class="lineNum"> 531 </span><span class="lineCov"> 77397 : static void scan_file_refresh(struct snapraid_scan* scan, const char* sub, struct stat* st, uint64_t* physical)</span></a>
<a name="532"><span class="lineNum"> 532 </span> : {</a>
<a name="533"><span class="lineNum"> 533 </span> : #if HAVE_LSTAT_SYNC</a>
<a name="534"><span class="lineNum"> 534 </span> : struct snapraid_state* state = scan-&gt;state;</a>
@ -678,49 +678,49 @@
<a name="616"><span class="lineNum"> 616 </span> : (void)st;</a>
<a name="617"><span class="lineNum"> 617 </span> : (void)physical;</a>
<a name="618"><span class="lineNum"> 618 </span> : #endif</a>
<a name="619"><span class="lineNum"> 619 </span><span class="lineCov"> 77410 : }</span></a>
<a name="619"><span class="lineNum"> 619 </span><span class="lineCov"> 77397 : }</span></a>
<a name="620"><span class="lineNum"> 620 </span> : </a>
<a name="621"><span class="lineNum"> 621 </span> : /**</a>
<a name="622"><span class="lineNum"> 622 </span> : * Insert the file in the data set.</a>
<a name="623"><span class="lineNum"> 623 </span> : */</a>
<a name="624"><span class="lineNum"> 624 </span><span class="lineCov"> 100097 : static void scan_file_insert(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="624"><span class="lineNum"> 624 </span><span class="lineCov"> 100084 : static void scan_file_insert(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="625"><span class="lineNum"> 625 </span> : {</a>
<a name="626"><span class="lineNum"> 626 </span><span class="lineCov"> 100097 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="626"><span class="lineNum"> 626 </span><span class="lineCov"> 100084 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="627"><span class="lineNum"> 627 </span> : </a>
<a name="628"><span class="lineNum"> 628 </span> : /* insert the file in the containers */</a>
<a name="629"><span class="lineNum"> 629 </span><span class="lineCov"> 100097 : if (!file_flag_has(file, FILE_IS_WITHOUT_INODE))</span></a>
<a name="630"><span class="lineNum"> 630 </span><span class="lineCov"> 100097 : tommy_hashdyn_insert(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset, file, file_inode_hash(file-&gt;inode));</span></a>
<a name="629"><span class="lineNum"> 629 </span><span class="lineCov"> 100084 : if (!file_flag_has(file, FILE_IS_WITHOUT_INODE))</span></a>
<a name="630"><span class="lineNum"> 630 </span><span class="lineCov"> 100084 : tommy_hashdyn_insert(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset, file, file_inode_hash(file-&gt;inode));</span></a>
<a name="631"><span class="lineNum"> 631 </span> : </a>
<a name="632"><span class="lineNum"> 632 </span><span class="lineCov"> 100097 : stamp_lock(disk);</span></a>
<a name="633"><span class="lineNum"> 633 </span><span class="lineCov"> 100097 : tommy_hashdyn_insert(&amp;disk-&gt;pathset, &amp;file-&gt;pathset, file, file_path_hash(file-&gt;sub));</span></a>
<a name="634"><span class="lineNum"> 634 </span><span class="lineCov"> 100097 : tommy_hashdyn_insert(&amp;disk-&gt;stampset, &amp;file-&gt;stampset, file, file_stamp_hash(file-&gt;size, file-&gt;mtime_sec, file-&gt;mtime_nsec));</span></a>
<a name="635"><span class="lineNum"> 635 </span><span class="lineCov"> 100097 : stamp_unlock(disk);</span></a>
<a name="632"><span class="lineNum"> 632 </span><span class="lineCov"> 100084 : stamp_lock(disk);</span></a>
<a name="633"><span class="lineNum"> 633 </span><span class="lineCov"> 100084 : tommy_hashdyn_insert(&amp;disk-&gt;pathset, &amp;file-&gt;pathset, file, file_path_hash(file-&gt;sub));</span></a>
<a name="634"><span class="lineNum"> 634 </span><span class="lineCov"> 100084 : tommy_hashdyn_insert(&amp;disk-&gt;stampset, &amp;file-&gt;stampset, file, file_stamp_hash(file-&gt;size, file-&gt;mtime_sec, file-&gt;mtime_nsec));</span></a>
<a name="635"><span class="lineNum"> 635 </span><span class="lineCov"> 100084 : stamp_unlock(disk);</span></a>
<a name="636"><span class="lineNum"> 636 </span> : </a>
<a name="637"><span class="lineNum"> 637 </span> : /* delayed allocation of the parity */</a>
<a name="638"><span class="lineNum"> 638 </span><span class="lineCov"> 100097 : scan_file_delayed_allocate(scan, file);</span></a>
<a name="639"><span class="lineNum"> 639 </span><span class="lineCov"> 100097 : }</span></a>
<a name="638"><span class="lineNum"> 638 </span><span class="lineCov"> 100084 : scan_file_delayed_allocate(scan, file);</span></a>
<a name="639"><span class="lineNum"> 639 </span><span class="lineCov"> 100084 : }</span></a>
<a name="640"><span class="lineNum"> 640 </span> : </a>
<a name="641"><span class="lineNum"> 641 </span> : /**</a>
<a name="642"><span class="lineNum"> 642 </span> : * Remove the file from the data set.</a>
<a name="643"><span class="lineNum"> 643 </span> : *</a>
<a name="644"><span class="lineNum"> 644 </span> : * File is then deleted.</a>
<a name="645"><span class="lineNum"> 645 </span> : */</a>
<a name="646"><span class="lineNum"> 646 </span><span class="lineCov"> 55231 : static void scan_file_remove(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="646"><span class="lineNum"> 646 </span><span class="lineCov"> 55218 : static void scan_file_remove(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="647"><span class="lineNum"> 647 </span> : {</a>
<a name="648"><span class="lineNum"> 648 </span><span class="lineCov"> 55231 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="648"><span class="lineNum"> 648 </span><span class="lineCov"> 55218 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="649"><span class="lineNum"> 649 </span> : </a>
<a name="650"><span class="lineNum"> 650 </span> : /* remove the file from the containers */</a>
<a name="651"><span class="lineNum"> 651 </span><span class="lineCov"> 55231 : if (!file_flag_has(file, FILE_IS_WITHOUT_INODE))</span></a>
<a name="652"><span class="lineNum"> 652 </span><span class="lineCov"> 55184 : tommy_hashdyn_remove_existing(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset);</span></a>
<a name="653"><span class="lineNum"> 653 </span><span class="lineCov"> 55231 : tommy_hashdyn_remove_existing(&amp;disk-&gt;pathset, &amp;file-&gt;pathset);</span></a>
<a name="651"><span class="lineNum"> 651 </span><span class="lineCov"> 55218 : if (!file_flag_has(file, FILE_IS_WITHOUT_INODE))</span></a>
<a name="652"><span class="lineNum"> 652 </span><span class="lineCov"> 55153 : tommy_hashdyn_remove_existing(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset);</span></a>
<a name="653"><span class="lineNum"> 653 </span><span class="lineCov"> 55218 : tommy_hashdyn_remove_existing(&amp;disk-&gt;pathset, &amp;file-&gt;pathset);</span></a>
<a name="654"><span class="lineNum"> 654 </span> : </a>
<a name="655"><span class="lineNum"> 655 </span><span class="lineCov"> 55231 : stamp_lock(disk);</span></a>
<a name="656"><span class="lineNum"> 656 </span><span class="lineCov"> 55231 : tommy_hashdyn_remove_existing(&amp;disk-&gt;stampset, &amp;file-&gt;stampset);</span></a>
<a name="657"><span class="lineNum"> 657 </span><span class="lineCov"> 55231 : stamp_unlock(disk);</span></a>
<a name="655"><span class="lineNum"> 655 </span><span class="lineCov"> 55218 : stamp_lock(disk);</span></a>
<a name="656"><span class="lineNum"> 656 </span><span class="lineCov"> 55218 : tommy_hashdyn_remove_existing(&amp;disk-&gt;stampset, &amp;file-&gt;stampset);</span></a>
<a name="657"><span class="lineNum"> 657 </span><span class="lineCov"> 55218 : stamp_unlock(disk);</span></a>
<a name="658"><span class="lineNum"> 658 </span> : </a>
<a name="659"><span class="lineNum"> 659 </span> : /* deallocate the file from the parity */</a>
<a name="660"><span class="lineNum"> 660 </span><span class="lineCov"> 55231 : scan_file_deallocate(scan, file);</span></a>
<a name="661"><span class="lineNum"> 661 </span><span class="lineCov"> 55231 : }</span></a>
<a name="660"><span class="lineNum"> 660 </span><span class="lineCov"> 55218 : scan_file_deallocate(scan, file);</span></a>
<a name="661"><span class="lineNum"> 661 </span><span class="lineCov"> 55218 : }</span></a>
<a name="662"><span class="lineNum"> 662 </span> : </a>
<a name="663"><span class="lineNum"> 663 </span> : /**</a>
<a name="664"><span class="lineNum"> 664 </span> : * Keep the file as it's (or with only a name/inode modification).</a>
@ -733,12 +733,12 @@
<a name="671"><span class="lineNum"> 671 </span> : * This could happen after a failed sync, when some other files are deleted,</a>
<a name="672"><span class="lineNum"> 672 </span> : * and then new ones can be moved backward to fill the hole created.</a>
<a name="673"><span class="lineNum"> 673 </span> : */</a>
<a name="674"><span class="lineNum"> 674 </span><span class="lineCov"> 1083709 : static void scan_file_keep(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="674"><span class="lineNum"> 674 </span><span class="lineCov"> 1083722 : static void scan_file_keep(struct snapraid_scan* scan, struct snapraid_file* file)</span></a>
<a name="675"><span class="lineNum"> 675 </span> : {</a>
<a name="676"><span class="lineNum"> 676 </span><span class="lineCov"> 1083709 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="676"><span class="lineNum"> 676 </span><span class="lineCov"> 1083722 : struct snapraid_disk* disk = scan-&gt;disk;</span></a>
<a name="677"><span class="lineNum"> 677 </span> : </a>
<a name="678"><span class="lineNum"> 678 </span> : /* if the file is full invalid, schedule a reinsert at later stage */</a>
<a name="679"><span class="lineNum"> 679 </span><span class="lineCov"> 1083709 : if (file_is_full_invalid_parity_and_stable(scan-&gt;state, disk, file)) {</span></a>
<a name="679"><span class="lineNum"> 679 </span><span class="lineCov"> 1083722 : if (file_is_full_invalid_parity_and_stable(scan-&gt;state, disk, file)) {</span></a>
<a name="680"><span class="lineNum"> 680 </span><span class="lineCov"> 22687 : struct snapraid_file* copy = file_dup(file);</span></a>
<a name="681"><span class="lineNum"> 681 </span> : </a>
<a name="682"><span class="lineNum"> 682 </span> : /* remove the file */</a>
@ -747,7 +747,7 @@
<a name="685"><span class="lineNum"> 685 </span> : /* reinsert the copy in the delayed list */</a>
<a name="686"><span class="lineNum"> 686 </span><span class="lineCov"> 22687 : scan_file_insert(scan, copy);</span></a>
<a name="687"><span class="lineNum"> 687 </span> : }</a>
<a name="688"><span class="lineNum"> 688 </span><span class="lineCov"> 1083709 : }</span></a>
<a name="688"><span class="lineNum"> 688 </span><span class="lineCov"> 1083722 : }</span></a>
<a name="689"><span class="lineNum"> 689 </span> : </a>
<a name="690"><span class="lineNum"> 690 </span> : /**</a>
<a name="691"><span class="lineNum"> 691 </span> : * Process a file.</a>
@ -804,17 +804,17 @@
<a name="742"><span class="lineNum"> 742 </span> : /* identify moved files with past inodes and hardlinks with the new inodes */</a>
<a name="743"><span class="lineNum"> 743 </span><span class="lineCov"> 1161329 : if (file) {</span></a>
<a name="744"><span class="lineNum"> 744 </span> : /* check if the file is not changed */</a>
<a name="745"><span class="lineNum"> 745 </span><span class="lineCov"> 1001529 : if (file-&gt;size == st-&gt;st_size</span></a>
<a name="746"><span class="lineNum"> 746 </span><span class="lineCov"> 990214 : &amp;&amp; file-&gt;mtime_sec == st-&gt;st_mtime</span></a>
<a name="747"><span class="lineNum"> 747 </span><span class="lineCov"> 988959 : &amp;&amp; (file-&gt;mtime_nsec == STAT_NSEC(st)</span></a>
<a name="745"><span class="lineNum"> 745 </span><span class="lineCov"> 1002136 : if (file-&gt;size == st-&gt;st_size</span></a>
<a name="746"><span class="lineNum"> 746 </span><span class="lineCov"> 990273 : &amp;&amp; file-&gt;mtime_sec == st-&gt;st_mtime</span></a>
<a name="747"><span class="lineNum"> 747 </span><span class="lineCov"> 989015 : &amp;&amp; (file-&gt;mtime_nsec == STAT_NSEC(st)</span></a>
<a name="748"><span class="lineNum"> 748 </span> : /* always accept the stored value if it's STAT_NSEC_INVALID */</a>
<a name="749"><span class="lineNum"> 749 </span> : /* it happens when upgrading from an old version of SnapRAID */</a>
<a name="750"><span class="lineNum"> 750 </span> : /* not yet supporting the nanosecond field */</a>
<a name="751"><span class="lineNum"> 751 </span><span class="lineCov"> 8 : || file-&gt;mtime_nsec == STAT_NSEC_INVALID</span></a>
<a name="751"><span class="lineNum"> 751 </span><span class="lineCov"> 7 : || file-&gt;mtime_nsec == STAT_NSEC_INVALID</span></a>
<a name="752"><span class="lineNum"> 752 </span> : )</a>
<a name="753"><span class="lineNum"> 753 </span> : ) {</a>
<a name="754"><span class="lineNum"> 754 </span> : /* check if multiple files have the same inode */</a>
<a name="755"><span class="lineNum"> 755 </span><span class="lineCov"> 988951 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span></a>
<a name="755"><span class="lineNum"> 755 </span><span class="lineCov"> 989008 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span></a>
<a name="756"><span class="lineNum"> 756 </span> : /* if has_volatile_hardlinks is true, the nlink value is not reliable */</a>
<a name="757"><span class="lineNum"> 757 </span><span class="lineCov"> 210 : if (!disk-&gt;has_volatile_hardlinks &amp;&amp; st-&gt;st_nlink == 1) {</span></a>
<a name="758"><span class="lineNum"> 758 </span> : /* LCOV_EXCL_START */</a>
@ -825,15 +825,15 @@
<a name="763"><span class="lineNum"> 763 </span> : </a>
<a name="764"><span class="lineNum"> 764 </span> : /* it's a hardlink */</a>
<a name="765"><span class="lineNum"> 765 </span><span class="lineCov"> 210 : scan_link(scan, is_diff, sub, file-&gt;sub, FILE_IS_HARDLINK);</span></a>
<a name="766"><span class="lineNum"> 766 </span><span class="lineCov"> 1083919 : return;</span></a>
<a name="766"><span class="lineNum"> 766 </span><span class="lineCov"> 1083932 : return;</span></a>
<a name="767"><span class="lineNum"> 767 </span> : }</a>
<a name="768"><span class="lineNum"> 768 </span> : </a>
<a name="769"><span class="lineNum"> 769 </span> : /* mark as present */</a>
<a name="770"><span class="lineNum"> 770 </span><span class="lineCov"> 988741 : file_flag_set(file, FILE_IS_PRESENT);</span></a>
<a name="770"><span class="lineNum"> 770 </span><span class="lineCov"> 988798 : file_flag_set(file, FILE_IS_PRESENT);</span></a>
<a name="771"><span class="lineNum"> 771 </span> : </a>
<a name="772"><span class="lineNum"> 772 </span> : /* update the nanoseconds mtime only if different */</a>
<a name="773"><span class="lineNum"> 773 </span> : /* to avoid unneeded updates */</a>
<a name="774"><span class="lineNum"> 774 </span><span class="lineCov"> 988741 : if (file-&gt;mtime_nsec == STAT_NSEC_INVALID</span></a>
<a name="774"><span class="lineNum"> 774 </span><span class="lineCov"> 988798 : if (file-&gt;mtime_nsec == STAT_NSEC_INVALID</span></a>
<a name="775"><span class="lineNum"> 775 </span><span class="lineNoCov"> 0 : &amp;&amp; STAT_NSEC(st) != file-&gt;mtime_nsec</span></a>
<a name="776"><span class="lineNum"> 776 </span> : ) {</a>
<a name="777"><span class="lineNum"> 777 </span><span class="lineNoCov"> 0 : file-&gt;mtime_nsec = STAT_NSEC(st);</span></a>
@ -842,7 +842,7 @@
<a name="780"><span class="lineNum"> 780 </span><span class="lineNoCov"> 0 : scan-&gt;need_write = 1;</span></a>
<a name="781"><span class="lineNum"> 781 </span> : }</a>
<a name="782"><span class="lineNum"> 782 </span> : </a>
<a name="783"><span class="lineNum"> 783 </span><span class="lineCov"> 988741 : if (strcmp(file-&gt;sub, sub) != 0) {</span></a>
<a name="783"><span class="lineNum"> 783 </span><span class="lineCov"> 988798 : if (strcmp(file-&gt;sub, sub) != 0) {</span></a>
<a name="784"><span class="lineNum"> 784 </span> : /* if the path is different, it means a moved file with the same inode */</a>
<a name="785"><span class="lineNum"> 785 </span><span class="lineCov"> 155 : ++scan-&gt;count_move;</span></a>
<a name="786"><span class="lineNum"> 786 </span> : </a>
@ -864,18 +864,18 @@
<a name="802"><span class="lineNum"> 802 </span><span class="lineCov"> 155 : scan-&gt;need_write = 1;</span></a>
<a name="803"><span class="lineNum"> 803 </span> : } else {</a>
<a name="804"><span class="lineNum"> 804 </span> : /* otherwise it's equal */</a>
<a name="805"><span class="lineNum"> 805 </span><span class="lineCov"> 988586 : ++scan-&gt;count_equal;</span></a>
<a name="805"><span class="lineNum"> 805 </span><span class="lineCov"> 988643 : ++scan-&gt;count_equal;</span></a>
<a name="806"><span class="lineNum"> 806 </span> : </a>
<a name="807"><span class="lineNum"> 807 </span><span class="lineCov"> 988586 : if (state-&gt;opt.gui_verbose) {</span></a>
<a name="807"><span class="lineNum"> 807 </span><span class="lineCov"> 988643 : if (state-&gt;opt.gui_verbose) {</span></a>
<a name="808"><span class="lineNum"> 808 </span><span class="lineNoCov"> 0 : log_tag(&quot;scan:equal:%s:%s\n&quot;, disk-&gt;name, esc_tag(file-&gt;sub, esc_buffer));</span></a>
<a name="809"><span class="lineNum"> 809 </span> : }</a>
<a name="810"><span class="lineNum"> 810 </span> : }</a>
<a name="811"><span class="lineNum"> 811 </span> : </a>
<a name="812"><span class="lineNum"> 812 </span> : /* mark the file as kept */</a>
<a name="813"><span class="lineNum"> 813 </span><span class="lineCov"> 988741 : scan_file_keep(scan, file);</span></a>
<a name="813"><span class="lineNum"> 813 </span><span class="lineCov"> 988798 : scan_file_keep(scan, file);</span></a>
<a name="814"><span class="lineNum"> 814 </span> : </a>
<a name="815"><span class="lineNum"> 815 </span> : /* nothing more to do */</a>
<a name="816"><span class="lineNum"> 816 </span><span class="lineCov"> 988741 : return;</span></a>
<a name="816"><span class="lineNum"> 816 </span><span class="lineCov"> 988798 : return;</span></a>
<a name="817"><span class="lineNum"> 817 </span> : }</a>
<a name="818"><span class="lineNum"> 818 </span> : </a>
<a name="819"><span class="lineNum"> 819 </span> : /*</a>
@ -897,7 +897,7 @@
<a name="835"><span class="lineNum"> 835 </span> : * C:&gt; dir</a>
<a name="836"><span class="lineNum"> 836 </span> : * ...both time and size of A and B don't match!</a>
<a name="837"><span class="lineNum"> 837 </span> : */</a>
<a name="838"><span class="lineNum"> 838 </span><span class="lineCov"> 12578 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span></a>
<a name="838"><span class="lineNum"> 838 </span><span class="lineCov"> 13128 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span></a>
<a name="839"><span class="lineNum"> 839 </span> : /* if has_volatile_hardlinks is true, the nlink value is not reliable */</a>
<a name="840"><span class="lineNum"> 840 </span><span class="lineNoCov"> 0 : if (!disk-&gt;has_volatile_hardlinks &amp;&amp; st-&gt;st_nlink == 1) {</span></a>
<a name="841"><span class="lineNum"> 841 </span> : /* LCOV_EXCL_START */</a>
@ -923,44 +923,44 @@
<a name="861"><span class="lineNum"> 861 </span> : /* otherwise, it will get removed */</a>
<a name="862"><span class="lineNum"> 862 </span> : </a>
<a name="863"><span class="lineNum"> 863 </span> : /* remove from the inode set */</a>
<a name="864"><span class="lineNum"> 864 </span><span class="lineCov"> 12578 : tommy_hashdyn_remove_existing(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset);</span></a>
<a name="864"><span class="lineNum"> 864 </span><span class="lineCov"> 13128 : tommy_hashdyn_remove_existing(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset);</span></a>
<a name="865"><span class="lineNum"> 865 </span> : </a>
<a name="866"><span class="lineNum"> 866 </span> : /* clear the inode */</a>
<a name="867"><span class="lineNum"> 867 </span> : /* this is not really needed for correct functionality */</a>
<a name="868"><span class="lineNum"> 868 </span> : /* because we are going to set FILE_IS_WITHOUT_INODE */</a>
<a name="869"><span class="lineNum"> 869 </span> : /* but it's easier for debugging to have invalid inodes set to 0 */</a>
<a name="870"><span class="lineNum"> 870 </span><span class="lineCov"> 12578 : file-&gt;inode = 0;</span></a>
<a name="870"><span class="lineNum"> 870 </span><span class="lineCov"> 13128 : file-&gt;inode = 0;</span></a>
<a name="871"><span class="lineNum"> 871 </span> : </a>
<a name="872"><span class="lineNum"> 872 </span> : /* mark as missing inode */</a>
<a name="873"><span class="lineNum"> 873 </span><span class="lineCov"> 12578 : file_flag_set(file, FILE_IS_WITHOUT_INODE);</span></a>
<a name="873"><span class="lineNum"> 873 </span><span class="lineCov"> 13128 : file_flag_set(file, FILE_IS_WITHOUT_INODE);</span></a>
<a name="874"><span class="lineNum"> 874 </span> : </a>
<a name="875"><span class="lineNum"> 875 </span> : /* go further to find it by name */</a>
<a name="876"><span class="lineNum"> 876 </span> : }</a>
<a name="877"><span class="lineNum"> 877 </span> : </a>
<a name="878"><span class="lineNum"> 878 </span> : /* initialize for later overwrite */</a>
<a name="879"><span class="lineNum"> 879 </span><span class="lineCov"> 172378 : is_file_reported = 0;</span></a>
<a name="880"><span class="lineNum"> 880 </span><span class="lineCov"> 172378 : is_original_file_size_different_than_zero = 0;</span></a>
<a name="879"><span class="lineNum"> 879 </span><span class="lineCov"> 172321 : is_file_reported = 0;</span></a>
<a name="880"><span class="lineNum"> 880 </span><span class="lineCov"> 172321 : is_original_file_size_different_than_zero = 0;</span></a>
<a name="881"><span class="lineNum"> 881 </span> : </a>
<a name="882"><span class="lineNum"> 882 </span> : /* then try finding it by name */</a>
<a name="883"><span class="lineNum"> 883 </span><span class="lineCov"> 172378 : file = tommy_hashdyn_search(&amp;disk-&gt;pathset, file_path_compare_to_arg, sub, file_path_hash(sub));</span></a>
<a name="883"><span class="lineNum"> 883 </span><span class="lineCov"> 172321 : file = tommy_hashdyn_search(&amp;disk-&gt;pathset, file_path_compare_to_arg, sub, file_path_hash(sub));</span></a>
<a name="884"><span class="lineNum"> 884 </span> : </a>
<a name="885"><span class="lineNum"> 885 </span> : /* keep track if the file already exists */</a>
<a name="886"><span class="lineNum"> 886 </span><span class="lineCov"> 172378 : is_file_already_present = file != 0;</span></a>
<a name="886"><span class="lineNum"> 886 </span><span class="lineCov"> 172321 : is_file_already_present = file != 0;</span></a>
<a name="887"><span class="lineNum"> 887 </span> : </a>
<a name="888"><span class="lineNum"> 888 </span><span class="lineCov"> 172378 : if (is_file_already_present) {</span></a>
<a name="888"><span class="lineNum"> 888 </span><span class="lineCov"> 172321 : if (is_file_already_present) {</span></a>
<a name="889"><span class="lineNum"> 889 </span> : /* if the file is without an inode */</a>
<a name="890"><span class="lineNum"> 890 </span><span class="lineCov"> 97862 : if (file_flag_has(file, FILE_IS_WITHOUT_INODE)) {</span></a>
<a name="890"><span class="lineNum"> 890 </span><span class="lineCov"> 97805 : if (file_flag_has(file, FILE_IS_WITHOUT_INODE)) {</span></a>
<a name="891"><span class="lineNum"> 891 </span> : /* set it now */</a>
<a name="892"><span class="lineNum"> 892 </span><span class="lineCov"> 12545 : file-&gt;inode = st-&gt;st_ino;</span></a>
<a name="892"><span class="lineNum"> 892 </span><span class="lineCov"> 13077 : file-&gt;inode = st-&gt;st_ino;</span></a>
<a name="893"><span class="lineNum"> 893 </span> : </a>
<a name="894"><span class="lineNum"> 894 </span> : /* insert in the set */</a>
<a name="895"><span class="lineNum"> 895 </span><span class="lineCov"> 12545 : tommy_hashdyn_insert(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset, file, file_inode_hash(file-&gt;inode));</span></a>
<a name="895"><span class="lineNum"> 895 </span><span class="lineCov"> 13077 : tommy_hashdyn_insert(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset, file, file_inode_hash(file-&gt;inode));</span></a>
<a name="896"><span class="lineNum"> 896 </span> : </a>
<a name="897"><span class="lineNum"> 897 </span> : /* unmark as missing inode */</a>
<a name="898"><span class="lineNum"> 898 </span><span class="lineCov"> 12545 : file_flag_clear(file, FILE_IS_WITHOUT_INODE);</span></a>
<a name="898"><span class="lineNum"> 898 </span><span class="lineCov"> 13077 : file_flag_clear(file, FILE_IS_WITHOUT_INODE);</span></a>
<a name="899"><span class="lineNum"> 899 </span> : } else {</a>
<a name="900"><span class="lineNum"> 900 </span> : /* here the inode has to be different, otherwise we would have found it before */</a>
<a name="901"><span class="lineNum"> 901 </span><span class="lineCov"> 85317 : if (file-&gt;inode == st-&gt;st_ino) {</span></a>
<a name="901"><span class="lineNum"> 901 </span><span class="lineCov"> 84728 : if (file-&gt;inode == st-&gt;st_ino) {</span></a>
<a name="902"><span class="lineNum"> 902 </span> : /* LCOV_EXCL_START */</a>
<a name="903"><span class="lineNum"> 903 </span> : log_fatal(EINTERNAL, &quot;Internal inconsistency in inode '%&quot; PRIu64 &quot;' for files '%s%s' as unexpected matching\n&quot;, file-&gt;inode, disk-&gt;dir, sub);</a>
<a name="904"><span class="lineNum"> 904 </span> : os_abort();</a>
@ -969,7 +969,7 @@
<a name="907"><span class="lineNum"> 907 </span> : }</a>
<a name="908"><span class="lineNum"> 908 </span> : </a>
<a name="909"><span class="lineNum"> 909 </span> : /* for sure it cannot be already present */</a>
<a name="910"><span class="lineNum"> 910 </span><span class="lineCov"> 97862 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span></a>
<a name="910"><span class="lineNum"> 910 </span><span class="lineCov"> 97805 : if (file_flag_has(file, FILE_IS_PRESENT)) {</span></a>
<a name="911"><span class="lineNum"> 911 </span> : /* LCOV_EXCL_START */</a>
<a name="912"><span class="lineNum"> 912 </span> : log_fatal(EINTERNAL, &quot;Internal inconsistency in path for file '%s%s' matching and already present\n&quot;, disk-&gt;dir, sub);</a>
<a name="913"><span class="lineNum"> 913 </span> : os_abort();</a>
@ -977,9 +977,9 @@
<a name="915"><span class="lineNum"> 915 </span> : }</a>
<a name="916"><span class="lineNum"> 916 </span> : </a>
<a name="917"><span class="lineNum"> 917 </span> : /* check if the file is not changed */</a>
<a name="918"><span class="lineNum"> 918 </span><span class="lineCov"> 97862 : if (file-&gt;size == st-&gt;st_size</span></a>
<a name="919"><span class="lineNum"> 919 </span><span class="lineCov"> 97266 : &amp;&amp; file-&gt;mtime_sec == st-&gt;st_mtime</span></a>
<a name="920"><span class="lineNum"> 920 </span><span class="lineCov"> 94970 : &amp;&amp; (file-&gt;mtime_nsec == STAT_NSEC(st)</span></a>
<a name="918"><span class="lineNum"> 918 </span><span class="lineCov"> 97805 : if (file-&gt;size == st-&gt;st_size</span></a>
<a name="919"><span class="lineNum"> 919 </span><span class="lineCov"> 97209 : &amp;&amp; file-&gt;mtime_sec == st-&gt;st_mtime</span></a>
<a name="920"><span class="lineNum"> 920 </span><span class="lineCov"> 94926 : &amp;&amp; (file-&gt;mtime_nsec == STAT_NSEC(st)</span></a>
<a name="921"><span class="lineNum"> 921 </span> : /* always accept the stored value if it's STAT_NSEC_INVALID */</a>
<a name="922"><span class="lineNum"> 922 </span> : /* it happens when upgrading from an old version of SnapRAID */</a>
<a name="923"><span class="lineNum"> 923 </span> : /* not yet supporting the nanosecond field */</a>
@ -987,11 +987,11 @@
<a name="925"><span class="lineNum"> 925 </span> : )</a>
<a name="926"><span class="lineNum"> 926 </span> : ) {</a>
<a name="927"><span class="lineNum"> 927 </span> : /* mark as present */</a>
<a name="928"><span class="lineNum"> 928 </span><span class="lineCov"> 94968 : file_flag_set(file, FILE_IS_PRESENT);</span></a>
<a name="928"><span class="lineNum"> 928 </span><span class="lineCov"> 94924 : file_flag_set(file, FILE_IS_PRESENT);</span></a>
<a name="929"><span class="lineNum"> 929 </span> : </a>
<a name="930"><span class="lineNum"> 930 </span> : /* update the nano seconds mtime only if different */</a>
<a name="931"><span class="lineNum"> 931 </span> : /* to avoid unneeded updates */</a>
<a name="932"><span class="lineNum"> 932 </span><span class="lineCov"> 94968 : if (file-&gt;mtime_nsec == STAT_NSEC_INVALID</span></a>
<a name="932"><span class="lineNum"> 932 </span><span class="lineCov"> 94924 : if (file-&gt;mtime_nsec == STAT_NSEC_INVALID</span></a>
<a name="933"><span class="lineNum"> 933 </span><span class="lineNoCov"> 0 : &amp;&amp; STAT_NSEC(st) != STAT_NSEC_INVALID</span></a>
<a name="934"><span class="lineNum"> 934 </span> : ) {</a>
<a name="935"><span class="lineNum"> 935 </span><span class="lineNoCov"> 0 : file-&gt;mtime_nsec = STAT_NSEC(st);</span></a>
@ -1001,30 +1001,30 @@
<a name="939"><span class="lineNum"> 939 </span> : }</a>
<a name="940"><span class="lineNum"> 940 </span> : </a>
<a name="941"><span class="lineNum"> 941 </span> : /* if when processing the disk we used the past inodes values */</a>
<a name="942"><span class="lineNum"> 942 </span><span class="lineCov"> 94968 : if (has_past_inodes) {</span></a>
<a name="942"><span class="lineNum"> 942 </span><span class="lineCov"> 94924 : if (has_past_inodes) {</span></a>
<a name="943"><span class="lineNum"> 943 </span> : /* if persistent inodes are supported, we are sure that the inode number */</a>
<a name="944"><span class="lineNum"> 944 </span> : /* is now different, because otherwise the file would have been found */</a>
<a name="945"><span class="lineNum"> 945 </span> : /* when searching by inode. */</a>
<a name="946"><span class="lineNum"> 946 </span> : /* if the inode is different, it means a rewritten file with the same path */</a>
<a name="947"><span class="lineNum"> 947 </span> : /* like when restoring a backup that restores also the timestamp */</a>
<a name="948"><span class="lineNum"> 948 </span><span class="lineCov"> 94954 : ++scan-&gt;count_restore;</span></a>
<a name="948"><span class="lineNum"> 948 </span><span class="lineCov"> 94910 : ++scan-&gt;count_restore;</span></a>
<a name="949"><span class="lineNum"> 949 </span> : </a>
<a name="950"><span class="lineNum"> 950 </span><span class="lineCov"> 94954 : log_tag(&quot;scan:restore:%s:%s\n&quot;, disk-&gt;name, esc_tag(sub, esc_buffer));</span></a>
<a name="951"><span class="lineNum"> 951 </span><span class="lineCov"> 94954 : if (is_diff) {</span></a>
<a name="950"><span class="lineNum"> 950 </span><span class="lineCov"> 94910 : log_tag(&quot;scan:restore:%s:%s\n&quot;, disk-&gt;name, esc_tag(sub, esc_buffer));</span></a>
<a name="951"><span class="lineNum"> 951 </span><span class="lineCov"> 94910 : if (is_diff) {</span></a>
<a name="952"><span class="lineNum"> 952 </span><span class="lineNoCov"> 0 : msg_info(&quot;restore %s\n&quot;, fmt_term(disk, sub, esc_buffer));</span></a>
<a name="953"><span class="lineNum"> 953 </span> : }</a>
<a name="954"><span class="lineNum"> 954 </span> : </a>
<a name="955"><span class="lineNum"> 955 </span> : /* remove from the inode set */</a>
<a name="956"><span class="lineNum"> 956 </span><span class="lineCov"> 94954 : tommy_hashdyn_remove_existing(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset);</span></a>
<a name="956"><span class="lineNum"> 956 </span><span class="lineCov"> 94910 : tommy_hashdyn_remove_existing(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset);</span></a>
<a name="957"><span class="lineNum"> 957 </span> : </a>
<a name="958"><span class="lineNum"> 958 </span> : /* save the new inode */</a>
<a name="959"><span class="lineNum"> 959 </span><span class="lineCov"> 94954 : file-&gt;inode = st-&gt;st_ino;</span></a>
<a name="959"><span class="lineNum"> 959 </span><span class="lineCov"> 94910 : file-&gt;inode = st-&gt;st_ino;</span></a>
<a name="960"><span class="lineNum"> 960 </span> : </a>
<a name="961"><span class="lineNum"> 961 </span> : /* reinsert in the inode set */</a>
<a name="962"><span class="lineNum"> 962 </span><span class="lineCov"> 94954 : tommy_hashdyn_insert(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset, file, file_inode_hash(file-&gt;inode));</span></a>
<a name="962"><span class="lineNum"> 962 </span><span class="lineCov"> 94910 : tommy_hashdyn_insert(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset, file, file_inode_hash(file-&gt;inode));</span></a>
<a name="963"><span class="lineNum"> 963 </span> : </a>
<a name="964"><span class="lineNum"> 964 </span> : /* we have to save the new inode */</a>
<a name="965"><span class="lineNum"> 965 </span><span class="lineCov"> 94954 : scan-&gt;need_write = 1;</span></a>
<a name="965"><span class="lineNum"> 965 </span><span class="lineCov"> 94910 : scan-&gt;need_write = 1;</span></a>
<a name="966"><span class="lineNum"> 966 </span> : } else {</a>
<a name="967"><span class="lineNum"> 967 </span> : /* otherwise it's the case of not persistent inode, where doesn't */</a>
<a name="968"><span class="lineNum"> 968 </span> : /* matter if the inode is different or equal, because they have no */</a>
@ -1037,24 +1037,24 @@
<a name="975"><span class="lineNum"> 975 </span> : }</a>
<a name="976"><span class="lineNum"> 976 </span> : </a>
<a name="977"><span class="lineNum"> 977 </span> : /* mark the file as kept */</a>
<a name="978"><span class="lineNum"> 978 </span><span class="lineCov"> 94968 : scan_file_keep(scan, file);</span></a>
<a name="978"><span class="lineNum"> 978 </span><span class="lineCov"> 94924 : scan_file_keep(scan, file);</span></a>
<a name="979"><span class="lineNum"> 979 </span> : </a>
<a name="980"><span class="lineNum"> 980 </span> : /* nothing more to do */</a>
<a name="981"><span class="lineNum"> 981 </span><span class="lineCov"> 94968 : return;</span></a>
<a name="981"><span class="lineNum"> 981 </span><span class="lineCov"> 94924 : return;</span></a>
<a name="982"><span class="lineNum"> 982 </span> : }</a>
<a name="983"><span class="lineNum"> 983 </span> : </a>
<a name="984"><span class="lineNum"> 984 </span> : /* here if the file is changed but with the correct name */</a>
<a name="985"><span class="lineNum"> 985 </span> : </a>
<a name="986"><span class="lineNum"> 986 </span> : /* save the info for later printout */</a>
<a name="987"><span class="lineNum"> 987 </span><span class="lineCov"> 2894 : file_already_present_size = file-&gt;size;</span></a>
<a name="988"><span class="lineNum"> 988 </span><span class="lineCov"> 2894 : file_already_present_mtime_sec = file-&gt;mtime_sec;</span></a>
<a name="989"><span class="lineNum"> 989 </span><span class="lineCov"> 2894 : file_already_present_mtime_nsec = file-&gt;mtime_nsec;</span></a>
<a name="987"><span class="lineNum"> 987 </span><span class="lineCov"> 2881 : file_already_present_size = file-&gt;size;</span></a>
<a name="988"><span class="lineNum"> 988 </span><span class="lineCov"> 2881 : file_already_present_mtime_sec = file-&gt;mtime_sec;</span></a>
<a name="989"><span class="lineNum"> 989 </span><span class="lineCov"> 2881 : file_already_present_mtime_nsec = file-&gt;mtime_nsec;</span></a>
<a name="990"><span class="lineNum"> 990 </span> : </a>
<a name="991"><span class="lineNum"> 991 </span> : /* keep track if the original file was not of zero size */</a>
<a name="992"><span class="lineNum"> 992 </span><span class="lineCov"> 2894 : is_original_file_size_different_than_zero = file-&gt;size != 0;</span></a>
<a name="992"><span class="lineNum"> 992 </span><span class="lineCov"> 2881 : is_original_file_size_different_than_zero = file-&gt;size != 0;</span></a>
<a name="993"><span class="lineNum"> 993 </span> : </a>
<a name="994"><span class="lineNum"> 994 </span> : /* remove it, and continue to insert it again */</a>
<a name="995"><span class="lineNum"> 995 </span><span class="lineCov"> 2894 : scan_file_remove(scan, file);</span></a>
<a name="995"><span class="lineNum"> 995 </span><span class="lineCov"> 2881 : scan_file_remove(scan, file);</span></a>
<a name="996"><span class="lineNum"> 996 </span> : </a>
<a name="997"><span class="lineNum"> 997 </span> : /* and continue to insert it again */</a>
<a name="998"><span class="lineNum"> 998 </span> : } else {</a>
@ -1066,13 +1066,13 @@
<a name="1004"><span class="lineNum"> 1004 </span> : /* refresh the info, to ensure that they are synced, */</a>
<a name="1005"><span class="lineNum"> 1005 </span> : /* note that we refresh only the info of the new or modified files */</a>
<a name="1006"><span class="lineNum"> 1006 </span> : /* because this is slow operation */</a>
<a name="1007"><span class="lineNum"> 1007 </span><span class="lineCov"> 77410 : scan_file_refresh(scan, sub, st, &amp;physical);</span></a>
<a name="1007"><span class="lineNum"> 1007 </span><span class="lineCov"> 77397 : scan_file_refresh(scan, sub, st, &amp;physical);</span></a>
<a name="1008"><span class="lineNum"> 1008 </span> : </a>
<a name="1009"><span class="lineNum"> 1009 </span> : #ifndef _WIN32</a>
<a name="1010"><span class="lineNum"> 1010 </span> : /* do a safety check to ensure that the common ext4 case of zeroing */</a>
<a name="1011"><span class="lineNum"> 1011 </span> : /* the size of a file after a crash doesn't propagate to the backup */</a>
<a name="1012"><span class="lineNum"> 1012 </span> : /* this check is specific for Linux, so we disable it on Windows */</a>
<a name="1013"><span class="lineNum"> 1013 </span><span class="lineCov"> 77410 : if (is_original_file_size_different_than_zero &amp;&amp; st-&gt;st_size == 0) {</span></a>
<a name="1013"><span class="lineNum"> 1013 </span><span class="lineCov"> 77397 : if (is_original_file_size_different_than_zero &amp;&amp; st-&gt;st_size == 0) {</span></a>
<a name="1014"><span class="lineNum"> 1014 </span><span class="lineNoCov"> 0 : if (!state-&gt;opt.force_zero) {</span></a>
<a name="1015"><span class="lineNum"> 1015 </span> : /* LCOV_EXCL_START */</a>
<a name="1016"><span class="lineNum"> 1016 </span> : log_fatal(ESOFT, &quot;The file '%s%s' has unexpected zero size!\n&quot;, disk-&gt;dir, sub);</a>
@ -1091,35 +1091,35 @@
<a name="1029"><span class="lineNum"> 1029 </span> : #endif</a>
<a name="1030"><span class="lineNum"> 1030 </span> : </a>
<a name="1031"><span class="lineNum"> 1031 </span> : /* insert it */</a>
<a name="1032"><span class="lineNum"> 1032 </span><span class="lineCov"> 77410 : file = file_alloc(state-&gt;block_size, sub, st-&gt;st_size, st-&gt;st_mtime, STAT_NSEC(st), st-&gt;st_ino, physical);</span></a>
<a name="1032"><span class="lineNum"> 1032 </span><span class="lineCov"> 77397 : file = file_alloc(state-&gt;block_size, sub, st-&gt;st_size, st-&gt;st_mtime, STAT_NSEC(st), st-&gt;st_ino, physical);</span></a>
<a name="1033"><span class="lineNum"> 1033 </span> : </a>
<a name="1034"><span class="lineNum"> 1034 </span> : /* mark it as present */</a>
<a name="1035"><span class="lineNum"> 1035 </span><span class="lineCov"> 77410 : file_flag_set(file, FILE_IS_PRESENT);</span></a>
<a name="1035"><span class="lineNum"> 1035 </span><span class="lineCov"> 77397 : file_flag_set(file, FILE_IS_PRESENT);</span></a>
<a name="1036"><span class="lineNum"> 1036 </span> : </a>
<a name="1037"><span class="lineNum"> 1037 </span> : /* if copy detection is enabled */</a>
<a name="1038"><span class="lineNum"> 1038 </span> : /* note that the copy detection is tried also for updated files */</a>
<a name="1039"><span class="lineNum"> 1039 </span> : /* this makes sense because it may happen to have two different copies */</a>
<a name="1040"><span class="lineNum"> 1040 </span> : /* of the same file, and we move the right one over the wrong one */</a>
<a name="1041"><span class="lineNum"> 1041 </span> : /* in such case we have a &quot;copy&quot; over an &quot;update&quot; */</a>
<a name="1042"><span class="lineNum"> 1042 </span><span class="lineCov"> 77410 : if (!state-&gt;opt.force_nocopy) {</span></a>
<a name="1043"><span class="lineNum"> 1043 </span><span class="lineCov"> 77410 : tommy_uint32_t hash = file_stamp_hash(file-&gt;size, file-&gt;mtime_sec, file-&gt;mtime_nsec);</span></a>
<a name="1042"><span class="lineNum"> 1042 </span><span class="lineCov"> 77397 : if (!state-&gt;opt.force_nocopy) {</span></a>
<a name="1043"><span class="lineNum"> 1043 </span><span class="lineCov"> 77397 : tommy_uint32_t hash = file_stamp_hash(file-&gt;size, file-&gt;mtime_sec, file-&gt;mtime_nsec);</span></a>
<a name="1044"><span class="lineNum"> 1044 </span> : </a>
<a name="1045"><span class="lineNum"> 1045 </span> : /* search for a file with the same name and stamp in all the disks */</a>
<a name="1046"><span class="lineNum"> 1046 </span><span class="lineCov"> 410916 : for (i = state-&gt;disklist; i != 0; i = i-&gt;next) {</span></a>
<a name="1047"><span class="lineNum"> 1047 </span><span class="lineCov"> 357143 : struct snapraid_disk* other_disk = i-&gt;data;</span></a>
<a name="1046"><span class="lineNum"> 1046 </span><span class="lineCov"> 410826 : for (i = state-&gt;disklist; i != 0; i = i-&gt;next) {</span></a>
<a name="1047"><span class="lineNum"> 1047 </span><span class="lineCov"> 357066 : struct snapraid_disk* other_disk = i-&gt;data;</span></a>
<a name="1048"><span class="lineNum"> 1048 </span> : struct snapraid_file* other_file;</a>
<a name="1049"><span class="lineNum"> 1049 </span> : </a>
<a name="1050"><span class="lineNum"> 1050 </span><span class="lineCov"> 357143 : stamp_lock(other_disk);</span></a>
<a name="1050"><span class="lineNum"> 1050 </span><span class="lineCov"> 357066 : stamp_lock(other_disk);</span></a>
<a name="1051"><span class="lineNum"> 1051 </span> : /* if the nanosecond part of the time stamp is valid, search */</a>
<a name="1052"><span class="lineNum"> 1052 </span> : /* for name and stamp, otherwise for path and stamp */</a>
<a name="1053"><span class="lineNum"> 1053 </span><span class="lineCov"> 357143 : if (file-&gt;mtime_nsec != 0 &amp;&amp; file-&gt;mtime_nsec != STAT_NSEC_INVALID)</span></a>
<a name="1054"><span class="lineNum"> 1054 </span><span class="lineCov"> 357035 : other_file = tommy_hashdyn_search(&amp;other_disk-&gt;stampset, file_namestamp_compare, file, hash);</span></a>
<a name="1053"><span class="lineNum"> 1053 </span><span class="lineCov"> 357066 : if (file-&gt;mtime_nsec != 0 &amp;&amp; file-&gt;mtime_nsec != STAT_NSEC_INVALID)</span></a>
<a name="1054"><span class="lineNum"> 1054 </span><span class="lineCov"> 356958 : other_file = tommy_hashdyn_search(&amp;other_disk-&gt;stampset, file_namestamp_compare, file, hash);</span></a>
<a name="1055"><span class="lineNum"> 1055 </span> : else</a>
<a name="1056"><span class="lineNum"> 1056 </span><span class="lineCov"> 108 : other_file = tommy_hashdyn_search(&amp;other_disk-&gt;stampset, file_pathstamp_compare, file, hash);</span></a>
<a name="1057"><span class="lineNum"> 1057 </span><span class="lineCov"> 357143 : stamp_unlock(other_disk);</span></a>
<a name="1057"><span class="lineNum"> 1057 </span><span class="lineCov"> 357066 : stamp_unlock(other_disk);</span></a>
<a name="1058"><span class="lineNum"> 1058 </span> : </a>
<a name="1059"><span class="lineNum"> 1059 </span> : /* if found, and it's a fully hashed file */</a>
<a name="1060"><span class="lineNum"> 1060 </span><span class="lineCov"> 357143 : if (other_file &amp;&amp; file_is_full_hashed_and_stable(scan-&gt;state, other_disk, other_file)) {</span></a>
<a name="1060"><span class="lineNum"> 1060 </span><span class="lineCov"> 357066 : if (other_file &amp;&amp; file_is_full_hashed_and_stable(scan-&gt;state, other_disk, other_file)) {</span></a>
<a name="1061"><span class="lineNum"> 1061 </span> : /* assume that the file is a copy, and reuse the hash */</a>
<a name="1062"><span class="lineNum"> 1062 </span><span class="lineCov"> 23637 : file_copy(other_file, file);</span></a>
<a name="1063"><span class="lineNum"> 1063 </span> : </a>
@ -1142,16 +1142,16 @@
<a name="1080"><span class="lineNum"> 1080 </span> : </a>
<a name="1081"><span class="lineNum"> 1081 </span> : /* if not yet reported, do it now */</a>
<a name="1082"><span class="lineNum"> 1082 </span> : /* we postpone this to avoid to print two times the copied files */</a>
<a name="1083"><span class="lineNum"> 1083 </span><span class="lineCov"> 77410 : if (!is_file_reported) {</span></a>
<a name="1084"><span class="lineNum"> 1084 </span><span class="lineCov"> 53773 : if (is_file_already_present) {</span></a>
<a name="1085"><span class="lineNum"> 1085 </span><span class="lineCov"> 2894 : ++scan-&gt;count_change;</span></a>
<a name="1083"><span class="lineNum"> 1083 </span><span class="lineCov"> 77397 : if (!is_file_reported) {</span></a>
<a name="1084"><span class="lineNum"> 1084 </span><span class="lineCov"> 53760 : if (is_file_already_present) {</span></a>
<a name="1085"><span class="lineNum"> 1085 </span><span class="lineCov"> 2881 : ++scan-&gt;count_change;</span></a>
<a name="1086"><span class="lineNum"> 1086 </span> : </a>
<a name="1087"><span class="lineNum"> 1087 </span><span class="lineCov"> 2894 : log_tag(&quot;scan:update:%s:%s: %&quot; PRIu64 &quot; %&quot; PRIu64 &quot;.%d -&gt; %&quot; PRIu64 &quot; %&quot; PRIu64 &quot;.%d\n&quot;, disk-&gt;name, esc_tag(sub, esc_buffer),</span></a>
<a name="1087"><span class="lineNum"> 1087 </span><span class="lineCov"> 2881 : log_tag(&quot;scan:update:%s:%s: %&quot; PRIu64 &quot; %&quot; PRIu64 &quot;.%d -&gt; %&quot; PRIu64 &quot; %&quot; PRIu64 &quot;.%d\n&quot;, disk-&gt;name, esc_tag(sub, esc_buffer),</span></a>
<a name="1088"><span class="lineNum"> 1088 </span> : file_already_present_size, file_already_present_mtime_sec, file_already_present_mtime_nsec,</a>
<a name="1089"><span class="lineNum"> 1089 </span> : file-&gt;size, file-&gt;mtime_sec, file-&gt;mtime_nsec</a>
<a name="1090"><span class="lineNum"> 1090 </span> : );</a>
<a name="1091"><span class="lineNum"> 1091 </span> : </a>
<a name="1092"><span class="lineNum"> 1092 </span><span class="lineCov"> 2894 : if (is_diff) {</span></a>
<a name="1092"><span class="lineNum"> 1092 </span><span class="lineCov"> 2881 : if (is_diff) {</span></a>
<a name="1093"><span class="lineNum"> 1093 </span><span class="lineCov"> 118 : msg_info(&quot;update %s\n&quot;, fmt_term(disk, sub, esc_buffer));</span></a>
<a name="1094"><span class="lineNum"> 1094 </span> : }</a>
<a name="1095"><span class="lineNum"> 1095 </span> : } else {</a>
@ -1165,7 +1165,7 @@
<a name="1103"><span class="lineNum"> 1103 </span> : }</a>
<a name="1104"><span class="lineNum"> 1104 </span> : </a>
<a name="1105"><span class="lineNum"> 1105 </span> : /* insert the file in the delayed list */</a>
<a name="1106"><span class="lineNum"> 1106 </span><span class="lineCov"> 77410 : scan_file_insert(scan, file);</span></a>
<a name="1106"><span class="lineNum"> 1106 </span><span class="lineCov"> 77397 : scan_file_insert(scan, file);</span></a>
<a name="1107"><span class="lineNum"> 1107 </span> : }</a>
<a name="1108"><span class="lineNum"> 1108 </span> : </a>
<a name="1109"><span class="lineNum"> 1109 </span> : /**</a>
@ -1754,14 +1754,14 @@
<a name="1692"><span class="lineNum"> 1692 </span> : </a>
<a name="1693"><span class="lineNum"> 1693 </span> : /* check for removed files */</a>
<a name="1694"><span class="lineNum"> 1694 </span><span class="lineCov"> 605 : node = disk-&gt;filelist;</span></a>
<a name="1695"><span class="lineNum"> 1695 </span><span class="lineCov"> 1091277 : while (node) {</span></a>
<a name="1696"><span class="lineNum"> 1696 </span><span class="lineCov"> 1090672 : struct snapraid_file* file = node-&gt;data;</span></a>
<a name="1695"><span class="lineNum"> 1695 </span><span class="lineCov"> 1091290 : while (node) {</span></a>
<a name="1696"><span class="lineNum"> 1696 </span><span class="lineCov"> 1090685 : struct snapraid_file* file = node-&gt;data;</span></a>
<a name="1697"><span class="lineNum"> 1697 </span> : </a>
<a name="1698"><span class="lineNum"> 1698 </span> : /* next node */</a>
<a name="1699"><span class="lineNum"> 1699 </span><span class="lineCov"> 1090672 : node = node-&gt;next;</span></a>
<a name="1699"><span class="lineNum"> 1699 </span><span class="lineCov"> 1090685 : node = node-&gt;next;</span></a>
<a name="1700"><span class="lineNum"> 1700 </span> : </a>
<a name="1701"><span class="lineNum"> 1701 </span> : /* remove if not present */</a>
<a name="1702"><span class="lineNum"> 1702 </span><span class="lineCov"> 1090672 : if (!file_flag_has(file, FILE_IS_PRESENT)) {</span></a>
<a name="1702"><span class="lineNum"> 1702 </span><span class="lineCov"> 1090685 : if (!file_flag_has(file, FILE_IS_PRESENT)) {</span></a>
<a name="1703"><span class="lineNum"> 1703 </span><span class="lineCov"> 29650 : ++scan-&gt;count_remove;</span></a>
<a name="1704"><span class="lineNum"> 1704 </span> : </a>
<a name="1705"><span class="lineNum"> 1705 </span><span class="lineCov"> 29650 : log_tag(&quot;scan:remove:%s:%s\n&quot;, disk-&gt;name, esc_tag(file-&gt;sub, esc_buffer));</span></a>
@ -1833,11 +1833,11 @@
<a name="1771"><span class="lineNum"> 1771 </span><span class="lineCov"> 605 : phy_dup = 0;</span></a>
<a name="1772"><span class="lineNum"> 1772 </span><span class="lineCov"> 605 : phy_last = FILEPHY_UNREAD_OFFSET;</span></a>
<a name="1773"><span class="lineNum"> 1773 </span><span class="lineCov"> 605 : phy_file_last = 0;</span></a>
<a name="1774"><span class="lineNum"> 1774 </span><span class="lineCov"> 100702 : while (node) {</span></a>
<a name="1775"><span class="lineNum"> 1775 </span><span class="lineCov"> 100097 : struct snapraid_file* file = node-&gt;data;</span></a>
<a name="1774"><span class="lineNum"> 1774 </span><span class="lineCov"> 100689 : while (node) {</span></a>
<a name="1775"><span class="lineNum"> 1775 </span><span class="lineCov"> 100084 : struct snapraid_file* file = node-&gt;data;</span></a>
<a name="1776"><span class="lineNum"> 1776 </span> : </a>
<a name="1777"><span class="lineNum"> 1777 </span> : /* if the file is not empty, count duplicate physical offsets */</a>
<a name="1778"><span class="lineNum"> 1778 </span><span class="lineCov"> 100097 : if (state-&gt;opt.force_order == SORT_PHYSICAL &amp;&amp; file-&gt;size != 0) {</span></a>
<a name="1778"><span class="lineNum"> 1778 </span><span class="lineCov"> 100084 : if (state-&gt;opt.force_order == SORT_PHYSICAL &amp;&amp; file-&gt;size != 0) {</span></a>
<a name="1779"><span class="lineNum"> 1779 </span><span class="lineCov"> 11418 : if (phy_file_last != 0 &amp;&amp; file-&gt;physical == phy_last</span></a>
<a name="1780"><span class="lineNum"> 1780 </span> : /* files without offset are expected to have duplicates */</a>
<a name="1781"><span class="lineNum"> 1781 </span><span class="lineNoCov"> 0 : &amp;&amp; phy_last != FILEPHY_WITHOUT_OFFSET</span></a>
@ -1854,10 +1854,10 @@
<a name="1792"><span class="lineNum"> 1792 </span> : }</a>
<a name="1793"><span class="lineNum"> 1793 </span> : </a>
<a name="1794"><span class="lineNum"> 1794 </span> : /* next node */</a>
<a name="1795"><span class="lineNum"> 1795 </span><span class="lineCov"> 100097 : node = node-&gt;next;</span></a>
<a name="1795"><span class="lineNum"> 1795 </span><span class="lineCov"> 100084 : node = node-&gt;next;</span></a>
<a name="1796"><span class="lineNum"> 1796 </span> : </a>
<a name="1797"><span class="lineNum"> 1797 </span> : /* insert in the parity */</a>
<a name="1798"><span class="lineNum"> 1798 </span><span class="lineCov"> 100097 : scan_file_allocate(scan, file);</span></a>
<a name="1798"><span class="lineNum"> 1798 </span><span class="lineCov"> 100084 : scan_file_allocate(scan, file);</span></a>
<a name="1799"><span class="lineNum"> 1799 </span> : }</a>
<a name="1800"><span class="lineNum"> 1800 </span> : </a>
<a name="1801"><span class="lineNum"> 1801 </span> : /* mark the disk without reliable physical offset if it has duplicates */</a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">6</td>
@ -131,12 +131,12 @@
<a name="69"><span class="lineNum"> 69 </span> : </a>
<a name="70"><span class="lineNum"> 70 </span> : /* bad blocks are always scrubbed in all plans */</a>
<a name="71"><span class="lineNum"> 71 </span><span class="lineCov"> 56085 : if (info_get_bad(info))</span></a>
<a name="72"><span class="lineNum"> 72 </span><span class="lineCov"> 1771 : return 1;</span></a>
<a name="72"><span class="lineNum"> 72 </span><span class="lineCov"> 1772 : return 1;</span></a>
<a name="73"><span class="lineNum"> 73 </span> : </a>
<a name="74"><span class="lineNum"> 74 </span><span class="lineCov"> 54314 : switch (plan-&gt;plan) {</span></a>
<a name="75"><span class="lineNum"> 75 </span><span class="lineCov"> 8523 : case SCRUB_FULL :</span></a>
<a name="74"><span class="lineNum"> 74 </span><span class="lineCov"> 54313 : switch (plan-&gt;plan) {</span></a>
<a name="75"><span class="lineNum"> 75 </span><span class="lineCov"> 8522 : case SCRUB_FULL :</span></a>
<a name="76"><span class="lineNum"> 76 </span> : /* in 'full' plan everything is scrubbed */</a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 8523 : return 1;</span></a>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 8522 : return 1;</span></a>
<a name="78"><span class="lineNum"> 78 </span><span class="lineCov"> 9215 : case SCRUB_EVEN :</span></a>
<a name="79"><span class="lineNum"> 79 </span> : /* in 'even' plan, scrub only even blocks */</a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineCov"> 9215 : return i % 2 == 0;</span></a>
@ -206,9 +206,9 @@
<a name="144"><span class="lineNum"> 144 </span> : /* if the file is different than the current one, close it */</a>
<a name="145"><span class="lineNum"> 145 </span><span class="lineCov"> 153017 : if (handle-&gt;file != 0 &amp;&amp; handle-&gt;file != task-&gt;file) {</span></a>
<a name="146"><span class="lineNum"> 146 </span> : /* keep a pointer at the file we are going to close for error reporting */</a>
<a name="147"><span class="lineNum"> 147 </span><span class="lineCov"> 72541 : struct snapraid_file* report = handle-&gt;file;</span></a>
<a name="148"><span class="lineNum"> 148 </span><span class="lineCov"> 72541 : ret = handle_close(handle);</span></a>
<a name="149"><span class="lineNum"> 149 </span><span class="lineCov"> 72541 : if (ret == -1) {</span></a>
<a name="147"><span class="lineNum"> 147 </span><span class="lineCov"> 72572 : struct snapraid_file* report = handle-&gt;file;</span></a>
<a name="148"><span class="lineNum"> 148 </span><span class="lineCov"> 72572 : ret = handle_close(handle);</span></a>
<a name="149"><span class="lineNum"> 149 </span><span class="lineCov"> 72572 : if (ret == -1) {</span></a>
<a name="150"><span class="lineNum"> 150 </span> : /* LCOV_EXCL_START */</a>
<a name="151"><span class="lineNum"> 151 </span> : /* This one is really an unexpected error, because we are only reading */</a>
<a name="152"><span class="lineNum"> 152 </span> : /* and closing a descriptor should never fail */</a>
@ -907,9 +907,9 @@
<a name="845"><span class="lineNum"> 845 </span> : }</a>
<a name="846"><span class="lineNum"> 846 </span> : </a>
<a name="847"><span class="lineNum"> 847 </span><span class="lineCov"> 11 : count = 0;</span></a>
<a name="848"><span class="lineNum"> 848 </span><span class="lineCov"> 29 : for (tommy_node* j = tommy_list_head(&amp;state-&gt;bucketlist); j != 0; j = j-&gt;next) {</span></a>
<a name="849"><span class="lineNum"> 849 </span><span class="lineCov"> 18 : struct snapraid_bucket* bucket = j-&gt;data;</span></a>
<a name="850"><span class="lineNum"> 850 </span><span class="lineCov"> 18 : count += bucket-&gt;count_scrubbed + bucket-&gt;count_justsynced;</span></a>
<a name="848"><span class="lineNum"> 848 </span><span class="lineCov"> 27 : for (tommy_node* j = tommy_list_head(&amp;state-&gt;bucketlist); j != 0; j = j-&gt;next) {</span></a>
<a name="849"><span class="lineNum"> 849 </span><span class="lineCov"> 16 : struct snapraid_bucket* bucket = j-&gt;data;</span></a>
<a name="850"><span class="lineNum"> 850 </span><span class="lineCov"> 16 : count += bucket-&gt;count_scrubbed + bucket-&gt;count_justsynced;</span></a>
<a name="851"><span class="lineNum"> 851 </span> : }</a>
<a name="852"><span class="lineNum"> 852 </span> : </a>
<a name="853"><span class="lineNum"> 853 </span><span class="lineCov"> 11 : if (!count) {</span></a>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">90</td>
<td class="headerCovTableEntry">91</td>
<td class="headerCovTableEntry">99</td>
<td class="headerCovTableEntryHi">90.9 %</td>
<td class="headerCovTableEntryHi">91.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@ -73,19 +73,19 @@
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#56">search_file_compare</a></td>
<td class="coverFnHi">20005</td>
<td class="coverFnHi">20083</td>
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#124">state_search_fetch</a></td>
<td class="coverFnHi">638750</td>
<td class="coverFnHi">639007</td>
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#24">search_file</a></td>
<td class="coverFnHi">1843797</td>
<td class="coverFnHi">1843854</td>
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#40">search_file_free</a></td>
<td class="coverFnHi">1843797</td>
<td class="coverFnHi">1843854</td>
</tr>
</table>
<br>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">90</td>
<td class="headerCovTableEntry">91</td>
<td class="headerCovTableEntry">99</td>
<td class="headerCovTableEntryHi">90.9 %</td>
<td class="headerCovTableEntryHi">91.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@ -65,15 +65,15 @@
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#24">search_file</a></td>
<td class="coverFnHi">1843797</td>
<td class="coverFnHi">1843854</td>
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#56">search_file_compare</a></td>
<td class="coverFnHi">20005</td>
<td class="coverFnHi">20083</td>
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#40">search_file_free</a></td>
<td class="coverFnHi">1843797</td>
<td class="coverFnHi">1843854</td>
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#255">state_search</a></td>
@ -85,7 +85,7 @@
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#124">state_search_fetch</a></td>
<td class="coverFnHi">638750</td>
<td class="coverFnHi">639007</td>
</tr>
</table>
<br>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">90</td>
<td class="headerCovTableEntry">91</td>
<td class="headerCovTableEntry">99</td>
<td class="headerCovTableEntryHi">90.9 %</td>
<td class="headerCovTableEntryHi">91.9 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@ -85,27 +85,27 @@
<a name="23"><span class="lineNum"> 23 </span> : /****************************************************************************/</a>
<a name="24"><span class="lineNum"> 24 </span> : /* search */</a>
<a name="25"><span class="lineNum"> 25 </span> : </a>
<a name="26"><span class="lineNum"> 26 </span><span class="lineCov"> 1843797 : static void search_file(struct snapraid_state* state, const char* path, data_off_t size, int64_t mtime_sec, int mtime_nsec)</span></a>
<a name="26"><span class="lineNum"> 26 </span><span class="lineCov"> 1843854 : static void search_file(struct snapraid_state* state, const char* path, data_off_t size, int64_t mtime_sec, int mtime_nsec)</span></a>
<a name="27"><span class="lineNum"> 27 </span> : {</a>
<a name="28"><span class="lineNum"> 28 </span> : struct snapraid_search_file* file;</a>
<a name="29"><span class="lineNum"> 29 </span> : tommy_uint32_t file_hash;</a>
<a name="30"><span class="lineNum"> 30 </span> : </a>
<a name="31"><span class="lineNum"> 31 </span><span class="lineCov"> 1843797 : file = malloc_nofail(sizeof(struct snapraid_search_file));</span></a>
<a name="32"><span class="lineNum"> 32 </span><span class="lineCov"> 1843797 : file-&gt;path = strdup_nofail(path);</span></a>
<a name="33"><span class="lineNum"> 33 </span><span class="lineCov"> 1843797 : file-&gt;size = size;</span></a>
<a name="34"><span class="lineNum"> 34 </span><span class="lineCov"> 1843797 : file-&gt;mtime_sec = mtime_sec;</span></a>
<a name="35"><span class="lineNum"> 35 </span><span class="lineCov"> 1843797 : file-&gt;mtime_nsec = mtime_nsec;</span></a>
<a name="31"><span class="lineNum"> 31 </span><span class="lineCov"> 1843854 : file = malloc_nofail(sizeof(struct snapraid_search_file));</span></a>
<a name="32"><span class="lineNum"> 32 </span><span class="lineCov"> 1843854 : file-&gt;path = strdup_nofail(path);</span></a>
<a name="33"><span class="lineNum"> 33 </span><span class="lineCov"> 1843854 : file-&gt;size = size;</span></a>
<a name="34"><span class="lineNum"> 34 </span><span class="lineCov"> 1843854 : file-&gt;mtime_sec = mtime_sec;</span></a>
<a name="35"><span class="lineNum"> 35 </span><span class="lineCov"> 1843854 : file-&gt;mtime_nsec = mtime_nsec;</span></a>
<a name="36"><span class="lineNum"> 36 </span> : </a>
<a name="37"><span class="lineNum"> 37 </span><span class="lineCov"> 1843797 : file_hash = file_stamp_hash(file-&gt;size, file-&gt;mtime_sec, file-&gt;mtime_nsec);</span></a>
<a name="37"><span class="lineNum"> 37 </span><span class="lineCov"> 1843854 : file_hash = file_stamp_hash(file-&gt;size, file-&gt;mtime_sec, file-&gt;mtime_nsec);</span></a>
<a name="38"><span class="lineNum"> 38 </span> : </a>
<a name="39"><span class="lineNum"> 39 </span><span class="lineCov"> 1843797 : tommy_hashdyn_insert(&amp;state-&gt;searchset, &amp;file-&gt;node, file, file_hash);</span></a>
<a name="40"><span class="lineNum"> 40 </span><span class="lineCov"> 1843797 : }</span></a>
<a name="39"><span class="lineNum"> 39 </span><span class="lineCov"> 1843854 : tommy_hashdyn_insert(&amp;state-&gt;searchset, &amp;file-&gt;node, file, file_hash);</span></a>
<a name="40"><span class="lineNum"> 40 </span><span class="lineCov"> 1843854 : }</span></a>
<a name="41"><span class="lineNum"> 41 </span> : </a>
<a name="42"><span class="lineNum"> 42 </span><span class="lineCov"> 1843797 : void search_file_free(struct snapraid_search_file* file)</span></a>
<a name="42"><span class="lineNum"> 42 </span><span class="lineCov"> 1843854 : void search_file_free(struct snapraid_search_file* file)</span></a>
<a name="43"><span class="lineNum"> 43 </span> : {</a>
<a name="44"><span class="lineNum"> 44 </span><span class="lineCov"> 1843797 : free(file-&gt;path);</span></a>
<a name="45"><span class="lineNum"> 45 </span><span class="lineCov"> 1843797 : free(file);</span></a>
<a name="46"><span class="lineNum"> 46 </span><span class="lineCov"> 1843797 : }</span></a>
<a name="44"><span class="lineNum"> 44 </span><span class="lineCov"> 1843854 : free(file-&gt;path);</span></a>
<a name="45"><span class="lineNum"> 45 </span><span class="lineCov"> 1843854 : free(file);</span></a>
<a name="46"><span class="lineNum"> 46 </span><span class="lineCov"> 1843854 : }</span></a>
<a name="47"><span class="lineNum"> 47 </span> : </a>
<a name="48"><span class="lineNum"> 48 </span> : struct search_file_compare_arg {</a>
<a name="49"><span class="lineNum"> 49 </span> : const struct snapraid_state* state;</a>
@ -117,29 +117,29 @@
<a name="55"><span class="lineNum"> 55 </span> : int prevhash;</a>
<a name="56"><span class="lineNum"> 56 </span> : };</a>
<a name="57"><span class="lineNum"> 57 </span> : </a>
<a name="58"><span class="lineNum"> 58 </span><span class="lineCov"> 20005 : int search_file_compare(const void* void_arg, const void* void_data)</span></a>
<a name="58"><span class="lineNum"> 58 </span><span class="lineCov"> 20083 : int search_file_compare(const void* void_arg, const void* void_data)</span></a>
<a name="59"><span class="lineNum"> 59 </span> : {</a>
<a name="60"><span class="lineNum"> 60 </span><span class="lineCov"> 20005 : const struct search_file_compare_arg* arg = void_arg;</span></a>
<a name="61"><span class="lineNum"> 61 </span><span class="lineCov"> 20005 : const struct snapraid_search_file* file = void_data;</span></a>
<a name="62"><span class="lineNum"> 62 </span><span class="lineCov"> 20005 : const struct snapraid_state* state = arg-&gt;state;</span></a>
<a name="60"><span class="lineNum"> 60 </span><span class="lineCov"> 20083 : const struct search_file_compare_arg* arg = void_arg;</span></a>
<a name="61"><span class="lineNum"> 61 </span><span class="lineCov"> 20083 : const struct snapraid_search_file* file = void_data;</span></a>
<a name="62"><span class="lineNum"> 62 </span><span class="lineCov"> 20083 : const struct snapraid_state* state = arg-&gt;state;</span></a>
<a name="63"><span class="lineNum"> 63 </span> : unsigned char buffer_hash[HASH_MAX];</a>
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 20005 : const char* path = file-&gt;path;</span></a>
<a name="64"><span class="lineNum"> 64 </span><span class="lineCov"> 20083 : const char* path = file-&gt;path;</span></a>
<a name="65"><span class="lineNum"> 65 </span> : int f;</a>
<a name="66"><span class="lineNum"> 66 </span> : ssize_t ret;</a>
<a name="67"><span class="lineNum"> 67 </span> : </a>
<a name="68"><span class="lineNum"> 68 </span> : /* compare file info */</a>
<a name="69"><span class="lineNum"> 69 </span><span class="lineCov"> 20005 : if (arg-&gt;file-&gt;size != file-&gt;size)</span></a>
<a name="70"><span class="lineNum"> 70 </span><span class="lineNoCov"> 0 : return -1;</span></a>
<a name="69"><span class="lineNum"> 69 </span><span class="lineCov"> 20083 : if (arg-&gt;file-&gt;size != file-&gt;size)</span></a>
<a name="70"><span class="lineNum"> 70 </span><span class="lineCov"> 20 : return -1;</span></a>
<a name="71"><span class="lineNum"> 71 </span> : </a>
<a name="72"><span class="lineNum"> 72 </span><span class="lineCov"> 20005 : if (arg-&gt;file-&gt;mtime_sec != file-&gt;mtime_sec)</span></a>
<a name="72"><span class="lineNum"> 72 </span><span class="lineCov"> 20063 : if (arg-&gt;file-&gt;mtime_sec != file-&gt;mtime_sec)</span></a>
<a name="73"><span class="lineNum"> 73 </span><span class="lineNoCov"> 0 : return -1;</span></a>
<a name="74"><span class="lineNum"> 74 </span> : </a>
<a name="75"><span class="lineNum"> 75 </span><span class="lineCov"> 20005 : if (arg-&gt;file-&gt;mtime_nsec != file-&gt;mtime_nsec)</span></a>
<a name="75"><span class="lineNum"> 75 </span><span class="lineCov"> 20063 : if (arg-&gt;file-&gt;mtime_nsec != file-&gt;mtime_nsec)</span></a>
<a name="76"><span class="lineNum"> 76 </span><span class="lineNoCov"> 0 : return -1;</span></a>
<a name="77"><span class="lineNum"> 77 </span> : </a>
<a name="78"><span class="lineNum"> 78 </span> : /* read the block and compare the hash */</a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 20005 : f = open(path, O_RDONLY | O_BINARY);</span></a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineCov"> 20005 : if (f == -1) {</span></a>
<a name="79"><span class="lineNum"> 79 </span><span class="lineCov"> 20063 : f = open(path, O_RDONLY | O_BINARY);</span></a>
<a name="80"><span class="lineNum"> 80 </span><span class="lineCov"> 20063 : if (f == -1) {</span></a>
<a name="81"><span class="lineNum"> 81 </span> : /* LCOV_EXCL_START */</a>
<a name="82"><span class="lineNum"> 82 </span> : if (errno == ENOENT) {</a>
<a name="83"><span class="lineNum"> 83 </span> : log_fatal(EUSER, &quot;DANGER! file '%s' disappeared.\n&quot;, path);</a>
@ -151,16 +151,16 @@
<a name="89"><span class="lineNum"> 89 </span> : /* LCOV_EXCL_STOP */</a>
<a name="90"><span class="lineNum"> 90 </span> : }</a>
<a name="91"><span class="lineNum"> 91 </span> : </a>
<a name="92"><span class="lineNum"> 92 </span><span class="lineCov"> 20005 : ret = pread(f, arg-&gt;buffer, arg-&gt;read_size, arg-&gt;offset);</span></a>
<a name="93"><span class="lineNum"> 93 </span><span class="lineCov"> 20005 : if (ret &lt; 0 || (unsigned)ret != arg-&gt;read_size) {</span></a>
<a name="92"><span class="lineNum"> 92 </span><span class="lineCov"> 20063 : ret = pread(f, arg-&gt;buffer, arg-&gt;read_size, arg-&gt;offset);</span></a>
<a name="93"><span class="lineNum"> 93 </span><span class="lineCov"> 20063 : if (ret &lt; 0 || (unsigned)ret != arg-&gt;read_size) {</span></a>
<a name="94"><span class="lineNum"> 94 </span> : /* LCOV_EXCL_START */</a>
<a name="95"><span class="lineNum"> 95 </span> : log_fatal(errno, &quot;Error reading file '%s'. %s.\n&quot;, path, strerror(errno));</a>
<a name="96"><span class="lineNum"> 96 </span> : exit(EXIT_FAILURE);</a>
<a name="97"><span class="lineNum"> 97 </span> : /* LCOV_EXCL_STOP */</a>
<a name="98"><span class="lineNum"> 98 </span> : }</a>
<a name="99"><span class="lineNum"> 99 </span> : </a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineCov"> 20005 : ret = close(f);</span></a>
<a name="101"><span class="lineNum"> 101 </span><span class="lineCov"> 20005 : if (ret != 0) {</span></a>
<a name="100"><span class="lineNum"> 100 </span><span class="lineCov"> 20063 : ret = close(f);</span></a>
<a name="101"><span class="lineNum"> 101 </span><span class="lineCov"> 20063 : if (ret != 0) {</span></a>
<a name="102"><span class="lineNum"> 102 </span> : /* LCOV_EXCL_START */</a>
<a name="103"><span class="lineNum"> 103 </span> : log_fatal(errno, &quot;Error closing file '%s'. %s.\n&quot;, path, strerror(errno));</a>
<a name="104"><span class="lineNum"> 104 </span> : exit(EXIT_FAILURE);</a>
@ -168,14 +168,14 @@
<a name="106"><span class="lineNum"> 106 </span> : }</a>
<a name="107"><span class="lineNum"> 107 </span> : </a>
<a name="108"><span class="lineNum"> 108 </span> : /* compute the hash */</a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 20005 : if (arg-&gt;prevhash)</span></a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 20063 : if (arg-&gt;prevhash)</span></a>
<a name="110"><span class="lineNum"> 110 </span><span class="lineNoCov"> 0 : memhash(state-&gt;prevhash, state-&gt;prevhashseed, buffer_hash, arg-&gt;buffer, arg-&gt;read_size);</span></a>
<a name="111"><span class="lineNum"> 111 </span> : else</a>
<a name="112"><span class="lineNum"> 112 </span><span class="lineCov"> 20005 : memhash(state-&gt;hash, state-&gt;hashseed, buffer_hash, arg-&gt;buffer, arg-&gt;read_size);</span></a>
<a name="112"><span class="lineNum"> 112 </span><span class="lineCov"> 20063 : memhash(state-&gt;hash, state-&gt;hashseed, buffer_hash, arg-&gt;buffer, arg-&gt;read_size);</span></a>
<a name="113"><span class="lineNum"> 113 </span> : </a>
<a name="114"><span class="lineNum"> 114 </span> : /* check if the hash is matching */</a>
<a name="115"><span class="lineNum"> 115 </span><span class="lineCov"> 20005 : if (memcmp(buffer_hash, arg-&gt;block-&gt;hash, BLOCK_HASH_SIZE) != 0)</span></a>
<a name="116"><span class="lineNum"> 116 </span><span class="lineCov"> 2095 : return -1;</span></a>
<a name="115"><span class="lineNum"> 115 </span><span class="lineCov"> 20063 : if (memcmp(buffer_hash, arg-&gt;block-&gt;hash, BLOCK_HASH_SIZE) != 0)</span></a>
<a name="116"><span class="lineNum"> 116 </span><span class="lineCov"> 2153 : return -1;</span></a>
<a name="117"><span class="lineNum"> 117 </span> : </a>
<a name="118"><span class="lineNum"> 118 </span><span class="lineCov"> 17910 : if (arg-&gt;read_size != state-&gt;block_size) {</span></a>
<a name="119"><span class="lineNum"> 119 </span> : /* fill the remaining with 0 */</a>
@ -185,26 +185,26 @@
<a name="123"><span class="lineNum"> 123 </span><span class="lineCov"> 17910 : return 0;</span></a>
<a name="124"><span class="lineNum"> 124 </span> : }</a>
<a name="125"><span class="lineNum"> 125 </span> : </a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineCov"> 638750 : int state_search_fetch(struct snapraid_state* state, int prevhash, struct snapraid_file* missing_file, block_off_t missing_file_pos, struct snapraid_block* missing_block, unsigned char* buffer)</span></a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineCov"> 639007 : int state_search_fetch(struct snapraid_state* state, int prevhash, struct snapraid_file* missing_file, block_off_t missing_file_pos, struct snapraid_block* missing_block, unsigned char* buffer)</span></a>
<a name="127"><span class="lineNum"> 127 </span> : {</a>
<a name="128"><span class="lineNum"> 128 </span> : struct snapraid_search_file* file;</a>
<a name="129"><span class="lineNum"> 129 </span> : tommy_uint32_t file_hash;</a>
<a name="130"><span class="lineNum"> 130 </span> : struct search_file_compare_arg arg;</a>
<a name="131"><span class="lineNum"> 131 </span> : </a>
<a name="132"><span class="lineNum"> 132 </span><span class="lineCov"> 638750 : arg.state = state;</span></a>
<a name="133"><span class="lineNum"> 133 </span><span class="lineCov"> 638750 : arg.block = missing_block;</span></a>
<a name="134"><span class="lineNum"> 134 </span><span class="lineCov"> 638750 : arg.file = missing_file;</span></a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 638750 : arg.buffer = buffer;</span></a>
<a name="136"><span class="lineNum"> 136 </span><span class="lineCov"> 638750 : arg.offset = state-&gt;block_size * (data_off_t)missing_file_pos;</span></a>
<a name="137"><span class="lineNum"> 137 </span><span class="lineCov"> 638750 : arg.read_size = file_block_size(missing_file, missing_file_pos, state-&gt;block_size);</span></a>
<a name="138"><span class="lineNum"> 138 </span><span class="lineCov"> 638750 : arg.prevhash = prevhash;</span></a>
<a name="132"><span class="lineNum"> 132 </span><span class="lineCov"> 639007 : arg.state = state;</span></a>
<a name="133"><span class="lineNum"> 133 </span><span class="lineCov"> 639007 : arg.block = missing_block;</span></a>
<a name="134"><span class="lineNum"> 134 </span><span class="lineCov"> 639007 : arg.file = missing_file;</span></a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 639007 : arg.buffer = buffer;</span></a>
<a name="136"><span class="lineNum"> 136 </span><span class="lineCov"> 639007 : arg.offset = state-&gt;block_size * (data_off_t)missing_file_pos;</span></a>
<a name="137"><span class="lineNum"> 137 </span><span class="lineCov"> 639007 : arg.read_size = file_block_size(missing_file, missing_file_pos, state-&gt;block_size);</span></a>
<a name="138"><span class="lineNum"> 138 </span><span class="lineCov"> 639007 : arg.prevhash = prevhash;</span></a>
<a name="139"><span class="lineNum"> 139 </span> : </a>
<a name="140"><span class="lineNum"> 140 </span><span class="lineCov"> 638750 : file_hash = file_stamp_hash(arg.file-&gt;size, arg.file-&gt;mtime_sec, arg.file-&gt;mtime_nsec);</span></a>
<a name="140"><span class="lineNum"> 140 </span><span class="lineCov"> 639007 : file_hash = file_stamp_hash(arg.file-&gt;size, arg.file-&gt;mtime_sec, arg.file-&gt;mtime_nsec);</span></a>
<a name="141"><span class="lineNum"> 141 </span> : </a>
<a name="142"><span class="lineNum"> 142 </span> : /* search in the hashtable, and also check if the data matches the hash */</a>
<a name="143"><span class="lineNum"> 143 </span><span class="lineCov"> 638750 : file = tommy_hashdyn_search(&amp;state-&gt;searchset, search_file_compare, &amp;arg, file_hash);</span></a>
<a name="144"><span class="lineNum"> 144 </span><span class="lineCov"> 638750 : if (!file)</span></a>
<a name="145"><span class="lineNum"> 145 </span><span class="lineCov"> 620840 : return -1;</span></a>
<a name="143"><span class="lineNum"> 143 </span><span class="lineCov"> 639007 : file = tommy_hashdyn_search(&amp;state-&gt;searchset, search_file_compare, &amp;arg, file_hash);</span></a>
<a name="144"><span class="lineNum"> 144 </span><span class="lineCov"> 639007 : if (!file)</span></a>
<a name="145"><span class="lineNum"> 145 </span><span class="lineCov"> 621097 : return -1;</span></a>
<a name="146"><span class="lineNum"> 146 </span> : </a>
<a name="147"><span class="lineNum"> 147 </span> : /* if found, buffer is already set with data */</a>
<a name="148"><span class="lineNum"> 148 </span><span class="lineCov"> 17910 : return 0;</span></a>
@ -222,44 +222,44 @@
<a name="160"><span class="lineNum"> 160 </span> : /* LCOV_EXCL_STOP */</a>
<a name="161"><span class="lineNum"> 161 </span> : }</a>
<a name="162"><span class="lineNum"> 162 </span> : </a>
<a name="163"><span class="lineNum"> 163 </span><span class="lineCov"> 2037708 : while (1) {</span></a>
<a name="163"><span class="lineNum"> 163 </span><span class="lineCov"> 2037834 : while (1) {</span></a>
<a name="164"><span class="lineNum"> 164 </span> : char path_next[PATH_MAX];</a>
<a name="165"><span class="lineNum"> 165 </span> : char sub_next[PATH_MAX];</a>
<a name="166"><span class="lineNum"> 166 </span> : char out[PATH_MAX];</a>
<a name="167"><span class="lineNum"> 167 </span><span class="lineCov"> 2040170 : struct snapraid_filter* reason = 0;</span></a>
<a name="167"><span class="lineNum"> 167 </span><span class="lineCov"> 2040296 : struct snapraid_filter* reason = 0;</span></a>
<a name="168"><span class="lineNum"> 168 </span> : struct stat st;</a>
<a name="169"><span class="lineNum"> 169 </span> : const char* name;</a>
<a name="170"><span class="lineNum"> 170 </span> : struct dirent* dd;</a>
<a name="171"><span class="lineNum"> 171 </span> : </a>
<a name="172"><span class="lineNum"> 172 </span> : /* clear errno to detect erroneous conditions */</a>
<a name="173"><span class="lineNum"> 173 </span><span class="lineCov"> 2040170 : errno = 0;</span></a>
<a name="174"><span class="lineNum"> 174 </span><span class="lineCov"> 2040170 : dd = readdir(d);</span></a>
<a name="175"><span class="lineNum"> 175 </span><span class="lineCov"> 2040170 : if (dd == 0 &amp;&amp; errno != 0) {</span></a>
<a name="173"><span class="lineNum"> 173 </span><span class="lineCov"> 2040296 : errno = 0;</span></a>
<a name="174"><span class="lineNum"> 174 </span><span class="lineCov"> 2040296 : dd = readdir(d);</span></a>
<a name="175"><span class="lineNum"> 175 </span><span class="lineCov"> 2040296 : if (dd == 0 &amp;&amp; errno != 0) {</span></a>
<a name="176"><span class="lineNum"> 176 </span> : /* LCOV_EXCL_START */</a>
<a name="177"><span class="lineNum"> 177 </span> : log_fatal(errno, &quot;Error reading directory '%s'. %s.\n&quot;, dir, strerror(errno));</a>
<a name="178"><span class="lineNum"> 178 </span> : exit(EXIT_FAILURE);</a>
<a name="179"><span class="lineNum"> 179 </span> : /* LCOV_EXCL_STOP */</a>
<a name="180"><span class="lineNum"> 180 </span> : }</a>
<a name="181"><span class="lineNum"> 181 </span><span class="lineCov"> 2040170 : if (dd == 0) {</span></a>
<a name="181"><span class="lineNum"> 181 </span><span class="lineCov"> 2040296 : if (dd == 0) {</span></a>
<a name="182"><span class="lineNum"> 182 </span><span class="lineCov"> 2462 : break; /* finished */</span></a>
<a name="183"><span class="lineNum"> 183 </span> : }</a>
<a name="184"><span class="lineNum"> 184 </span> : </a>
<a name="185"><span class="lineNum"> 185 </span> : /* skip &quot;.&quot; and &quot;..&quot; files */</a>
<a name="186"><span class="lineNum"> 186 </span><span class="lineCov"> 2037708 : name = dd-&gt;d_name;</span></a>
<a name="187"><span class="lineNum"> 187 </span><span class="lineCov"> 2037708 : if (name[0] == '.' &amp;&amp; (name[1] == 0 || (name[1] == '.' &amp;&amp; name[2] == 0)))</span></a>
<a name="186"><span class="lineNum"> 186 </span><span class="lineCov"> 2037834 : name = dd-&gt;d_name;</span></a>
<a name="187"><span class="lineNum"> 187 </span><span class="lineCov"> 2037834 : if (name[0] == '.' &amp;&amp; (name[1] == 0 || (name[1] == '.' &amp;&amp; name[2] == 0)))</span></a>
<a name="188"><span class="lineNum"> 188 </span><span class="lineCov"> 4924 : continue;</span></a>
<a name="189"><span class="lineNum"> 189 </span> : </a>
<a name="190"><span class="lineNum"> 190 </span><span class="lineCov"> 2032784 : pathprint(path_next, sizeof(path_next), &quot;%s%s&quot;, dir, name);</span></a>
<a name="191"><span class="lineNum"> 191 </span><span class="lineCov"> 2032784 : pathprint(sub_next, sizeof(sub_next), &quot;%s%s&quot;, sub, name);</span></a>
<a name="190"><span class="lineNum"> 190 </span><span class="lineCov"> 2032910 : pathprint(path_next, sizeof(path_next), &quot;%s%s&quot;, dir, name);</span></a>
<a name="191"><span class="lineNum"> 191 </span><span class="lineCov"> 2032910 : pathprint(sub_next, sizeof(sub_next), &quot;%s%s&quot;, sub, name);</span></a>
<a name="192"><span class="lineNum"> 192 </span> : </a>
<a name="193"><span class="lineNum"> 193 </span> : /* exclude hidden files even before calling lstat() */</a>
<a name="194"><span class="lineNum"> 194 </span><span class="lineCov"> 2032784 : if (disk != 0 &amp;&amp; filter_hidden(state-&gt;filter_hidden, dd) != 0) {</span></a>
<a name="194"><span class="lineNum"> 194 </span><span class="lineCov"> 2032910 : if (disk != 0 &amp;&amp; filter_hidden(state-&gt;filter_hidden, dd) != 0) {</span></a>
<a name="195"><span class="lineNum"> 195 </span><span class="lineNoCov"> 0 : msg_verbose(&quot;Excluding hidden '%s'\n&quot;, path_next);</span></a>
<a name="196"><span class="lineNum"> 196 </span><span class="lineNoCov"> 0 : continue;</span></a>
<a name="197"><span class="lineNum"> 197 </span> : }</a>
<a name="198"><span class="lineNum"> 198 </span> : </a>
<a name="199"><span class="lineNum"> 199 </span> : /* exclude content files even before calling lstat() */</a>
<a name="200"><span class="lineNum"> 200 </span><span class="lineCov"> 2032784 : if (disk != 0 &amp;&amp; filter_content(&amp;state-&gt;contentlist, path_next) != 0) {</span></a>
<a name="200"><span class="lineNum"> 200 </span><span class="lineCov"> 2032910 : if (disk != 0 &amp;&amp; filter_content(&amp;state-&gt;contentlist, path_next) != 0) {</span></a>
<a name="201"><span class="lineNum"> 201 </span><span class="lineNoCov"> 0 : msg_verbose(&quot;Excluding content '%s'\n&quot;, path_next);</span></a>
<a name="202"><span class="lineNum"> 202 </span><span class="lineNoCov"> 0 : continue;</span></a>
<a name="203"><span class="lineNum"> 203 </span> : }</a>
@ -283,7 +283,7 @@
<a name="221"><span class="lineNum"> 221 </span> : }</a>
<a name="222"><span class="lineNum"> 222 </span> : #else</a>
<a name="223"><span class="lineNum"> 223 </span> : /* get lstat info about the file */</a>
<a name="224"><span class="lineNum"> 224 </span><span class="lineCov"> 2032784 : if (lstat(path_next, &amp;st) != 0) {</span></a>
<a name="224"><span class="lineNum"> 224 </span><span class="lineCov"> 2032910 : if (lstat(path_next, &amp;st) != 0) {</span></a>
<a name="225"><span class="lineNum"> 225 </span> : /* LCOV_EXCL_START */</a>
<a name="226"><span class="lineNum"> 226 </span> : log_fatal(errno, &quot;Error in stat file/directory '%s'. %s.\n&quot;, path_next, strerror(errno));</a>
<a name="227"><span class="lineNum"> 227 </span> : exit(EXIT_FAILURE);</a>
@ -291,13 +291,13 @@
<a name="229"><span class="lineNum"> 229 </span> : }</a>
<a name="230"><span class="lineNum"> 230 </span> : #endif</a>
<a name="231"><span class="lineNum"> 231 </span> : </a>
<a name="232"><span class="lineNum"> 232 </span><span class="lineCov"> 2032784 : if (S_ISREG(st.st_mode)) {</span></a>
<a name="233"><span class="lineNum"> 233 </span><span class="lineCov"> 1968474 : if (disk == 0 || filter_path(&amp;state-&gt;filterlist, &amp;reason, disk-&gt;name, sub_next) == 0) {</span></a>
<a name="234"><span class="lineNum"> 234 </span><span class="lineCov"> 1843797 : search_file(state, path_next, st.st_size, st.st_mtime, STAT_NSEC(&amp;st));</span></a>
<a name="232"><span class="lineNum"> 232 </span><span class="lineCov"> 2032910 : if (S_ISREG(st.st_mode)) {</span></a>
<a name="233"><span class="lineNum"> 233 </span><span class="lineCov"> 1968609 : if (disk == 0 || filter_path(&amp;state-&gt;filterlist, &amp;reason, disk-&gt;name, sub_next) == 0) {</span></a>
<a name="234"><span class="lineNum"> 234 </span><span class="lineCov"> 1843854 : search_file(state, path_next, st.st_size, st.st_mtime, STAT_NSEC(&amp;st));</span></a>
<a name="235"><span class="lineNum"> 235 </span> : } else {</a>
<a name="236"><span class="lineNum"> 236 </span><span class="lineCov"> 124677 : msg_verbose(&quot;Excluding link '%s' for rule '%s'\n&quot;, path_next, filter_type(reason, out, sizeof(out)));</span></a>
<a name="236"><span class="lineNum"> 236 </span><span class="lineCov"> 124755 : msg_verbose(&quot;Excluding link '%s' for rule '%s'\n&quot;, path_next, filter_type(reason, out, sizeof(out)));</span></a>
<a name="237"><span class="lineNum"> 237 </span> : }</a>
<a name="238"><span class="lineNum"> 238 </span><span class="lineCov"> 64310 : } else if (S_ISDIR(st.st_mode)) {</span></a>
<a name="238"><span class="lineNum"> 238 </span><span class="lineCov"> 64301 : } else if (S_ISDIR(st.st_mode)) {</span></a>
<a name="239"><span class="lineNum"> 239 </span><span class="lineCov"> 1781 : if (disk == 0 || filter_subdir(&amp;state-&gt;filterlist, &amp;reason, disk-&gt;name, sub_next) == 0) {</span></a>
<a name="240"><span class="lineNum"> 240 </span><span class="lineCov"> 1781 : pathslash(path_next, sizeof(path_next));</span></a>
<a name="241"><span class="lineNum"> 241 </span><span class="lineCov"> 1781 : pathslash(sub_next, sizeof(sub_next));</span></a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -81,23 +81,23 @@
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#586">log_close</a></td>
<td class="coverFnHi">267</td>
<td class="coverFnHi">268</td>
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#495">log_open</a></td>
<td class="coverFnHi">278</td>
<td class="coverFnHi">279</td>
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#603">config</a></td>
<td class="coverFnHi">287</td>
<td class="coverFnHi">288</td>
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#968">snapraid_main</a></td>
<td class="coverFnHi">288</td>
<td class="coverFnHi">289</td>
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#97">test</a></td>
<td class="coverFnHi">288</td>
<td class="coverFnHi">289</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -61,15 +61,15 @@
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#603">config</a></td>
<td class="coverFnHi">287</td>
<td class="coverFnHi">288</td>
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#586">log_close</a></td>
<td class="coverFnHi">267</td>
<td class="coverFnHi">268</td>
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#495">log_open</a></td>
<td class="coverFnHi">278</td>
<td class="coverFnHi">279</td>
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#83">memory</a></td>
@ -85,11 +85,11 @@
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#968">snapraid_main</a></td>
<td class="coverFnHi">288</td>
<td class="coverFnHi">289</td>
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#97">test</a></td>
<td class="coverFnHi">288</td>
<td class="coverFnHi">289</td>
</tr>
<tr>
<td class="coverFn"><a href="snapraid.c.gcov.html#36">usage</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -158,14 +158,14 @@
<a name="96"><span class="lineNum"> 96 </span><span class="lineCov"> 244 : msg_progress(&quot;Using %u MiB of memory for the file-system.\n&quot;, (unsigned)(malloc_counter_get() / MEBI));</span></a>
<a name="97"><span class="lineNum"> 97 </span><span class="lineCov"> 244 : }</span></a>
<a name="98"><span class="lineNum"> 98 </span> : </a>
<a name="99"><span class="lineNum"> 99 </span><span class="lineCov"> 288 : void test(int argc, char* argv[])</span></a>
<a name="99"><span class="lineNum"> 99 </span><span class="lineCov"> 289 : void test(int argc, char* argv[])</span></a>
<a name="100"><span class="lineNum"> 100 </span> : {</a>
<a name="101"><span class="lineNum"> 101 </span> : int i;</a>
<a name="102"><span class="lineNum"> 102 </span> : char buffer[ESC_MAX];</a>
<a name="103"><span class="lineNum"> 103 </span> : </a>
<a name="104"><span class="lineNum"> 104 </span> : /* special testing code for quoting */</a>
<a name="105"><span class="lineNum"> 105 </span><span class="lineCov"> 288 : if (argc &lt; 2 || strcmp(argv[1], &quot;test&quot;) != 0)</span></a>
<a name="106"><span class="lineNum"> 106 </span><span class="lineCov"> 287 : return;</span></a>
<a name="105"><span class="lineNum"> 105 </span><span class="lineCov"> 289 : if (argc &lt; 2 || strcmp(argv[1], &quot;test&quot;) != 0)</span></a>
<a name="106"><span class="lineNum"> 106 </span><span class="lineCov"> 288 : return;</span></a>
<a name="107"><span class="lineNum"> 107 </span> : </a>
<a name="108"><span class="lineNum"> 108 </span><span class="lineCov"> 1 : assert(strcmp(strpolish(strcpy(buffer, &quot;\r \n\xFF&quot;)), &quot; &quot;) == 0);</span></a>
<a name="109"><span class="lineNum"> 109 </span><span class="lineCov"> 1 : assert(strcmp(strtrim(strcpy(buffer, &quot; trim trim \n\r&quot;)), &quot;trim trim&quot;) == 0);</span></a>
@ -556,7 +556,7 @@
<a name="494"><span class="lineNum"> 494 </span> : /****************************************************************************/</a>
<a name="495"><span class="lineNum"> 495 </span> : /* log */</a>
<a name="496"><span class="lineNum"> 496 </span> : </a>
<a name="497"><span class="lineNum"> 497 </span><span class="lineCov"> 278 : void log_open(const char* file)</span></a>
<a name="497"><span class="lineNum"> 497 </span><span class="lineCov"> 279 : void log_open(const char* file)</span></a>
<a name="498"><span class="lineNum"> 498 </span> : {</a>
<a name="499"><span class="lineNum"> 499 </span> : char path[PATH_MAX];</a>
<a name="500"><span class="lineNum"> 500 </span> : const char* mode;</a>
@ -569,8 +569,8 @@
<a name="507"><span class="lineNum"> 507 </span> : #endif</a>
<a name="508"><span class="lineNum"> 508 </span> : </a>
<a name="509"><span class="lineNum"> 509 </span> : /* leave stdlog at 0 if not specified */</a>
<a name="510"><span class="lineNum"> 510 </span><span class="lineCov"> 278 : if (file == 0)</span></a>
<a name="511"><span class="lineNum"> 511 </span><span class="lineCov"> 204 : return;</span></a>
<a name="510"><span class="lineNum"> 510 </span><span class="lineCov"> 279 : if (file == 0)</span></a>
<a name="511"><span class="lineNum"> 511 </span><span class="lineCov"> 205 : return;</span></a>
<a name="512"><span class="lineNum"> 512 </span> : </a>
<a name="513"><span class="lineNum"> 513 </span><span class="lineCov"> 80 : t = time(0);</span></a>
<a name="514"><span class="lineNum"> 514 </span> : #if HAVE_LOCALTIME_R</a>
@ -647,9 +647,9 @@
<a name="585"><span class="lineNum"> 585 </span> : }</a>
<a name="586"><span class="lineNum"> 586 </span> : }</a>
<a name="587"><span class="lineNum"> 587 </span> : </a>
<a name="588"><span class="lineNum"> 588 </span><span class="lineCov"> 267 : void log_close(const char* file)</span></a>
<a name="588"><span class="lineNum"> 588 </span><span class="lineCov"> 268 : void log_close(const char* file)</span></a>
<a name="589"><span class="lineNum"> 589 </span> : {</a>
<a name="590"><span class="lineNum"> 590 </span><span class="lineCov"> 267 : if (stdlog != stdout &amp;&amp; stdlog != stderr &amp;&amp; stdlog != 0) {</span></a>
<a name="590"><span class="lineNum"> 590 </span><span class="lineCov"> 268 : if (stdlog != stdout &amp;&amp; stdlog != stderr &amp;&amp; stdlog != 0) {</span></a>
<a name="591"><span class="lineNum"> 591 </span><span class="lineCov"> 74 : if (fclose(stdlog) != 0) {</span></a>
<a name="592"><span class="lineNum"> 592 </span> : /* LCOV_EXCL_START */</a>
<a name="593"><span class="lineNum"> 593 </span> : log_fatal(errno, &quot;Error closing the log file '%s'. %s.\n&quot;, file, strerror(errno));</a>
@ -658,13 +658,13 @@
<a name="596"><span class="lineNum"> 596 </span> : }</a>
<a name="597"><span class="lineNum"> 597 </span> : }</a>
<a name="598"><span class="lineNum"> 598 </span> : </a>
<a name="599"><span class="lineNum"> 599 </span><span class="lineCov"> 267 : stdlog = 0;</span></a>
<a name="600"><span class="lineNum"> 600 </span><span class="lineCov"> 267 : }</span></a>
<a name="599"><span class="lineNum"> 599 </span><span class="lineCov"> 268 : stdlog = 0;</span></a>
<a name="600"><span class="lineNum"> 600 </span><span class="lineCov"> 268 : }</span></a>
<a name="601"><span class="lineNum"> 601 </span> : </a>
<a name="602"><span class="lineNum"> 602 </span> : /****************************************************************************/</a>
<a name="603"><span class="lineNum"> 603 </span> : /* config */</a>
<a name="604"><span class="lineNum"> 604 </span> : </a>
<a name="605"><span class="lineNum"> 605 </span><span class="lineCov"> 287 : void config(char* conf, size_t conf_size, const char* argv0)</span></a>
<a name="605"><span class="lineNum"> 605 </span><span class="lineCov"> 288 : void config(char* conf, size_t conf_size, const char* argv0)</span></a>
<a name="606"><span class="lineNum"> 606 </span> : {</a>
<a name="607"><span class="lineNum"> 607 </span> : #ifdef _WIN32</a>
<a name="608"><span class="lineNum"> 608 </span> : char* slash;</a>
@ -683,15 +683,15 @@
<a name="621"><span class="lineNum"> 621 </span> : </a>
<a name="622"><span class="lineNum"> 622 </span> : #ifdef SYSCONFDIR</a>
<a name="623"><span class="lineNum"> 623 </span> : /* if it exists, give precedence at sysconfdir, usually /usr/local/etc */</a>
<a name="624"><span class="lineNum"> 624 </span><span class="lineCov"> 287 : if (access(SYSCONFDIR &quot;/&quot; PACKAGE &quot;.conf&quot;, F_OK) == 0) {</span></a>
<a name="624"><span class="lineNum"> 624 </span><span class="lineCov"> 288 : if (access(SYSCONFDIR &quot;/&quot; PACKAGE &quot;.conf&quot;, F_OK) == 0) {</span></a>
<a name="625"><span class="lineNum"> 625 </span><span class="lineNoCov"> 0 : pathcpy(conf, conf_size, SYSCONFDIR &quot;/&quot; PACKAGE &quot;.conf&quot;);</span></a>
<a name="626"><span class="lineNum"> 626 </span> : } else /* otherwise fallback to plain /etc */</a>
<a name="627"><span class="lineNum"> 627 </span> : #endif</a>
<a name="628"><span class="lineNum"> 628 </span> : {</a>
<a name="629"><span class="lineNum"> 629 </span><span class="lineCov"> 287 : pathcpy(conf, conf_size, &quot;/etc/&quot; PACKAGE &quot;.conf&quot;);</span></a>
<a name="629"><span class="lineNum"> 629 </span><span class="lineCov"> 288 : pathcpy(conf, conf_size, &quot;/etc/&quot; PACKAGE &quot;.conf&quot;);</span></a>
<a name="630"><span class="lineNum"> 630 </span> : }</a>
<a name="631"><span class="lineNum"> 631 </span> : #endif</a>
<a name="632"><span class="lineNum"> 632 </span><span class="lineCov"> 287 : }</span></a>
<a name="632"><span class="lineNum"> 632 </span><span class="lineCov"> 288 : }</span></a>
<a name="633"><span class="lineNum"> 633 </span> : </a>
<a name="634"><span class="lineNum"> 634 </span> : /****************************************************************************/</a>
<a name="635"><span class="lineNum"> 635 </span> : /* main */</a>
@ -1029,7 +1029,7 @@
<a name="967"><span class="lineNum"> 967 </span> : #define OPERATION_PROBE 18</a>
<a name="968"><span class="lineNum"> 968 </span> : #define OPERATION_LOCATE 19</a>
<a name="969"><span class="lineNum"> 969 </span> : </a>
<a name="970"><span class="lineNum"> 970 </span><span class="lineCov"> 288 : int snapraid_main(int argc, char* argv[])</span></a>
<a name="970"><span class="lineNum"> 970 </span><span class="lineCov"> 289 : int snapraid_main(int argc, char* argv[])</span></a>
<a name="971"><span class="lineNum"> 971 </span> : {</a>
<a name="972"><span class="lineNum"> 972 </span> : int c;</a>
<a name="973"><span class="lineNum"> 973 </span> : struct snapraid_option opt;</a>
@ -1064,41 +1064,41 @@
<a name="1002"><span class="lineNum"> 1002 </span> : #endif</a>
<a name="1003"><span class="lineNum"> 1003 </span> : int i;</a>
<a name="1004"><span class="lineNum"> 1004 </span> : </a>
<a name="1005"><span class="lineNum"> 1005 </span><span class="lineCov"> 288 : test(argc, argv);</span></a>
<a name="1005"><span class="lineNum"> 1005 </span><span class="lineCov"> 289 : test(argc, argv);</span></a>
<a name="1006"><span class="lineNum"> 1006 </span> : </a>
<a name="1007"><span class="lineNum"> 1007 </span><span class="lineCov"> 287 : lock_init();</span></a>
<a name="1007"><span class="lineNum"> 1007 </span><span class="lineCov"> 288 : lock_init();</span></a>
<a name="1008"><span class="lineNum"> 1008 </span> : </a>
<a name="1009"><span class="lineNum"> 1009 </span> : /* defaults */</a>
<a name="1010"><span class="lineNum"> 1010 </span><span class="lineCov"> 287 : config(conf, sizeof(conf), argv[0]);</span></a>
<a name="1011"><span class="lineNum"> 1011 </span><span class="lineCov"> 287 : memset(&amp;opt, 0, sizeof(opt));</span></a>
<a name="1012"><span class="lineNum"> 1012 </span><span class="lineCov"> 287 : opt.io_error_limit = 100;</span></a>
<a name="1013"><span class="lineNum"> 1013 </span><span class="lineCov"> 287 : blockstart = 0;</span></a>
<a name="1014"><span class="lineNum"> 1014 </span><span class="lineCov"> 287 : blockcount = 0;</span></a>
<a name="1015"><span class="lineNum"> 1015 </span><span class="lineCov"> 287 : tommy_list_init(&amp;filterlist_file);</span></a>
<a name="1016"><span class="lineNum"> 1016 </span><span class="lineCov"> 287 : tommy_list_init(&amp;filterlist_disk);</span></a>
<a name="1017"><span class="lineNum"> 1017 </span><span class="lineCov"> 287 : speed_test_period = -1;</span></a>
<a name="1018"><span class="lineNum"> 1018 </span><span class="lineCov"> 287 : speed_test_blocks_size = -1;</span></a>
<a name="1019"><span class="lineNum"> 1019 </span><span class="lineCov"> 287 : speed_test_disks_number = -1;</span></a>
<a name="1020"><span class="lineNum"> 1020 </span><span class="lineCov"> 287 : filter_missing = 0;</span></a>
<a name="1021"><span class="lineNum"> 1021 </span><span class="lineCov"> 287 : filter_error = 0;</span></a>
<a name="1022"><span class="lineNum"> 1022 </span><span class="lineCov"> 287 : plan100 = SCRUB_AUTO;</span></a>
<a name="1023"><span class="lineNum"> 1023 </span><span class="lineCov"> 287 : olderthan = SCRUB_AUTO;</span></a>
<a name="1024"><span class="lineNum"> 1024 </span><span class="lineCov"> 287 : import_timestamp = 0;</span></a>
<a name="1025"><span class="lineNum"> 1025 </span><span class="lineCov"> 287 : import_content = 0;</span></a>
<a name="1026"><span class="lineNum"> 1026 </span><span class="lineCov"> 287 : log_file = 0;</span></a>
<a name="1027"><span class="lineNum"> 1027 </span><span class="lineCov"> 287 : lock = 0;</span></a>
<a name="1028"><span class="lineNum"> 1028 </span><span class="lineCov"> 287 : gen_conf = 0;</span></a>
<a name="1029"><span class="lineNum"> 1029 </span><span class="lineCov"> 287 : speedtest = 0;</span></a>
<a name="1030"><span class="lineNum"> 1030 </span><span class="lineCov"> 287 : run = 0;</span></a>
<a name="1010"><span class="lineNum"> 1010 </span><span class="lineCov"> 288 : config(conf, sizeof(conf), argv[0]);</span></a>
<a name="1011"><span class="lineNum"> 1011 </span><span class="lineCov"> 288 : memset(&amp;opt, 0, sizeof(opt));</span></a>
<a name="1012"><span class="lineNum"> 1012 </span><span class="lineCov"> 288 : opt.io_error_limit = 100;</span></a>
<a name="1013"><span class="lineNum"> 1013 </span><span class="lineCov"> 288 : blockstart = 0;</span></a>
<a name="1014"><span class="lineNum"> 1014 </span><span class="lineCov"> 288 : blockcount = 0;</span></a>
<a name="1015"><span class="lineNum"> 1015 </span><span class="lineCov"> 288 : tommy_list_init(&amp;filterlist_file);</span></a>
<a name="1016"><span class="lineNum"> 1016 </span><span class="lineCov"> 288 : tommy_list_init(&amp;filterlist_disk);</span></a>
<a name="1017"><span class="lineNum"> 1017 </span><span class="lineCov"> 288 : speed_test_period = -1;</span></a>
<a name="1018"><span class="lineNum"> 1018 </span><span class="lineCov"> 288 : speed_test_blocks_size = -1;</span></a>
<a name="1019"><span class="lineNum"> 1019 </span><span class="lineCov"> 288 : speed_test_disks_number = -1;</span></a>
<a name="1020"><span class="lineNum"> 1020 </span><span class="lineCov"> 288 : filter_missing = 0;</span></a>
<a name="1021"><span class="lineNum"> 1021 </span><span class="lineCov"> 288 : filter_error = 0;</span></a>
<a name="1022"><span class="lineNum"> 1022 </span><span class="lineCov"> 288 : plan100 = SCRUB_AUTO;</span></a>
<a name="1023"><span class="lineNum"> 1023 </span><span class="lineCov"> 288 : olderthan = SCRUB_AUTO;</span></a>
<a name="1024"><span class="lineNum"> 1024 </span><span class="lineCov"> 288 : import_timestamp = 0;</span></a>
<a name="1025"><span class="lineNum"> 1025 </span><span class="lineCov"> 288 : import_content = 0;</span></a>
<a name="1026"><span class="lineNum"> 1026 </span><span class="lineCov"> 288 : log_file = 0;</span></a>
<a name="1027"><span class="lineNum"> 1027 </span><span class="lineCov"> 288 : lock = 0;</span></a>
<a name="1028"><span class="lineNum"> 1028 </span><span class="lineCov"> 288 : gen_conf = 0;</span></a>
<a name="1029"><span class="lineNum"> 1029 </span><span class="lineCov"> 288 : speedtest = 0;</span></a>
<a name="1030"><span class="lineNum"> 1030 </span><span class="lineCov"> 288 : run = 0;</span></a>
<a name="1031"><span class="lineNum"> 1031 </span> : </a>
<a name="1032"><span class="lineNum"> 1032 </span><span class="lineCov"> 287 : opterr = 0;</span></a>
<a name="1033"><span class="lineNum"> 1033 </span><span class="lineCov"> 287 : while ((c =</span></a>
<a name="1032"><span class="lineNum"> 1032 </span><span class="lineCov"> 288 : opterr = 0;</span></a>
<a name="1033"><span class="lineNum"> 1033 </span><span class="lineCov"> 288 : while ((c =</span></a>
<a name="1034"><span class="lineNum"> 1034 </span> : #if HAVE_GETOPT_LONG</a>
<a name="1035"><span class="lineNum"> 1035 </span><span class="lineCov"> 3607 : getopt_long(argc, argv, OPTIONS, long_options, 0))</span></a>
<a name="1035"><span class="lineNum"> 1035 </span><span class="lineCov"> 3608 : getopt_long(argc, argv, OPTIONS, long_options, 0))</span></a>
<a name="1036"><span class="lineNum"> 1036 </span> : #else</a>
<a name="1037"><span class="lineNum"> 1037 </span> : getopt(argc, argv, OPTIONS))</a>
<a name="1038"><span class="lineNum"> 1038 </span> : #endif</a>
<a name="1039"><span class="lineNum"> 1039 </span><span class="lineCov"> 3607 : != EOF) {</span></a>
<a name="1039"><span class="lineNum"> 1039 </span><span class="lineCov"> 3608 : != EOF) {</span></a>
<a name="1040"><span class="lineNum"> 1040 </span><span class="lineCov"> 3324 : switch (c) {</span></a>
<a name="1041"><span class="lineNum"> 1041 </span><span class="lineCov"> 280 : case 'c' :</span></a>
<a name="1042"><span class="lineNum"> 1042 </span><span class="lineCov"> 280 : pathimport(conf, sizeof(conf), optarg);</span></a>
@ -1510,69 +1510,69 @@
<a name="1448"><span class="lineNum"> 1448 </span> : }</a>
<a name="1449"><span class="lineNum"> 1449 </span> : }</a>
<a name="1450"><span class="lineNum"> 1450 </span> : </a>
<a name="1451"><span class="lineNum"> 1451 </span><span class="lineCov"> 283 : os_init(opt.force_scan_winfind);</span></a>
<a name="1452"><span class="lineNum"> 1452 </span><span class="lineCov"> 283 : raid_init();</span></a>
<a name="1453"><span class="lineNum"> 1453 </span><span class="lineCov"> 283 : crc32c_init();</span></a>
<a name="1454"><span class="lineNum"> 1454 </span><span class="lineCov"> 283 : random_reseed();</span></a>
<a name="1451"><span class="lineNum"> 1451 </span><span class="lineCov"> 284 : os_init(opt.force_scan_winfind);</span></a>
<a name="1452"><span class="lineNum"> 1452 </span><span class="lineCov"> 284 : raid_init();</span></a>
<a name="1453"><span class="lineNum"> 1453 </span><span class="lineCov"> 284 : crc32c_init();</span></a>
<a name="1454"><span class="lineNum"> 1454 </span><span class="lineCov"> 284 : random_reseed();</span></a>
<a name="1455"><span class="lineNum"> 1455 </span> : </a>
<a name="1456"><span class="lineNum"> 1456 </span><span class="lineCov"> 283 : if (speedtest != 0) {</span></a>
<a name="1456"><span class="lineNum"> 1456 </span><span class="lineCov"> 284 : if (speedtest != 0) {</span></a>
<a name="1457"><span class="lineNum"> 1457 </span><span class="lineCov"> 4 : speed(speed_test_period, speed_test_disks_number, speed_test_blocks_size);</span></a>
<a name="1458"><span class="lineNum"> 1458 </span><span class="lineCov"> 4 : os_done();</span></a>
<a name="1459"><span class="lineNum"> 1459 </span><span class="lineCov"> 4 : exit(EXIT_SUCCESS);</span></a>
<a name="1460"><span class="lineNum"> 1460 </span> : }</a>
<a name="1461"><span class="lineNum"> 1461 </span> : </a>
<a name="1462"><span class="lineNum"> 1462 </span><span class="lineCov"> 279 : if (gen_conf != 0) {</span></a>
<a name="1462"><span class="lineNum"> 1462 </span><span class="lineCov"> 280 : if (gen_conf != 0) {</span></a>
<a name="1463"><span class="lineNum"> 1463 </span><span class="lineCov"> 1 : generate_configuration(gen_conf);</span></a>
<a name="1464"><span class="lineNum"> 1464 </span><span class="lineCov"> 1 : os_done();</span></a>
<a name="1465"><span class="lineNum"> 1465 </span><span class="lineCov"> 1 : exit(EXIT_SUCCESS);</span></a>
<a name="1466"><span class="lineNum"> 1466 </span> : }</a>
<a name="1467"><span class="lineNum"> 1467 </span> : </a>
<a name="1468"><span class="lineNum"> 1468 </span><span class="lineCov"> 278 : if (optind + 1 != argc) {</span></a>
<a name="1468"><span class="lineNum"> 1468 </span><span class="lineCov"> 279 : if (optind + 1 != argc) {</span></a>
<a name="1469"><span class="lineNum"> 1469 </span> : /* LCOV_EXCL_START */</a>
<a name="1470"><span class="lineNum"> 1470 </span> : usage(conf);</a>
<a name="1471"><span class="lineNum"> 1471 </span> : exit(EXIT_FAILURE);</a>
<a name="1472"><span class="lineNum"> 1472 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1473"><span class="lineNum"> 1473 </span> : }</a>
<a name="1474"><span class="lineNum"> 1474 </span> : </a>
<a name="1475"><span class="lineNum"> 1475 </span><span class="lineCov"> 278 : command = argv[optind];</span></a>
<a name="1476"><span class="lineNum"> 1476 </span><span class="lineCov"> 278 : if (strcmp(command, &quot;diff&quot;) == 0) {</span></a>
<a name="1475"><span class="lineNum"> 1475 </span><span class="lineCov"> 279 : command = argv[optind];</span></a>
<a name="1476"><span class="lineNum"> 1476 </span><span class="lineCov"> 279 : if (strcmp(command, &quot;diff&quot;) == 0) {</span></a>
<a name="1477"><span class="lineNum"> 1477 </span><span class="lineCov"> 8 : operation = OPERATION_DIFF;</span></a>
<a name="1478"><span class="lineNum"> 1478 </span><span class="lineCov"> 270 : } else if (strcmp(argv[optind], &quot;sync&quot;) == 0) {</span></a>
<a name="1478"><span class="lineNum"> 1478 </span><span class="lineCov"> 271 : } else if (strcmp(argv[optind], &quot;sync&quot;) == 0) {</span></a>
<a name="1479"><span class="lineNum"> 1479 </span><span class="lineCov"> 94 : operation = OPERATION_SYNC;</span></a>
<a name="1480"><span class="lineNum"> 1480 </span><span class="lineCov"> 176 : } else if (strcmp(argv[optind], &quot;check&quot;) == 0) {</span></a>
<a name="1480"><span class="lineNum"> 1480 </span><span class="lineCov"> 177 : } else if (strcmp(argv[optind], &quot;check&quot;) == 0) {</span></a>
<a name="1481"><span class="lineNum"> 1481 </span><span class="lineCov"> 75 : operation = OPERATION_CHECK;</span></a>
<a name="1482"><span class="lineNum"> 1482 </span><span class="lineCov"> 101 : } else if (strcmp(argv[optind], &quot;fix&quot;) == 0) {</span></a>
<a name="1482"><span class="lineNum"> 1482 </span><span class="lineCov"> 102 : } else if (strcmp(argv[optind], &quot;fix&quot;) == 0) {</span></a>
<a name="1483"><span class="lineNum"> 1483 </span><span class="lineCov"> 46 : operation = OPERATION_FIX;</span></a>
<a name="1484"><span class="lineNum"> 1484 </span><span class="lineCov"> 55 : } else if (strcmp(argv[optind], &quot;test-dry&quot;) == 0) {</span></a>
<a name="1484"><span class="lineNum"> 1484 </span><span class="lineCov"> 56 : } else if (strcmp(argv[optind], &quot;test-dry&quot;) == 0) {</span></a>
<a name="1485"><span class="lineNum"> 1485 </span><span class="lineCov"> 3 : operation = OPERATION_DRY;</span></a>
<a name="1486"><span class="lineNum"> 1486 </span><span class="lineCov"> 52 : } else if (strcmp(argv[optind], &quot;dup&quot;) == 0) {</span></a>
<a name="1486"><span class="lineNum"> 1486 </span><span class="lineCov"> 53 : } else if (strcmp(argv[optind], &quot;dup&quot;) == 0) {</span></a>
<a name="1487"><span class="lineNum"> 1487 </span><span class="lineCov"> 3 : operation = OPERATION_DUP;</span></a>
<a name="1488"><span class="lineNum"> 1488 </span><span class="lineCov"> 49 : } else if (strcmp(argv[optind], &quot;list&quot;) == 0) {</span></a>
<a name="1488"><span class="lineNum"> 1488 </span><span class="lineCov"> 50 : } else if (strcmp(argv[optind], &quot;list&quot;) == 0) {</span></a>
<a name="1489"><span class="lineNum"> 1489 </span><span class="lineCov"> 5 : operation = OPERATION_LIST;</span></a>
<a name="1490"><span class="lineNum"> 1490 </span><span class="lineCov"> 44 : } else if (strcmp(argv[optind], &quot;pool&quot;) == 0) {</span></a>
<a name="1490"><span class="lineNum"> 1490 </span><span class="lineCov"> 45 : } else if (strcmp(argv[optind], &quot;pool&quot;) == 0) {</span></a>
<a name="1491"><span class="lineNum"> 1491 </span><span class="lineCov"> 3 : operation = OPERATION_POOL;</span></a>
<a name="1492"><span class="lineNum"> 1492 </span><span class="lineCov"> 41 : } else if (strcmp(argv[optind], &quot;rehash&quot;) == 0) {</span></a>
<a name="1492"><span class="lineNum"> 1492 </span><span class="lineCov"> 42 : } else if (strcmp(argv[optind], &quot;rehash&quot;) == 0) {</span></a>
<a name="1493"><span class="lineNum"> 1493 </span><span class="lineCov"> 1 : operation = OPERATION_REHASH;</span></a>
<a name="1494"><span class="lineNum"> 1494 </span><span class="lineCov"> 40 : } else if (strcmp(argv[optind], &quot;scrub&quot;) == 0) {</span></a>
<a name="1494"><span class="lineNum"> 1494 </span><span class="lineCov"> 41 : } else if (strcmp(argv[optind], &quot;scrub&quot;) == 0) {</span></a>
<a name="1495"><span class="lineNum"> 1495 </span><span class="lineCov"> 11 : operation = OPERATION_SCRUB;</span></a>
<a name="1496"><span class="lineNum"> 1496 </span><span class="lineCov"> 29 : } else if (strcmp(argv[optind], &quot;status&quot;) == 0) {</span></a>
<a name="1496"><span class="lineNum"> 1496 </span><span class="lineCov"> 30 : } else if (strcmp(argv[optind], &quot;status&quot;) == 0) {</span></a>
<a name="1497"><span class="lineNum"> 1497 </span><span class="lineCov"> 15 : operation = OPERATION_STATUS;</span></a>
<a name="1498"><span class="lineNum"> 1498 </span><span class="lineCov"> 14 : } else if (strcmp(argv[optind], &quot;test-rewrite&quot;) == 0) {</span></a>
<a name="1498"><span class="lineNum"> 1498 </span><span class="lineCov"> 15 : } else if (strcmp(argv[optind], &quot;test-rewrite&quot;) == 0) {</span></a>
<a name="1499"><span class="lineNum"> 1499 </span><span class="lineCov"> 1 : operation = OPERATION_REWRITE;</span></a>
<a name="1500"><span class="lineNum"> 1500 </span><span class="lineCov"> 13 : } else if (strcmp(argv[optind], &quot;read&quot;) == 0) {</span></a>
<a name="1500"><span class="lineNum"> 1500 </span><span class="lineCov"> 14 : } else if (strcmp(argv[optind], &quot;read&quot;) == 0) {</span></a>
<a name="1501"><span class="lineNum"> 1501 </span><span class="lineCov"> 1 : operation = OPERATION_READ;</span></a>
<a name="1502"><span class="lineNum"> 1502 </span><span class="lineCov"> 12 : } else if (strcmp(argv[optind], &quot;touch&quot;) == 0) {</span></a>
<a name="1502"><span class="lineNum"> 1502 </span><span class="lineCov"> 13 : } else if (strcmp(argv[optind], &quot;touch&quot;) == 0) {</span></a>
<a name="1503"><span class="lineNum"> 1503 </span><span class="lineCov"> 1 : operation = OPERATION_TOUCH;</span></a>
<a name="1504"><span class="lineNum"> 1504 </span><span class="lineCov"> 11 : } else if (strcmp(argv[optind], &quot;up&quot;) == 0) {</span></a>
<a name="1504"><span class="lineNum"> 1504 </span><span class="lineCov"> 12 : } else if (strcmp(argv[optind], &quot;up&quot;) == 0) {</span></a>
<a name="1505"><span class="lineNum"> 1505 </span><span class="lineCov"> 1 : operation = OPERATION_SPINUP;</span></a>
<a name="1506"><span class="lineNum"> 1506 </span><span class="lineCov"> 10 : } else if (strcmp(argv[optind], &quot;down&quot;) == 0) {</span></a>
<a name="1506"><span class="lineNum"> 1506 </span><span class="lineCov"> 11 : } else if (strcmp(argv[optind], &quot;down&quot;) == 0) {</span></a>
<a name="1507"><span class="lineNum"> 1507 </span><span class="lineCov"> 1 : operation = OPERATION_SPINDOWN;</span></a>
<a name="1508"><span class="lineNum"> 1508 </span><span class="lineCov"> 9 : } else if (strcmp(argv[optind], &quot;devices&quot;) == 0) {</span></a>
<a name="1508"><span class="lineNum"> 1508 </span><span class="lineCov"> 10 : } else if (strcmp(argv[optind], &quot;devices&quot;) == 0) {</span></a>
<a name="1509"><span class="lineNum"> 1509 </span><span class="lineCov"> 1 : operation = OPERATION_DEVICES;</span></a>
<a name="1510"><span class="lineNum"> 1510 </span><span class="lineCov"> 8 : } else if (strcmp(argv[optind], &quot;smart&quot;) == 0) {</span></a>
<a name="1510"><span class="lineNum"> 1510 </span><span class="lineCov"> 9 : } else if (strcmp(argv[optind], &quot;smart&quot;) == 0) {</span></a>
<a name="1511"><span class="lineNum"> 1511 </span><span class="lineCov"> 1 : operation = OPERATION_SMART;</span></a>
<a name="1512"><span class="lineNum"> 1512 </span><span class="lineCov"> 7 : } else if (strcmp(argv[optind], &quot;probe&quot;) == 0) {</span></a>
<a name="1513"><span class="lineNum"> 1513 </span><span class="lineCov"> 2 : operation = OPERATION_PROBE;</span></a>
<a name="1512"><span class="lineNum"> 1512 </span><span class="lineCov"> 8 : } else if (strcmp(argv[optind], &quot;probe&quot;) == 0) {</span></a>
<a name="1513"><span class="lineNum"> 1513 </span><span class="lineCov"> 3 : operation = OPERATION_PROBE;</span></a>
<a name="1514"><span class="lineNum"> 1514 </span><span class="lineCov"> 5 : } else if (strcmp(argv[optind], &quot;locate&quot;) == 0) {</span></a>
<a name="1515"><span class="lineNum"> 1515 </span><span class="lineCov"> 5 : operation = OPERATION_LOCATE;</span></a>
<a name="1516"><span class="lineNum"> 1516 </span> : } else {</a>
@ -1583,11 +1583,11 @@
<a name="1521"><span class="lineNum"> 1521 </span> : }</a>
<a name="1522"><span class="lineNum"> 1522 </span> : </a>
<a name="1523"><span class="lineNum"> 1523 </span> : /* check options compatibility */</a>
<a name="1524"><span class="lineNum"> 1524 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1524"><span class="lineNum"> 1524 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1525"><span class="lineNum"> 1525 </span><span class="lineCov"> 75 : case OPERATION_CHECK :</span></a>
<a name="1526"><span class="lineNum"> 1526 </span><span class="lineCov"> 75 : break;</span></a>
<a name="1527"><span class="lineNum"> 1527 </span><span class="lineCov"> 203 : default :</span></a>
<a name="1528"><span class="lineNum"> 1528 </span><span class="lineCov"> 203 : if (opt.auditonly) {</span></a>
<a name="1527"><span class="lineNum"> 1527 </span><span class="lineCov"> 204 : default :</span></a>
<a name="1528"><span class="lineNum"> 1528 </span><span class="lineCov"> 204 : if (opt.auditonly) {</span></a>
<a name="1529"><span class="lineNum"> 1529 </span> : /* LCOV_EXCL_START */</a>
<a name="1530"><span class="lineNum"> 1530 </span> : log_fatal(EUSER, &quot;You cannot use -a, --audit-only with the '%s' command\n&quot;, command);</a>
<a name="1531"><span class="lineNum"> 1531 </span> : exit(EXIT_FAILURE);</a>
@ -1595,15 +1595,15 @@
<a name="1533"><span class="lineNum"> 1533 </span> : }</a>
<a name="1534"><span class="lineNum"> 1534 </span> : }</a>
<a name="1535"><span class="lineNum"> 1535 </span> : </a>
<a name="1536"><span class="lineNum"> 1536 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1537"><span class="lineNum"> 1537 </span><span class="lineCov"> 127 : case OPERATION_FIX :</span></a>
<a name="1536"><span class="lineNum"> 1536 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1537"><span class="lineNum"> 1537 </span><span class="lineCov"> 128 : case OPERATION_FIX :</span></a>
<a name="1538"><span class="lineNum"> 1538 </span> : case OPERATION_CHECK :</a>
<a name="1539"><span class="lineNum"> 1539 </span> : case OPERATION_SMART :</a>
<a name="1540"><span class="lineNum"> 1540 </span> : case OPERATION_PROBE :</a>
<a name="1541"><span class="lineNum"> 1541 </span> : case OPERATION_DEVICES :</a>
<a name="1542"><span class="lineNum"> 1542 </span> : case OPERATION_SPINUP :</a>
<a name="1543"><span class="lineNum"> 1543 </span> : case OPERATION_SPINDOWN :</a>
<a name="1544"><span class="lineNum"> 1544 </span><span class="lineCov"> 127 : break;</span></a>
<a name="1544"><span class="lineNum"> 1544 </span><span class="lineCov"> 128 : break;</span></a>
<a name="1545"><span class="lineNum"> 1545 </span><span class="lineCov"> 151 : default :</span></a>
<a name="1546"><span class="lineNum"> 1546 </span><span class="lineCov"> 151 : if (opt.force_device) {</span></a>
<a name="1547"><span class="lineNum"> 1547 </span> : /* LCOV_EXCL_START */</a>
@ -1613,13 +1613,13 @@
<a name="1551"><span class="lineNum"> 1551 </span> : }</a>
<a name="1552"><span class="lineNum"> 1552 </span> : }</a>
<a name="1553"><span class="lineNum"> 1553 </span> : </a>
<a name="1554"><span class="lineNum"> 1554 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1554"><span class="lineNum"> 1554 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1555"><span class="lineNum"> 1555 </span><span class="lineCov"> 215 : case OPERATION_SYNC :</span></a>
<a name="1556"><span class="lineNum"> 1556 </span> : case OPERATION_CHECK :</a>
<a name="1557"><span class="lineNum"> 1557 </span> : case OPERATION_FIX :</a>
<a name="1558"><span class="lineNum"> 1558 </span><span class="lineCov"> 215 : break;</span></a>
<a name="1559"><span class="lineNum"> 1559 </span><span class="lineCov"> 63 : default :</span></a>
<a name="1560"><span class="lineNum"> 1560 </span><span class="lineCov"> 63 : if (opt.force_nocopy) {</span></a>
<a name="1559"><span class="lineNum"> 1559 </span><span class="lineCov"> 64 : default :</span></a>
<a name="1560"><span class="lineNum"> 1560 </span><span class="lineCov"> 64 : if (opt.force_nocopy) {</span></a>
<a name="1561"><span class="lineNum"> 1561 </span> : /* LCOV_EXCL_START */</a>
<a name="1562"><span class="lineNum"> 1562 </span> : log_fatal(EUSER, &quot;You cannot use -N, --force-nocopy with the '%s' command\n&quot;, command);</a>
<a name="1563"><span class="lineNum"> 1563 </span> : exit(EXIT_FAILURE);</a>
@ -1627,25 +1627,25 @@
<a name="1565"><span class="lineNum"> 1565 </span> : }</a>
<a name="1566"><span class="lineNum"> 1566 </span> : }</a>
<a name="1567"><span class="lineNum"> 1567 </span> : </a>
<a name="1568"><span class="lineNum"> 1568 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1568"><span class="lineNum"> 1568 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1569"><span class="lineNum"> 1569 </span><span class="lineCov"> 94 : case OPERATION_SYNC :</span></a>
<a name="1570"><span class="lineNum"> 1570 </span><span class="lineCov"> 94 : break;</span></a>
<a name="1571"><span class="lineNum"> 1571 </span><span class="lineCov"> 184 : default :</span></a>
<a name="1572"><span class="lineNum"> 1572 </span><span class="lineCov"> 184 : if (opt.prehash) {</span></a>
<a name="1571"><span class="lineNum"> 1571 </span><span class="lineCov"> 185 : default :</span></a>
<a name="1572"><span class="lineNum"> 1572 </span><span class="lineCov"> 185 : if (opt.prehash) {</span></a>
<a name="1573"><span class="lineNum"> 1573 </span> : /* LCOV_EXCL_START */</a>
<a name="1574"><span class="lineNum"> 1574 </span> : log_fatal(EUSER, &quot;You cannot use -h, --pre-hash with the '%s' command\n&quot;, command);</a>
<a name="1575"><span class="lineNum"> 1575 </span> : exit(EXIT_FAILURE);</a>
<a name="1576"><span class="lineNum"> 1576 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1577"><span class="lineNum"> 1577 </span> : }</a>
<a name="1578"><span class="lineNum"> 1578 </span> : </a>
<a name="1579"><span class="lineNum"> 1579 </span><span class="lineCov"> 184 : if (opt.force_full) {</span></a>
<a name="1579"><span class="lineNum"> 1579 </span><span class="lineCov"> 185 : if (opt.force_full) {</span></a>
<a name="1580"><span class="lineNum"> 1580 </span> : /* LCOV_EXCL_START */</a>
<a name="1581"><span class="lineNum"> 1581 </span> : log_fatal(EUSER, &quot;You cannot use -F, --force-full with the '%s' command\n&quot;, command);</a>
<a name="1582"><span class="lineNum"> 1582 </span> : exit(EXIT_FAILURE);</a>
<a name="1583"><span class="lineNum"> 1583 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1584"><span class="lineNum"> 1584 </span> : }</a>
<a name="1585"><span class="lineNum"> 1585 </span> : </a>
<a name="1586"><span class="lineNum"> 1586 </span><span class="lineCov"> 184 : if (opt.force_realloc) {</span></a>
<a name="1586"><span class="lineNum"> 1586 </span><span class="lineCov"> 185 : if (opt.force_realloc) {</span></a>
<a name="1587"><span class="lineNum"> 1587 </span> : /* LCOV_EXCL_START */</a>
<a name="1588"><span class="lineNum"> 1588 </span> : log_fatal(EUSER, &quot;You cannot use -R, --force-realloc with the '%s' command\n&quot;, command);</a>
<a name="1589"><span class="lineNum"> 1589 </span> : exit(EXIT_FAILURE);</a>
@ -1653,41 +1653,41 @@
<a name="1591"><span class="lineNum"> 1591 </span> : }</a>
<a name="1592"><span class="lineNum"> 1592 </span> : }</a>
<a name="1593"><span class="lineNum"> 1593 </span> : </a>
<a name="1594"><span class="lineNum"> 1594 </span><span class="lineCov"> 278 : if (opt.force_full &amp;&amp; opt.force_nocopy) {</span></a>
<a name="1594"><span class="lineNum"> 1594 </span><span class="lineCov"> 279 : if (opt.force_full &amp;&amp; opt.force_nocopy) {</span></a>
<a name="1595"><span class="lineNum"> 1595 </span> : /* LCOV_EXCL_START */</a>
<a name="1596"><span class="lineNum"> 1596 </span> : log_fatal(EUSER, &quot;You cannot use the -F, --force-full and -N, --force-nocopy options simultaneously\n&quot;);</a>
<a name="1597"><span class="lineNum"> 1597 </span> : exit(EXIT_FAILURE);</a>
<a name="1598"><span class="lineNum"> 1598 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1599"><span class="lineNum"> 1599 </span> : }</a>
<a name="1600"><span class="lineNum"> 1600 </span> : </a>
<a name="1601"><span class="lineNum"> 1601 </span><span class="lineCov"> 278 : if (opt.force_realloc &amp;&amp; opt.force_nocopy) {</span></a>
<a name="1601"><span class="lineNum"> 1601 </span><span class="lineCov"> 279 : if (opt.force_realloc &amp;&amp; opt.force_nocopy) {</span></a>
<a name="1602"><span class="lineNum"> 1602 </span> : /* LCOV_EXCL_START */</a>
<a name="1603"><span class="lineNum"> 1603 </span> : log_fatal(EUSER, &quot;You cannot use the -R, --force-realloc and -N, --force-nocopy options simultaneously\n&quot;);</a>
<a name="1604"><span class="lineNum"> 1604 </span> : exit(EXIT_FAILURE);</a>
<a name="1605"><span class="lineNum"> 1605 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1606"><span class="lineNum"> 1606 </span> : }</a>
<a name="1607"><span class="lineNum"> 1607 </span> : </a>
<a name="1608"><span class="lineNum"> 1608 </span><span class="lineCov"> 278 : if (opt.force_realloc &amp;&amp; opt.force_full) {</span></a>
<a name="1608"><span class="lineNum"> 1608 </span><span class="lineCov"> 279 : if (opt.force_realloc &amp;&amp; opt.force_full) {</span></a>
<a name="1609"><span class="lineNum"> 1609 </span> : /* LCOV_EXCL_START */</a>
<a name="1610"><span class="lineNum"> 1610 </span> : log_fatal(EUSER, &quot;You cannot use the -R, --force-realloc and -F, --force-full options simultaneously\n&quot;);</a>
<a name="1611"><span class="lineNum"> 1611 </span> : exit(EXIT_FAILURE);</a>
<a name="1612"><span class="lineNum"> 1612 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1613"><span class="lineNum"> 1613 </span> : }</a>
<a name="1614"><span class="lineNum"> 1614 </span> : </a>
<a name="1615"><span class="lineNum"> 1615 </span><span class="lineCov"> 278 : if (opt.prehash &amp;&amp; opt.force_nocopy) {</span></a>
<a name="1615"><span class="lineNum"> 1615 </span><span class="lineCov"> 279 : if (opt.prehash &amp;&amp; opt.force_nocopy) {</span></a>
<a name="1616"><span class="lineNum"> 1616 </span> : /* LCOV_EXCL_START */</a>
<a name="1617"><span class="lineNum"> 1617 </span> : log_fatal(EUSER, &quot;You cannot use the -h, --pre-hash and -N, --force-nocopy options simultaneously\n&quot;);</a>
<a name="1618"><span class="lineNum"> 1618 </span> : exit(EXIT_FAILURE);</a>
<a name="1619"><span class="lineNum"> 1619 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1620"><span class="lineNum"> 1620 </span> : }</a>
<a name="1621"><span class="lineNum"> 1621 </span> : </a>
<a name="1622"><span class="lineNum"> 1622 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1622"><span class="lineNum"> 1622 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1623"><span class="lineNum"> 1623 </span><span class="lineCov"> 124 : case OPERATION_CHECK :</span></a>
<a name="1624"><span class="lineNum"> 1624 </span> : case OPERATION_FIX :</a>
<a name="1625"><span class="lineNum"> 1625 </span> : case OPERATION_DRY :</a>
<a name="1626"><span class="lineNum"> 1626 </span><span class="lineCov"> 124 : break;</span></a>
<a name="1627"><span class="lineNum"> 1627 </span><span class="lineCov"> 152 : default :</span></a>
<a name="1628"><span class="lineNum"> 1628 </span><span class="lineCov"> 152 : if (!tommy_list_empty(&amp;filterlist_disk)) {</span></a>
<a name="1627"><span class="lineNum"> 1627 </span><span class="lineCov"> 153 : default :</span></a>
<a name="1628"><span class="lineNum"> 1628 </span><span class="lineCov"> 153 : if (!tommy_list_empty(&amp;filterlist_disk)) {</span></a>
<a name="1629"><span class="lineNum"> 1629 </span> : /* LCOV_EXCL_START */</a>
<a name="1630"><span class="lineNum"> 1630 </span> : log_fatal(EUSER, &quot;You cannot use -d, --filter-disk with the '%s' command\n&quot;, command);</a>
<a name="1631"><span class="lineNum"> 1631 </span> : exit(EXIT_FAILURE);</a>
@ -1696,19 +1696,19 @@
<a name="1634"><span class="lineNum"> 1634 </span> : /* fallthrough */</a>
<a name="1635"><span class="lineNum"> 1635 </span> : case OPERATION_SPINUP :</a>
<a name="1636"><span class="lineNum"> 1636 </span> : case OPERATION_SPINDOWN :</a>
<a name="1637"><span class="lineNum"> 1637 </span><span class="lineCov"> 154 : if (!tommy_list_empty(&amp;filterlist_file)) {</span></a>
<a name="1637"><span class="lineNum"> 1637 </span><span class="lineCov"> 155 : if (!tommy_list_empty(&amp;filterlist_file)) {</span></a>
<a name="1638"><span class="lineNum"> 1638 </span> : /* LCOV_EXCL_START */</a>
<a name="1639"><span class="lineNum"> 1639 </span> : log_fatal(EUSER, &quot;You cannot use -f, --filter with the '%s' command\n&quot;, command);</a>
<a name="1640"><span class="lineNum"> 1640 </span> : exit(EXIT_FAILURE);</a>
<a name="1641"><span class="lineNum"> 1641 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1642"><span class="lineNum"> 1642 </span> : }</a>
<a name="1643"><span class="lineNum"> 1643 </span><span class="lineCov"> 154 : if (filter_missing != 0) {</span></a>
<a name="1643"><span class="lineNum"> 1643 </span><span class="lineCov"> 155 : if (filter_missing != 0) {</span></a>
<a name="1644"><span class="lineNum"> 1644 </span> : /* LCOV_EXCL_START */</a>
<a name="1645"><span class="lineNum"> 1645 </span> : log_fatal(EUSER, &quot;You cannot use -m, --filter-missing with the '%s' command\n&quot;, command);</a>
<a name="1646"><span class="lineNum"> 1646 </span> : exit(EXIT_FAILURE);</a>
<a name="1647"><span class="lineNum"> 1647 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1648"><span class="lineNum"> 1648 </span> : }</a>
<a name="1649"><span class="lineNum"> 1649 </span><span class="lineCov"> 154 : if (filter_error != 0) {</span></a>
<a name="1649"><span class="lineNum"> 1649 </span><span class="lineCov"> 155 : if (filter_error != 0) {</span></a>
<a name="1650"><span class="lineNum"> 1650 </span> : /* LCOV_EXCL_START */</a>
<a name="1651"><span class="lineNum"> 1651 </span> : log_fatal(EUSER, &quot;You cannot use -e, --filter-error with the '%s' command\n&quot;, command);</a>
<a name="1652"><span class="lineNum"> 1652 </span> : exit(EXIT_FAILURE);</a>
@ -1718,19 +1718,19 @@
<a name="1656"><span class="lineNum"> 1656 </span> : </a>
<a name="1657"><span class="lineNum"> 1657 </span> : /* errors must be always fixed on all disks */</a>
<a name="1658"><span class="lineNum"> 1658 </span> : /* because we don't keep the information on what disk is the error */</a>
<a name="1659"><span class="lineNum"> 1659 </span><span class="lineCov"> 278 : if (filter_error != 0 &amp;&amp; !tommy_list_empty(&amp;filterlist_disk)) {</span></a>
<a name="1659"><span class="lineNum"> 1659 </span><span class="lineCov"> 279 : if (filter_error != 0 &amp;&amp; !tommy_list_empty(&amp;filterlist_disk)) {</span></a>
<a name="1660"><span class="lineNum"> 1660 </span> : /* LCOV_EXCL_START */</a>
<a name="1661"><span class="lineNum"> 1661 </span> : log_fatal(EUSER, &quot;You cannot use -e, --filter-error and -d, --filter-disk simultaneously\n&quot;);</a>
<a name="1662"><span class="lineNum"> 1662 </span> : exit(EXIT_FAILURE);</a>
<a name="1663"><span class="lineNum"> 1663 </span> : /* LCOV_EXCL_STOP */</a>
<a name="1664"><span class="lineNum"> 1664 </span> : }</a>
<a name="1665"><span class="lineNum"> 1665 </span> : </a>
<a name="1666"><span class="lineNum"> 1666 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1666"><span class="lineNum"> 1666 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1667"><span class="lineNum"> 1667 </span><span class="lineCov"> 121 : case OPERATION_CHECK :</span></a>
<a name="1668"><span class="lineNum"> 1668 </span> : case OPERATION_FIX :</a>
<a name="1669"><span class="lineNum"> 1669 </span><span class="lineCov"> 121 : break;</span></a>
<a name="1670"><span class="lineNum"> 1670 </span><span class="lineCov"> 157 : default :</span></a>
<a name="1671"><span class="lineNum"> 1671 </span><span class="lineCov"> 157 : if (import_timestamp != 0 || import_content != 0) {</span></a>
<a name="1670"><span class="lineNum"> 1670 </span><span class="lineCov"> 158 : default :</span></a>
<a name="1671"><span class="lineNum"> 1671 </span><span class="lineCov"> 158 : if (import_timestamp != 0 || import_content != 0) {</span></a>
<a name="1672"><span class="lineNum"> 1672 </span> : /* LCOV_EXCL_START */</a>
<a name="1673"><span class="lineNum"> 1673 </span> : log_fatal(EUSER, &quot;Import not allowed with the '%s' command\n&quot;, command);</a>
<a name="1674"><span class="lineNum"> 1674 </span> : exit(EXIT_FAILURE);</a>
@ -1738,7 +1738,7 @@
<a name="1676"><span class="lineNum"> 1676 </span> : }</a>
<a name="1677"><span class="lineNum"> 1677 </span> : }</a>
<a name="1678"><span class="lineNum"> 1678 </span> : </a>
<a name="1679"><span class="lineNum"> 1679 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1679"><span class="lineNum"> 1679 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1680"><span class="lineNum"> 1680 </span><span class="lineCov"> 26 : case OPERATION_LIST :</span></a>
<a name="1681"><span class="lineNum"> 1681 </span> : case OPERATION_DUP :</a>
<a name="1682"><span class="lineNum"> 1682 </span> : case OPERATION_STATUS :</a>
@ -1750,7 +1750,7 @@
<a name="1688"><span class="lineNum"> 1688 </span><span class="lineCov"> 26 : break;</span></a>
<a name="1689"><span class="lineNum"> 1689 </span> : }</a>
<a name="1690"><span class="lineNum"> 1690 </span> : </a>
<a name="1691"><span class="lineNum"> 1691 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1691"><span class="lineNum"> 1691 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1692"><span class="lineNum"> 1692 </span><span class="lineCov"> 38 : case OPERATION_DIFF :</span></a>
<a name="1693"><span class="lineNum"> 1693 </span> : case OPERATION_LIST :</a>
<a name="1694"><span class="lineNum"> 1694 </span> : case OPERATION_DUP :</a>
@ -1765,7 +1765,7 @@
<a name="1703"><span class="lineNum"> 1703 </span><span class="lineCov"> 38 : break;</span></a>
<a name="1704"><span class="lineNum"> 1704 </span> : }</a>
<a name="1705"><span class="lineNum"> 1705 </span> : </a>
<a name="1706"><span class="lineNum"> 1706 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1706"><span class="lineNum"> 1706 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1707"><span class="lineNum"> 1707 </span><span class="lineCov"> 121 : case OPERATION_FIX :</span></a>
<a name="1708"><span class="lineNum"> 1708 </span> : case OPERATION_CHECK :</a>
<a name="1709"><span class="lineNum"> 1709 </span> : /* avoid to stop processing if a content file is not accessible */</a>
@ -1773,8 +1773,8 @@
<a name="1711"><span class="lineNum"> 1711 </span><span class="lineCov"> 121 : break;</span></a>
<a name="1712"><span class="lineNum"> 1712 </span> : }</a>
<a name="1713"><span class="lineNum"> 1713 </span> : </a>
<a name="1714"><span class="lineNum"> 1714 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1715"><span class="lineNum"> 1715 </span><span class="lineCov"> 26 : case OPERATION_DIFF :</span></a>
<a name="1714"><span class="lineNum"> 1714 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1715"><span class="lineNum"> 1715 </span><span class="lineCov"> 27 : case OPERATION_DIFF :</span></a>
<a name="1716"><span class="lineNum"> 1716 </span> : case OPERATION_LIST :</a>
<a name="1717"><span class="lineNum"> 1717 </span> : case OPERATION_DUP :</a>
<a name="1718"><span class="lineNum"> 1718 </span> : case OPERATION_POOL :</a>
@ -1784,77 +1784,77 @@
<a name="1722"><span class="lineNum"> 1722 </span> : case OPERATION_DEVICES :</a>
<a name="1723"><span class="lineNum"> 1723 </span> : case OPERATION_SMART :</a>
<a name="1724"><span class="lineNum"> 1724 </span> : case OPERATION_PROBE :</a>
<a name="1725"><span class="lineNum"> 1725 </span><span class="lineCov"> 26 : opt.skip_self = 1;</span></a>
<a name="1726"><span class="lineNum"> 1726 </span><span class="lineCov"> 26 : break;</span></a>
<a name="1725"><span class="lineNum"> 1725 </span><span class="lineCov"> 27 : opt.skip_self = 1;</span></a>
<a name="1726"><span class="lineNum"> 1726 </span><span class="lineCov"> 27 : break;</span></a>
<a name="1727"><span class="lineNum"> 1727 </span> : }</a>
<a name="1728"><span class="lineNum"> 1728 </span> : </a>
<a name="1729"><span class="lineNum"> 1729 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1729"><span class="lineNum"> 1729 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1730"><span class="lineNum"> 1730 </span> : #if HAVE_DIRECT_IO</a>
<a name="1731"><span class="lineNum"> 1731 </span><span class="lineCov"> 108 : case OPERATION_SYNC :</span></a>
<a name="1732"><span class="lineNum"> 1732 </span> : case OPERATION_SCRUB :</a>
<a name="1733"><span class="lineNum"> 1733 </span> : case OPERATION_DRY :</a>
<a name="1734"><span class="lineNum"> 1734 </span><span class="lineCov"> 108 : break;</span></a>
<a name="1735"><span class="lineNum"> 1735 </span> : #endif</a>
<a name="1736"><span class="lineNum"> 1736 </span><span class="lineCov"> 170 : default :</span></a>
<a name="1736"><span class="lineNum"> 1736 </span><span class="lineCov"> 171 : default :</span></a>
<a name="1737"><span class="lineNum"> 1737 </span> : /* we allow direct IO only on some commands */</a>
<a name="1738"><span class="lineNum"> 1738 </span><span class="lineCov"> 170 : if (opt.file_mode == ADVISE_DIRECT)</span></a>
<a name="1738"><span class="lineNum"> 1738 </span><span class="lineCov"> 171 : if (opt.file_mode == ADVISE_DIRECT)</span></a>
<a name="1739"><span class="lineNum"> 1739 </span><span class="lineNoCov"> 0 : opt.file_mode = ADVISE_SEQUENTIAL;</span></a>
<a name="1740"><span class="lineNum"> 1740 </span><span class="lineCov"> 170 : break;</span></a>
<a name="1740"><span class="lineNum"> 1740 </span><span class="lineCov"> 171 : break;</span></a>
<a name="1741"><span class="lineNum"> 1741 </span> : }</a>
<a name="1742"><span class="lineNum"> 1742 </span> : </a>
<a name="1743"><span class="lineNum"> 1743 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1744"><span class="lineNum"> 1744 </span><span class="lineCov"> 4 : case OPERATION_DEVICES :</span></a>
<a name="1743"><span class="lineNum"> 1743 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1744"><span class="lineNum"> 1744 </span><span class="lineCov"> 5 : case OPERATION_DEVICES :</span></a>
<a name="1745"><span class="lineNum"> 1745 </span> : case OPERATION_SMART :</a>
<a name="1746"><span class="lineNum"> 1746 </span> : case OPERATION_PROBE :</a>
<a name="1747"><span class="lineNum"> 1747 </span> : /* we may need to use these commands during operations */</a>
<a name="1748"><span class="lineNum"> 1748 </span><span class="lineCov"> 4 : opt.skip_lock = 1;</span></a>
<a name="1749"><span class="lineNum"> 1749 </span><span class="lineCov"> 4 : break;</span></a>
<a name="1748"><span class="lineNum"> 1748 </span><span class="lineCov"> 5 : opt.skip_lock = 1;</span></a>
<a name="1749"><span class="lineNum"> 1749 </span><span class="lineCov"> 5 : break;</span></a>
<a name="1750"><span class="lineNum"> 1750 </span> : }</a>
<a name="1751"><span class="lineNum"> 1751 </span> : </a>
<a name="1752"><span class="lineNum"> 1752 </span><span class="lineCov"> 278 : switch (operation) {</span></a>
<a name="1753"><span class="lineNum"> 1753 </span><span class="lineCov"> 3 : case OPERATION_SMART :</span></a>
<a name="1752"><span class="lineNum"> 1752 </span><span class="lineCov"> 279 : switch (operation) {</span></a>
<a name="1753"><span class="lineNum"> 1753 </span><span class="lineCov"> 4 : case OPERATION_SMART :</span></a>
<a name="1754"><span class="lineNum"> 1754 </span> : case OPERATION_PROBE :</a>
<a name="1755"><span class="lineNum"> 1755 </span> : /* allow to run without configuration file */</a>
<a name="1756"><span class="lineNum"> 1756 </span><span class="lineCov"> 3 : opt.auto_conf = 1;</span></a>
<a name="1757"><span class="lineNum"> 1757 </span><span class="lineCov"> 3 : break;</span></a>
<a name="1756"><span class="lineNum"> 1756 </span><span class="lineCov"> 4 : opt.auto_conf = 1;</span></a>
<a name="1757"><span class="lineNum"> 1757 </span><span class="lineCov"> 4 : break;</span></a>
<a name="1758"><span class="lineNum"> 1758 </span> : }</a>
<a name="1759"><span class="lineNum"> 1759 </span> : </a>
<a name="1760"><span class="lineNum"> 1760 </span> : /* open the log file */</a>
<a name="1761"><span class="lineNum"> 1761 </span><span class="lineCov"> 278 : log_open(log_file);</span></a>
<a name="1761"><span class="lineNum"> 1761 </span><span class="lineCov"> 279 : log_open(log_file);</span></a>
<a name="1762"><span class="lineNum"> 1762 </span> : </a>
<a name="1763"><span class="lineNum"> 1763 </span> : /* print generic info into the log */</a>
<a name="1764"><span class="lineNum"> 1764 </span><span class="lineCov"> 278 : t = time(0);</span></a>
<a name="1764"><span class="lineNum"> 1764 </span><span class="lineCov"> 279 : t = time(0);</span></a>
<a name="1765"><span class="lineNum"> 1765 </span> : #if HAVE_LOCALTIME_R</a>
<a name="1766"><span class="lineNum"> 1766 </span><span class="lineCov"> 278 : tm = localtime_r(&amp;t, &amp;tm_res);</span></a>
<a name="1766"><span class="lineNum"> 1766 </span><span class="lineCov"> 279 : tm = localtime_r(&amp;t, &amp;tm_res);</span></a>
<a name="1767"><span class="lineNum"> 1767 </span> : #else</a>
<a name="1768"><span class="lineNum"> 1768 </span> : tm = localtime(&amp;t);</a>
<a name="1769"><span class="lineNum"> 1769 </span> : #endif</a>
<a name="1770"><span class="lineNum"> 1770 </span><span class="lineCov"> 278 : log_tag(&quot;version:%s\n&quot;, PACKAGE_VERSION);</span></a>
<a name="1771"><span class="lineNum"> 1771 </span><span class="lineCov"> 278 : log_tag(&quot;unixtime:%&quot; PRIi64 &quot;\n&quot;, (int64_t)t);</span></a>
<a name="1772"><span class="lineNum"> 1772 </span><span class="lineCov"> 278 : if (tm) {</span></a>
<a name="1770"><span class="lineNum"> 1770 </span><span class="lineCov"> 279 : log_tag(&quot;version:%s\n&quot;, PACKAGE_VERSION);</span></a>
<a name="1771"><span class="lineNum"> 1771 </span><span class="lineCov"> 279 : log_tag(&quot;unixtime:%&quot; PRIi64 &quot;\n&quot;, (int64_t)t);</span></a>
<a name="1772"><span class="lineNum"> 1772 </span><span class="lineCov"> 279 : if (tm) {</span></a>
<a name="1773"><span class="lineNum"> 1773 </span> : char datetime[64];</a>
<a name="1774"><span class="lineNum"> 1774 </span><span class="lineCov"> 278 : strftime(datetime, sizeof(datetime), &quot;%Y-%m-%d %H:%M:%S&quot;, tm);</span></a>
<a name="1775"><span class="lineNum"> 1775 </span><span class="lineCov"> 278 : log_tag(&quot;time:%s\n&quot;, datetime);</span></a>
<a name="1774"><span class="lineNum"> 1774 </span><span class="lineCov"> 279 : strftime(datetime, sizeof(datetime), &quot;%Y-%m-%d %H:%M:%S&quot;, tm);</span></a>
<a name="1775"><span class="lineNum"> 1775 </span><span class="lineCov"> 279 : log_tag(&quot;time:%s\n&quot;, datetime);</span></a>
<a name="1776"><span class="lineNum"> 1776 </span> : }</a>
<a name="1777"><span class="lineNum"> 1777 </span><span class="lineCov"> 278 : log_tag(&quot;command:%s\n&quot;, command);</span></a>
<a name="1778"><span class="lineNum"> 1778 </span><span class="lineCov"> 4526 : for (i = 0; i &lt; argc; ++i)</span></a>
<a name="1779"><span class="lineNum"> 1779 </span><span class="lineCov"> 4248 : log_tag(&quot;argv:%u:%s\n&quot;, i, argv[i]);</span></a>
<a name="1780"><span class="lineNum"> 1780 </span><span class="lineCov"> 278 : log_flush();</span></a>
<a name="1777"><span class="lineNum"> 1777 </span><span class="lineCov"> 279 : log_tag(&quot;command:%s\n&quot;, command);</span></a>
<a name="1778"><span class="lineNum"> 1778 </span><span class="lineCov"> 4529 : for (i = 0; i &lt; argc; ++i)</span></a>
<a name="1779"><span class="lineNum"> 1779 </span><span class="lineCov"> 4250 : log_tag(&quot;argv:%u:%s\n&quot;, i, argv[i]);</span></a>
<a name="1780"><span class="lineNum"> 1780 </span><span class="lineCov"> 279 : log_flush();</span></a>
<a name="1781"><span class="lineNum"> 1781 </span> : </a>
<a name="1782"><span class="lineNum"> 1782 </span><span class="lineCov"> 278 : if (!opt.skip_self)</span></a>
<a name="1782"><span class="lineNum"> 1782 </span><span class="lineCov"> 279 : if (!opt.skip_self)</span></a>
<a name="1783"><span class="lineNum"> 1783 </span><span class="lineCov"> 1 : selftest();</span></a>
<a name="1784"><span class="lineNum"> 1784 </span> : </a>
<a name="1785"><span class="lineNum"> 1785 </span><span class="lineCov"> 278 : state_init(&amp;state);</span></a>
<a name="1785"><span class="lineNum"> 1785 </span><span class="lineCov"> 279 : state_init(&amp;state);</span></a>
<a name="1786"><span class="lineNum"> 1786 </span> : </a>
<a name="1787"><span class="lineNum"> 1787 </span> : /* read the configuration file */</a>
<a name="1788"><span class="lineNum"> 1788 </span><span class="lineCov"> 278 : state_config(&amp;state, conf, command, &amp;opt, &amp;filterlist_disk);</span></a>
<a name="1788"><span class="lineNum"> 1788 </span><span class="lineCov"> 279 : state_config(&amp;state, conf, command, &amp;opt, &amp;filterlist_disk);</span></a>
<a name="1789"><span class="lineNum"> 1789 </span> : </a>
<a name="1790"><span class="lineNum"> 1790 </span> : /* set the raid mode */</a>
<a name="1791"><span class="lineNum"> 1791 </span><span class="lineCov"> 277 : raid_mode(state.raid_mode);</span></a>
<a name="1791"><span class="lineNum"> 1791 </span><span class="lineCov"> 278 : raid_mode(state.raid_mode);</span></a>
<a name="1792"><span class="lineNum"> 1792 </span> : </a>
<a name="1793"><span class="lineNum"> 1793 </span> : #if HAVE_LOCKFILE</a>
<a name="1794"><span class="lineNum"> 1794 </span> : /* create the lock file */</a>
<a name="1795"><span class="lineNum"> 1795 </span><span class="lineCov"> 277 : if (!opt.skip_lock &amp;&amp; state.lockfile[0]) {</span></a>
<a name="1795"><span class="lineNum"> 1795 </span><span class="lineCov"> 278 : if (!opt.skip_lock &amp;&amp; state.lockfile[0]) {</span></a>
<a name="1796"><span class="lineNum"> 1796 </span><span class="lineCov"> 273 : lock = lock_lock(state.lockfile);</span></a>
<a name="1797"><span class="lineNum"> 1797 </span><span class="lineCov"> 273 : if (lock == -1) {</span></a>
<a name="1798"><span class="lineNum"> 1798 </span> : /* LCOV_EXCL_START */</a>
@ -1872,8 +1872,8 @@
<a name="1810"><span class="lineNum"> 1810 </span> : (void)lock;</a>
<a name="1811"><span class="lineNum"> 1811 </span> : #endif</a>
<a name="1812"><span class="lineNum"> 1812 </span> : </a>
<a name="1813"><span class="lineNum"> 1813 </span><span class="lineCov"> 277 : ret = 0;</span></a>
<a name="1814"><span class="lineNum"> 1814 </span><span class="lineCov"> 277 : if (operation == OPERATION_DIFF) {</span></a>
<a name="1813"><span class="lineNum"> 1813 </span><span class="lineCov"> 278 : ret = 0;</span></a>
<a name="1814"><span class="lineNum"> 1814 </span><span class="lineCov"> 278 : if (operation == OPERATION_DIFF) {</span></a>
<a name="1815"><span class="lineNum"> 1815 </span><span class="lineCov"> 8 : state_read(&amp;state);</span></a>
<a name="1816"><span class="lineNum"> 1816 </span> : </a>
<a name="1817"><span class="lineNum"> 1817 </span> : /* refresh the size info to log correct info */</a>
@ -1884,7 +1884,7 @@
<a name="1822"><span class="lineNum"> 1822 </span> : /* abort if sync needed */</a>
<a name="1823"><span class="lineNum"> 1823 </span><span class="lineCov"> 8 : if (ret &gt; 0)</span></a>
<a name="1824"><span class="lineNum"> 1824 </span><span class="lineCov"> 7 : exit(EXIT_SYNC_NEEDED);</span></a>
<a name="1825"><span class="lineNum"> 1825 </span><span class="lineCov"> 269 : } else if (operation == OPERATION_SYNC) {</span></a>
<a name="1825"><span class="lineNum"> 1825 </span><span class="lineCov"> 270 : } else if (operation == OPERATION_SYNC) {</span></a>
<a name="1826"><span class="lineNum"> 1826 </span> : </a>
<a name="1827"><span class="lineNum"> 1827 </span> : /* in the next state read ensures to clear all the past hashes in case */</a>
<a name="1828"><span class="lineNum"> 1828 </span> : /* we are reading from an incomplete sync */</a>
@ -1962,7 +1962,7 @@
<a name="1900"><span class="lineNum"> 1900 </span><span class="lineNoCov"> 0 : sleep(2);</span></a>
<a name="1901"><span class="lineNum"> 1901 </span> : </a>
<a name="1902"><span class="lineNum"> 1902 </span><span class="lineCov"> 92 : ret = state_sync(&amp;state, blockstart, blockcount);</span></a>
<a name="1903"><span class="lineNum"> 1903 </span><span class="lineCov"> 175 : } else if (operation == OPERATION_DRY) {</span></a>
<a name="1903"><span class="lineNum"> 1903 </span><span class="lineCov"> 176 : } else if (operation == OPERATION_DRY) {</span></a>
<a name="1904"><span class="lineNum"> 1904 </span><span class="lineCov"> 3 : state_read(&amp;state);</span></a>
<a name="1905"><span class="lineNum"> 1905 </span> : </a>
<a name="1906"><span class="lineNum"> 1906 </span> : /* refresh the size info to log correct info */</a>
@ -1978,7 +1978,7 @@
<a name="1916"><span class="lineNum"> 1916 </span><span class="lineCov"> 3 : signal_init();</span></a>
<a name="1917"><span class="lineNum"> 1917 </span> : </a>
<a name="1918"><span class="lineNum"> 1918 </span><span class="lineCov"> 3 : ret = state_dry(&amp;state, blockstart, blockcount);</span></a>
<a name="1919"><span class="lineNum"> 1919 </span><span class="lineCov"> 172 : } else if (operation == OPERATION_REHASH) {</span></a>
<a name="1919"><span class="lineNum"> 1919 </span><span class="lineCov"> 173 : } else if (operation == OPERATION_REHASH) {</span></a>
<a name="1920"><span class="lineNum"> 1920 </span><span class="lineCov"> 1 : state_read(&amp;state);</span></a>
<a name="1921"><span class="lineNum"> 1921 </span> : </a>
<a name="1922"><span class="lineNum"> 1922 </span> : /* intercept signals while operating */</a>
@ -1989,7 +1989,7 @@
<a name="1927"><span class="lineNum"> 1927 </span> : /* save the new state if required */</a>
<a name="1928"><span class="lineNum"> 1928 </span><span class="lineCov"> 1 : if (state.need_write)</span></a>
<a name="1929"><span class="lineNum"> 1929 </span><span class="lineCov"> 1 : state_write(&amp;state);</span></a>
<a name="1930"><span class="lineNum"> 1930 </span><span class="lineCov"> 171 : } else if (operation == OPERATION_SCRUB) {</span></a>
<a name="1930"><span class="lineNum"> 1930 </span><span class="lineCov"> 172 : } else if (operation == OPERATION_SCRUB) {</span></a>
<a name="1931"><span class="lineNum"> 1931 </span><span class="lineCov"> 11 : state_read(&amp;state);</span></a>
<a name="1932"><span class="lineNum"> 1932 </span> : </a>
<a name="1933"><span class="lineNum"> 1933 </span> : /* refresh the size info before the content write */</a>
@ -2001,7 +2001,7 @@
<a name="1939"><span class="lineNum"> 1939 </span><span class="lineCov"> 11 : signal_init();</span></a>
<a name="1940"><span class="lineNum"> 1940 </span> : </a>
<a name="1941"><span class="lineNum"> 1941 </span><span class="lineCov"> 11 : ret = state_scrub(&amp;state, plan100, olderthan);</span></a>
<a name="1942"><span class="lineNum"> 1942 </span><span class="lineCov"> 160 : } else if (operation == OPERATION_REWRITE) {</span></a>
<a name="1942"><span class="lineNum"> 1942 </span><span class="lineCov"> 161 : } else if (operation == OPERATION_REWRITE) {</span></a>
<a name="1943"><span class="lineNum"> 1943 </span><span class="lineCov"> 1 : state_read(&amp;state);</span></a>
<a name="1944"><span class="lineNum"> 1944 </span> : </a>
<a name="1945"><span class="lineNum"> 1945 </span> : /* intercept signals while operating */</a>
@ -2010,11 +2010,11 @@
<a name="1948"><span class="lineNum"> 1948 </span><span class="lineCov"> 1 : state_write(&amp;state);</span></a>
<a name="1949"><span class="lineNum"> 1949 </span> : </a>
<a name="1950"><span class="lineNum"> 1950 </span><span class="lineCov"> 1 : memory();</span></a>
<a name="1951"><span class="lineNum"> 1951 </span><span class="lineCov"> 159 : } else if (operation == OPERATION_READ) {</span></a>
<a name="1951"><span class="lineNum"> 1951 </span><span class="lineCov"> 160 : } else if (operation == OPERATION_READ) {</span></a>
<a name="1952"><span class="lineNum"> 1952 </span><span class="lineCov"> 1 : state_read(&amp;state);</span></a>
<a name="1953"><span class="lineNum"> 1953 </span> : </a>
<a name="1954"><span class="lineNum"> 1954 </span><span class="lineCov"> 1 : memory();</span></a>
<a name="1955"><span class="lineNum"> 1955 </span><span class="lineCov"> 158 : } else if (operation == OPERATION_TOUCH) {</span></a>
<a name="1955"><span class="lineNum"> 1955 </span><span class="lineCov"> 159 : } else if (operation == OPERATION_TOUCH) {</span></a>
<a name="1956"><span class="lineNum"> 1956 </span><span class="lineCov"> 1 : state_read(&amp;state);</span></a>
<a name="1957"><span class="lineNum"> 1957 </span> : </a>
<a name="1958"><span class="lineNum"> 1958 </span><span class="lineCov"> 1 : memory();</span></a>
@ -2025,16 +2025,16 @@
<a name="1963"><span class="lineNum"> 1963 </span><span class="lineCov"> 1 : signal_init();</span></a>
<a name="1964"><span class="lineNum"> 1964 </span> : </a>
<a name="1965"><span class="lineNum"> 1965 </span><span class="lineCov"> 1 : state_write(&amp;state);</span></a>
<a name="1966"><span class="lineNum"> 1966 </span><span class="lineCov"> 157 : } else if (operation == OPERATION_SPINUP) {</span></a>
<a name="1966"><span class="lineNum"> 1966 </span><span class="lineCov"> 158 : } else if (operation == OPERATION_SPINUP) {</span></a>
<a name="1967"><span class="lineNum"> 1967 </span><span class="lineCov"> 1 : state_device(&amp;state, DEVICE_UP, &amp;filterlist_disk);</span></a>
<a name="1968"><span class="lineNum"> 1968 </span><span class="lineCov"> 156 : } else if (operation == OPERATION_SPINDOWN) {</span></a>
<a name="1968"><span class="lineNum"> 1968 </span><span class="lineCov"> 157 : } else if (operation == OPERATION_SPINDOWN) {</span></a>
<a name="1969"><span class="lineNum"> 1969 </span><span class="lineCov"> 1 : state_device(&amp;state, DEVICE_DOWN, &amp;filterlist_disk);</span></a>
<a name="1970"><span class="lineNum"> 1970 </span><span class="lineCov"> 155 : } else if (operation == OPERATION_DEVICES) {</span></a>
<a name="1970"><span class="lineNum"> 1970 </span><span class="lineCov"> 156 : } else if (operation == OPERATION_DEVICES) {</span></a>
<a name="1971"><span class="lineNum"> 1971 </span><span class="lineCov"> 1 : state_device(&amp;state, DEVICE_LIST, 0);</span></a>
<a name="1972"><span class="lineNum"> 1972 </span><span class="lineCov"> 154 : } else if (operation == OPERATION_SMART) {</span></a>
<a name="1972"><span class="lineNum"> 1972 </span><span class="lineCov"> 155 : } else if (operation == OPERATION_SMART) {</span></a>
<a name="1973"><span class="lineNum"> 1973 </span><span class="lineCov"> 1 : state_device(&amp;state, DEVICE_SMART, 0);</span></a>
<a name="1974"><span class="lineNum"> 1974 </span><span class="lineCov"> 153 : } else if (operation == OPERATION_PROBE) {</span></a>
<a name="1975"><span class="lineNum"> 1975 </span><span class="lineCov"> 2 : state_device(&amp;state, DEVICE_PROBE, 0);</span></a>
<a name="1974"><span class="lineNum"> 1974 </span><span class="lineCov"> 154 : } else if (operation == OPERATION_PROBE) {</span></a>
<a name="1975"><span class="lineNum"> 1975 </span><span class="lineCov"> 3 : state_device(&amp;state, DEVICE_PROBE, 0);</span></a>
<a name="1976"><span class="lineNum"> 1976 </span><span class="lineCov"> 151 : } else if (operation == OPERATION_STATUS) {</span></a>
<a name="1977"><span class="lineNum"> 1977 </span><span class="lineCov"> 15 : state_read(&amp;state);</span></a>
<a name="1978"><span class="lineNum"> 1978 </span> : </a>
@ -2100,10 +2100,10 @@
<a name="2038"><span class="lineNum"> 2038 </span> : }</a>
<a name="2039"><span class="lineNum"> 2039 </span> : </a>
<a name="2040"><span class="lineNum"> 2040 </span> : /* close log file */</a>
<a name="2041"><span class="lineNum"> 2041 </span><span class="lineCov"> 267 : log_close(log_file);</span></a>
<a name="2041"><span class="lineNum"> 2041 </span><span class="lineCov"> 268 : log_close(log_file);</span></a>
<a name="2042"><span class="lineNum"> 2042 </span> : </a>
<a name="2043"><span class="lineNum"> 2043 </span> : #if HAVE_LOCKFILE</a>
<a name="2044"><span class="lineNum"> 2044 </span><span class="lineCov"> 267 : if (!opt.skip_lock &amp;&amp; state.lockfile[0]) {</span></a>
<a name="2044"><span class="lineNum"> 2044 </span><span class="lineCov"> 268 : if (!opt.skip_lock &amp;&amp; state.lockfile[0]) {</span></a>
<a name="2045"><span class="lineNum"> 2045 </span><span class="lineCov"> 264 : if (lock_unlock(lock) == -1) {</span></a>
<a name="2046"><span class="lineNum"> 2046 </span> : /* LCOV_EXCL_START */</a>
<a name="2047"><span class="lineNum"> 2047 </span> : log_fatal(errno, &quot;Failed to close the lock file '%s'. %s.\n&quot;, state.lockfile, strerror(errno));</a>
@ -2113,20 +2113,20 @@
<a name="2051"><span class="lineNum"> 2051 </span> : }</a>
<a name="2052"><span class="lineNum"> 2052 </span> : #endif</a>
<a name="2053"><span class="lineNum"> 2053 </span> : </a>
<a name="2054"><span class="lineNum"> 2054 </span><span class="lineCov"> 267 : state_done(&amp;state);</span></a>
<a name="2055"><span class="lineNum"> 2055 </span><span class="lineCov"> 267 : tommy_list_foreach(&amp;filterlist_file, (tommy_foreach_func*)filter_free);</span></a>
<a name="2056"><span class="lineNum"> 2056 </span><span class="lineCov"> 267 : tommy_list_foreach(&amp;filterlist_disk, (tommy_foreach_func*)filter_free);</span></a>
<a name="2054"><span class="lineNum"> 2054 </span><span class="lineCov"> 268 : state_done(&amp;state);</span></a>
<a name="2055"><span class="lineNum"> 2055 </span><span class="lineCov"> 268 : tommy_list_foreach(&amp;filterlist_file, (tommy_foreach_func*)filter_free);</span></a>
<a name="2056"><span class="lineNum"> 2056 </span><span class="lineCov"> 268 : tommy_list_foreach(&amp;filterlist_disk, (tommy_foreach_func*)filter_free);</span></a>
<a name="2057"><span class="lineNum"> 2057 </span> : </a>
<a name="2058"><span class="lineNum"> 2058 </span><span class="lineCov"> 267 : os_done();</span></a>
<a name="2059"><span class="lineNum"> 2059 </span><span class="lineCov"> 267 : lock_done();</span></a>
<a name="2058"><span class="lineNum"> 2058 </span><span class="lineCov"> 268 : os_done();</span></a>
<a name="2059"><span class="lineNum"> 2059 </span><span class="lineCov"> 268 : lock_done();</span></a>
<a name="2060"><span class="lineNum"> 2060 </span> : </a>
<a name="2061"><span class="lineNum"> 2061 </span> : /* abort if required */</a>
<a name="2062"><span class="lineNum"> 2062 </span><span class="lineCov"> 267 : if (ret != 0) {</span></a>
<a name="2062"><span class="lineNum"> 2062 </span><span class="lineCov"> 268 : if (ret != 0) {</span></a>
<a name="2063"><span class="lineNum"> 2063 </span> : /* LCOV_EXCL_START */</a>
<a name="2064"><span class="lineNum"> 2064 </span> : exit(EXIT_FAILURE);</a>
<a name="2065"><span class="lineNum"> 2065 </span> : /* LCOV_EXCL_STOP */</a>
<a name="2066"><span class="lineNum"> 2066 </span> : }</a>
<a name="2067"><span class="lineNum"> 2067 </span><span class="lineCov"> 255 : if (global_interrupt) {</span></a>
<a name="2067"><span class="lineNum"> 2067 </span><span class="lineCov"> 256 : if (global_interrupt) {</span></a>
<a name="2068"><span class="lineNum"> 2068 </span> : /* LCOV_EXCL_START */</a>
<a name="2069"><span class="lineNum"> 2069 </span> : #ifdef _WIN32</a>
<a name="2070"><span class="lineNum"> 2070 </span> : exit(STATUS_CONTROL_C_EXIT);</a>
@ -2143,7 +2143,7 @@
<a name="2081"><span class="lineNum"> 2081 </span> : /* LCOV_EXCL_STOP */</a>
<a name="2082"><span class="lineNum"> 2082 </span> : }</a>
<a name="2083"><span class="lineNum"> 2083 </span> : </a>
<a name="2084"><span class="lineNum"> 2084 </span><span class="lineCov"> 255 : return EXIT_SUCCESS;</span></a>
<a name="2084"><span class="lineNum"> 2084 </span><span class="lineCov"> 256 : return EXIT_SUCCESS;</span></a>
<a name="2085"><span class="lineNum"> 2085 </span> : }</a>
<a name="2086"><span class="lineNum"> 2086 </span> : </a>
</pre>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="speed.c.gcov.html#29">diffgettimeofday</a></td>
<td class="coverFnHi">1643</td>
<td class="coverFnHi">1617</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="speed.c.gcov.html#29">diffgettimeofday</a></td>
<td class="coverFnHi">1643</td>
<td class="coverFnHi">1617</td>
</tr>
<tr>
<td class="coverFn"><a href="speed.c.gcov.html#68">speed</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -90,14 +90,14 @@
<a name="28"><span class="lineNum"> 28 </span> : /**</a>
<a name="29"><span class="lineNum"> 29 </span> : * Differential us of two timeval.</a>
<a name="30"><span class="lineNum"> 30 </span> : */</a>
<a name="31"><span class="lineNum"> 31 </span><span class="lineCov"> 1643 : static int64_t diffgettimeofday(struct timeval* start, struct timeval* stop)</span></a>
<a name="31"><span class="lineNum"> 31 </span><span class="lineCov"> 1617 : static int64_t diffgettimeofday(struct timeval* start, struct timeval* stop)</span></a>
<a name="32"><span class="lineNum"> 32 </span> : {</a>
<a name="33"><span class="lineNum"> 33 </span> : int64_t d;</a>
<a name="34"><span class="lineNum"> 34 </span> : </a>
<a name="35"><span class="lineNum"> 35 </span><span class="lineCov"> 1643 : d = 1000000LL * (stop-&gt;tv_sec - start-&gt;tv_sec);</span></a>
<a name="36"><span class="lineNum"> 36 </span><span class="lineCov"> 1643 : d += stop-&gt;tv_usec - start-&gt;tv_usec;</span></a>
<a name="35"><span class="lineNum"> 35 </span><span class="lineCov"> 1617 : d = 1000000LL * (stop-&gt;tv_sec - start-&gt;tv_sec);</span></a>
<a name="36"><span class="lineNum"> 36 </span><span class="lineCov"> 1617 : d += stop-&gt;tv_usec - start-&gt;tv_usec;</span></a>
<a name="37"><span class="lineNum"> 37 </span> : </a>
<a name="38"><span class="lineNum"> 38 </span><span class="lineCov"> 1643 : return d;</span></a>
<a name="38"><span class="lineNum"> 38 </span><span class="lineCov"> 1617 : return d;</span></a>
<a name="39"><span class="lineNum"> 39 </span> : }</a>
<a name="40"><span class="lineNum"> 40 </span> : </a>
<a name="41"><span class="lineNum"> 41 </span> : /**</a>
@ -233,10 +233,10 @@
<a name="171"><span class="lineNum"> 171 </span><span class="lineCov"> 4 : printf(&quot;%8s&quot;, &quot;memset&quot;);</span></a>
<a name="172"><span class="lineNum"> 172 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
<a name="173"><span class="lineNum"> 173 </span> : </a>
<a name="174"><span class="lineNum"> 174 </span><span class="lineCov"> 1292 : SPEED_START {</span></a>
<a name="175"><span class="lineNum"> 175 </span><span class="lineCov"> 5814 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="176"><span class="lineNum"> 176 </span><span class="lineCov"> 5168 : memset(v[j], j, size);</span></a>
<a name="177"><span class="lineNum"> 177 </span><span class="lineCov"> 646 : } SPEED_STOP</span></a>
<a name="174"><span class="lineNum"> 174 </span><span class="lineCov"> 1284 : SPEED_START {</span></a>
<a name="175"><span class="lineNum"> 175 </span><span class="lineCov"> 5778 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="176"><span class="lineNum"> 176 </span><span class="lineCov"> 5136 : memset(v[j], j, size);</span></a>
<a name="177"><span class="lineNum"> 177 </span><span class="lineCov"> 642 : } SPEED_STOP</span></a>
<a name="178"><span class="lineNum"> 178 </span> : </a>
<a name="179"><span class="lineNum"> 179 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="180"><span class="lineNum"> 180 </span><span class="lineCov"> 4 : printf(&quot;\n&quot;);</span></a>
@ -248,10 +248,10 @@
<a name="186"><span class="lineNum"> 186 </span><span class="lineCov"> 4 : printf(&quot;%8s&quot;, &quot;table&quot;);</span></a>
<a name="187"><span class="lineNum"> 187 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
<a name="188"><span class="lineNum"> 188 </span> : </a>
<a name="189"><span class="lineNum"> 189 </span><span class="lineCov"> 74 : SPEED_START {</span></a>
<a name="190"><span class="lineNum"> 190 </span><span class="lineCov"> 333 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="191"><span class="lineNum"> 191 </span><span class="lineCov"> 296 : side_effect += crc32c_gen(0, v[j], size);</span></a>
<a name="192"><span class="lineNum"> 192 </span><span class="lineCov"> 37 : } SPEED_STOP</span></a>
<a name="189"><span class="lineNum"> 189 </span><span class="lineCov"> 62 : SPEED_START {</span></a>
<a name="190"><span class="lineNum"> 190 </span><span class="lineCov"> 279 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="191"><span class="lineNum"> 191 </span><span class="lineCov"> 248 : side_effect += crc32c_gen(0, v[j], size);</span></a>
<a name="192"><span class="lineNum"> 192 </span><span class="lineCov"> 31 : } SPEED_STOP</span></a>
<a name="193"><span class="lineNum"> 193 </span> : </a>
<a name="194"><span class="lineNum"> 194 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="195"><span class="lineNum"> 195 </span><span class="lineCov"> 4 : printf(&quot;\n&quot;);</span></a>
@ -261,10 +261,10 @@
<a name="199"><span class="lineNum"> 199 </span> : </a>
<a name="200"><span class="lineNum"> 200 </span> : #if HAVE_SSE42</a>
<a name="201"><span class="lineNum"> 201 </span><span class="lineCov"> 4 : if (raid_cpu_has_crc32()) {</span></a>
<a name="202"><span class="lineNum"> 202 </span><span class="lineCov"> 82 : SPEED_START {</span></a>
<a name="203"><span class="lineNum"> 203 </span><span class="lineCov"> 369 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="204"><span class="lineNum"> 204 </span><span class="lineCov"> 328 : side_effect += crc32c_x86(0, v[j], size);</span></a>
<a name="205"><span class="lineNum"> 205 </span><span class="lineCov"> 41 : } SPEED_STOP</span></a>
<a name="202"><span class="lineNum"> 202 </span><span class="lineCov"> 92 : SPEED_START {</span></a>
<a name="203"><span class="lineNum"> 203 </span><span class="lineCov"> 414 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="204"><span class="lineNum"> 204 </span><span class="lineCov"> 368 : side_effect += crc32c_x86(0, v[j], size);</span></a>
<a name="205"><span class="lineNum"> 205 </span><span class="lineCov"> 46 : } SPEED_STOP</span></a>
<a name="206"><span class="lineNum"> 206 </span> : </a>
<a name="207"><span class="lineNum"> 207 </span><span class="lineCov"> 2 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="208"><span class="lineNum"> 208 </span> : }</a>
@ -295,26 +295,26 @@
<a name="233"><span class="lineNum"> 233 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="234"><span class="lineNum"> 234 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
<a name="235"><span class="lineNum"> 235 </span> : </a>
<a name="236"><span class="lineNum"> 236 </span><span class="lineCov"> 36 : SPEED_START {</span></a>
<a name="237"><span class="lineNum"> 237 </span><span class="lineCov"> 162 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="238"><span class="lineNum"> 238 </span><span class="lineCov"> 144 : memhash(HASH_SPOOKY2, seed, digest, v[j], size);</span></a>
<a name="239"><span class="lineNum"> 239 </span><span class="lineCov"> 18 : } SPEED_STOP</span></a>
<a name="236"><span class="lineNum"> 236 </span><span class="lineCov"> 42 : SPEED_START {</span></a>
<a name="237"><span class="lineNum"> 237 </span><span class="lineCov"> 189 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="238"><span class="lineNum"> 238 </span><span class="lineCov"> 168 : memhash(HASH_SPOOKY2, seed, digest, v[j], size);</span></a>
<a name="239"><span class="lineNum"> 239 </span><span class="lineCov"> 21 : } SPEED_STOP</span></a>
<a name="240"><span class="lineNum"> 240 </span> : </a>
<a name="241"><span class="lineNum"> 241 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="242"><span class="lineNum"> 242 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
<a name="243"><span class="lineNum"> 243 </span> : </a>
<a name="244"><span class="lineNum"> 244 </span><span class="lineCov"> 26 : SPEED_START {</span></a>
<a name="245"><span class="lineNum"> 245 </span><span class="lineCov"> 117 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="246"><span class="lineNum"> 246 </span><span class="lineCov"> 104 : memhash(HASH_METRO, seed, digest, v[j], size);</span></a>
<a name="247"><span class="lineNum"> 247 </span><span class="lineCov"> 13 : } SPEED_STOP</span></a>
<a name="244"><span class="lineNum"> 244 </span><span class="lineCov"> 32 : SPEED_START {</span></a>
<a name="245"><span class="lineNum"> 245 </span><span class="lineCov"> 144 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="246"><span class="lineNum"> 246 </span><span class="lineCov"> 128 : memhash(HASH_METRO, seed, digest, v[j], size);</span></a>
<a name="247"><span class="lineNum"> 247 </span><span class="lineCov"> 16 : } SPEED_STOP</span></a>
<a name="248"><span class="lineNum"> 248 </span> : </a>
<a name="249"><span class="lineNum"> 249 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="250"><span class="lineNum"> 250 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
<a name="251"><span class="lineNum"> 251 </span> : </a>
<a name="252"><span class="lineNum"> 252 </span><span class="lineCov"> 32 : SPEED_START {</span></a>
<a name="253"><span class="lineNum"> 253 </span><span class="lineCov"> 144 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="254"><span class="lineNum"> 254 </span><span class="lineCov"> 128 : memhash(HASH_MUSEAIR, seed, digest, v[j], size);</span></a>
<a name="255"><span class="lineNum"> 255 </span><span class="lineCov"> 16 : } SPEED_STOP</span></a>
<a name="252"><span class="lineNum"> 252 </span><span class="lineCov"> 34 : SPEED_START {</span></a>
<a name="253"><span class="lineNum"> 253 </span><span class="lineCov"> 153 : for (j = 0; j &lt; nd; ++j)</span></a>
<a name="254"><span class="lineNum"> 254 </span><span class="lineCov"> 136 : memhash(HASH_MUSEAIR, seed, digest, v[j], size);</span></a>
<a name="255"><span class="lineNum"> 255 </span><span class="lineCov"> 17 : } SPEED_STOP</span></a>
<a name="256"><span class="lineNum"> 256 </span> : </a>
<a name="257"><span class="lineNum"> 257 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="258"><span class="lineNum"> 258 </span><span class="lineCov"> 4 : printf(&quot;\n&quot;);</span></a>
@ -350,16 +350,16 @@
<a name="288"><span class="lineNum"> 288 </span> : </a>
<a name="289"><span class="lineNum"> 289 </span><span class="lineCov"> 4 : printf(&quot;%8s&quot;, &quot;&quot;);</span></a>
<a name="290"><span class="lineNum"> 290 </span> : </a>
<a name="291"><span class="lineNum"> 291 </span><span class="lineCov"> 168 : SPEED_START {</span></a>
<a name="292"><span class="lineNum"> 292 </span><span class="lineCov"> 84 : raid_gen1_int32(nd, size, v);</span></a>
<a name="293"><span class="lineNum"> 293 </span><span class="lineCov"> 84 : } SPEED_STOP</span></a>
<a name="291"><span class="lineNum"> 291 </span><span class="lineCov"> 156 : SPEED_START {</span></a>
<a name="292"><span class="lineNum"> 292 </span><span class="lineCov"> 78 : raid_gen1_int32(nd, size, v);</span></a>
<a name="293"><span class="lineNum"> 293 </span><span class="lineCov"> 78 : } SPEED_STOP</span></a>
<a name="294"><span class="lineNum"> 294 </span> : </a>
<a name="295"><span class="lineNum"> 295 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="296"><span class="lineNum"> 296 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
<a name="297"><span class="lineNum"> 297 </span> : </a>
<a name="298"><span class="lineNum"> 298 </span><span class="lineCov"> 334 : SPEED_START {</span></a>
<a name="299"><span class="lineNum"> 299 </span><span class="lineCov"> 167 : raid_gen1_int64(nd, size, v);</span></a>
<a name="300"><span class="lineNum"> 300 </span><span class="lineCov"> 167 : } SPEED_STOP</span></a>
<a name="298"><span class="lineNum"> 298 </span><span class="lineCov"> 312 : SPEED_START {</span></a>
<a name="299"><span class="lineNum"> 299 </span><span class="lineCov"> 156 : raid_gen1_int64(nd, size, v);</span></a>
<a name="300"><span class="lineNum"> 300 </span><span class="lineCov"> 156 : } SPEED_STOP</span></a>
<a name="301"><span class="lineNum"> 301 </span> : </a>
<a name="302"><span class="lineNum"> 302 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="303"><span class="lineNum"> 303 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
@ -367,9 +367,9 @@
<a name="305"><span class="lineNum"> 305 </span> : #ifdef CONFIG_X86</a>
<a name="306"><span class="lineNum"> 306 </span> : #ifdef CONFIG_SSE2</a>
<a name="307"><span class="lineNum"> 307 </span><span class="lineCov"> 4 : if (raid_cpu_has_sse2()) {</span></a>
<a name="308"><span class="lineNum"> 308 </span><span class="lineCov"> 100 : SPEED_START {</span></a>
<a name="309"><span class="lineNum"> 309 </span><span class="lineCov"> 50 : raid_gen1_sse2(nd, size, v);</span></a>
<a name="310"><span class="lineNum"> 310 </span><span class="lineCov"> 50 : } SPEED_STOP</span></a>
<a name="308"><span class="lineNum"> 308 </span><span class="lineCov"> 96 : SPEED_START {</span></a>
<a name="309"><span class="lineNum"> 309 </span><span class="lineCov"> 48 : raid_gen1_sse2(nd, size, v);</span></a>
<a name="310"><span class="lineNum"> 310 </span><span class="lineCov"> 48 : } SPEED_STOP</span></a>
<a name="311"><span class="lineNum"> 311 </span> : </a>
<a name="312"><span class="lineNum"> 312 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="313"><span class="lineNum"> 313 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
@ -385,9 +385,9 @@
<a name="323"><span class="lineNum"> 323 </span> : #endif</a>
<a name="324"><span class="lineNum"> 324 </span> : #ifdef CONFIG_AVX2</a>
<a name="325"><span class="lineNum"> 325 </span><span class="lineCov"> 4 : if (raid_cpu_has_avx2()) {</span></a>
<a name="326"><span class="lineNum"> 326 </span><span class="lineCov"> 24 : SPEED_START {</span></a>
<a name="327"><span class="lineNum"> 327 </span><span class="lineCov"> 12 : raid_gen1_avx2(nd, size, v);</span></a>
<a name="328"><span class="lineNum"> 328 </span><span class="lineCov"> 12 : } SPEED_STOP</span></a>
<a name="326"><span class="lineNum"> 326 </span><span class="lineCov"> 22 : SPEED_START {</span></a>
<a name="327"><span class="lineNum"> 327 </span><span class="lineCov"> 11 : raid_gen1_avx2(nd, size, v);</span></a>
<a name="328"><span class="lineNum"> 328 </span><span class="lineCov"> 11 : } SPEED_STOP</span></a>
<a name="329"><span class="lineNum"> 329 </span> : </a>
<a name="330"><span class="lineNum"> 330 </span><span class="lineCov"> 1 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="331"><span class="lineNum"> 331 </span><span class="lineCov"> 1 : fflush(stdout);</span></a>
@ -403,16 +403,16 @@
<a name="341"><span class="lineNum"> 341 </span> : </a>
<a name="342"><span class="lineNum"> 342 </span><span class="lineCov"> 4 : printf(&quot;%8s&quot;, &quot;&quot;);</span></a>
<a name="343"><span class="lineNum"> 343 </span> : </a>
<a name="344"><span class="lineNum"> 344 </span><span class="lineCov"> 80 : SPEED_START {</span></a>
<a name="345"><span class="lineNum"> 345 </span><span class="lineCov"> 40 : raid_gen2_int32(nd, size, v);</span></a>
<a name="346"><span class="lineNum"> 346 </span><span class="lineCov"> 40 : } SPEED_STOP</span></a>
<a name="344"><span class="lineNum"> 344 </span><span class="lineCov"> 84 : SPEED_START {</span></a>
<a name="345"><span class="lineNum"> 345 </span><span class="lineCov"> 42 : raid_gen2_int32(nd, size, v);</span></a>
<a name="346"><span class="lineNum"> 346 </span><span class="lineCov"> 42 : } SPEED_STOP</span></a>
<a name="347"><span class="lineNum"> 347 </span> : </a>
<a name="348"><span class="lineNum"> 348 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="349"><span class="lineNum"> 349 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
<a name="350"><span class="lineNum"> 350 </span> : </a>
<a name="351"><span class="lineNum"> 351 </span><span class="lineCov"> 164 : SPEED_START {</span></a>
<a name="352"><span class="lineNum"> 352 </span><span class="lineCov"> 82 : raid_gen2_int64(nd, size, v);</span></a>
<a name="353"><span class="lineNum"> 353 </span><span class="lineCov"> 82 : } SPEED_STOP</span></a>
<a name="351"><span class="lineNum"> 351 </span><span class="lineCov"> 156 : SPEED_START {</span></a>
<a name="352"><span class="lineNum"> 352 </span><span class="lineCov"> 78 : raid_gen2_int64(nd, size, v);</span></a>
<a name="353"><span class="lineNum"> 353 </span><span class="lineCov"> 78 : } SPEED_STOP</span></a>
<a name="354"><span class="lineNum"> 354 </span> : </a>
<a name="355"><span class="lineNum"> 355 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="356"><span class="lineNum"> 356 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
@ -444,9 +444,9 @@
<a name="382"><span class="lineNum"> 382 </span> : #endif</a>
<a name="383"><span class="lineNum"> 383 </span> : #ifdef CONFIG_AVX2</a>
<a name="384"><span class="lineNum"> 384 </span><span class="lineCov"> 4 : if (raid_cpu_has_avx2()) {</span></a>
<a name="385"><span class="lineNum"> 385 </span><span class="lineCov"> 6 : SPEED_START {</span></a>
<a name="386"><span class="lineNum"> 386 </span><span class="lineCov"> 3 : raid_gen2_avx2(nd, size, v);</span></a>
<a name="387"><span class="lineNum"> 387 </span><span class="lineCov"> 3 : } SPEED_STOP</span></a>
<a name="385"><span class="lineNum"> 385 </span><span class="lineCov"> 4 : SPEED_START {</span></a>
<a name="386"><span class="lineNum"> 386 </span><span class="lineCov"> 2 : raid_gen2_avx2(nd, size, v);</span></a>
<a name="387"><span class="lineNum"> 387 </span><span class="lineCov"> 2 : } SPEED_STOP</span></a>
<a name="388"><span class="lineNum"> 388 </span> : </a>
<a name="389"><span class="lineNum"> 389 </span><span class="lineCov"> 1 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="390"><span class="lineNum"> 390 </span><span class="lineCov"> 1 : fflush(stdout);</span></a>
@ -469,9 +469,9 @@
<a name="407"><span class="lineNum"> 407 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="408"><span class="lineNum"> 408 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
<a name="409"><span class="lineNum"> 409 </span> : </a>
<a name="410"><span class="lineNum"> 410 </span><span class="lineCov"> 98 : SPEED_START {</span></a>
<a name="411"><span class="lineNum"> 411 </span><span class="lineCov"> 49 : raid_genz_int64(nd, size, v);</span></a>
<a name="412"><span class="lineNum"> 412 </span><span class="lineCov"> 49 : } SPEED_STOP</span></a>
<a name="410"><span class="lineNum"> 410 </span><span class="lineCov"> 102 : SPEED_START {</span></a>
<a name="411"><span class="lineNum"> 411 </span><span class="lineCov"> 51 : raid_genz_int64(nd, size, v);</span></a>
<a name="412"><span class="lineNum"> 412 </span><span class="lineCov"> 51 : } SPEED_STOP</span></a>
<a name="413"><span class="lineNum"> 413 </span> : </a>
<a name="414"><span class="lineNum"> 414 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="415"><span class="lineNum"> 415 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
@ -479,9 +479,9 @@
<a name="417"><span class="lineNum"> 417 </span> : #ifdef CONFIG_X86</a>
<a name="418"><span class="lineNum"> 418 </span> : #ifdef CONFIG_SSE2</a>
<a name="419"><span class="lineNum"> 419 </span><span class="lineCov"> 4 : if (raid_cpu_has_sse2()) {</span></a>
<a name="420"><span class="lineNum"> 420 </span><span class="lineCov"> 24 : SPEED_START {</span></a>
<a name="421"><span class="lineNum"> 421 </span><span class="lineCov"> 12 : raid_genz_sse2(nd, size, v);</span></a>
<a name="422"><span class="lineNum"> 422 </span><span class="lineCov"> 12 : } SPEED_STOP</span></a>
<a name="420"><span class="lineNum"> 420 </span><span class="lineCov"> 20 : SPEED_START {</span></a>
<a name="421"><span class="lineNum"> 421 </span><span class="lineCov"> 10 : raid_genz_sse2(nd, size, v);</span></a>
<a name="422"><span class="lineNum"> 422 </span><span class="lineCov"> 10 : } SPEED_STOP</span></a>
<a name="423"><span class="lineNum"> 423 </span> : </a>
<a name="424"><span class="lineNum"> 424 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="425"><span class="lineNum"> 425 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
@ -523,9 +523,9 @@
<a name="461"><span class="lineNum"> 461 </span><span class="lineCov"> 4 : printf(&quot;%8s&quot;, raid_gen3_tag());</span></a>
<a name="462"><span class="lineNum"> 462 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
<a name="463"><span class="lineNum"> 463 </span> : </a>
<a name="464"><span class="lineNum"> 464 </span><span class="lineCov"> 20 : SPEED_START {</span></a>
<a name="465"><span class="lineNum"> 465 </span><span class="lineCov"> 10 : raid_gen3_int8(nd, size, v);</span></a>
<a name="466"><span class="lineNum"> 466 </span><span class="lineCov"> 10 : } SPEED_STOP</span></a>
<a name="464"><span class="lineNum"> 464 </span><span class="lineCov"> 18 : SPEED_START {</span></a>
<a name="465"><span class="lineNum"> 465 </span><span class="lineCov"> 9 : raid_gen3_int8(nd, size, v);</span></a>
<a name="466"><span class="lineNum"> 466 </span><span class="lineCov"> 9 : } SPEED_STOP</span></a>
<a name="467"><span class="lineNum"> 467 </span> : </a>
<a name="468"><span class="lineNum"> 468 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="469"><span class="lineNum"> 469 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
@ -546,9 +546,9 @@
<a name="484"><span class="lineNum"> 484 </span> : #ifdef CONFIG_X86</a>
<a name="485"><span class="lineNum"> 485 </span> : #ifdef CONFIG_SSSE3</a>
<a name="486"><span class="lineNum"> 486 </span><span class="lineCov"> 4 : if (raid_cpu_has_ssse3()) {</span></a>
<a name="487"><span class="lineNum"> 487 </span><span class="lineCov"> 18 : SPEED_START {</span></a>
<a name="488"><span class="lineNum"> 488 </span><span class="lineCov"> 9 : raid_gen3_ssse3(nd, size, v);</span></a>
<a name="489"><span class="lineNum"> 489 </span><span class="lineCov"> 9 : } SPEED_STOP</span></a>
<a name="487"><span class="lineNum"> 487 </span><span class="lineCov"> 14 : SPEED_START {</span></a>
<a name="488"><span class="lineNum"> 488 </span><span class="lineCov"> 7 : raid_gen3_ssse3(nd, size, v);</span></a>
<a name="489"><span class="lineNum"> 489 </span><span class="lineCov"> 7 : } SPEED_STOP</span></a>
<a name="490"><span class="lineNum"> 490 </span> : </a>
<a name="491"><span class="lineNum"> 491 </span><span class="lineCov"> 3 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="492"><span class="lineNum"> 492 </span><span class="lineCov"> 3 : fflush(stdout);</span></a>
@ -716,9 +716,9 @@
<a name="654"><span class="lineNum"> 654 </span><span class="lineCov"> 4 : printf(&quot;%8s&quot;, raid_gen6_tag());</span></a>
<a name="655"><span class="lineNum"> 655 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
<a name="656"><span class="lineNum"> 656 </span> : </a>
<a name="657"><span class="lineNum"> 657 </span><span class="lineCov"> 16 : SPEED_START {</span></a>
<a name="658"><span class="lineNum"> 658 </span><span class="lineCov"> 8 : raid_gen6_int8(nd, size, v);</span></a>
<a name="659"><span class="lineNum"> 659 </span><span class="lineCov"> 8 : } SPEED_STOP</span></a>
<a name="657"><span class="lineNum"> 657 </span><span class="lineCov"> 14 : SPEED_START {</span></a>
<a name="658"><span class="lineNum"> 658 </span><span class="lineCov"> 7 : raid_gen6_int8(nd, size, v);</span></a>
<a name="659"><span class="lineNum"> 659 </span><span class="lineCov"> 7 : } SPEED_STOP</span></a>
<a name="660"><span class="lineNum"> 660 </span> : </a>
<a name="661"><span class="lineNum"> 661 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="662"><span class="lineNum"> 662 </span><span class="lineCov"> 4 : fflush(stdout);</span></a>
@ -749,9 +749,9 @@
<a name="687"><span class="lineNum"> 687 </span><span class="lineCov"> 3 : fflush(stdout);</span></a>
<a name="688"><span class="lineNum"> 688 </span> : </a>
<a name="689"><span class="lineNum"> 689 </span> : #ifdef CONFIG_X86_64</a>
<a name="690"><span class="lineNum"> 690 </span><span class="lineCov"> 8 : SPEED_START {</span></a>
<a name="691"><span class="lineNum"> 691 </span><span class="lineCov"> 4 : raid_gen6_ssse3ext(nd, size, v);</span></a>
<a name="692"><span class="lineNum"> 692 </span><span class="lineCov"> 4 : } SPEED_STOP</span></a>
<a name="690"><span class="lineNum"> 690 </span><span class="lineCov"> 6 : SPEED_START {</span></a>
<a name="691"><span class="lineNum"> 691 </span><span class="lineCov"> 3 : raid_gen6_ssse3ext(nd, size, v);</span></a>
<a name="692"><span class="lineNum"> 692 </span><span class="lineCov"> 3 : } SPEED_STOP</span></a>
<a name="693"><span class="lineNum"> 693 </span> : </a>
<a name="694"><span class="lineNum"> 694 </span><span class="lineCov"> 3 : printf(&quot;%8&quot; PRIu64, ds / dt);</span></a>
<a name="695"><span class="lineNum"> 695 </span><span class="lineCov"> 3 : fflush(stdout);</span></a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="spooky2.c.gcov.html#109">SpookyHash128</a></td>
<td class="coverFnHi">3888115</td>
<td class="coverFnHi">3887997</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="spooky2.c.gcov.html#109">SpookyHash128</a></td>
<td class="coverFnHi">3888115</td>
<td class="coverFnHi">3887997</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@ -170,7 +170,7 @@
<a name="108"><span class="lineNum"> 108 </span> : //</a>
<a name="109"><span class="lineNum"> 109 </span> : #define sc_const 0xdeadbeefdeadbeefLL</a>
<a name="110"><span class="lineNum"> 110 </span> : </a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 3888115 : void SpookyHash128(const void* data, size_t size, const uint8_t* seed, uint8_t* digest)</span></a>
<a name="111"><span class="lineNum"> 111 </span><span class="lineCov"> 3887997 : void SpookyHash128(const void* data, size_t size, const uint8_t* seed, uint8_t* digest)</span></a>
<a name="112"><span class="lineNum"> 112 </span> : {</a>
<a name="113"><span class="lineNum"> 113 </span> : uint64_t h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11;</a>
<a name="114"><span class="lineNum"> 114 </span> : uint64_t buf[sc_numVars];</a>
@ -182,45 +182,45 @@
<a name="120"><span class="lineNum"> 120 </span> : unsigned i;</a>
<a name="121"><span class="lineNum"> 121 </span> : #endif</a>
<a name="122"><span class="lineNum"> 122 </span> : </a>
<a name="123"><span class="lineNum"> 123 </span><span class="lineCov"> 3888115 : h9 = util_read64(seed + 0);</span></a>
<a name="124"><span class="lineNum"> 124 </span><span class="lineCov"> 3888115 : h10 = util_read64(seed + 8);</span></a>
<a name="123"><span class="lineNum"> 123 </span><span class="lineCov"> 3887997 : h9 = util_read64(seed + 0);</span></a>
<a name="124"><span class="lineNum"> 124 </span><span class="lineCov"> 3887997 : h10 = util_read64(seed + 8);</span></a>
<a name="125"><span class="lineNum"> 125 </span> : </a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineCov"> 3888115 : h0 = h3 = h6 = h9;</span></a>
<a name="127"><span class="lineNum"> 127 </span><span class="lineCov"> 3888115 : h1 = h4 = h7 = h10;</span></a>
<a name="128"><span class="lineNum"> 128 </span><span class="lineCov"> 3888115 : h2 = h5 = h8 = h11 = sc_const;</span></a>
<a name="126"><span class="lineNum"> 126 </span><span class="lineCov"> 3887997 : h0 = h3 = h6 = h9;</span></a>
<a name="127"><span class="lineNum"> 127 </span><span class="lineCov"> 3887997 : h1 = h4 = h7 = h10;</span></a>
<a name="128"><span class="lineNum"> 128 </span><span class="lineCov"> 3887997 : h2 = h5 = h8 = h11 = sc_const;</span></a>
<a name="129"><span class="lineNum"> 129 </span> : </a>
<a name="130"><span class="lineNum"> 130 </span><span class="lineCov"> 3888115 : nblocks = size / sc_blockSize;</span></a>
<a name="131"><span class="lineNum"> 131 </span><span class="lineCov"> 3888115 : blocks = data;</span></a>
<a name="132"><span class="lineNum"> 132 </span><span class="lineCov"> 3888115 : end = blocks + nblocks * sc_numVars;</span></a>
<a name="130"><span class="lineNum"> 130 </span><span class="lineCov"> 3887997 : nblocks = size / sc_blockSize;</span></a>
<a name="131"><span class="lineNum"> 131 </span><span class="lineCov"> 3887997 : blocks = data;</span></a>
<a name="132"><span class="lineNum"> 132 </span><span class="lineCov"> 3887997 : end = blocks + nblocks * sc_numVars;</span></a>
<a name="133"><span class="lineNum"> 133 </span> : </a>
<a name="134"><span class="lineNum"> 134 </span> : /* body */</a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 34766493 : while (blocks &lt; end) {</span></a>
<a name="135"><span class="lineNum"> 135 </span><span class="lineCov"> 34830303 : while (blocks &lt; end) {</span></a>
<a name="136"><span class="lineNum"> 136 </span> : #if WORDS_BIGENDIAN</a>
<a name="137"><span class="lineNum"> 137 </span> : for (i = 0; i &lt; sc_numVars; ++i)</a>
<a name="138"><span class="lineNum"> 138 </span> : buf[i] = util_swap64(blocks[i]);</a>
<a name="139"><span class="lineNum"> 139 </span> : Mix(buf, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</a>
<a name="140"><span class="lineNum"> 140 </span> : #else</a>
<a name="141"><span class="lineNum"> 141 </span><span class="lineCov"> 30878378 : Mix(blocks, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span></a>
<a name="141"><span class="lineNum"> 141 </span><span class="lineCov"> 30942306 : Mix(blocks, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span></a>
<a name="142"><span class="lineNum"> 142 </span> : #endif</a>
<a name="143"><span class="lineNum"> 143 </span><span class="lineCov"> 30878378 : blocks += sc_numVars;</span></a>
<a name="143"><span class="lineNum"> 143 </span><span class="lineCov"> 30942306 : blocks += sc_numVars;</span></a>
<a name="144"><span class="lineNum"> 144 </span> : }</a>
<a name="145"><span class="lineNum"> 145 </span> : </a>
<a name="146"><span class="lineNum"> 146 </span> : /* tail */</a>
<a name="147"><span class="lineNum"> 147 </span><span class="lineCov"> 3888115 : size_remainder = (size - ((const uint8_t*)end - (const uint8_t*)data));</span></a>
<a name="148"><span class="lineNum"> 148 </span><span class="lineCov"> 3888115 : memcpy(buf, end, size_remainder);</span></a>
<a name="149"><span class="lineNum"> 149 </span><span class="lineCov"> 3888115 : memset(((uint8_t*)buf) + size_remainder, 0, sc_blockSize - size_remainder);</span></a>
<a name="150"><span class="lineNum"> 150 </span><span class="lineCov"> 3888115 : ((uint8_t*)buf)[sc_blockSize - 1] = size_remainder;</span></a>
<a name="147"><span class="lineNum"> 147 </span><span class="lineCov"> 3887997 : size_remainder = (size - ((const uint8_t*)end - (const uint8_t*)data));</span></a>
<a name="148"><span class="lineNum"> 148 </span><span class="lineCov"> 3887997 : memcpy(buf, end, size_remainder);</span></a>
<a name="149"><span class="lineNum"> 149 </span><span class="lineCov"> 3887997 : memset(((uint8_t*)buf) + size_remainder, 0, sc_blockSize - size_remainder);</span></a>
<a name="150"><span class="lineNum"> 150 </span><span class="lineCov"> 3887997 : ((uint8_t*)buf)[sc_blockSize - 1] = size_remainder;</span></a>
<a name="151"><span class="lineNum"> 151 </span> : </a>
<a name="152"><span class="lineNum"> 152 </span> : /* finalization */</a>
<a name="153"><span class="lineNum"> 153 </span> : #if WORDS_BIGENDIAN</a>
<a name="154"><span class="lineNum"> 154 </span> : for (i = 0; i &lt; sc_numVars; ++i)</a>
<a name="155"><span class="lineNum"> 155 </span> : buf[i] = util_swap64(buf[i]);</a>
<a name="156"><span class="lineNum"> 156 </span> : #endif</a>
<a name="157"><span class="lineNum"> 157 </span><span class="lineCov"> 3888115 : End(buf, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span></a>
<a name="157"><span class="lineNum"> 157 </span><span class="lineCov"> 3887997 : End(buf, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span></a>
<a name="158"><span class="lineNum"> 158 </span> : </a>
<a name="159"><span class="lineNum"> 159 </span><span class="lineCov"> 3888115 : util_write64(digest + 0, h0);</span></a>
<a name="160"><span class="lineNum"> 160 </span><span class="lineCov"> 3888115 : util_write64(digest + 8, h1);</span></a>
<a name="161"><span class="lineNum"> 161 </span><span class="lineCov"> 3888115 : }</span></a>
<a name="159"><span class="lineNum"> 159 </span><span class="lineCov"> 3887997 : util_write64(digest + 0, h0);</span></a>
<a name="160"><span class="lineNum"> 160 </span><span class="lineCov"> 3887997 : util_write64(digest + 8, h1);</span></a>
<a name="161"><span class="lineNum"> 161 </span><span class="lineCov"> 3887997 : }</span></a>
<a name="162"><span class="lineNum"> 162 </span> : </a>
</pre>
</td>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">1737</td>
<td class="headerCovTableEntry">1765</td>
<td class="headerCovTableEntry">1954</td>
<td class="headerCovTableEntryMed">88.9 %</td>
<td class="headerCovTableEntryHi">90.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">49</td>
@ -117,23 +117,23 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4345">state_rename_content</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4261">state_verify_content</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4421">state_write</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#3691">state_write_content</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#3166">state_write_thread</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1671">state_refresh</a></td>
@ -157,7 +157,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#207">state_done</a></td>
<td class="coverFnHi">268</td>
<td class="coverFnHi">269</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1464">state_map</a></td>
@ -169,35 +169,35 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#117">lev_raid_name</a></td>
<td class="coverFnHi">277</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#226">state_config_check</a></td>
<td class="coverFnHi">277</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#547">state_config</a></td>
<td class="coverFnHi">278</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#134">state_init</a></td>
<td class="coverFn"><a href="state.c.gcov.html#226">state_config_check</a></td>
<td class="coverFnHi">278</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#547">state_config</a></td>
<td class="coverFnHi">279</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#134">state_init</a></td>
<td class="coverFnHi">280</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#522">validate_smartctl</a></td>
<td class="coverFnHi">384</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4654">state_progress_latest</a></td>
<td class="coverFnHi">493</td>
<td class="coverFnHi">481</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5220">state_fscheck</a></td>
<td class="coverFnHi">521</td>
<td class="coverFnHi">520</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4214">state_verify_thread</a></td>
<td class="coverFnHi">1054</td>
<td class="coverFnHi">1047</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1844">fs_position_clear_deleted</a></td>
@ -205,51 +205,51 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#75">lev_config_scan</a></td>
<td class="coverFnHi">6985</td>
<td class="coverFnHi">7028</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1404">find_disk_by_name</a></td>
<td class="coverFnHi">7508</td>
<td class="coverFnHi">7496</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5145">state_usage_raid</a></td>
<td class="coverFnHi">140496</td>
<td class="coverFnHi">140445</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5134">state_usage_sched</a></td>
<td class="coverFnHi">151013</td>
<td class="coverFnHi">150950</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#61">lev_config_name</a></td>
<td class="coverFnHi">273686</td>
<td class="coverFnHi">273680</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5156">state_usage_hash</a></td>
<td class="coverFnHi">753854</td>
<td class="coverFnHi">753469</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5194">state_usage_parity</a></td>
<td class="coverFnHi">781079</td>
<td class="coverFnHi">780707</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1798">fs_position_is_required</a></td>
<td class="coverFnHi">800411</td>
<td class="coverFnHi">793414</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5167">state_usage_file</a></td>
<td class="coverFnHi">914732</td>
<td class="coverFnHi">914354</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5174">state_usage_disk</a></td>
<td class="coverFnHi">919419</td>
<td class="coverFnHi">919041</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5123">state_usage_misc</a></td>
<td class="coverFnHi">1071293</td>
<td class="coverFnHi">1070853</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4903">state_progress</a></td>
<td class="coverFnHi">1075966</td>
<td class="coverFnHi">1075903</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1827">fs_info_is_required</a></td>
@ -257,11 +257,11 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1879">fs_is_block_unsynced</a></td>
<td class="coverFnHi">2406326</td>
<td class="coverFnHi">2399329</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1864">fs_is_block_deleted</a></td>
<td class="coverFnHi">4795496</td>
<td class="coverFnHi">4753514</td>
</tr>
</table>
<br>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">1737</td>
<td class="headerCovTableEntry">1765</td>
<td class="headerCovTableEntry">1954</td>
<td class="headerCovTableEntryMed">88.9 %</td>
<td class="headerCovTableEntryHi">90.3 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">49</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1404">find_disk_by_name</a></td>
<td class="coverFnHi">7508</td>
<td class="coverFnHi">7496</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1431">find_disk_by_uuid</a></td>
@ -77,11 +77,11 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1864">fs_is_block_deleted</a></td>
<td class="coverFnHi">4795496</td>
<td class="coverFnHi">4753514</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1879">fs_is_block_unsynced</a></td>
<td class="coverFnHi">2406326</td>
<td class="coverFnHi">2399329</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1844">fs_position_clear_deleted</a></td>
@ -89,7 +89,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1798">fs_position_is_required</a></td>
<td class="coverFnHi">800411</td>
<td class="coverFnHi">793414</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5237">generate_configuration</a></td>
@ -97,11 +97,11 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#61">lev_config_name</a></td>
<td class="coverFnHi">273686</td>
<td class="coverFnHi">273680</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#75">lev_config_scan</a></td>
<td class="coverFnHi">6985</td>
<td class="coverFnHi">7028</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#47">lev_name</a></td>
@ -109,15 +109,15 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#117">lev_raid_name</a></td>
<td class="coverFnHi">277</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#547">state_config</a></td>
<td class="coverFnHi">278</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#547">state_config</a></td>
<td class="coverFnHi">279</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#226">state_config_check</a></td>
<td class="coverFnHi">277</td>
<td class="coverFnHi">278</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1767">state_content_check</a></td>
@ -125,7 +125,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#207">state_done</a></td>
<td class="coverFnHi">268</td>
<td class="coverFnHi">269</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4471">state_filter</a></td>
@ -137,11 +137,11 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5220">state_fscheck</a></td>
<td class="coverFnHi">521</td>
<td class="coverFnHi">520</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#134">state_init</a></td>
<td class="coverFnHi">279</td>
<td class="coverFnHi">280</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5345">state_load_ignore_file</a></td>
@ -153,7 +153,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4903">state_progress</a></td>
<td class="coverFnHi">1075966</td>
<td class="coverFnHi">1075903</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4563">state_progress_begin</a></td>
@ -169,7 +169,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4654">state_progress_latest</a></td>
<td class="coverFnHi">493</td>
<td class="coverFnHi">481</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4637">state_progress_restart</a></td>
@ -193,7 +193,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4345">state_rename_content</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4439">state_skip</a></td>
@ -205,23 +205,23 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5174">state_usage_disk</a></td>
<td class="coverFnHi">919419</td>
<td class="coverFnHi">919041</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5167">state_usage_file</a></td>
<td class="coverFnHi">914732</td>
<td class="coverFnHi">914354</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5156">state_usage_hash</a></td>
<td class="coverFnHi">753854</td>
<td class="coverFnHi">753469</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5123">state_usage_misc</a></td>
<td class="coverFnHi">1071293</td>
<td class="coverFnHi">1070853</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5194">state_usage_parity</a></td>
<td class="coverFnHi">781079</td>
<td class="coverFnHi">780707</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5208">state_usage_print</a></td>
@ -229,11 +229,11 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5145">state_usage_raid</a></td>
<td class="coverFnHi">140496</td>
<td class="coverFnHi">140445</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5134">state_usage_sched</a></td>
<td class="coverFnHi">151013</td>
<td class="coverFnHi">150950</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#5116">state_usage_waste</a></td>
@ -241,23 +241,23 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4261">state_verify_content</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4214">state_verify_thread</a></td>
<td class="coverFnHi">1054</td>
<td class="coverFnHi">1047</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#4421">state_write</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#3691">state_write_content</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#3166">state_write_thread</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#522">validate_smartctl</a></td>

File diff suppressed because it is too large Load diff

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -148,7 +148,7 @@
<a name="86"><span class="lineNum"> 86 </span><span class="lineCov"> 90 : log_tag(&quot;summary:parity_block_total:%s:%u\n&quot;, lev_config_name(l), state-&gt;parity[l].total_blocks);</span></a>
<a name="87"><span class="lineNum"> 87 </span><span class="lineCov"> 90 : log_tag(&quot;summary:parity_block_free:%s:%u\n&quot;, lev_config_name(l), state-&gt;parity[l].free_blocks);</span></a>
<a name="88"><span class="lineNum"> 88 </span><span class="lineCov"> 90 : if (state-&gt;parity[l].free_blocks &lt; parity_block_free)</span></a>
<a name="89"><span class="lineNum"> 89 </span><span class="lineCov"> 4 : parity_block_free = state-&gt;parity[l].free_blocks;</span></a>
<a name="89"><span class="lineNum"> 89 </span><span class="lineCov"> 1 : parity_block_free = state-&gt;parity[l].free_blocks;</span></a>
<a name="90"><span class="lineNum"> 90 </span><span class="lineCov"> 90 : if (state-&gt;parity[l].free_blocks != 0)</span></a>
<a name="91"><span class="lineNum"> 91 </span><span class="lineCov"> 79 : free_not_zero = 1;</span></a>
<a name="92"><span class="lineNum"> 92 </span> : }</a>
@ -226,7 +226,7 @@
<a name="164"><span class="lineNum"> 164 </span> : /* keep track of latest block used */</a>
<a name="165"><span class="lineNum"> 165 </span><span class="lineCov"> 95396 : last_pos = fs_file2par_get(disk, file, file-&gt;blockmax - 1);</span></a>
<a name="166"><span class="lineNum"> 166 </span><span class="lineCov"> 95396 : if (last_pos &gt; disk_block_latest_used) {</span></a>
<a name="167"><span class="lineNum"> 167 </span><span class="lineCov"> 92536 : disk_block_latest_used = last_pos;</span></a>
<a name="167"><span class="lineNum"> 167 </span><span class="lineCov"> 92537 : disk_block_latest_used = last_pos;</span></a>
<a name="168"><span class="lineNum"> 168 </span> : }</a>
<a name="169"><span class="lineNum"> 169 </span> : </a>
<a name="170"><span class="lineNum"> 170 </span><span class="lineCov"> 95396 : if (fragmented) {</span></a>
@ -348,17 +348,17 @@
<a name="286"><span class="lineNum"> 286 </span><span class="lineCov"> 15 : median = 0;</span></a>
<a name="287"><span class="lineNum"> 287 </span><span class="lineCov"> 15 : newest = 0;</span></a>
<a name="288"><span class="lineNum"> 288 </span><span class="lineCov"> 15 : count = 0;</span></a>
<a name="289"><span class="lineNum"> 289 </span><span class="lineCov"> 32 : for (tommy_node* j = tommy_list_head(&amp;state-&gt;bucketlist); j != 0; j = j-&gt;next) {</span></a>
<a name="290"><span class="lineNum"> 290 </span><span class="lineCov"> 17 : struct snapraid_bucket* bucket = j-&gt;data;</span></a>
<a name="291"><span class="lineNum"> 291 </span><span class="lineCov"> 17 : block_off_t bucket_count = bucket-&gt;count_scrubbed + bucket-&gt;count_justsynced;</span></a>
<a name="289"><span class="lineNum"> 289 </span><span class="lineCov"> 30 : for (tommy_node* j = tommy_list_head(&amp;state-&gt;bucketlist); j != 0; j = j-&gt;next) {</span></a>
<a name="290"><span class="lineNum"> 290 </span><span class="lineCov"> 15 : struct snapraid_bucket* bucket = j-&gt;data;</span></a>
<a name="291"><span class="lineNum"> 291 </span><span class="lineCov"> 15 : block_off_t bucket_count = bucket-&gt;count_scrubbed + bucket-&gt;count_justsynced;</span></a>
<a name="292"><span class="lineNum"> 292 </span> : </a>
<a name="293"><span class="lineNum"> 293 </span><span class="lineCov"> 17 : if (count == 0)</span></a>
<a name="293"><span class="lineNum"> 293 </span><span class="lineCov"> 15 : if (count == 0)</span></a>
<a name="294"><span class="lineNum"> 294 </span><span class="lineCov"> 9 : oldest = bucket-&gt;time_at;</span></a>
<a name="295"><span class="lineNum"> 295 </span><span class="lineCov"> 17 : if (count &lt; state-&gt;bucketcount / 2)</span></a>
<a name="296"><span class="lineNum"> 296 </span><span class="lineCov"> 14 : median = bucket-&gt;time_at;</span></a>
<a name="297"><span class="lineNum"> 297 </span><span class="lineCov"> 17 : newest = bucket-&gt;time_at;</span></a>
<a name="295"><span class="lineNum"> 295 </span><span class="lineCov"> 15 : if (count &lt; state-&gt;bucketcount / 2)</span></a>
<a name="296"><span class="lineNum"> 296 </span><span class="lineCov"> 12 : median = bucket-&gt;time_at;</span></a>
<a name="297"><span class="lineNum"> 297 </span><span class="lineCov"> 15 : newest = bucket-&gt;time_at;</span></a>
<a name="298"><span class="lineNum"> 298 </span> : </a>
<a name="299"><span class="lineNum"> 299 </span><span class="lineCov"> 17 : count += bucket_count;</span></a>
<a name="299"><span class="lineNum"> 299 </span><span class="lineCov"> 15 : count += bucket_count;</span></a>
<a name="300"><span class="lineNum"> 300 </span> : }</a>
<a name="301"><span class="lineNum"> 301 </span> : </a>
<a name="302"><span class="lineNum"> 302 </span><span class="lineCov"> 15 : if (!count) {</span></a>
@ -378,15 +378,15 @@
<a name="316"><span class="lineNum"> 316 </span><span class="lineCov"> 9 : barmax = 0;</span></a>
<a name="317"><span class="lineNum"> 317 </span><span class="lineCov"> 9 : memset(bar_scrubbed, 0, sizeof(bar_scrubbed));</span></a>
<a name="318"><span class="lineNum"> 318 </span><span class="lineCov"> 9 : memset(bar_new, 0, sizeof(bar_new));</span></a>
<a name="319"><span class="lineNum"> 319 </span><span class="lineCov"> 26 : for (tommy_node* j = tommy_list_head(&amp;state-&gt;bucketlist); j != 0; j = j-&gt;next) {</span></a>
<a name="320"><span class="lineNum"> 320 </span><span class="lineCov"> 17 : struct snapraid_bucket* bucket = j-&gt;data;</span></a>
<a name="319"><span class="lineNum"> 319 </span><span class="lineCov"> 24 : for (tommy_node* j = tommy_list_head(&amp;state-&gt;bucketlist); j != 0; j = j-&gt;next) {</span></a>
<a name="320"><span class="lineNum"> 320 </span><span class="lineCov"> 15 : struct snapraid_bucket* bucket = j-&gt;data;</span></a>
<a name="321"><span class="lineNum"> 321 </span> : </a>
<a name="322"><span class="lineNum"> 322 </span><span class="lineCov"> 17 : unsigned column = muldiv(bucket-&gt;time_at - oldest, GRAPH_COLUMN, newest - oldest + 1);</span></a>
<a name="322"><span class="lineNum"> 322 </span><span class="lineCov"> 15 : unsigned column = muldiv(bucket-&gt;time_at - oldest, GRAPH_COLUMN, newest - oldest + 1);</span></a>
<a name="323"><span class="lineNum"> 323 </span> : </a>
<a name="324"><span class="lineNum"> 324 </span><span class="lineCov"> 17 : bar_scrubbed[column] += bucket-&gt;count_scrubbed;</span></a>
<a name="325"><span class="lineNum"> 325 </span><span class="lineCov"> 17 : bar_new[column] += bucket-&gt;count_justsynced;</span></a>
<a name="324"><span class="lineNum"> 324 </span><span class="lineCov"> 15 : bar_scrubbed[column] += bucket-&gt;count_scrubbed;</span></a>
<a name="325"><span class="lineNum"> 325 </span><span class="lineCov"> 15 : bar_new[column] += bucket-&gt;count_justsynced;</span></a>
<a name="326"><span class="lineNum"> 326 </span> : </a>
<a name="327"><span class="lineNum"> 327 </span><span class="lineCov"> 17 : if (bar_scrubbed[column] + bar_new[column] &gt; barmax)</span></a>
<a name="327"><span class="lineNum"> 327 </span><span class="lineCov"> 15 : if (bar_scrubbed[column] + bar_new[column] &gt; barmax)</span></a>
<a name="328"><span class="lineNum"> 328 </span><span class="lineCov"> 12 : barmax = bar_scrubbed[column] + bar_new[column];</span></a>
<a name="329"><span class="lineNum"> 329 </span> : }</a>
<a name="330"><span class="lineNum"> 330 </span> : </a>
@ -416,20 +416,20 @@
<a name="354"><span class="lineNum"> 354 </span><span class="lineCov"> 9450 : unsigned scrubbed = bar_scrubbed[x];</span></a>
<a name="355"><span class="lineNum"> 355 </span> : </a>
<a name="356"><span class="lineNum"> 356 </span><span class="lineCov"> 9450 : if (both &gt; pivot_upper) {</span></a>
<a name="357"><span class="lineNum"> 357 </span><span class="lineCov"> 156 : if (scrubbed &gt; pivot_lower)</span></a>
<a name="357"><span class="lineNum"> 357 </span><span class="lineCov"> 157 : if (scrubbed &gt; pivot_lower)</span></a>
<a name="358"><span class="lineNum"> 358 </span><span class="lineCov"> 60 : printf(&quot;*&quot;);</span></a>
<a name="359"><span class="lineNum"> 359 </span> : else</a>
<a name="360"><span class="lineNum"> 360 </span><span class="lineCov"> 96 : printf(&quot;o&quot;);</span></a>
<a name="361"><span class="lineNum"> 361 </span><span class="lineCov"> 9294 : } else if (both &gt; pivot_lower) {</span></a>
<a name="362"><span class="lineNum"> 362 </span><span class="lineCov"> 17 : if (scrubbed == both)</span></a>
<a name="360"><span class="lineNum"> 360 </span><span class="lineCov"> 97 : printf(&quot;o&quot;);</span></a>
<a name="361"><span class="lineNum"> 361 </span><span class="lineCov"> 9293 : } else if (both &gt; pivot_lower) {</span></a>
<a name="362"><span class="lineNum"> 362 </span><span class="lineCov"> 15 : if (scrubbed == both)</span></a>
<a name="363"><span class="lineNum"> 363 </span><span class="lineCov"> 6 : printf(&quot;*&quot;);</span></a>
<a name="364"><span class="lineNum"> 364 </span> : else</a>
<a name="365"><span class="lineNum"> 365 </span><span class="lineCov"> 11 : printf(&quot;o&quot;);</span></a>
<a name="365"><span class="lineNum"> 365 </span><span class="lineCov"> 9 : printf(&quot;o&quot;);</span></a>
<a name="366"><span class="lineNum"> 366 </span> : } else {</a>
<a name="367"><span class="lineNum"> 367 </span><span class="lineCov"> 9277 : if (y == GRAPH_ROW - 1)</span></a>
<a name="368"><span class="lineNum"> 368 </span><span class="lineCov"> 613 : printf(&quot;_&quot;);</span></a>
<a name="367"><span class="lineNum"> 367 </span><span class="lineCov"> 9278 : if (y == GRAPH_ROW - 1)</span></a>
<a name="368"><span class="lineNum"> 368 </span><span class="lineCov"> 615 : printf(&quot;_&quot;);</span></a>
<a name="369"><span class="lineNum"> 369 </span> : else</a>
<a name="370"><span class="lineNum"> 370 </span><span class="lineCov"> 8664 : printf(&quot; &quot;);</span></a>
<a name="370"><span class="lineNum"> 370 </span><span class="lineCov"> 8663 : printf(&quot; &quot;);</span></a>
<a name="371"><span class="lineNum"> 371 </span> : }</a>
<a name="372"><span class="lineNum"> 372 </span> : }</a>
<a name="373"><span class="lineNum"> 373 </span><span class="lineCov"> 135 : printf(&quot;\n&quot;);</span></a>
@ -491,27 +491,27 @@
<a name="429"><span class="lineNum"> 429 </span><span class="lineCov"> 2 : bad_count = 0;</span></a>
<a name="430"><span class="lineNum"> 430 </span><span class="lineCov"> 2 : range_start = 0;</span></a>
<a name="431"><span class="lineNum"> 431 </span><span class="lineCov"> 2 : range_count = 0;</span></a>
<a name="432"><span class="lineNum"> 432 </span><span class="lineCov"> 887 : for (i = 0; i &lt;= blockmax; ++i) { /* one extra iteration to print the final range */</span></a>
<a name="433"><span class="lineNum"> 433 </span><span class="lineCov"> 887 : snapraid_info info = 0;</span></a>
<a name="434"><span class="lineNum"> 434 </span><span class="lineCov"> 887 : int is_bad = 0;</span></a>
<a name="432"><span class="lineNum"> 432 </span><span class="lineCov"> 894 : for (i = 0; i &lt;= blockmax; ++i) { /* one extra iteration to print the final range */</span></a>
<a name="433"><span class="lineNum"> 433 </span><span class="lineCov"> 894 : snapraid_info info = 0;</span></a>
<a name="434"><span class="lineNum"> 434 </span><span class="lineCov"> 894 : int is_bad = 0;</span></a>
<a name="435"><span class="lineNum"> 435 </span> : </a>
<a name="436"><span class="lineNum"> 436 </span><span class="lineCov"> 887 : if (i &lt; blockmax) {</span></a>
<a name="437"><span class="lineNum"> 437 </span><span class="lineCov"> 887 : info = info_get(&amp;state-&gt;infoarr, i);</span></a>
<a name="438"><span class="lineNum"> 438 </span><span class="lineCov"> 887 : if (info != 0) /* unused blocks are never bad */</span></a>
<a name="439"><span class="lineNum"> 439 </span><span class="lineCov"> 887 : is_bad = info_get_bad(info);</span></a>
<a name="436"><span class="lineNum"> 436 </span><span class="lineCov"> 894 : if (i &lt; blockmax) {</span></a>
<a name="437"><span class="lineNum"> 437 </span><span class="lineCov"> 894 : info = info_get(&amp;state-&gt;infoarr, i);</span></a>
<a name="438"><span class="lineNum"> 438 </span><span class="lineCov"> 894 : if (info != 0) /* unused blocks are never bad */</span></a>
<a name="439"><span class="lineNum"> 439 </span><span class="lineCov"> 894 : is_bad = info_get_bad(info);</span></a>
<a name="440"><span class="lineNum"> 440 </span> : }</a>
<a name="441"><span class="lineNum"> 441 </span><span class="lineCov"> 887 : if (is_bad) {</span></a>
<a name="441"><span class="lineNum"> 441 </span><span class="lineCov"> 894 : if (is_bad) {</span></a>
<a name="442"><span class="lineNum"> 442 </span> : /* create or extend the range */</a>
<a name="443"><span class="lineNum"> 443 </span><span class="lineCov"> 259 : if (!range_count)</span></a>
<a name="443"><span class="lineNum"> 443 </span><span class="lineCov"> 263 : if (!range_count)</span></a>
<a name="444"><span class="lineNum"> 444 </span><span class="lineCov"> 202 : range_start = i;</span></a>
<a name="445"><span class="lineNum"> 445 </span><span class="lineCov"> 259 : ++range_count;</span></a>
<a name="445"><span class="lineNum"> 445 </span><span class="lineCov"> 263 : ++range_count;</span></a>
<a name="446"><span class="lineNum"> 446 </span> : } else {</a>
<a name="447"><span class="lineNum"> 447 </span> : /* break the range */</a>
<a name="448"><span class="lineNum"> 448 </span><span class="lineCov"> 628 : if (range_count) {</span></a>
<a name="448"><span class="lineNum"> 448 </span><span class="lineCov"> 631 : if (range_count) {</span></a>
<a name="449"><span class="lineNum"> 449 </span><span class="lineCov"> 202 : if (range_count == 1) {</span></a>
<a name="450"><span class="lineNum"> 450 </span><span class="lineCov"> 153 : printf(&quot; %u&quot;, range_start);</span></a>
<a name="450"><span class="lineNum"> 450 </span><span class="lineCov"> 155 : printf(&quot; %u&quot;, range_start);</span></a>
<a name="451"><span class="lineNum"> 451 </span> : } else {</a>
<a name="452"><span class="lineNum"> 452 </span><span class="lineCov"> 49 : printf(&quot; %u-%u&quot;, range_start, range_start + range_count - 1);</span></a>
<a name="452"><span class="lineNum"> 452 </span><span class="lineCov"> 47 : printf(&quot; %u-%u&quot;, range_start, range_start + range_count - 1);</span></a>
<a name="453"><span class="lineNum"> 453 </span> : }</a>
<a name="454"><span class="lineNum"> 454 </span><span class="lineCov"> 202 : bad_count += range_count;</span></a>
<a name="455"><span class="lineNum"> 455 </span><span class="lineCov"> 202 : ++bad_range;</span></a>
@ -519,7 +519,7 @@
<a name="457"><span class="lineNum"> 457 </span> : }</a>
<a name="458"><span class="lineNum"> 458 </span> : }</a>
<a name="459"><span class="lineNum"> 459 </span> : </a>
<a name="460"><span class="lineNum"> 460 </span><span class="lineCov"> 887 : if (bad_range &gt; 100) {</span></a>
<a name="460"><span class="lineNum"> 460 </span><span class="lineCov"> 894 : if (bad_range &gt; 100) {</span></a>
<a name="461"><span class="lineNum"> 461 </span><span class="lineCov"> 2 : printf(&quot; and %u more...&quot;, state-&gt;bad_blocks - bad_count);</span></a>
<a name="462"><span class="lineNum"> 462 </span><span class="lineCov"> 2 : break;</span></a>
<a name="463"><span class="lineNum"> 463 </span> : }</a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">27</td>
@ -69,19 +69,19 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#809">ssync</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#377">scrc_stream</a></td>
<td class="coverFnHi">173</td>
<td class="coverFnHi">172</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#99">sopen_multi_write</a></td>
<td class="coverFnHi">173</td>
<td class="coverFnHi">172</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#783">sputble32</a></td>
<td class="coverFnHi">173</td>
<td class="coverFnHi">172</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#218">shandle</a></td>
@ -89,7 +89,7 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#546">sgetu32</a></td>
<td class="coverFnHi">280</td>
<td class="coverFnHi">283</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#666">sgetble32</a></td>
@ -97,79 +97,79 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#128">sopen_multi_file</a></td>
<td class="coverFnHi">1182</td>
<td class="coverFnHi">1175</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#279">sdeplete</a></td>
<td class="coverFnHi">1183</td>
<td class="coverFnHi">1176</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#371">scrc</a></td>
<td class="coverFnHi">1748</td>
<td class="coverFnHi">1740</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#27">sopen_read</a></td>
<td class="coverFnHi">1903</td>
<td class="coverFnHi">1897</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#184">sclose</a></td>
<td class="coverFnHi">2024</td>
<td class="coverFnHi">2017</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#527">sgetlasttok</a></td>
<td class="coverFnHi">5663</td>
<td class="coverFnHi">5686</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#459">sgetline</a></td>
<td class="coverFnHi">5706</td>
<td class="coverFnHi">5738</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#391">sgettok</a></td>
<td class="coverFnHi">9875</td>
<td class="coverFnHi">9929</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#317">sflush</a></td>
<td class="coverFnHi">39158</td>
<td class="coverFnHi">39136</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#383">sgetc_uncached</a></td>
<td class="coverFnHi">299093</td>
<td class="coverFnHi">299099</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#233">sfill</a></td>
<td class="coverFnHi">608081</td>
<td class="coverFnHi">607940</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#795">sputbs</a></td>
<td class="coverFnHi">1982279</td>
<td class="coverFnHi">1964370</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#681">sgetbs</a></td>
<td class="coverFnHi">4004187</td>
<td class="coverFnHi">4004224</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#762">sputb64</a></td>
<td class="coverFnHi">5572622</td>
<td class="coverFnHi">5517420</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#741">sputb32</a></td>
<td class="coverFnHi">9508972</td>
<td class="coverFnHi">9413354</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#630">sgetb64</a></td>
<td class="coverFnHi">11258012</td>
<td class="coverFnHi">11246935</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#428">sread</a></td>
<td class="coverFnHi">13236843</td>
<td class="coverFnHi">13236979</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#594">sgetb32</a></td>
<td class="coverFnHi">19212483</td>
<td class="coverFnHi">19190230</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#702">swrite</a></td>
<td class="coverFnHi">21650829</td>
<td class="coverFnHi">21440832</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">27</td>
@ -61,35 +61,35 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#184">sclose</a></td>
<td class="coverFnHi">2024</td>
<td class="coverFnHi">2017</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#371">scrc</a></td>
<td class="coverFnHi">1748</td>
<td class="coverFnHi">1740</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#377">scrc_stream</a></td>
<td class="coverFnHi">173</td>
<td class="coverFnHi">172</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#279">sdeplete</a></td>
<td class="coverFnHi">1183</td>
<td class="coverFnHi">1176</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#233">sfill</a></td>
<td class="coverFnHi">608081</td>
<td class="coverFnHi">607940</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#317">sflush</a></td>
<td class="coverFnHi">39158</td>
<td class="coverFnHi">39136</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#594">sgetb32</a></td>
<td class="coverFnHi">19212483</td>
<td class="coverFnHi">19190230</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#630">sgetb64</a></td>
<td class="coverFnHi">11258012</td>
<td class="coverFnHi">11246935</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#666">sgetble32</a></td>
@ -97,27 +97,27 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#681">sgetbs</a></td>
<td class="coverFnHi">4004187</td>
<td class="coverFnHi">4004224</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#383">sgetc_uncached</a></td>
<td class="coverFnHi">299093</td>
<td class="coverFnHi">299099</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#527">sgetlasttok</a></td>
<td class="coverFnHi">5663</td>
<td class="coverFnHi">5686</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#459">sgetline</a></td>
<td class="coverFnHi">5706</td>
<td class="coverFnHi">5738</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#391">sgettok</a></td>
<td class="coverFnHi">9875</td>
<td class="coverFnHi">9929</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#546">sgetu32</a></td>
<td class="coverFnHi">280</td>
<td class="coverFnHi">283</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#218">shandle</a></td>
@ -125,15 +125,15 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#128">sopen_multi_file</a></td>
<td class="coverFnHi">1182</td>
<td class="coverFnHi">1175</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#99">sopen_multi_write</a></td>
<td class="coverFnHi">173</td>
<td class="coverFnHi">172</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#27">sopen_read</a></td>
<td class="coverFnHi">1903</td>
<td class="coverFnHi">1897</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#172">sopen_write</a></td>
@ -141,27 +141,27 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#741">sputb32</a></td>
<td class="coverFnHi">9508972</td>
<td class="coverFnHi">9413354</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#762">sputb64</a></td>
<td class="coverFnHi">5572622</td>
<td class="coverFnHi">5517420</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#783">sputble32</a></td>
<td class="coverFnHi">173</td>
<td class="coverFnHi">172</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#795">sputbs</a></td>
<td class="coverFnHi">1982279</td>
<td class="coverFnHi">1964370</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#428">sread</a></td>
<td class="coverFnHi">13236843</td>
<td class="coverFnHi">13236979</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#809">ssync</a></td>
<td class="coverFnHi">157</td>
<td class="coverFnHi">156</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#366">stell</a></td>
@ -169,7 +169,7 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#702">swrite</a></td>
<td class="coverFnHi">21650829</td>
<td class="coverFnHi">21440832</td>
</tr>
</table>
<br>

File diff suppressed because it is too large Load diff

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -69,39 +69,39 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#263">sgeteol</a></td>
<td class="coverFnHi">6687</td>
<td class="coverFnHi">6731</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#278">sgetspace</a></td>
<td class="coverFnHi">22868</td>
<td class="coverFnHi">23010</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#248">sungetc</a></td>
<td class="coverFnHi">38717</td>
<td class="coverFnHi">38947</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#191">serror</a></td>
<td class="coverFnHi">3795184</td>
<td class="coverFnHi">3756051</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#353">sputc</a></td>
<td class="coverFnHi">3968961</td>
<td class="coverFnHi">3933071</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#175">sptrget</a></td>
<td class="coverFnHi">34855133</td>
<td class="coverFnHi">34645559</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#183">sptrset</a></td>
<td class="coverFnHi">34855133</td>
<td class="coverFnHi">34645559</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#167">sptrlookup</a></td>
<td class="coverFnHi">34893378</td>
<td class="coverFnHi">34683549</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#237">sgetc</a></td>
<td class="coverFnHi">86901471</td>
<td class="coverFnHi">87201813</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#191">serror</a></td>
<td class="coverFnHi">3795184</td>
<td class="coverFnHi">3756051</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#215">serrorfile</a></td>
@ -73,35 +73,35 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#237">sgetc</a></td>
<td class="coverFnHi">86901471</td>
<td class="coverFnHi">87201813</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#263">sgeteol</a></td>
<td class="coverFnHi">6687</td>
<td class="coverFnHi">6731</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#278">sgetspace</a></td>
<td class="coverFnHi">22868</td>
<td class="coverFnHi">23010</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#175">sptrget</a></td>
<td class="coverFnHi">34855133</td>
<td class="coverFnHi">34645559</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#167">sptrlookup</a></td>
<td class="coverFnHi">34893378</td>
<td class="coverFnHi">34683549</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#183">sptrset</a></td>
<td class="coverFnHi">34855133</td>
<td class="coverFnHi">34645559</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#353">sputc</a></td>
<td class="coverFnHi">3968961</td>
<td class="coverFnHi">3933071</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#248">sungetc</a></td>
<td class="coverFnHi">38717</td>
<td class="coverFnHi">38947</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -228,33 +228,33 @@
<a name="166"><span class="lineNum"> 166 </span> : /**</a>
<a name="167"><span class="lineNum"> 167 </span> : * Check if the buffer has enough data loaded.</a>
<a name="168"><span class="lineNum"> 168 </span> : */</a>
<a name="169"><span class="lineNum"> 169 </span><span class="lineCov"> 34893378 : static inline int sptrlookup(STREAM* s, int size)</span></a>
<a name="169"><span class="lineNum"> 169 </span><span class="lineCov"> 34683549 : static inline int sptrlookup(STREAM* s, int size)</span></a>
<a name="170"><span class="lineNum"> 170 </span> : {</a>
<a name="171"><span class="lineNum"> 171 </span><span class="lineCov"> 34893378 : return s-&gt;pos + size &lt;= s-&gt;end;</span></a>
<a name="171"><span class="lineNum"> 171 </span><span class="lineCov"> 34683549 : return s-&gt;pos + size &lt;= s-&gt;end;</span></a>
<a name="172"><span class="lineNum"> 172 </span> : }</a>
<a name="173"><span class="lineNum"> 173 </span> : </a>
<a name="174"><span class="lineNum"> 174 </span> : /**</a>
<a name="175"><span class="lineNum"> 175 </span> : * Get the current stream ptr.</a>
<a name="176"><span class="lineNum"> 176 </span> : */</a>
<a name="177"><span class="lineNum"> 177 </span><span class="lineCov"> 34855133 : static inline unsigned char* sptrget(STREAM* s)</span></a>
<a name="177"><span class="lineNum"> 177 </span><span class="lineCov"> 34645559 : static inline unsigned char* sptrget(STREAM* s)</span></a>
<a name="178"><span class="lineNum"> 178 </span> : {</a>
<a name="179"><span class="lineNum"> 179 </span><span class="lineCov"> 34855133 : return s-&gt;pos;</span></a>
<a name="179"><span class="lineNum"> 179 </span><span class="lineCov"> 34645559 : return s-&gt;pos;</span></a>
<a name="180"><span class="lineNum"> 180 </span> : }</a>
<a name="181"><span class="lineNum"> 181 </span> : </a>
<a name="182"><span class="lineNum"> 182 </span> : /**</a>
<a name="183"><span class="lineNum"> 183 </span> : * Set the current stream ptr.</a>
<a name="184"><span class="lineNum"> 184 </span> : */</a>
<a name="185"><span class="lineNum"> 185 </span><span class="lineCov"> 34855133 : static inline void sptrset(STREAM* s, unsigned char* ptr)</span></a>
<a name="185"><span class="lineNum"> 185 </span><span class="lineCov"> 34645559 : static inline void sptrset(STREAM* s, unsigned char* ptr)</span></a>
<a name="186"><span class="lineNum"> 186 </span> : {</a>
<a name="187"><span class="lineNum"> 187 </span><span class="lineCov"> 34855133 : s-&gt;pos = ptr;</span></a>
<a name="188"><span class="lineNum"> 188 </span><span class="lineCov"> 34855133 : }</span></a>
<a name="187"><span class="lineNum"> 187 </span><span class="lineCov"> 34645559 : s-&gt;pos = ptr;</span></a>
<a name="188"><span class="lineNum"> 188 </span><span class="lineCov"> 34645559 : }</span></a>
<a name="189"><span class="lineNum"> 189 </span> : </a>
<a name="190"><span class="lineNum"> 190 </span> : /**</a>
<a name="191"><span class="lineNum"> 191 </span> : * Check the error status. Like ferror().</a>
<a name="192"><span class="lineNum"> 192 </span> : */</a>
<a name="193"><span class="lineNum"> 193 </span><span class="lineCov"> 3795184 : static inline int serror(STREAM* s)</span></a>
<a name="193"><span class="lineNum"> 193 </span><span class="lineCov"> 3756051 : static inline int serror(STREAM* s)</span></a>
<a name="194"><span class="lineNum"> 194 </span> : {</a>
<a name="195"><span class="lineNum"> 195 </span><span class="lineCov"> 3795184 : return s-&gt;state == STREAM_STATE_ERROR;</span></a>
<a name="195"><span class="lineNum"> 195 </span><span class="lineCov"> 3756051 : return s-&gt;state == STREAM_STATE_ERROR;</span></a>
<a name="196"><span class="lineNum"> 196 </span> : }</a>
<a name="197"><span class="lineNum"> 197 </span> : </a>
<a name="198"><span class="lineNum"> 198 </span> : /**</a>
@ -298,22 +298,22 @@
<a name="236"><span class="lineNum"> 236 </span> : /**</a>
<a name="237"><span class="lineNum"> 237 </span> : * Read a char. Like fgetc().</a>
<a name="238"><span class="lineNum"> 238 </span> : */</a>
<a name="239"><span class="lineNum"> 239 </span><span class="lineCov"> 86901471 : static inline int sgetc(STREAM* s)</span></a>
<a name="239"><span class="lineNum"> 239 </span><span class="lineCov"> 87201813 : static inline int sgetc(STREAM* s)</span></a>
<a name="240"><span class="lineNum"> 240 </span> : {</a>
<a name="241"><span class="lineNum"> 241 </span><span class="lineCov"> 86901471 : if (tommy_unlikely(s-&gt;pos == s-&gt;end))</span></a>
<a name="242"><span class="lineNum"> 242 </span><span class="lineCov"> 299093 : return sgetc_uncached(s);</span></a>
<a name="243"><span class="lineNum"> 243 </span><span class="lineCov"> 86602378 : return *s-&gt;pos++;</span></a>
<a name="241"><span class="lineNum"> 241 </span><span class="lineCov"> 87201813 : if (tommy_unlikely(s-&gt;pos == s-&gt;end))</span></a>
<a name="242"><span class="lineNum"> 242 </span><span class="lineCov"> 299099 : return sgetc_uncached(s);</span></a>
<a name="243"><span class="lineNum"> 243 </span><span class="lineCov"> 86902714 : return *s-&gt;pos++;</span></a>
<a name="244"><span class="lineNum"> 244 </span> : }</a>
<a name="245"><span class="lineNum"> 245 </span> : </a>
<a name="246"><span class="lineNum"> 246 </span> : /**</a>
<a name="247"><span class="lineNum"> 247 </span> : * Unread a char.</a>
<a name="248"><span class="lineNum"> 248 </span> : * Like ungetc() but you have to unget the same char read.</a>
<a name="249"><span class="lineNum"> 249 </span> : */</a>
<a name="250"><span class="lineNum"> 250 </span><span class="lineCov"> 38717 : static inline void sungetc(int c, STREAM* s)</span></a>
<a name="250"><span class="lineNum"> 250 </span><span class="lineCov"> 38947 : static inline void sungetc(int c, STREAM* s)</span></a>
<a name="251"><span class="lineNum"> 251 </span> : {</a>
<a name="252"><span class="lineNum"> 252 </span><span class="lineCov"> 38717 : if (c != EOF)</span></a>
<a name="253"><span class="lineNum"> 253 </span><span class="lineCov"> 37886 : --s-&gt;pos;</span></a>
<a name="254"><span class="lineNum"> 254 </span><span class="lineCov"> 38717 : }</span></a>
<a name="252"><span class="lineNum"> 252 </span><span class="lineCov"> 38947 : if (c != EOF)</span></a>
<a name="253"><span class="lineNum"> 253 </span><span class="lineCov"> 38113 : --s-&gt;pos;</span></a>
<a name="254"><span class="lineNum"> 254 </span><span class="lineCov"> 38947 : }</span></a>
<a name="255"><span class="lineNum"> 255 </span> : </a>
<a name="256"><span class="lineNum"> 256 </span> : /**</a>
<a name="257"><span class="lineNum"> 257 </span> : * Read a fixed amount of chars.</a>
@ -324,34 +324,34 @@
<a name="262"><span class="lineNum"> 262 </span> : /**</a>
<a name="263"><span class="lineNum"> 263 </span> : * Get a char from a stream, ignoring one '\r'.</a>
<a name="264"><span class="lineNum"> 264 </span> : */</a>
<a name="265"><span class="lineNum"> 265 </span><span class="lineCov"> 6687 : static inline int sgeteol(STREAM* f)</span></a>
<a name="265"><span class="lineNum"> 265 </span><span class="lineCov"> 6731 : static inline int sgeteol(STREAM* f)</span></a>
<a name="266"><span class="lineNum"> 266 </span> : {</a>
<a name="267"><span class="lineNum"> 267 </span> : int c;</a>
<a name="268"><span class="lineNum"> 268 </span> : </a>
<a name="269"><span class="lineNum"> 269 </span><span class="lineCov"> 6687 : c = sgetc(f);</span></a>
<a name="270"><span class="lineNum"> 270 </span><span class="lineCov"> 6687 : if (c == '\r')</span></a>
<a name="269"><span class="lineNum"> 269 </span><span class="lineCov"> 6731 : c = sgetc(f);</span></a>
<a name="270"><span class="lineNum"> 270 </span><span class="lineCov"> 6731 : if (c == '\r')</span></a>
<a name="271"><span class="lineNum"> 271 </span><span class="lineNoCov"> 0 : c = sgetc(f);</span></a>
<a name="272"><span class="lineNum"> 272 </span> : </a>
<a name="273"><span class="lineNum"> 273 </span><span class="lineCov"> 6687 : return c;</span></a>
<a name="273"><span class="lineNum"> 273 </span><span class="lineCov"> 6731 : return c;</span></a>
<a name="274"><span class="lineNum"> 274 </span> : }</a>
<a name="275"><span class="lineNum"> 275 </span> : </a>
<a name="276"><span class="lineNum"> 276 </span> : /**</a>
<a name="277"><span class="lineNum"> 277 </span> : * Read all the spaces and tabs.</a>
<a name="278"><span class="lineNum"> 278 </span> : * Return the number of spaces and tabs read.</a>
<a name="279"><span class="lineNum"> 279 </span> : */</a>
<a name="280"><span class="lineNum"> 280 </span><span class="lineCov"> 22868 : static inline int sgetspace(STREAM* f)</span></a>
<a name="280"><span class="lineNum"> 280 </span><span class="lineCov"> 23010 : static inline int sgetspace(STREAM* f)</span></a>
<a name="281"><span class="lineNum"> 281 </span> : {</a>
<a name="282"><span class="lineNum"> 282 </span><span class="lineCov"> 22868 : int count = 0;</span></a>
<a name="282"><span class="lineNum"> 282 </span><span class="lineCov"> 23010 : int count = 0;</span></a>
<a name="283"><span class="lineNum"> 283 </span> : int c;</a>
<a name="284"><span class="lineNum"> 284 </span> : </a>
<a name="285"><span class="lineNum"> 285 </span><span class="lineCov"> 22868 : c = sgetc(f);</span></a>
<a name="286"><span class="lineNum"> 286 </span><span class="lineCov"> 31659 : while (c == ' ' || c == '\t') {</span></a>
<a name="287"><span class="lineNum"> 287 </span><span class="lineCov"> 8791 : ++count;</span></a>
<a name="288"><span class="lineNum"> 288 </span><span class="lineCov"> 8791 : c = sgetc(f);</span></a>
<a name="285"><span class="lineNum"> 285 </span><span class="lineCov"> 23010 : c = sgetc(f);</span></a>
<a name="286"><span class="lineNum"> 286 </span><span class="lineCov"> 31846 : while (c == ' ' || c == '\t') {</span></a>
<a name="287"><span class="lineNum"> 287 </span><span class="lineCov"> 8836 : ++count;</span></a>
<a name="288"><span class="lineNum"> 288 </span><span class="lineCov"> 8836 : c = sgetc(f);</span></a>
<a name="289"><span class="lineNum"> 289 </span> : }</a>
<a name="290"><span class="lineNum"> 290 </span> : </a>
<a name="291"><span class="lineNum"> 291 </span><span class="lineCov"> 22868 : sungetc(c, f);</span></a>
<a name="292"><span class="lineNum"> 292 </span><span class="lineCov"> 22868 : return count;</span></a>
<a name="291"><span class="lineNum"> 291 </span><span class="lineCov"> 23010 : sungetc(c, f);</span></a>
<a name="292"><span class="lineNum"> 292 </span><span class="lineCov"> 23010 : return count;</span></a>
<a name="293"><span class="lineNum"> 293 </span> : }</a>
<a name="294"><span class="lineNum"> 294 </span> : </a>
<a name="295"><span class="lineNum"> 295 </span> : /**</a>
@ -414,10 +414,10 @@
<a name="352"><span class="lineNum"> 352 </span> : * Write a char. Like fputc().</a>
<a name="353"><span class="lineNum"> 353 </span> : * Return 0 on success or -1 on error.</a>
<a name="354"><span class="lineNum"> 354 </span> : */</a>
<a name="355"><span class="lineNum"> 355 </span><span class="lineCov"> 3968961 : static inline int sputc(int c, STREAM* s)</span></a>
<a name="355"><span class="lineNum"> 355 </span><span class="lineCov"> 3933071 : static inline int sputc(int c, STREAM* s)</span></a>
<a name="356"><span class="lineNum"> 356 </span> : {</a>
<a name="357"><span class="lineNum"> 357 </span><span class="lineCov"> 3968961 : if (s-&gt;pos == s-&gt;end) {</span></a>
<a name="358"><span class="lineNum"> 358 </span><span class="lineCov"> 38671 : if (sflush(s) != 0)</span></a>
<a name="357"><span class="lineNum"> 357 </span><span class="lineCov"> 3933071 : if (s-&gt;pos == s-&gt;end) {</span></a>
<a name="358"><span class="lineNum"> 358 </span><span class="lineCov"> 38652 : if (sflush(s) != 0)</span></a>
<a name="359"><span class="lineNum"> 359 </span><span class="lineNoCov"> 0 : return -1;</span></a>
<a name="360"><span class="lineNum"> 360 </span> : }</a>
<a name="361"><span class="lineNum"> 361 </span> : </a>
@ -428,12 +428,12 @@
<a name="366"><span class="lineNum"> 366 </span> : * to be able to detect memory errors on the buffer,</a>
<a name="367"><span class="lineNum"> 367 </span> : * happening before we write it on the file.</a>
<a name="368"><span class="lineNum"> 368 </span> : */</a>
<a name="369"><span class="lineNum"> 369 </span><span class="lineCov"> 3968961 : if (s-&gt;flags &amp; STREAM_FLAGS_CRC)</span></a>
<a name="370"><span class="lineNum"> 370 </span><span class="lineCov"> 3968961 : s-&gt;crc_stream = crc32c_plain_char(s-&gt;crc_stream, c);</span></a>
<a name="369"><span class="lineNum"> 369 </span><span class="lineCov"> 3933071 : if (s-&gt;flags &amp; STREAM_FLAGS_CRC)</span></a>
<a name="370"><span class="lineNum"> 370 </span><span class="lineCov"> 3933071 : s-&gt;crc_stream = crc32c_plain_char(s-&gt;crc_stream, c);</span></a>
<a name="371"><span class="lineNum"> 371 </span> : </a>
<a name="372"><span class="lineNum"> 372 </span><span class="lineCov"> 3968961 : *s-&gt;pos++ = c;</span></a>
<a name="372"><span class="lineNum"> 372 </span><span class="lineCov"> 3933071 : *s-&gt;pos++ = c;</span></a>
<a name="373"><span class="lineNum"> 373 </span> : </a>
<a name="374"><span class="lineNum"> 374 </span><span class="lineCov"> 3968961 : return 0;</span></a>
<a name="374"><span class="lineNum"> 374 </span><span class="lineCov"> 3933071 : return 0;</span></a>
<a name="375"><span class="lineNum"> 375 </span> : }</a>
<a name="376"><span class="lineNum"> 376 </span> : </a>
<a name="377"><span class="lineNum"> 377 </span> : /**</a>

View file

@ -31,18 +31,18 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">633</td>
<td class="headerCovTableEntry">991</td>
<td class="headerCovTableEntryLo">63.9 %</td>
<td class="headerCovTableEntry">769</td>
<td class="headerCovTableEntry">956</td>
<td class="headerCovTableEntryMed">80.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">75</td>
<td class="headerCovTableEntry">78</td>
<td class="headerCovTableEntry">84</td>
<td class="headerCovTableEntryMed">89.3 %</td>
<td class="headerCovTableEntryHi">92.9 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
@ -64,11 +64,11 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#168">log_fatal_errno</a></td>
<td class="coverFn"><a href="support.c.gcov.html#170">log_fatal_errno</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1132">path_is_root_of</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1138">path_is_root_of</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
@ -79,321 +79,321 @@
<td class="coverFn"><a href="support.c.gcov.html#104">random_u8</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1824">scomma</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1892">smartctl_attribute</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1794">smatch</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#67">unlock_random</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#930">strlwr</a></td>
<td class="coverFn"><a href="support.c.gcov.html#936">strlwr</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2235">smartctl_flush</a></td>
<td class="coverFn"><a href="support.c.gcov.html#2241">smartctl_flush</a></td>
<td class="coverFnHi">5</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#942">worddigitstr</a></td>
<td class="coverFn"><a href="support.c.gcov.html#948">worddigitstr</a></td>
<td class="coverFnHi">11</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#909">strtrim</a></td>
<td class="coverFnHi">13</td>
<td class="coverFn"><a href="support.c.gcov.html#1898">smartctl_attribute</a></td>
<td class="coverFnHi">14</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#591">printp</a></td>
<td class="coverFn"><a href="support.c.gcov.html#597">printp</a></td>
<td class="coverFnHi">18</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#870">strpolish</a></td>
<td class="coverFnHi">21</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#205">log_error_errno</a></td>
<td class="coverFn"><a href="support.c.gcov.html#209">log_error_errno</a></td>
<td class="coverFnHi">27</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2480">match_class</a></td>
<td class="coverFn"><a href="support.c.gcov.html#2486">match_class</a></td>
<td class="coverFnHi">28</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#567">printr</a></td>
<td class="coverFn"><a href="support.c.gcov.html#573">printr</a></td>
<td class="coverFnHi">34</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#548">printc</a></td>
<td class="coverFnHi">77</td>
<td class="coverFn"><a href="support.c.gcov.html#915">strtrim</a></td>
<td class="coverFnHi">67</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#579">printl</a></td>
<td class="coverFnHi">142</td>
<td class="coverFn"><a href="support.c.gcov.html#554">printc</a></td>
<td class="coverFnHi">78</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#981">pathcat</a></td>
<td class="coverFnHi">279</td>
<td class="coverFn"><a href="support.c.gcov.html#585">printl</a></td>
<td class="coverFnHi">157</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#876">strpolish</a></td>
<td class="coverFnHi">256</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#987">pathcat</a></td>
<td class="coverFnHi">280</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#99">random_reseed</a></td>
<td class="coverFnHi">283</td>
<td class="coverFnHi">284</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#85">lock_done</a></td>
<td class="coverFnHi">288</td>
<td class="coverFnHi">289</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#75">lock_init</a></td>
<td class="coverFnHi">310</td>
<td class="coverFnHi">311</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2328">thread_cond_destroy</a></td>
<td class="coverFn"><a href="support.c.gcov.html#2334">thread_cond_destroy</a></td>
<td class="coverFnHi">404</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2318">thread_cond_init</a></td>
<td class="coverFn"><a href="support.c.gcov.html#2324">thread_cond_init</a></td>
<td class="coverFnHi">404</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1642">malloc_counter_get</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1648">malloc_counter_get</a></td>
<td class="coverFnHi">488</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#538">msg_flush</a></td>
<td class="coverFnHi">586</td>
<td class="coverFn"><a href="support.c.gcov.html#544">msg_flush</a></td>
<td class="coverFnHi">572</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2338">thread_cond_signal</a></td>
<td class="coverFnHi">668</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2397">thread_cond_signal_and_unlock</a></td>
<td class="coverFnHi">668</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#420">msg_status</a></td>
<td class="coverFn"><a href="support.c.gcov.html#426">msg_status</a></td>
<td class="coverFnHi">743</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1010">pathcatc</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1016">pathcatc</a></td>
<td class="coverFnHi">788</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#313">log_fatal</a></td>
<td class="coverFn"><a href="support.c.gcov.html#319">log_fatal</a></td>
<td class="coverFnHi">803</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#883">strsplit</a></td>
<td class="coverFnHi">1718</td>
<td class="coverFn"><a href="support.c.gcov.html#2344">thread_cond_signal</a></td>
<td class="coverFnHi">827</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#492">msg_bar</a></td>
<td class="coverFnHi">2118</td>
<td class="coverFn"><a href="support.c.gcov.html#2403">thread_cond_signal_and_unlock</a></td>
<td class="coverFnHi">827</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2431">thread_create</a></td>
<td class="coverFnHi">2876</td>
<td class="coverFn"><a href="support.c.gcov.html#889">strsplit</a></td>
<td class="coverFnHi">1720</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2441">thread_join</a></td>
<td class="coverFnHi">2876</td>
<td class="coverFn"><a href="support.c.gcov.html#1800">smatch</a></td>
<td class="coverFnHi">1779</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2288">thread_mutex_destroy</a></td>
<td class="coverFnHi">3167</td>
<td class="coverFn"><a href="support.c.gcov.html#498">msg_bar</a></td>
<td class="coverFnHi">2042</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2278">thread_mutex_init</a></td>
<td class="coverFnHi">3299</td>
<td class="coverFn"><a href="support.c.gcov.html#1830">scomma</a></td>
<td class="coverFnHi">2316</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#408">log_flush</a></td>
<td class="coverFnHi">3649</td>
<td class="coverFn"><a href="support.c.gcov.html#2437">thread_create</a></td>
<td class="coverFnHi">2883</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#369">log_expected</a></td>
<td class="coverFn"><a href="support.c.gcov.html#2447">thread_join</a></td>
<td class="coverFnHi">2883</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2294">thread_mutex_destroy</a></td>
<td class="coverFnHi">3180</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2284">thread_mutex_init</a></td>
<td class="coverFnHi">3312</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#414">log_flush</a></td>
<td class="coverFnHi">3652</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#375">log_expected</a></td>
<td class="coverFnHi">4697</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#465">msg_progress</a></td>
<td class="coverFnHi">5081</td>
<td class="coverFn"><a href="support.c.gcov.html#471">msg_progress</a></td>
<td class="coverFnHi">5066</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1088">pathslash</a></td>
<td class="coverFnHi">7949</td>
<td class="coverFn"><a href="support.c.gcov.html#1094">pathslash</a></td>
<td class="coverFnHi">7959</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1269">lmtime</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1275">lmtime</a></td>
<td class="coverFnHi">11645</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1046">pathexport</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1052">pathexport</a></td>
<td class="coverFnHi">12234</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1025">pathimport</a></td>
<td class="coverFnHi">17981</td>
<td class="coverFn"><a href="support.c.gcov.html#1031">pathimport</a></td>
<td class="coverFnHi">18024</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#262">vmsg</a></td>
<td class="coverFnHi">41543</td>
<td class="coverFn"><a href="support.c.gcov.html#268">vmsg</a></td>
<td class="coverFnHi">41562</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1105">pathcut</a></td>
<td class="coverFnHi">58108</td>
<td class="coverFn"><a href="support.c.gcov.html#1111">pathcut</a></td>
<td class="coverFnHi">58110</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2451">thread_yield</a></td>
<td class="coverFnHi">105499</td>
<td class="coverFn"><a href="support.c.gcov.html#2457">thread_yield</a></td>
<td class="coverFnHi">108112</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1223">fmtime</a></td>
<td class="coverFnHi">121348</td>
<td class="coverFn"><a href="support.c.gcov.html#1229">fmtime</a></td>
<td class="coverFnHi">121378</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#511">msg_verbose</a></td>
<td class="coverFnHi">127020</td>
<td class="coverFn"><a href="support.c.gcov.html#517">msg_verbose</a></td>
<td class="coverFnHi">127094</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2255">smart_temp</a></td>
<td class="coverFnHi">145110</td>
<td class="coverFn"><a href="support.c.gcov.html#2261">smart_temp</a></td>
<td class="coverFnHi">145124</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1740">calloc_nofail</a></td>
<td class="coverFnHi">156192</td>
<td class="coverFn"><a href="support.c.gcov.html#1746">calloc_nofail</a></td>
<td class="coverFnHi">156271</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2414">thread_cond_broadcast_and_unlock</a></td>
<td class="coverFnHi">257469</td>
<td class="coverFn"><a href="support.c.gcov.html#2420">thread_cond_broadcast_and_unlock</a></td>
<td class="coverFnHi">257343</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2348">thread_cond_broadcast</a></td>
<td class="coverFnHi">257671</td>
<td class="coverFn"><a href="support.c.gcov.html#2354">thread_cond_broadcast</a></td>
<td class="coverFnHi">257545</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#445">msg_info</a></td>
<td class="coverFnHi">312495</td>
<td class="coverFn"><a href="support.c.gcov.html#451">msg_info</a></td>
<td class="coverFnHi">312664</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#341">log_error</a></td>
<td class="coverFnHi">365227</td>
<td class="coverFn"><a href="support.c.gcov.html#347">log_error</a></td>
<td class="coverFnHi">364924</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#797">esc_shell_multi</a></td>
<td class="coverFnHi">366218</td>
<td class="coverFn"><a href="support.c.gcov.html#803">esc_shell_multi</a></td>
<td class="coverFnHi">366387</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1159">mkancestor</a></td>
<td class="coverFnHi">787726</td>
<td class="coverFn"><a href="support.c.gcov.html#1165">mkancestor</a></td>
<td class="coverFnHi">787783</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1391">advise_write</a></td>
<td class="coverFnHi">914575</td>
<td class="coverFn"><a href="support.c.gcov.html#1397">advise_write</a></td>
<td class="coverFnHi">914297</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2358">thread_cond_wait</a></td>
<td class="coverFnHi">1554330</td>
<td class="coverFn"><a href="support.c.gcov.html#2364">thread_cond_wait</a></td>
<td class="coverFnHi">1554290</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#137">is_hw</a></td>
<td class="coverFnHi">1830939</td>
<td class="coverFnHi">1830711</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#967">pathcpy</a></td>
<td class="coverFnHi">1902922</td>
<td class="coverFn"><a href="support.c.gcov.html#973">pathcpy</a></td>
<td class="coverFnHi">1902784</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1345">advise_open</a></td>
<td class="coverFnHi">2410879</td>
<td class="coverFn"><a href="support.c.gcov.html#1351">advise_open</a></td>
<td class="coverFnHi">2410781</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1325">advise_flags</a></td>
<td class="coverFnHi">2489611</td>
<td class="coverFn"><a href="support.c.gcov.html#1331">advise_flags</a></td>
<td class="coverFnHi">2489478</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1318">advise_init</a></td>
<td class="coverFnHi">2489611</td>
<td class="coverFn"><a href="support.c.gcov.html#1324">advise_init</a></td>
<td class="coverFnHi">2489478</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#633">esc_tag</a></td>
<td class="coverFnHi">2652388</td>
<td class="coverFn"><a href="support.c.gcov.html#639">esc_tag</a></td>
<td class="coverFnHi">2653118</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#996">pathcatl</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1002">pathcatl</a></td>
<td class="coverFnHi">3601926</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#705">ssget</a></td>
<td class="coverFnHi">5261663</td>
<td class="coverFn"><a href="support.c.gcov.html#711">ssget</a></td>
<td class="coverFnHi">5265543</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1763">strdup_nofail</a></td>
<td class="coverFnHi">5965500</td>
<td class="coverFn"><a href="support.c.gcov.html#1769">strdup_nofail</a></td>
<td class="coverFnHi">5965600</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1568">advise_read</a></td>
<td class="coverFnHi">8833871</td>
<td class="coverFn"><a href="support.c.gcov.html#1574">advise_read</a></td>
<td class="coverFnHi">8833464</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1714">malloc_nofail</a></td>
<td class="coverFnHi">14819123</td>
<td class="coverFn"><a href="support.c.gcov.html#1720">malloc_nofail</a></td>
<td class="coverFnHi">14819141</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1655">malloc_counter_inc</a></td>
<td class="coverFnHi">20940815</td>
<td class="coverFn"><a href="support.c.gcov.html#1661">malloc_counter_inc</a></td>
<td class="coverFnHi">20941012</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#46">lock_memory</a></td>
<td class="coverFnHi">20941303</td>
<td class="coverFnHi">20941500</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#53">unlock_memory</a></td>
<td class="coverFnHi">20941303</td>
<td class="coverFnHi">20941500</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#391">log_tag</a></td>
<td class="coverFnHi">21732148</td>
<td class="coverFn"><a href="support.c.gcov.html#397">log_tag</a></td>
<td class="coverFnHi">21733516</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#32">lock_msg</a></td>
<td class="coverFnHi">22554567</td>
<td class="coverFnHi">22555773</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#39">unlock_msg</a></td>
<td class="coverFnHi">22554567</td>
<td class="coverFnHi">22555773</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1066">pathprint</a></td>
<td class="coverFnHi">42979947</td>
<td class="coverFn"><a href="support.c.gcov.html#1072">pathprint</a></td>
<td class="coverFnHi">42981264</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1115">pathcmp</a></td>
<td class="coverFnHi">53116131</td>
<td class="coverFn"><a href="support.c.gcov.html#1121">pathcmp</a></td>
<td class="coverFnHi">53117221</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2467">char_match</a></td>
<td class="coverFnHi">86982601</td>
<td class="coverFn"><a href="support.c.gcov.html#2473">char_match</a></td>
<td class="coverFnHi">86985273</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2522">wnmatch</a></td>
<td class="coverFnHi">102260599</td>
<td class="coverFn"><a href="support.c.gcov.html#2528">wnmatch</a></td>
<td class="coverFnHi">102263029</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2298">thread_mutex_lock</a></td>
<td class="coverFnHi">112510359</td>
<td class="coverFn"><a href="support.c.gcov.html#2304">thread_mutex_lock</a></td>
<td class="coverFnHi">112377134</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2308">thread_mutex_unlock</a></td>
<td class="coverFnHi">112510359</td>
<td class="coverFn"><a href="support.c.gcov.html#2314">thread_mutex_unlock</a></td>
<td class="coverFnHi">112377134</td>
</tr>
</table>
<br>

View file

@ -31,18 +31,18 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">633</td>
<td class="headerCovTableEntry">991</td>
<td class="headerCovTableEntryLo">63.9 %</td>
<td class="headerCovTableEntry">769</td>
<td class="headerCovTableEntry">956</td>
<td class="headerCovTableEntryMed">80.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">75</td>
<td class="headerCovTableEntry">78</td>
<td class="headerCovTableEntry">84</td>
<td class="headerCovTableEntryMed">89.3 %</td>
<td class="headerCovTableEntryHi">92.9 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
@ -60,208 +60,208 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="support.c.func-sort-c.html"><img src="../updown.png" width=10 height=14 alt="Sort by hit count" title="Sort by hit count" border=0></a></span></td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1325">advise_flags</a></td>
<td class="coverFnHi">2489611</td>
<td class="coverFn"><a href="support.c.gcov.html#1331">advise_flags</a></td>
<td class="coverFnHi">2489478</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1318">advise_init</a></td>
<td class="coverFnHi">2489611</td>
<td class="coverFn"><a href="support.c.gcov.html#1324">advise_init</a></td>
<td class="coverFnHi">2489478</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1345">advise_open</a></td>
<td class="coverFnHi">2410879</td>
<td class="coverFn"><a href="support.c.gcov.html#1351">advise_open</a></td>
<td class="coverFnHi">2410781</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1568">advise_read</a></td>
<td class="coverFnHi">8833871</td>
<td class="coverFn"><a href="support.c.gcov.html#1574">advise_read</a></td>
<td class="coverFnHi">8833464</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1391">advise_write</a></td>
<td class="coverFnHi">914575</td>
<td class="coverFn"><a href="support.c.gcov.html#1397">advise_write</a></td>
<td class="coverFnHi">914297</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1740">calloc_nofail</a></td>
<td class="coverFnHi">156192</td>
<td class="coverFn"><a href="support.c.gcov.html#1746">calloc_nofail</a></td>
<td class="coverFnHi">156271</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2467">char_match</a></td>
<td class="coverFnHi">86982601</td>
<td class="coverFn"><a href="support.c.gcov.html#2473">char_match</a></td>
<td class="coverFnHi">86985273</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#797">esc_shell_multi</a></td>
<td class="coverFnHi">366218</td>
<td class="coverFn"><a href="support.c.gcov.html#803">esc_shell_multi</a></td>
<td class="coverFnHi">366387</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#633">esc_tag</a></td>
<td class="coverFnHi">2652388</td>
<td class="coverFn"><a href="support.c.gcov.html#639">esc_tag</a></td>
<td class="coverFnHi">2653118</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1223">fmtime</a></td>
<td class="coverFnHi">121348</td>
<td class="coverFn"><a href="support.c.gcov.html#1229">fmtime</a></td>
<td class="coverFnHi">121378</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#137">is_hw</a></td>
<td class="coverFnHi">1830939</td>
<td class="coverFnHi">1830711</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1269">lmtime</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1275">lmtime</a></td>
<td class="coverFnHi">11645</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#85">lock_done</a></td>
<td class="coverFnHi">288</td>
<td class="coverFnHi">289</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#75">lock_init</a></td>
<td class="coverFnHi">310</td>
<td class="coverFnHi">311</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#46">lock_memory</a></td>
<td class="coverFnHi">20941303</td>
<td class="coverFnHi">20941500</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#32">lock_msg</a></td>
<td class="coverFnHi">22554567</td>
<td class="coverFnHi">22555773</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#60">lock_random</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#341">log_error</a></td>
<td class="coverFnHi">365227</td>
<td class="coverFn"><a href="support.c.gcov.html#347">log_error</a></td>
<td class="coverFnHi">364924</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#205">log_error_errno</a></td>
<td class="coverFn"><a href="support.c.gcov.html#209">log_error_errno</a></td>
<td class="coverFnHi">27</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#369">log_expected</a></td>
<td class="coverFn"><a href="support.c.gcov.html#375">log_expected</a></td>
<td class="coverFnHi">4697</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#313">log_fatal</a></td>
<td class="coverFn"><a href="support.c.gcov.html#319">log_fatal</a></td>
<td class="coverFnHi">803</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#168">log_fatal_errno</a></td>
<td class="coverFn"><a href="support.c.gcov.html#170">log_fatal_errno</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#408">log_flush</a></td>
<td class="coverFnHi">3649</td>
<td class="coverFn"><a href="support.c.gcov.html#414">log_flush</a></td>
<td class="coverFnHi">3652</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#391">log_tag</a></td>
<td class="coverFnHi">21732148</td>
<td class="coverFn"><a href="support.c.gcov.html#397">log_tag</a></td>
<td class="coverFnHi">21733516</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1642">malloc_counter_get</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1648">malloc_counter_get</a></td>
<td class="coverFnHi">488</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1655">malloc_counter_inc</a></td>
<td class="coverFnHi">20940815</td>
<td class="coverFn"><a href="support.c.gcov.html#1661">malloc_counter_inc</a></td>
<td class="coverFnHi">20941012</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1714">malloc_nofail</a></td>
<td class="coverFnHi">14819123</td>
<td class="coverFn"><a href="support.c.gcov.html#1720">malloc_nofail</a></td>
<td class="coverFnHi">14819141</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2480">match_class</a></td>
<td class="coverFn"><a href="support.c.gcov.html#2486">match_class</a></td>
<td class="coverFnHi">28</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1159">mkancestor</a></td>
<td class="coverFnHi">787726</td>
<td class="coverFn"><a href="support.c.gcov.html#1165">mkancestor</a></td>
<td class="coverFnHi">787783</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#492">msg_bar</a></td>
<td class="coverFnHi">2118</td>
<td class="coverFn"><a href="support.c.gcov.html#498">msg_bar</a></td>
<td class="coverFnHi">2042</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#538">msg_flush</a></td>
<td class="coverFnHi">586</td>
<td class="coverFn"><a href="support.c.gcov.html#544">msg_flush</a></td>
<td class="coverFnHi">572</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#445">msg_info</a></td>
<td class="coverFnHi">312495</td>
<td class="coverFn"><a href="support.c.gcov.html#451">msg_info</a></td>
<td class="coverFnHi">312664</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#465">msg_progress</a></td>
<td class="coverFnHi">5081</td>
<td class="coverFn"><a href="support.c.gcov.html#471">msg_progress</a></td>
<td class="coverFnHi">5066</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#420">msg_status</a></td>
<td class="coverFn"><a href="support.c.gcov.html#426">msg_status</a></td>
<td class="coverFnHi">743</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#511">msg_verbose</a></td>
<td class="coverFnHi">127020</td>
<td class="coverFn"><a href="support.c.gcov.html#517">msg_verbose</a></td>
<td class="coverFnHi">127094</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1132">path_is_root_of</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1138">path_is_root_of</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#981">pathcat</a></td>
<td class="coverFnHi">279</td>
<td class="coverFn"><a href="support.c.gcov.html#987">pathcat</a></td>
<td class="coverFnHi">280</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1010">pathcatc</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1016">pathcatc</a></td>
<td class="coverFnHi">788</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#996">pathcatl</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1002">pathcatl</a></td>
<td class="coverFnHi">3601926</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1115">pathcmp</a></td>
<td class="coverFnHi">53116131</td>
<td class="coverFn"><a href="support.c.gcov.html#1121">pathcmp</a></td>
<td class="coverFnHi">53117221</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#967">pathcpy</a></td>
<td class="coverFnHi">1902922</td>
<td class="coverFn"><a href="support.c.gcov.html#973">pathcpy</a></td>
<td class="coverFnHi">1902784</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1105">pathcut</a></td>
<td class="coverFnHi">58108</td>
<td class="coverFn"><a href="support.c.gcov.html#1111">pathcut</a></td>
<td class="coverFnHi">58110</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1046">pathexport</a></td>
<td class="coverFn"><a href="support.c.gcov.html#1052">pathexport</a></td>
<td class="coverFnHi">12234</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1025">pathimport</a></td>
<td class="coverFnHi">17981</td>
<td class="coverFn"><a href="support.c.gcov.html#1031">pathimport</a></td>
<td class="coverFnHi">18024</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1066">pathprint</a></td>
<td class="coverFnHi">42979947</td>
<td class="coverFn"><a href="support.c.gcov.html#1072">pathprint</a></td>
<td class="coverFnHi">42981264</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1088">pathslash</a></td>
<td class="coverFnHi">7949</td>
<td class="coverFn"><a href="support.c.gcov.html#1094">pathslash</a></td>
<td class="coverFnHi">7959</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#548">printc</a></td>
<td class="coverFnHi">77</td>
<td class="coverFn"><a href="support.c.gcov.html#554">printc</a></td>
<td class="coverFnHi">78</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#579">printl</a></td>
<td class="coverFnHi">142</td>
<td class="coverFn"><a href="support.c.gcov.html#585">printl</a></td>
<td class="coverFnHi">157</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#591">printp</a></td>
<td class="coverFn"><a href="support.c.gcov.html#597">printp</a></td>
<td class="coverFnHi">18</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#567">printr</a></td>
<td class="coverFn"><a href="support.c.gcov.html#573">printr</a></td>
<td class="coverFnHi">34</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#99">random_reseed</a></td>
<td class="coverFnHi">283</td>
<td class="coverFnHi">284</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#118">random_u64</a></td>
@ -272,127 +272,127 @@
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1824">scomma</a></td>
<td class="coverFnLo">0</td>
<td class="coverFn"><a href="support.c.gcov.html#1830">scomma</a></td>
<td class="coverFnHi">2316</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2255">smart_temp</a></td>
<td class="coverFnHi">145110</td>
<td class="coverFn"><a href="support.c.gcov.html#2261">smart_temp</a></td>
<td class="coverFnHi">145124</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1892">smartctl_attribute</a></td>
<td class="coverFnLo">0</td>
<td class="coverFn"><a href="support.c.gcov.html#1898">smartctl_attribute</a></td>
<td class="coverFnHi">14</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2235">smartctl_flush</a></td>
<td class="coverFn"><a href="support.c.gcov.html#2241">smartctl_flush</a></td>
<td class="coverFnHi">5</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1794">smatch</a></td>
<td class="coverFnLo">0</td>
<td class="coverFn"><a href="support.c.gcov.html#1800">smatch</a></td>
<td class="coverFnHi">1779</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#705">ssget</a></td>
<td class="coverFnHi">5261663</td>
<td class="coverFn"><a href="support.c.gcov.html#711">ssget</a></td>
<td class="coverFnHi">5265543</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#1763">strdup_nofail</a></td>
<td class="coverFnHi">5965500</td>
<td class="coverFn"><a href="support.c.gcov.html#1769">strdup_nofail</a></td>
<td class="coverFnHi">5965600</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#930">strlwr</a></td>
<td class="coverFn"><a href="support.c.gcov.html#936">strlwr</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#870">strpolish</a></td>
<td class="coverFnHi">21</td>
<td class="coverFn"><a href="support.c.gcov.html#876">strpolish</a></td>
<td class="coverFnHi">256</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#883">strsplit</a></td>
<td class="coverFnHi">1718</td>
<td class="coverFn"><a href="support.c.gcov.html#889">strsplit</a></td>
<td class="coverFnHi">1720</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#909">strtrim</a></td>
<td class="coverFnHi">13</td>
<td class="coverFn"><a href="support.c.gcov.html#915">strtrim</a></td>
<td class="coverFnHi">67</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2348">thread_cond_broadcast</a></td>
<td class="coverFnHi">257671</td>
<td class="coverFn"><a href="support.c.gcov.html#2354">thread_cond_broadcast</a></td>
<td class="coverFnHi">257545</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2414">thread_cond_broadcast_and_unlock</a></td>
<td class="coverFnHi">257469</td>
<td class="coverFn"><a href="support.c.gcov.html#2420">thread_cond_broadcast_and_unlock</a></td>
<td class="coverFnHi">257343</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2328">thread_cond_destroy</a></td>
<td class="coverFn"><a href="support.c.gcov.html#2334">thread_cond_destroy</a></td>
<td class="coverFnHi">404</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2318">thread_cond_init</a></td>
<td class="coverFn"><a href="support.c.gcov.html#2324">thread_cond_init</a></td>
<td class="coverFnHi">404</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2338">thread_cond_signal</a></td>
<td class="coverFnHi">668</td>
<td class="coverFn"><a href="support.c.gcov.html#2344">thread_cond_signal</a></td>
<td class="coverFnHi">827</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2397">thread_cond_signal_and_unlock</a></td>
<td class="coverFnHi">668</td>
<td class="coverFn"><a href="support.c.gcov.html#2403">thread_cond_signal_and_unlock</a></td>
<td class="coverFnHi">827</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2358">thread_cond_wait</a></td>
<td class="coverFnHi">1554330</td>
<td class="coverFn"><a href="support.c.gcov.html#2364">thread_cond_wait</a></td>
<td class="coverFnHi">1554290</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2431">thread_create</a></td>
<td class="coverFnHi">2876</td>
<td class="coverFn"><a href="support.c.gcov.html#2437">thread_create</a></td>
<td class="coverFnHi">2883</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2441">thread_join</a></td>
<td class="coverFnHi">2876</td>
<td class="coverFn"><a href="support.c.gcov.html#2447">thread_join</a></td>
<td class="coverFnHi">2883</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2288">thread_mutex_destroy</a></td>
<td class="coverFnHi">3167</td>
<td class="coverFn"><a href="support.c.gcov.html#2294">thread_mutex_destroy</a></td>
<td class="coverFnHi">3180</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2278">thread_mutex_init</a></td>
<td class="coverFnHi">3299</td>
<td class="coverFn"><a href="support.c.gcov.html#2284">thread_mutex_init</a></td>
<td class="coverFnHi">3312</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2298">thread_mutex_lock</a></td>
<td class="coverFnHi">112510359</td>
<td class="coverFn"><a href="support.c.gcov.html#2304">thread_mutex_lock</a></td>
<td class="coverFnHi">112377134</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2308">thread_mutex_unlock</a></td>
<td class="coverFnHi">112510359</td>
<td class="coverFn"><a href="support.c.gcov.html#2314">thread_mutex_unlock</a></td>
<td class="coverFnHi">112377134</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2451">thread_yield</a></td>
<td class="coverFnHi">105499</td>
<td class="coverFn"><a href="support.c.gcov.html#2457">thread_yield</a></td>
<td class="coverFnHi">108112</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#53">unlock_memory</a></td>
<td class="coverFnHi">20941303</td>
<td class="coverFnHi">20941500</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#39">unlock_msg</a></td>
<td class="coverFnHi">22554567</td>
<td class="coverFnHi">22555773</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#67">unlock_random</a></td>
<td class="coverFnLo">0</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#262">vmsg</a></td>
<td class="coverFnHi">41543</td>
<td class="coverFn"><a href="support.c.gcov.html#268">vmsg</a></td>
<td class="coverFnHi">41562</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#2522">wnmatch</a></td>
<td class="coverFnHi">102260599</td>
<td class="coverFn"><a href="support.c.gcov.html#2528">wnmatch</a></td>
<td class="coverFnHi">102263029</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#942">worddigitstr</a></td>
<td class="coverFn"><a href="support.c.gcov.html#948">worddigitstr</a></td>
<td class="coverFnHi">11</td>
</tr>
</table>

File diff suppressed because it is too large Load diff

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2026-02-28 09:49:08</td>
<td class="headerValue">2026-02-28 10:17:21</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="support.h.gcov.html#267">esc_shell</a></td>
<td class="coverFnHi">342153</td>
<td class="coverFnHi">342322</td>
</tr>
</table>
<br>

Some files were not shown because too many files have changed in this diff Show more