Auto update

This commit is contained in:
Andrea Mazzoleni 2015-11-20 21:57:37 +01:00
parent 620cf46462
commit 5251fd8269
209 changed files with 6129 additions and 6080 deletions

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
@ -69,19 +69,19 @@
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#285">repair</a></td>
<td class="coverFnHi">869090</td>
<td class="coverFnHi">869089</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#68">blockcmp</a></td>
<td class="coverFnHi">468340</td>
<td class="coverFnHi">468172</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#160">repair_step</a></td>
<td class="coverFnHi">260919</td>
<td class="coverFnHi">260805</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#97">is_hash_matching</a></td>
<td class="coverFnHi">209415</td>
<td class="coverFnHi">209449</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#140">is_parity_matching</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">9</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#68">blockcmp</a></td>
<td class="coverFnHi">468340</td>
<td class="coverFnHi">468172</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#594">file_post</a></td>
@ -73,7 +73,7 @@
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#97">is_hash_matching</a></td>
<td class="coverFnHi">209415</td>
<td class="coverFnHi">209449</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#140">is_parity_matching</a></td>
@ -81,11 +81,11 @@
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#285">repair</a></td>
<td class="coverFnHi">869090</td>
<td class="coverFnHi">869089</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#160">repair_step</a></td>
<td class="coverFnHi">260919</td>
<td class="coverFnHi">260805</td>
</tr>
<tr>
<td class="coverFn"><a href="check.c.gcov.html#1904">state_check</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">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">11</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">11</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">11</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">5</td>
@ -168,14 +168,14 @@
<span class="lineNum"> 106 </span><span class="lineCov"> 18 : struct snapraid_disk* disk = i-&gt;data;</span>
<span class="lineNum"> 107 </span> :
<span class="lineNum"> 108 </span> : /* for each file */
<span class="lineNum"> 109 </span><span class="lineCov"> 16996 : for (j = disk-&gt;filelist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 110 </span><span class="lineCov"> 16978 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 109 </span><span class="lineCov"> 16998 : for (j = disk-&gt;filelist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 110 </span><span class="lineCov"> 16980 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 111 </span> : struct snapraid_hash* hash;
<span class="lineNum"> 112 </span> : tommy_hash_t hash32;
<span class="lineNum"> 113 </span> :
<span class="lineNum"> 114 </span> : /* if empty, skip it */
<span class="lineNum"> 115 </span><span class="lineCov"> 16978 : if (file-&gt;size == 0)</span>
<span class="lineNum"> 116 </span><span class="lineCov"> 22 : continue;</span>
<span class="lineNum"> 115 </span><span class="lineCov"> 16980 : if (file-&gt;size == 0)</span>
<span class="lineNum"> 116 </span><span class="lineCov"> 24 : continue;</span>
<span class="lineNum"> 117 </span> :
<span class="lineNum"> 118 </span><span class="lineCov"> 16956 : hash = hash_alloc(state, disk, file);</span>
<span class="lineNum"> 119 </span> :

View file

@ -31,18 +31,18 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">537</td>
<td class="headerCovTableEntry">574</td>
<td class="headerCovTableEntryHi">93.6 %</td>
<td class="headerCovTableEntry">545</td>
<td class="headerCovTableEntry">581</td>
<td class="headerCovTableEntryHi">93.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">61</td>
<td class="headerCovTableEntry">63</td>
<td class="headerCovTableEntryHi">96.8 %</td>
<td class="headerCovTableEntry">62</td>
<td class="headerCovTableEntry">64</td>
<td class="headerCovTableEntryHi">96.9 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
@ -60,64 +60,68 @@
<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="elem.c.gcov.html#1012">chunk_parity_inside_compare</a></td>
<td class="coverFnHi">213182654</td>
<td class="coverFn"><a href="elem.c.gcov.html#1043">chunk_parity_inside_compare</a></td>
<td class="coverFnHi">211700412</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1062">chunk_file_inside_compare</a></td>
<td class="coverFnHi">123631586</td>
<td class="coverFn"><a href="elem.c.gcov.html#1093">chunk_file_inside_compare</a></td>
<td class="coverFnHi">123424429</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1110">fs_par2file_get_ts</a></td>
<td class="coverFnHi">62727960</td>
<td class="coverFn"><a href="elem.c.gcov.html#1283">fs_file2block_get</a></td>
<td class="coverFnHi">112904165</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1030">fs_par2chunk_get_ts</a></td>
<td class="coverFnHi">62657428</td>
<td class="coverFn"><a href="elem.c.gcov.html#1141">fs_par2file_get_ts</a></td>
<td class="coverFnHi">62671366</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1252">fs_par2block_get_ts</a></td>
<td class="coverFnHi">51081912</td>
<td class="coverFn"><a href="elem.c.gcov.html#1061">fs_par2chunk_get_ts</a></td>
<td class="coverFnHi">62562730</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#635">chunk_file_compare</a></td>
<td class="coverFnHi">43527266</td>
<td class="coverFn"><a href="elem.c.gcov.html#1295">fs_par2block_get_ts</a></td>
<td class="coverFnHi">51148943</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#622">chunk_parity_compare</a></td>
<td class="coverFnHi">43029334</td>
<td class="coverFn"><a href="elem.c.gcov.html#648">chunk_file_compare</a></td>
<td class="coverFnHi">43527418</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1085">fs_file2chunk_get_ts</a></td>
<td class="coverFnHi">34130326</td>
<td class="coverFn"><a href="elem.c.gcov.html#635">chunk_parity_compare</a></td>
<td class="coverFnHi">43029600</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1124">fs_file2par_get_ts</a></td>
<td class="coverFnHi">28966119</td>
<td class="coverFn"><a href="elem.c.gcov.html#1116">fs_file2chunk_get_ts</a></td>
<td class="coverFnHi">34157182</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1155">fs_file2par_get_ts</a></td>
<td class="coverFnHi">28740730</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#167">filter_apply</a></td>
<td class="coverFnHi">12035121</td>
<td class="coverFnHi">12035450</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1139">fs_allocate</a></td>
<td class="coverFnHi">8850076</td>
<td class="coverFn"><a href="elem.c.gcov.html#1170">fs_allocate</a></td>
<td class="coverFnHi">8849850</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#466">file_block_size</a></td>
<td class="coverFnHi">6609423</td>
<td class="coverFnHi">6610122</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#884">chunk_file_check_foreach</a></td>
<td class="coverFnHi">6291272</td>
<td class="coverFn"><a href="elem.c.gcov.html#906">chunk_file_check_foreach</a></td>
<td class="coverFnHi">6291380</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#843">chunk_parity_check_foreach</a></td>
<td class="coverFnHi">6291272</td>
<td class="coverFn"><a href="elem.c.gcov.html#856">chunk_parity_check_foreach</a></td>
<td class="coverFnHi">6291380</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#192">filter_recurse</a></td>
<td class="coverFnHi">6023322</td>
<td class="coverFnHi">6023667</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#482">file_block_is_last</a></td>
@ -125,95 +129,95 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#604">chunk_alloc</a></td>
<td class="coverFnHi">3607803</td>
<td class="coverFnHi">3607761</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#356">file_alloc</a></td>
<td class="coverFnHi">3565018</td>
<td class="coverFnHi">3565141</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#617">chunk_free</a></td>
<td class="coverFnHi">3437425</td>
<td class="coverFn"><a href="elem.c.gcov.html#630">chunk_free</a></td>
<td class="coverFnHi">3437520</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#404">file_free</a></td>
<td class="coverFnHi">3417005</td>
<td class="coverFnHi">3417248</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#226">filter_element</a></td>
<td class="coverFnHi">3226046</td>
<td class="coverFnHi">3226232</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#275">filter_path</a></td>
<td class="coverFnHi">3223074</td>
<td class="coverFnHi">3223260</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#331">filter_content</a></td>
<td class="coverFnHi">3066757</td>
<td class="coverFnHi">3066852</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#497">file_inode_compare_to_arg</a></td>
<td class="coverFnHi">869924</td>
<td class="coverFnHi">866983</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1284">time_compare</a></td>
<td class="coverFnHi">713560</td>
<td class="coverFn"><a href="elem.c.gcov.html#1327">time_compare</a></td>
<td class="coverFnHi">743492</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#521">file_path_compare</a></td>
<td class="coverFnHi">126320</td>
<td class="coverFnHi">126356</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#149">filter_type</a></td>
<td class="coverFnHi">125579</td>
<td class="coverFnHi">125437</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#653">link_alloc</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#666">link_alloc</a></td>
<td class="coverFnHi">115419</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#665">link_free</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#678">link_free</a></td>
<td class="coverFnHi">109621</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#541">file_path_compare_to_arg</a></td>
<td class="coverFnHi">105086</td>
<td class="coverFnHi">105104</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1183">fs_deallocate</a></td>
<td class="coverFnHi">104031</td>
<td class="coverFn"><a href="elem.c.gcov.html#1214">fs_deallocate</a></td>
<td class="coverFnHi">104155</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#285">filter_existence</a></td>
<td class="coverFnHi">80649</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#529">file_physical_compare</a></td>
<td class="coverFnHi">54526</td>
<td class="coverFnHi">80654</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#455">file_name</a></td>
<td class="coverFnHi">47858</td>
<td class="coverFnHi">47908</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#818">chunk_disk_size_compare</a></td>
<td class="coverFnHi">47777</td>
<td class="coverFn"><a href="elem.c.gcov.html#831">chunk_disk_size_compare</a></td>
<td class="coverFnHi">47779</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#310">filter_correctness</a></td>
<td class="coverFnHi">38803</td>
<td class="coverFnHi">38806</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#672">link_name_compare_to_arg</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#529">file_physical_compare</a></td>
<td class="coverFnHi">34618</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#685">link_name_compare_to_arg</a></td>
<td class="coverFnHi">30380</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#582">file_namestamp_compare</a></td>
<td class="coverFnHi">23929</td>
<td class="coverFnHi">23954</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#549">file_name_compare</a></td>
<td class="coverFnHi">23929</td>
<td class="coverFnHi">23954</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#559">file_stamp_compare</a></td>
@ -221,14 +225,14 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#380">file_dup</a></td>
<td class="coverFnHi">21784</td>
<td class="coverFnHi">21785</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#419">file_copy</a></td>
<td class="coverFnHi">6209</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#831">disk_size</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#844">disk_size</a></td>
<td class="coverFnHi">3955</td>
</tr>
<tr>
@ -236,15 +240,15 @@
<td class="coverFnHi">2972</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#984">fs_check</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#1015">fs_check</a></td>
<td class="coverFnHi">2676</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#713">disk_alloc</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#726">disk_alloc</a></td>
<td class="coverFnHi">1477</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1265">map_alloc</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#1308">map_alloc</a></td>
<td class="coverFnHi">1447</td>
</tr>
<tr>
@ -252,11 +256,11 @@
<td class="coverFnHi">1434</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#753">disk_free</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#766">disk_free</a></td>
<td class="coverFnHi">1351</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1279">map_free</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#1322">map_free</a></td>
<td class="coverFnHi">1327</td>
</tr>
<tr>
@ -264,19 +268,19 @@
<td class="coverFnHi">1297</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#680">link_alpha_compare</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#693">link_alpha_compare</a></td>
<td class="coverFnHi">1249</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#788">disk_is_empty</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#801">disk_is_empty</a></td>
<td class="coverFnHi">804</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#688">dir_alloc</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#701">dir_alloc</a></td>
<td class="coverFnHi">760</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#699">dir_free</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#712">dir_free</a></td>
<td class="coverFnHi">712</td>
</tr>
<tr>
@ -288,7 +292,7 @@
<td class="coverFnHi">461</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#705">dir_name_compare</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#718">dir_name_compare</a></td>
<td class="coverFnHi">217</td>
</tr>
<tr>
@ -296,7 +300,7 @@
<td class="coverFnHi">155</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#775">chunk_disk_empty_compare</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#788">chunk_disk_empty_compare</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>

View file

@ -31,18 +31,18 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">537</td>
<td class="headerCovTableEntry">574</td>
<td class="headerCovTableEntryHi">93.6 %</td>
<td class="headerCovTableEntry">545</td>
<td class="headerCovTableEntry">581</td>
<td class="headerCovTableEntryHi">93.8 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">61</td>
<td class="headerCovTableEntry">63</td>
<td class="headerCovTableEntryHi">96.8 %</td>
<td class="headerCovTableEntry">62</td>
<td class="headerCovTableEntry">64</td>
<td class="headerCovTableEntryHi">96.9 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
</table>
@ -61,43 +61,43 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#604">chunk_alloc</a></td>
<td class="coverFnHi">3607803</td>
<td class="coverFnHi">3607761</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#775">chunk_disk_empty_compare</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#788">chunk_disk_empty_compare</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#818">chunk_disk_size_compare</a></td>
<td class="coverFnHi">47777</td>
<td class="coverFn"><a href="elem.c.gcov.html#831">chunk_disk_size_compare</a></td>
<td class="coverFnHi">47779</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#884">chunk_file_check_foreach</a></td>
<td class="coverFnHi">6291272</td>
<td class="coverFn"><a href="elem.c.gcov.html#906">chunk_file_check_foreach</a></td>
<td class="coverFnHi">6291380</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#635">chunk_file_compare</a></td>
<td class="coverFnHi">43527266</td>
<td class="coverFn"><a href="elem.c.gcov.html#648">chunk_file_compare</a></td>
<td class="coverFnHi">43527418</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1062">chunk_file_inside_compare</a></td>
<td class="coverFnHi">123631586</td>
<td class="coverFn"><a href="elem.c.gcov.html#1093">chunk_file_inside_compare</a></td>
<td class="coverFnHi">123424429</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#617">chunk_free</a></td>
<td class="coverFnHi">3437425</td>
<td class="coverFn"><a href="elem.c.gcov.html#630">chunk_free</a></td>
<td class="coverFnHi">3437520</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#843">chunk_parity_check_foreach</a></td>
<td class="coverFnHi">6291272</td>
<td class="coverFn"><a href="elem.c.gcov.html#856">chunk_parity_check_foreach</a></td>
<td class="coverFnHi">6291380</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#622">chunk_parity_compare</a></td>
<td class="coverFnHi">43029334</td>
<td class="coverFn"><a href="elem.c.gcov.html#635">chunk_parity_compare</a></td>
<td class="coverFnHi">43029600</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1012">chunk_parity_inside_compare</a></td>
<td class="coverFnHi">213182654</td>
<td class="coverFn"><a href="elem.c.gcov.html#1043">chunk_parity_inside_compare</a></td>
<td class="coverFnHi">211700412</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#25">content_alloc</a></td>
@ -108,36 +108,36 @@
<td class="coverFnHi">1297</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#688">dir_alloc</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#701">dir_alloc</a></td>
<td class="coverFnHi">760</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#699">dir_free</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#712">dir_free</a></td>
<td class="coverFnHi">712</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#705">dir_name_compare</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#718">dir_name_compare</a></td>
<td class="coverFnHi">217</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#713">disk_alloc</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#726">disk_alloc</a></td>
<td class="coverFnHi">1477</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#753">disk_free</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#766">disk_free</a></td>
<td class="coverFnHi">1351</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#788">disk_is_empty</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#801">disk_is_empty</a></td>
<td class="coverFnHi">804</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#831">disk_size</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#844">disk_size</a></td>
<td class="coverFnHi">3955</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#356">file_alloc</a></td>
<td class="coverFnHi">3565018</td>
<td class="coverFnHi">3565141</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#482">file_block_is_last</a></td>
@ -145,7 +145,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#466">file_block_size</a></td>
<td class="coverFnHi">6609423</td>
<td class="coverFnHi">6610122</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#419">file_copy</a></td>
@ -153,11 +153,11 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#380">file_dup</a></td>
<td class="coverFnHi">21784</td>
<td class="coverFnHi">21785</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#404">file_free</a></td>
<td class="coverFnHi">3417005</td>
<td class="coverFnHi">3417248</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#509">file_inode_compare</a></td>
@ -165,27 +165,27 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#497">file_inode_compare_to_arg</a></td>
<td class="coverFnHi">869924</td>
<td class="coverFnHi">866983</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#455">file_name</a></td>
<td class="coverFnHi">47858</td>
<td class="coverFnHi">47908</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#549">file_name_compare</a></td>
<td class="coverFnHi">23929</td>
<td class="coverFnHi">23954</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#582">file_namestamp_compare</a></td>
<td class="coverFnHi">23929</td>
<td class="coverFnHi">23954</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#521">file_path_compare</a></td>
<td class="coverFnHi">126320</td>
<td class="coverFnHi">126356</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#541">file_path_compare_to_arg</a></td>
<td class="coverFnHi">105086</td>
<td class="coverFnHi">105104</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#593">file_pathstamp_compare</a></td>
@ -193,7 +193,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#529">file_physical_compare</a></td>
<td class="coverFnHi">54526</td>
<td class="coverFnHi">34618</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#413">file_rename</a></td>
@ -213,15 +213,15 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#167">filter_apply</a></td>
<td class="coverFnHi">12035121</td>
<td class="coverFnHi">12035450</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#331">filter_content</a></td>
<td class="coverFnHi">3066757</td>
<td class="coverFnHi">3066852</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#310">filter_correctness</a></td>
<td class="coverFnHi">38803</td>
<td class="coverFnHi">38806</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#280">filter_dir</a></td>
@ -229,11 +229,11 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#226">filter_element</a></td>
<td class="coverFnHi">3226046</td>
<td class="coverFnHi">3226232</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#285">filter_existence</a></td>
<td class="coverFnHi">80649</td>
<td class="coverFnHi">80654</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#144">filter_free</a></td>
@ -241,75 +241,79 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#275">filter_path</a></td>
<td class="coverFnHi">3223074</td>
<td class="coverFnHi">3223260</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#192">filter_recurse</a></td>
<td class="coverFnHi">6023322</td>
<td class="coverFnHi">6023667</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#149">filter_type</a></td>
<td class="coverFnHi">125579</td>
<td class="coverFnHi">125437</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1139">fs_allocate</a></td>
<td class="coverFnHi">8850076</td>
<td class="coverFn"><a href="elem.c.gcov.html#1170">fs_allocate</a></td>
<td class="coverFnHi">8849850</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#984">fs_check</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#1015">fs_check</a></td>
<td class="coverFnHi">2676</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1183">fs_deallocate</a></td>
<td class="coverFnHi">104031</td>
<td class="coverFn"><a href="elem.c.gcov.html#1214">fs_deallocate</a></td>
<td class="coverFnHi">104155</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1085">fs_file2chunk_get_ts</a></td>
<td class="coverFnHi">34130326</td>
<td class="coverFn"><a href="elem.c.gcov.html#1283">fs_file2block_get</a></td>
<td class="coverFnHi">112904165</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1124">fs_file2par_get_ts</a></td>
<td class="coverFnHi">28966119</td>
<td class="coverFn"><a href="elem.c.gcov.html#1116">fs_file2chunk_get_ts</a></td>
<td class="coverFnHi">34157182</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1252">fs_par2block_get_ts</a></td>
<td class="coverFnHi">51081912</td>
<td class="coverFn"><a href="elem.c.gcov.html#1155">fs_file2par_get_ts</a></td>
<td class="coverFnHi">28740730</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1030">fs_par2chunk_get_ts</a></td>
<td class="coverFnHi">62657428</td>
<td class="coverFn"><a href="elem.c.gcov.html#1295">fs_par2block_get_ts</a></td>
<td class="coverFnHi">51148943</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1110">fs_par2file_get_ts</a></td>
<td class="coverFnHi">62727960</td>
<td class="coverFn"><a href="elem.c.gcov.html#1061">fs_par2chunk_get_ts</a></td>
<td class="coverFnHi">62562730</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#653">link_alloc</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#1141">fs_par2file_get_ts</a></td>
<td class="coverFnHi">62671366</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#666">link_alloc</a></td>
<td class="coverFnHi">115419</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#680">link_alpha_compare</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#693">link_alpha_compare</a></td>
<td class="coverFnHi">1249</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#665">link_free</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#678">link_free</a></td>
<td class="coverFnHi">109621</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#672">link_name_compare_to_arg</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#685">link_name_compare_to_arg</a></td>
<td class="coverFnHi">30380</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1265">map_alloc</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#1308">map_alloc</a></td>
<td class="coverFnHi">1447</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1279">map_free</a></td>
<td class="coverFn"><a href="elem.c.gcov.html#1322">map_free</a></td>
<td class="coverFnHi">1327</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.c.gcov.html#1284">time_compare</a></td>
<td class="coverFnHi">713560</td>
<td class="coverFn"><a href="elem.c.gcov.html#1327">time_compare</a></td>
<td class="coverFnHi">743492</td>
</tr>
</table>
<br>

File diff suppressed because it is too large Load diff

View file

@ -31,17 +31,17 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">118</td>
<td class="headerCovTableEntry">119</td>
<td class="headerCovTableEntryHi">99.2 %</td>
<td class="headerCovTableEntry">115</td>
<td class="headerCovTableEntry">116</td>
<td class="headerCovTableEntryHi">99.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">39</td>
<td class="headerCovTableEntry">39</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
@ -59,117 +59,113 @@
<td width="80%" class="tableHead">Function Name <span class="tableHeadSort"><a href="elem.h.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="elem.h.gcov.html#916">fs_file2block_get</a></td>
<td class="coverFnHi">114670866</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#560">block_state_get</a></td>
<td class="coverFnHi">96508438</td>
<td class="coverFnHi">96735410</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#639">file_flag_has</a></td>
<td class="coverFnHi">33299349</td>
<td class="coverFnHi">33299459</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#962">fs_par2block_get</a></td>
<td class="coverFnHi">21725563</td>
<td class="coverFn"><a href="elem.h.gcov.html#957">fs_par2block_get</a></td>
<td class="coverFnHi">21727310</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#571">block_state_set</a></td>
<td class="coverFnHi">18241681</td>
<td class="coverFnHi">18242161</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#606">block_has_file</a></td>
<td class="coverFnHi">12928240</td>
<td class="coverFnHi">12929086</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#933">fs_par2file_get</a></td>
<td class="coverFnHi">11513278</td>
<td class="coverFn"><a href="elem.h.gcov.html#928">fs_par2file_get</a></td>
<td class="coverFnHi">11514087</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#619">block_has_invalid_parity</a></td>
<td class="coverFnHi">11488433</td>
<td class="coverFnHi">11489174</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1070">info_get</a></td>
<td class="coverFnHi">10527480</td>
<td class="coverFn"><a href="elem.h.gcov.html#1065">info_get</a></td>
<td class="coverFnHi">10573034</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#541">hash_invalid_set</a></td>
<td class="coverFnHi">8911064</td>
<td class="coverFnHi">8910831</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#747">file_stamp_hash</a></td>
<td class="coverFnHi">6139195</td>
<td class="coverFnHi">6139138</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#644">file_flag_set</a></td>
<td class="coverFnHi">5178039</td>
<td class="coverFnHi">5176917</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#718">file_inode_hash</a></td>
<td class="coverFnHi">4822885</td>
<td class="coverFnHi">4822298</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#739">file_path_hash</a></td>
<td class="coverFnHi">3766477</td>
<td class="coverFnHi">3766623</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1025">info_get_rehash</a></td>
<td class="coverFnHi">3293767</td>
<td class="coverFn"><a href="elem.h.gcov.html#1020">info_get_rehash</a></td>
<td class="coverFnHi">3312725</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#456">filter_hidden</a></td>
<td class="coverFnHi">3066757</td>
<td class="coverFnHi">3066852</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#594">block_has_past_hash</a></td>
<td class="coverFnHi">2287716</td>
<td class="coverFnHi">2287366</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1007">info_get_time</a></td>
<td class="coverFnHi">2241006</td>
<td class="coverFn"><a href="elem.h.gcov.html#1002">info_get_time</a></td>
<td class="coverFnHi">2258078</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#581">block_has_updated_hash</a></td>
<td class="coverFnHi">2004868</td>
<td class="coverFnHi">2005171</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1016">info_get_bad</a></td>
<td class="coverFnHi">1705083</td>
<td class="coverFn"><a href="elem.h.gcov.html#1011">info_get_bad</a></td>
<td class="coverFnHi">1725704</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1059">info_set</a></td>
<td class="coverFnHi">1609362</td>
<td class="coverFn"><a href="elem.h.gcov.html#1054">info_set</a></td>
<td class="coverFnHi">1609485</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1034">info_get_justsynced</a></td>
<td class="coverFnHi">1455572</td>
<td class="coverFn"><a href="elem.h.gcov.html#1029">info_get_justsynced</a></td>
<td class="coverFnHi">1474627</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#519">hash_is_zero</a></td>
<td class="coverFnHi">790624</td>
<td class="coverFnHi">790275</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#503">hash_is_invalid</a></td>
<td class="coverFnHi">776390</td>
<td class="coverFnHi">776042</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#947">fs_file2par_get</a></td>
<td class="coverFnHi">602426</td>
<td class="coverFn"><a href="elem.h.gcov.html#942">fs_file2par_get</a></td>
<td class="coverFnHi">464306</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#793">link_flag_get</a></td>
<td class="coverFnHi">410823</td>
<td class="coverFnHi">410820</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#988">info_make</a></td>
<td class="coverFnHi">390916</td>
<td class="coverFn"><a href="elem.h.gcov.html#983">info_make</a></td>
<td class="coverFnHi">394996</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#632">block_has_file_and_valid_parity</a></td>
<td class="coverFnHi">221103</td>
<td class="coverFnHi">221100</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#772">link_flag_has</a></td>
@ -185,7 +181,7 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#533">hash_is_real</a></td>
<td class="coverFnHi">65665</td>
<td class="coverFnHi">65785</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#777">link_flag_set</a></td>
@ -193,15 +189,15 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#649">file_flag_clear</a></td>
<td class="coverFnHi">14861</td>
<td class="coverFnHi">14174</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1050">info_set_rehash</a></td>
<td class="coverFn"><a href="elem.h.gcov.html#1045">info_set_rehash</a></td>
<td class="coverFnHi">9199</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1042">info_set_bad</a></td>
<td class="coverFnHi">1803</td>
<td class="coverFn"><a href="elem.h.gcov.html#1037">info_set_bad</a></td>
<td class="coverFnHi">1802</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#859">dir_name_hash</a></td>

View file

@ -31,17 +31,17 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">118</td>
<td class="headerCovTableEntry">119</td>
<td class="headerCovTableEntryHi">99.2 %</td>
<td class="headerCovTableEntry">115</td>
<td class="headerCovTableEntry">116</td>
<td class="headerCovTableEntryHi">99.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">39</td>
<td class="headerCovTableEntry">39</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
@ -61,31 +61,31 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#606">block_has_file</a></td>
<td class="coverFnHi">12928240</td>
<td class="coverFnHi">12929086</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#632">block_has_file_and_valid_parity</a></td>
<td class="coverFnHi">221103</td>
<td class="coverFnHi">221100</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#619">block_has_invalid_parity</a></td>
<td class="coverFnHi">11488433</td>
<td class="coverFnHi">11489174</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#594">block_has_past_hash</a></td>
<td class="coverFnHi">2287716</td>
<td class="coverFnHi">2287366</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#581">block_has_updated_hash</a></td>
<td class="coverFnHi">2004868</td>
<td class="coverFnHi">2005171</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#560">block_state_get</a></td>
<td class="coverFnHi">96508438</td>
<td class="coverFnHi">96735410</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#571">block_state_set</a></td>
<td class="coverFnHi">18241681</td>
<td class="coverFnHi">18242161</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#826">dir_flag_has</a></td>
@ -101,107 +101,103 @@
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#649">file_flag_clear</a></td>
<td class="coverFnHi">14861</td>
<td class="coverFnHi">14174</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#639">file_flag_has</a></td>
<td class="coverFnHi">33299349</td>
<td class="coverFnHi">33299459</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#644">file_flag_set</a></td>
<td class="coverFnHi">5178039</td>
<td class="coverFnHi">5176917</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#718">file_inode_hash</a></td>
<td class="coverFnHi">4822885</td>
<td class="coverFnHi">4822298</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#739">file_path_hash</a></td>
<td class="coverFnHi">3766477</td>
<td class="coverFnHi">3766623</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#747">file_stamp_hash</a></td>
<td class="coverFnHi">6139195</td>
<td class="coverFnHi">6139138</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#456">filter_hidden</a></td>
<td class="coverFnHi">3066757</td>
<td class="coverFnHi">3066852</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#916">fs_file2block_get</a></td>
<td class="coverFnHi">114670866</td>
<td class="coverFn"><a href="elem.h.gcov.html#942">fs_file2par_get</a></td>
<td class="coverFnHi">464306</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#947">fs_file2par_get</a></td>
<td class="coverFnHi">602426</td>
<td class="coverFn"><a href="elem.h.gcov.html#957">fs_par2block_get</a></td>
<td class="coverFnHi">21727310</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#962">fs_par2block_get</a></td>
<td class="coverFnHi">21725563</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#933">fs_par2file_get</a></td>
<td class="coverFnHi">11513278</td>
<td class="coverFn"><a href="elem.h.gcov.html#928">fs_par2file_get</a></td>
<td class="coverFnHi">11514087</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#541">hash_invalid_set</a></td>
<td class="coverFnHi">8911064</td>
<td class="coverFnHi">8910831</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#503">hash_is_invalid</a></td>
<td class="coverFnHi">776390</td>
<td class="coverFnHi">776042</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#533">hash_is_real</a></td>
<td class="coverFnHi">65665</td>
<td class="coverFnHi">65785</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#519">hash_is_zero</a></td>
<td class="coverFnHi">790624</td>
<td class="coverFnHi">790275</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#549">hash_zero_set</a></td>
<td class="coverFnHi">153288</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1070">info_get</a></td>
<td class="coverFnHi">10527480</td>
<td class="coverFn"><a href="elem.h.gcov.html#1065">info_get</a></td>
<td class="coverFnHi">10573034</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1016">info_get_bad</a></td>
<td class="coverFnHi">1705083</td>
<td class="coverFn"><a href="elem.h.gcov.html#1011">info_get_bad</a></td>
<td class="coverFnHi">1725704</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1034">info_get_justsynced</a></td>
<td class="coverFnHi">1455572</td>
<td class="coverFn"><a href="elem.h.gcov.html#1029">info_get_justsynced</a></td>
<td class="coverFnHi">1474627</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1025">info_get_rehash</a></td>
<td class="coverFnHi">3293767</td>
<td class="coverFn"><a href="elem.h.gcov.html#1020">info_get_rehash</a></td>
<td class="coverFnHi">3312725</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1007">info_get_time</a></td>
<td class="coverFnHi">2241006</td>
<td class="coverFn"><a href="elem.h.gcov.html#1002">info_get_time</a></td>
<td class="coverFnHi">2258078</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#988">info_make</a></td>
<td class="coverFnHi">390916</td>
<td class="coverFn"><a href="elem.h.gcov.html#983">info_make</a></td>
<td class="coverFnHi">394996</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1059">info_set</a></td>
<td class="coverFnHi">1609362</td>
<td class="coverFn"><a href="elem.h.gcov.html#1054">info_set</a></td>
<td class="coverFnHi">1609485</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1042">info_set_bad</a></td>
<td class="coverFnHi">1803</td>
<td class="coverFn"><a href="elem.h.gcov.html#1037">info_set_bad</a></td>
<td class="coverFnHi">1802</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#1050">info_set_rehash</a></td>
<td class="coverFn"><a href="elem.h.gcov.html#1045">info_set_rehash</a></td>
<td class="coverFnHi">9199</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#793">link_flag_get</a></td>
<td class="coverFnHi">410823</td>
<td class="coverFnHi">410820</td>
</tr>
<tr>
<td class="coverFn"><a href="elem.h.gcov.html#772">link_flag_has</a></td>

View file

@ -31,17 +31,17 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">118</td>
<td class="headerCovTableEntry">119</td>
<td class="headerCovTableEntryHi">99.2 %</td>
<td class="headerCovTableEntry">115</td>
<td class="headerCovTableEntry">116</td>
<td class="headerCovTableEntryHi">99.1 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">40</td>
<td class="headerCovTableEntry">39</td>
<td class="headerCovTableEntry">39</td>
<td class="headerCovTableEntryHi">100.0 %</td>
</tr>
<tr><td><img src="../glass.png" width=3 height=3 alt=""></td></tr>
@ -517,13 +517,13 @@
<span class="lineNum"> 455 </span> : * Filter hidden files.
<a name="456"><span class="lineNum"> 456 </span> : * Return !=0 if it matches and it should be excluded.</a>
<span class="lineNum"> 457 </span> : */
<span class="lineNum"> 458 </span><span class="lineCov"> 3066757 : static inline int filter_hidden(int enable, struct dirent* dd)</span>
<span class="lineNum"> 458 </span><span class="lineCov"> 3066852 : static inline int filter_hidden(int enable, struct dirent* dd)</span>
<span class="lineNum"> 459 </span> : {
<span class="lineNum"> 460 </span><span class="lineCov"> 3066757 : if (enable &amp;&amp; dirent_hidden(dd)) {</span>
<span class="lineNum"> 460 </span><span class="lineCov"> 3066852 : if (enable &amp;&amp; dirent_hidden(dd)) {</span>
<span class="lineNum"> 461 </span><span class="lineNoCov"> 0 : return 1; /* filter out */</span>
<span class="lineNum"> 462 </span> : }
<span class="lineNum"> 463 </span> :
<span class="lineNum"> 464 </span><span class="lineCov"> 3066757 : return 0;</span>
<span class="lineNum"> 464 </span><span class="lineCov"> 3066852 : return 0;</span>
<span class="lineNum"> 465 </span> : }
<span class="lineNum"> 466 </span> :
<span class="lineNum"> 467 </span> : /**
@ -564,13 +564,13 @@
<span class="lineNum"> 502 </span> : *
<a name="503"><span class="lineNum"> 503 </span> : * An invalid hash is represented with all bytes at 0x00.</a>
<span class="lineNum"> 504 </span> : */
<span class="lineNum"> 505 </span><span class="lineCov"> 776390 : static inline int hash_is_invalid(const unsigned char* hash)</span>
<span class="lineNum"> 505 </span><span class="lineCov"> 776042 : static inline int hash_is_invalid(const unsigned char* hash)</span>
<span class="lineNum"> 506 </span> : {
<span class="lineNum"> 507 </span> : unsigned i;
<span class="lineNum"> 508 </span> :
<span class="lineNum"> 509 </span><span class="lineCov"> 1265344 : for (i = 0; i &lt; HASH_SIZE; ++i)</span>
<span class="lineNum"> 510 </span><span class="lineCov"> 1234968 : if (hash[i] != 0x00)</span>
<span class="lineNum"> 511 </span><span class="lineCov"> 746014 : return 0;</span>
<span class="lineNum"> 509 </span><span class="lineCov"> 1264688 : for (i = 0; i &lt; HASH_SIZE; ++i)</span>
<span class="lineNum"> 510 </span><span class="lineCov"> 1234312 : if (hash[i] != 0x00)</span>
<span class="lineNum"> 511 </span><span class="lineCov"> 745666 : return 0;</span>
<span class="lineNum"> 512 </span> :
<span class="lineNum"> 513 </span><span class="lineCov"> 30376 : return 1;</span>
<span class="lineNum"> 514 </span> : }
@ -580,13 +580,13 @@
<span class="lineNum"> 518 </span> : *
<a name="519"><span class="lineNum"> 519 </span> : * A zero hash is represented with all bytes at 0xFF.</a>
<span class="lineNum"> 520 </span> : */
<span class="lineNum"> 521 </span><span class="lineCov"> 790624 : static inline int hash_is_zero(const unsigned char* hash)</span>
<span class="lineNum"> 521 </span><span class="lineCov"> 790275 : static inline int hash_is_zero(const unsigned char* hash)</span>
<span class="lineNum"> 522 </span> : {
<span class="lineNum"> 523 </span> : unsigned i;
<span class="lineNum"> 524 </span> :
<span class="lineNum"> 525 </span><span class="lineCov"> 1835995 : for (i = 0; i &lt; HASH_SIZE; ++i)</span>
<span class="lineNum"> 526 </span><span class="lineCov"> 1770815 : if (hash[i] != 0xFF)</span>
<span class="lineNum"> 527 </span><span class="lineCov"> 725444 : return 0;</span>
<span class="lineNum"> 525 </span><span class="lineCov"> 1835799 : for (i = 0; i &lt; HASH_SIZE; ++i)</span>
<span class="lineNum"> 526 </span><span class="lineCov"> 1770619 : if (hash[i] != 0xFF)</span>
<span class="lineNum"> 527 </span><span class="lineCov"> 725095 : return 0;</span>
<span class="lineNum"> 528 </span> :
<span class="lineNum"> 529 </span><span class="lineCov"> 65180 : return 1;</span>
<span class="lineNum"> 530 </span> : }
@ -594,18 +594,18 @@
<span class="lineNum"> 532 </span> : /**
<a name="533"><span class="lineNum"> 533 </span> : * Check if the specified hash is a real hash.</a>
<span class="lineNum"> 534 </span> : */
<span class="lineNum"> 535 </span><span class="lineCov"> 65665 : static inline int hash_is_real(const unsigned char* hash)</span>
<span class="lineNum"> 535 </span><span class="lineCov"> 65785 : static inline int hash_is_real(const unsigned char* hash)</span>
<span class="lineNum"> 536 </span> : {
<span class="lineNum"> 537 </span><span class="lineCov"> 65665 : return !hash_is_zero(hash) &amp;&amp; !hash_is_invalid(hash);</span>
<span class="lineNum"> 537 </span><span class="lineCov"> 65785 : return !hash_is_zero(hash) &amp;&amp; !hash_is_invalid(hash);</span>
<span class="lineNum"> 538 </span> : }
<span class="lineNum"> 539 </span> :
<span class="lineNum"> 540 </span> : /**
<a name="541"><span class="lineNum"> 541 </span> : * Set the hash to the special INVALID value.</a>
<span class="lineNum"> 542 </span> : */
<span class="lineNum"> 543 </span><span class="lineCov"> 8911064 : static inline void hash_invalid_set(unsigned char* hash)</span>
<span class="lineNum"> 543 </span><span class="lineCov"> 8910831 : static inline void hash_invalid_set(unsigned char* hash)</span>
<span class="lineNum"> 544 </span> : {
<span class="lineNum"> 545 </span><span class="lineCov"> 8911064 : memset(hash, 0x00, HASH_SIZE);</span>
<span class="lineNum"> 546 </span><span class="lineCov"> 8911064 : }</span>
<span class="lineNum"> 545 </span><span class="lineCov"> 8910831 : memset(hash, 0x00, HASH_SIZE);</span>
<span class="lineNum"> 546 </span><span class="lineCov"> 8910831 : }</span>
<span class="lineNum"> 547 </span> :
<span class="lineNum"> 548 </span> : /**
<a name="549"><span class="lineNum"> 549 </span> : * Set the hash to the special ZERO value.</a>
@ -621,32 +621,32 @@
<span class="lineNum"> 559 </span> : * For this function, it's allowed to pass a NULL block
<a name="560"><span class="lineNum"> 560 </span> : * pointer than results in the BLOCK_STATE_EMPTY state.</a>
<span class="lineNum"> 561 </span> : */
<span class="lineNum"> 562 </span><span class="lineCov"> 96508438 : static inline unsigned block_state_get(const struct snapraid_block* block)</span>
<span class="lineNum"> 562 </span><span class="lineCov"> 96735410 : static inline unsigned block_state_get(const struct snapraid_block* block)</span>
<span class="lineNum"> 563 </span> : {
<span class="lineNum"> 564 </span><span class="lineCov"> 96508438 : if (block == BLOCK_EMPTY)</span>
<span class="lineNum"> 565 </span><span class="lineCov"> 2429041 : return BLOCK_STATE_EMPTY;</span>
<span class="lineNum"> 564 </span><span class="lineCov"> 96735410 : if (block == BLOCK_EMPTY)</span>
<span class="lineNum"> 565 </span><span class="lineCov"> 2427201 : return BLOCK_STATE_EMPTY;</span>
<span class="lineNum"> 566 </span> :
<span class="lineNum"> 567 </span><span class="lineCov"> 94079397 : return block-&gt;state;</span>
<span class="lineNum"> 567 </span><span class="lineCov"> 94308209 : return block-&gt;state;</span>
<span class="lineNum"> 568 </span> : }
<span class="lineNum"> 569 </span> :
<span class="lineNum"> 570 </span> : /**
<a name="571"><span class="lineNum"> 571 </span> : * Set the state of the block.</a>
<span class="lineNum"> 572 </span> : */
<span class="lineNum"> 573 </span><span class="lineCov"> 18241681 : static inline void block_state_set(struct snapraid_block* block, unsigned state)</span>
<span class="lineNum"> 573 </span><span class="lineCov"> 18242161 : static inline void block_state_set(struct snapraid_block* block, unsigned state)</span>
<span class="lineNum"> 574 </span> : {
<span class="lineNum"> 575 </span><span class="lineCov"> 18241681 : block-&gt;state = state;</span>
<span class="lineNum"> 576 </span><span class="lineCov"> 18241681 : }</span>
<span class="lineNum"> 575 </span><span class="lineCov"> 18242161 : block-&gt;state = state;</span>
<span class="lineNum"> 576 </span><span class="lineCov"> 18242161 : }</span>
<span class="lineNum"> 577 </span> :
<span class="lineNum"> 578 </span> : /**
<span class="lineNum"> 579 </span> : * Check if the specified block has an updated hash.
<span class="lineNum"> 580 </span> : *
<a name="581"><span class="lineNum"> 581 </span> : * Note that EMPTY / CHG / DELETED return 0.</a>
<span class="lineNum"> 582 </span> : */
<span class="lineNum"> 583 </span><span class="lineCov"> 2004868 : static inline int block_has_updated_hash(const struct snapraid_block* block)</span>
<span class="lineNum"> 583 </span><span class="lineCov"> 2005171 : static inline int block_has_updated_hash(const struct snapraid_block* block)</span>
<span class="lineNum"> 584 </span> : {
<span class="lineNum"> 585 </span><span class="lineCov"> 2004868 : unsigned state = block_state_get(block);</span>
<span class="lineNum"> 585 </span><span class="lineCov"> 2005171 : unsigned state = block_state_get(block);</span>
<span class="lineNum"> 586 </span> :
<span class="lineNum"> 587 </span><span class="lineCov"> 2004868 : return state == BLOCK_STATE_BLK || state == BLOCK_STATE_REP;</span>
<span class="lineNum"> 587 </span><span class="lineCov"> 2005171 : return state == BLOCK_STATE_BLK || state == BLOCK_STATE_REP;</span>
<span class="lineNum"> 588 </span> : }
<span class="lineNum"> 589 </span> :
<span class="lineNum"> 590 </span> : /**
@ -655,11 +655,11 @@
<span class="lineNum"> 593 </span> : *
<a name="594"><span class="lineNum"> 594 </span> : * Note that EMPTY / BLK / REP return 0.</a>
<span class="lineNum"> 595 </span> : */
<span class="lineNum"> 596 </span><span class="lineCov"> 2287716 : static inline int block_has_past_hash(const struct snapraid_block* block)</span>
<span class="lineNum"> 596 </span><span class="lineCov"> 2287366 : static inline int block_has_past_hash(const struct snapraid_block* block)</span>
<span class="lineNum"> 597 </span> : {
<span class="lineNum"> 598 </span><span class="lineCov"> 2287716 : unsigned state = block_state_get(block);</span>
<span class="lineNum"> 598 </span><span class="lineCov"> 2287366 : unsigned state = block_state_get(block);</span>
<span class="lineNum"> 599 </span> :
<span class="lineNum"> 600 </span><span class="lineCov"> 2287716 : return state == BLOCK_STATE_CHG || state == BLOCK_STATE_DELETED;</span>
<span class="lineNum"> 600 </span><span class="lineCov"> 2287366 : return state == BLOCK_STATE_CHG || state == BLOCK_STATE_DELETED;</span>
<span class="lineNum"> 601 </span> : }
<span class="lineNum"> 602 </span> :
<span class="lineNum"> 603 </span> : /**
@ -667,12 +667,12 @@
<span class="lineNum"> 605 </span> : *
<a name="606"><span class="lineNum"> 606 </span> : * Note that EMPTY / DELETED return 0.</a>
<span class="lineNum"> 607 </span> : */
<span class="lineNum"> 608 </span><span class="lineCov"> 12928240 : static inline int block_has_file(const struct snapraid_block* block)</span>
<span class="lineNum"> 608 </span><span class="lineCov"> 12929086 : static inline int block_has_file(const struct snapraid_block* block)</span>
<span class="lineNum"> 609 </span> : {
<span class="lineNum"> 610 </span><span class="lineCov"> 12928240 : unsigned state = block_state_get(block);</span>
<span class="lineNum"> 610 </span><span class="lineCov"> 12929086 : unsigned state = block_state_get(block);</span>
<span class="lineNum"> 611 </span> :
<span class="lineNum"> 612 </span><span class="lineCov"> 12928240 : return state == BLOCK_STATE_BLK</span>
<span class="lineNum"> 613 </span><span class="lineCov"> 12928240 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span>
<span class="lineNum"> 612 </span><span class="lineCov"> 12929086 : return state == BLOCK_STATE_BLK</span>
<span class="lineNum"> 613 </span><span class="lineCov"> 12929086 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span>
<span class="lineNum"> 614 </span> : }
<span class="lineNum"> 615 </span> :
<span class="lineNum"> 616 </span> : /**
@ -680,12 +680,12 @@
<span class="lineNum"> 618 </span> : *
<a name="619"><span class="lineNum"> 619 </span> : * Note that EMPTY / BLK return 0.</a>
<span class="lineNum"> 620 </span> : */
<span class="lineNum"> 621 </span><span class="lineCov"> 11488433 : static inline int block_has_invalid_parity(const struct snapraid_block* block)</span>
<span class="lineNum"> 621 </span><span class="lineCov"> 11489174 : static inline int block_has_invalid_parity(const struct snapraid_block* block)</span>
<span class="lineNum"> 622 </span> : {
<span class="lineNum"> 623 </span><span class="lineCov"> 11488433 : unsigned state = block_state_get(block);</span>
<span class="lineNum"> 623 </span><span class="lineCov"> 11489174 : unsigned state = block_state_get(block);</span>
<span class="lineNum"> 624 </span> :
<span class="lineNum"> 625 </span><span class="lineCov"> 11488433 : return state == BLOCK_STATE_DELETED</span>
<span class="lineNum"> 626 </span><span class="lineCov"> 11488433 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span>
<span class="lineNum"> 625 </span><span class="lineCov"> 11489174 : return state == BLOCK_STATE_DELETED</span>
<span class="lineNum"> 626 </span><span class="lineCov"> 11489174 : || state == BLOCK_STATE_CHG || state == BLOCK_STATE_REP;</span>
<span class="lineNum"> 627 </span> : }
<span class="lineNum"> 628 </span> :
<span class="lineNum"> 629 </span> : /**
@ -693,27 +693,27 @@
<span class="lineNum"> 631 </span> : *
<a name="632"><span class="lineNum"> 632 </span> : * Note that anything different than BLK return 0.</a>
<span class="lineNum"> 633 </span> : */
<span class="lineNum"> 634 </span><span class="lineCov"> 221103 : static inline int block_has_file_and_valid_parity(const struct snapraid_block* block)</span>
<span class="lineNum"> 634 </span><span class="lineCov"> 221100 : static inline int block_has_file_and_valid_parity(const struct snapraid_block* block)</span>
<span class="lineNum"> 635 </span> : {
<span class="lineNum"> 636 </span><span class="lineCov"> 221103 : unsigned state = block_state_get(block);</span>
<span class="lineNum"> 636 </span><span class="lineCov"> 221100 : unsigned state = block_state_get(block);</span>
<span class="lineNum"> 637 </span> :
<span class="lineNum"> 638 </span><span class="lineCov"> 221103 : return state == BLOCK_STATE_BLK;</span>
<span class="lineNum"> 638 </span><span class="lineCov"> 221100 : return state == BLOCK_STATE_BLK;</span>
<a name="639"><span class="lineNum"> 639 </span> : }</a>
<span class="lineNum"> 640 </span> :
<span class="lineNum"> 641 </span><span class="lineCov"> 33299349 : static inline int file_flag_has(const struct snapraid_file* file, unsigned mask)</span>
<span class="lineNum"> 641 </span><span class="lineCov"> 33299459 : static inline int file_flag_has(const struct snapraid_file* file, unsigned mask)</span>
<span class="lineNum"> 642 </span> : {
<span class="lineNum"> 643 </span><span class="lineCov"> 33299349 : return (file-&gt;flag &amp; mask) == mask;</span>
<span class="lineNum"> 643 </span><span class="lineCov"> 33299459 : return (file-&gt;flag &amp; mask) == mask;</span>
<a name="644"><span class="lineNum"> 644 </span> : }</a>
<span class="lineNum"> 645 </span> :
<span class="lineNum"> 646 </span><span class="lineCov"> 5178039 : static inline void file_flag_set(struct snapraid_file* file, unsigned mask)</span>
<span class="lineNum"> 646 </span><span class="lineCov"> 5176917 : static inline void file_flag_set(struct snapraid_file* file, unsigned mask)</span>
<span class="lineNum"> 647 </span> : {
<span class="lineNum"> 648 </span><span class="lineCov"> 5178039 : file-&gt;flag |= mask;</span>
<a name="649"><span class="lineNum"> 649 </span><span class="lineCov"> 5178039 : }</span></a>
<span class="lineNum"> 648 </span><span class="lineCov"> 5176917 : file-&gt;flag |= mask;</span>
<a name="649"><span class="lineNum"> 649 </span><span class="lineCov"> 5176917 : }</span></a>
<span class="lineNum"> 650 </span> :
<span class="lineNum"> 651 </span><span class="lineCov"> 14861 : static inline void file_flag_clear(struct snapraid_file* file, unsigned mask)</span>
<span class="lineNum"> 651 </span><span class="lineCov"> 14174 : static inline void file_flag_clear(struct snapraid_file* file, unsigned mask)</span>
<span class="lineNum"> 652 </span> : {
<span class="lineNum"> 653 </span><span class="lineCov"> 14861 : file-&gt;flag &amp;= ~mask;</span>
<span class="lineNum"> 654 </span><span class="lineCov"> 14861 : }</span>
<span class="lineNum"> 653 </span><span class="lineCov"> 14174 : file-&gt;flag &amp;= ~mask;</span>
<span class="lineNum"> 654 </span><span class="lineCov"> 14174 : }</span>
<span class="lineNum"> 655 </span> :
<span class="lineNum"> 656 </span> : /**
<span class="lineNum"> 657 </span> : * Allocate a file.
@ -779,9 +779,9 @@
<span class="lineNum"> 717 </span> : /**
<a name="718"><span class="lineNum"> 718 </span> : * Compute the hash of a file inode.</a>
<span class="lineNum"> 719 </span> : */
<span class="lineNum"> 720 </span><span class="lineCov"> 4822885 : static inline tommy_uint32_t file_inode_hash(uint64_t inode)</span>
<span class="lineNum"> 720 </span><span class="lineCov"> 4822298 : static inline tommy_uint32_t file_inode_hash(uint64_t inode)</span>
<span class="lineNum"> 721 </span> : {
<span class="lineNum"> 722 </span><span class="lineCov"> 4822885 : return (tommy_uint32_t)tommy_inthash_u64(inode);</span>
<span class="lineNum"> 722 </span><span class="lineCov"> 4822298 : return (tommy_uint32_t)tommy_inthash_u64(inode);</span>
<span class="lineNum"> 723 </span> : }
<span class="lineNum"> 724 </span> :
<span class="lineNum"> 725 </span> : /**
@ -800,17 +800,17 @@
<span class="lineNum"> 738 </span> : /**
<a name="739"><span class="lineNum"> 739 </span> : * Compute the hash of a file path.</a>
<span class="lineNum"> 740 </span> : */
<span class="lineNum"> 741 </span><span class="lineCov"> 3766477 : static inline tommy_uint32_t file_path_hash(const char* sub)</span>
<span class="lineNum"> 741 </span><span class="lineCov"> 3766623 : static inline tommy_uint32_t file_path_hash(const char* sub)</span>
<span class="lineNum"> 742 </span> : {
<span class="lineNum"> 743 </span><span class="lineCov"> 3766477 : return tommy_hash_u32(0, sub, strlen(sub));</span>
<span class="lineNum"> 743 </span><span class="lineCov"> 3766623 : return tommy_hash_u32(0, sub, strlen(sub));</span>
<span class="lineNum"> 744 </span> : }
<span class="lineNum"> 745 </span> :
<span class="lineNum"> 746 </span> : /**
<a name="747"><span class="lineNum"> 747 </span> : * Compute the hash of a file stamp.</a>
<span class="lineNum"> 748 </span> : */
<span class="lineNum"> 749 </span><span class="lineCov"> 6139195 : static inline tommy_uint32_t file_stamp_hash(data_off_t size, int64_t mtime_sec, int mtime_nsec)</span>
<span class="lineNum"> 749 </span><span class="lineCov"> 6139138 : static inline tommy_uint32_t file_stamp_hash(data_off_t size, int64_t mtime_sec, int mtime_nsec)</span>
<span class="lineNum"> 750 </span> : {
<span class="lineNum"> 751 </span><span class="lineCov"> 6139195 : return tommy_inthash_u32((tommy_uint32_t)size ^ tommy_inthash_u32(mtime_sec ^ tommy_inthash_u32(mtime_nsec)));</span>
<span class="lineNum"> 751 </span><span class="lineCov"> 6139138 : return tommy_inthash_u32((tommy_uint32_t)size ^ tommy_inthash_u32(mtime_sec ^ tommy_inthash_u32(mtime_nsec)));</span>
<span class="lineNum"> 752 </span> : }
<span class="lineNum"> 753 </span> :
<span class="lineNum"> 754 </span> : /**
@ -854,9 +854,9 @@
<span class="lineNum"> 792 </span><span class="lineCov"> 6 : slink-&gt;flag |= flag &amp; mask;</span>
<a name="793"><span class="lineNum"> 793 </span><span class="lineCov"> 6 : }</span></a>
<span class="lineNum"> 794 </span> :
<span class="lineNum"> 795 </span><span class="lineCov"> 410823 : static inline unsigned link_flag_get(struct snapraid_link* slink, unsigned mask)</span>
<span class="lineNum"> 795 </span><span class="lineCov"> 410820 : static inline unsigned link_flag_get(struct snapraid_link* slink, unsigned mask)</span>
<span class="lineNum"> 796 </span> : {
<span class="lineNum"> 797 </span><span class="lineCov"> 410823 : return slink-&gt;flag &amp; mask;</span>
<span class="lineNum"> 797 </span><span class="lineCov"> 410820 : return slink-&gt;flag &amp; mask;</span>
<span class="lineNum"> 798 </span> : }
<span class="lineNum"> 799 </span> :
<span class="lineNum"> 800 </span> : /**
@ -975,181 +975,176 @@
<span class="lineNum"> 913 </span> : void fs_deallocate(struct snapraid_disk* disk, block_off_t pos);
<span class="lineNum"> 914 </span> :
<span class="lineNum"> 915 </span> : /**
<a name="916"><span class="lineNum"> 916 </span> : * Get the block from the file position.</a>
<span class="lineNum"> 916 </span> : * Get the block from the file position.
<span class="lineNum"> 917 </span> : */
<span class="lineNum"> 918 </span><span class="lineCov"> 114670866 : static inline struct snapraid_block* fs_file2block_get(struct snapraid_file* file, block_off_t file_pos)</span>
<span class="lineNum"> 919 </span> : {
<span class="lineNum"> 920 </span><span class="lineCov"> 114670866 : assert(file_pos &lt; file-&gt;blockmax);</span>
<span class="lineNum"> 921 </span> :
<span class="lineNum"> 922 </span><span class="lineCov"> 114670866 : return &amp;file-&gt;blockvec[file_pos];</span>
<span class="lineNum"> 923 </span> : }
<span class="lineNum"> 918 </span> : struct snapraid_block* fs_file2block_get(struct snapraid_file* file, block_off_t file_pos);
<span class="lineNum"> 919 </span> :
<span class="lineNum"> 920 </span> : /**
<span class="lineNum"> 921 </span> : * Like fs_file2par_get() but thread-safe.
<span class="lineNum"> 922 </span> : */
<span class="lineNum"> 923 </span> : struct snapraid_file* fs_par2file_get_ts(struct snapraid_disk* disk, struct snapraid_chunk** fs_last, block_off_t parity_pos, block_off_t* file_pos);
<span class="lineNum"> 924 </span> :
<span class="lineNum"> 925 </span> : /**
<span class="lineNum"> 926 </span> : * Like fs_file2par_get() but thread-safe.
<span class="lineNum"> 927 </span> : */
<span class="lineNum"> 928 </span> : struct snapraid_file* fs_par2file_get_ts(struct snapraid_disk* disk, struct snapraid_chunk** fs_last, block_off_t parity_pos, block_off_t* file_pos);
<span class="lineNum"> 929 </span> :
<span class="lineNum"> 930 </span> : /**
<span class="lineNum"> 931 </span> : * Get the file position from the parity position.
<span class="lineNum"> 932 </span> : * Return 0 if no file is using it.
<a name="933"><span class="lineNum"> 933 </span> : * \note This function is NOT thread-safe as it uses the the disk cache.</a>
<span class="lineNum"> 934 </span> : */
<span class="lineNum"> 935 </span><span class="lineCov"> 11513278 : static inline struct snapraid_file* fs_par2file_get(struct snapraid_disk* disk, block_off_t parity_pos, block_off_t* file_pos)</span>
<span class="lineNum"> 936 </span> : {
<span class="lineNum"> 937 </span><span class="lineCov"> 11513278 : return fs_par2file_get_ts(disk, &amp;disk-&gt;fs_last, parity_pos, file_pos);</span>
<span class="lineNum"> 938 </span> : }
<span class="lineNum"> 926 </span> : * Get the file position from the parity position.
<span class="lineNum"> 927 </span> : * Return 0 if no file is using it.
<a name="928"><span class="lineNum"> 928 </span> : * \note This function is NOT thread-safe as it uses the the disk cache.</a>
<span class="lineNum"> 929 </span> : */
<span class="lineNum"> 930 </span><span class="lineCov"> 11514087 : static inline struct snapraid_file* fs_par2file_get(struct snapraid_disk* disk, block_off_t parity_pos, block_off_t* file_pos)</span>
<span class="lineNum"> 931 </span> : {
<span class="lineNum"> 932 </span><span class="lineCov"> 11514087 : return fs_par2file_get_ts(disk, &amp;disk-&gt;fs_last, parity_pos, file_pos);</span>
<span class="lineNum"> 933 </span> : }
<span class="lineNum"> 934 </span> :
<span class="lineNum"> 935 </span> : /**
<span class="lineNum"> 936 </span> : * Like fs_file2par_get() but thread-safe.
<span class="lineNum"> 937 </span> : */
<span class="lineNum"> 938 </span> : block_off_t fs_file2par_get_ts(struct snapraid_disk* disk, struct snapraid_chunk** fs_last, struct snapraid_file* file, block_off_t file_pos);
<span class="lineNum"> 939 </span> :
<span class="lineNum"> 940 </span> : /**
<span class="lineNum"> 941 </span> : * Like fs_file2par_get() but thread-safe.
<span class="lineNum"> 942 </span> : */
<span class="lineNum"> 943 </span> : block_off_t fs_file2par_get_ts(struct snapraid_disk* disk, struct snapraid_chunk** fs_last, struct snapraid_file* file, block_off_t file_pos);
<span class="lineNum"> 944 </span> :
<span class="lineNum"> 945 </span> : /**
<span class="lineNum"> 946 </span> : * Get the parity position from the file position.
<a name="947"><span class="lineNum"> 947 </span> : * \note This function is NOT thread-safe as it uses the the disk cache.</a>
<span class="lineNum"> 948 </span> : */
<span class="lineNum"> 949 </span><span class="lineCov"> 602426 : static inline block_off_t fs_file2par_get(struct snapraid_disk* disk, struct snapraid_file* file, block_off_t file_pos)</span>
<span class="lineNum"> 950 </span> : {
<span class="lineNum"> 951 </span><span class="lineCov"> 602426 : return fs_file2par_get_ts(disk, &amp;disk-&gt;fs_last, file, file_pos);</span>
<span class="lineNum"> 952 </span> : }
<span class="lineNum"> 941 </span> : * Get the parity position from the file position.
<a name="942"><span class="lineNum"> 942 </span> : * \note This function is NOT thread-safe as it uses the the disk cache.</a>
<span class="lineNum"> 943 </span> : */
<span class="lineNum"> 944 </span><span class="lineCov"> 464306 : static inline block_off_t fs_file2par_get(struct snapraid_disk* disk, struct snapraid_file* file, block_off_t file_pos)</span>
<span class="lineNum"> 945 </span> : {
<span class="lineNum"> 946 </span><span class="lineCov"> 464306 : return fs_file2par_get_ts(disk, &amp;disk-&gt;fs_last, file, file_pos);</span>
<span class="lineNum"> 947 </span> : }
<span class="lineNum"> 948 </span> :
<span class="lineNum"> 949 </span> : /**
<span class="lineNum"> 950 </span> : * Like fs_par2block_get() but thread-safe.
<span class="lineNum"> 951 </span> : */
<span class="lineNum"> 952 </span> : struct snapraid_block* fs_par2block_get_ts(struct snapraid_disk* disk, struct snapraid_chunk** fs_last, block_off_t parity_pos);
<span class="lineNum"> 953 </span> :
<span class="lineNum"> 954 </span> : /**
<span class="lineNum"> 955 </span> : * Like fs_par2block_get() but thread-safe.
<span class="lineNum"> 956 </span> : */
<span class="lineNum"> 957 </span> : struct snapraid_block* fs_par2block_get_ts(struct snapraid_disk* disk, struct snapraid_chunk** fs_last, block_off_t parity_pos);
<span class="lineNum"> 958 </span> :
<span class="lineNum"> 959 </span> : /**
<span class="lineNum"> 960 </span> : * Get the block from the parity position.
<span class="lineNum"> 961 </span> : * Return BLOCK_EMPTY==0 if the block is over the end of the disk or not used.
<a name="962"><span class="lineNum"> 962 </span> : * \note This function is NOT thread-safe as it uses the the disk cache. </a>
<span class="lineNum"> 963 </span> : */
<span class="lineNum"> 964 </span><span class="lineCov"> 21725563 : static inline struct snapraid_block* fs_par2block_get(struct snapraid_disk* disk, block_off_t parity_pos)</span>
<span class="lineNum"> 965 </span> : {
<span class="lineNum"> 966 </span><span class="lineCov"> 21725563 : return fs_par2block_get_ts(disk, &amp;disk-&gt;fs_last, parity_pos);</span>
<span class="lineNum"> 967 </span> : }
<span class="lineNum"> 968 </span> :
<span class="lineNum"> 969 </span> : /**
<span class="lineNum"> 970 </span> : * Allocate a disk mapping.
<span class="lineNum"> 971 </span> : * Uses uuid=&quot;&quot; if not available.
<span class="lineNum"> 955 </span> : * Get the block from the parity position.
<span class="lineNum"> 956 </span> : * Return BLOCK_EMPTY==0 if the block is over the end of the disk or not used.
<a name="957"><span class="lineNum"> 957 </span> : * \note This function is NOT thread-safe as it uses the the disk cache. </a>
<span class="lineNum"> 958 </span> : */
<span class="lineNum"> 959 </span><span class="lineCov"> 21727310 : static inline struct snapraid_block* fs_par2block_get(struct snapraid_disk* disk, block_off_t parity_pos)</span>
<span class="lineNum"> 960 </span> : {
<span class="lineNum"> 961 </span><span class="lineCov"> 21727310 : return fs_par2block_get_ts(disk, &amp;disk-&gt;fs_last, parity_pos);</span>
<span class="lineNum"> 962 </span> : }
<span class="lineNum"> 963 </span> :
<span class="lineNum"> 964 </span> : /**
<span class="lineNum"> 965 </span> : * Allocate a disk mapping.
<span class="lineNum"> 966 </span> : * Uses uuid=&quot;&quot; if not available.
<span class="lineNum"> 967 </span> : */
<span class="lineNum"> 968 </span> : struct snapraid_map* map_alloc(const char* name, unsigned position, block_off_t total_blocks, block_off_t free_blocks, const char* uuid);
<span class="lineNum"> 969 </span> :
<span class="lineNum"> 970 </span> : /**
<span class="lineNum"> 971 </span> : * Deallocate a disk mapping.
<span class="lineNum"> 972 </span> : */
<span class="lineNum"> 973 </span> : struct snapraid_map* map_alloc(const char* name, unsigned position, block_off_t total_blocks, block_off_t free_blocks, const char* uuid);
<span class="lineNum"> 973 </span> : void map_free(struct snapraid_map* map);
<span class="lineNum"> 974 </span> :
<span class="lineNum"> 975 </span> : /**
<span class="lineNum"> 976 </span> : * Deallocate a disk mapping.
<span class="lineNum"> 977 </span> : */
<span class="lineNum"> 978 </span> : void map_free(struct snapraid_map* map);
<span class="lineNum"> 979 </span> :
<span class="lineNum"> 980 </span> : /**
<span class="lineNum"> 981 </span> : * Mask used to store additional information in the info bits.
<span class="lineNum"> 982 </span> : *
<span class="lineNum"> 983 </span> : * These bits reduce the granurality of the time in the memory representation.
<span class="lineNum"> 976 </span> : * Mask used to store additional information in the info bits.
<span class="lineNum"> 977 </span> : *
<span class="lineNum"> 978 </span> : * These bits reduce the granurality of the time in the memory representation.
<span class="lineNum"> 979 </span> : */
<span class="lineNum"> 980 </span> : #define INFO_MASK 0x7
<span class="lineNum"> 981 </span> :
<span class="lineNum"> 982 </span> : /**
<a name="983"><span class="lineNum"> 983 </span> : * Make an info.</a>
<span class="lineNum"> 984 </span> : */
<span class="lineNum"> 985 </span> : #define INFO_MASK 0x7
<span class="lineNum"> 986 </span> :
<span class="lineNum"> 987 </span> : /**
<a name="988"><span class="lineNum"> 988 </span> : * Make an info.</a>
<span class="lineNum"> 989 </span> : */
<span class="lineNum"> 990 </span><span class="lineCov"> 390916 : static inline snapraid_info info_make(time_t last_access, int error, int rehash, int justsynced)</span>
<span class="lineNum"> 991 </span> : {
<span class="lineNum"> 992 </span> : /* clear the lowest bits as reserved for other information */
<span class="lineNum"> 993 </span><span class="lineCov"> 390916 : snapraid_info info = last_access &amp; ~INFO_MASK;</span>
<span class="lineNum"> 994 </span> :
<span class="lineNum"> 995 </span><span class="lineCov"> 390916 : if (error != 0)</span>
<span class="lineNum"> 996 </span><span class="lineCov"> 5433 : info |= 0x1;</span>
<span class="lineNum"> 997 </span><span class="lineCov"> 390916 : if (rehash != 0)</span>
<span class="lineNum"> 998 </span><span class="lineCov"> 127410 : info |= 0x2;</span>
<span class="lineNum"> 999 </span><span class="lineCov"> 390916 : if (justsynced != 0)</span>
<span class="lineNum"> 1000 </span><span class="lineCov"> 226165 : info |= 0x4;</span>
<span class="lineNum"> 1001 </span><span class="lineCov"> 390916 : return info;</span>
<span class="lineNum"> 1002 </span> : }
<span class="lineNum"> 1003 </span> :
<span class="lineNum"> 1004 </span> : /**
<span class="lineNum"> 1005 </span> : * Extract the time information.
<span class="lineNum"> 1006 </span> : * This is the last time when the block was know to be correct.
<a name="1007"><span class="lineNum"> 1007 </span> : * The &quot;scrubbed&quot; info tells if the time is referreing at the latest sync or scrub.</a>
<span class="lineNum"> 1008 </span> : */
<span class="lineNum"> 1009 </span><span class="lineCov"> 2241006 : static inline time_t info_get_time(snapraid_info info)</span>
<span class="lineNum"> 1010 </span> : {
<span class="lineNum"> 1011 </span><span class="lineCov"> 2241006 : return info &amp; ~INFO_MASK;</span>
<span class="lineNum"> 1012 </span> : }
<span class="lineNum"> 1013 </span> :
<span class="lineNum"> 1014 </span> : /**
<span class="lineNum"> 1015 </span> : * Extract the error information.
<a name="1016"><span class="lineNum"> 1016 </span> : * Report if the block address had some problem.</a>
<span class="lineNum"> 1017 </span> : */
<span class="lineNum"> 1018 </span><span class="lineCov"> 1705083 : static inline int info_get_bad(snapraid_info info)</span>
<span class="lineNum"> 1019 </span> : {
<span class="lineNum"> 1020 </span><span class="lineCov"> 1705083 : return (info &amp; 0x1) != 0;</span>
<span class="lineNum"> 1021 </span> : }
<span class="lineNum"> 1022 </span> :
<span class="lineNum"> 1023 </span> : /**
<span class="lineNum"> 1024 </span> : * Extract the rehash information.
<a name="1025"><span class="lineNum"> 1025 </span> : * Report if the block address is using the old hash and needs to be rehashed.</a>
<span class="lineNum"> 1026 </span> : */
<span class="lineNum"> 1027 </span><span class="lineCov"> 3293767 : static inline int info_get_rehash(snapraid_info info)</span>
<span class="lineNum"> 1028 </span> : {
<span class="lineNum"> 1029 </span><span class="lineCov"> 3293767 : return (info &amp; 0x2) != 0;</span>
<span class="lineNum"> 1030 </span> : }
<span class="lineNum"> 1031 </span> :
<span class="lineNum"> 1032 </span> : /**
<span class="lineNum"> 1033 </span> : * Extract the scrubbed information.
<a name="1034"><span class="lineNum"> 1034 </span> : * Report if the block address was never scrubbed.</a>
<span class="lineNum"> 1035 </span> : */
<span class="lineNum"> 1036 </span><span class="lineCov"> 1455572 : static inline int info_get_justsynced(snapraid_info info)</span>
<span class="lineNum"> 1037 </span> : {
<span class="lineNum"> 1038 </span><span class="lineCov"> 1455572 : return (info &amp; 0x4) != 0;</span>
<span class="lineNum"> 1039 </span> : }
<span class="lineNum"> 1040 </span> :
<span class="lineNum"> 1041 </span> : /**
<a name="1042"><span class="lineNum"> 1042 </span> : * Mark the block address as with error.</a>
<span class="lineNum"> 1043 </span> : */
<span class="lineNum"> 1044 </span><span class="lineCov"> 1803 : static inline snapraid_info info_set_bad(snapraid_info info)</span>
<span class="lineNum"> 1045 </span> : {
<span class="lineNum"> 1046 </span><span class="lineCov"> 1803 : return info | 0x1;</span>
<span class="lineNum"> 1047 </span> : }
<span class="lineNum"> 1048 </span> :
<span class="lineNum"> 1049 </span> : /**
<a name="1050"><span class="lineNum"> 1050 </span> : * Mark the block address as with rehash.</a>
<span class="lineNum"> 1051 </span> : */
<span class="lineNum"> 1052 </span><span class="lineCov"> 9199 : static inline snapraid_info info_set_rehash(snapraid_info info)</span>
<span class="lineNum"> 1053 </span> : {
<span class="lineNum"> 1054 </span><span class="lineCov"> 9199 : return info | 0x2;</span>
<span class="lineNum"> 1055 </span> : }
<span class="lineNum"> 1056 </span> :
<span class="lineNum"> 1057 </span> : /**
<span class="lineNum"> 1058 </span> : * Set the info at the specified position.
<a name="1059"><span class="lineNum"> 1059 </span> : * The position is allocated if not yet done.</a>
<span class="lineNum"> 1060 </span> : */
<span class="lineNum"> 1061 </span><span class="lineCov"> 1609362 : static inline void info_set(tommy_arrayblkof* array, unsigned pos, snapraid_info info)</span>
<span class="lineNum"> 1062 </span> : {
<span class="lineNum"> 1063 </span><span class="lineCov"> 1609362 : tommy_arrayblkof_grow(array, pos + 1);</span>
<span class="lineNum"> 1064 </span> :
<span class="lineNum"> 1065 </span><span class="lineCov"> 1609362 : memcpy(tommy_arrayblkof_ref(array, pos), &amp;info, sizeof(snapraid_info));</span>
<span class="lineNum"> 1066 </span><span class="lineCov"> 1609362 : }</span>
<span class="lineNum"> 1067 </span> :
<span class="lineNum"> 1068 </span> : /**
<span class="lineNum"> 1069 </span> : * Get the info at the specified position.
<a name="1070"><span class="lineNum"> 1070 </span> : * For not allocated position, 0 is returned.</a>
<span class="lineNum"> 1071 </span> : */
<span class="lineNum"> 1072 </span><span class="lineCov"> 10527480 : static inline snapraid_info info_get(tommy_arrayblkof* array, unsigned pos)</span>
<span class="lineNum"> 1073 </span> : {
<span class="lineNum"> 1074 </span> : snapraid_info info;
<span class="lineNum"> 985 </span><span class="lineCov"> 394996 : static inline snapraid_info info_make(time_t last_access, int error, int rehash, int justsynced)</span>
<span class="lineNum"> 986 </span> : {
<span class="lineNum"> 987 </span> : /* clear the lowest bits as reserved for other information */
<span class="lineNum"> 988 </span><span class="lineCov"> 394996 : snapraid_info info = last_access &amp; ~INFO_MASK;</span>
<span class="lineNum"> 989 </span> :
<span class="lineNum"> 990 </span><span class="lineCov"> 394996 : if (error != 0)</span>
<span class="lineNum"> 991 </span><span class="lineCov"> 5460 : info |= 0x1;</span>
<span class="lineNum"> 992 </span><span class="lineCov"> 394996 : if (rehash != 0)</span>
<span class="lineNum"> 993 </span><span class="lineCov"> 127410 : info |= 0x2;</span>
<span class="lineNum"> 994 </span><span class="lineCov"> 394996 : if (justsynced != 0)</span>
<span class="lineNum"> 995 </span><span class="lineCov"> 226412 : info |= 0x4;</span>
<span class="lineNum"> 996 </span><span class="lineCov"> 394996 : return info;</span>
<span class="lineNum"> 997 </span> : }
<span class="lineNum"> 998 </span> :
<span class="lineNum"> 999 </span> : /**
<span class="lineNum"> 1000 </span> : * Extract the time information.
<span class="lineNum"> 1001 </span> : * This is the last time when the block was know to be correct.
<a name="1002"><span class="lineNum"> 1002 </span> : * The &quot;scrubbed&quot; info tells if the time is referreing at the latest sync or scrub.</a>
<span class="lineNum"> 1003 </span> : */
<span class="lineNum"> 1004 </span><span class="lineCov"> 2258078 : static inline time_t info_get_time(snapraid_info info)</span>
<span class="lineNum"> 1005 </span> : {
<span class="lineNum"> 1006 </span><span class="lineCov"> 2258078 : return info &amp; ~INFO_MASK;</span>
<span class="lineNum"> 1007 </span> : }
<span class="lineNum"> 1008 </span> :
<span class="lineNum"> 1009 </span> : /**
<span class="lineNum"> 1010 </span> : * Extract the error information.
<a name="1011"><span class="lineNum"> 1011 </span> : * Report if the block address had some problem.</a>
<span class="lineNum"> 1012 </span> : */
<span class="lineNum"> 1013 </span><span class="lineCov"> 1725704 : static inline int info_get_bad(snapraid_info info)</span>
<span class="lineNum"> 1014 </span> : {
<span class="lineNum"> 1015 </span><span class="lineCov"> 1725704 : return (info &amp; 0x1) != 0;</span>
<span class="lineNum"> 1016 </span> : }
<span class="lineNum"> 1017 </span> :
<span class="lineNum"> 1018 </span> : /**
<span class="lineNum"> 1019 </span> : * Extract the rehash information.
<a name="1020"><span class="lineNum"> 1020 </span> : * Report if the block address is using the old hash and needs to be rehashed.</a>
<span class="lineNum"> 1021 </span> : */
<span class="lineNum"> 1022 </span><span class="lineCov"> 3312725 : static inline int info_get_rehash(snapraid_info info)</span>
<span class="lineNum"> 1023 </span> : {
<span class="lineNum"> 1024 </span><span class="lineCov"> 3312725 : return (info &amp; 0x2) != 0;</span>
<span class="lineNum"> 1025 </span> : }
<span class="lineNum"> 1026 </span> :
<span class="lineNum"> 1027 </span> : /**
<span class="lineNum"> 1028 </span> : * Extract the scrubbed information.
<a name="1029"><span class="lineNum"> 1029 </span> : * Report if the block address was never scrubbed.</a>
<span class="lineNum"> 1030 </span> : */
<span class="lineNum"> 1031 </span><span class="lineCov"> 1474627 : static inline int info_get_justsynced(snapraid_info info)</span>
<span class="lineNum"> 1032 </span> : {
<span class="lineNum"> 1033 </span><span class="lineCov"> 1474627 : return (info &amp; 0x4) != 0;</span>
<span class="lineNum"> 1034 </span> : }
<span class="lineNum"> 1035 </span> :
<span class="lineNum"> 1036 </span> : /**
<a name="1037"><span class="lineNum"> 1037 </span> : * Mark the block address as with error.</a>
<span class="lineNum"> 1038 </span> : */
<span class="lineNum"> 1039 </span><span class="lineCov"> 1802 : static inline snapraid_info info_set_bad(snapraid_info info)</span>
<span class="lineNum"> 1040 </span> : {
<span class="lineNum"> 1041 </span><span class="lineCov"> 1802 : return info | 0x1;</span>
<span class="lineNum"> 1042 </span> : }
<span class="lineNum"> 1043 </span> :
<span class="lineNum"> 1044 </span> : /**
<a name="1045"><span class="lineNum"> 1045 </span> : * Mark the block address as with rehash.</a>
<span class="lineNum"> 1046 </span> : */
<span class="lineNum"> 1047 </span><span class="lineCov"> 9199 : static inline snapraid_info info_set_rehash(snapraid_info info)</span>
<span class="lineNum"> 1048 </span> : {
<span class="lineNum"> 1049 </span><span class="lineCov"> 9199 : return info | 0x2;</span>
<span class="lineNum"> 1050 </span> : }
<span class="lineNum"> 1051 </span> :
<span class="lineNum"> 1052 </span> : /**
<span class="lineNum"> 1053 </span> : * Set the info at the specified position.
<a name="1054"><span class="lineNum"> 1054 </span> : * The position is allocated if not yet done.</a>
<span class="lineNum"> 1055 </span> : */
<span class="lineNum"> 1056 </span><span class="lineCov"> 1609485 : static inline void info_set(tommy_arrayblkof* array, unsigned pos, snapraid_info info)</span>
<span class="lineNum"> 1057 </span> : {
<span class="lineNum"> 1058 </span><span class="lineCov"> 1609485 : tommy_arrayblkof_grow(array, pos + 1);</span>
<span class="lineNum"> 1059 </span> :
<span class="lineNum"> 1060 </span><span class="lineCov"> 1609485 : memcpy(tommy_arrayblkof_ref(array, pos), &amp;info, sizeof(snapraid_info));</span>
<span class="lineNum"> 1061 </span><span class="lineCov"> 1609485 : }</span>
<span class="lineNum"> 1062 </span> :
<span class="lineNum"> 1063 </span> : /**
<span class="lineNum"> 1064 </span> : * Get the info at the specified position.
<a name="1065"><span class="lineNum"> 1065 </span> : * For not allocated position, 0 is returned.</a>
<span class="lineNum"> 1066 </span> : */
<span class="lineNum"> 1067 </span><span class="lineCov"> 10573034 : static inline snapraid_info info_get(tommy_arrayblkof* array, unsigned pos)</span>
<span class="lineNum"> 1068 </span> : {
<span class="lineNum"> 1069 </span> : snapraid_info info;
<span class="lineNum"> 1070 </span> :
<span class="lineNum"> 1071 </span><span class="lineCov"> 10573034 : if (pos &gt;= tommy_arrayblkof_size(array))</span>
<span class="lineNum"> 1072 </span><span class="lineCov"> 474047 : return 0;</span>
<span class="lineNum"> 1073 </span> :
<span class="lineNum"> 1074 </span><span class="lineCov"> 10073489 : memcpy(&amp;info, tommy_arrayblkof_ref(array, pos), sizeof(snapraid_info));</span>
<span class="lineNum"> 1075 </span> :
<span class="lineNum"> 1076 </span><span class="lineCov"> 10527480 : if (pos &gt;= tommy_arrayblkof_size(array))</span>
<span class="lineNum"> 1077 </span><span class="lineCov"> 477684 : return 0;</span>
<span class="lineNum"> 1076 </span><span class="lineCov"> 10085303 : return info;</span>
<span class="lineNum"> 1077 </span> : }
<span class="lineNum"> 1078 </span> :
<span class="lineNum"> 1079 </span><span class="lineCov"> 10051219 : memcpy(&amp;info, tommy_arrayblkof_ref(array, pos), sizeof(snapraid_info));</span>
<span class="lineNum"> 1080 </span> :
<span class="lineNum"> 1081 </span><span class="lineCov"> 10056067 : return info;</span>
<span class="lineNum"> 1082 </span> : }
<span class="lineNum"> 1079 </span> : /**
<span class="lineNum"> 1080 </span> : * Compare times
<span class="lineNum"> 1081 </span> : */
<span class="lineNum"> 1082 </span> : int time_compare(const void* void_a, const void* void_b);
<span class="lineNum"> 1083 </span> :
<span class="lineNum"> 1084 </span> : /**
<span class="lineNum"> 1085 </span> : * Compare times
<span class="lineNum"> 1086 </span> : */
<span class="lineNum"> 1087 </span> : int time_compare(const void* void_a, const void* void_b);
<span class="lineNum"> 1088 </span> :
<span class="lineNum"> 1089 </span> : #endif
<span class="lineNum"> 1090 </span> :
<span class="lineNum"> 1084 </span> : #endif
<span class="lineNum"> 1085 </span> :
</pre>
</td>
</tr>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@ -61,31 +61,31 @@
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#249">handle_read</a></td>
<td class="coverFnHi">5655264</td>
<td class="coverFnHi">5656394</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#221">handle_close</a></td>
<td class="coverFnHi">4567924</td>
<td class="coverFnHi">4568631</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#149">handle_open</a></td>
<td class="coverFnHi">1971646</td>
<td class="coverFnHi">1972488</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#25">handle_create</a></td>
<td class="coverFnHi">771245</td>
<td class="coverFnHi">771210</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#324">handle_write</a></td>
<td class="coverFnHi">288250</td>
<td class="coverFnHi">288205</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#364">handle_utime</a></td>
<td class="coverFnHi">117835</td>
<td class="coverFnHi">117763</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#127">handle_truncate</a></td>
<td class="coverFnHi">3177</td>
<td class="coverFnHi">3249</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#384">handle_map</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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#221">handle_close</a></td>
<td class="coverFnHi">4567924</td>
<td class="coverFnHi">4568631</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#25">handle_create</a></td>
<td class="coverFnHi">771245</td>
<td class="coverFnHi">771210</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#384">handle_map</a></td>
@ -73,23 +73,23 @@
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#149">handle_open</a></td>
<td class="coverFnHi">1971646</td>
<td class="coverFnHi">1972488</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#249">handle_read</a></td>
<td class="coverFnHi">5655264</td>
<td class="coverFnHi">5656394</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#127">handle_truncate</a></td>
<td class="coverFnHi">3177</td>
<td class="coverFnHi">3249</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#364">handle_utime</a></td>
<td class="coverFnHi">117835</td>
<td class="coverFnHi">117763</td>
</tr>
<tr>
<td class="coverFn"><a href="handle.c.gcov.html#324">handle_write</a></td>
<td class="coverFnHi">288250</td>
<td class="coverFnHi">288205</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@ -86,66 +86,66 @@
<span class="lineNum"> 24 </span> : /****************************************************************************/
<a name="25"><span class="lineNum"> 25 </span> : /* handle */</a>
<span class="lineNum"> 26 </span> :
<span class="lineNum"> 27 </span><span class="lineCov"> 771245 : int handle_create(struct snapraid_handle* handle, struct snapraid_file* file, int mode)</span>
<span class="lineNum"> 27 </span><span class="lineCov"> 771210 : int handle_create(struct snapraid_handle* handle, struct snapraid_file* file, int mode)</span>
<span class="lineNum"> 28 </span> : {
<span class="lineNum"> 29 </span> : int ret;
<span class="lineNum"> 30 </span> : int flags;
<span class="lineNum"> 31 </span> :
<span class="lineNum"> 32 </span> : /* if it's the same file, and already opened, nothing to do */
<span class="lineNum"> 33 </span><span class="lineCov"> 771245 : if (handle-&gt;file == file &amp;&amp; handle-&gt;f != -1) {</span>
<span class="lineNum"> 33 </span><span class="lineCov"> 771210 : if (handle-&gt;file == file &amp;&amp; handle-&gt;f != -1) {</span>
<span class="lineNum"> 34 </span><span class="lineNoCov"> 0 : return 0;</span>
<span class="lineNum"> 35 </span> : }
<span class="lineNum"> 36 </span> :
<span class="lineNum"> 37 </span><span class="lineCov"> 771245 : pathprint(handle-&gt;path, sizeof(handle-&gt;path), &quot;%s%s&quot;, handle-&gt;disk-&gt;dir, file-&gt;sub);</span>
<span class="lineNum"> 37 </span><span class="lineCov"> 771210 : pathprint(handle-&gt;path, sizeof(handle-&gt;path), &quot;%s%s&quot;, handle-&gt;disk-&gt;dir, file-&gt;sub);</span>
<span class="lineNum"> 38 </span> :
<span class="lineNum"> 39 </span><span class="lineCov"> 771245 : ret = mkancestor(handle-&gt;path);</span>
<span class="lineNum"> 40 </span><span class="lineCov"> 771245 : if (ret != 0) {</span>
<span class="lineNum"> 39 </span><span class="lineCov"> 771210 : ret = mkancestor(handle-&gt;path);</span>
<span class="lineNum"> 40 </span><span class="lineCov"> 771210 : if (ret != 0) {</span>
<span class="lineNum"> 41 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 42 </span> : return -1;
<span class="lineNum"> 43 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 44 </span> : }
<span class="lineNum"> 45 </span> :
<span class="lineNum"> 46 </span> : /* initial values, changed later if required */
<span class="lineNum"> 47 </span><span class="lineCov"> 771245 : handle-&gt;created = 0;</span>
<span class="lineNum"> 47 </span><span class="lineCov"> 771210 : handle-&gt;created = 0;</span>
<span class="lineNum"> 48 </span> :
<span class="lineNum"> 49 </span> : /* flags for opening */
<span class="lineNum"> 50 </span> : /* O_BINARY: open as binary file (Windows only) */
<span class="lineNum"> 51 </span> : /* O_NOFOLLOW: do not follow links to ensure to open the real file */
<span class="lineNum"> 52 </span> : /* O_SEQUENTIAL: improve performance for sequential access (Windows only) */
<span class="lineNum"> 53 </span><span class="lineCov"> 771245 : flags = O_BINARY | O_NOFOLLOW;</span>
<span class="lineNum"> 54 </span><span class="lineCov"> 771245 : if ((mode &amp; MODE_SEQUENTIAL) != 0)</span>
<span class="lineNum"> 55 </span><span class="lineCov"> 771245 : flags |= O_SEQUENTIAL;</span>
<span class="lineNum"> 53 </span><span class="lineCov"> 771210 : flags = O_BINARY | O_NOFOLLOW;</span>
<span class="lineNum"> 54 </span><span class="lineCov"> 771210 : if ((mode &amp; MODE_SEQUENTIAL) != 0)</span>
<span class="lineNum"> 55 </span><span class="lineCov"> 771210 : flags |= O_SEQUENTIAL;</span>
<span class="lineNum"> 56 </span> :
<span class="lineNum"> 57 </span> : /* open for read write */
<span class="lineNum"> 58 </span><span class="lineCov"> 771245 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR);</span>
<span class="lineNum"> 58 </span><span class="lineCov"> 771210 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR);</span>
<span class="lineNum"> 59 </span> :
<span class="lineNum"> 60 </span> : /* if failed for missing write permission */
<span class="lineNum"> 61 </span><span class="lineCov"> 771245 : if (handle-&gt;f == -1 &amp;&amp; (errno == EACCES || errno == EROFS)) {</span>
<span class="lineNum"> 61 </span><span class="lineCov"> 771210 : if (handle-&gt;f == -1 &amp;&amp; (errno == EACCES || errno == EROFS)) {</span>
<span class="lineNum"> 62 </span> : /* open for real-only */
<span class="lineNum"> 63 </span><span class="lineNoCov"> 0 : handle-&gt;f = open(handle-&gt;path, flags | O_RDONLY);</span>
<span class="lineNum"> 64 </span> : }
<span class="lineNum"> 65 </span> :
<span class="lineNum"> 66 </span> : /* if failed for missing file */
<span class="lineNum"> 67 </span><span class="lineCov"> 771245 : if (handle-&gt;f == -1 &amp;&amp; errno == ENOENT) {</span>
<span class="lineNum"> 67 </span><span class="lineCov"> 771210 : if (handle-&gt;f == -1 &amp;&amp; errno == ENOENT) {</span>
<span class="lineNum"> 68 </span> : char path_from[PATH_MAX];
<span class="lineNum"> 69 </span> :
<span class="lineNum"> 70 </span> : /* check if exists a .unrecoverable copy, and rename to the real one */
<span class="lineNum"> 71 </span><span class="lineCov"> 176510 : pathprint(path_from, sizeof(path_from), &quot;%s.unrecoverable&quot;, handle-&gt;path);</span>
<span class="lineNum"> 71 </span><span class="lineCov"> 176420 : pathprint(path_from, sizeof(path_from), &quot;%s.unrecoverable&quot;, handle-&gt;path);</span>
<span class="lineNum"> 72 </span> :
<span class="lineNum"> 73 </span><span class="lineCov"> 176510 : if (rename(path_from, handle-&gt;path) == 0) {</span>
<span class="lineNum"> 73 </span><span class="lineCov"> 176420 : if (rename(path_from, handle-&gt;path) == 0) {</span>
<span class="lineNum"> 74 </span> : /* open for read write */
<span class="lineNum"> 75 </span><span class="lineCov"> 63467 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR);</span>
<span class="lineNum"> 75 </span><span class="lineCov"> 63396 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR);</span>
<span class="lineNum"> 76 </span> : } else {
<span class="lineNum"> 77 </span> : /* create it */
<span class="lineNum"> 78 </span><span class="lineCov"> 113043 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR | O_CREAT, 0600);</span>
<span class="lineNum"> 79 </span><span class="lineCov"> 113043 : if (handle-&gt;f != -1) {</span>
<span class="lineNum"> 78 </span><span class="lineCov"> 113024 : handle-&gt;f = open(handle-&gt;path, flags | O_RDWR | O_CREAT, 0600);</span>
<span class="lineNum"> 79 </span><span class="lineCov"> 113024 : if (handle-&gt;f != -1) {</span>
<span class="lineNum"> 80 </span> : /* mark it as created if really done */
<span class="lineNum"> 81 </span><span class="lineCov"> 113043 : handle-&gt;created = 1;</span>
<span class="lineNum"> 81 </span><span class="lineCov"> 113024 : handle-&gt;created = 1;</span>
<span class="lineNum"> 82 </span> : }
<span class="lineNum"> 83 </span> : }
<span class="lineNum"> 84 </span> : }
<span class="lineNum"> 85 </span> :
<span class="lineNum"> 86 </span><span class="lineCov"> 771245 : if (handle-&gt;f == -1) {</span>
<span class="lineNum"> 86 </span><span class="lineCov"> 771210 : if (handle-&gt;f == -1) {</span>
<span class="lineNum"> 87 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 88 </span> : /* invalidate for error */
<span class="lineNum"> 89 </span> : handle-&gt;file = 0;
@ -158,11 +158,11 @@
<span class="lineNum"> 96 </span> : }
<span class="lineNum"> 97 </span> :
<span class="lineNum"> 98 </span> : /* just opened */
<span class="lineNum"> 99 </span><span class="lineCov"> 771245 : handle-&gt;file = file;</span>
<span class="lineNum"> 99 </span><span class="lineCov"> 771210 : handle-&gt;file = file;</span>
<span class="lineNum"> 100 </span> :
<span class="lineNum"> 101 </span> : /* get the stat info */
<span class="lineNum"> 102 </span><span class="lineCov"> 771245 : ret = fstat(handle-&gt;f, &amp;handle-&gt;st);</span>
<span class="lineNum"> 103 </span><span class="lineCov"> 771245 : if (ret != 0) {</span>
<span class="lineNum"> 102 </span><span class="lineCov"> 771210 : ret = fstat(handle-&gt;f, &amp;handle-&gt;st);</span>
<span class="lineNum"> 103 </span><span class="lineCov"> 771210 : if (ret != 0) {</span>
<span class="lineNum"> 104 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 105 </span> : log_fatal(&quot;Error accessing file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));
<span class="lineNum"> 106 </span> : return -1;
@ -170,13 +170,13 @@
<span class="lineNum"> 108 </span> : }
<span class="lineNum"> 109 </span> :
<span class="lineNum"> 110 </span> : /* get the size of the existing data */
<span class="lineNum"> 111 </span><span class="lineCov"> 771245 : handle-&gt;valid_size = handle-&gt;st.st_size;</span>
<span class="lineNum"> 111 </span><span class="lineCov"> 771210 : handle-&gt;valid_size = handle-&gt;st.st_size;</span>
<span class="lineNum"> 112 </span> :
<span class="lineNum"> 113 </span> : #if HAVE_POSIX_FADVISE
<span class="lineNum"> 114 </span><span class="lineCov"> 771245 : if ((mode &amp; MODE_SEQUENTIAL) != 0) {</span>
<span class="lineNum"> 114 </span><span class="lineCov"> 771210 : if ((mode &amp; MODE_SEQUENTIAL) != 0) {</span>
<span class="lineNum"> 115 </span> : /* advise sequential access */
<span class="lineNum"> 116 </span><span class="lineCov"> 771245 : ret = posix_fadvise(handle-&gt;f, 0, 0, POSIX_FADV_SEQUENTIAL);</span>
<span class="lineNum"> 117 </span><span class="lineCov"> 771245 : if (ret != 0) {</span>
<span class="lineNum"> 116 </span><span class="lineCov"> 771210 : ret = posix_fadvise(handle-&gt;f, 0, 0, POSIX_FADV_SEQUENTIAL);</span>
<span class="lineNum"> 117 </span><span class="lineCov"> 771210 : if (ret != 0) {</span>
<span class="lineNum"> 118 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 119 </span> : log_fatal(&quot;Error advising file '%s'. %s.\n&quot;, handle-&gt;path, strerror(ret));
<span class="lineNum"> 120 </span> : return -1;
@ -185,15 +185,15 @@
<span class="lineNum"> 123 </span> : }
<span class="lineNum"> 124 </span> : #endif
<span class="lineNum"> 125 </span> :
<span class="lineNum"> 126 </span><span class="lineCov"> 771245 : return 0;</span>
<span class="lineNum"> 126 </span><span class="lineCov"> 771210 : return 0;</span>
<a name="127"><span class="lineNum"> 127 </span> : }</a>
<span class="lineNum"> 128 </span> :
<span class="lineNum"> 129 </span><span class="lineCov"> 3177 : int handle_truncate(struct snapraid_handle* handle, struct snapraid_file* file)</span>
<span class="lineNum"> 129 </span><span class="lineCov"> 3249 : int handle_truncate(struct snapraid_handle* handle, struct snapraid_file* file)</span>
<span class="lineNum"> 130 </span> : {
<span class="lineNum"> 131 </span> : int ret;
<span class="lineNum"> 132 </span> :
<span class="lineNum"> 133 </span><span class="lineCov"> 3177 : ret = ftruncate(handle-&gt;f, file-&gt;size);</span>
<span class="lineNum"> 134 </span><span class="lineCov"> 3177 : if (ret != 0) {</span>
<span class="lineNum"> 133 </span><span class="lineCov"> 3249 : ret = ftruncate(handle-&gt;f, file-&gt;size);</span>
<span class="lineNum"> 134 </span><span class="lineCov"> 3249 : if (ret != 0) {</span>
<span class="lineNum"> 135 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 136 </span> : if (errno == EACCES) {
<span class="lineNum"> 137 </span> : log_fatal(&quot;Failed to truncate file '%s' for missing write permission.\n&quot;, handle-&gt;path);
@ -205,58 +205,58 @@
<span class="lineNum"> 143 </span> : }
<span class="lineNum"> 144 </span> :
<span class="lineNum"> 145 </span> : /* adjust the size to the truncated size */
<span class="lineNum"> 146 </span><span class="lineCov"> 3177 : handle-&gt;valid_size = file-&gt;size;</span>
<span class="lineNum"> 146 </span><span class="lineCov"> 3249 : handle-&gt;valid_size = file-&gt;size;</span>
<span class="lineNum"> 147 </span> :
<span class="lineNum"> 148 </span><span class="lineCov"> 3177 : return 0;</span>
<span class="lineNum"> 148 </span><span class="lineCov"> 3249 : return 0;</span>
<a name="149"><span class="lineNum"> 149 </span> : }</a>
<span class="lineNum"> 150 </span> :
<span class="lineNum"> 151 </span><span class="lineCov"> 1971646 : int handle_open(struct snapraid_handle* handle, struct snapraid_file* file, int mode, fptr* out, fptr* out_missing)</span>
<span class="lineNum"> 151 </span><span class="lineCov"> 1972488 : int handle_open(struct snapraid_handle* handle, struct snapraid_file* file, int mode, fptr* out, fptr* out_missing)</span>
<span class="lineNum"> 152 </span> : {
<span class="lineNum"> 153 </span> : int ret;
<span class="lineNum"> 154 </span> : int flags;
<span class="lineNum"> 155 </span> :
<span class="lineNum"> 156 </span><span class="lineCov"> 1971646 : if (!out_missing)</span>
<span class="lineNum"> 157 </span><span class="lineCov"> 1971130 : out_missing = out;</span>
<span class="lineNum"> 156 </span><span class="lineCov"> 1972488 : if (!out_missing)</span>
<span class="lineNum"> 157 </span><span class="lineCov"> 1971972 : out_missing = out;</span>
<span class="lineNum"> 158 </span> :
<span class="lineNum"> 159 </span> : /* if already opened, nothing to do */
<span class="lineNum"> 160 </span><span class="lineCov"> 1971646 : if (handle-&gt;file == file &amp;&amp; handle-&gt;f != -1) {</span>
<span class="lineNum"> 161 </span><span class="lineCov"> 332255 : return 0;</span>
<span class="lineNum"> 160 </span><span class="lineCov"> 1972488 : if (handle-&gt;file == file &amp;&amp; handle-&gt;f != -1) {</span>
<span class="lineNum"> 161 </span><span class="lineCov"> 332290 : return 0;</span>
<span class="lineNum"> 162 </span> : }
<span class="lineNum"> 163 </span> :
<span class="lineNum"> 164 </span><span class="lineCov"> 1639391 : pathprint(handle-&gt;path, sizeof(handle-&gt;path), &quot;%s%s&quot;, handle-&gt;disk-&gt;dir, file-&gt;sub);</span>
<span class="lineNum"> 164 </span><span class="lineCov"> 1640198 : pathprint(handle-&gt;path, sizeof(handle-&gt;path), &quot;%s%s&quot;, handle-&gt;disk-&gt;dir, file-&gt;sub);</span>
<span class="lineNum"> 165 </span> :
<span class="lineNum"> 166 </span> : /* for sure not created */
<span class="lineNum"> 167 </span><span class="lineCov"> 1639391 : handle-&gt;created = 0;</span>
<span class="lineNum"> 167 </span><span class="lineCov"> 1640198 : handle-&gt;created = 0;</span>
<span class="lineNum"> 168 </span> :
<span class="lineNum"> 169 </span> : /* flags for opening */
<span class="lineNum"> 170 </span> : /* O_BINARY: open as binary file (Windows only) */
<span class="lineNum"> 171 </span> : /* O_NOFOLLOW: do not follow links to ensure to open the real file */
<span class="lineNum"> 172 </span> : /* O_SEQUENTIAL: improve performance for sequential access (Windows only) */
<span class="lineNum"> 173 </span><span class="lineCov"> 1639391 : flags = O_BINARY | O_NOFOLLOW;</span>
<span class="lineNum"> 174 </span><span class="lineCov"> 1639391 : if ((mode &amp; MODE_SEQUENTIAL) != 0)</span>
<span class="lineNum"> 175 </span><span class="lineCov"> 1628063 : flags |= O_SEQUENTIAL;</span>
<span class="lineNum"> 173 </span><span class="lineCov"> 1640198 : flags = O_BINARY | O_NOFOLLOW;</span>
<span class="lineNum"> 174 </span><span class="lineCov"> 1640198 : if ((mode &amp; MODE_SEQUENTIAL) != 0)</span>
<span class="lineNum"> 175 </span><span class="lineCov"> 1628870 : flags |= O_SEQUENTIAL;</span>
<span class="lineNum"> 176 </span> :
<span class="lineNum"> 177 </span> : /* open for read */
<span class="lineNum"> 178 </span><span class="lineCov"> 1639391 : handle-&gt;f = open_noatime(handle-&gt;path, flags | O_RDONLY);</span>
<span class="lineNum"> 179 </span><span class="lineCov"> 1639391 : if (handle-&gt;f == -1) {</span>
<span class="lineNum"> 178 </span><span class="lineCov"> 1640198 : handle-&gt;f = open_noatime(handle-&gt;path, flags | O_RDONLY);</span>
<span class="lineNum"> 179 </span><span class="lineCov"> 1640198 : if (handle-&gt;f == -1) {</span>
<span class="lineNum"> 180 </span> : /* invalidate for error */
<span class="lineNum"> 181 </span><span class="lineCov"> 78905 : handle-&gt;file = 0;</span>
<span class="lineNum"> 182 </span><span class="lineCov"> 78905 : handle-&gt;f = -1;</span>
<span class="lineNum"> 183 </span><span class="lineCov"> 78905 : handle-&gt;valid_size = 0;</span>
<span class="lineNum"> 181 </span><span class="lineCov"> 78777 : handle-&gt;file = 0;</span>
<span class="lineNum"> 182 </span><span class="lineCov"> 78777 : handle-&gt;f = -1;</span>
<span class="lineNum"> 183 </span><span class="lineCov"> 78777 : handle-&gt;valid_size = 0;</span>
<span class="lineNum"> 184 </span> :
<span class="lineNum"> 185 </span><span class="lineCov"> 78905 : if (errno == ENOENT)</span>
<span class="lineNum"> 186 </span><span class="lineCov"> 78893 : out_missing(&quot;Missing file '%s'.\n&quot;, handle-&gt;path);</span>
<span class="lineNum"> 185 </span><span class="lineCov"> 78777 : if (errno == ENOENT)</span>
<span class="lineNum"> 186 </span><span class="lineCov"> 78765 : out_missing(&quot;Missing file '%s'.\n&quot;, handle-&gt;path);</span>
<span class="lineNum"> 187 </span> : else
<span class="lineNum"> 188 </span><span class="lineCov"> 12 : out(&quot;Error opening file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));</span>
<span class="lineNum"> 189 </span><span class="lineCov"> 78905 : return -1;</span>
<span class="lineNum"> 189 </span><span class="lineCov"> 78777 : return -1;</span>
<span class="lineNum"> 190 </span> : }
<span class="lineNum"> 191 </span> :
<span class="lineNum"> 192 </span> : /* just opened */
<span class="lineNum"> 193 </span><span class="lineCov"> 1560486 : handle-&gt;file = file;</span>
<span class="lineNum"> 193 </span><span class="lineCov"> 1561421 : handle-&gt;file = file;</span>
<span class="lineNum"> 194 </span> :
<span class="lineNum"> 195 </span> : /* get the stat info */
<span class="lineNum"> 196 </span><span class="lineCov"> 1560486 : ret = fstat(handle-&gt;f, &amp;handle-&gt;st);</span>
<span class="lineNum"> 197 </span><span class="lineCov"> 1560486 : if (ret != 0) {</span>
<span class="lineNum"> 196 </span><span class="lineCov"> 1561421 : ret = fstat(handle-&gt;f, &amp;handle-&gt;st);</span>
<span class="lineNum"> 197 </span><span class="lineCov"> 1561421 : if (ret != 0) {</span>
<span class="lineNum"> 198 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 199 </span> : out(&quot;Error accessing file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));
<span class="lineNum"> 200 </span> : return -1;
@ -264,13 +264,13 @@
<span class="lineNum"> 202 </span> : }
<span class="lineNum"> 203 </span> :
<span class="lineNum"> 204 </span> : /* get the size of the existing data */
<span class="lineNum"> 205 </span><span class="lineCov"> 1560486 : handle-&gt;valid_size = handle-&gt;st.st_size;</span>
<span class="lineNum"> 205 </span><span class="lineCov"> 1561421 : handle-&gt;valid_size = handle-&gt;st.st_size;</span>
<span class="lineNum"> 206 </span> :
<span class="lineNum"> 207 </span> : #if HAVE_POSIX_FADVISE
<span class="lineNum"> 208 </span><span class="lineCov"> 1560486 : if ((mode &amp; MODE_SEQUENTIAL) != 0) {</span>
<span class="lineNum"> 208 </span><span class="lineCov"> 1561421 : if ((mode &amp; MODE_SEQUENTIAL) != 0) {</span>
<span class="lineNum"> 209 </span> : /* advise sequential access */
<span class="lineNum"> 210 </span><span class="lineCov"> 1549158 : ret = posix_fadvise(handle-&gt;f, 0, 0, POSIX_FADV_SEQUENTIAL);</span>
<span class="lineNum"> 211 </span><span class="lineCov"> 1549158 : if (ret != 0) {</span>
<span class="lineNum"> 210 </span><span class="lineCov"> 1550093 : ret = posix_fadvise(handle-&gt;f, 0, 0, POSIX_FADV_SEQUENTIAL);</span>
<span class="lineNum"> 211 </span><span class="lineCov"> 1550093 : if (ret != 0) {</span>
<span class="lineNum"> 212 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 213 </span> : out(&quot;Error advising file '%s'. %s.\n&quot;, handle-&gt;path, strerror(ret));
<span class="lineNum"> 214 </span> : return -1;
@ -279,17 +279,17 @@
<span class="lineNum"> 217 </span> : }
<span class="lineNum"> 218 </span> : #endif
<span class="lineNum"> 219 </span> :
<span class="lineNum"> 220 </span><span class="lineCov"> 1560486 : return 0;</span>
<span class="lineNum"> 220 </span><span class="lineCov"> 1561421 : return 0;</span>
<a name="221"><span class="lineNum"> 221 </span> : }</a>
<span class="lineNum"> 222 </span> :
<span class="lineNum"> 223 </span><span class="lineCov"> 4567924 : int handle_close(struct snapraid_handle* handle)</span>
<span class="lineNum"> 223 </span><span class="lineCov"> 4568631 : int handle_close(struct snapraid_handle* handle)</span>
<span class="lineNum"> 224 </span> : {
<span class="lineNum"> 225 </span> : int ret;
<span class="lineNum"> 226 </span> :
<span class="lineNum"> 227 </span> : /* close if open */
<span class="lineNum"> 228 </span><span class="lineCov"> 4567924 : if (handle-&gt;f != -1) {</span>
<span class="lineNum"> 229 </span><span class="lineCov"> 2331731 : ret = close(handle-&gt;f);</span>
<span class="lineNum"> 230 </span><span class="lineCov"> 2331731 : if (ret != 0) {</span>
<span class="lineNum"> 228 </span><span class="lineCov"> 4568631 : if (handle-&gt;f != -1) {</span>
<span class="lineNum"> 229 </span><span class="lineCov"> 2332631 : ret = close(handle-&gt;f);</span>
<span class="lineNum"> 230 </span><span class="lineCov"> 2332631 : if (ret != 0) {</span>
<span class="lineNum"> 231 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 232 </span> : log_fatal(&quot;Error closing file '%s'. %s.\n&quot;, handle-&gt;file-&gt;sub, strerror(errno));
<span class="lineNum"> 233 </span> :
@ -303,36 +303,36 @@
<span class="lineNum"> 241 </span> : }
<span class="lineNum"> 242 </span> :
<span class="lineNum"> 243 </span> : /* reset the descriptor */
<span class="lineNum"> 244 </span><span class="lineCov"> 4567924 : handle-&gt;file = 0;</span>
<span class="lineNum"> 245 </span><span class="lineCov"> 4567924 : handle-&gt;f = -1;</span>
<span class="lineNum"> 246 </span><span class="lineCov"> 4567924 : handle-&gt;valid_size = 0;</span>
<span class="lineNum"> 244 </span><span class="lineCov"> 4568631 : handle-&gt;file = 0;</span>
<span class="lineNum"> 245 </span><span class="lineCov"> 4568631 : handle-&gt;f = -1;</span>
<span class="lineNum"> 246 </span><span class="lineCov"> 4568631 : handle-&gt;valid_size = 0;</span>
<span class="lineNum"> 247 </span> :
<span class="lineNum"> 248 </span><span class="lineCov"> 4567924 : return 0;</span>
<span class="lineNum"> 248 </span><span class="lineCov"> 4568631 : return 0;</span>
<a name="249"><span class="lineNum"> 249 </span> : }</a>
<span class="lineNum"> 250 </span> :
<span class="lineNum"> 251 </span><span class="lineCov"> 5655264 : int handle_read(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size, fptr* out, fptr* out_missing)</span>
<span class="lineNum"> 251 </span><span class="lineCov"> 5656394 : int handle_read(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size, fptr* out, fptr* out_missing)</span>
<span class="lineNum"> 252 </span> : {
<span class="lineNum"> 253 </span> : ssize_t read_ret;
<span class="lineNum"> 254 </span> : data_off_t offset;
<span class="lineNum"> 255 </span> : unsigned read_size;
<span class="lineNum"> 256 </span> : unsigned count;
<span class="lineNum"> 257 </span> :
<span class="lineNum"> 258 </span><span class="lineCov"> 5655264 : offset = file_pos * (data_off_t)block_size;</span>
<span class="lineNum"> 258 </span><span class="lineCov"> 5656394 : offset = file_pos * (data_off_t)block_size;</span>
<span class="lineNum"> 259 </span> :
<span class="lineNum"> 260 </span><span class="lineCov"> 5655264 : if (!out_missing)</span>
<span class="lineNum"> 261 </span><span class="lineCov"> 5641863 : out_missing = out;</span>
<span class="lineNum"> 260 </span><span class="lineCov"> 5656394 : if (!out_missing)</span>
<span class="lineNum"> 261 </span><span class="lineCov"> 5642993 : out_missing = out;</span>
<span class="lineNum"> 262 </span> :
<span class="lineNum"> 263 </span> : /* check if we are going to read only not initialized data */
<span class="lineNum"> 264 </span><span class="lineCov"> 5655264 : if (offset &gt;= handle-&gt;valid_size) {</span>
<span class="lineNum"> 264 </span><span class="lineCov"> 5656394 : if (offset &gt;= handle-&gt;valid_size) {</span>
<span class="lineNum"> 265 </span> : /* if the file is missing, it's at 0 size, or it's rebuilt while reading */
<span class="lineNum"> 266 </span><span class="lineCov"> 433381 : if (offset == handle-&gt;valid_size || handle-&gt;valid_size == 0)</span>
<span class="lineNum"> 267 </span><span class="lineCov"> 431954 : out_missing(&quot;Reading data from missing file '%s' at offset %&quot; PRIu64 &quot;.\n&quot;, handle-&gt;path, offset);</span>
<span class="lineNum"> 266 </span><span class="lineCov"> 433131 : if (offset == handle-&gt;valid_size || handle-&gt;valid_size == 0)</span>
<span class="lineNum"> 267 </span><span class="lineCov"> 431906 : out_missing(&quot;Reading data from missing file '%s' at offset %&quot; PRIu64 &quot;.\n&quot;, handle-&gt;path, offset);</span>
<span class="lineNum"> 268 </span> : else
<span class="lineNum"> 269 </span><span class="lineCov"> 1427 : out(&quot;Reading missing data from file '%s' at offset %&quot; PRIu64 &quot;.\n&quot;, handle-&gt;path, offset);</span>
<span class="lineNum"> 270 </span><span class="lineCov"> 433381 : return -1;</span>
<span class="lineNum"> 269 </span><span class="lineCov"> 1225 : out(&quot;Reading missing data from file '%s' at offset %&quot; PRIu64 &quot;.\n&quot;, handle-&gt;path, offset);</span>
<span class="lineNum"> 270 </span><span class="lineCov"> 433131 : return -1;</span>
<span class="lineNum"> 271 </span> : }
<span class="lineNum"> 272 </span> :
<span class="lineNum"> 273 </span><span class="lineCov"> 5221883 : read_size = file_block_size(handle-&gt;file, file_pos, block_size);</span>
<span class="lineNum"> 273 </span><span class="lineCov"> 5223263 : read_size = file_block_size(handle-&gt;file, file_pos, block_size);</span>
<span class="lineNum"> 274 </span> :
<span class="lineNum"> 275 </span> : #if !HAVE_PREAD
<span class="lineNum"> 276 </span> : if (lseek(handle-&gt;f, offset, SEEK_SET) != offset) {
@ -343,32 +343,32 @@
<span class="lineNum"> 281 </span> : }
<span class="lineNum"> 282 </span> : #endif
<span class="lineNum"> 283 </span> :
<span class="lineNum"> 284 </span><span class="lineCov"> 5221883 : count = 0;</span>
<span class="lineNum"> 284 </span><span class="lineCov"> 5223263 : count = 0;</span>
<span class="lineNum"> 285 </span> : do {
<span class="lineNum"> 286 </span> :
<span class="lineNum"> 287 </span> : #if HAVE_PREAD
<span class="lineNum"> 288 </span><span class="lineCov"> 5230877 : read_ret = pread(handle-&gt;f, block_buffer + count, read_size - count, offset + count);</span>
<span class="lineNum"> 288 </span><span class="lineCov"> 5232157 : read_ret = pread(handle-&gt;f, block_buffer + count, read_size - count, offset + count);</span>
<span class="lineNum"> 289 </span> : #else
<span class="lineNum"> 290 </span> : read_ret = read(handle-&gt;f, block_buffer + count, read_size - count);
<span class="lineNum"> 291 </span> : #endif
<span class="lineNum"> 292 </span> :
<span class="lineNum"> 293 </span><span class="lineCov"> 5230877 : if (read_ret &lt; 0) {</span>
<span class="lineNum"> 293 </span><span class="lineCov"> 5232157 : if (read_ret &lt; 0) {</span>
<span class="lineNum"> 294 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 295 </span> : out(&quot;Error reading file '%s' at offset %&quot; PRIu64 &quot; for size %u. %s.\n&quot;, handle-&gt;path, offset + count, read_size - count, strerror(errno));
<span class="lineNum"> 296 </span> : return -1;
<span class="lineNum"> 297 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 298 </span> : }
<span class="lineNum"> 299 </span><span class="lineCov"> 5230877 : if (read_ret == 0) {</span>
<span class="lineNum"> 300 </span><span class="lineCov"> 8994 : out(&quot;Unexpected end of file '%s' at offset %&quot; PRIu64 &quot;. %s.\n&quot;, handle-&gt;path, offset, strerror(errno));</span>
<span class="lineNum"> 301 </span><span class="lineCov"> 8994 : return -1;</span>
<span class="lineNum"> 299 </span><span class="lineCov"> 5232157 : if (read_ret == 0) {</span>
<span class="lineNum"> 300 </span><span class="lineCov"> 8894 : out(&quot;Unexpected end of file '%s' at offset %&quot; PRIu64 &quot;. %s.\n&quot;, handle-&gt;path, offset, strerror(errno));</span>
<span class="lineNum"> 301 </span><span class="lineCov"> 8894 : return -1;</span>
<span class="lineNum"> 302 </span> : }
<span class="lineNum"> 303 </span> :
<span class="lineNum"> 304 </span><span class="lineCov"> 5221883 : count += read_ret;</span>
<span class="lineNum"> 305 </span><span class="lineCov"> 5221883 : } while (count &lt; read_size);</span>
<span class="lineNum"> 304 </span><span class="lineCov"> 5223263 : count += read_ret;</span>
<span class="lineNum"> 305 </span><span class="lineCov"> 5223263 : } while (count &lt; read_size);</span>
<span class="lineNum"> 306 </span> :
<span class="lineNum"> 307 </span> : /* pad with 0 */
<span class="lineNum"> 308 </span><span class="lineCov"> 5212889 : if (read_size &lt; block_size) {</span>
<span class="lineNum"> 309 </span><span class="lineCov"> 2111431 : memset(block_buffer + read_size, 0, block_size - read_size);</span>
<span class="lineNum"> 308 </span><span class="lineCov"> 5214369 : if (read_size &lt; block_size) {</span>
<span class="lineNum"> 309 </span><span class="lineCov"> 2112031 : memset(block_buffer + read_size, 0, block_size - read_size);</span>
<span class="lineNum"> 310 </span> : }
<span class="lineNum"> 311 </span> :
<span class="lineNum"> 312 </span> : /* Here isn't needed to call posix_fadvise(..., POSIX_FADV_DONTNEED) */
@ -382,21 +382,21 @@
<span class="lineNum"> 320 </span> : /* at: https://lkml.org/lkml/2010/12/6/122 */
<span class="lineNum"> 321 </span> : /* We relay only on the automatic readahead triggered by POSIX_FADV_SEQUENTIAL. */
<span class="lineNum"> 322 </span> :
<span class="lineNum"> 323 </span><span class="lineCov"> 5212889 : return read_size;</span>
<span class="lineNum"> 323 </span><span class="lineCov"> 5214369 : return read_size;</span>
<a name="324"><span class="lineNum"> 324 </span> : }</a>
<span class="lineNum"> 325 </span> :
<span class="lineNum"> 326 </span><span class="lineCov"> 288250 : int handle_write(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size)</span>
<span class="lineNum"> 326 </span><span class="lineCov"> 288205 : int handle_write(struct snapraid_handle* handle, block_off_t file_pos, unsigned char* block_buffer, unsigned block_size)</span>
<span class="lineNum"> 327 </span> : {
<span class="lineNum"> 328 </span> : ssize_t write_ret;
<span class="lineNum"> 329 </span> : data_off_t offset;
<span class="lineNum"> 330 </span> : unsigned write_size;
<span class="lineNum"> 331 </span> :
<span class="lineNum"> 332 </span><span class="lineCov"> 288250 : offset = file_pos * (data_off_t)block_size;</span>
<span class="lineNum"> 332 </span><span class="lineCov"> 288205 : offset = file_pos * (data_off_t)block_size;</span>
<span class="lineNum"> 333 </span> :
<span class="lineNum"> 334 </span><span class="lineCov"> 288250 : write_size = file_block_size(handle-&gt;file, file_pos, block_size);</span>
<span class="lineNum"> 334 </span><span class="lineCov"> 288205 : write_size = file_block_size(handle-&gt;file, file_pos, block_size);</span>
<span class="lineNum"> 335 </span> :
<span class="lineNum"> 336 </span> : #if HAVE_PWRITE
<span class="lineNum"> 337 </span><span class="lineCov"> 288250 : write_ret = pwrite(handle-&gt;f, block_buffer, write_size, offset);</span>
<span class="lineNum"> 337 </span><span class="lineCov"> 288205 : write_ret = pwrite(handle-&gt;f, block_buffer, write_size, offset);</span>
<span class="lineNum"> 338 </span> : #else
<span class="lineNum"> 339 </span> : if (lseek(handle-&gt;f, offset, SEEK_SET) != offset) {
<span class="lineNum"> 340 </span> : /* LCOV_EXCL_START */
@ -407,7 +407,7 @@
<span class="lineNum"> 345 </span> :
<span class="lineNum"> 346 </span> : write_ret = write(handle-&gt;f, block_buffer, write_size);
<span class="lineNum"> 347 </span> : #endif
<span class="lineNum"> 348 </span><span class="lineCov"> 288250 : if (write_ret != (ssize_t)write_size) { /* conversion is safe because block_size is always small */</span>
<span class="lineNum"> 348 </span><span class="lineCov"> 288205 : if (write_ret != (ssize_t)write_size) { /* conversion is safe because block_size is always small */</span>
<span class="lineNum"> 349 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 350 </span> : log_fatal(&quot;Error writing file '%s'. %s.\n&quot;, handle-&gt;path, strerror(errno));
<span class="lineNum"> 351 </span> : return -1;
@ -415,34 +415,34 @@
<span class="lineNum"> 353 </span> : }
<span class="lineNum"> 354 </span> :
<span class="lineNum"> 355 </span> : /* adjust the size of the valid data */
<span class="lineNum"> 356 </span><span class="lineCov"> 288250 : if (handle-&gt;valid_size &lt; offset + write_size) {</span>
<span class="lineNum"> 357 </span><span class="lineCov"> 282146 : handle-&gt;valid_size = offset + write_size;</span>
<span class="lineNum"> 356 </span><span class="lineCov"> 288205 : if (handle-&gt;valid_size &lt; offset + write_size) {</span>
<span class="lineNum"> 357 </span><span class="lineCov"> 282174 : handle-&gt;valid_size = offset + write_size;</span>
<span class="lineNum"> 358 </span> : }
<span class="lineNum"> 359 </span> :
<span class="lineNum"> 360 </span> : /* Here doesn't make sense to call posix_fadvise(..., POSIX_FADV_DONTNEED) because */
<span class="lineNum"> 361 </span> : /* at this time the data is still not yet written and it cannot be discharged. */
<span class="lineNum"> 362 </span> :
<span class="lineNum"> 363 </span><span class="lineCov"> 288250 : return 0;</span>
<span class="lineNum"> 363 </span><span class="lineCov"> 288205 : return 0;</span>
<a name="364"><span class="lineNum"> 364 </span> : }</a>
<span class="lineNum"> 365 </span> :
<span class="lineNum"> 366 </span><span class="lineCov"> 117835 : int handle_utime(struct snapraid_handle* handle)</span>
<span class="lineNum"> 366 </span><span class="lineCov"> 117763 : int handle_utime(struct snapraid_handle* handle)</span>
<span class="lineNum"> 367 </span> : {
<span class="lineNum"> 368 </span> : int ret;
<span class="lineNum"> 369 </span> :
<span class="lineNum"> 370 </span> : /* do nothing if not opened */
<span class="lineNum"> 371 </span><span class="lineCov"> 117835 : if (handle-&gt;f == -1)</span>
<span class="lineNum"> 371 </span><span class="lineCov"> 117763 : if (handle-&gt;f == -1)</span>
<span class="lineNum"> 372 </span><span class="lineNoCov"> 0 : return 0;</span>
<span class="lineNum"> 373 </span> :
<span class="lineNum"> 374 </span><span class="lineCov"> 117835 : ret = fmtime(handle-&gt;f, handle-&gt;file-&gt;mtime_sec, handle-&gt;file-&gt;mtime_nsec);</span>
<span class="lineNum"> 374 </span><span class="lineCov"> 117763 : ret = fmtime(handle-&gt;f, handle-&gt;file-&gt;mtime_sec, handle-&gt;file-&gt;mtime_nsec);</span>
<span class="lineNum"> 375 </span> :
<span class="lineNum"> 376 </span><span class="lineCov"> 117835 : if (ret != 0) {</span>
<span class="lineNum"> 376 </span><span class="lineCov"> 117763 : if (ret != 0) {</span>
<span class="lineNum"> 377 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 378 </span> : log_fatal(&quot;Error timing file '%s'. %s.\n&quot;, handle-&gt;file-&gt;sub, strerror(errno));
<span class="lineNum"> 379 </span> : return -1;
<span class="lineNum"> 380 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 381 </span> : }
<span class="lineNum"> 382 </span> :
<span class="lineNum"> 383 </span><span class="lineCov"> 117835 : return 0;</span>
<span class="lineNum"> 383 </span><span class="lineCov"> 117763 : return 0;</span>
<a name="384"><span class="lineNum"> 384 </span> : }</a>
<span class="lineNum"> 385 </span> :
<span class="lineNum"> 386 </span><span class="lineCov"> 206 : struct snapraid_handle* handle_map(struct snapraid_state* state, unsigned* handlemax)</span>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@ -61,11 +61,11 @@
</tr>
<tr>
<td class="coverFn"><a href="import.c.gcov.html#47">import_block_hash</a></td>
<td class="coverFnHi">653410</td>
<td class="coverFnHi">652942</td>
</tr>
<tr>
<td class="coverFn"><a href="import.c.gcov.html#150">state_import_fetch</a></td>
<td class="coverFnHi">644466</td>
<td class="coverFnHi">643998</td>
</tr>
<tr>
<td class="coverFn"><a href="import.c.gcov.html#35">import_block_prevhash_compare</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</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">653410</td>
<td class="coverFnHi">652942</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#150">state_import_fetch</a></td>
<td class="coverFnHi">644466</td>
<td class="coverFnHi">643998</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>
@ -108,9 +108,9 @@
<span class="lineNum"> 46 </span> : * Compute the hash of the hash for an import block.
<a name="47"><span class="lineNum"> 47 </span> : * We just use the first 32 bit of the hash itself.</a>
<span class="lineNum"> 48 </span> : */
<span class="lineNum"> 49 </span><span class="lineCov"> 653410 : static inline tommy_uint32_t import_block_hash(const unsigned char* hash)</span>
<span class="lineNum"> 49 </span><span class="lineCov"> 652942 : static inline tommy_uint32_t import_block_hash(const unsigned char* hash)</span>
<span class="lineNum"> 50 </span> : {
<span class="lineNum"> 51 </span><span class="lineCov"> 653410 : return *(const tommy_uint32_t*)hash;</span>
<span class="lineNum"> 51 </span><span class="lineCov"> 652942 : return *(const tommy_uint32_t*)hash;</span>
<a name="52"><span class="lineNum"> 52 </span> : }</a>
<span class="lineNum"> 53 </span> :
<span class="lineNum"> 54 </span><span class="lineCov"> 1750 : static void import_file(struct snapraid_state* state, const char* path, uint64_t size)</span>
@ -211,24 +211,24 @@
<span class="lineNum"> 149 </span><span class="lineCov"> 1750 : free(file);</span>
<a name="150"><span class="lineNum"> 150 </span><span class="lineCov"> 1750 : }</span></a>
<span class="lineNum"> 151 </span> :
<span class="lineNum"> 152 </span><span class="lineCov"> 644466 : int state_import_fetch(struct snapraid_state* state, int rehash, struct snapraid_block* missing_block, unsigned char* buffer)</span>
<span class="lineNum"> 152 </span><span class="lineCov"> 643998 : int state_import_fetch(struct snapraid_state* state, int rehash, struct snapraid_block* missing_block, unsigned char* buffer)</span>
<span class="lineNum"> 153 </span> : {
<span class="lineNum"> 154 </span> : struct snapraid_import_block* block;
<span class="lineNum"> 155 </span> : int ret;
<span class="lineNum"> 156 </span> : int f;
<span class="lineNum"> 157 </span><span class="lineCov"> 644466 : const unsigned char* hash = missing_block-&gt;hash;</span>
<span class="lineNum"> 158 </span><span class="lineCov"> 644466 : unsigned block_size = state-&gt;block_size;</span>
<span class="lineNum"> 157 </span><span class="lineCov"> 643998 : const unsigned char* hash = missing_block-&gt;hash;</span>
<span class="lineNum"> 158 </span><span class="lineCov"> 643998 : unsigned block_size = state-&gt;block_size;</span>
<span class="lineNum"> 159 </span> : unsigned read_size;
<span class="lineNum"> 160 </span> : unsigned char buffer_hash[HASH_SIZE];
<span class="lineNum"> 161 </span> : const char* path;
<span class="lineNum"> 162 </span> :
<span class="lineNum"> 163 </span><span class="lineCov"> 644466 : if (rehash) {</span>
<span class="lineNum"> 164 </span><span class="lineCov"> 28985 : block = tommy_hashdyn_search(&amp;state-&gt;previmportset, import_block_prevhash_compare, hash, import_block_hash(hash));</span>
<span class="lineNum"> 163 </span><span class="lineCov"> 643998 : if (rehash) {</span>
<span class="lineNum"> 164 </span><span class="lineCov"> 28986 : block = tommy_hashdyn_search(&amp;state-&gt;previmportset, import_block_prevhash_compare, hash, import_block_hash(hash));</span>
<span class="lineNum"> 165 </span> : } else {
<span class="lineNum"> 166 </span><span class="lineCov"> 615481 : block = tommy_hashdyn_search(&amp;state-&gt;importset, import_block_hash_compare, hash, import_block_hash(hash));</span>
<span class="lineNum"> 166 </span><span class="lineCov"> 615012 : block = tommy_hashdyn_search(&amp;state-&gt;importset, import_block_hash_compare, hash, import_block_hash(hash));</span>
<span class="lineNum"> 167 </span> : }
<span class="lineNum"> 168 </span><span class="lineCov"> 644466 : if (!block)</span>
<span class="lineNum"> 169 </span><span class="lineCov"> 639994 : return -1;</span>
<span class="lineNum"> 168 </span><span class="lineCov"> 643998 : if (!block)</span>
<span class="lineNum"> 169 </span><span class="lineCov"> 639526 : return -1;</span>
<span class="lineNum"> 170 </span> :
<span class="lineNum"> 171 </span><span class="lineCov"> 4472 : path = block-&gt;file-&gt;path;</span>
<span class="lineNum"> 172 </span><span class="lineCov"> 4472 : read_size = block-&gt;size;</span>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">7341</td>
<td class="headerCovTableEntry">8031</td>
<td class="headerCovTableEntry">7344</td>
<td class="headerCovTableEntry">8033</td>
<td class="headerCovTableEntryHi">91.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">388</td>
@ -112,20 +112,20 @@
<tr>
<td class="coverFile"><a href="elem.c.gcov.html">elem.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="93.6%"><img src="../snow.png" width=6 height=10 alt="93.6%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="93.8%"><img src="../snow.png" width=6 height=10 alt="93.8%"></td></tr></table>
</td>
<td class="coverPerHi">93.6&nbsp;%</td>
<td class="coverNumHi">537 / 574</td>
<td class="coverPerHi">96.8&nbsp;%</td>
<td class="coverNumHi">61 / 63</td>
<td class="coverPerHi">93.8&nbsp;%</td>
<td class="coverNumHi">545 / 581</td>
<td class="coverPerHi">96.9&nbsp;%</td>
<td class="coverNumHi">62 / 64</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=92 height=10 alt="92.5%"><img src="../snow.png" width=8 height=10 alt="92.5%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="92.4%"><img src="../snow.png" width=8 height=10 alt="92.4%"></td></tr></table>
</td>
<td class="coverPerHi">92.5&nbsp;%</td>
<td class="coverNumHi">1249 / 1351</td>
<td class="coverPerHi">92.4&nbsp;%</td>
<td class="coverNumHi">1248 / 1351</td>
<td class="coverPerHi">97.2&nbsp;%</td>
<td class="coverNumHi">35 / 36</td>
</tr>
@ -382,10 +382,10 @@
<tr>
<td class="coverFile"><a href="scan.c.gcov.html">scan.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=87 height=10 alt="87.3%"><img src="../snow.png" width=13 height=10 alt="87.3%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=87 height=10 alt="87.4%"><img src="../snow.png" width=13 height=10 alt="87.4%"></td></tr></table>
</td>
<td class="coverPerMed">87.3&nbsp;%</td>
<td class="coverNumMed">543 / 622</td>
<td class="coverPerMed">87.4&nbsp;%</td>
<td class="coverNumMed">542 / 620</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">23 / 23</td>
</tr>
@ -402,12 +402,12 @@
<tr>
<td class="coverFile"><a href="elem.h.gcov.html">elem.h</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.2%"><img src="../snow.png" width=1 height=10 alt="99.2%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.1%"><img src="../snow.png" width=1 height=10 alt="99.1%"></td></tr></table>
</td>
<td class="coverPerHi">99.2&nbsp;%</td>
<td class="coverNumHi">118 / 119</td>
<td class="coverPerHi">99.1&nbsp;%</td>
<td class="coverNumHi">115 / 116</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">40 / 40</td>
<td class="coverNumHi">39 / 39</td>
</tr>
</table>
</center>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">7341</td>
<td class="headerCovTableEntry">8031</td>
<td class="headerCovTableEntry">7344</td>
<td class="headerCovTableEntry">8033</td>
<td class="headerCovTableEntryHi">91.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">388</td>
@ -132,10 +132,10 @@
<tr>
<td class="coverFile"><a href="scan.c.gcov.html">scan.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=87 height=10 alt="87.3%"><img src="../snow.png" width=13 height=10 alt="87.3%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=87 height=10 alt="87.4%"><img src="../snow.png" width=13 height=10 alt="87.4%"></td></tr></table>
</td>
<td class="coverPerMed">87.3&nbsp;%</td>
<td class="coverNumMed">543 / 622</td>
<td class="coverPerMed">87.4&nbsp;%</td>
<td class="coverNumMed">542 / 620</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">23 / 23</td>
</tr>
@ -172,10 +172,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="../emerald.png" width=92 height=10 alt="92.5%"><img src="../snow.png" width=8 height=10 alt="92.5%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="92.4%"><img src="../snow.png" width=8 height=10 alt="92.4%"></td></tr></table>
</td>
<td class="coverPerHi">92.5&nbsp;%</td>
<td class="coverNumHi">1249 / 1351</td>
<td class="coverPerHi">92.4&nbsp;%</td>
<td class="coverNumHi">1248 / 1351</td>
<td class="coverPerHi">97.2&nbsp;%</td>
<td class="coverNumHi">35 / 36</td>
</tr>
@ -232,12 +232,12 @@
<tr>
<td class="coverFile"><a href="elem.c.gcov.html">elem.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="93.6%"><img src="../snow.png" width=6 height=10 alt="93.6%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="93.8%"><img src="../snow.png" width=6 height=10 alt="93.8%"></td></tr></table>
</td>
<td class="coverPerHi">93.6&nbsp;%</td>
<td class="coverNumHi">537 / 574</td>
<td class="coverPerHi">96.8&nbsp;%</td>
<td class="coverNumHi">61 / 63</td>
<td class="coverPerHi">93.8&nbsp;%</td>
<td class="coverNumHi">545 / 581</td>
<td class="coverPerHi">96.9&nbsp;%</td>
<td class="coverNumHi">62 / 64</td>
</tr>
<tr>
<td class="coverFile"><a href="snapraid.c.gcov.html">snapraid.c</a></td>
@ -322,12 +322,12 @@
<tr>
<td class="coverFile"><a href="elem.h.gcov.html">elem.h</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.2%"><img src="../snow.png" width=1 height=10 alt="99.2%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.1%"><img src="../snow.png" width=1 height=10 alt="99.1%"></td></tr></table>
</td>
<td class="coverPerHi">99.2&nbsp;%</td>
<td class="coverNumHi">118 / 119</td>
<td class="coverPerHi">99.1&nbsp;%</td>
<td class="coverNumHi">115 / 116</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">40 / 40</td>
<td class="coverNumHi">39 / 39</td>
</tr>
<tr>
<td class="coverFile"><a href="speed.c.gcov.html">speed.c</a></td>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">7341</td>
<td class="headerCovTableEntry">8031</td>
<td class="headerCovTableEntry">7344</td>
<td class="headerCovTableEntry">8033</td>
<td class="headerCovTableEntryHi">91.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">388</td>
@ -112,22 +112,22 @@
<tr>
<td class="coverFile"><a href="elem.c.gcov.html">elem.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="93.6%"><img src="../snow.png" width=6 height=10 alt="93.6%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=94 height=10 alt="93.8%"><img src="../snow.png" width=6 height=10 alt="93.8%"></td></tr></table>
</td>
<td class="coverPerHi">93.6&nbsp;%</td>
<td class="coverNumHi">537 / 574</td>
<td class="coverPerHi">96.8&nbsp;%</td>
<td class="coverNumHi">61 / 63</td>
<td class="coverPerHi">93.8&nbsp;%</td>
<td class="coverNumHi">545 / 581</td>
<td class="coverPerHi">96.9&nbsp;%</td>
<td class="coverNumHi">62 / 64</td>
</tr>
<tr>
<td class="coverFile"><a href="elem.h.gcov.html">elem.h</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.2%"><img src="../snow.png" width=1 height=10 alt="99.2%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=99 height=10 alt="99.1%"><img src="../snow.png" width=1 height=10 alt="99.1%"></td></tr></table>
</td>
<td class="coverPerHi">99.2&nbsp;%</td>
<td class="coverNumHi">118 / 119</td>
<td class="coverPerHi">99.1&nbsp;%</td>
<td class="coverNumHi">115 / 116</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">40 / 40</td>
<td class="coverNumHi">39 / 39</td>
</tr>
<tr>
<td class="coverFile"><a href="handle.c.gcov.html">handle.c</a></td>
@ -242,10 +242,10 @@
<tr>
<td class="coverFile"><a href="scan.c.gcov.html">scan.c</a></td>
<td class="coverBar" align="center">
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=87 height=10 alt="87.3%"><img src="../snow.png" width=13 height=10 alt="87.3%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../amber.png" width=87 height=10 alt="87.4%"><img src="../snow.png" width=13 height=10 alt="87.4%"></td></tr></table>
</td>
<td class="coverPerMed">87.3&nbsp;%</td>
<td class="coverNumMed">543 / 622</td>
<td class="coverPerMed">87.4&nbsp;%</td>
<td class="coverNumMed">542 / 620</td>
<td class="coverPerHi">100.0&nbsp;%</td>
<td class="coverNumHi">23 / 23</td>
</tr>
@ -312,10 +312,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="../emerald.png" width=92 height=10 alt="92.5%"><img src="../snow.png" width=8 height=10 alt="92.5%"></td></tr></table>
<table border=0 cellspacing=0 cellpadding=1><tr><td class="coverBarOutline"><img src="../emerald.png" width=92 height=10 alt="92.4%"><img src="../snow.png" width=8 height=10 alt="92.4%"></td></tr></table>
</td>
<td class="coverPerHi">92.5&nbsp;%</td>
<td class="coverNumHi">1249 / 1351</td>
<td class="coverPerHi">92.4&nbsp;%</td>
<td class="coverNumHi">1248 / 1351</td>
<td class="coverPerHi">97.2&nbsp;%</td>
<td class="coverNumHi">35 / 36</td>
</tr>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@ -110,34 +110,34 @@
<span class="lineNum"> 48 </span><span class="lineCov"> 18 : tommy_list_sort(&amp;disk-&gt;filelist, file_path_compare);</span>
<span class="lineNum"> 49 </span> :
<span class="lineNum"> 50 </span> : /* for each file */
<span class="lineNum"> 51 </span><span class="lineCov"> 16996 : for (j = disk-&gt;filelist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 52 </span><span class="lineCov"> 16978 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 51 </span><span class="lineCov"> 16998 : for (j = disk-&gt;filelist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 52 </span><span class="lineCov"> 16980 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 53 </span> : #if HAVE_LOCALTIME_R
<span class="lineNum"> 54 </span> : struct tm tm_res;
<span class="lineNum"> 55 </span> : #endif
<span class="lineNum"> 56 </span> : struct tm* tm;
<span class="lineNum"> 57 </span> : time_t t;
<span class="lineNum"> 58 </span> :
<span class="lineNum"> 59 </span><span class="lineCov"> 16978 : ++file_count;</span>
<span class="lineNum"> 60 </span><span class="lineCov"> 16978 : file_size += file-&gt;size;</span>
<span class="lineNum"> 59 </span><span class="lineCov"> 16980 : ++file_count;</span>
<span class="lineNum"> 60 </span><span class="lineCov"> 16980 : file_size += file-&gt;size;</span>
<span class="lineNum"> 61 </span> :
<span class="lineNum"> 62 </span><span class="lineCov"> 16978 : log_tag(&quot;file:%s:%s:%&quot; PRIu64 &quot;:%&quot; PRIi64 &quot;:%u:%&quot; PRIi64 &quot;\n&quot;, disk-&gt;name, esc(file-&gt;sub), file-&gt;size, file-&gt;mtime_sec, file-&gt;mtime_nsec, file-&gt;inode);</span>
<span class="lineNum"> 62 </span><span class="lineCov"> 16980 : log_tag(&quot;file:%s:%s:%&quot; PRIu64 &quot;:%&quot; PRIi64 &quot;:%u:%&quot; PRIi64 &quot;\n&quot;, disk-&gt;name, esc(file-&gt;sub), file-&gt;size, file-&gt;mtime_sec, file-&gt;mtime_nsec, file-&gt;inode);</span>
<span class="lineNum"> 63 </span> :
<span class="lineNum"> 64 </span><span class="lineCov"> 16978 : t = file-&gt;mtime_sec;</span>
<span class="lineNum"> 64 </span><span class="lineCov"> 16980 : t = file-&gt;mtime_sec;</span>
<span class="lineNum"> 65 </span> : #if HAVE_LOCALTIME_R
<span class="lineNum"> 66 </span><span class="lineCov"> 16978 : tm = localtime_r(&amp;t, &amp;tm_res);</span>
<span class="lineNum"> 66 </span><span class="lineCov"> 16980 : tm = localtime_r(&amp;t, &amp;tm_res);</span>
<span class="lineNum"> 67 </span> : #else
<span class="lineNum"> 68 </span> : tm = localtime(&amp;t);
<span class="lineNum"> 69 </span> : #endif
<span class="lineNum"> 70 </span> :
<span class="lineNum"> 71 </span><span class="lineCov"> 16978 : printf(&quot;%12&quot; PRIu64 &quot; &quot;, file-&gt;size);</span>
<span class="lineNum"> 72 </span><span class="lineCov"> 16978 : if (tm) {</span>
<span class="lineNum"> 73 </span><span class="lineCov"> 16978 : printf(&quot;%04u/%02u/%02u %02u:%02u&quot;, tm-&gt;tm_year + 1900, tm-&gt;tm_mon + 1, tm-&gt;tm_mday, tm-&gt;tm_hour, tm-&gt;tm_min);</span>
<span class="lineNum"> 74 </span><span class="lineCov"> 16978 : if (msg_level &gt;= MSG_VERBOSE)</span>
<span class="lineNum"> 75 </span><span class="lineCov"> 16978 : printf(&quot;:%02u.%03u&quot;, tm-&gt;tm_sec, file-&gt;mtime_nsec / 1000000);</span>
<span class="lineNum"> 76 </span><span class="lineCov"> 16978 : printf(&quot; &quot;);</span>
<span class="lineNum"> 71 </span><span class="lineCov"> 16980 : printf(&quot;%12&quot; PRIu64 &quot; &quot;, file-&gt;size);</span>
<span class="lineNum"> 72 </span><span class="lineCov"> 16980 : if (tm) {</span>
<span class="lineNum"> 73 </span><span class="lineCov"> 16980 : printf(&quot;%04u/%02u/%02u %02u:%02u&quot;, tm-&gt;tm_year + 1900, tm-&gt;tm_mon + 1, tm-&gt;tm_mday, tm-&gt;tm_hour, tm-&gt;tm_min);</span>
<span class="lineNum"> 74 </span><span class="lineCov"> 16980 : if (msg_level &gt;= MSG_VERBOSE)</span>
<span class="lineNum"> 75 </span><span class="lineCov"> 16980 : printf(&quot;:%02u.%03u&quot;, tm-&gt;tm_sec, file-&gt;mtime_nsec / 1000000);</span>
<span class="lineNum"> 76 </span><span class="lineCov"> 16980 : printf(&quot; &quot;);</span>
<span class="lineNum"> 77 </span> : }
<span class="lineNum"> 78 </span><span class="lineCov"> 16978 : printf(&quot;%s%s\n&quot;, disk-&gt;dir, file-&gt;sub);</span>
<span class="lineNum"> 78 </span><span class="lineCov"> 16980 : printf(&quot;%s%s\n&quot;, disk-&gt;dir, file-&gt;sub);</span>
<span class="lineNum"> 79 </span> : }
<span class="lineNum"> 80 </span> :
<span class="lineNum"> 81 </span> : /* sort by name */

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
@ -61,23 +61,23 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#28">rnd</a></td>
<td class="coverFnHi">50983914</td>
<td class="coverFnHi">50988385</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#35">rndnz</a></td>
<td class="coverFnHi">50573376</td>
<td class="coverFnHi">50578180</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#84">file_cmp</a></td>
<td class="coverFnHi">146649</td>
<td class="coverFnHi">146608</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#43">rndnz_range</a></td>
<td class="coverFnHi">31157</td>
<td class="coverFnHi">31195</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#70">rnd_name</a></td>
<td class="coverFnHi">26855</td>
<td class="coverFnHi">26824</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#221">cmd_generate</a></td>
@ -93,19 +93,19 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#289">cmd_write</a></td>
<td class="coverFnHi">4738</td>
<td class="coverFnHi">4703</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#457">cmd_append</a></td>
<td class="coverFnHi">3179</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#508">cmd_truncate</a></td>
<td class="coverFnHi">3173</td>
<td class="coverFnHi">3252</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#562">cmd_delete</a></td>
<td class="coverFnHi">3172</td>
<td class="coverFnHi">3155</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#508">cmd_truncate</a></td>
<td class="coverFnHi">3151</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#360">cmd_damage</a></td>
@ -121,7 +121,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#198">cmd_generate_symlink</a></td>
<td class="coverFnHi">946</td>
<td class="coverFnHi">915</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#644">main</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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#457">cmd_append</a></td>
<td class="coverFnHi">3179</td>
<td class="coverFnHi">3252</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#576">cmd_change</a></td>
@ -73,7 +73,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#562">cmd_delete</a></td>
<td class="coverFnHi">3172</td>
<td class="coverFnHi">3155</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#221">cmd_generate</a></td>
@ -85,15 +85,15 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#198">cmd_generate_symlink</a></td>
<td class="coverFnHi">946</td>
<td class="coverFnHi">915</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#508">cmd_truncate</a></td>
<td class="coverFnHi">3173</td>
<td class="coverFnHi">3151</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#289">cmd_write</a></td>
<td class="coverFnHi">4738</td>
<td class="coverFnHi">4703</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#89">fallback</a></td>
@ -101,7 +101,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#84">file_cmp</a></td>
<td class="coverFnHi">146649</td>
<td class="coverFnHi">146608</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#632">help</a></td>
@ -113,15 +113,15 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#28">rnd</a></td>
<td class="coverFnHi">50983914</td>
<td class="coverFnHi">50988385</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#70">rnd_name</a></td>
<td class="coverFnHi">26855</td>
<td class="coverFnHi">26824</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#35">rndnz</a></td>
<td class="coverFnHi">50573376</td>
<td class="coverFnHi">50578180</td>
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#51">rndnz_damage</a></td>
@ -129,7 +129,7 @@
</tr>
<tr>
<td class="coverFn"><a href="mktest.c.gcov.html#43">rndnz_range</a></td>
<td class="coverFnHi">31157</td>
<td class="coverFnHi">31195</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">18</td>
@ -89,28 +89,28 @@
<span class="lineNum"> 27 </span> : */
<a name="28"><span class="lineNum"> 28 </span> : unsigned long long seed = 0;</a>
<span class="lineNum"> 29 </span> :
<span class="lineNum"> 30 </span><span class="lineCov"> 50983914 : unsigned rnd(unsigned max)</span>
<span class="lineNum"> 30 </span><span class="lineCov"> 50988385 : unsigned rnd(unsigned max)</span>
<span class="lineNum"> 31 </span> : {
<span class="lineNum"> 32 </span><span class="lineCov"> 50983914 : seed = seed * 6364136223846793005LL + 1442695040888963407LL;</span>
<span class="lineNum"> 32 </span><span class="lineCov"> 50988385 : seed = seed * 6364136223846793005LL + 1442695040888963407LL;</span>
<span class="lineNum"> 33 </span> :
<span class="lineNum"> 34 </span><span class="lineCov"> 50983914 : return (seed &gt;&gt; 32) % max;</span>
<span class="lineNum"> 34 </span><span class="lineCov"> 50988385 : return (seed &gt;&gt; 32) % max;</span>
<a name="35"><span class="lineNum"> 35 </span> : }</a>
<span class="lineNum"> 36 </span> :
<span class="lineNum"> 37 </span><span class="lineCov"> 50573376 : unsigned rndnz(unsigned max)</span>
<span class="lineNum"> 37 </span><span class="lineCov"> 50578180 : unsigned rndnz(unsigned max)</span>
<span class="lineNum"> 38 </span> : {
<span class="lineNum"> 39 </span><span class="lineCov"> 50573376 : if (max &lt;= 1)</span>
<span class="lineNum"> 39 </span><span class="lineCov"> 50578180 : if (max &lt;= 1)</span>
<span class="lineNum"> 40 </span><span class="lineCov"> 2831 : return 1;</span>
<span class="lineNum"> 41 </span> : else
<span class="lineNum"> 42 </span><span class="lineCov"> 50570545 : return rnd(max - 1) + 1;</span>
<span class="lineNum"> 42 </span><span class="lineCov"> 50575349 : return rnd(max - 1) + 1;</span>
<a name="43"><span class="lineNum"> 43 </span> : }</a>
<span class="lineNum"> 44 </span> :
<span class="lineNum"> 45 </span><span class="lineCov"> 31157 : void rndnz_range(unsigned char* data, int size)</span>
<span class="lineNum"> 45 </span><span class="lineCov"> 31195 : void rndnz_range(unsigned char* data, int size)</span>
<span class="lineNum"> 46 </span> : {
<span class="lineNum"> 47 </span> : int i;
<span class="lineNum"> 48 </span> :
<span class="lineNum"> 49 </span><span class="lineCov"> 50599273 : for (i = 0; i &lt; size; ++i)</span>
<span class="lineNum"> 50 </span><span class="lineCov"> 50568116 : data[i] = rndnz(256);</span>
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 31157 : }</span></a>
<span class="lineNum"> 49 </span><span class="lineCov"> 50604116 : for (i = 0; i &lt; size; ++i)</span>
<span class="lineNum"> 50 </span><span class="lineCov"> 50572921 : data[i] = rndnz(256);</span>
<a name="51"><span class="lineNum"> 51 </span><span class="lineCov"> 31195 : }</span></a>
<span class="lineNum"> 52 </span> :
<span class="lineNum"> 53 </span><span class="lineCov"> 1821 : void rndnz_damage(unsigned char* data, int size)</span>
<span class="lineNum"> 54 </span> : {
@ -121,8 +121,8 @@
<span class="lineNum"> 59 </span> : unsigned char c;
<span class="lineNum"> 60 </span> :
<span class="lineNum"> 61 </span> : do {
<span class="lineNum"> 62 </span><span class="lineCov"> 1829 : c = rndnz(256);</span>
<span class="lineNum"> 63 </span><span class="lineCov"> 1829 : } while (c == data[i]);</span>
<span class="lineNum"> 62 </span><span class="lineCov"> 1828 : c = rndnz(256);</span>
<span class="lineNum"> 63 </span><span class="lineCov"> 1828 : } while (c == data[i]);</span>
<span class="lineNum"> 64 </span> :
<span class="lineNum"> 65 </span><span class="lineCov"> 1821 : data[i] = c;</span>
<span class="lineNum"> 66 </span> : }
@ -131,23 +131,23 @@
<span class="lineNum"> 69 </span> : char CHARSET[] = &quot;qwertyuiopasdfghjklzxcvbnm1234567890 .-+&quot;;
<a name="70"><span class="lineNum"> 70 </span> : #define CHARSET_LEN (sizeof(CHARSET) - 1)</a>
<span class="lineNum"> 71 </span> :
<span class="lineNum"> 72 </span><span class="lineCov"> 26855 : void rnd_name(char* file)</span>
<span class="lineNum"> 72 </span><span class="lineCov"> 26824 : void rnd_name(char* file)</span>
<span class="lineNum"> 73 </span> : {
<span class="lineNum"> 74 </span><span class="lineCov"> 26855 : int l = 1 + rnd(20);</span>
<span class="lineNum"> 74 </span><span class="lineCov"> 26824 : int l = 1 + rnd(20);</span>
<span class="lineNum"> 75 </span> :
<span class="lineNum"> 76 </span><span class="lineCov"> 335689 : while (l) {</span>
<span class="lineNum"> 77 </span><span class="lineCov"> 281979 : *file++ = CHARSET[rnd(CHARSET_LEN)];</span>
<span class="lineNum"> 78 </span><span class="lineCov"> 281979 : --l;</span>
<span class="lineNum"> 76 </span><span class="lineCov"> 335360 : while (l) {</span>
<span class="lineNum"> 77 </span><span class="lineCov"> 281712 : *file++ = CHARSET[rnd(CHARSET_LEN)];</span>
<span class="lineNum"> 78 </span><span class="lineCov"> 281712 : --l;</span>
<span class="lineNum"> 79 </span> : }
<span class="lineNum"> 80 </span><span class="lineCov"> 26855 : *file = 0;</span>
<span class="lineNum"> 81 </span><span class="lineCov"> 26855 : }</span>
<span class="lineNum"> 80 </span><span class="lineCov"> 26824 : *file = 0;</span>
<span class="lineNum"> 81 </span><span class="lineCov"> 26824 : }</span>
<span class="lineNum"> 82 </span> :
<span class="lineNum"> 83 </span> : /****************************************************************************/
<a name="84"><span class="lineNum"> 84 </span> : /* file */</a>
<span class="lineNum"> 85 </span> :
<span class="lineNum"> 86 </span><span class="lineCov"> 146649 : int file_cmp(const void* a, const void* b)</span>
<span class="lineNum"> 86 </span><span class="lineCov"> 146608 : int file_cmp(const void* a, const void* b)</span>
<span class="lineNum"> 87 </span> : {
<span class="lineNum"> 88 </span><span class="lineCov"> 146649 : return strcmp(a, b);</span>
<span class="lineNum"> 88 </span><span class="lineCov"> 146608 : return strcmp(a, b);</span>
<a name="89"><span class="lineNum"> 89 </span> : }</a>
<span class="lineNum"> 90 </span> :
<span class="lineNum"> 91 </span><span class="lineCov"> 1821 : int fallback(int f, struct stat* st)</span>
@ -259,11 +259,11 @@
<span class="lineNum"> 197 </span> : * Create a symlink.
<a name="198"><span class="lineNum"> 198 </span> : * - If the file already exists, it's removed.</a>
<span class="lineNum"> 199 </span> : */
<span class="lineNum"> 200 </span><span class="lineCov"> 946 : void cmd_generate_symlink(const char* path, const char* linkto)</span>
<span class="lineNum"> 200 </span><span class="lineCov"> 915 : void cmd_generate_symlink(const char* path, const char* linkto)</span>
<span class="lineNum"> 201 </span> : {
<span class="lineNum"> 202 </span> : /* remove the existing file/symlink if any */
<span class="lineNum"> 203 </span><span class="lineCov"> 946 : if (remove(path) != 0) {</span>
<span class="lineNum"> 204 </span><span class="lineCov"> 925 : if (errno != ENOENT) {</span>
<span class="lineNum"> 203 </span><span class="lineCov"> 915 : if (remove(path) != 0) {</span>
<span class="lineNum"> 204 </span><span class="lineCov"> 894 : if (errno != ENOENT) {</span>
<span class="lineNum"> 205 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 206 </span> : log_fatal(&quot;Error removing file %s\n&quot;, path);
<span class="lineNum"> 207 </span> : exit(EXIT_FAILURE);
@ -271,13 +271,13 @@
<span class="lineNum"> 209 </span> : }
<span class="lineNum"> 210 </span> : }
<span class="lineNum"> 211 </span> :
<span class="lineNum"> 212 </span><span class="lineCov"> 946 : if (symlink(linkto, path) != 0) {</span>
<span class="lineNum"> 212 </span><span class="lineCov"> 915 : if (symlink(linkto, path) != 0) {</span>
<span class="lineNum"> 213 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 214 </span> : log_fatal(&quot;Error writing symlink %s\n&quot;, path);
<span class="lineNum"> 215 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 216 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 217 </span> : }
<span class="lineNum"> 218 </span><span class="lineCov"> 946 : }</span>
<span class="lineNum"> 218 </span><span class="lineCov"> 915 : }</span>
<span class="lineNum"> 219 </span> :
<span class="lineNum"> 220 </span> : /**
<a name="221"><span class="lineNum"> 221 </span> : * Create a file or a symlink with a random name.</a>
@ -350,68 +350,68 @@
<span class="lineNum"> 288 </span> : * - The written data may be equal or not at the already existing one.
<a name="289"><span class="lineNum"> 289 </span> : * - If it's a symlink nothing is done.</a>
<span class="lineNum"> 290 </span> : */
<span class="lineNum"> 291 </span><span class="lineCov"> 4738 : void cmd_write(const char* path, int size)</span>
<span class="lineNum"> 291 </span><span class="lineCov"> 4703 : void cmd_write(const char* path, int size)</span>
<span class="lineNum"> 292 </span> : {
<span class="lineNum"> 293 </span> : struct stat st;
<span class="lineNum"> 294 </span> :
<span class="lineNum"> 295 </span><span class="lineCov"> 4738 : if (lstat(path, &amp;st) != 0) {</span>
<span class="lineNum"> 295 </span><span class="lineCov"> 4703 : if (lstat(path, &amp;st) != 0) {</span>
<span class="lineNum"> 296 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 297 </span> : log_fatal(&quot;Error accessing %s\n&quot;, path);
<span class="lineNum"> 298 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 299 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 300 </span> : }
<span class="lineNum"> 301 </span> :
<span class="lineNum"> 302 </span><span class="lineCov"> 4738 : if (S_ISREG(st.st_mode)) {</span>
<span class="lineNum"> 302 </span><span class="lineCov"> 4703 : if (S_ISREG(st.st_mode)) {</span>
<span class="lineNum"> 303 </span> : unsigned char* data;
<span class="lineNum"> 304 </span> : off_t off;
<span class="lineNum"> 305 </span> : int f;
<span class="lineNum"> 306 </span> :
<span class="lineNum"> 307 </span> : /* not over the end */
<span class="lineNum"> 308 </span><span class="lineCov"> 4711 : if (size &gt; st.st_size)</span>
<span class="lineNum"> 309 </span><span class="lineCov"> 181 : size = st.st_size;</span>
<span class="lineNum"> 308 </span><span class="lineCov"> 4676 : if (size &gt; st.st_size)</span>
<span class="lineNum"> 309 </span><span class="lineCov"> 179 : size = st.st_size;</span>
<span class="lineNum"> 310 </span> :
<span class="lineNum"> 311 </span> : /* start at random position inside the file */
<span class="lineNum"> 312 </span><span class="lineCov"> 4711 : if (size &lt; st.st_size)</span>
<span class="lineNum"> 313 </span><span class="lineCov"> 4530 : off = rnd(st.st_size - size);</span>
<span class="lineNum"> 312 </span><span class="lineCov"> 4676 : if (size &lt; st.st_size)</span>
<span class="lineNum"> 313 </span><span class="lineCov"> 4496 : off = rnd(st.st_size - size);</span>
<span class="lineNum"> 314 </span> : else
<span class="lineNum"> 315 </span><span class="lineCov"> 181 : off = 0;</span>
<span class="lineNum"> 315 </span><span class="lineCov"> 180 : off = 0;</span>
<span class="lineNum"> 316 </span> :
<span class="lineNum"> 317 </span><span class="lineCov"> 4711 : data = malloc(size);</span>
<span class="lineNum"> 317 </span><span class="lineCov"> 4676 : data = malloc(size);</span>
<span class="lineNum"> 318 </span> :
<span class="lineNum"> 319 </span><span class="lineCov"> 4711 : rndnz_range(data, size);</span>
<span class="lineNum"> 319 </span><span class="lineCov"> 4676 : rndnz_range(data, size);</span>
<span class="lineNum"> 320 </span> :
<span class="lineNum"> 321 </span><span class="lineCov"> 4711 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span>
<span class="lineNum"> 322 </span><span class="lineCov"> 4711 : if (f &lt; 0) {</span>
<span class="lineNum"> 321 </span><span class="lineCov"> 4676 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span>
<span class="lineNum"> 322 </span><span class="lineCov"> 4676 : if (f &lt; 0) {</span>
<span class="lineNum"> 323 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 324 </span> : log_fatal(&quot;Error creating file %s\n&quot;, path);
<span class="lineNum"> 325 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 326 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 327 </span> : }
<span class="lineNum"> 328 </span> :
<span class="lineNum"> 329 </span><span class="lineCov"> 4711 : if (lseek(f, off, SEEK_SET) != off) {</span>
<span class="lineNum"> 329 </span><span class="lineCov"> 4676 : if (lseek(f, off, SEEK_SET) != off) {</span>
<span class="lineNum"> 330 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 331 </span> : log_fatal(&quot;Error seeking file %s\n&quot;, path);
<span class="lineNum"> 332 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 333 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 334 </span> : }
<span class="lineNum"> 335 </span> :
<span class="lineNum"> 336 </span><span class="lineCov"> 4711 : if (write(f, data, size) != size) {</span>
<span class="lineNum"> 336 </span><span class="lineCov"> 4676 : if (write(f, data, size) != size) {</span>
<span class="lineNum"> 337 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 338 </span> : log_fatal(&quot;Error writing file %s\n&quot;, path);
<span class="lineNum"> 339 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 340 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 341 </span> : }
<span class="lineNum"> 342 </span> :
<span class="lineNum"> 343 </span><span class="lineCov"> 4711 : if (close(f) != 0) {</span>
<span class="lineNum"> 343 </span><span class="lineCov"> 4676 : if (close(f) != 0) {</span>
<span class="lineNum"> 344 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 345 </span> : log_fatal(&quot;Error closing file %s\n&quot;, path);
<span class="lineNum"> 346 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 347 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 348 </span> : }
<span class="lineNum"> 349 </span> :
<span class="lineNum"> 350 </span><span class="lineCov"> 4711 : free(data);</span>
<span class="lineNum"> 350 </span><span class="lineCov"> 4676 : free(data);</span>
<span class="lineNum"> 351 </span> : }
<span class="lineNum"> 352 </span><span class="lineCov"> 4738 : }</span>
<span class="lineNum"> 352 </span><span class="lineCov"> 4703 : }</span>
<span class="lineNum"> 353 </span> :
<span class="lineNum"> 354 </span> : /**
<span class="lineNum"> 355 </span> : * Damage a file.
@ -518,50 +518,50 @@
<span class="lineNum"> 456 </span> : * - The file must exist.
<a name="457"><span class="lineNum"> 457 </span> : * - If it's a symlink nothing is done.</a>
<span class="lineNum"> 458 </span> : */
<span class="lineNum"> 459 </span><span class="lineCov"> 3179 : void cmd_append(const char* path, int size)</span>
<span class="lineNum"> 459 </span><span class="lineCov"> 3252 : void cmd_append(const char* path, int size)</span>
<span class="lineNum"> 460 </span> : {
<span class="lineNum"> 461 </span> : struct stat st;
<span class="lineNum"> 462 </span> :
<span class="lineNum"> 463 </span><span class="lineCov"> 3179 : if (lstat(path, &amp;st) != 0) {</span>
<span class="lineNum"> 463 </span><span class="lineCov"> 3252 : if (lstat(path, &amp;st) != 0) {</span>
<span class="lineNum"> 464 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 465 </span> : log_fatal(&quot;Error accessing %s\n&quot;, path);
<span class="lineNum"> 466 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 467 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 468 </span> : }
<span class="lineNum"> 469 </span> :
<span class="lineNum"> 470 </span><span class="lineCov"> 3179 : if (S_ISREG(st.st_mode)) {</span>
<span class="lineNum"> 470 </span><span class="lineCov"> 3252 : if (S_ISREG(st.st_mode)) {</span>
<span class="lineNum"> 471 </span> : unsigned char* data;
<span class="lineNum"> 472 </span> : int f;
<span class="lineNum"> 473 </span> :
<span class="lineNum"> 474 </span><span class="lineCov"> 3179 : data = malloc(size);</span>
<span class="lineNum"> 474 </span><span class="lineCov"> 3252 : data = malloc(size);</span>
<span class="lineNum"> 475 </span> :
<span class="lineNum"> 476 </span><span class="lineCov"> 3179 : rndnz_range(data, size);</span>
<span class="lineNum"> 476 </span><span class="lineCov"> 3252 : rndnz_range(data, size);</span>
<span class="lineNum"> 477 </span> :
<span class="lineNum"> 478 </span><span class="lineCov"> 3179 : f = open(path, O_WRONLY | O_APPEND | O_BINARY | O_NOFOLLOW);</span>
<span class="lineNum"> 479 </span><span class="lineCov"> 3179 : if (f &lt; 0) {</span>
<span class="lineNum"> 478 </span><span class="lineCov"> 3252 : f = open(path, O_WRONLY | O_APPEND | O_BINARY | O_NOFOLLOW);</span>
<span class="lineNum"> 479 </span><span class="lineCov"> 3252 : if (f &lt; 0) {</span>
<span class="lineNum"> 480 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 481 </span> : log_fatal(&quot;Error opening file %s\n&quot;, path);
<span class="lineNum"> 482 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 483 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 484 </span> : }
<span class="lineNum"> 485 </span> :
<span class="lineNum"> 486 </span><span class="lineCov"> 3179 : if (write(f, data, size) != size) {</span>
<span class="lineNum"> 486 </span><span class="lineCov"> 3252 : if (write(f, data, size) != size) {</span>
<span class="lineNum"> 487 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 488 </span> : log_fatal(&quot;Error writing file %s\n&quot;, path);
<span class="lineNum"> 489 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 490 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 491 </span> : }
<span class="lineNum"> 492 </span> :
<span class="lineNum"> 493 </span><span class="lineCov"> 3179 : if (close(f) != 0) {</span>
<span class="lineNum"> 493 </span><span class="lineCov"> 3252 : if (close(f) != 0) {</span>
<span class="lineNum"> 494 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 495 </span> : log_fatal(&quot;Error closing file %s\n&quot;, path);
<span class="lineNum"> 496 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 497 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 498 </span> : }
<span class="lineNum"> 499 </span> :
<span class="lineNum"> 500 </span><span class="lineCov"> 3179 : free(data);</span>
<span class="lineNum"> 500 </span><span class="lineCov"> 3252 : free(data);</span>
<span class="lineNum"> 501 </span> : }
<span class="lineNum"> 502 </span><span class="lineCov"> 3179 : }</span>
<span class="lineNum"> 502 </span><span class="lineCov"> 3252 : }</span>
<span class="lineNum"> 503 </span> :
<span class="lineNum"> 504 </span> : /**
<span class="lineNum"> 505 </span> : * Truncate a file.
@ -569,69 +569,69 @@
<span class="lineNum"> 507 </span> : * - The file is NEVER truncated to 0.
<a name="508"><span class="lineNum"> 508 </span> : * - If it's a symlink nothing is done.</a>
<span class="lineNum"> 509 </span> : */
<span class="lineNum"> 510 </span><span class="lineCov"> 3173 : void cmd_truncate(const char* path, int size)</span>
<span class="lineNum"> 510 </span><span class="lineCov"> 3151 : void cmd_truncate(const char* path, int size)</span>
<span class="lineNum"> 511 </span> : {
<span class="lineNum"> 512 </span> : struct stat st;
<span class="lineNum"> 513 </span> :
<span class="lineNum"> 514 </span><span class="lineCov"> 3173 : if (lstat(path, &amp;st) != 0) {</span>
<span class="lineNum"> 514 </span><span class="lineCov"> 3151 : if (lstat(path, &amp;st) != 0) {</span>
<span class="lineNum"> 515 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 516 </span> : log_fatal(&quot;Error accessing %s\n&quot;, path);
<span class="lineNum"> 517 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 518 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 519 </span> : }
<span class="lineNum"> 520 </span> :
<span class="lineNum"> 521 </span><span class="lineCov"> 3173 : if (S_ISREG(st.st_mode)) {</span>
<span class="lineNum"> 521 </span><span class="lineCov"> 3151 : if (S_ISREG(st.st_mode)) {</span>
<span class="lineNum"> 522 </span> : off_t off;
<span class="lineNum"> 523 </span> : int f;
<span class="lineNum"> 524 </span> :
<span class="lineNum"> 525 </span> : /* if file is empty, just rewrite it */
<span class="lineNum"> 526 </span><span class="lineCov"> 3173 : if (st.st_size == 0) {</span>
<span class="lineNum"> 527 </span><span class="lineCov"> 2 : size = 0;</span>
<span class="lineNum"> 526 </span><span class="lineCov"> 3151 : if (st.st_size == 0) {</span>
<span class="lineNum"> 527 </span><span class="lineCov"> 3 : size = 0;</span>
<span class="lineNum"> 528 </span> : } else {
<span class="lineNum"> 529 </span> : /* don't truncate files to 0 size to avoid ZERO file size protection */
<span class="lineNum"> 530 </span><span class="lineCov"> 3171 : if (size &gt;= st.st_size)</span>
<span class="lineNum"> 531 </span><span class="lineCov"> 171 : size = st.st_size - 1;</span>
<span class="lineNum"> 530 </span><span class="lineCov"> 3148 : if (size &gt;= st.st_size)</span>
<span class="lineNum"> 531 </span><span class="lineCov"> 193 : size = st.st_size - 1;</span>
<span class="lineNum"> 532 </span> : }
<span class="lineNum"> 533 </span> :
<span class="lineNum"> 534 </span><span class="lineCov"> 3173 : off = st.st_size - size;</span>
<span class="lineNum"> 534 </span><span class="lineCov"> 3151 : off = st.st_size - size;</span>
<span class="lineNum"> 535 </span> :
<span class="lineNum"> 536 </span><span class="lineCov"> 3173 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span>
<span class="lineNum"> 537 </span><span class="lineCov"> 3173 : if (f &lt; 0) {</span>
<span class="lineNum"> 536 </span><span class="lineCov"> 3151 : f = open(path, O_WRONLY | O_BINARY | O_NOFOLLOW);</span>
<span class="lineNum"> 537 </span><span class="lineCov"> 3151 : if (f &lt; 0) {</span>
<span class="lineNum"> 538 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 539 </span> : log_fatal(&quot;Error opening file %s\n&quot;, path);
<span class="lineNum"> 540 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 541 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 542 </span> : }
<span class="lineNum"> 543 </span> :
<span class="lineNum"> 544 </span><span class="lineCov"> 3173 : if (ftruncate(f, off) != 0) {</span>
<span class="lineNum"> 544 </span><span class="lineCov"> 3151 : if (ftruncate(f, off) != 0) {</span>
<span class="lineNum"> 545 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 546 </span> : log_fatal(&quot;Error truncating file %s\n&quot;, path);
<span class="lineNum"> 547 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 548 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 549 </span> : }
<span class="lineNum"> 550 </span> :
<span class="lineNum"> 551 </span><span class="lineCov"> 3173 : if (close(f) != 0) {</span>
<span class="lineNum"> 551 </span><span class="lineCov"> 3151 : if (close(f) != 0) {</span>
<span class="lineNum"> 552 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 553 </span> : log_fatal(&quot;Error closing file %s\n&quot;, path);
<span class="lineNum"> 554 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 555 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 556 </span> : }
<span class="lineNum"> 557 </span> : }
<span class="lineNum"> 558 </span><span class="lineCov"> 3173 : }</span>
<span class="lineNum"> 558 </span><span class="lineCov"> 3151 : }</span>
<span class="lineNum"> 559 </span> :
<span class="lineNum"> 560 </span> : /**
<span class="lineNum"> 561 </span> : * Delete a file.
<a name="562"><span class="lineNum"> 562 </span> : * - The file must exist.</a>
<span class="lineNum"> 563 </span> : */
<span class="lineNum"> 564 </span><span class="lineCov"> 3172 : void cmd_delete(const char* path)</span>
<span class="lineNum"> 564 </span><span class="lineCov"> 3155 : void cmd_delete(const char* path)</span>
<span class="lineNum"> 565 </span> : {
<span class="lineNum"> 566 </span><span class="lineCov"> 3172 : if (remove(path) != 0) {</span>
<span class="lineNum"> 566 </span><span class="lineCov"> 3155 : if (remove(path) != 0) {</span>
<span class="lineNum"> 567 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 568 </span> : log_fatal(&quot;Error removing %s\n&quot;, path);
<span class="lineNum"> 569 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 570 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 571 </span> : }
<span class="lineNum"> 572 </span><span class="lineCov"> 3172 : }</span>
<span class="lineNum"> 572 </span><span class="lineCov"> 3155 : }</span>
<span class="lineNum"> 573 </span> :
<span class="lineNum"> 574 </span> : /**
<span class="lineNum"> 575 </span> : * Change a file. Or deleted/truncated/append/created.
@ -642,20 +642,20 @@
<span class="lineNum"> 580 </span> : struct stat st;
<span class="lineNum"> 581 </span> :
<span class="lineNum"> 582 </span><span class="lineCov"> 13128 : if (!size)</span>
<span class="lineNum"> 583 </span><span class="lineCov"> 13151 : return;</span>
<span class="lineNum"> 583 </span><span class="lineCov"> 13152 : return;</span>
<span class="lineNum"> 584 </span> :
<span class="lineNum"> 585 </span><span class="lineCov"> 13105 : if (lstat(path, &amp;st) != 0) {</span>
<span class="lineNum"> 585 </span><span class="lineCov"> 13104 : if (lstat(path, &amp;st) != 0) {</span>
<span class="lineNum"> 586 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 587 </span> : log_fatal(&quot;Error accessing %s\n&quot;, path);
<span class="lineNum"> 588 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 589 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 590 </span> : }
<span class="lineNum"> 591 </span> :
<span class="lineNum"> 592 </span><span class="lineCov"> 13105 : if (S_ISLNK(st.st_mode)) {</span>
<span class="lineNum"> 592 </span><span class="lineCov"> 13104 : if (S_ISLNK(st.st_mode)) {</span>
<span class="lineNum"> 593 </span> : /* symlink */
<span class="lineNum"> 594 </span><span class="lineCov"> 392 : if (rnd(2) == 0) {</span>
<span class="lineNum"> 595 </span> : /* delete */
<span class="lineNum"> 596 </span><span class="lineCov"> 179 : if (remove(path) != 0) {</span>
<span class="lineNum"> 596 </span><span class="lineCov"> 210 : if (remove(path) != 0) {</span>
<span class="lineNum"> 597 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 598 </span> : log_fatal(&quot;Error removing %s\n&quot;, path);
<span class="lineNum"> 599 </span> : exit(EXIT_FAILURE);
@ -665,30 +665,30 @@
<span class="lineNum"> 603 </span> : /* recreate */
<span class="lineNum"> 604 </span> : char linkto[PATH_MAX];
<span class="lineNum"> 605 </span> :
<span class="lineNum"> 606 </span><span class="lineCov"> 213 : if (remove(path) != 0) {</span>
<span class="lineNum"> 606 </span><span class="lineCov"> 182 : if (remove(path) != 0) {</span>
<span class="lineNum"> 607 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 608 </span> : log_fatal(&quot;Error removing %s\n&quot;, path);
<span class="lineNum"> 609 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 610 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 611 </span> : }
<span class="lineNum"> 612 </span> :
<span class="lineNum"> 613 </span><span class="lineCov"> 213 : rnd_name(linkto);</span>
<span class="lineNum"> 613 </span><span class="lineCov"> 182 : rnd_name(linkto);</span>
<span class="lineNum"> 614 </span> :
<span class="lineNum"> 615 </span><span class="lineCov"> 213 : cmd_generate_symlink(path, linkto);</span>
<span class="lineNum"> 615 </span><span class="lineCov"> 182 : cmd_generate_symlink(path, linkto);</span>
<span class="lineNum"> 616 </span> : }
<span class="lineNum"> 617 </span><span class="lineCov"> 12713 : } else if (S_ISREG(st.st_mode)) {</span>
<span class="lineNum"> 617 </span><span class="lineCov"> 12712 : } else if (S_ISREG(st.st_mode)) {</span>
<span class="lineNum"> 618 </span> : int r;
<span class="lineNum"> 619 </span> :
<span class="lineNum"> 620 </span><span class="lineCov"> 12713 : r = rnd(4);</span>
<span class="lineNum"> 620 </span><span class="lineCov"> 12712 : r = rnd(4);</span>
<span class="lineNum"> 621 </span> :
<span class="lineNum"> 622 </span><span class="lineCov"> 12713 : if (r == 0) {</span>
<span class="lineNum"> 623 </span><span class="lineCov"> 3189 : cmd_write(path, size);</span>
<span class="lineNum"> 624 </span><span class="lineCov"> 9524 : } else if (r == 1) {</span>
<span class="lineNum"> 625 </span><span class="lineCov"> 3179 : cmd_append(path, size);</span>
<span class="lineNum"> 626 </span><span class="lineCov"> 6345 : } else if (r == 2) {</span>
<span class="lineNum"> 627 </span><span class="lineCov"> 3173 : cmd_truncate(path, size);</span>
<span class="lineNum"> 622 </span><span class="lineCov"> 12712 : if (r == 0) {</span>
<span class="lineNum"> 623 </span><span class="lineCov"> 3154 : cmd_write(path, size);</span>
<span class="lineNum"> 624 </span><span class="lineCov"> 9558 : } else if (r == 1) {</span>
<span class="lineNum"> 625 </span><span class="lineCov"> 3252 : cmd_append(path, size);</span>
<span class="lineNum"> 626 </span><span class="lineCov"> 6306 : } else if (r == 2) {</span>
<span class="lineNum"> 627 </span><span class="lineCov"> 3151 : cmd_truncate(path, size);</span>
<span class="lineNum"> 628 </span> : } else {
<span class="lineNum"> 629 </span><span class="lineCov"> 3172 : cmd_delete(path);</span>
<span class="lineNum"> 629 </span><span class="lineCov"> 3155 : cmd_delete(path);</span>
<span class="lineNum"> 630 </span> : }
<span class="lineNum"> 631 </span> : }
<a name="632"><span class="lineNum"> 632 </span> : }</a>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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#30">fmix32</a></td>
<td class="coverFnHi">9010320</td>
<td class="coverFnHi">9010328</td>
</tr>
<tr>
<td class="coverFn"><a href="murmur3.c.gcov.html#76">MurmurHash3_x86_128</a></td>
<td class="coverFnHi">2252580</td>
<td class="coverFnHi">2252582</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2252580</td>
<td class="coverFnHi">2252582</td>
</tr>
<tr>
<td class="coverFn"><a href="murmur3.c.gcov.html#30">fmix32</a></td>
<td class="coverFnHi">9010320</td>
<td class="coverFnHi">9010328</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -91,14 +91,14 @@
<span class="lineNum"> 29 </span> : // domain. The author hereby disclaims copyright to this source code.
<a name="30"><span class="lineNum"> 30 </span> : </a>
<span class="lineNum"> 31 </span> : /* Finalization mix - force all bits of a hash block to avalanche */
<span class="lineNum"> 32 </span><span class="lineCov"> 9010320 : static inline uint32_t fmix32(uint32_t h)</span>
<span class="lineNum"> 32 </span><span class="lineCov"> 9010328 : static inline uint32_t fmix32(uint32_t h)</span>
<span class="lineNum"> 33 </span> : {
<span class="lineNum"> 34 </span><span class="lineCov"> 9010320 : h ^= h &gt;&gt; 16;</span>
<span class="lineNum"> 35 </span><span class="lineCov"> 9010320 : h *= 0x85ebca6b;</span>
<span class="lineNum"> 36 </span><span class="lineCov"> 9010320 : h ^= h &gt;&gt; 13;</span>
<span class="lineNum"> 37 </span><span class="lineCov"> 9010320 : h *= 0xc2b2ae35;</span>
<span class="lineNum"> 38 </span><span class="lineCov"> 9010320 : h ^= h &gt;&gt; 16;</span>
<span class="lineNum"> 39 </span><span class="lineCov"> 9010320 : return h;</span>
<span class="lineNum"> 34 </span><span class="lineCov"> 9010328 : h ^= h &gt;&gt; 16;</span>
<span class="lineNum"> 35 </span><span class="lineCov"> 9010328 : h *= 0x85ebca6b;</span>
<span class="lineNum"> 36 </span><span class="lineCov"> 9010328 : h ^= h &gt;&gt; 13;</span>
<span class="lineNum"> 37 </span><span class="lineCov"> 9010328 : h *= 0xc2b2ae35;</span>
<span class="lineNum"> 38 </span><span class="lineCov"> 9010328 : h ^= h &gt;&gt; 16;</span>
<span class="lineNum"> 39 </span><span class="lineCov"> 9010328 : return h;</span>
<span class="lineNum"> 40 </span> : }
<span class="lineNum"> 41 </span> :
<span class="lineNum"> 42 </span> : /*
@ -137,17 +137,17 @@
<span class="lineNum"> 75 </span> : uint32_t c3 = 0x38b34ae5;
<a name="76"><span class="lineNum"> 76 </span> : uint32_t c4 = 0xa1e38b93;</a>
<span class="lineNum"> 77 </span> :
<span class="lineNum"> 78 </span><span class="lineCov"> 2252580 : void MurmurHash3_x86_128(const void* data, size_t size, const uint8_t* seed, void* digest)</span>
<span class="lineNum"> 78 </span><span class="lineCov"> 2252582 : void MurmurHash3_x86_128(const void* data, size_t size, const uint8_t* seed, void* digest)</span>
<span class="lineNum"> 79 </span> : {
<span class="lineNum"> 80 </span> : size_t nblocks;
<span class="lineNum"> 81 </span> : const uint32_t* blocks;
<span class="lineNum"> 82 </span> : const uint32_t* end;
<span class="lineNum"> 83 </span> : size_t size_remainder;
<span class="lineNum"> 84 </span> :
<span class="lineNum"> 85 </span><span class="lineCov"> 2252580 : uint32_t h1 = ((const uint32_t*)seed)[0];</span>
<span class="lineNum"> 86 </span><span class="lineCov"> 2252580 : uint32_t h2 = ((const uint32_t*)seed)[1];</span>
<span class="lineNum"> 87 </span><span class="lineCov"> 2252580 : uint32_t h3 = ((const uint32_t*)seed)[2];</span>
<span class="lineNum"> 88 </span><span class="lineCov"> 2252580 : uint32_t h4 = ((const uint32_t*)seed)[3];</span>
<span class="lineNum"> 85 </span><span class="lineCov"> 2252582 : uint32_t h1 = ((const uint32_t*)seed)[0];</span>
<span class="lineNum"> 86 </span><span class="lineCov"> 2252582 : uint32_t h2 = ((const uint32_t*)seed)[1];</span>
<span class="lineNum"> 87 </span><span class="lineCov"> 2252582 : uint32_t h3 = ((const uint32_t*)seed)[2];</span>
<span class="lineNum"> 88 </span><span class="lineCov"> 2252582 : uint32_t h4 = ((const uint32_t*)seed)[3];</span>
<span class="lineNum"> 89 </span> :
<span class="lineNum"> 90 </span> : #if WORDS_BIGENDIAN
<span class="lineNum"> 91 </span> : h1 = util_swap32(h1);
@ -156,16 +156,16 @@
<span class="lineNum"> 94 </span> : h4 = util_swap32(h4);
<span class="lineNum"> 95 </span> : #endif
<span class="lineNum"> 96 </span> :
<span class="lineNum"> 97 </span><span class="lineCov"> 2252580 : nblocks = size / 16;</span>
<span class="lineNum"> 98 </span><span class="lineCov"> 2252580 : blocks = data;</span>
<span class="lineNum"> 99 </span><span class="lineCov"> 2252580 : end = blocks + nblocks * 4;</span>
<span class="lineNum"> 97 </span><span class="lineCov"> 2252582 : nblocks = size / 16;</span>
<span class="lineNum"> 98 </span><span class="lineCov"> 2252582 : blocks = data;</span>
<span class="lineNum"> 99 </span><span class="lineCov"> 2252582 : end = blocks + nblocks * 4;</span>
<span class="lineNum"> 100 </span> :
<span class="lineNum"> 101 </span> : /* body */
<span class="lineNum"> 102 </span><span class="lineCov"> 119858362 : while (blocks &lt; end) {</span>
<span class="lineNum"> 103 </span><span class="lineCov"> 115353202 : uint32_t k1 = blocks[0];</span>
<span class="lineNum"> 104 </span><span class="lineCov"> 115353202 : uint32_t k2 = blocks[1];</span>
<span class="lineNum"> 105 </span><span class="lineCov"> 115353202 : uint32_t k3 = blocks[2];</span>
<span class="lineNum"> 106 </span><span class="lineCov"> 115353202 : uint32_t k4 = blocks[3];</span>
<span class="lineNum"> 102 </span><span class="lineCov"> 119857435 : while (blocks &lt; end) {</span>
<span class="lineNum"> 103 </span><span class="lineCov"> 115352271 : uint32_t k1 = blocks[0];</span>
<span class="lineNum"> 104 </span><span class="lineCov"> 115352271 : uint32_t k2 = blocks[1];</span>
<span class="lineNum"> 105 </span><span class="lineCov"> 115352271 : uint32_t k3 = blocks[2];</span>
<span class="lineNum"> 106 </span><span class="lineCov"> 115352271 : uint32_t k4 = blocks[3];</span>
<span class="lineNum"> 107 </span> :
<span class="lineNum"> 108 </span> : #if WORDS_BIGENDIAN
<span class="lineNum"> 109 </span> : k1 = util_swap32(k1);
@ -174,71 +174,71 @@
<span class="lineNum"> 112 </span> : k4 = util_swap32(k4);
<span class="lineNum"> 113 </span> : #endif
<span class="lineNum"> 114 </span> :
<span class="lineNum"> 115 </span><span class="lineCov"> 115353202 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span>
<span class="lineNum"> 115 </span><span class="lineCov"> 115352271 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span>
<span class="lineNum"> 116 </span> :
<span class="lineNum"> 117 </span><span class="lineCov"> 115353202 : h1 = util_rotl32(h1, 19); h1 += h2; h1 = h1 * 5 + 0x561ccd1b;</span>
<span class="lineNum"> 117 </span><span class="lineCov"> 115352271 : h1 = util_rotl32(h1, 19); h1 += h2; h1 = h1 * 5 + 0x561ccd1b;</span>
<span class="lineNum"> 118 </span> :
<span class="lineNum"> 119 </span><span class="lineCov"> 115353202 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span>
<span class="lineNum"> 119 </span><span class="lineCov"> 115352271 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span>
<span class="lineNum"> 120 </span> :
<span class="lineNum"> 121 </span><span class="lineCov"> 115353202 : h2 = util_rotl32(h2, 17); h2 += h3; h2 = h2 * 5 + 0x0bcaa747;</span>
<span class="lineNum"> 121 </span><span class="lineCov"> 115352271 : h2 = util_rotl32(h2, 17); h2 += h3; h2 = h2 * 5 + 0x0bcaa747;</span>
<span class="lineNum"> 122 </span> :
<span class="lineNum"> 123 </span><span class="lineCov"> 115353202 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span>
<span class="lineNum"> 123 </span><span class="lineCov"> 115352271 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span>
<span class="lineNum"> 124 </span> :
<span class="lineNum"> 125 </span><span class="lineCov"> 115353202 : h3 = util_rotl32(h3, 15); h3 += h4; h3 = h3 * 5 + 0x96cd1c35;</span>
<span class="lineNum"> 125 </span><span class="lineCov"> 115352271 : h3 = util_rotl32(h3, 15); h3 += h4; h3 = h3 * 5 + 0x96cd1c35;</span>
<span class="lineNum"> 126 </span> :
<span class="lineNum"> 127 </span><span class="lineCov"> 115353202 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span>
<span class="lineNum"> 127 </span><span class="lineCov"> 115352271 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span>
<span class="lineNum"> 128 </span> :
<span class="lineNum"> 129 </span><span class="lineCov"> 115353202 : h4 = util_rotl32(h4, 13); h4 += h1; h4 = h4 * 5 + 0x32ac3b17;</span>
<span class="lineNum"> 129 </span><span class="lineCov"> 115352271 : h4 = util_rotl32(h4, 13); h4 += h1; h4 = h4 * 5 + 0x32ac3b17;</span>
<span class="lineNum"> 130 </span> :
<span class="lineNum"> 131 </span><span class="lineCov"> 115353202 : blocks += 4;</span>
<span class="lineNum"> 131 </span><span class="lineCov"> 115352271 : blocks += 4;</span>
<span class="lineNum"> 132 </span> : }
<span class="lineNum"> 133 </span> :
<span class="lineNum"> 134 </span> : /* tail */
<span class="lineNum"> 135 </span><span class="lineCov"> 2252580 : size_remainder = size &amp; 15;</span>
<span class="lineNum"> 136 </span><span class="lineCov"> 2252580 : if (size_remainder != 0) {</span>
<span class="lineNum"> 137 </span><span class="lineCov"> 848217 : const uint8_t* tail = (const uint8_t*)blocks;</span>
<span class="lineNum"> 135 </span><span class="lineCov"> 2252582 : size_remainder = size &amp; 15;</span>
<span class="lineNum"> 136 </span><span class="lineCov"> 2252582 : if (size_remainder != 0) {</span>
<span class="lineNum"> 137 </span><span class="lineCov"> 848153 : const uint8_t* tail = (const uint8_t*)blocks;</span>
<span class="lineNum"> 138 </span> :
<span class="lineNum"> 139 </span><span class="lineCov"> 848217 : uint32_t k1 = 0;</span>
<span class="lineNum"> 140 </span><span class="lineCov"> 848217 : uint32_t k2 = 0;</span>
<span class="lineNum"> 141 </span><span class="lineCov"> 848217 : uint32_t k3 = 0;</span>
<span class="lineNum"> 142 </span><span class="lineCov"> 848217 : uint32_t k4 = 0;</span>
<span class="lineNum"> 139 </span><span class="lineCov"> 848153 : uint32_t k1 = 0;</span>
<span class="lineNum"> 140 </span><span class="lineCov"> 848153 : uint32_t k2 = 0;</span>
<span class="lineNum"> 141 </span><span class="lineCov"> 848153 : uint32_t k3 = 0;</span>
<span class="lineNum"> 142 </span><span class="lineCov"> 848153 : uint32_t k4 = 0;</span>
<span class="lineNum"> 143 </span> :
<span class="lineNum"> 144 </span><span class="lineCov"> 848217 : switch (size_remainder) {</span>
<span class="lineNum"> 145 </span><span class="lineCov"> 55797 : case 15 : k4 ^= tail[14] &lt;&lt; 16;</span>
<span class="lineNum"> 146 </span><span class="lineCov"> 112943 : case 14 : k4 ^= tail[13] &lt;&lt; 8;</span>
<span class="lineNum"> 147 </span><span class="lineCov"> 170169 : case 13 : k4 ^= tail[12] &lt;&lt; 0;</span>
<span class="lineNum"> 148 </span><span class="lineCov"> 170169 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span>
<span class="lineNum"> 149 </span><span class="lineCov"> 227575 : case 12 : k3 ^= tail[11] &lt;&lt; 24;</span>
<span class="lineNum"> 150 </span><span class="lineCov"> 284886 : case 11 : k3 ^= tail[10] &lt;&lt; 16;</span>
<span class="lineNum"> 151 </span><span class="lineCov"> 341909 : case 10 : k3 ^= tail[ 9] &lt;&lt; 8;</span>
<span class="lineNum"> 152 </span><span class="lineCov"> 400365 : case 9 : k3 ^= tail[ 8] &lt;&lt; 0;</span>
<span class="lineNum"> 153 </span><span class="lineCov"> 400365 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span>
<span class="lineNum"> 154 </span><span class="lineCov"> 458648 : case 8 : k2 ^= tail[ 7] &lt;&lt; 24;</span>
<span class="lineNum"> 155 </span><span class="lineCov"> 512723 : case 7 : k2 ^= tail[ 6] &lt;&lt; 16;</span>
<span class="lineNum"> 156 </span><span class="lineCov"> 569585 : case 6 : k2 ^= tail[ 5] &lt;&lt; 8;</span>
<span class="lineNum"> 157 </span><span class="lineCov"> 624551 : case 5 : k2 ^= tail[ 4] &lt;&lt; 0;</span>
<span class="lineNum"> 158 </span><span class="lineCov"> 624551 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span>
<span class="lineNum"> 159 </span><span class="lineCov"> 680593 : case 4 : k1 ^= tail[ 3] &lt;&lt; 24;</span>
<span class="lineNum"> 160 </span><span class="lineCov"> 735635 : case 3 : k1 ^= tail[ 2] &lt;&lt; 16;</span>
<span class="lineNum"> 161 </span><span class="lineCov"> 791529 : case 2 : k1 ^= tail[ 1] &lt;&lt; 8;</span>
<span class="lineNum"> 162 </span><span class="lineCov"> 848217 : case 1 : k1 ^= tail[ 0] &lt;&lt; 0;</span>
<span class="lineNum"> 163 </span><span class="lineCov"> 848217 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span>
<span class="lineNum"> 144 </span><span class="lineCov"> 848153 : switch (size_remainder) {</span>
<span class="lineNum"> 145 </span><span class="lineCov"> 55834 : case 15 : k4 ^= tail[14] &lt;&lt; 16;</span>
<span class="lineNum"> 146 </span><span class="lineCov"> 112972 : case 14 : k4 ^= tail[13] &lt;&lt; 8;</span>
<span class="lineNum"> 147 </span><span class="lineCov"> 170132 : case 13 : k4 ^= tail[12] &lt;&lt; 0;</span>
<span class="lineNum"> 148 </span><span class="lineCov"> 170132 : k4 *= c4; k4 = util_rotl32(k4, 18); k4 *= c1; h4 ^= k4;</span>
<span class="lineNum"> 149 </span><span class="lineCov"> 227529 : case 12 : k3 ^= tail[11] &lt;&lt; 24;</span>
<span class="lineNum"> 150 </span><span class="lineCov"> 284808 : case 11 : k3 ^= tail[10] &lt;&lt; 16;</span>
<span class="lineNum"> 151 </span><span class="lineCov"> 341803 : case 10 : k3 ^= tail[ 9] &lt;&lt; 8;</span>
<span class="lineNum"> 152 </span><span class="lineCov"> 400242 : case 9 : k3 ^= tail[ 8] &lt;&lt; 0;</span>
<span class="lineNum"> 153 </span><span class="lineCov"> 400242 : k3 *= c3; k3 = util_rotl32(k3, 17); k3 *= c4; h3 ^= k3;</span>
<span class="lineNum"> 154 </span><span class="lineCov"> 458531 : case 8 : k2 ^= tail[ 7] &lt;&lt; 24;</span>
<span class="lineNum"> 155 </span><span class="lineCov"> 512645 : case 7 : k2 ^= tail[ 6] &lt;&lt; 16;</span>
<span class="lineNum"> 156 </span><span class="lineCov"> 569544 : case 6 : k2 ^= tail[ 5] &lt;&lt; 8;</span>
<span class="lineNum"> 157 </span><span class="lineCov"> 624516 : case 5 : k2 ^= tail[ 4] &lt;&lt; 0;</span>
<span class="lineNum"> 158 </span><span class="lineCov"> 624516 : k2 *= c2; k2 = util_rotl32(k2, 16); k2 *= c3; h2 ^= k2;</span>
<span class="lineNum"> 159 </span><span class="lineCov"> 680502 : case 4 : k1 ^= tail[ 3] &lt;&lt; 24;</span>
<span class="lineNum"> 160 </span><span class="lineCov"> 735518 : case 3 : k1 ^= tail[ 2] &lt;&lt; 16;</span>
<span class="lineNum"> 161 </span><span class="lineCov"> 791435 : case 2 : k1 ^= tail[ 1] &lt;&lt; 8;</span>
<span class="lineNum"> 162 </span><span class="lineCov"> 848153 : case 1 : k1 ^= tail[ 0] &lt;&lt; 0;</span>
<span class="lineNum"> 163 </span><span class="lineCov"> 848153 : k1 *= c1; k1 = util_rotl32(k1, 15); k1 *= c2; h1 ^= k1;</span>
<span class="lineNum"> 164 </span> : }
<span class="lineNum"> 165 </span> : }
<span class="lineNum"> 166 </span> :
<span class="lineNum"> 167 </span> : /* finalization */
<span class="lineNum"> 168 </span><span class="lineCov"> 2252580 : h1 ^= size; h2 ^= size; h3 ^= size; h4 ^= size;</span>
<span class="lineNum"> 168 </span><span class="lineCov"> 2252582 : h1 ^= size; h2 ^= size; h3 ^= size; h4 ^= size;</span>
<span class="lineNum"> 169 </span> :
<span class="lineNum"> 170 </span><span class="lineCov"> 2252580 : h1 += h2; h1 += h3; h1 += h4;</span>
<span class="lineNum"> 171 </span><span class="lineCov"> 2252580 : h2 += h1; h3 += h1; h4 += h1;</span>
<span class="lineNum"> 170 </span><span class="lineCov"> 2252582 : h1 += h2; h1 += h3; h1 += h4;</span>
<span class="lineNum"> 171 </span><span class="lineCov"> 2252582 : h2 += h1; h3 += h1; h4 += h1;</span>
<span class="lineNum"> 172 </span> :
<span class="lineNum"> 173 </span><span class="lineCov"> 2252580 : h1 = fmix32(h1);</span>
<span class="lineNum"> 174 </span><span class="lineCov"> 2252580 : h2 = fmix32(h2);</span>
<span class="lineNum"> 175 </span><span class="lineCov"> 2252580 : h3 = fmix32(h3);</span>
<span class="lineNum"> 176 </span><span class="lineCov"> 2252580 : h4 = fmix32(h4);</span>
<span class="lineNum"> 173 </span><span class="lineCov"> 2252582 : h1 = fmix32(h1);</span>
<span class="lineNum"> 174 </span><span class="lineCov"> 2252582 : h2 = fmix32(h2);</span>
<span class="lineNum"> 175 </span><span class="lineCov"> 2252582 : h3 = fmix32(h3);</span>
<span class="lineNum"> 176 </span><span class="lineCov"> 2252582 : h4 = fmix32(h4);</span>
<span class="lineNum"> 177 </span> :
<span class="lineNum"> 178 </span><span class="lineCov"> 2252580 : h1 += h2; h1 += h3; h1 += h4;</span>
<span class="lineNum"> 179 </span><span class="lineCov"> 2252580 : h2 += h1; h3 += h1; h4 += h1;</span>
<span class="lineNum"> 178 </span><span class="lineCov"> 2252582 : h1 += h2; h1 += h3; h1 += h4;</span>
<span class="lineNum"> 179 </span><span class="lineCov"> 2252582 : h2 += h1; h3 += h1; h4 += h1;</span>
<span class="lineNum"> 180 </span> :
<span class="lineNum"> 181 </span> : #if WORDS_BIGENDIAN
<span class="lineNum"> 182 </span> : h1 = util_swap32(h1);
@ -247,11 +247,11 @@
<span class="lineNum"> 185 </span> : h4 = util_swap32(h4);
<span class="lineNum"> 186 </span> : #endif
<span class="lineNum"> 187 </span> :
<span class="lineNum"> 188 </span><span class="lineCov"> 2252580 : ((uint32_t*)digest)[0] = h1;</span>
<span class="lineNum"> 189 </span><span class="lineCov"> 2252580 : ((uint32_t*)digest)[1] = h2;</span>
<span class="lineNum"> 190 </span><span class="lineCov"> 2252580 : ((uint32_t*)digest)[2] = h3;</span>
<span class="lineNum"> 191 </span><span class="lineCov"> 2252580 : ((uint32_t*)digest)[3] = h4;</span>
<span class="lineNum"> 192 </span><span class="lineCov"> 2252580 : }</span>
<span class="lineNum"> 188 </span><span class="lineCov"> 2252582 : ((uint32_t*)digest)[0] = h1;</span>
<span class="lineNum"> 189 </span><span class="lineCov"> 2252582 : ((uint32_t*)digest)[1] = h2;</span>
<span class="lineNum"> 190 </span><span class="lineCov"> 2252582 : ((uint32_t*)digest)[2] = h3;</span>
<span class="lineNum"> 191 </span><span class="lineCov"> 2252582 : ((uint32_t*)digest)[3] = h4;</span>
<span class="lineNum"> 192 </span><span class="lineCov"> 2252582 : }</span>
<span class="lineNum"> 193 </span> :
</pre>
</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@ -96,13 +96,13 @@
<span class="lineNum"> 34 </span> : tommy_node* j;
<span class="lineNum"> 35 </span> :
<span class="lineNum"> 36 </span> : /* for all files */
<span class="lineNum"> 37 </span><span class="lineCov"> 5723 : for (j = disk-&gt;filelist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 38 </span><span class="lineCov"> 5717 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 37 </span><span class="lineCov"> 5724 : for (j = disk-&gt;filelist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 38 </span><span class="lineCov"> 5718 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 39 </span> :
<span class="lineNum"> 40 </span> : /* if the file has a zero nanosecond timestamp */
<span class="lineNum"> 41 </span> : /* note that symbolic links are not in the file list */
<span class="lineNum"> 42 </span> : /* and then are not processed */
<span class="lineNum"> 43 </span><span class="lineCov"> 5717 : if (file-&gt;mtime_nsec == 0) {</span>
<span class="lineNum"> 43 </span><span class="lineCov"> 5718 : if (file-&gt;mtime_nsec == 0) {</span>
<span class="lineNum"> 44 </span> : char path[PATH_MAX];
<span class="lineNum"> 45 </span> : struct stat st;
<span class="lineNum"> 46 </span> : int f;

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -61,11 +61,11 @@
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#470">parity_read</a></td>
<td class="coverFnHi">3488589</td>
<td class="coverFnHi">3488577</td>
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#425">parity_write</a></td>
<td class="coverFnHi">505320</td>
<td class="coverFnHi">506040</td>
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#399">parity_close</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -89,7 +89,7 @@
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#470">parity_read</a></td>
<td class="coverFnHi">3488589</td>
<td class="coverFnHi">3488577</td>
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#379">parity_sync</a></td>
@ -101,7 +101,7 @@
</tr>
<tr>
<td class="coverFn"><a href="parity.c.gcov.html#425">parity_write</a></td>
<td class="coverFnHi">505320</td>
<td class="coverFnHi">506040</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -129,8 +129,8 @@
<span class="lineNum"> 67 </span><span class="lineCov"> 431 : block_off_t block = disk_size(disk);</span>
<span class="lineNum"> 68 </span> :
<span class="lineNum"> 69 </span> : /* decrease the block until an used one */
<span class="lineNum"> 70 </span><span class="lineCov"> 221703 : while (block &gt; parity_block &amp;&amp; !block_has_file_and_valid_parity(fs_par2block_get(disk, block - 1)))</span>
<span class="lineNum"> 71 </span><span class="lineCov"> 220841 : --block;</span>
<span class="lineNum"> 70 </span><span class="lineCov"> 221700 : while (block &gt; parity_block &amp;&amp; !block_has_file_and_valid_parity(fs_par2block_get(disk, block - 1)))</span>
<span class="lineNum"> 71 </span><span class="lineCov"> 220838 : --block;</span>
<span class="lineNum"> 72 </span> :
<span class="lineNum"> 73 </span> : /* get the highest value */
<span class="lineNum"> 74 </span><span class="lineCov"> 431 : if (block &gt; parity_block)</span>
@ -486,15 +486,15 @@
<span class="lineNum"> 424 </span><span class="lineCov"> 952 : return 0;</span>
<a name="425"><span class="lineNum"> 425 </span> : }</a>
<span class="lineNum"> 426 </span> :
<span class="lineNum"> 427 </span><span class="lineCov"> 505320 : int parity_write(struct snapraid_parity_handle* parity, block_off_t pos, unsigned char* block_buffer, unsigned block_size)</span>
<span class="lineNum"> 427 </span><span class="lineCov"> 506040 : int parity_write(struct snapraid_parity_handle* parity, block_off_t pos, unsigned char* block_buffer, unsigned block_size)</span>
<span class="lineNum"> 428 </span> : {
<span class="lineNum"> 429 </span> : ssize_t write_ret;
<span class="lineNum"> 430 </span> : data_off_t offset;
<span class="lineNum"> 431 </span> :
<span class="lineNum"> 432 </span><span class="lineCov"> 505320 : offset = pos * (data_off_t)block_size;</span>
<span class="lineNum"> 432 </span><span class="lineCov"> 506040 : offset = pos * (data_off_t)block_size;</span>
<span class="lineNum"> 433 </span> :
<span class="lineNum"> 434 </span> : #if HAVE_PWRITE
<span class="lineNum"> 435 </span><span class="lineCov"> 505320 : write_ret = pwrite(parity-&gt;f, block_buffer, block_size, offset);</span>
<span class="lineNum"> 435 </span><span class="lineCov"> 506040 : write_ret = pwrite(parity-&gt;f, block_buffer, block_size, offset);</span>
<span class="lineNum"> 436 </span> : #else
<span class="lineNum"> 437 </span> : if (lseek(parity-&gt;f, offset, SEEK_SET) != offset) {
<span class="lineNum"> 438 </span> : /* LCOV_EXCL_START */
@ -509,7 +509,7 @@
<span class="lineNum"> 447 </span> :
<span class="lineNum"> 448 </span> : write_ret = write(parity-&gt;f, block_buffer, block_size);
<span class="lineNum"> 449 </span> : #endif
<span class="lineNum"> 450 </span><span class="lineCov"> 505320 : if (write_ret != (ssize_t)block_size) { /* conversion is safe because block_size is always small */</span>
<span class="lineNum"> 450 </span><span class="lineCov"> 506040 : if (write_ret != (ssize_t)block_size) { /* conversion is safe because block_size is always small */</span>
<span class="lineNum"> 451 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 452 </span> : if (errno == ENOSPC) {
<span class="lineNum"> 453 </span> : log_fatal(&quot;Failed to grow parity file '%s' using write due lack of space.\n&quot;, parity-&gt;path);
@ -521,26 +521,26 @@
<span class="lineNum"> 459 </span> : }
<span class="lineNum"> 460 </span> :
<span class="lineNum"> 461 </span> : /* adjust the size of the valid data */
<span class="lineNum"> 462 </span><span class="lineCov"> 505320 : if (parity-&gt;valid_size &lt; offset + block_size) {</span>
<span class="lineNum"> 462 </span><span class="lineCov"> 506040 : if (parity-&gt;valid_size &lt; offset + block_size) {</span>
<span class="lineNum"> 463 </span><span class="lineCov"> 170559 : parity-&gt;valid_size = offset + block_size;</span>
<span class="lineNum"> 464 </span> : }
<span class="lineNum"> 465 </span> :
<span class="lineNum"> 466 </span> : /* Here doesn't make sense to call posix_fadvise(..., POSIX_FADV_DONTNEED) because */
<span class="lineNum"> 467 </span> : /* at this time the data is still in not yet written and it cannot be discharged. */
<span class="lineNum"> 468 </span> :
<span class="lineNum"> 469 </span><span class="lineCov"> 505320 : return 0;</span>
<span class="lineNum"> 469 </span><span class="lineCov"> 506040 : return 0;</span>
<a name="470"><span class="lineNum"> 470 </span> : }</a>
<span class="lineNum"> 471 </span> :
<span class="lineNum"> 472 </span><span class="lineCov"> 3488589 : int parity_read(struct snapraid_parity_handle* parity, block_off_t pos, unsigned char* block_buffer, unsigned block_size, fptr* out)</span>
<span class="lineNum"> 472 </span><span class="lineCov"> 3488577 : int parity_read(struct snapraid_parity_handle* parity, block_off_t pos, unsigned char* block_buffer, unsigned block_size, fptr* out)</span>
<span class="lineNum"> 473 </span> : {
<span class="lineNum"> 474 </span> : ssize_t read_ret;
<span class="lineNum"> 475 </span> : data_off_t offset;
<span class="lineNum"> 476 </span> : unsigned count;
<span class="lineNum"> 477 </span> :
<span class="lineNum"> 478 </span><span class="lineCov"> 3488589 : offset = pos * (data_off_t)block_size;</span>
<span class="lineNum"> 478 </span><span class="lineCov"> 3488577 : offset = pos * (data_off_t)block_size;</span>
<span class="lineNum"> 479 </span> :
<span class="lineNum"> 480 </span> : /* check if we are going to read only not initialized data */
<span class="lineNum"> 481 </span><span class="lineCov"> 3488589 : if (offset &gt;= parity-&gt;valid_size) {</span>
<span class="lineNum"> 481 </span><span class="lineCov"> 3488577 : if (offset &gt;= parity-&gt;valid_size) {</span>
<span class="lineNum"> 482 </span><span class="lineCov"> 90275 : out(&quot;Reading missing data from file '%s' at offset %&quot; PRIu64 &quot;.\n&quot;, parity-&gt;path, offset);</span>
<span class="lineNum"> 483 </span><span class="lineCov"> 90275 : return -1;</span>
<span class="lineNum"> 484 </span> : }
@ -554,36 +554,36 @@
<span class="lineNum"> 492 </span> : }
<span class="lineNum"> 493 </span> : #endif
<span class="lineNum"> 494 </span> :
<span class="lineNum"> 495 </span><span class="lineCov"> 3398314 : count = 0;</span>
<span class="lineNum"> 495 </span><span class="lineCov"> 3398302 : count = 0;</span>
<span class="lineNum"> 496 </span> : do {
<span class="lineNum"> 497 </span> :
<span class="lineNum"> 498 </span> : #if HAVE_PREAD
<span class="lineNum"> 499 </span><span class="lineCov"> 3398314 : read_ret = pread(parity-&gt;f, block_buffer + count, block_size - count, offset + count);</span>
<span class="lineNum"> 499 </span><span class="lineCov"> 3398302 : read_ret = pread(parity-&gt;f, block_buffer + count, block_size - count, offset + count);</span>
<span class="lineNum"> 500 </span> : #else
<span class="lineNum"> 501 </span> : read_ret = read(parity-&gt;f, block_buffer + count, block_size - count);
<span class="lineNum"> 502 </span> : #endif
<span class="lineNum"> 503 </span><span class="lineCov"> 3398314 : if (read_ret &lt; 0) {</span>
<span class="lineNum"> 503 </span><span class="lineCov"> 3398302 : if (read_ret &lt; 0) {</span>
<span class="lineNum"> 504 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 505 </span> : out(&quot;Error reading file '%s' at offset %&quot; PRIu64 &quot; for size %u. %s.\n&quot;, parity-&gt;path, offset + count, block_size - count, strerror(errno));
<span class="lineNum"> 506 </span> : return -1;
<span class="lineNum"> 507 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 508 </span> : }
<span class="lineNum"> 509 </span><span class="lineCov"> 3398314 : if (read_ret == 0) {</span>
<span class="lineNum"> 509 </span><span class="lineCov"> 3398302 : if (read_ret == 0) {</span>
<span class="lineNum"> 510 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 511 </span> : out(&quot;Unexpected end of file '%s' at offset %&quot; PRIu64 &quot;. %s.\n&quot;, parity-&gt;path, offset, strerror(errno));
<span class="lineNum"> 512 </span> : return -1;
<span class="lineNum"> 513 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 514 </span> : }
<span class="lineNum"> 515 </span> :
<span class="lineNum"> 516 </span><span class="lineCov"> 3398314 : count += read_ret;</span>
<span class="lineNum"> 517 </span><span class="lineCov"> 3398314 : } while (count &lt; block_size);</span>
<span class="lineNum"> 516 </span><span class="lineCov"> 3398302 : count += read_ret;</span>
<span class="lineNum"> 517 </span><span class="lineCov"> 3398302 : } while (count &lt; block_size);</span>
<span class="lineNum"> 518 </span> :
<span class="lineNum"> 519 </span> : /* Here isn't needed to call posix_fadvise(..., POSIX_FADV_DONTNEED) */
<span class="lineNum"> 520 </span> : /* because we already advised sequential access with POSIX_FADV_SEQUENTIAL. */
<span class="lineNum"> 521 </span> : /* In Linux 2.6.33 it's enough to ensure that data is not kept in the cache. */
<span class="lineNum"> 522 </span> : /* Better to do nothing and save a syscall for each block. */
<span class="lineNum"> 523 </span> :
<span class="lineNum"> 524 </span><span class="lineCov"> 3398314 : return block_size;</span>
<span class="lineNum"> 524 </span><span class="lineCov"> 3398302 : return block_size;</span>
<span class="lineNum"> 525 </span> : }
<span class="lineNum"> 526 </span> :
</pre>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="pool.c.gcov.html#148">make_link</a></td>
<td class="coverFnHi">17567</td>
<td class="coverFnHi">17569</td>
</tr>
<tr>
<td class="coverFn"><a href="pool.c.gcov.html#26">clean_dir</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="pool.c.gcov.html#148">make_link</a></td>
<td class="coverFnHi">17567</td>
<td class="coverFnHi">17569</td>
</tr>
<tr>
<td class="coverFn"><a href="pool.c.gcov.html#199">state_pool</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@ -107,24 +107,24 @@
<span class="lineNum"> 45 </span> : struct dirent* dd;
<span class="lineNum"> 46 </span> :
<span class="lineNum"> 47 </span> : /* clear errno to detect erroneous conditions */
<span class="lineNum"> 48 </span><span class="lineCov"> 5759 : errno = 0;</span>
<span class="lineNum"> 49 </span><span class="lineCov"> 5759 : dd = readdir(d);</span>
<span class="lineNum"> 50 </span><span class="lineCov"> 5759 : if (dd == 0 &amp;&amp; errno != 0) {</span>
<span class="lineNum"> 48 </span><span class="lineCov"> 5760 : errno = 0;</span>
<span class="lineNum"> 49 </span><span class="lineCov"> 5760 : dd = readdir(d);</span>
<span class="lineNum"> 50 </span><span class="lineCov"> 5760 : if (dd == 0 &amp;&amp; errno != 0) {</span>
<span class="lineNum"> 51 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 52 </span> : log_fatal(&quot;Error reading pool directory '%s'. %s.\n&quot;, dir, strerror(errno));
<span class="lineNum"> 53 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 54 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 55 </span> : }
<span class="lineNum"> 56 </span><span class="lineCov"> 5759 : if (dd == 0 &amp;&amp; errno == 0) {</span>
<span class="lineNum"> 56 </span><span class="lineCov"> 5760 : if (dd == 0 &amp;&amp; errno == 0) {</span>
<span class="lineNum"> 57 </span><span class="lineCov"> 5 : break; /* finished */</span>
<span class="lineNum"> 58 </span> : }
<span class="lineNum"> 59 </span> :
<span class="lineNum"> 60 </span> : /* skip &quot;.&quot; and &quot;..&quot; files */
<span class="lineNum"> 61 </span><span class="lineCov"> 5754 : name = dd-&gt;d_name;</span>
<span class="lineNum"> 62 </span><span class="lineCov"> 5754 : if (name[0] == '.' &amp;&amp; (name[1] == 0 || (name[1] == '.' &amp;&amp; name[2] == 0)))</span>
<span class="lineNum"> 61 </span><span class="lineCov"> 5755 : name = dd-&gt;d_name;</span>
<span class="lineNum"> 62 </span><span class="lineCov"> 5755 : if (name[0] == '.' &amp;&amp; (name[1] == 0 || (name[1] == '.' &amp;&amp; name[2] == 0)))</span>
<span class="lineNum"> 63 </span><span class="lineCov"> 10 : continue;</span>
<span class="lineNum"> 64 </span> :
<span class="lineNum"> 65 </span><span class="lineCov"> 5744 : pathprint(path_next, sizeof(path_next), &quot;%s%s&quot;, dir, name);</span>
<span class="lineNum"> 65 </span><span class="lineCov"> 5745 : pathprint(path_next, sizeof(path_next), &quot;%s%s&quot;, dir, name);</span>
<span class="lineNum"> 66 </span> :
<span class="lineNum"> 67 </span> : #if HAVE_STRUCT_DIRENT_D_STAT
<span class="lineNum"> 68 </span> : /* convert dirent to lstat result */
@ -142,7 +142,7 @@
<span class="lineNum"> 80 </span> : }
<span class="lineNum"> 81 </span> : #else
<span class="lineNum"> 82 </span> : /* get lstat info about the file */
<span class="lineNum"> 83 </span><span class="lineCov"> 5744 : if (lstat(path_next, &amp;st) != 0) {</span>
<span class="lineNum"> 83 </span><span class="lineCov"> 5745 : if (lstat(path_next, &amp;st) != 0) {</span>
<span class="lineNum"> 84 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 85 </span> : log_fatal(&quot;Error in stat file/directory '%s'. %s.\n&quot;, path_next, strerror(errno));
<span class="lineNum"> 86 </span> : exit(EXIT_FAILURE);
@ -150,12 +150,12 @@
<span class="lineNum"> 88 </span> : }
<span class="lineNum"> 89 </span> : #endif
<span class="lineNum"> 90 </span> :
<span class="lineNum"> 91 </span><span class="lineCov"> 5744 : if (S_ISLNK(st.st_mode)) {</span>
<span class="lineNum"> 91 </span><span class="lineCov"> 5745 : if (S_ISLNK(st.st_mode)) {</span>
<span class="lineNum"> 92 </span> : int ret;
<span class="lineNum"> 93 </span> :
<span class="lineNum"> 94 </span> : /* delete the link */
<span class="lineNum"> 95 </span><span class="lineCov"> 5742 : ret = remove(path_next);</span>
<span class="lineNum"> 96 </span><span class="lineCov"> 5742 : if (ret &lt; 0) {</span>
<span class="lineNum"> 95 </span><span class="lineCov"> 5743 : ret = remove(path_next);</span>
<span class="lineNum"> 96 </span><span class="lineCov"> 5743 : if (ret &lt; 0) {</span>
<span class="lineNum"> 97 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 98 </span> : log_fatal(&quot;Error removing symlink '%s'. %s.\n&quot;, path_next, strerror(errno));
<span class="lineNum"> 99 </span> : exit(EXIT_FAILURE);
@ -194,7 +194,7 @@
<span class="lineNum"> 132 </span><span class="lineNoCov"> 0 : ignored = 1;</span>
<span class="lineNum"> 133 </span><span class="lineNoCov"> 0 : msg_verbose(&quot;Ignoring pool file '%s'\n&quot;, path_next);</span>
<span class="lineNum"> 134 </span> : }
<span class="lineNum"> 135 </span><span class="lineCov"> 5754 : }</span>
<span class="lineNum"> 135 </span><span class="lineCov"> 5755 : }</span>
<span class="lineNum"> 136 </span> :
<span class="lineNum"> 137 </span><span class="lineCov"> 5 : if (closedir(d) != 0) {</span>
<span class="lineNum"> 138 </span> : /* LCOV_EXCL_START */
@ -209,7 +209,7 @@
<span class="lineNum"> 147 </span> : /**
<a name="148"><span class="lineNum"> 148 </span> : * Create a link to the specified disk entry.</a>
<span class="lineNum"> 149 </span> : */
<span class="lineNum"> 150 </span><span class="lineCov"> 17567 : static void make_link(const char* pool_dir, const char* share_dir, struct snapraid_disk* disk, const char* sub)</span>
<span class="lineNum"> 150 </span><span class="lineCov"> 17569 : static void make_link(const char* pool_dir, const char* share_dir, struct snapraid_disk* disk, const char* sub)</span>
<span class="lineNum"> 151 </span> : {
<span class="lineNum"> 152 </span> : char path[PATH_MAX];
<span class="lineNum"> 153 </span> : char linkto[PATH_MAX];
@ -217,31 +217,31 @@
<span class="lineNum"> 155 </span> : int ret;
<span class="lineNum"> 156 </span> :
<span class="lineNum"> 157 </span> : /* make the source path */
<span class="lineNum"> 158 </span><span class="lineCov"> 17567 : pathprint(path, sizeof(path), &quot;%s%s&quot;, pool_dir, sub);</span>
<span class="lineNum"> 158 </span><span class="lineCov"> 17569 : pathprint(path, sizeof(path), &quot;%s%s&quot;, pool_dir, sub);</span>
<span class="lineNum"> 159 </span> :
<span class="lineNum"> 160 </span> : /* make the linkto path */
<span class="lineNum"> 161 </span><span class="lineCov"> 17567 : if (share_dir[0] != 0) {</span>
<span class="lineNum"> 161 </span><span class="lineCov"> 17569 : if (share_dir[0] != 0) {</span>
<span class="lineNum"> 162 </span> : /* with a shared directory, use it */
<span class="lineNum"> 163 </span><span class="lineCov"> 17567 : pathprint(linkto, sizeof(linkto), &quot;%s%s/%s&quot;, share_dir, disk-&gt;name, sub);</span>
<span class="lineNum"> 163 </span><span class="lineCov"> 17569 : pathprint(linkto, sizeof(linkto), &quot;%s%s/%s&quot;, share_dir, disk-&gt;name, sub);</span>
<span class="lineNum"> 164 </span> : } else {
<span class="lineNum"> 165 </span> : /* without a share directory, use the local disk paths */
<span class="lineNum"> 166 </span><span class="lineNoCov"> 0 : pathprint(linkto, sizeof(linkto), &quot;%s%s&quot;, disk-&gt;dir, sub);</span>
<span class="lineNum"> 167 </span> : }
<span class="lineNum"> 168 </span> :
<span class="lineNum"> 169 </span> : /* create the ancestor directories */
<span class="lineNum"> 170 </span><span class="lineCov"> 17567 : ret = mkancestor(path);</span>
<span class="lineNum"> 171 </span><span class="lineCov"> 17567 : if (ret != 0) {</span>
<span class="lineNum"> 170 </span><span class="lineCov"> 17569 : ret = mkancestor(path);</span>
<span class="lineNum"> 171 </span><span class="lineCov"> 17569 : if (ret != 0) {</span>
<span class="lineNum"> 172 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 173 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 174 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 175 </span> : }
<span class="lineNum"> 176 </span> :
<span class="lineNum"> 177 </span> : /* convert back slashes */
<span class="lineNum"> 178 </span><span class="lineCov"> 17567 : pathexport(linkto_exported, sizeof(linkto_exported), linkto);</span>
<span class="lineNum"> 178 </span><span class="lineCov"> 17569 : pathexport(linkto_exported, sizeof(linkto_exported), linkto);</span>
<span class="lineNum"> 179 </span> :
<span class="lineNum"> 180 </span> : /* create the symlink */
<span class="lineNum"> 181 </span><span class="lineCov"> 17567 : ret = symlink(linkto_exported, path);</span>
<span class="lineNum"> 182 </span><span class="lineCov"> 17567 : if (ret != 0) {</span>
<span class="lineNum"> 181 </span><span class="lineCov"> 17569 : ret = symlink(linkto_exported, path);</span>
<span class="lineNum"> 182 </span><span class="lineCov"> 17569 : if (ret != 0) {</span>
<span class="lineNum"> 183 </span><span class="lineCov"> 517 : if (errno == EEXIST) {</span>
<span class="lineNum"> 184 </span><span class="lineCov"> 517 : log_fatal(&quot;WARNING! Duplicate pooling for '%s'\n&quot;, path);</span>
<span class="lineNum"> 185 </span> : #ifdef _WIN32
@ -258,7 +258,7 @@
<span class="lineNum"> 196 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 197 </span> : }
<span class="lineNum"> 198 </span> : }
<a name="199"><span class="lineNum"> 199 </span><span class="lineCov"> 17567 : }</span></a>
<a name="199"><span class="lineNum"> 199 </span><span class="lineCov"> 17569 : }</span></a>
<span class="lineNum"> 200 </span> :
<span class="lineNum"> 201 </span><span class="lineCov"> 3 : void state_pool(struct snapraid_state* state)</span>
<span class="lineNum"> 202 </span> : {
@ -296,10 +296,10 @@
<span class="lineNum"> 234 </span><span class="lineCov"> 18 : struct snapraid_disk* disk = i-&gt;data;</span>
<span class="lineNum"> 235 </span> :
<span class="lineNum"> 236 </span> : /* for each file */
<span class="lineNum"> 237 </span><span class="lineCov"> 16996 : for (j = disk-&gt;filelist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 238 </span><span class="lineCov"> 16978 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 239 </span><span class="lineCov"> 16978 : make_link(pool_dir, share_dir, disk, file-&gt;sub);</span>
<span class="lineNum"> 240 </span><span class="lineCov"> 16978 : ++count;</span>
<span class="lineNum"> 237 </span><span class="lineCov"> 16998 : for (j = disk-&gt;filelist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 238 </span><span class="lineCov"> 16980 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 239 </span><span class="lineCov"> 16980 : make_link(pool_dir, share_dir, disk, file-&gt;sub);</span>
<span class="lineNum"> 240 </span><span class="lineCov"> 16980 : ++count;</span>
<span class="lineNum"> 241 </span> : }
<span class="lineNum"> 242 </span> :
<span class="lineNum"> 243 </span> : /* for each link */

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">543</td>
<td class="headerCovTableEntry">622</td>
<td class="headerCovTableEntryMed">87.3 %</td>
<td class="headerCovTableEntry">542</td>
<td class="headerCovTableEntry">620</td>
<td class="headerCovTableEntryMed">87.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">23</td>
@ -60,59 +60,59 @@
<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="scan.c.gcov.html#1054">dd_name_compare</a></td>
<td class="coverFnHi">10485267</td>
<td class="coverFn"><a href="scan.c.gcov.html#1066">dd_name_compare</a></td>
<td class="coverFnHi">10485497</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1073">dstat</a></td>
<td class="coverFnHi">1004147</td>
<td class="coverFn"><a href="scan.c.gcov.html#1085">dstat</a></td>
<td class="coverFnHi">1004217</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#587">scan_file</a></td>
<td class="coverFnHi">1003012</td>
<td class="coverFn"><a href="scan.c.gcov.html#593">scan_file</a></td>
<td class="coverFnHi">1003082</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#568">scan_file_keep</a></td>
<td class="coverFnHi">923695</td>
<td class="coverFn"><a href="scan.c.gcov.html#574">scan_file_keep</a></td>
<td class="coverFnHi">923721</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#354">file_is_full_invalid_parity_and_stable</a></td>
<td class="coverFnHi">923695</td>
<td class="coverFn"><a href="scan.c.gcov.html#360">file_is_full_invalid_parity_and_stable</a></td>
<td class="coverFnHi">923721</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1040">dd_ino_compare</a></td>
<td class="coverFnHi">103300</td>
<td class="coverFn"><a href="scan.c.gcov.html#1052">dd_ino_compare</a></td>
<td class="coverFnHi">103314</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#325">scan_file_delayed_allocate</a></td>
<td class="coverFnHi">100930</td>
<td class="coverFn"><a href="scan.c.gcov.html#331">scan_file_delayed_allocate</a></td>
<td class="coverFnHi">100975</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#524">scan_file_insert</a></td>
<td class="coverFnHi">100930</td>
<td class="coverFn"><a href="scan.c.gcov.html#530">scan_file_insert</a></td>
<td class="coverFnHi">100975</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#158">scan_file_allocate</a></td>
<td class="coverFnHi">100930</td>
<td class="coverFnHi">100975</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#447">scan_file_refresh</a></td>
<td class="coverFnHi">79146</td>
<td class="coverFn"><a href="scan.c.gcov.html#453">scan_file_refresh</a></td>
<td class="coverFnHi">79190</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#543">scan_file_remove</a></td>
<td class="coverFnHi">56098</td>
<td class="coverFn"><a href="scan.c.gcov.html#549">scan_file_remove</a></td>
<td class="coverFnHi">56139</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#254">scan_file_deallocate</a></td>
<td class="coverFnHi">56098</td>
<td class="coverFn"><a href="scan.c.gcov.html#257">scan_file_deallocate</a></td>
<td class="coverFnHi">56139</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#84">scan_link</a></td>
<td class="coverFnHi">32837</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#395">file_is_full_hashed_and_stable</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#401">file_is_full_hashed_and_stable</a></td>
<td class="coverFnHi">23659</td>
</tr>
<tr>
@ -120,7 +120,7 @@
<td class="coverFnHi">2457</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1089">scan_dir</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#1101">scan_dir</a></td>
<td class="coverFnHi">1614</td>
</tr>
<tr>
@ -128,27 +128,27 @@
<td class="coverFnHi">956</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#988">scan_emptydir</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#1000">scan_emptydir</a></td>
<td class="coverFnHi">227</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1376">state_diffscan</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#1388">state_diffscan</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1819">state_scan</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#1831">state_scan</a></td>
<td class="coverFnHi">73</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#972">scan_emptydir_insert</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#984">scan_emptydir_insert</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1814">state_diff</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#1826">state_diff</a></td>
<td class="coverFnHi">7</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#953">scan_emptydir_remove</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#965">scan_emptydir_remove</a></td>
<td class="coverFnHi">2</td>
</tr>
</table>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">543</td>
<td class="headerCovTableEntry">622</td>
<td class="headerCovTableEntryMed">87.3 %</td>
<td class="headerCovTableEntry">542</td>
<td class="headerCovTableEntry">620</td>
<td class="headerCovTableEntryMed">87.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">23</td>
@ -60,72 +60,72 @@
<td width="20%" class="tableHead">Hit count <span class="tableHeadSort"><a href="scan.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="scan.c.gcov.html#1040">dd_ino_compare</a></td>
<td class="coverFnHi">103300</td>
<td class="coverFn"><a href="scan.c.gcov.html#1052">dd_ino_compare</a></td>
<td class="coverFnHi">103314</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1054">dd_name_compare</a></td>
<td class="coverFnHi">10485267</td>
<td class="coverFn"><a href="scan.c.gcov.html#1066">dd_name_compare</a></td>
<td class="coverFnHi">10485497</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1073">dstat</a></td>
<td class="coverFnHi">1004147</td>
<td class="coverFn"><a href="scan.c.gcov.html#1085">dstat</a></td>
<td class="coverFnHi">1004217</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#395">file_is_full_hashed_and_stable</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#401">file_is_full_hashed_and_stable</a></td>
<td class="coverFnHi">23659</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#354">file_is_full_invalid_parity_and_stable</a></td>
<td class="coverFnHi">923695</td>
<td class="coverFn"><a href="scan.c.gcov.html#360">file_is_full_invalid_parity_and_stable</a></td>
<td class="coverFnHi">923721</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1089">scan_dir</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#1101">scan_dir</a></td>
<td class="coverFnHi">1614</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#988">scan_emptydir</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#1000">scan_emptydir</a></td>
<td class="coverFnHi">227</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#972">scan_emptydir_insert</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#984">scan_emptydir_insert</a></td>
<td class="coverFnHi">10</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#953">scan_emptydir_remove</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#965">scan_emptydir_remove</a></td>
<td class="coverFnHi">2</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#587">scan_file</a></td>
<td class="coverFnHi">1003012</td>
<td class="coverFn"><a href="scan.c.gcov.html#593">scan_file</a></td>
<td class="coverFnHi">1003082</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#158">scan_file_allocate</a></td>
<td class="coverFnHi">100930</td>
<td class="coverFnHi">100975</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#254">scan_file_deallocate</a></td>
<td class="coverFnHi">56098</td>
<td class="coverFn"><a href="scan.c.gcov.html#257">scan_file_deallocate</a></td>
<td class="coverFnHi">56139</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#325">scan_file_delayed_allocate</a></td>
<td class="coverFnHi">100930</td>
<td class="coverFn"><a href="scan.c.gcov.html#331">scan_file_delayed_allocate</a></td>
<td class="coverFnHi">100975</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#524">scan_file_insert</a></td>
<td class="coverFnHi">100930</td>
<td class="coverFn"><a href="scan.c.gcov.html#530">scan_file_insert</a></td>
<td class="coverFnHi">100975</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#568">scan_file_keep</a></td>
<td class="coverFnHi">923695</td>
<td class="coverFn"><a href="scan.c.gcov.html#574">scan_file_keep</a></td>
<td class="coverFnHi">923721</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#447">scan_file_refresh</a></td>
<td class="coverFnHi">79146</td>
<td class="coverFn"><a href="scan.c.gcov.html#453">scan_file_refresh</a></td>
<td class="coverFnHi">79190</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#543">scan_file_remove</a></td>
<td class="coverFnHi">56098</td>
<td class="coverFn"><a href="scan.c.gcov.html#549">scan_file_remove</a></td>
<td class="coverFnHi">56139</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#84">scan_link</a></td>
@ -140,15 +140,15 @@
<td class="coverFnHi">956</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1814">state_diff</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#1826">state_diff</a></td>
<td class="coverFnHi">7</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1376">state_diffscan</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#1388">state_diffscan</a></td>
<td class="coverFnHi">80</td>
</tr>
<tr>
<td class="coverFn"><a href="scan.c.gcov.html#1819">state_scan</a></td>
<td class="coverFn"><a href="scan.c.gcov.html#1831">state_scan</a></td>
<td class="coverFnHi">73</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@ -122,12 +122,12 @@
<span class="lineNum"> 60 </span> :
<span class="lineNum"> 61 </span> : /* bad blocks are always scrubbed in all plans */
<span class="lineNum"> 62 </span><span class="lineCov"> 111818 : if (info_get_bad(info))</span>
<span class="lineNum"> 63 </span><span class="lineCov"> 3606 : return 1;</span>
<span class="lineNum"> 63 </span><span class="lineCov"> 3604 : return 1;</span>
<span class="lineNum"> 64 </span> :
<span class="lineNum"> 65 </span><span class="lineCov"> 108212 : switch (plan-&gt;plan) {</span>
<span class="lineNum"> 65 </span><span class="lineCov"> 108214 : switch (plan-&gt;plan) {</span>
<span class="lineNum"> 66 </span> : case SCRUB_FULL :
<span class="lineNum"> 67 </span> : /* in 'full' plan everything is scrubbed */
<span class="lineNum"> 68 </span><span class="lineCov"> 16918 : return 1;</span>
<span class="lineNum"> 68 </span><span class="lineCov"> 16920 : return 1;</span>
<span class="lineNum"> 69 </span> : case SCRUB_EVEN :
<span class="lineNum"> 70 </span> : /* in 'even' plan, scrub only even blocks */
<span class="lineNum"> 71 </span><span class="lineCov"> 18398 : return i % 2 == 0;</span>
@ -143,19 +143,19 @@
<span class="lineNum"> 81 </span><span class="lineCov"> 56052 : blocktime = info_get_time(info);</span>
<span class="lineNum"> 82 </span><span class="lineCov"> 56052 : if (blocktime &gt; plan-&gt;timelimit) {</span>
<span class="lineNum"> 83 </span> : /* skip it */
<span class="lineNum"> 84 </span><span class="lineCov"> 20666 : return 0;</span>
<span class="lineNum"> 84 </span><span class="lineCov"> 22506 : return 0;</span>
<span class="lineNum"> 85 </span> : }
<span class="lineNum"> 86 </span> :
<span class="lineNum"> 87 </span> : /* if the time is less than the limit, always include */
<span class="lineNum"> 88 </span> : /* otherwise, check if we reached the last limit count */
<span class="lineNum"> 89 </span><span class="lineCov"> 35386 : if (blocktime == plan-&gt;timelimit) {</span>
<span class="lineNum"> 89 </span><span class="lineCov"> 33546 : if (blocktime == plan-&gt;timelimit) {</span>
<span class="lineNum"> 90 </span> : /* if we reached the count limit */
<span class="lineNum"> 91 </span><span class="lineCov"> 18912 : if (plan-&gt;countlast &gt;= plan-&gt;lastlimit) {</span>
<span class="lineNum"> 91 </span><span class="lineCov"> 16872 : if (plan-&gt;countlast &gt;= plan-&gt;lastlimit) {</span>
<span class="lineNum"> 92 </span> : /* skip it */
<span class="lineNum"> 93 </span><span class="lineCov"> 13722 : return 0;</span>
<span class="lineNum"> 93 </span><span class="lineCov"> 11882 : return 0;</span>
<span class="lineNum"> 94 </span> : }
<span class="lineNum"> 95 </span> :
<span class="lineNum"> 96 </span><span class="lineCov"> 5190 : ++plan-&gt;countlast;</span>
<span class="lineNum"> 96 </span><span class="lineCov"> 4990 : ++plan-&gt;countlast;</span>
<span class="lineNum"> 97 </span> : }
<span class="lineNum"> 98 </span> :
<span class="lineNum"> 99 </span><span class="lineCov"> 21664 : return 1;</span>
@ -304,9 +304,9 @@
<span class="lineNum"> 242 </span> : /* if the file is different than the current one, close it */
<span class="lineNum"> 243 </span><span class="lineCov"> 166241 : if (handle[j].file != 0 &amp;&amp; handle[j].file != file) {</span>
<span class="lineNum"> 244 </span> : /* keep a pointer at the file we are going to close for error reporting */
<span class="lineNum"> 245 </span><span class="lineCov"> 78213 : struct snapraid_file* report = handle[j].file;</span>
<span class="lineNum"> 246 </span><span class="lineCov"> 78213 : ret = handle_close(&amp;handle[j]);</span>
<span class="lineNum"> 247 </span><span class="lineCov"> 78213 : if (ret == -1) {</span>
<span class="lineNum"> 245 </span><span class="lineCov"> 78552 : struct snapraid_file* report = handle[j].file;</span>
<span class="lineNum"> 246 </span><span class="lineCov"> 78552 : ret = handle_close(&amp;handle[j]);</span>
<span class="lineNum"> 247 </span><span class="lineCov"> 78552 : if (ret == -1) {</span>
<span class="lineNum"> 248 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 249 </span> : /* This one is really an unexpected error, because we are only reading */
<span class="lineNum"> 250 </span> : /* and closing a descriptor should never fail */
@ -351,12 +351,12 @@
<span class="lineNum"> 289 </span> : /* check if the file is changed */
<span class="lineNum"> 290 </span><span class="lineCov"> 166241 : if (handle[j].st.st_size != file-&gt;size</span>
<span class="lineNum"> 291 </span><span class="lineCov"> 166241 : || handle[j].st.st_mtime != file-&gt;mtime_sec</span>
<span class="lineNum"> 292 </span><span class="lineCov"> 160519 : || STAT_NSEC(&amp;handle[j].st) != file-&gt;mtime_nsec</span>
<span class="lineNum"> 292 </span><span class="lineCov"> 160522 : || STAT_NSEC(&amp;handle[j].st) != file-&gt;mtime_nsec</span>
<span class="lineNum"> 293 </span> : /* don't check the inode to support filesystem without persistent inodes */
<span class="lineNum"> 294 </span> : ) {
<span class="lineNum"> 295 </span> : /* report that the block and the file are not synced */
<span class="lineNum"> 296 </span><span class="lineCov"> 5722 : block_is_unsynced = 1;</span>
<span class="lineNum"> 297 </span><span class="lineCov"> 5722 : file_is_unsynced = 1;</span>
<span class="lineNum"> 296 </span><span class="lineCov"> 5719 : block_is_unsynced = 1;</span>
<span class="lineNum"> 297 </span><span class="lineCov"> 5719 : file_is_unsynced = 1;</span>
<span class="lineNum"> 298 </span> : /* follow */
<span class="lineNum"> 299 </span> : }
<span class="lineNum"> 300 </span> :
@ -728,12 +728,12 @@
<span class="lineNum"> 666 </span> : /* output the info map */
<span class="lineNum"> 667 </span><span class="lineCov"> 11 : i = 0;</span>
<span class="lineNum"> 668 </span><span class="lineCov"> 11 : log_tag(&quot;info_count:%u\n&quot;, count);</span>
<span class="lineNum"> 669 </span><span class="lineCov"> 51 : while (i &lt; count) {</span>
<span class="lineNum"> 670 </span><span class="lineCov"> 29 : unsigned j = i + 1;</span>
<span class="lineNum"> 671 </span><span class="lineCov"> 55938 : while (j &lt; count &amp;&amp; timemap[i] == timemap[j])</span>
<span class="lineNum"> 672 </span><span class="lineCov"> 55880 : ++j;</span>
<span class="lineNum"> 673 </span><span class="lineCov"> 29 : log_tag(&quot;info_time:%&quot; PRIu64 &quot;:%u\n&quot;, (uint64_t)timemap[i], j - i);</span>
<span class="lineNum"> 674 </span><span class="lineCov"> 29 : i = j;</span>
<span class="lineNum"> 669 </span><span class="lineCov"> 54 : while (i &lt; count) {</span>
<span class="lineNum"> 670 </span><span class="lineCov"> 32 : unsigned j = i + 1;</span>
<span class="lineNum"> 671 </span><span class="lineCov"> 55941 : while (j &lt; count &amp;&amp; timemap[i] == timemap[j])</span>
<span class="lineNum"> 672 </span><span class="lineCov"> 55877 : ++j;</span>
<span class="lineNum"> 673 </span><span class="lineCov"> 32 : log_tag(&quot;info_time:%&quot; PRIu64 &quot;:%u\n&quot;, (uint64_t)timemap[i], j - i);</span>
<span class="lineNum"> 674 </span><span class="lineCov"> 32 : i = j;</span>
<span class="lineNum"> 675 </span> : }
<span class="lineNum"> 676 </span> :
<span class="lineNum"> 677 </span> : /* compute the limits from count/recentlimit */
@ -754,8 +754,8 @@
<span class="lineNum"> 692 </span> : /* count how many entries for this exact time we have to scrub */
<span class="lineNum"> 693 </span> : /* if the blocks have all the same time, we end with countlimit == lastlimit */
<span class="lineNum"> 694 </span><span class="lineCov"> 5 : ps.lastlimit = 1;</span>
<span class="lineNum"> 695 </span><span class="lineCov"> 2600 : while (countlimit &gt; ps.lastlimit &amp;&amp; timemap[countlimit - ps.lastlimit - 1] == ps.timelimit)</span>
<span class="lineNum"> 696 </span><span class="lineCov"> 2590 : ++ps.lastlimit;</span>
<span class="lineNum"> 695 </span><span class="lineCov"> 2500 : while (countlimit &gt; ps.lastlimit &amp;&amp; timemap[countlimit - ps.lastlimit - 1] == ps.timelimit)</span>
<span class="lineNum"> 696 </span><span class="lineCov"> 2490 : ++ps.lastlimit;</span>
<span class="lineNum"> 697 </span> : } else {
<span class="lineNum"> 698 </span> : /* if nothing to scrub, disable also other limits */
<span class="lineNum"> 699 </span><span class="lineCov"> 1 : ps.timelimit = 0;</span>
@ -763,53 +763,52 @@
<span class="lineNum"> 701 </span> : }
<span class="lineNum"> 702 </span> :
<span class="lineNum"> 703 </span><span class="lineCov"> 6 : log_tag(&quot;count_limit:%u\n&quot;, countlimit);</span>
<span class="lineNum"> 704 </span> : }
<span class="lineNum"> 705 </span> :
<span class="lineNum"> 706 </span><span class="lineCov"> 11 : log_tag(&quot;time_limit:%&quot; PRIu64 &quot;\n&quot;, (uint64_t)ps.timelimit);</span>
<span class="lineNum"> 707 </span><span class="lineCov"> 11 : log_tag(&quot;last_limit:%u\n&quot;, ps.lastlimit);</span>
<span class="lineNum"> 708 </span> :
<span class="lineNum"> 709 </span> : /* free the temp vector */
<span class="lineNum"> 710 </span><span class="lineCov"> 11 : free(timemap);</span>
<span class="lineNum"> 711 </span> :
<span class="lineNum"> 712 </span> : /* open the file for reading */
<span class="lineNum"> 713 </span><span class="lineCov"> 77 : for (l = 0; l &lt; state-&gt;level; ++l) {</span>
<span class="lineNum"> 714 </span><span class="lineCov"> 66 : parity_ptr[l] = &amp;parity[l];</span>
<span class="lineNum"> 715 </span><span class="lineCov"> 66 : ret = parity_open(parity_ptr[l], state-&gt;parity[l].path, state-&gt;file_mode);</span>
<span class="lineNum"> 716 </span><span class="lineCov"> 66 : if (ret == -1) {</span>
<span class="lineNum"> 717 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 718 </span> : log_fatal(&quot;WARNING! Without an accessible %s file, it isn't possible to scrub.\n&quot;, lev_name(l));
<span class="lineNum"> 719 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 720 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 721 </span> : }
<span class="lineNum"> 722 </span> : }
<span class="lineNum"> 723 </span> :
<span class="lineNum"> 724 </span><span class="lineCov"> 11 : msg_progress(&quot;Scrubbing...\n&quot;);</span>
<span class="lineNum"> 725 </span> :
<span class="lineNum"> 726 </span><span class="lineCov"> 11 : error = 0;</span>
<span class="lineNum"> 727 </span> :
<span class="lineNum"> 728 </span><span class="lineCov"> 11 : ret = state_scrub_process(state, parity_ptr, 0, blockmax, &amp;ps, now);</span>
<span class="lineNum"> 729 </span><span class="lineCov"> 11 : if (ret == -1) {</span>
<span class="lineNum"> 730 </span><span class="lineNoCov"> 0 : ++error;</span>
<span class="lineNum"> 731 </span> : /* continue, as we are already exiting */
<span class="lineNum"> 732 </span> : }
<span class="lineNum"> 733 </span> :
<span class="lineNum"> 734 </span><span class="lineCov"> 77 : for (l = 0; l &lt; state-&gt;level; ++l) {</span>
<span class="lineNum"> 735 </span><span class="lineCov"> 66 : ret = parity_close(parity_ptr[l]);</span>
<span class="lineNum"> 736 </span><span class="lineCov"> 66 : if (ret == -1) {</span>
<span class="lineNum"> 737 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 738 </span> : log_fatal(&quot;DANGER! Unexpected close error in %s disk.\n&quot;, lev_name(l));
<span class="lineNum"> 739 </span> : ++error;
<span class="lineNum"> 740 </span> : /* continue, as we are already exiting */
<span class="lineNum"> 741 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 742 </span> : }
<span class="lineNum"> 743 </span> : }
<span class="lineNum"> 744 </span> :
<span class="lineNum"> 745 </span> : /* abort if required */
<span class="lineNum"> 746 </span><span class="lineCov"> 11 : if (error != 0)</span>
<span class="lineNum"> 747 </span><span class="lineNoCov"> 0 : return -1;</span>
<span class="lineNum"> 748 </span><span class="lineCov"> 11 : return 0;</span>
<span class="lineNum"> 749 </span> : }
<span class="lineNum"> 750 </span> :
<span class="lineNum"> 704 </span><span class="lineCov"> 6 : log_tag(&quot;time_limit:%&quot; PRIu64 &quot;\n&quot;, (uint64_t)ps.timelimit);</span>
<span class="lineNum"> 705 </span><span class="lineCov"> 6 : log_tag(&quot;last_limit:%u\n&quot;, ps.lastlimit);</span>
<span class="lineNum"> 706 </span> : }
<span class="lineNum"> 707 </span> :
<span class="lineNum"> 708 </span> : /* free the temp vector */
<span class="lineNum"> 709 </span><span class="lineCov"> 11 : free(timemap);</span>
<span class="lineNum"> 710 </span> :
<span class="lineNum"> 711 </span> : /* open the file for reading */
<span class="lineNum"> 712 </span><span class="lineCov"> 77 : for (l = 0; l &lt; state-&gt;level; ++l) {</span>
<span class="lineNum"> 713 </span><span class="lineCov"> 66 : parity_ptr[l] = &amp;parity[l];</span>
<span class="lineNum"> 714 </span><span class="lineCov"> 66 : ret = parity_open(parity_ptr[l], state-&gt;parity[l].path, state-&gt;file_mode);</span>
<span class="lineNum"> 715 </span><span class="lineCov"> 66 : if (ret == -1) {</span>
<span class="lineNum"> 716 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 717 </span> : log_fatal(&quot;WARNING! Without an accessible %s file, it isn't possible to scrub.\n&quot;, lev_name(l));
<span class="lineNum"> 718 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 719 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 720 </span> : }
<span class="lineNum"> 721 </span> : }
<span class="lineNum"> 722 </span> :
<span class="lineNum"> 723 </span><span class="lineCov"> 11 : msg_progress(&quot;Scrubbing...\n&quot;);</span>
<span class="lineNum"> 724 </span> :
<span class="lineNum"> 725 </span><span class="lineCov"> 11 : error = 0;</span>
<span class="lineNum"> 726 </span> :
<span class="lineNum"> 727 </span><span class="lineCov"> 11 : ret = state_scrub_process(state, parity_ptr, 0, blockmax, &amp;ps, now);</span>
<span class="lineNum"> 728 </span><span class="lineCov"> 11 : if (ret == -1) {</span>
<span class="lineNum"> 729 </span><span class="lineNoCov"> 0 : ++error;</span>
<span class="lineNum"> 730 </span> : /* continue, as we are already exiting */
<span class="lineNum"> 731 </span> : }
<span class="lineNum"> 732 </span> :
<span class="lineNum"> 733 </span><span class="lineCov"> 77 : for (l = 0; l &lt; state-&gt;level; ++l) {</span>
<span class="lineNum"> 734 </span><span class="lineCov"> 66 : ret = parity_close(parity_ptr[l]);</span>
<span class="lineNum"> 735 </span><span class="lineCov"> 66 : if (ret == -1) {</span>
<span class="lineNum"> 736 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 737 </span> : log_fatal(&quot;DANGER! Unexpected close error in %s disk.\n&quot;, lev_name(l));
<span class="lineNum"> 738 </span> : ++error;
<span class="lineNum"> 739 </span> : /* continue, as we are already exiting */
<span class="lineNum"> 740 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 741 </span> : }
<span class="lineNum"> 742 </span> : }
<span class="lineNum"> 743 </span> :
<span class="lineNum"> 744 </span> : /* abort if required */
<span class="lineNum"> 745 </span><span class="lineCov"> 11 : if (error != 0)</span>
<span class="lineNum"> 746 </span><span class="lineNoCov"> 0 : return -1;</span>
<span class="lineNum"> 747 </span><span class="lineCov"> 11 : return 0;</span>
<span class="lineNum"> 748 </span> : }
<span class="lineNum"> 749 </span> :
</pre>
</td>
</tr>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@ -61,15 +61,15 @@
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#24">search_file</a></td>
<td class="coverFnHi">1842333</td>
<td class="coverFnHi">1842576</td>
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#40">search_file_free</a></td>
<td class="coverFnHi">1842333</td>
<td class="coverFnHi">1842576</td>
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#131">state_search_fetch</a></td>
<td class="coverFnHi">630950</td>
<td class="coverFnHi">630482</td>
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#56">search_file_compare</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@ -65,7 +65,7 @@
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#24">search_file</a></td>
<td class="coverFnHi">1842333</td>
<td class="coverFnHi">1842576</td>
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#56">search_file_compare</a></td>
@ -73,7 +73,7 @@
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#40">search_file_free</a></td>
<td class="coverFnHi">1842333</td>
<td class="coverFnHi">1842576</td>
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#262">state_search</a></td>
@ -85,7 +85,7 @@
</tr>
<tr>
<td class="coverFn"><a href="search.c.gcov.html#131">state_search_fetch</a></td>
<td class="coverFnHi">630950</td>
<td class="coverFnHi">630482</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">7</td>
@ -85,27 +85,27 @@
<span class="lineNum"> 23 </span> : /****************************************************************************/
<a name="24"><span class="lineNum"> 24 </span> : /* search */</a>
<span class="lineNum"> 25 </span> :
<span class="lineNum"> 26 </span><span class="lineCov"> 1842333 : static void search_file(struct snapraid_state* state, const char* path, data_off_t size, int64_t mtime_sec, int mtime_nsec)</span>
<span class="lineNum"> 26 </span><span class="lineCov"> 1842576 : static void search_file(struct snapraid_state* state, const char* path, data_off_t size, int64_t mtime_sec, int mtime_nsec)</span>
<span class="lineNum"> 27 </span> : {
<span class="lineNum"> 28 </span> : struct snapraid_search_file* file;
<span class="lineNum"> 29 </span> : tommy_uint32_t file_hash;
<span class="lineNum"> 30 </span> :
<span class="lineNum"> 31 </span><span class="lineCov"> 1842333 : file = malloc_nofail(sizeof(struct snapraid_search_file));</span>
<span class="lineNum"> 32 </span><span class="lineCov"> 1842333 : file-&gt;path = strdup_nofail(path);</span>
<span class="lineNum"> 33 </span><span class="lineCov"> 1842333 : file-&gt;size = size;</span>
<span class="lineNum"> 34 </span><span class="lineCov"> 1842333 : file-&gt;mtime_sec = mtime_sec;</span>
<span class="lineNum"> 35 </span><span class="lineCov"> 1842333 : file-&gt;mtime_nsec = mtime_nsec;</span>
<span class="lineNum"> 31 </span><span class="lineCov"> 1842576 : file = malloc_nofail(sizeof(struct snapraid_search_file));</span>
<span class="lineNum"> 32 </span><span class="lineCov"> 1842576 : file-&gt;path = strdup_nofail(path);</span>
<span class="lineNum"> 33 </span><span class="lineCov"> 1842576 : file-&gt;size = size;</span>
<span class="lineNum"> 34 </span><span class="lineCov"> 1842576 : file-&gt;mtime_sec = mtime_sec;</span>
<span class="lineNum"> 35 </span><span class="lineCov"> 1842576 : file-&gt;mtime_nsec = mtime_nsec;</span>
<span class="lineNum"> 36 </span> :
<span class="lineNum"> 37 </span><span class="lineCov"> 1842333 : file_hash = file_stamp_hash(file-&gt;size, file-&gt;mtime_sec, file-&gt;mtime_nsec);</span>
<span class="lineNum"> 37 </span><span class="lineCov"> 1842576 : file_hash = file_stamp_hash(file-&gt;size, file-&gt;mtime_sec, file-&gt;mtime_nsec);</span>
<span class="lineNum"> 38 </span> :
<span class="lineNum"> 39 </span><span class="lineCov"> 1842333 : tommy_hashdyn_insert(&amp;state-&gt;searchset, &amp;file-&gt;node, file, file_hash);</span>
<a name="40"><span class="lineNum"> 40 </span><span class="lineCov"> 1842333 : }</span></a>
<span class="lineNum"> 39 </span><span class="lineCov"> 1842576 : tommy_hashdyn_insert(&amp;state-&gt;searchset, &amp;file-&gt;node, file, file_hash);</span>
<a name="40"><span class="lineNum"> 40 </span><span class="lineCov"> 1842576 : }</span></a>
<span class="lineNum"> 41 </span> :
<span class="lineNum"> 42 </span><span class="lineCov"> 1842333 : void search_file_free(struct snapraid_search_file* file)</span>
<span class="lineNum"> 42 </span><span class="lineCov"> 1842576 : void search_file_free(struct snapraid_search_file* file)</span>
<span class="lineNum"> 43 </span> : {
<span class="lineNum"> 44 </span><span class="lineCov"> 1842333 : free(file-&gt;path);</span>
<span class="lineNum"> 45 </span><span class="lineCov"> 1842333 : free(file);</span>
<span class="lineNum"> 46 </span><span class="lineCov"> 1842333 : }</span>
<span class="lineNum"> 44 </span><span class="lineCov"> 1842576 : free(file-&gt;path);</span>
<span class="lineNum"> 45 </span><span class="lineCov"> 1842576 : free(file);</span>
<span class="lineNum"> 46 </span><span class="lineCov"> 1842576 : }</span>
<span class="lineNum"> 47 </span> :
<span class="lineNum"> 48 </span> : struct search_file_compare_arg {
<span class="lineNum"> 49 </span> : const struct snapraid_state* state;
@ -176,9 +176,9 @@
<span class="lineNum"> 114 </span> :
<span class="lineNum"> 115 </span> : /* compute the hash */
<span class="lineNum"> 116 </span><span class="lineCov"> 11531 : if (arg-&gt;prevhash)</span>
<span class="lineNum"> 117 </span><span class="lineCov"> 4483 : memhash(state-&gt;prevhash, state-&gt;prevhashseed, buffer_hash, arg-&gt;buffer, arg-&gt;read_size);</span>
<span class="lineNum"> 117 </span><span class="lineCov"> 4492 : memhash(state-&gt;prevhash, state-&gt;prevhashseed, buffer_hash, arg-&gt;buffer, arg-&gt;read_size);</span>
<span class="lineNum"> 118 </span> : else
<span class="lineNum"> 119 </span><span class="lineCov"> 7048 : memhash(state-&gt;hash, state-&gt;hashseed, buffer_hash, arg-&gt;buffer, arg-&gt;read_size);</span>
<span class="lineNum"> 119 </span><span class="lineCov"> 7039 : memhash(state-&gt;hash, state-&gt;hashseed, buffer_hash, arg-&gt;buffer, arg-&gt;read_size);</span>
<span class="lineNum"> 120 </span> :
<span class="lineNum"> 121 </span> : /* check if the hash is matching */
<span class="lineNum"> 122 </span><span class="lineCov"> 11531 : if (memcmp(buffer_hash, arg-&gt;block-&gt;hash, HASH_SIZE) != 0)</span>
@ -192,26 +192,26 @@
<span class="lineNum"> 130 </span><span class="lineCov"> 9412 : return 0;</span>
<a name="131"><span class="lineNum"> 131 </span> : }</a>
<span class="lineNum"> 132 </span> :
<span class="lineNum"> 133 </span><span class="lineCov"> 630950 : 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>
<span class="lineNum"> 133 </span><span class="lineCov"> 630482 : 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>
<span class="lineNum"> 134 </span> : {
<span class="lineNum"> 135 </span> : struct snapraid_search_file* file;
<span class="lineNum"> 136 </span> : tommy_uint32_t file_hash;
<span class="lineNum"> 137 </span> : struct search_file_compare_arg arg;
<span class="lineNum"> 138 </span> :
<span class="lineNum"> 139 </span><span class="lineCov"> 630950 : arg.state = state;</span>
<span class="lineNum"> 140 </span><span class="lineCov"> 630950 : arg.block = missing_block;</span>
<span class="lineNum"> 141 </span><span class="lineCov"> 630950 : arg.file = missing_file;</span>
<span class="lineNum"> 142 </span><span class="lineCov"> 630950 : arg.buffer = buffer;</span>
<span class="lineNum"> 143 </span><span class="lineCov"> 630950 : arg.offset = state-&gt;block_size * (data_off_t)missing_file_pos;</span>
<span class="lineNum"> 144 </span><span class="lineCov"> 630950 : arg.read_size = file_block_size(missing_file, missing_file_pos, state-&gt;block_size);</span>
<span class="lineNum"> 145 </span><span class="lineCov"> 630950 : arg.prevhash = prevhash;</span>
<span class="lineNum"> 139 </span><span class="lineCov"> 630482 : arg.state = state;</span>
<span class="lineNum"> 140 </span><span class="lineCov"> 630482 : arg.block = missing_block;</span>
<span class="lineNum"> 141 </span><span class="lineCov"> 630482 : arg.file = missing_file;</span>
<span class="lineNum"> 142 </span><span class="lineCov"> 630482 : arg.buffer = buffer;</span>
<span class="lineNum"> 143 </span><span class="lineCov"> 630482 : arg.offset = state-&gt;block_size * (data_off_t)missing_file_pos;</span>
<span class="lineNum"> 144 </span><span class="lineCov"> 630482 : arg.read_size = file_block_size(missing_file, missing_file_pos, state-&gt;block_size);</span>
<span class="lineNum"> 145 </span><span class="lineCov"> 630482 : arg.prevhash = prevhash;</span>
<span class="lineNum"> 146 </span> :
<span class="lineNum"> 147 </span><span class="lineCov"> 630950 : file_hash = file_stamp_hash(arg.file-&gt;size, arg.file-&gt;mtime_sec, arg.file-&gt;mtime_nsec);</span>
<span class="lineNum"> 147 </span><span class="lineCov"> 630482 : file_hash = file_stamp_hash(arg.file-&gt;size, arg.file-&gt;mtime_sec, arg.file-&gt;mtime_nsec);</span>
<span class="lineNum"> 148 </span> :
<span class="lineNum"> 149 </span> : /* search in the hashtable, and also check if the data matches the hash */
<span class="lineNum"> 150 </span><span class="lineCov"> 630950 : file = tommy_hashdyn_search(&amp;state-&gt;searchset, search_file_compare, &amp;arg, file_hash);</span>
<span class="lineNum"> 151 </span><span class="lineCov"> 630950 : if (!file)</span>
<span class="lineNum"> 152 </span><span class="lineCov"> 621538 : return -1;</span>
<span class="lineNum"> 150 </span><span class="lineCov"> 630482 : file = tommy_hashdyn_search(&amp;state-&gt;searchset, search_file_compare, &amp;arg, file_hash);</span>
<span class="lineNum"> 151 </span><span class="lineCov"> 630482 : if (!file)</span>
<span class="lineNum"> 152 </span><span class="lineCov"> 621070 : return -1;</span>
<span class="lineNum"> 153 </span> :
<span class="lineNum"> 154 </span> : /* if found, buffer is already set with data */
<span class="lineNum"> 155 </span><span class="lineCov"> 9412 : return 0;</span>
@ -233,40 +233,40 @@
<span class="lineNum"> 171 </span> : char path_next[PATH_MAX];
<span class="lineNum"> 172 </span> : char sub_next[PATH_MAX];
<span class="lineNum"> 173 </span> : char out[PATH_MAX];
<span class="lineNum"> 174 </span><span class="lineCov"> 2039139 : struct snapraid_filter* reason = 0;</span>
<span class="lineNum"> 174 </span><span class="lineCov"> 2039164 : struct snapraid_filter* reason = 0;</span>
<span class="lineNum"> 175 </span> : struct stat st;
<span class="lineNum"> 176 </span> : const char* name;
<span class="lineNum"> 177 </span> : struct dirent* dd;
<span class="lineNum"> 178 </span> :
<span class="lineNum"> 179 </span> : /* clear errno to detect erroneous conditions */
<span class="lineNum"> 180 </span><span class="lineCov"> 2039139 : errno = 0;</span>
<span class="lineNum"> 181 </span><span class="lineCov"> 2039139 : dd = readdir(d);</span>
<span class="lineNum"> 182 </span><span class="lineCov"> 2039139 : if (dd == 0 &amp;&amp; errno != 0) {</span>
<span class="lineNum"> 180 </span><span class="lineCov"> 2039164 : errno = 0;</span>
<span class="lineNum"> 181 </span><span class="lineCov"> 2039164 : dd = readdir(d);</span>
<span class="lineNum"> 182 </span><span class="lineCov"> 2039164 : if (dd == 0 &amp;&amp; errno != 0) {</span>
<span class="lineNum"> 183 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 184 </span> : log_fatal(&quot;Error reading directory '%s'. %s.\n&quot;, dir, strerror(errno));
<span class="lineNum"> 185 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 186 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 187 </span> : }
<span class="lineNum"> 188 </span><span class="lineCov"> 2039139 : if (dd == 0) {</span>
<span class="lineNum"> 188 </span><span class="lineCov"> 2039164 : if (dd == 0) {</span>
<span class="lineNum"> 189 </span><span class="lineCov"> 2462 : break; /* finished */</span>
<span class="lineNum"> 190 </span> : }
<span class="lineNum"> 191 </span> :
<span class="lineNum"> 192 </span> : /* skip &quot;.&quot; and &quot;..&quot; files */
<span class="lineNum"> 193 </span><span class="lineCov"> 2036677 : name = dd-&gt;d_name;</span>
<span class="lineNum"> 194 </span><span class="lineCov"> 2036677 : if (name[0] == '.' &amp;&amp; (name[1] == 0 || (name[1] == '.' &amp;&amp; name[2] == 0)))</span>
<span class="lineNum"> 193 </span><span class="lineCov"> 2036702 : name = dd-&gt;d_name;</span>
<span class="lineNum"> 194 </span><span class="lineCov"> 2036702 : if (name[0] == '.' &amp;&amp; (name[1] == 0 || (name[1] == '.' &amp;&amp; name[2] == 0)))</span>
<span class="lineNum"> 195 </span><span class="lineCov"> 9848 : continue;</span>
<span class="lineNum"> 196 </span> :
<span class="lineNum"> 197 </span><span class="lineCov"> 2031753 : pathprint(path_next, sizeof(path_next), &quot;%s%s&quot;, dir, name);</span>
<span class="lineNum"> 198 </span><span class="lineCov"> 2031753 : pathprint(sub_next, sizeof(sub_next), &quot;%s%s&quot;, sub, name);</span>
<span class="lineNum"> 197 </span><span class="lineCov"> 2031778 : pathprint(path_next, sizeof(path_next), &quot;%s%s&quot;, dir, name);</span>
<span class="lineNum"> 198 </span><span class="lineCov"> 2031778 : pathprint(sub_next, sizeof(sub_next), &quot;%s%s&quot;, sub, name);</span>
<span class="lineNum"> 199 </span> :
<span class="lineNum"> 200 </span> : /* exclude hidden files even before calling lstat() */
<span class="lineNum"> 201 </span><span class="lineCov"> 2031753 : if (disk != 0 &amp;&amp; filter_hidden(state-&gt;filter_hidden, dd) != 0) {</span>
<span class="lineNum"> 201 </span><span class="lineCov"> 2031778 : if (disk != 0 &amp;&amp; filter_hidden(state-&gt;filter_hidden, dd) != 0) {</span>
<span class="lineNum"> 202 </span><span class="lineNoCov"> 0 : msg_verbose(&quot;Excluding hidden '%s'\n&quot;, path_next);</span>
<span class="lineNum"> 203 </span><span class="lineNoCov"> 0 : continue;</span>
<span class="lineNum"> 204 </span> : }
<span class="lineNum"> 205 </span> :
<span class="lineNum"> 206 </span> : /* exclude content files even before calling lstat() */
<span class="lineNum"> 207 </span><span class="lineCov"> 2031753 : if (disk != 0 &amp;&amp; filter_content(&amp;state-&gt;contentlist, path_next) != 0) {</span>
<span class="lineNum"> 207 </span><span class="lineCov"> 2031778 : if (disk != 0 &amp;&amp; filter_content(&amp;state-&gt;contentlist, path_next) != 0) {</span>
<span class="lineNum"> 208 </span><span class="lineNoCov"> 0 : msg_verbose(&quot;Excluding content '%s'\n&quot;, path_next);</span>
<span class="lineNum"> 209 </span><span class="lineNoCov"> 0 : continue;</span>
<span class="lineNum"> 210 </span> : }
@ -290,7 +290,7 @@
<span class="lineNum"> 228 </span> : }
<span class="lineNum"> 229 </span> : #else
<span class="lineNum"> 230 </span> : /* get lstat info about the file */
<span class="lineNum"> 231 </span><span class="lineCov"> 2031753 : if (lstat(path_next, &amp;st) != 0) {</span>
<span class="lineNum"> 231 </span><span class="lineCov"> 2031778 : if (lstat(path_next, &amp;st) != 0) {</span>
<span class="lineNum"> 232 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 233 </span> : log_fatal(&quot;Error in stat file/directory '%s'. %s.\n&quot;, path_next, strerror(errno));
<span class="lineNum"> 234 </span> : exit(EXIT_FAILURE);
@ -298,13 +298,13 @@
<span class="lineNum"> 236 </span> : }
<span class="lineNum"> 237 </span> : #endif
<span class="lineNum"> 238 </span> :
<span class="lineNum"> 239 </span><span class="lineCov"> 2031753 : if (S_ISREG(st.st_mode)) {</span>
<span class="lineNum"> 240 </span><span class="lineCov"> 1967420 : if (disk == 0 || filter_path(&amp;state-&gt;filterlist, &amp;reason, disk-&gt;name, sub_next) == 0) {</span>
<span class="lineNum"> 241 </span><span class="lineCov"> 1842333 : search_file(state, path_next, st.st_size, st.st_mtime, STAT_NSEC(&amp;st));</span>
<span class="lineNum"> 239 </span><span class="lineCov"> 2031778 : if (S_ISREG(st.st_mode)) {</span>
<span class="lineNum"> 240 </span><span class="lineCov"> 1967521 : if (disk == 0 || filter_path(&amp;state-&gt;filterlist, &amp;reason, disk-&gt;name, sub_next) == 0) {</span>
<span class="lineNum"> 241 </span><span class="lineCov"> 1842576 : search_file(state, path_next, st.st_size, st.st_mtime, STAT_NSEC(&amp;st));</span>
<span class="lineNum"> 242 </span> : } else {
<span class="lineNum"> 243 </span><span class="lineCov"> 125087 : msg_verbose(&quot;Excluding link '%s' for rule '%s'\n&quot;, path_next, filter_type(reason, out, sizeof(out)));</span>
<span class="lineNum"> 243 </span><span class="lineCov"> 124945 : msg_verbose(&quot;Excluding link '%s' for rule '%s'\n&quot;, path_next, filter_type(reason, out, sizeof(out)));</span>
<span class="lineNum"> 244 </span> : }
<span class="lineNum"> 245 </span><span class="lineCov"> 64333 : } else if (S_ISDIR(st.st_mode)) {</span>
<span class="lineNum"> 245 </span><span class="lineCov"> 64257 : } else if (S_ISDIR(st.st_mode)) {</span>
<span class="lineNum"> 246 </span><span class="lineCov"> 1781 : if (disk == 0 || filter_dir(&amp;state-&gt;filterlist, &amp;reason, disk-&gt;name, sub_next) == 0) {</span>
<span class="lineNum"> 247 </span><span class="lineCov"> 1781 : pathslash(path_next, sizeof(path_next));</span>
<span class="lineNum"> 248 </span><span class="lineCov"> 1781 : pathslash(sub_next, sizeof(sub_next));</span>
@ -313,7 +313,7 @@
<span class="lineNum"> 251 </span><span class="lineNoCov"> 0 : msg_verbose(&quot;Excluding directory '%s' for rule '%s'\n&quot;, path_next, filter_type(reason, out, sizeof(out)));</span>
<span class="lineNum"> 252 </span> : }
<span class="lineNum"> 253 </span> : }
<span class="lineNum"> 254 </span><span class="lineCov"> 2036677 : }</span>
<span class="lineNum"> 254 </span><span class="lineCov"> 2036702 : }</span>
<span class="lineNum"> 255 </span> :
<span class="lineNum"> 256 </span><span class="lineCov"> 2462 : if (closedir(d) != 0) {</span>
<span class="lineNum"> 257 </span> : /* LCOV_EXCL_START */

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">8</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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#39">diffgettimeofday</a></td>
<td class="coverFnHi">1861</td>
<td class="coverFnHi">1866</td>
</tr>
<tr>
<td class="coverFn"><a href="speed.c.gcov.html#76">speed</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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#39">diffgettimeofday</a></td>
<td class="coverFnHi">1861</td>
<td class="coverFnHi">1866</td>
</tr>
<tr>
<td class="coverFn"><a href="speed.c.gcov.html#76">speed</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">2</td>
@ -100,14 +100,14 @@
<span class="lineNum"> 38 </span> : /**
<a name="39"><span class="lineNum"> 39 </span> : * Differential us of two timeval.</a>
<span class="lineNum"> 40 </span> : */
<span class="lineNum"> 41 </span><span class="lineCov"> 1861 : static int64_t diffgettimeofday(struct timeval *start, struct timeval *stop)</span>
<span class="lineNum"> 41 </span><span class="lineCov"> 1866 : static int64_t diffgettimeofday(struct timeval *start, struct timeval *stop)</span>
<span class="lineNum"> 42 </span> : {
<span class="lineNum"> 43 </span> : int64_t d;
<span class="lineNum"> 44 </span> :
<span class="lineNum"> 45 </span><span class="lineCov"> 1861 : d = 1000000LL * (stop-&gt;tv_sec - start-&gt;tv_sec);</span>
<span class="lineNum"> 46 </span><span class="lineCov"> 1861 : d += stop-&gt;tv_usec - start-&gt;tv_usec;</span>
<span class="lineNum"> 45 </span><span class="lineCov"> 1866 : d = 1000000LL * (stop-&gt;tv_sec - start-&gt;tv_sec);</span>
<span class="lineNum"> 46 </span><span class="lineCov"> 1866 : d += stop-&gt;tv_usec - start-&gt;tv_usec;</span>
<span class="lineNum"> 47 </span> :
<span class="lineNum"> 48 </span><span class="lineCov"> 1861 : return d;</span>
<span class="lineNum"> 48 </span><span class="lineCov"> 1866 : return d;</span>
<span class="lineNum"> 49 </span> : }
<span class="lineNum"> 50 </span> :
<span class="lineNum"> 51 </span> : /**
@ -232,10 +232,10 @@
<span class="lineNum"> 170 </span><span class="lineCov"> 4 : printf(&quot;%8s&quot;, &quot;memset&quot;);</span>
<span class="lineNum"> 171 </span><span class="lineCov"> 4 : fflush(stdout);</span>
<span class="lineNum"> 172 </span> :
<span class="lineNum"> 173 </span><span class="lineCov"> 383 : SPEED_START {</span>
<span class="lineNum"> 174 </span><span class="lineCov"> 3411 : for (j = 0; j &lt; nd; ++j)</span>
<span class="lineNum"> 175 </span><span class="lineCov"> 3032 : memset(v[j], j, size);</span>
<span class="lineNum"> 176 </span><span class="lineCov"> 379 : } SPEED_STOP</span>
<span class="lineNum"> 173 </span><span class="lineCov"> 385 : SPEED_START {</span>
<span class="lineNum"> 174 </span><span class="lineCov"> 3429 : for (j = 0; j &lt; nd; ++j)</span>
<span class="lineNum"> 175 </span><span class="lineCov"> 3048 : memset(v[j], j, size);</span>
<span class="lineNum"> 176 </span><span class="lineCov"> 381 : } SPEED_STOP</span>
<span class="lineNum"> 177 </span> :
<span class="lineNum"> 178 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span>
<span class="lineNum"> 179 </span><span class="lineCov"> 4 : printf(&quot;\n&quot;);</span>
@ -247,10 +247,10 @@
<span class="lineNum"> 185 </span><span class="lineCov"> 4 : printf(&quot;%8s&quot;, &quot;table&quot;);</span>
<span class="lineNum"> 186 </span><span class="lineCov"> 4 : fflush(stdout);</span>
<span class="lineNum"> 187 </span> :
<span class="lineNum"> 188 </span><span class="lineCov"> 44 : SPEED_START {</span>
<span class="lineNum"> 189 </span><span class="lineCov"> 360 : for (j = 0; j &lt; nd; ++j)</span>
<span class="lineNum"> 190 </span><span class="lineCov"> 320 : side_effect += crc32c_gen(0, v[j], size);</span>
<span class="lineNum"> 191 </span><span class="lineCov"> 40 : } SPEED_STOP</span>
<span class="lineNum"> 188 </span><span class="lineCov"> 46 : SPEED_START {</span>
<span class="lineNum"> 189 </span><span class="lineCov"> 378 : for (j = 0; j &lt; nd; ++j)</span>
<span class="lineNum"> 190 </span><span class="lineCov"> 336 : side_effect += crc32c_gen(0, v[j], size);</span>
<span class="lineNum"> 191 </span><span class="lineCov"> 42 : } SPEED_STOP</span>
<span class="lineNum"> 192 </span> :
<span class="lineNum"> 193 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span>
<span class="lineNum"> 194 </span><span class="lineCov"> 4 : printf(&quot;\n&quot;);</span>
@ -302,10 +302,10 @@
<span class="lineNum"> 240 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span>
<span class="lineNum"> 241 </span><span class="lineCov"> 4 : fflush(stdout);</span>
<span class="lineNum"> 242 </span> :
<span class="lineNum"> 243 </span><span class="lineCov"> 36 : SPEED_START {</span>
<span class="lineNum"> 244 </span><span class="lineCov"> 288 : for (j = 0; j &lt; nd; ++j)</span>
<span class="lineNum"> 245 </span><span class="lineCov"> 256 : memhash(HASH_SPOOKY2, seed, digest, v[j], size);</span>
<span class="lineNum"> 246 </span><span class="lineCov"> 32 : } SPEED_STOP</span>
<span class="lineNum"> 243 </span><span class="lineCov"> 35 : SPEED_START {</span>
<span class="lineNum"> 244 </span><span class="lineCov"> 279 : for (j = 0; j &lt; nd; ++j)</span>
<span class="lineNum"> 245 </span><span class="lineCov"> 248 : memhash(HASH_SPOOKY2, seed, digest, v[j], size);</span>
<span class="lineNum"> 246 </span><span class="lineCov"> 31 : } SPEED_STOP</span>
<span class="lineNum"> 247 </span> :
<span class="lineNum"> 248 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span>
<span class="lineNum"> 249 </span><span class="lineCov"> 4 : printf(&quot;\n&quot;);</span>
@ -358,9 +358,9 @@
<span class="lineNum"> 296 </span> : #ifdef CONFIG_X86
<span class="lineNum"> 297 </span> : #ifdef CONFIG_SSE2
<span class="lineNum"> 298 </span><span class="lineCov"> 4 : if (raid_cpu_has_sse2()) {</span>
<span class="lineNum"> 299 </span><span class="lineCov"> 312 : SPEED_START {</span>
<span class="lineNum"> 300 </span><span class="lineCov"> 308 : raid_gen1_sse2(nd, size, v);</span>
<span class="lineNum"> 301 </span><span class="lineCov"> 308 : } SPEED_STOP</span>
<span class="lineNum"> 299 </span><span class="lineCov"> 310 : SPEED_START {</span>
<span class="lineNum"> 300 </span><span class="lineCov"> 306 : raid_gen1_sse2(nd, size, v);</span>
<span class="lineNum"> 301 </span><span class="lineCov"> 306 : } SPEED_STOP</span>
<span class="lineNum"> 302 </span> :
<span class="lineNum"> 303 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span>
<span class="lineNum"> 304 </span><span class="lineCov"> 4 : fflush(stdout);</span>
@ -411,9 +411,9 @@
<span class="lineNum"> 349 </span> : #ifdef CONFIG_X86
<span class="lineNum"> 350 </span> : #ifdef CONFIG_SSE2
<span class="lineNum"> 351 </span><span class="lineCov"> 4 : if (raid_cpu_has_sse2()) {</span>
<span class="lineNum"> 352 </span><span class="lineCov"> 148 : SPEED_START {</span>
<span class="lineNum"> 353 </span><span class="lineCov"> 144 : raid_gen2_sse2(nd, size, v);</span>
<span class="lineNum"> 354 </span><span class="lineCov"> 144 : } SPEED_STOP</span>
<span class="lineNum"> 352 </span><span class="lineCov"> 147 : SPEED_START {</span>
<span class="lineNum"> 353 </span><span class="lineCov"> 143 : raid_gen2_sse2(nd, size, v);</span>
<span class="lineNum"> 354 </span><span class="lineCov"> 143 : } SPEED_STOP</span>
<span class="lineNum"> 355 </span> :
<span class="lineNum"> 356 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span>
<span class="lineNum"> 357 </span><span class="lineCov"> 4 : fflush(stdout);</span>
@ -537,9 +537,9 @@
<span class="lineNum"> 475 </span> : #ifdef CONFIG_X86
<span class="lineNum"> 476 </span> : #ifdef CONFIG_SSSE3
<span class="lineNum"> 477 </span><span class="lineCov"> 4 : if (raid_cpu_has_ssse3()) {</span>
<span class="lineNum"> 478 </span><span class="lineCov"> 53 : SPEED_START {</span>
<span class="lineNum"> 479 </span><span class="lineCov"> 50 : raid_gen3_ssse3(nd, size, v);</span>
<span class="lineNum"> 480 </span><span class="lineCov"> 50 : } SPEED_STOP</span>
<span class="lineNum"> 478 </span><span class="lineCov"> 54 : SPEED_START {</span>
<span class="lineNum"> 479 </span><span class="lineCov"> 51 : raid_gen3_ssse3(nd, size, v);</span>
<span class="lineNum"> 480 </span><span class="lineCov"> 51 : } SPEED_STOP</span>
<span class="lineNum"> 481 </span> :
<span class="lineNum"> 482 </span><span class="lineCov"> 3 : printf(&quot;%8&quot; PRIu64, ds / dt);</span>
<span class="lineNum"> 483 </span><span class="lineCov"> 3 : fflush(stdout);</span>
@ -602,9 +602,9 @@
<span class="lineNum"> 540 </span> : #ifdef CONFIG_X86
<span class="lineNum"> 541 </span> : #ifdef CONFIG_SSSE3
<span class="lineNum"> 542 </span><span class="lineCov"> 4 : if (raid_cpu_has_ssse3()) {</span>
<span class="lineNum"> 543 </span><span class="lineCov"> 34 : SPEED_START {</span>
<span class="lineNum"> 544 </span><span class="lineCov"> 31 : raid_gen4_ssse3(nd, size, v);</span>
<span class="lineNum"> 545 </span><span class="lineCov"> 31 : } SPEED_STOP</span>
<span class="lineNum"> 543 </span><span class="lineCov"> 36 : SPEED_START {</span>
<span class="lineNum"> 544 </span><span class="lineCov"> 33 : raid_gen4_ssse3(nd, size, v);</span>
<span class="lineNum"> 545 </span><span class="lineCov"> 33 : } SPEED_STOP</span>
<span class="lineNum"> 546 </span> :
<span class="lineNum"> 547 </span><span class="lineCov"> 3 : printf(&quot;%8&quot; PRIu64, ds / dt);</span>
<span class="lineNum"> 548 </span><span class="lineCov"> 3 : fflush(stdout);</span>
@ -667,9 +667,9 @@
<span class="lineNum"> 605 </span> : #ifdef CONFIG_X86
<span class="lineNum"> 606 </span> : #ifdef CONFIG_SSSE3
<span class="lineNum"> 607 </span><span class="lineCov"> 4 : if (raid_cpu_has_ssse3()) {</span>
<span class="lineNum"> 608 </span><span class="lineCov"> 26 : SPEED_START {</span>
<span class="lineNum"> 609 </span><span class="lineCov"> 23 : raid_gen5_ssse3(nd, size, v);</span>
<span class="lineNum"> 610 </span><span class="lineCov"> 23 : } SPEED_STOP</span>
<span class="lineNum"> 608 </span><span class="lineCov"> 27 : SPEED_START {</span>
<span class="lineNum"> 609 </span><span class="lineCov"> 24 : raid_gen5_ssse3(nd, size, v);</span>
<span class="lineNum"> 610 </span><span class="lineCov"> 24 : } SPEED_STOP</span>
<span class="lineNum"> 611 </span> :
<span class="lineNum"> 612 </span><span class="lineCov"> 3 : printf(&quot;%8&quot; PRIu64, ds / dt);</span>
<span class="lineNum"> 613 </span><span class="lineCov"> 3 : fflush(stdout);</span>
@ -707,9 +707,9 @@
<span class="lineNum"> 645 </span><span class="lineCov"> 4 : printf(&quot;%8s&quot;, raid_gen6_tag());</span>
<span class="lineNum"> 646 </span><span class="lineCov"> 4 : fflush(stdout);</span>
<span class="lineNum"> 647 </span> :
<span class="lineNum"> 648 </span><span class="lineCov"> 9 : SPEED_START {</span>
<span class="lineNum"> 649 </span><span class="lineCov"> 5 : raid_gen6_int8(nd, size, v);</span>
<span class="lineNum"> 650 </span><span class="lineCov"> 5 : } SPEED_STOP</span>
<span class="lineNum"> 648 </span><span class="lineCov"> 10 : SPEED_START {</span>
<span class="lineNum"> 649 </span><span class="lineCov"> 6 : raid_gen6_int8(nd, size, v);</span>
<span class="lineNum"> 650 </span><span class="lineCov"> 6 : } SPEED_STOP</span>
<span class="lineNum"> 651 </span> :
<span class="lineNum"> 652 </span><span class="lineCov"> 4 : printf(&quot;%8&quot; PRIu64, ds / dt);</span>
<span class="lineNum"> 653 </span><span class="lineCov"> 4 : fflush(stdout);</span>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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">3470873</td>
<td class="coverFnHi">3472174</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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">3470873</td>
<td class="coverFnHi">3472174</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">1</td>
@ -170,7 +170,7 @@
<span class="lineNum"> 108 </span> : //
<a name="109"><span class="lineNum"> 109 </span> : #define sc_const 0xdeadbeefdeadbeefLL</a>
<span class="lineNum"> 110 </span> :
<span class="lineNum"> 111 </span><span class="lineCov"> 3470873 : void SpookyHash128(const void* data, size_t size, const uint8_t* seed, uint8_t* digest)</span>
<span class="lineNum"> 111 </span><span class="lineCov"> 3472174 : void SpookyHash128(const void* data, size_t size, const uint8_t* seed, uint8_t* digest)</span>
<span class="lineNum"> 112 </span> : {
<span class="lineNum"> 113 </span> : uint64_t h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11;
<span class="lineNum"> 114 </span> : uint64_t buf[sc_numVars];
@ -182,39 +182,39 @@
<span class="lineNum"> 120 </span> : unsigned i;
<span class="lineNum"> 121 </span> : #endif
<span class="lineNum"> 122 </span> :
<span class="lineNum"> 123 </span><span class="lineCov"> 3470873 : h9 = ((const uint64_t*)seed)[0];</span>
<span class="lineNum"> 124 </span><span class="lineCov"> 3470873 : h10 = ((const uint64_t*)seed)[1];</span>
<span class="lineNum"> 123 </span><span class="lineCov"> 3472174 : h9 = ((const uint64_t*)seed)[0];</span>
<span class="lineNum"> 124 </span><span class="lineCov"> 3472174 : h10 = ((const uint64_t*)seed)[1];</span>
<span class="lineNum"> 125 </span> :
<span class="lineNum"> 126 </span> : #if WORDS_BIGENDIAN
<span class="lineNum"> 127 </span> : h9 = util_swap64(h9);
<span class="lineNum"> 128 </span> : h10 = util_swap64(h10);
<span class="lineNum"> 129 </span> : #endif
<span class="lineNum"> 130 </span> :
<span class="lineNum"> 131 </span><span class="lineCov"> 3470873 : h0 = h3 = h6 = h9;</span>
<span class="lineNum"> 132 </span><span class="lineCov"> 3470873 : h1 = h4 = h7 = h10;</span>
<span class="lineNum"> 133 </span><span class="lineCov"> 3470873 : h2 = h5 = h8 = h11 = sc_const;</span>
<span class="lineNum"> 131 </span><span class="lineCov"> 3472174 : h0 = h3 = h6 = h9;</span>
<span class="lineNum"> 132 </span><span class="lineCov"> 3472174 : h1 = h4 = h7 = h10;</span>
<span class="lineNum"> 133 </span><span class="lineCov"> 3472174 : h2 = h5 = h8 = h11 = sc_const;</span>
<span class="lineNum"> 134 </span> :
<span class="lineNum"> 135 </span><span class="lineCov"> 3470873 : nblocks = size / sc_blockSize;</span>
<span class="lineNum"> 136 </span><span class="lineCov"> 3470873 : blocks = data;</span>
<span class="lineNum"> 137 </span><span class="lineCov"> 3470873 : end = blocks + nblocks * sc_numVars;</span>
<span class="lineNum"> 135 </span><span class="lineCov"> 3472174 : nblocks = size / sc_blockSize;</span>
<span class="lineNum"> 136 </span><span class="lineCov"> 3472174 : blocks = data;</span>
<span class="lineNum"> 137 </span><span class="lineCov"> 3472174 : end = blocks + nblocks * sc_numVars;</span>
<span class="lineNum"> 138 </span> :
<span class="lineNum"> 139 </span> : /* body */
<span class="lineNum"> 140 </span><span class="lineCov"> 34954199 : while (blocks &lt; end) {</span>
<span class="lineNum"> 140 </span><span class="lineCov"> 34945798 : while (blocks &lt; end) {</span>
<span class="lineNum"> 141 </span> : #if WORDS_BIGENDIAN
<span class="lineNum"> 142 </span> : for (i = 0; i &lt; sc_numVars; ++i)
<span class="lineNum"> 143 </span> : buf[i] = util_swap64(blocks[i]);
<span class="lineNum"> 144 </span> : Mix(buf, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);
<span class="lineNum"> 145 </span> : #else
<span class="lineNum"> 146 </span><span class="lineCov"> 28012453 : Mix(blocks, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span>
<span class="lineNum"> 146 </span><span class="lineCov"> 28001450 : Mix(blocks, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span>
<span class="lineNum"> 147 </span> : #endif
<span class="lineNum"> 148 </span><span class="lineCov"> 28012453 : blocks += sc_numVars;</span>
<span class="lineNum"> 148 </span><span class="lineCov"> 28001450 : blocks += sc_numVars;</span>
<span class="lineNum"> 149 </span> : }
<span class="lineNum"> 150 </span> :
<span class="lineNum"> 151 </span> : /* tail */
<span class="lineNum"> 152 </span><span class="lineCov"> 3470873 : size_remainder = (size - ((const uint8_t*)end - (const uint8_t*)data));</span>
<span class="lineNum"> 153 </span><span class="lineCov"> 3470873 : memcpy(buf, end, size_remainder);</span>
<span class="lineNum"> 154 </span><span class="lineCov"> 3470873 : memset(((uint8_t*)buf) + size_remainder, 0, sc_blockSize - size_remainder);</span>
<span class="lineNum"> 155 </span><span class="lineCov"> 3470873 : ((uint8_t*)buf)[sc_blockSize - 1] = size_remainder;</span>
<span class="lineNum"> 152 </span><span class="lineCov"> 3472174 : size_remainder = (size - ((const uint8_t*)end - (const uint8_t*)data));</span>
<span class="lineNum"> 153 </span><span class="lineCov"> 3472174 : memcpy(buf, end, size_remainder);</span>
<span class="lineNum"> 154 </span><span class="lineCov"> 3472174 : memset(((uint8_t*)buf) + size_remainder, 0, sc_blockSize - size_remainder);</span>
<span class="lineNum"> 155 </span><span class="lineCov"> 3472174 : ((uint8_t*)buf)[sc_blockSize - 1] = size_remainder;</span>
<span class="lineNum"> 156 </span> :
<span class="lineNum"> 157 </span> : /* finalization */
<span class="lineNum"> 158 </span> : #if WORDS_BIGENDIAN
@ -222,16 +222,16 @@
<span class="lineNum"> 160 </span> : buf[i] = util_swap64(buf[i]);
<span class="lineNum"> 161 </span> : #endif
<span class="lineNum"> 162 </span> :
<span class="lineNum"> 163 </span><span class="lineCov"> 3470873 : End(buf, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span>
<span class="lineNum"> 163 </span><span class="lineCov"> 3472174 : End(buf, h0, h1, h2, h3, h4, h5, h6, h7, h8, h9, h10, h11);</span>
<span class="lineNum"> 164 </span> :
<span class="lineNum"> 165 </span> : #if WORDS_BIGENDIAN
<span class="lineNum"> 166 </span> : h0 = util_swap64(h0);
<span class="lineNum"> 167 </span> : h1 = util_swap64(h1);
<span class="lineNum"> 168 </span> : #endif
<span class="lineNum"> 169 </span> :
<span class="lineNum"> 170 </span><span class="lineCov"> 3470873 : ((uint64_t*)digest)[0] = h0;</span>
<span class="lineNum"> 171 </span><span class="lineCov"> 3470873 : ((uint64_t*)digest)[1] = h1;</span>
<span class="lineNum"> 172 </span><span class="lineCov"> 3470873 : }</span>
<span class="lineNum"> 170 </span><span class="lineCov"> 3472174 : ((uint64_t*)digest)[0] = h0;</span>
<span class="lineNum"> 171 </span><span class="lineCov"> 3472174 : ((uint64_t*)digest)[1] = h1;</span>
<span class="lineNum"> 172 </span><span class="lineCov"> 3472174 : }</span>
<span class="lineNum"> 173 </span> :
</pre>
</td>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">1249</td>
<td class="headerCovTableEntry">1248</td>
<td class="headerCovTableEntry">1351</td>
<td class="headerCovTableEntryHi">92.5 %</td>
<td class="headerCovTableEntryHi">92.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">35</td>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1531">fs_is_block_deleted_ts</a></td>
<td class="coverFnHi">29383119</td>
<td class="coverFnHi">29344162</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1494">fs_info_is_required</a></td>
@ -69,7 +69,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#3715">state_progress</a></td>
<td class="coverFnHi">1038828</td>
<td class="coverFnHi">1038958</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1465">fs_position_is_required</a></td>
@ -77,7 +77,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#42">lev_config_name</a></td>
<td class="coverFnHi">178770</td>
<td class="coverFnHi">178766</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1138">find_disk</a></td>
@ -93,7 +93,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#3323">state_verify_thread</a></td>
<td class="coverFnHi">908</td>
<td class="coverFnHi">912</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#3894">state_fscheck</a></td>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">1249</td>
<td class="headerCovTableEntry">1248</td>
<td class="headerCovTableEntry">1351</td>
<td class="headerCovTableEntryHi">92.5 %</td>
<td class="headerCovTableEntryHi">92.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">35</td>
@ -73,7 +73,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1531">fs_is_block_deleted_ts</a></td>
<td class="coverFnHi">29383119</td>
<td class="coverFnHi">29344162</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#1511">fs_position_clear_deleted</a></td>
@ -89,7 +89,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#42">lev_config_name</a></td>
<td class="coverFnHi">178770</td>
<td class="coverFnHi">178766</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#56">lev_config_scan</a></td>
@ -137,7 +137,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#3715">state_progress</a></td>
<td class="coverFnHi">1038828</td>
<td class="coverFnHi">1038958</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#3628">state_progress_begin</a></td>
@ -185,7 +185,7 @@
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#3323">state_verify_thread</a></td>
<td class="coverFnHi">908</td>
<td class="coverFnHi">912</td>
</tr>
<tr>
<td class="coverFn"><a href="state.c.gcov.html#3487">state_write</a></td>

View file

@ -31,13 +31,13 @@
<td class="headerValue">lcov.info</td>
<td></td>
<td class="headerItem">Lines:</td>
<td class="headerCovTableEntry">1249</td>
<td class="headerCovTableEntry">1248</td>
<td class="headerCovTableEntry">1351</td>
<td class="headerCovTableEntryHi">92.5 %</td>
<td class="headerCovTableEntryHi">92.4 %</td>
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">35</td>
@ -103,10 +103,10 @@
<span class="lineNum"> 41 </span><span class="lineNoCov"> 0 : return 0;</span>
<a name="42"><span class="lineNum"> 42 </span> : }</a>
<span class="lineNum"> 43 </span> :
<span class="lineNum"> 44 </span><span class="lineCov"> 178770 : const char* lev_config_name(unsigned l)</span>
<span class="lineNum"> 44 </span><span class="lineCov"> 178766 : const char* lev_config_name(unsigned l)</span>
<span class="lineNum"> 45 </span> : {
<span class="lineNum"> 46 </span><span class="lineCov"> 178770 : switch (l) {</span>
<span class="lineNum"> 47 </span><span class="lineCov"> 70480 : case 0 : return &quot;parity&quot;;</span>
<span class="lineNum"> 46 </span><span class="lineCov"> 178766 : switch (l) {</span>
<span class="lineNum"> 47 </span><span class="lineCov"> 70476 : case 0 : return &quot;parity&quot;;</span>
<span class="lineNum"> 48 </span><span class="lineCov"> 57423 : case 1 : return &quot;2-parity&quot;;</span>
<span class="lineNum"> 49 </span><span class="lineCov"> 12723 : case 2 : return &quot;3-parity&quot;;</span>
<span class="lineNum"> 50 </span><span class="lineCov"> 12719 : case 3 : return &quot;4-parity&quot;;</span>
@ -1592,11 +1592,11 @@
<span class="lineNum"> 1530 </span> : /**
<a name="1531"><span class="lineNum"> 1531 </span> : * Check if a block position in a disk is deleted.</a>
<span class="lineNum"> 1532 </span> : */
<span class="lineNum"> 1533 </span><span class="lineCov"> 29383119 : static int fs_is_block_deleted_ts(struct snapraid_disk* disk, struct snapraid_chunk** fs_last, block_off_t pos)</span>
<span class="lineNum"> 1533 </span><span class="lineCov"> 29344162 : static int fs_is_block_deleted_ts(struct snapraid_disk* disk, struct snapraid_chunk** fs_last, block_off_t pos)</span>
<span class="lineNum"> 1534 </span> : {
<span class="lineNum"> 1535 </span><span class="lineCov"> 29383119 : struct snapraid_block* block = fs_par2block_get_ts(disk, fs_last, pos);</span>
<span class="lineNum"> 1535 </span><span class="lineCov"> 29344162 : struct snapraid_block* block = fs_par2block_get_ts(disk, fs_last, pos);</span>
<span class="lineNum"> 1536 </span> :
<span class="lineNum"> 1537 </span><span class="lineCov"> 29381514 : return block_state_get(block) == BLOCK_STATE_DELETED;</span>
<span class="lineNum"> 1537 </span><span class="lineCov"> 29163541 : return block_state_get(block) == BLOCK_STATE_DELETED;</span>
<span class="lineNum"> 1538 </span> : }
<span class="lineNum"> 1539 </span> :
<span class="lineNum"> 1540 </span> : /**
@ -1706,12 +1706,12 @@
<span class="lineNum"> 1644 </span> : int c;
<span class="lineNum"> 1645 </span> :
<span class="lineNum"> 1646 </span> : /* read the command */
<span class="lineNum"> 1647 </span><span class="lineCov"> 3604981 : c = sgetc(f);</span>
<span class="lineNum"> 1648 </span><span class="lineCov"> 3604981 : if (c == EOF) {</span>
<span class="lineNum"> 1647 </span><span class="lineCov"> 3605061 : c = sgetc(f);</span>
<span class="lineNum"> 1648 </span><span class="lineCov"> 3605061 : if (c == EOF) {</span>
<span class="lineNum"> 1649 </span><span class="lineCov"> 234 : break;</span>
<span class="lineNum"> 1650 </span> : }
<span class="lineNum"> 1651 </span> :
<span class="lineNum"> 1652 </span><span class="lineCov"> 3604747 : if (c == 'f') {</span>
<span class="lineNum"> 1652 </span><span class="lineCov"> 3604827 : if (c == 'f') {</span>
<span class="lineNum"> 1653 </span> : /* file */
<span class="lineNum"> 1654 </span> : char sub[PATH_MAX];
<span class="lineNum"> 1655 </span> : uint64_t v_size;
@ -1723,18 +1723,18 @@
<span class="lineNum"> 1661 </span> : struct snapraid_disk* disk;
<span class="lineNum"> 1662 </span> : uint32_t mapping;
<span class="lineNum"> 1663 </span> :
<span class="lineNum"> 1664 </span><span class="lineCov"> 3485836 : ret = sgetb32(f, &amp;mapping);</span>
<span class="lineNum"> 1665 </span><span class="lineCov"> 3485836 : if (ret &lt; 0 || mapping &gt;= mapping_max) {</span>
<span class="lineNum"> 1664 </span><span class="lineCov"> 3485915 : ret = sgetb32(f, &amp;mapping);</span>
<span class="lineNum"> 1665 </span><span class="lineCov"> 3485915 : if (ret &lt; 0 || mapping &gt;= mapping_max) {</span>
<span class="lineNum"> 1666 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1667 </span> : decoding_error(path, f);
<span class="lineNum"> 1668 </span> : log_fatal(&quot;Internal inconsistency in mapping index!\n&quot;);
<span class="lineNum"> 1669 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 1670 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1671 </span> : }
<span class="lineNum"> 1672 </span><span class="lineCov"> 3485836 : disk = tommy_array_get(&amp;disk_mapping, mapping);</span>
<span class="lineNum"> 1672 </span><span class="lineCov"> 3485915 : disk = tommy_array_get(&amp;disk_mapping, mapping);</span>
<span class="lineNum"> 1673 </span> :
<span class="lineNum"> 1674 </span><span class="lineCov"> 3485836 : ret = sgetb64(f, &amp;v_size);</span>
<span class="lineNum"> 1675 </span><span class="lineCov"> 3485836 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1674 </span><span class="lineCov"> 3485915 : ret = sgetb64(f, &amp;v_size);</span>
<span class="lineNum"> 1675 </span><span class="lineCov"> 3485915 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1676 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1677 </span> : decoding_error(path, f);
<span class="lineNum"> 1678 </span> : exit(EXIT_FAILURE);
@ -1742,7 +1742,7 @@
<span class="lineNum"> 1680 </span> : }
<span class="lineNum"> 1681 </span> :
<span class="lineNum"> 1682 </span> : /* check for impossible file size to avoid to crash for a too big allocation */
<span class="lineNum"> 1683 </span><span class="lineCov"> 3485836 : if (v_size / state-&gt;block_size &gt; blockmax) {</span>
<span class="lineNum"> 1683 </span><span class="lineCov"> 3485915 : if (v_size / state-&gt;block_size &gt; blockmax) {</span>
<span class="lineNum"> 1684 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1685 </span> : decoding_error(path, f);
<span class="lineNum"> 1686 </span> : log_fatal(&quot;Internal inconsistency in file size too big!\n&quot;);
@ -1750,16 +1750,16 @@
<span class="lineNum"> 1688 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1689 </span> : }
<span class="lineNum"> 1690 </span> :
<span class="lineNum"> 1691 </span><span class="lineCov"> 3485836 : ret = sgetb64(f, &amp;v_mtime_sec);</span>
<span class="lineNum"> 1692 </span><span class="lineCov"> 3485836 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1691 </span><span class="lineCov"> 3485915 : ret = sgetb64(f, &amp;v_mtime_sec);</span>
<span class="lineNum"> 1692 </span><span class="lineCov"> 3485915 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1693 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1694 </span> : decoding_error(path, f);
<span class="lineNum"> 1695 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 1696 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1697 </span> : }
<span class="lineNum"> 1698 </span> :
<span class="lineNum"> 1699 </span><span class="lineCov"> 3485836 : ret = sgetb32(f, &amp;v_mtime_nsec);</span>
<span class="lineNum"> 1700 </span><span class="lineCov"> 3485836 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1699 </span><span class="lineCov"> 3485915 : ret = sgetb32(f, &amp;v_mtime_nsec);</span>
<span class="lineNum"> 1700 </span><span class="lineCov"> 3485915 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1701 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1702 </span> : decoding_error(path, f);
<span class="lineNum"> 1703 </span> : exit(EXIT_FAILURE);
@ -1767,27 +1767,27 @@
<span class="lineNum"> 1705 </span> : }
<span class="lineNum"> 1706 </span> :
<span class="lineNum"> 1707 </span> : /* STAT_NSEC_INVALID is encoded as 0 */
<span class="lineNum"> 1708 </span><span class="lineCov"> 3485836 : if (v_mtime_nsec == 0)</span>
<span class="lineNum"> 1708 </span><span class="lineCov"> 3485915 : if (v_mtime_nsec == 0)</span>
<span class="lineNum"> 1709 </span><span class="lineNoCov"> 0 : v_mtime_nsec = STAT_NSEC_INVALID;</span>
<span class="lineNum"> 1710 </span> : else
<span class="lineNum"> 1711 </span><span class="lineCov"> 3485836 : --v_mtime_nsec;</span>
<span class="lineNum"> 1711 </span><span class="lineCov"> 3485915 : --v_mtime_nsec;</span>
<span class="lineNum"> 1712 </span> :
<span class="lineNum"> 1713 </span><span class="lineCov"> 3485836 : ret = sgetb64(f, &amp;v_inode);</span>
<span class="lineNum"> 1714 </span><span class="lineCov"> 3485836 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1713 </span><span class="lineCov"> 3485915 : ret = sgetb64(f, &amp;v_inode);</span>
<span class="lineNum"> 1714 </span><span class="lineCov"> 3485915 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1715 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1716 </span> : decoding_error(path, f);
<span class="lineNum"> 1717 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 1718 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1719 </span> : }
<span class="lineNum"> 1720 </span> :
<span class="lineNum"> 1721 </span><span class="lineCov"> 3485836 : ret = sgetbs(f, sub, sizeof(sub));</span>
<span class="lineNum"> 1722 </span><span class="lineCov"> 3485836 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1721 </span><span class="lineCov"> 3485915 : ret = sgetbs(f, sub, sizeof(sub));</span>
<span class="lineNum"> 1722 </span><span class="lineCov"> 3485915 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1723 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1724 </span> : decoding_error(path, f);
<span class="lineNum"> 1725 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 1726 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1727 </span> : }
<span class="lineNum"> 1728 </span><span class="lineCov"> 3485836 : if (!*sub) {</span>
<span class="lineNum"> 1728 </span><span class="lineCov"> 3485915 : if (!*sub) {</span>
<span class="lineNum"> 1729 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1730 </span> : decoding_error(path, f);
<span class="lineNum"> 1731 </span> : exit(EXIT_FAILURE);
@ -1795,40 +1795,40 @@
<span class="lineNum"> 1733 </span> : }
<span class="lineNum"> 1734 </span> :
<span class="lineNum"> 1735 </span> : /* allocate the file */
<span class="lineNum"> 1736 </span><span class="lineCov"> 3485836 : file = file_alloc(state-&gt;block_size, sub, v_size, v_mtime_sec, v_mtime_nsec, v_inode, 0);</span>
<span class="lineNum"> 1736 </span><span class="lineCov"> 3485915 : file = file_alloc(state-&gt;block_size, sub, v_size, v_mtime_sec, v_mtime_nsec, v_inode, 0);</span>
<span class="lineNum"> 1737 </span> :
<span class="lineNum"> 1738 </span> : /* insert the file in the file containers */
<span class="lineNum"> 1739 </span><span class="lineCov"> 3485836 : tommy_hashdyn_insert(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset, file, file_inode_hash(file-&gt;inode));</span>
<span class="lineNum"> 1740 </span><span class="lineCov"> 3485836 : tommy_hashdyn_insert(&amp;disk-&gt;pathset, &amp;file-&gt;pathset, file, file_path_hash(file-&gt;sub));</span>
<span class="lineNum"> 1741 </span><span class="lineCov"> 3485836 : 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>
<span class="lineNum"> 1742 </span><span class="lineCov"> 3485836 : tommy_list_insert_tail(&amp;disk-&gt;filelist, &amp;file-&gt;nodelist, file);</span>
<span class="lineNum"> 1739 </span><span class="lineCov"> 3485915 : tommy_hashdyn_insert(&amp;disk-&gt;inodeset, &amp;file-&gt;nodeset, file, file_inode_hash(file-&gt;inode));</span>
<span class="lineNum"> 1740 </span><span class="lineCov"> 3485915 : tommy_hashdyn_insert(&amp;disk-&gt;pathset, &amp;file-&gt;pathset, file, file_path_hash(file-&gt;sub));</span>
<span class="lineNum"> 1741 </span><span class="lineCov"> 3485915 : 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>
<span class="lineNum"> 1742 </span><span class="lineCov"> 3485915 : tommy_list_insert_tail(&amp;disk-&gt;filelist, &amp;file-&gt;nodelist, file);</span>
<span class="lineNum"> 1743 </span> :
<span class="lineNum"> 1744 </span> : /* read all the blocks */
<span class="lineNum"> 1745 </span><span class="lineCov"> 3485836 : v_idx = 0;</span>
<span class="lineNum"> 1746 </span><span class="lineCov"> 10477605 : while (v_idx &lt; file-&gt;blockmax) {</span>
<span class="lineNum"> 1745 </span><span class="lineCov"> 3485915 : v_idx = 0;</span>
<span class="lineNum"> 1746 </span><span class="lineCov"> 10477653 : while (v_idx &lt; file-&gt;blockmax) {</span>
<span class="lineNum"> 1747 </span> : block_off_t v_pos;
<span class="lineNum"> 1748 </span> : uint32_t v_count;
<span class="lineNum"> 1749 </span> :
<span class="lineNum"> 1750 </span> : /* get the &quot;subcommand */
<span class="lineNum"> 1751 </span><span class="lineCov"> 3505934 : c = sgetc(f);</span>
<span class="lineNum"> 1751 </span><span class="lineCov"> 3505823 : c = sgetc(f);</span>
<span class="lineNum"> 1752 </span> :
<span class="lineNum"> 1753 </span><span class="lineCov"> 3505934 : ret = sgetb32(f, &amp;v_pos);</span>
<span class="lineNum"> 1754 </span><span class="lineCov"> 3505934 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1753 </span><span class="lineCov"> 3505823 : ret = sgetb32(f, &amp;v_pos);</span>
<span class="lineNum"> 1754 </span><span class="lineCov"> 3505823 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1755 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1756 </span> : decoding_error(path, f);
<span class="lineNum"> 1757 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 1758 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1759 </span> : }
<span class="lineNum"> 1760 </span> :
<span class="lineNum"> 1761 </span><span class="lineCov"> 3505934 : ret = sgetb32(f, &amp;v_count);</span>
<span class="lineNum"> 1762 </span><span class="lineCov"> 3505934 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1761 </span><span class="lineCov"> 3505823 : ret = sgetb32(f, &amp;v_count);</span>
<span class="lineNum"> 1762 </span><span class="lineCov"> 3505823 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1763 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1764 </span> : decoding_error(path, f);
<span class="lineNum"> 1765 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 1766 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1767 </span> : }
<span class="lineNum"> 1768 </span> :
<span class="lineNum"> 1769 </span><span class="lineCov"> 3505934 : if (v_idx + v_count &gt; file-&gt;blockmax) {</span>
<span class="lineNum"> 1769 </span><span class="lineCov"> 3505823 : if (v_idx + v_count &gt; file-&gt;blockmax) {</span>
<span class="lineNum"> 1770 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1771 </span> : decoding_error(path, f);
<span class="lineNum"> 1772 </span> : log_fatal(&quot;Internal inconsistency in block number!\n&quot;);
@ -1836,7 +1836,7 @@
<span class="lineNum"> 1774 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1775 </span> : }
<span class="lineNum"> 1776 </span> :
<span class="lineNum"> 1777 </span><span class="lineCov"> 3505933 : if (v_pos + v_count &gt; blockmax) {</span>
<span class="lineNum"> 1777 </span><span class="lineCov"> 3505823 : if (v_pos + v_count &gt; blockmax) {</span>
<span class="lineNum"> 1778 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1779 </span> : log_fatal(&quot;Internal inconsistency in block size %u/%u!\n&quot;, blockmax, v_pos + v_count);
<span class="lineNum"> 1780 </span> : decoding_error(path, f);
@ -1871,9 +1871,9 @@
<span class="lineNum"> 1809 </span> : }
<span class="lineNum"> 1810 </span> :
<span class="lineNum"> 1811 </span> : /* read the hash only for 'blk/chg/rep', and not for 'new' */
<span class="lineNum"> 1812 </span><span class="lineCov"> 8573599 : if (c != 'n') {</span>
<span class="lineNum"> 1813 </span><span class="lineCov"> 8573599 : ret = sread(f, block-&gt;hash, HASH_SIZE);</span>
<span class="lineNum"> 1814 </span><span class="lineCov"> 8573599 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1812 </span><span class="lineCov"> 8573249 : if (c != 'n') {</span>
<span class="lineNum"> 1813 </span><span class="lineCov"> 8573249 : ret = sread(f, block-&gt;hash, HASH_SIZE);</span>
<span class="lineNum"> 1814 </span><span class="lineCov"> 8573249 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1815 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1816 </span> : decoding_error(path, f);
<span class="lineNum"> 1817 </span> : exit(EXIT_FAILURE);
@ -1886,8 +1886,8 @@
<span class="lineNum"> 1824 </span> :
<span class="lineNum"> 1825 </span> : /* if the block contains a hash of past data */
<span class="lineNum"> 1826 </span> : /* and we are clearing such undeterminated hashes */
<span class="lineNum"> 1827 </span><span class="lineCov"> 8573599 : if (state-&gt;clear_past_hash</span>
<span class="lineNum"> 1828 </span><span class="lineCov"> 2287716 : &amp;&amp; block_has_past_hash(block)</span>
<span class="lineNum"> 1827 </span><span class="lineCov"> 8573249 : if (state-&gt;clear_past_hash</span>
<span class="lineNum"> 1828 </span><span class="lineCov"> 2287366 : &amp;&amp; block_has_past_hash(block)</span>
<span class="lineNum"> 1829 </span> : ) {
<span class="lineNum"> 1830 </span> : /* set the hash value to INVALID */
<span class="lineNum"> 1831 </span><span class="lineCov"> 57602 : hash_invalid_set(block-&gt;hash);</span>
@ -1898,8 +1898,8 @@
<span class="lineNum"> 1836 </span> : /* in other sync commands */
<span class="lineNum"> 1837 </span> : /* note that this is required only in sync, and we detect */
<span class="lineNum"> 1838 </span> : /* this using the clear_past_hash flag */
<span class="lineNum"> 1839 </span><span class="lineCov"> 8573599 : if (state-&gt;clear_past_hash</span>
<span class="lineNum"> 1840 </span><span class="lineCov"> 2287716 : &amp;&amp; state-&gt;opt.force_nocopy</span>
<span class="lineNum"> 1839 </span><span class="lineCov"> 8573249 : if (state-&gt;clear_past_hash</span>
<span class="lineNum"> 1840 </span><span class="lineCov"> 2287366 : &amp;&amp; state-&gt;opt.force_nocopy</span>
<span class="lineNum"> 1841 </span><span class="lineCov"> 14115 : &amp;&amp; block_state_get(block) == BLOCK_STATE_REP</span>
<span class="lineNum"> 1842 </span> : ) {
<span class="lineNum"> 1843 </span> : /* set the hash value to INVALID */
@ -1911,25 +1911,25 @@
<span class="lineNum"> 1849 </span> : /* if we want a full sync, marks block as invalid parity */
<span class="lineNum"> 1850 </span> : /* note that we do this after the force_nocopy option */
<span class="lineNum"> 1851 </span> : /* to avoid to mixup the two things */
<span class="lineNum"> 1852 </span><span class="lineCov"> 8573599 : if (state-&gt;opt.force_full</span>
<span class="lineNum"> 1852 </span><span class="lineCov"> 8573249 : if (state-&gt;opt.force_full</span>
<span class="lineNum"> 1853 </span><span class="lineCov"> 27746 : &amp;&amp; block_state_get(block) == BLOCK_STATE_BLK) {</span>
<span class="lineNum"> 1854 </span> : /* convert from BLK to REP */
<span class="lineNum"> 1855 </span><span class="lineCov"> 27746 : block_state_set(block, BLOCK_STATE_REP);</span>
<span class="lineNum"> 1856 </span> : }
<span class="lineNum"> 1857 </span> :
<span class="lineNum"> 1858 </span> : /* set the parity association */
<span class="lineNum"> 1859 </span><span class="lineCov"> 8573599 : fs_allocate(disk, v_pos, file, v_idx);</span>
<span class="lineNum"> 1859 </span><span class="lineCov"> 8573249 : fs_allocate(disk, v_pos, file, v_idx);</span>
<span class="lineNum"> 1860 </span> :
<span class="lineNum"> 1861 </span> : /* go to the next block */
<span class="lineNum"> 1862 </span><span class="lineCov"> 8573599 : ++v_idx;</span>
<span class="lineNum"> 1863 </span><span class="lineCov"> 8573599 : ++v_pos;</span>
<span class="lineNum"> 1864 </span><span class="lineCov"> 8573599 : --v_count;</span>
<span class="lineNum"> 1862 </span><span class="lineCov"> 8573249 : ++v_idx;</span>
<span class="lineNum"> 1863 </span><span class="lineCov"> 8573249 : ++v_pos;</span>
<span class="lineNum"> 1864 </span><span class="lineCov"> 8573249 : --v_count;</span>
<span class="lineNum"> 1865 </span> : }
<span class="lineNum"> 1866 </span> : }
<span class="lineNum"> 1867 </span> :
<span class="lineNum"> 1868 </span> : /* stat */
<span class="lineNum"> 1869 </span><span class="lineCov"> 3485835 : ++count_file;</span>
<span class="lineNum"> 1870 </span><span class="lineCov"> 118911 : } else if (c == 'i') {</span>
<span class="lineNum"> 1869 </span><span class="lineCov"> 3485915 : ++count_file;</span>
<span class="lineNum"> 1870 </span><span class="lineCov"> 118912 : } else if (c == 'i') {</span>
<span class="lineNum"> 1871 </span> : /* &quot;inf&quot; command */
<span class="lineNum"> 1872 </span> : snapraid_info info;
<span class="lineNum"> 1873 </span> : uint32_t v_pos;
@ -1944,7 +1944,7 @@
<span class="lineNum"> 1882 </span> : }
<span class="lineNum"> 1883 </span> :
<span class="lineNum"> 1884 </span><span class="lineCov"> 234 : v_pos = 0;</span>
<span class="lineNum"> 1885 </span><span class="lineCov"> 284859 : while (v_pos &lt; blockmax) {</span>
<span class="lineNum"> 1885 </span><span class="lineCov"> 288815 : while (v_pos &lt; blockmax) {</span>
<span class="lineNum"> 1886 </span> : int bad;
<span class="lineNum"> 1887 </span> : int rehash;
<span class="lineNum"> 1888 </span> : int justsynced;
@ -1952,15 +1952,15 @@
<span class="lineNum"> 1890 </span> : uint32_t flag;
<span class="lineNum"> 1891 </span> : uint32_t v_count;
<span class="lineNum"> 1892 </span> :
<span class="lineNum"> 1893 </span><span class="lineCov"> 284391 : ret = sgetb32(f, &amp;v_count);</span>
<span class="lineNum"> 1894 </span><span class="lineCov"> 284391 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1893 </span><span class="lineCov"> 288347 : ret = sgetb32(f, &amp;v_count);</span>
<span class="lineNum"> 1894 </span><span class="lineCov"> 288347 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1895 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1896 </span> : decoding_error(path, f);
<span class="lineNum"> 1897 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 1898 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1899 </span> : }
<span class="lineNum"> 1900 </span> :
<span class="lineNum"> 1901 </span><span class="lineCov"> 284391 : if (v_pos + v_count &gt; blockmax) {</span>
<span class="lineNum"> 1901 </span><span class="lineCov"> 288347 : if (v_pos + v_count &gt; blockmax) {</span>
<span class="lineNum"> 1902 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1903 </span> : log_fatal(&quot;Internal inconsistency in info size %u/%u!\n&quot;, blockmax, v_pos + v_count);
<span class="lineNum"> 1904 </span> : decoding_error(path, f);
@ -1968,8 +1968,8 @@
<span class="lineNum"> 1906 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1907 </span> : }
<span class="lineNum"> 1908 </span> :
<span class="lineNum"> 1909 </span><span class="lineCov"> 284391 : ret = sgetb32(f, &amp;flag);</span>
<span class="lineNum"> 1910 </span><span class="lineCov"> 284391 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1909 </span><span class="lineCov"> 288347 : ret = sgetb32(f, &amp;flag);</span>
<span class="lineNum"> 1910 </span><span class="lineCov"> 288347 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1911 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1912 </span> : decoding_error(path, f);
<span class="lineNum"> 1913 </span> : exit(EXIT_FAILURE);
@ -1977,10 +1977,10 @@
<span class="lineNum"> 1915 </span> : }
<span class="lineNum"> 1916 </span> :
<span class="lineNum"> 1917 </span> : /* if there is an info */
<span class="lineNum"> 1918 </span><span class="lineCov"> 284391 : if ((flag &amp; 1) != 0) {</span>
<span class="lineNum"> 1918 </span><span class="lineCov"> 288347 : if ((flag &amp; 1) != 0) {</span>
<span class="lineNum"> 1919 </span> : /* read the time */
<span class="lineNum"> 1920 </span><span class="lineCov"> 284376 : ret = sgetb32(f, &amp;t);</span>
<span class="lineNum"> 1921 </span><span class="lineCov"> 284376 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1920 </span><span class="lineCov"> 288332 : ret = sgetb32(f, &amp;t);</span>
<span class="lineNum"> 1921 </span><span class="lineCov"> 288332 : if (ret &lt; 0) {</span>
<span class="lineNum"> 1922 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1923 </span> : decoding_error(path, f);
<span class="lineNum"> 1924 </span> : exit(EXIT_FAILURE);
@ -1988,11 +1988,11 @@
<span class="lineNum"> 1926 </span> : }
<span class="lineNum"> 1927 </span> :
<span class="lineNum"> 1928 </span> : /* analyze the flags */
<span class="lineNum"> 1929 </span><span class="lineCov"> 284376 : bad = (flag &amp; 2) != 0;</span>
<span class="lineNum"> 1930 </span><span class="lineCov"> 284376 : rehash = (flag &amp; 4) != 0;</span>
<span class="lineNum"> 1931 </span><span class="lineCov"> 284376 : justsynced = (flag &amp; 8) != 0;</span>
<span class="lineNum"> 1929 </span><span class="lineCov"> 288332 : bad = (flag &amp; 2) != 0;</span>
<span class="lineNum"> 1930 </span><span class="lineCov"> 288332 : rehash = (flag &amp; 4) != 0;</span>
<span class="lineNum"> 1931 </span><span class="lineCov"> 288332 : justsynced = (flag &amp; 8) != 0;</span>
<span class="lineNum"> 1932 </span> :
<span class="lineNum"> 1933 </span><span class="lineCov"> 284376 : if (rehash &amp;&amp; state-&gt;prevhash == HASH_UNDEFINED) {</span>
<span class="lineNum"> 1933 </span><span class="lineCov"> 288332 : if (rehash &amp;&amp; state-&gt;prevhash == HASH_UNDEFINED) {</span>
<span class="lineNum"> 1934 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1935 </span> : decoding_error(path, f);
<span class="lineNum"> 1936 </span> : log_fatal(&quot;Internal inconsistency for missing previous checksum!\n&quot;);
@ -2000,12 +2000,12 @@
<span class="lineNum"> 1938 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1939 </span> : }
<span class="lineNum"> 1940 </span> :
<span class="lineNum"> 1941 </span><span class="lineCov"> 284376 : info = info_make(t + v_oldest, bad, rehash, justsynced);</span>
<span class="lineNum"> 1941 </span><span class="lineCov"> 288332 : info = info_make(t + v_oldest, bad, rehash, justsynced);</span>
<span class="lineNum"> 1942 </span> : } else {
<span class="lineNum"> 1943 </span><span class="lineCov"> 15 : info = 0;</span>
<span class="lineNum"> 1944 </span> : }
<span class="lineNum"> 1945 </span> :
<span class="lineNum"> 1946 </span><span class="lineCov"> 2060602 : while (v_count) {</span>
<span class="lineNum"> 1946 </span><span class="lineCov"> 2068514 : while (v_count) {</span>
<span class="lineNum"> 1947 </span> : /* insert the info in the array */
<span class="lineNum"> 1948 </span><span class="lineCov"> 1491820 : info_set(&amp;state-&gt;infoarr, v_pos, info);</span>
<span class="lineNum"> 1949 </span> :
@ -2028,7 +2028,7 @@
<span class="lineNum"> 1966 </span><span class="lineCov"> 1491820 : --v_count;</span>
<span class="lineNum"> 1967 </span> : }
<span class="lineNum"> 1968 </span> : }
<span class="lineNum"> 1969 </span><span class="lineCov"> 118677 : } else if (c == 'h') {</span>
<span class="lineNum"> 1969 </span><span class="lineCov"> 118678 : } else if (c == 'h') {</span>
<span class="lineNum"> 1970 </span> : /* hole */
<span class="lineNum"> 1971 </span> : uint32_t v_pos;
<span class="lineNum"> 1972 </span> : struct snapraid_disk* disk;
@ -2074,7 +2074,7 @@
<span class="lineNum"> 2012 </span> : /* if it's a run of deleted blocks */
<span class="lineNum"> 2013 </span> :
<span class="lineNum"> 2014 </span> : /* allocate a fake deleted file */
<span class="lineNum"> 2015 </span><span class="lineCov"> 36 : deleted = file_alloc(state-&gt;block_size, &quot;&lt;deleted&gt;&quot;, v_count * state-&gt;block_size, 0, 0, 0, 0);</span>
<span class="lineNum"> 2015 </span><span class="lineCov"> 36 : deleted = file_alloc(state-&gt;block_size, &quot;&lt;deleted&gt;&quot;, v_count * (data_off_t)state-&gt;block_size, 0, 0, 0, 0);</span>
<span class="lineNum"> 2016 </span> :
<span class="lineNum"> 2017 </span> : /* mark the file as deleted */
<span class="lineNum"> 2018 </span><span class="lineCov"> 36 : file_flag_set(deleted, FILE_IS_DELETED);</span>
@ -2126,7 +2126,7 @@
<span class="lineNum"> 2064 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 2065 </span> : }
<span class="lineNum"> 2066 </span> : }
<span class="lineNum"> 2067 </span><span class="lineCov"> 117378 : } else if (c == 's') {</span>
<span class="lineNum"> 2067 </span><span class="lineCov"> 117379 : } else if (c == 's') {</span>
<span class="lineNum"> 2068 </span> : /* symlink */
<span class="lineNum"> 2069 </span> : char sub[PATH_MAX];
<span class="lineNum"> 2070 </span> : char linkto[PATH_MAX];
@ -2176,7 +2176,7 @@
<span class="lineNum"> 2114 </span> :
<span class="lineNum"> 2115 </span> : /* stat */
<span class="lineNum"> 2116 </span><span class="lineCov"> 112395 : ++count_symlink;</span>
<span class="lineNum"> 2117 </span><span class="lineCov"> 4983 : } else if (c == 'a') {</span>
<span class="lineNum"> 2117 </span><span class="lineCov"> 4984 : } else if (c == 'a') {</span>
<span class="lineNum"> 2118 </span> : /* hardlink */
<span class="lineNum"> 2119 </span> : char sub[PATH_MAX];
<span class="lineNum"> 2120 </span> : char linkto[PATH_MAX];
@ -2226,7 +2226,7 @@
<span class="lineNum"> 2164 </span> :
<span class="lineNum"> 2165 </span> : /* stat */
<span class="lineNum"> 2166 </span><span class="lineCov"> 567 : ++count_hardlink;</span>
<span class="lineNum"> 2167 </span><span class="lineCov"> 4416 : } else if (c == 'r') {</span>
<span class="lineNum"> 2167 </span><span class="lineCov"> 4417 : } else if (c == 'r') {</span>
<span class="lineNum"> 2168 </span> : /* dir */
<span class="lineNum"> 2169 </span> : char sub[PATH_MAX];
<span class="lineNum"> 2170 </span> : struct snapraid_dir* dir;
@ -2267,7 +2267,7 @@
<span class="lineNum"> 2205 </span> :
<span class="lineNum"> 2206 </span> : /* stat */
<span class="lineNum"> 2207 </span><span class="lineCov"> 750 : ++count_dir;</span>
<span class="lineNum"> 2208 </span><span class="lineCov"> 3666 : } else if (c == 'c') {</span>
<span class="lineNum"> 2208 </span><span class="lineCov"> 3667 : } else if (c == 'c') {</span>
<span class="lineNum"> 2209 </span> : /* get the subcommand */
<span class="lineNum"> 2210 </span><span class="lineCov"> 235 : c = sgetc(f);</span>
<span class="lineNum"> 2211 </span> :
@ -2294,7 +2294,7 @@
<span class="lineNum"> 2232 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 2233 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 2234 </span> : }
<span class="lineNum"> 2235 </span><span class="lineCov"> 3431 : } else if (c == 'C') {</span>
<span class="lineNum"> 2235 </span><span class="lineCov"> 3432 : } else if (c == 'C') {</span>
<span class="lineNum"> 2236 </span> : /* get the subcommand */
<span class="lineNum"> 2237 </span><span class="lineCov"> 87 : c = sgetc(f);</span>
<span class="lineNum"> 2238 </span> :
@ -2321,7 +2321,7 @@
<span class="lineNum"> 2259 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 2260 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 2261 </span> : }
<span class="lineNum"> 2262 </span><span class="lineCov"> 3344 : } else if (c == 'z') {</span>
<span class="lineNum"> 2262 </span><span class="lineCov"> 3345 : } else if (c == 'z') {</span>
<span class="lineNum"> 2263 </span> : block_off_t blksize;
<span class="lineNum"> 2264 </span> :
<span class="lineNum"> 2265 </span><span class="lineCov"> 235 : ret = sgetb32(f, &amp;blksize);</span>
@ -2345,7 +2345,7 @@
<span class="lineNum"> 2283 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 2284 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 2285 </span> : }
<span class="lineNum"> 2286 </span><span class="lineCov"> 3109 : } else if (c == 'x') {</span>
<span class="lineNum"> 2286 </span><span class="lineCov"> 3110 : } else if (c == 'x') {</span>
<span class="lineNum"> 2287 </span><span class="lineCov"> 235 : ret = sgetb32(f, &amp;blockmax);</span>
<span class="lineNum"> 2288 </span><span class="lineCov"> 235 : if (ret &lt; 0) {</span>
<span class="lineNum"> 2289 </span> : /* LCOV_EXCL_START */
@ -2353,7 +2353,7 @@
<span class="lineNum"> 2291 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 2292 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 2293 </span> : }
<span class="lineNum"> 2294 </span><span class="lineCov"> 4179 : } else if (c == 'm' || c == 'M') {</span>
<span class="lineNum"> 2294 </span><span class="lineCov"> 4180 : } else if (c == 'm' || c == 'M') {</span>
<span class="lineNum"> 2295 </span> : struct snapraid_map* map;
<span class="lineNum"> 2296 </span> : char uuid[UUID_MAX];
<span class="lineNum"> 2297 </span> : uint32_t v_pos;
@ -2427,7 +2427,7 @@
<span class="lineNum"> 2365 </span><span class="lineCov"> 1305 : tommy_array_grow(&amp;disk_mapping, mapping_max + 1);</span>
<span class="lineNum"> 2366 </span><span class="lineCov"> 1305 : tommy_array_set(&amp;disk_mapping, mapping_max, disk);</span>
<span class="lineNum"> 2367 </span><span class="lineCov"> 1305 : ++mapping_max;</span>
<span class="lineNum"> 2368 </span><span class="lineCov"> 1569 : } else if (c == 'P') {</span>
<span class="lineNum"> 2368 </span><span class="lineCov"> 1570 : } else if (c == 'P') {</span>
<span class="lineNum"> 2369 </span> : /* from SnapRAID 7.0 the 'P' command includes the free space */
<span class="lineNum"> 2370 </span> : char uuid[UUID_MAX];
<span class="lineNum"> 2371 </span> : uint32_t v_level;
@ -2477,7 +2477,7 @@
<span class="lineNum"> 2415 </span><span class="lineCov"> 1081 : state-&gt;parity[v_level].total_blocks = v_total_blocks;</span>
<span class="lineNum"> 2416 </span><span class="lineCov"> 1081 : state-&gt;parity[v_level].free_blocks = v_free_blocks;</span>
<span class="lineNum"> 2417 </span> : }
<span class="lineNum"> 2418 </span><span class="lineCov"> 234 : } else if (c == 'N') {</span>
<span class="lineNum"> 2418 </span><span class="lineCov"> 235 : } else if (c == 'N') {</span>
<span class="lineNum"> 2419 </span> : uint32_t crc_stored;
<span class="lineNum"> 2420 </span> : uint32_t crc_computed;
<span class="lineNum"> 2421 </span> :
@ -2511,7 +2511,7 @@
<span class="lineNum"> 2449 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 2450 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 2451 </span> : }
<span class="lineNum"> 2452 </span><span class="lineCov"> 3604746 : }</span>
<span class="lineNum"> 2452 </span><span class="lineCov"> 3604826 : }</span>
<span class="lineNum"> 2453 </span> :
<span class="lineNum"> 2454 </span><span class="lineCov"> 234 : tommy_array_done(&amp;disk_mapping);</span>
<span class="lineNum"> 2455 </span> :
@ -2702,7 +2702,7 @@
<span class="lineNum"> 2640 </span><span class="lineCov"> 5428 : sputb32(l, f);</span>
<span class="lineNum"> 2641 </span><span class="lineCov"> 5428 : sputb32(state-&gt;parity[l].total_blocks, f);</span>
<span class="lineNum"> 2642 </span><span class="lineCov"> 5428 : sputb32(state-&gt;parity[l].free_blocks, f);</span>
<span class="lineNum"> 2643 </span><span class="lineCov"> 5428 : sputbs(state-&gt;parity[l].uuid, f);</span>
<span class="lineNum"> 2643 </span><span class="lineCov"> 5427 : sputbs(state-&gt;parity[l].uuid, f);</span>
<span class="lineNum"> 2644 </span><span class="lineCov"> 5428 : if (serror(f)) {</span>
<span class="lineNum"> 2645 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 2646 </span> : log_fatal(&quot;Error writing the content file '%s'. %s.\n&quot;, serrorfile(f), strerror(errno));
@ -2729,30 +2729,30 @@
<span class="lineNum"> 2667 </span><span class="lineCov"> 441 : continue;</span>
<span class="lineNum"> 2668 </span> :
<span class="lineNum"> 2669 </span> : /* for each file */
<span class="lineNum"> 2670 </span><span class="lineCov"> 11587893 : for (j = disk-&gt;filelist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 2671 </span><span class="lineCov"> 11582856 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 2670 </span><span class="lineCov"> 11578188 : for (j = disk-&gt;filelist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 2671 </span><span class="lineCov"> 11573152 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 2672 </span> : uint64_t size;
<span class="lineNum"> 2673 </span> : uint64_t mtime_sec;
<span class="lineNum"> 2674 </span> : int32_t mtime_nsec;
<span class="lineNum"> 2675 </span> : uint64_t inode;
<span class="lineNum"> 2676 </span> :
<span class="lineNum"> 2677 </span><span class="lineCov"> 11582856 : size = file-&gt;size;</span>
<span class="lineNum"> 2678 </span><span class="lineCov"> 11582856 : mtime_sec = file-&gt;mtime_sec;</span>
<span class="lineNum"> 2679 </span><span class="lineCov"> 11582856 : mtime_nsec = file-&gt;mtime_nsec;</span>
<span class="lineNum"> 2680 </span><span class="lineCov"> 11582856 : inode = file-&gt;inode;</span>
<span class="lineNum"> 2677 </span><span class="lineCov"> 11573152 : size = file-&gt;size;</span>
<span class="lineNum"> 2678 </span><span class="lineCov"> 11573152 : mtime_sec = file-&gt;mtime_sec;</span>
<span class="lineNum"> 2679 </span><span class="lineCov"> 11573152 : mtime_nsec = file-&gt;mtime_nsec;</span>
<span class="lineNum"> 2680 </span><span class="lineCov"> 11573152 : inode = file-&gt;inode;</span>
<span class="lineNum"> 2681 </span> :
<span class="lineNum"> 2682 </span><span class="lineCov"> 11582856 : sputc('f', f);</span>
<span class="lineNum"> 2683 </span><span class="lineCov"> 11521097 : sputb32(disk-&gt;mapping_idx, f);</span>
<span class="lineNum"> 2684 </span><span class="lineCov"> 11524134 : sputb64(size, f);</span>
<span class="lineNum"> 2685 </span><span class="lineCov"> 11502453 : sputb64(mtime_sec, f);</span>
<span class="lineNum"> 2682 </span><span class="lineCov"> 11573152 : sputc('f', f);</span>
<span class="lineNum"> 2683 </span><span class="lineCov"> 11523322 : sputb32(disk-&gt;mapping_idx, f);</span>
<span class="lineNum"> 2684 </span><span class="lineCov"> 11531504 : sputb64(size, f);</span>
<span class="lineNum"> 2685 </span><span class="lineCov"> 11543059 : sputb64(mtime_sec, f);</span>
<span class="lineNum"> 2686 </span> : /* encode STAT_NSEC_INVALID as 0 */
<span class="lineNum"> 2687 </span><span class="lineCov"> 11514392 : if (mtime_nsec == STAT_NSEC_INVALID)</span>
<span class="lineNum"> 2687 </span><span class="lineCov"> 11521684 : if (mtime_nsec == STAT_NSEC_INVALID)</span>
<span class="lineNum"> 2688 </span><span class="lineNoCov"> 0 : sputb32(0, f);</span>
<span class="lineNum"> 2689 </span> : else
<span class="lineNum"> 2690 </span><span class="lineCov"> 11514392 : sputb32(mtime_nsec + 1, f);</span>
<span class="lineNum"> 2691 </span><span class="lineCov"> 11535535 : sputb64(inode, f);</span>
<span class="lineNum"> 2692 </span><span class="lineCov"> 11530269 : sputbs(file-&gt;sub, f);</span>
<span class="lineNum"> 2693 </span><span class="lineCov"> 11528881 : if (serror(f)) {</span>
<span class="lineNum"> 2690 </span><span class="lineCov"> 11521684 : sputb32(mtime_nsec + 1, f);</span>
<span class="lineNum"> 2691 </span><span class="lineCov"> 11530611 : sputb64(inode, f);</span>
<span class="lineNum"> 2692 </span><span class="lineCov"> 11526825 : sputbs(file-&gt;sub, f);</span>
<span class="lineNum"> 2693 </span><span class="lineCov"> 11546662 : if (serror(f)) {</span>
<span class="lineNum"> 2694 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 2695 </span> : log_fatal(&quot;Error writing the content file '%s'. %s.\n&quot;, serrorfile(f), strerror(errno));
<span class="lineNum"> 2696 </span> : goto bail;
@ -2760,34 +2760,34 @@
<span class="lineNum"> 2698 </span> : }
<span class="lineNum"> 2699 </span> :
<span class="lineNum"> 2700 </span> : /* for all the blocks of the file */
<span class="lineNum"> 2701 </span><span class="lineCov"> 11541902 : begin = 0;</span>
<span class="lineNum"> 2702 </span><span class="lineCov"> 34727907 : while (begin &lt; file-&gt;blockmax) {</span>
<span class="lineNum"> 2703 </span><span class="lineCov"> 11603149 : unsigned v_state = block_state_get(fs_file2block_get(file, begin));</span>
<span class="lineNum"> 2704 </span><span class="lineCov"> 11623161 : block_off_t v_pos = fs_file2par_get_ts(disk, &amp;fs_last, file, begin);</span>
<span class="lineNum"> 2701 </span><span class="lineCov"> 11560751 : begin = 0;</span>
<span class="lineNum"> 2702 </span><span class="lineCov"> 34754559 : while (begin &lt; file-&gt;blockmax) {</span>
<span class="lineNum"> 2703 </span><span class="lineCov"> 11620657 : unsigned v_state = block_state_get(fs_file2block_get(file, begin));</span>
<span class="lineNum"> 2704 </span><span class="lineCov"> 11635419 : block_off_t v_pos = fs_file2par_get_ts(disk, &amp;fs_last, file, begin);</span>
<span class="lineNum"> 2705 </span> : uint32_t v_count;
<span class="lineNum"> 2706 </span> :
<span class="lineNum"> 2707 </span> : block_off_t end;
<span class="lineNum"> 2708 </span> :
<span class="lineNum"> 2709 </span> : /* find the end of run of blocks */
<span class="lineNum"> 2710 </span><span class="lineCov"> 11615466 : end = begin + 1;</span>
<span class="lineNum"> 2711 </span><span class="lineCov"> 39962808 : while (end &lt; file-&gt;blockmax) {</span>
<span class="lineNum"> 2712 </span><span class="lineCov"> 16803655 : if (v_state != block_state_get(fs_file2block_get(file, end)))</span>
<span class="lineNum"> 2710 </span><span class="lineCov"> 11602915 : end = begin + 1;</span>
<span class="lineNum"> 2711 </span><span class="lineCov"> 40021161 : while (end &lt; file-&gt;blockmax) {</span>
<span class="lineNum"> 2712 </span><span class="lineCov"> 16868038 : if (v_state != block_state_get(fs_file2block_get(file, end)))</span>
<span class="lineNum"> 2713 </span><span class="lineCov"> 63 : break;</span>
<span class="lineNum"> 2714 </span><span class="lineCov"> 16856743 : if (v_pos + (end - begin) != fs_file2par_get_ts(disk, &amp;fs_last, file, end))</span>
<span class="lineNum"> 2715 </span><span class="lineCov"> 82936 : break;</span>
<span class="lineNum"> 2716 </span><span class="lineCov"> 16731876 : ++end;</span>
<span class="lineNum"> 2714 </span><span class="lineCov"> 16887534 : if (v_pos + (end - begin) != fs_file2par_get_ts(disk, &amp;fs_last, file, end))</span>
<span class="lineNum"> 2715 </span><span class="lineCov"> 83317 : break;</span>
<span class="lineNum"> 2716 </span><span class="lineCov"> 16815331 : ++end;</span>
<span class="lineNum"> 2717 </span> : }
<span class="lineNum"> 2718 </span> :
<span class="lineNum"> 2719 </span><span class="lineCov"> 11626686 : switch (v_state) {</span>
<span class="lineNum"> 2719 </span><span class="lineCov"> 11633588 : switch (v_state) {</span>
<span class="lineNum"> 2720 </span> : case BLOCK_STATE_BLK :
<span class="lineNum"> 2721 </span><span class="lineCov"> 10916510 : sputc('b', f);</span>
<span class="lineNum"> 2722 </span><span class="lineCov"> 10892646 : break;</span>
<span class="lineNum"> 2721 </span><span class="lineCov"> 10922665 : sputc('b', f);</span>
<span class="lineNum"> 2722 </span><span class="lineCov"> 10930254 : break;</span>
<span class="lineNum"> 2723 </span> : case BLOCK_STATE_CHG :
<span class="lineNum"> 2724 </span><span class="lineCov"> 558744 : sputc('g', f);</span>
<span class="lineNum"> 2725 </span><span class="lineCov"> 558725 : break;</span>
<span class="lineNum"> 2724 </span><span class="lineCov"> 559524 : sputc('g', f);</span>
<span class="lineNum"> 2725 </span><span class="lineCov"> 559519 : break;</span>
<span class="lineNum"> 2726 </span> : case BLOCK_STATE_REP :
<span class="lineNum"> 2727 </span><span class="lineCov"> 151432 : sputc('p', f);</span>
<span class="lineNum"> 2728 </span><span class="lineCov"> 151433 : break;</span>
<span class="lineNum"> 2727 </span><span class="lineCov"> 151399 : sputc('p', f);</span>
<span class="lineNum"> 2728 </span><span class="lineCov"> 151402 : break;</span>
<span class="lineNum"> 2729 </span> : default :
<span class="lineNum"> 2730 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 2731 </span> : log_fatal(&quot;Internal inconsistency in state for block %u state %u\n&quot;, v_pos, v_state);
@ -2795,19 +2795,19 @@
<span class="lineNum"> 2733 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 2734 </span> : }
<span class="lineNum"> 2735 </span> :
<span class="lineNum"> 2736 </span><span class="lineCov"> 11602804 : sputb32(v_pos, f);</span>
<span class="lineNum"> 2736 </span><span class="lineCov"> 11641175 : sputb32(v_pos, f);</span>
<span class="lineNum"> 2737 </span> :
<span class="lineNum"> 2738 </span><span class="lineCov"> 11631290 : v_count = end - begin;</span>
<span class="lineNum"> 2739 </span><span class="lineCov"> 11631290 : sputb32(v_count, f);</span>
<span class="lineNum"> 2738 </span><span class="lineCov"> 11622679 : v_count = end - begin;</span>
<span class="lineNum"> 2739 </span><span class="lineCov"> 11622679 : sputb32(v_count, f);</span>
<span class="lineNum"> 2740 </span> :
<span class="lineNum"> 2741 </span> : /* write hashes */
<span class="lineNum"> 2742 </span><span class="lineCov"> 39802834 : for (idx = begin; idx &lt; end; ++idx) {</span>
<span class="lineNum"> 2743 </span><span class="lineCov"> 28167488 : struct snapraid_block* block = fs_file2block_get(file, idx);</span>
<span class="lineNum"> 2742 </span><span class="lineCov"> 39768736 : for (idx = begin; idx &lt; end; ++idx) {</span>
<span class="lineNum"> 2743 </span><span class="lineCov"> 28155837 : struct snapraid_block* block = fs_file2block_get(file, idx);</span>
<span class="lineNum"> 2744 </span> :
<span class="lineNum"> 2745 </span><span class="lineCov"> 28196345 : swrite(block-&gt;hash, HASH_SIZE, f);</span>
<span class="lineNum"> 2745 </span><span class="lineCov"> 28133584 : swrite(block-&gt;hash, HASH_SIZE, f);</span>
<span class="lineNum"> 2746 </span> : }
<span class="lineNum"> 2747 </span> :
<span class="lineNum"> 2748 </span><span class="lineCov"> 11635346 : if (serror(f)) {</span>
<span class="lineNum"> 2748 </span><span class="lineCov"> 11612899 : if (serror(f)) {</span>
<span class="lineNum"> 2749 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 2750 </span> : log_fatal(&quot;Error writing the content file '%s'. %s.\n&quot;, serrorfile(f), strerror(errno));
<span class="lineNum"> 2751 </span> : goto bail;
@ -2815,31 +2815,31 @@
<span class="lineNum"> 2753 </span> : }
<span class="lineNum"> 2754 </span> :
<span class="lineNum"> 2755 </span> : /* next begin position */
<span class="lineNum"> 2756 </span><span class="lineCov"> 11644103 : begin = end;</span>
<span class="lineNum"> 2756 </span><span class="lineCov"> 11633057 : begin = end;</span>
<span class="lineNum"> 2757 </span> : }
<span class="lineNum"> 2758 </span> :
<span class="lineNum"> 2759 </span><span class="lineCov"> 11582856 : ++count_file;</span>
<span class="lineNum"> 2759 </span><span class="lineCov"> 11573151 : ++count_file;</span>
<span class="lineNum"> 2760 </span> : }
<span class="lineNum"> 2761 </span> :
<span class="lineNum"> 2762 </span> : /* for each link */
<span class="lineNum"> 2763 </span><span class="lineCov"> 385486 : for (j = disk-&gt;linklist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 2764 </span><span class="lineCov"> 380449 : struct snapraid_link* slink = j-&gt;data;</span>
<span class="lineNum"> 2763 </span><span class="lineCov"> 385485 : for (j = disk-&gt;linklist; j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 2764 </span><span class="lineCov"> 380448 : struct snapraid_link* slink = j-&gt;data;</span>
<span class="lineNum"> 2765 </span> :
<span class="lineNum"> 2766 </span><span class="lineCov"> 380449 : switch (link_flag_get(slink, FILE_IS_LINK_MASK)) {</span>
<span class="lineNum"> 2766 </span><span class="lineCov"> 380448 : switch (link_flag_get(slink, FILE_IS_LINK_MASK)) {</span>
<span class="lineNum"> 2767 </span> : case FILE_IS_HARDLINK :
<span class="lineNum"> 2768 </span><span class="lineCov"> 2046 : sputc('a', f);</span>
<span class="lineNum"> 2769 </span><span class="lineCov"> 2046 : ++count_hardlink;</span>
<span class="lineNum"> 2770 </span><span class="lineCov"> 2046 : break;</span>
<span class="lineNum"> 2771 </span> : case FILE_IS_SYMLINK :
<span class="lineNum"> 2772 </span><span class="lineCov"> 378355 : sputc('s', f);</span>
<span class="lineNum"> 2773 </span><span class="lineCov"> 378402 : ++count_symlink;</span>
<span class="lineNum"> 2774 </span><span class="lineCov"> 378402 : break;</span>
<span class="lineNum"> 2772 </span><span class="lineCov"> 378402 : sputc('s', f);</span>
<span class="lineNum"> 2773 </span><span class="lineCov"> 378020 : ++count_symlink;</span>
<span class="lineNum"> 2774 </span><span class="lineCov"> 378020 : break;</span>
<span class="lineNum"> 2775 </span> : }
<span class="lineNum"> 2776 </span> :
<span class="lineNum"> 2777 </span><span class="lineCov"> 380132 : sputb32(disk-&gt;mapping_idx, f);</span>
<span class="lineNum"> 2778 </span><span class="lineCov"> 380405 : sputbs(slink-&gt;sub, f);</span>
<span class="lineNum"> 2779 </span><span class="lineCov"> 380450 : sputbs(slink-&gt;linkto, f);</span>
<span class="lineNum"> 2780 </span><span class="lineCov"> 380448 : if (serror(f)) {</span>
<span class="lineNum"> 2777 </span><span class="lineCov"> 380066 : sputb32(disk-&gt;mapping_idx, f);</span>
<span class="lineNum"> 2778 </span><span class="lineCov"> 380422 : sputbs(slink-&gt;sub, f);</span>
<span class="lineNum"> 2779 </span><span class="lineCov"> 380445 : sputbs(slink-&gt;linkto, f);</span>
<span class="lineNum"> 2780 </span><span class="lineCov"> 380449 : if (serror(f)) {</span>
<span class="lineNum"> 2781 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 2782 </span> : log_fatal(&quot;Error writing the content file '%s'. %s.\n&quot;, serrorfile(f), strerror(errno));
<span class="lineNum"> 2783 </span> : goto bail;
@ -2881,11 +2881,11 @@
<span class="lineNum"> 2819 </span><span class="lineCov"> 5569 : is_deleted = fs_is_block_deleted_ts(disk, &amp;fs_last, begin);</span>
<span class="lineNum"> 2820 </span> :
<span class="lineNum"> 2821 </span> : /* find the end of run of blocks */
<span class="lineNum"> 2822 </span><span class="lineCov"> 5568 : end = begin + 1;</span>
<span class="lineNum"> 2823 </span><span class="lineCov"> 29329135 : while (end &lt; blockmax</span>
<span class="lineNum"> 2824 </span><span class="lineCov"> 29372732 : &amp;&amp; is_deleted == fs_is_block_deleted_ts(disk, &amp;fs_last, end)</span>
<span class="lineNum"> 2822 </span><span class="lineCov"> 5569 : end = begin + 1;</span>
<span class="lineNum"> 2823 </span><span class="lineCov"> 29396439 : while (end &lt; blockmax</span>
<span class="lineNum"> 2824 </span><span class="lineCov"> 29341613 : &amp;&amp; is_deleted == fs_is_block_deleted_ts(disk, &amp;fs_last, end)</span>
<span class="lineNum"> 2825 </span> : ) {
<span class="lineNum"> 2826 </span><span class="lineCov"> 29317999 : ++end;</span>
<span class="lineNum"> 2826 </span><span class="lineCov"> 29385301 : ++end;</span>
<span class="lineNum"> 2827 </span> : }
<span class="lineNum"> 2828 </span> :
<span class="lineNum"> 2829 </span><span class="lineNoCov"> 0 : sputb32(end - begin, f);</span>
@ -2923,45 +2923,45 @@
<span class="lineNum"> 2861 </span> : /* write the info for each block */
<span class="lineNum"> 2862 </span><span class="lineCov"> 913 : sputc('i', f);</span>
<span class="lineNum"> 2863 </span><span class="lineCov"> 913 : sputb32(info_oldest, f);</span>
<span class="lineNum"> 2864 </span><span class="lineCov"> 8223 : begin = 0;</span>
<span class="lineNum"> 2865 </span><span class="lineCov"> 1418395 : while (begin &lt; blockmax) {</span>
<span class="lineNum"> 2864 </span><span class="lineCov"> 929 : begin = 0;</span>
<span class="lineNum"> 2865 </span><span class="lineCov"> 1427365 : while (begin &lt; blockmax) {</span>
<span class="lineNum"> 2866 </span> : snapraid_info info;
<span class="lineNum"> 2867 </span> : block_off_t end;
<span class="lineNum"> 2868 </span> : time_t t;
<span class="lineNum"> 2869 </span> : unsigned flag;
<span class="lineNum"> 2870 </span> :
<span class="lineNum"> 2871 </span><span class="lineCov"> 1409259 : info = info_get(&amp;state-&gt;infoarr, begin);</span>
<span class="lineNum"> 2871 </span><span class="lineCov"> 1425523 : info = info_get(&amp;state-&gt;infoarr, begin);</span>
<span class="lineNum"> 2872 </span> :
<span class="lineNum"> 2873 </span> : /* find the end of run of blocks */
<span class="lineNum"> 2874 </span><span class="lineCov"> 1408072 : end = begin + 1;</span>
<span class="lineNum"> 2875 </span><span class="lineCov"> 6328564 : while (end &lt; blockmax</span>
<span class="lineNum"> 2876 </span><span class="lineCov"> 4918189 : &amp;&amp; info == info_get(&amp;state-&gt;infoarr, end)</span>
<span class="lineNum"> 2874 </span><span class="lineCov"> 1426289 : end = begin + 1;</span>
<span class="lineNum"> 2875 </span><span class="lineCov"> 6350808 : while (end &lt; blockmax</span>
<span class="lineNum"> 2876 </span><span class="lineCov"> 4922834 : &amp;&amp; info == info_get(&amp;state-&gt;infoarr, end)</span>
<span class="lineNum"> 2877 </span> : ) {
<span class="lineNum"> 2878 </span><span class="lineCov"> 3512420 : ++end;</span>
<span class="lineNum"> 2878 </span><span class="lineCov"> 3498230 : ++end;</span>
<span class="lineNum"> 2879 </span> : }
<span class="lineNum"> 2880 </span> :
<span class="lineNum"> 2881 </span><span class="lineCov"> 1407793 : sputb32(end - begin, f);</span>
<span class="lineNum"> 2881 </span><span class="lineCov"> 1427382 : sputb32(end - begin, f);</span>
<span class="lineNum"> 2882 </span> :
<span class="lineNum"> 2883 </span> : /* if there is info */
<span class="lineNum"> 2884 </span><span class="lineCov"> 1408365 : if (info) {</span>
<span class="lineNum"> 2884 </span><span class="lineCov"> 1426642 : if (info) {</span>
<span class="lineNum"> 2885 </span> : /* other flags */
<span class="lineNum"> 2886 </span><span class="lineCov"> 1408235 : flag = 1; /* info is present */</span>
<span class="lineNum"> 2887 </span><span class="lineCov"> 1408235 : if (info_get_bad(info))</span>
<span class="lineNum"> 2888 </span><span class="lineCov"> 9500 : flag |= 2;</span>
<span class="lineNum"> 2889 </span><span class="lineCov"> 1407263 : if (info_get_rehash(info))</span>
<span class="lineNum"> 2890 </span><span class="lineCov"> 673630 : flag |= 4;</span>
<span class="lineNum"> 2891 </span><span class="lineCov"> 1406735 : if (info_get_justsynced(info))</span>
<span class="lineNum"> 2892 </span><span class="lineCov"> 723766 : flag |= 8;</span>
<span class="lineNum"> 2893 </span><span class="lineCov"> 1398202 : sputb32(flag, f);</span>
<span class="lineNum"> 2886 </span><span class="lineCov"> 1426512 : flag = 1; /* info is present */</span>
<span class="lineNum"> 2887 </span><span class="lineCov"> 1426512 : if (info_get_bad(info))</span>
<span class="lineNum"> 2888 </span><span class="lineCov"> 9590 : flag |= 2;</span>
<span class="lineNum"> 2889 </span><span class="lineCov"> 1425847 : if (info_get_rehash(info))</span>
<span class="lineNum"> 2890 </span><span class="lineCov"> 673003 : flag |= 4;</span>
<span class="lineNum"> 2891 </span><span class="lineCov"> 1425736 : if (info_get_justsynced(info))</span>
<span class="lineNum"> 2892 </span><span class="lineCov"> 724485 : flag |= 8;</span>
<span class="lineNum"> 2893 </span><span class="lineCov"> 1425766 : sputb32(flag, f);</span>
<span class="lineNum"> 2894 </span> :
<span class="lineNum"> 2895 </span><span class="lineCov"> 1408672 : t = info_get_time(info) - info_oldest;</span>
<span class="lineNum"> 2896 </span><span class="lineCov"> 1408134 : sputb32(t, f);</span>
<span class="lineNum"> 2895 </span><span class="lineCov"> 1425741 : t = info_get_time(info) - info_oldest;</span>
<span class="lineNum"> 2896 </span><span class="lineCov"> 1425676 : sputb32(t, f);</span>
<span class="lineNum"> 2897 </span> : } else {
<span class="lineNum"> 2898 </span> : /* write a special 0 flag to mark missing info */
<span class="lineNum"> 2899 </span><span class="lineCov"> 130 : sputb32(0, f);</span>
<span class="lineNum"> 2900 </span> : }
<span class="lineNum"> 2901 </span> :
<span class="lineNum"> 2902 </span><span class="lineCov"> 1409231 : if (serror(f)) {</span>
<span class="lineNum"> 2902 </span><span class="lineCov"> 1425342 : if (serror(f)) {</span>
<span class="lineNum"> 2903 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 2904 </span> : log_fatal(&quot;Error writing the content file '%s'. %s.\n&quot;, serrorfile(f), strerror(errno));
<span class="lineNum"> 2905 </span> : goto bail;
@ -2969,7 +2969,7 @@
<span class="lineNum"> 2907 </span> : }
<span class="lineNum"> 2908 </span> :
<span class="lineNum"> 2909 </span> : /* next begin position */
<span class="lineNum"> 2910 </span><span class="lineCov"> 1401949 : begin = end;</span>
<span class="lineNum"> 2910 </span><span class="lineCov"> 1425507 : begin = end;</span>
<span class="lineNum"> 2911 </span> : }
<span class="lineNum"> 2912 </span> :
<span class="lineNum"> 2913 </span><span class="lineCov"> 913 : sputc('N', f);</span>
@ -3022,7 +3022,7 @@
<span class="lineNum"> 2960 </span> : }
<span class="lineNum"> 2961 </span> : #endif
<span class="lineNum"> 2962 </span> :
<span class="lineNum"> 2963 </span><span class="lineCov"> 912 : if (sclose(f) != 0) {</span>
<span class="lineNum"> 2963 </span><span class="lineCov"> 913 : if (sclose(f) != 0) {</span>
<span class="lineNum"> 2964 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 2965 </span> : f = 0;
<span class="lineNum"> 2966 </span> : log_fatal(&quot;Error closing the content files. %s.\n&quot;, strerror(errno));
@ -3084,7 +3084,7 @@
<span class="lineNum"> 3022 </span><span class="lineCov"> 680773 : time_t info_time = info_get_time(info);</span>
<span class="lineNum"> 3023 </span> :
<span class="lineNum"> 3024 </span><span class="lineCov"> 680773 : if (!info_oldest || info_time &lt; info_oldest)</span>
<span class="lineNum"> 3025 </span><span class="lineCov"> 169 : info_oldest = info_time;</span>
<span class="lineNum"> 3025 </span><span class="lineCov"> 170 : info_oldest = info_time;</span>
<span class="lineNum"> 3026 </span> :
<span class="lineNum"> 3027 </span><span class="lineCov"> 680773 : if (info_get_rehash(info))</span>
<span class="lineNum"> 3028 </span><span class="lineCov"> 108421 : info_has_rehash = 1;</span>
@ -3151,7 +3151,7 @@
<span class="lineNum"> 3089 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 3090 </span> : }
<span class="lineNum"> 3091 </span> : #else
<span class="lineNum"> 3092 </span> : content-&gt;retval = state_write_thread(context);
<span class="lineNum"> 3092 </span> : context-&gt;retval = state_write_thread(context);
<span class="lineNum"> 3093 </span> : #endif
<span class="lineNum"> 3094 </span> :
<span class="lineNum"> 3095 </span><span class="lineCov"> 913 : i = i-&gt;next;</span>
@ -3384,17 +3384,17 @@
<span class="lineNum"> 3322 </span> : uint32_t crc;
<a name="3323"><span class="lineNum"> 3323 </span> : };</a>
<span class="lineNum"> 3324 </span> :
<span class="lineNum"> 3325 </span><span class="lineCov"> 908 : static void* state_verify_thread(void* arg)</span>
<span class="lineNum"> 3325 </span><span class="lineCov"> 912 : static void* state_verify_thread(void* arg)</span>
<span class="lineNum"> 3326 </span> : {
<span class="lineNum"> 3327 </span><span class="lineCov"> 908 : struct state_verify_thread_context* context = arg;</span>
<span class="lineNum"> 3328 </span><span class="lineCov"> 908 : struct snapraid_content* content = context-&gt;content;</span>
<span class="lineNum"> 3327 </span><span class="lineCov"> 912 : struct state_verify_thread_context* context = arg;</span>
<span class="lineNum"> 3328 </span><span class="lineCov"> 912 : struct snapraid_content* content = context-&gt;content;</span>
<span class="lineNum"> 3329 </span> : STREAM* f;
<span class="lineNum"> 3330 </span> : char tmp[PATH_MAX];
<span class="lineNum"> 3331 </span> : unsigned char buf[4];
<span class="lineNum"> 3332 </span> : uint32_t crc_stored;
<span class="lineNum"> 3333 </span> : uint32_t crc_computed;
<span class="lineNum"> 3334 </span> :
<span class="lineNum"> 3335 </span><span class="lineCov"> 908 : pathprint(tmp, sizeof(tmp), &quot;%s.tmp&quot;, content-&gt;content);</span>
<span class="lineNum"> 3335 </span><span class="lineCov"> 912 : pathprint(tmp, sizeof(tmp), &quot;%s.tmp&quot;, content-&gt;content);</span>
<span class="lineNum"> 3336 </span> :
<span class="lineNum"> 3337 </span><span class="lineCov"> 913 : f = sopen_read(tmp);</span>
<span class="lineNum"> 3338 </span><span class="lineCov"> 913 : if (f == 0) {</span>
@ -3631,15 +3631,15 @@
<span class="lineNum"> 3569 </span><span class="lineCov"> 12 : msg_progress(&quot;Scanning disk %s...\n&quot;, disk-&gt;name);</span>
<span class="lineNum"> 3570 </span> :
<span class="lineNum"> 3571 </span> : /* for each file */
<span class="lineNum"> 3572 </span><span class="lineCov"> 133845 : for (j = tommy_list_head(&amp;disk-&gt;filelist); j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 3573 </span><span class="lineCov"> 133791 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 3572 </span><span class="lineCov"> 133854 : for (j = tommy_list_head(&amp;disk-&gt;filelist); j != 0; j = j-&gt;next) {</span>
<span class="lineNum"> 3573 </span><span class="lineCov"> 133800 : struct snapraid_file* file = j-&gt;data;</span>
<span class="lineNum"> 3574 </span> :
<span class="lineNum"> 3575 </span><span class="lineCov"> 133791 : if (filter_path(filterlist_disk, 0, disk-&gt;name, file-&gt;sub) != 0</span>
<span class="lineNum"> 3576 </span><span class="lineCov"> 80918 : || filter_path(filterlist_file, 0, disk-&gt;name, file-&gt;sub) != 0</span>
<span class="lineNum"> 3577 </span><span class="lineCov"> 78085 : || filter_existence(filter_missing, disk-&gt;dir, file-&gt;sub) != 0</span>
<span class="lineNum"> 3578 </span><span class="lineCov"> 38803 : || filter_correctness(filter_error, &amp;state-&gt;infoarr, disk, file) != 0</span>
<span class="lineNum"> 3575 </span><span class="lineCov"> 133800 : if (filter_path(filterlist_disk, 0, disk-&gt;name, file-&gt;sub) != 0</span>
<span class="lineNum"> 3576 </span><span class="lineCov"> 80924 : || filter_path(filterlist_file, 0, disk-&gt;name, file-&gt;sub) != 0</span>
<span class="lineNum"> 3577 </span><span class="lineCov"> 78090 : || filter_existence(filter_missing, disk-&gt;dir, file-&gt;sub) != 0</span>
<span class="lineNum"> 3578 </span><span class="lineCov"> 38806 : || filter_correctness(filter_error, &amp;state-&gt;infoarr, disk, file) != 0</span>
<span class="lineNum"> 3579 </span> : ) {
<span class="lineNum"> 3580 </span><span class="lineCov"> 109060 : file_flag_set(file, FILE_IS_EXCLUDED);</span>
<span class="lineNum"> 3580 </span><span class="lineCov"> 109102 : file_flag_set(file, FILE_IS_EXCLUDED);</span>
<span class="lineNum"> 3581 </span> : }
<span class="lineNum"> 3582 </span> : }
<span class="lineNum"> 3583 </span> :
@ -3776,21 +3776,21 @@
<span class="lineNum"> 3714 </span> :
<a name="3715"><span class="lineNum"> 3715 </span> : #define PROGRESS_CLEAR &quot; &quot;</a>
<span class="lineNum"> 3716 </span> :
<span class="lineNum"> 3717 </span><span class="lineCov"> 1038828 : int state_progress(struct snapraid_state* state, block_off_t blockpos, block_off_t countpos, block_off_t countmax, data_off_t countsize)</span>
<span class="lineNum"> 3717 </span><span class="lineCov"> 1038958 : int state_progress(struct snapraid_state* state, block_off_t blockpos, block_off_t countpos, block_off_t countmax, data_off_t countsize)</span>
<span class="lineNum"> 3718 </span> : {
<span class="lineNum"> 3719 </span> : time_t now;
<span class="lineNum"> 3720 </span> : int pred;
<span class="lineNum"> 3721 </span> :
<span class="lineNum"> 3722 </span><span class="lineCov"> 1038828 : now = time(0);</span>
<span class="lineNum"> 3722 </span><span class="lineCov"> 1038958 : now = time(0);</span>
<span class="lineNum"> 3723 </span> :
<span class="lineNum"> 3724 </span> : /* previous position */
<span class="lineNum"> 3725 </span><span class="lineCov"> 1038828 : pred = state-&gt;progress_ptr + PROGRESS_MAX - 1;</span>
<span class="lineNum"> 3726 </span><span class="lineCov"> 1038828 : if (pred &gt;= PROGRESS_MAX)</span>
<span class="lineNum"> 3727 </span><span class="lineCov"> 1038640 : pred -= PROGRESS_MAX;</span>
<span class="lineNum"> 3725 </span><span class="lineCov"> 1038958 : pred = state-&gt;progress_ptr + PROGRESS_MAX - 1;</span>
<span class="lineNum"> 3726 </span><span class="lineCov"> 1038958 : if (pred &gt;= PROGRESS_MAX)</span>
<span class="lineNum"> 3727 </span><span class="lineCov"> 1038770 : pred -= PROGRESS_MAX;</span>
<span class="lineNum"> 3728 </span> :
<span class="lineNum"> 3729 </span> : /* if the previous measure is different */
<span class="lineNum"> 3730 </span><span class="lineCov"> 1038828 : if (state-&gt;progress_tick == 0</span>
<span class="lineNum"> 3731 </span><span class="lineCov"> 1038640 : || state-&gt;progress_time[pred] != now</span>
<span class="lineNum"> 3730 </span><span class="lineCov"> 1038958 : if (state-&gt;progress_tick == 0</span>
<span class="lineNum"> 3731 </span><span class="lineCov"> 1038770 : || state-&gt;progress_time[pred] != now</span>
<span class="lineNum"> 3732 </span> : ) {
<span class="lineNum"> 3733 </span> : uint64_t tick_total;
<span class="lineNum"> 3734 </span> : uint64_t tick_cpu;
@ -3852,7 +3852,7 @@
<span class="lineNum"> 3790 </span> :
<span class="lineNum"> 3791 </span> : /* estimate the cpu usage percentage */
<span class="lineNum"> 3792 </span><span class="lineCov"> 72 : if (delta_tick_total != 0)</span>
<span class="lineNum"> 3793 </span><span class="lineCov"> 12 : out_cpu = (unsigned)(delta_tick_cpu * 100U / delta_tick_total);</span>
<span class="lineNum"> 3793 </span><span class="lineCov"> 10 : out_cpu = (unsigned)(delta_tick_cpu * 100U / delta_tick_total);</span>
<span class="lineNum"> 3794 </span> :
<span class="lineNum"> 3795 </span> : /* estimate the remaining time in minutes */
<span class="lineNum"> 3796 </span><span class="lineCov"> 72 : if (delta_pos != 0)</span>
@ -3865,11 +3865,11 @@
<span class="lineNum"> 3803 </span> : } else {
<span class="lineNum"> 3804 </span><span class="lineCov"> 253 : msg_bar(&quot;%u%%, %u MiB&quot;, out_perc, (unsigned)(countsize / MEGA));</span>
<span class="lineNum"> 3805 </span><span class="lineCov"> 253 : if (out_speed)</span>
<span class="lineNum"> 3806 </span><span class="lineCov"> 61 : msg_bar(&quot;, %u MiB/s&quot;, out_speed);</span>
<span class="lineNum"> 3806 </span><span class="lineCov"> 63 : msg_bar(&quot;, %u MiB/s&quot;, out_speed);</span>
<span class="lineNum"> 3807 </span><span class="lineCov"> 253 : if (out_cpu)</span>
<span class="lineNum"> 3808 </span><span class="lineCov"> 12 : msg_bar(&quot;, CPU %u%%&quot;, out_cpu);</span>
<span class="lineNum"> 3808 </span><span class="lineCov"> 10 : msg_bar(&quot;, CPU %u%%&quot;, out_cpu);</span>
<span class="lineNum"> 3809 </span><span class="lineCov"> 253 : if (out_eta)</span>
<span class="lineNum"> 3810 </span><span class="lineCov"> 2 : msg_bar(&quot;, %u:%02u ETA&quot;, out_eta / 60, out_eta % 60);</span>
<span class="lineNum"> 3810 </span><span class="lineNoCov"> 0 : msg_bar(&quot;, %u:%02u ETA&quot;, out_eta / 60, out_eta % 60);</span>
<span class="lineNum"> 3811 </span><span class="lineCov"> 253 : msg_bar(&quot;%s\r&quot;, PROGRESS_CLEAR);</span>
<span class="lineNum"> 3812 </span><span class="lineCov"> 253 : msg_flush();</span>
<span class="lineNum"> 3813 </span> : }
@ -3891,7 +3891,7 @@
<span class="lineNum"> 3829 </span> : }
<span class="lineNum"> 3830 </span> :
<span class="lineNum"> 3831 </span> : /* stop if requested */
<span class="lineNum"> 3832 </span><span class="lineCov"> 1038828 : if (global_interrupt) {</span>
<span class="lineNum"> 3832 </span><span class="lineCov"> 1038958 : if (global_interrupt) {</span>
<span class="lineNum"> 3833 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 3834 </span> : if (!state-&gt;opt.gui) {
<span class="lineNum"> 3835 </span> : log_fatal(&quot;\n&quot;);
@ -3903,7 +3903,7 @@
<span class="lineNum"> 3841 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 3842 </span> : }
<span class="lineNum"> 3843 </span> :
<span class="lineNum"> 3844 </span><span class="lineCov"> 1038828 : return 0;</span>
<span class="lineNum"> 3844 </span><span class="lineCov"> 1038958 : return 0;</span>
<a name="3845"><span class="lineNum"> 3845 </span> : }</a>
<span class="lineNum"> 3846 </span> :
<span class="lineNum"> 3847 </span><span class="lineCov"> 81 : void state_usage_print(struct snapraid_state* state)</span>
@ -3919,7 +3919,7 @@
<span class="lineNum"> 3857 </span><span class="lineCov"> 484 : struct snapraid_disk* disk = i-&gt;data;</span>
<span class="lineNum"> 3858 </span><span class="lineCov"> 484 : tick_total += disk-&gt;tick;</span>
<span class="lineNum"> 3859 </span><span class="lineCov"> 484 : if (disk-&gt;tick &gt; tick_max)</span>
<span class="lineNum"> 3860 </span><span class="lineCov"> 100 : tick_max = disk-&gt;tick;</span>
<span class="lineNum"> 3860 </span><span class="lineCov"> 99 : tick_max = disk-&gt;tick;</span>
<span class="lineNum"> 3861 </span> : }
<span class="lineNum"> 3862 </span><span class="lineCov"> 552 : for (l = 0; l &lt; state-&gt;level; ++l) {</span>
<span class="lineNum"> 3863 </span><span class="lineCov"> 471 : tick_total += state-&gt;parity[l].tick;</span>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@ -61,15 +61,15 @@
</tr>
<tr>
<td class="coverFn"><a href="state.h.gcov.html#333">state_usage_cpu</a></td>
<td class="coverFnHi">771844</td>
<td class="coverFnHi">772778</td>
</tr>
<tr>
<td class="coverFn"><a href="state.h.gcov.html#362">state_usage_parity</a></td>
<td class="coverFnHi">652636</td>
<td class="coverFnHi">653350</td>
</tr>
<tr>
<td class="coverFn"><a href="state.h.gcov.html#347">state_usage_disk</a></td>
<td class="coverFnHi">621730</td>
<td class="coverFnHi">622545</td>
</tr>
<tr>
<td class="coverFn"><a href="state.h.gcov.html#323">state_usage_waste</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@ -61,15 +61,15 @@
</tr>
<tr>
<td class="coverFn"><a href="state.h.gcov.html#333">state_usage_cpu</a></td>
<td class="coverFnHi">771844</td>
<td class="coverFnHi">772778</td>
</tr>
<tr>
<td class="coverFn"><a href="state.h.gcov.html#347">state_usage_disk</a></td>
<td class="coverFnHi">621730</td>
<td class="coverFnHi">622545</td>
</tr>
<tr>
<td class="coverFn"><a href="state.h.gcov.html#362">state_usage_parity</a></td>
<td class="coverFnHi">652636</td>
<td class="coverFnHi">653350</td>
</tr>
<tr>
<td class="coverFn"><a href="state.h.gcov.html#323">state_usage_waste</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@ -394,48 +394,48 @@
<span class="lineNum"> 332 </span> : /**
<a name="333"><span class="lineNum"> 333 </span> : * Set the usage time for CPU.</a>
<span class="lineNum"> 334 </span> : */
<span class="lineNum"> 335 </span><span class="lineCov"> 771844 : static inline void state_usage_cpu(struct snapraid_state* state)</span>
<span class="lineNum"> 335 </span><span class="lineCov"> 772778 : static inline void state_usage_cpu(struct snapraid_state* state)</span>
<span class="lineNum"> 336 </span> : {
<span class="lineNum"> 337 </span><span class="lineCov"> 771844 : uint64_t now = tick();</span>
<span class="lineNum"> 338 </span><span class="lineCov"> 771844 : uint64_t delta = now - state-&gt;tick_last;</span>
<span class="lineNum"> 337 </span><span class="lineCov"> 772778 : uint64_t now = tick();</span>
<span class="lineNum"> 338 </span><span class="lineCov"> 772778 : uint64_t delta = now - state-&gt;tick_last;</span>
<span class="lineNum"> 339 </span> :
<span class="lineNum"> 340 </span> : /* increment the time spent in computations */
<span class="lineNum"> 341 </span><span class="lineCov"> 771844 : state-&gt;tick_cpu += delta;</span>
<span class="lineNum"> 341 </span><span class="lineCov"> 772778 : state-&gt;tick_cpu += delta;</span>
<span class="lineNum"> 342 </span> :
<span class="lineNum"> 343 </span><span class="lineCov"> 771844 : state-&gt;tick_last = now;</span>
<span class="lineNum"> 344 </span><span class="lineCov"> 771844 : }</span>
<span class="lineNum"> 343 </span><span class="lineCov"> 772778 : state-&gt;tick_last = now;</span>
<span class="lineNum"> 344 </span><span class="lineCov"> 772778 : }</span>
<span class="lineNum"> 345 </span> :
<span class="lineNum"> 346 </span> : /**
<a name="347"><span class="lineNum"> 347 </span> : * Set the usage time for data disk.</a>
<span class="lineNum"> 348 </span> : */
<span class="lineNum"> 349 </span><span class="lineCov"> 621730 : static inline void state_usage_disk(struct snapraid_state* state, struct snapraid_disk* disk)</span>
<span class="lineNum"> 349 </span><span class="lineCov"> 622545 : static inline void state_usage_disk(struct snapraid_state* state, struct snapraid_disk* disk)</span>
<span class="lineNum"> 350 </span> : {
<span class="lineNum"> 351 </span><span class="lineCov"> 621730 : uint64_t now = tick();</span>
<span class="lineNum"> 352 </span><span class="lineCov"> 621730 : uint64_t delta = now - state-&gt;tick_last;</span>
<span class="lineNum"> 351 </span><span class="lineCov"> 622545 : uint64_t now = tick();</span>
<span class="lineNum"> 352 </span><span class="lineCov"> 622545 : uint64_t delta = now - state-&gt;tick_last;</span>
<span class="lineNum"> 353 </span> :
<span class="lineNum"> 354 </span> : /* increment the time spent in the data disk */
<span class="lineNum"> 355 </span><span class="lineCov"> 621730 : disk-&gt;tick += delta;</span>
<span class="lineNum"> 356 </span><span class="lineCov"> 621730 : state-&gt;tick_io += delta;</span>
<span class="lineNum"> 355 </span><span class="lineCov"> 622545 : disk-&gt;tick += delta;</span>
<span class="lineNum"> 356 </span><span class="lineCov"> 622545 : state-&gt;tick_io += delta;</span>
<span class="lineNum"> 357 </span> :
<span class="lineNum"> 358 </span><span class="lineCov"> 621730 : state-&gt;tick_last = now;</span>
<span class="lineNum"> 359 </span><span class="lineCov"> 621730 : }</span>
<span class="lineNum"> 358 </span><span class="lineCov"> 622545 : state-&gt;tick_last = now;</span>
<span class="lineNum"> 359 </span><span class="lineCov"> 622545 : }</span>
<span class="lineNum"> 360 </span> :
<span class="lineNum"> 361 </span> : /**
<a name="362"><span class="lineNum"> 362 </span> : * Set the usage time for parity disk.</a>
<span class="lineNum"> 363 </span> : */
<span class="lineNum"> 364 </span><span class="lineCov"> 652636 : static inline void state_usage_parity(struct snapraid_state* state, unsigned level)</span>
<span class="lineNum"> 364 </span><span class="lineCov"> 653350 : static inline void state_usage_parity(struct snapraid_state* state, unsigned level)</span>
<span class="lineNum"> 365 </span> : {
<span class="lineNum"> 366 </span><span class="lineCov"> 652636 : uint64_t now = tick();</span>
<span class="lineNum"> 367 </span><span class="lineCov"> 652636 : uint64_t delta = now - state-&gt;tick_last;</span>
<span class="lineNum"> 366 </span><span class="lineCov"> 653350 : uint64_t now = tick();</span>
<span class="lineNum"> 367 </span><span class="lineCov"> 653350 : uint64_t delta = now - state-&gt;tick_last;</span>
<span class="lineNum"> 368 </span> :
<span class="lineNum"> 369 </span><span class="lineCov"> 652636 : assert(level &lt; LEV_MAX);</span>
<span class="lineNum"> 369 </span><span class="lineCov"> 653350 : assert(level &lt; LEV_MAX);</span>
<span class="lineNum"> 370 </span> :
<span class="lineNum"> 371 </span> : /* increment the time spent in the parity disk */
<span class="lineNum"> 372 </span><span class="lineCov"> 652636 : state-&gt;parity[level].tick += delta;</span>
<span class="lineNum"> 373 </span><span class="lineCov"> 652636 : state-&gt;tick_io += delta;</span>
<span class="lineNum"> 372 </span><span class="lineCov"> 653350 : state-&gt;parity[level].tick += delta;</span>
<span class="lineNum"> 373 </span><span class="lineCov"> 653350 : state-&gt;tick_io += delta;</span>
<span class="lineNum"> 374 </span> :
<span class="lineNum"> 375 </span><span class="lineCov"> 652636 : state-&gt;tick_last = now;</span>
<span class="lineNum"> 376 </span><span class="lineCov"> 652636 : }</span>
<span class="lineNum"> 375 </span><span class="lineCov"> 653350 : state-&gt;tick_last = now;</span>
<span class="lineNum"> 376 </span><span class="lineCov"> 653350 : }</span>
<span class="lineNum"> 377 </span> :
<span class="lineNum"> 378 </span> : /**
<span class="lineNum"> 379 </span> : * Print the stats of the usage time.

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">3</td>
@ -195,14 +195,14 @@
<span class="lineNum"> 133 </span> :
<span class="lineNum"> 134 </span> : /* for each file in the disk */
<span class="lineNum"> 135 </span><span class="lineCov"> 84 : node = disk-&gt;filelist;</span>
<span class="lineNum"> 136 </span><span class="lineCov"> 95602 : while (node) {</span>
<span class="lineNum"> 136 </span><span class="lineCov"> 95610 : while (node) {</span>
<span class="lineNum"> 137 </span> : struct snapraid_file* file;
<span class="lineNum"> 138 </span> :
<span class="lineNum"> 139 </span><span class="lineCov"> 95434 : file = node-&gt;data;</span>
<span class="lineNum"> 140 </span><span class="lineCov"> 95434 : node = node-&gt;next; /* next node */</span>
<span class="lineNum"> 139 </span><span class="lineCov"> 95442 : file = node-&gt;data;</span>
<span class="lineNum"> 140 </span><span class="lineCov"> 95442 : node = node-&gt;next; /* next node */</span>
<span class="lineNum"> 141 </span> :
<span class="lineNum"> 142 </span> : /* check fragmentation */
<span class="lineNum"> 143 </span><span class="lineCov"> 95434 : if (file-&gt;blockmax != 0) {</span>
<span class="lineNum"> 143 </span><span class="lineCov"> 95442 : if (file-&gt;blockmax != 0) {</span>
<span class="lineNum"> 144 </span> : block_off_t prev_pos;
<span class="lineNum"> 145 </span> : block_off_t last_pos;
<span class="lineNum"> 146 </span> : int fragmented;
@ -234,11 +234,11 @@
<span class="lineNum"> 172 </span> : }
<span class="lineNum"> 173 </span> :
<span class="lineNum"> 174 </span> : /* count files */
<span class="lineNum"> 175 </span><span class="lineCov"> 95434 : ++file_count;</span>
<span class="lineNum"> 176 </span><span class="lineCov"> 95434 : ++disk_file_count;</span>
<span class="lineNum"> 177 </span><span class="lineCov"> 95434 : file_size += file-&gt;size;</span>
<span class="lineNum"> 178 </span><span class="lineCov"> 95434 : file_block_count += file-&gt;blockmax;</span>
<span class="lineNum"> 179 </span><span class="lineCov"> 95434 : disk_file_size += file-&gt;size;</span>
<span class="lineNum"> 175 </span><span class="lineCov"> 95442 : ++file_count;</span>
<span class="lineNum"> 176 </span><span class="lineCov"> 95442 : ++disk_file_count;</span>
<span class="lineNum"> 177 </span><span class="lineCov"> 95442 : file_size += file-&gt;size;</span>
<span class="lineNum"> 178 </span><span class="lineCov"> 95442 : file_block_count += file-&gt;blockmax;</span>
<span class="lineNum"> 179 </span><span class="lineCov"> 95442 : disk_file_size += file-&gt;size;</span>
<span class="lineNum"> 180 </span> : }
<span class="lineNum"> 181 </span> :
<span class="lineNum"> 182 </span><span class="lineCov"> 84 : if (disk-&gt;free_blocks != 0)</span>
@ -367,10 +367,10 @@
<span class="lineNum"> 305 </span> : time_t scrub_time;
<span class="lineNum"> 306 </span> :
<span class="lineNum"> 307 </span><span class="lineCov"> 39606 : if (info_get_bad(info)) {</span>
<span class="lineNum"> 308 </span><span class="lineCov"> 1803 : if (bad == 0)</span>
<span class="lineNum"> 308 </span><span class="lineCov"> 1802 : if (bad == 0)</span>
<span class="lineNum"> 309 </span><span class="lineCov"> 2 : bad_first = i;</span>
<span class="lineNum"> 310 </span><span class="lineCov"> 1803 : bad_last = i;</span>
<span class="lineNum"> 311 </span><span class="lineCov"> 1803 : ++bad;</span>
<span class="lineNum"> 310 </span><span class="lineCov"> 1802 : bad_last = i;</span>
<span class="lineNum"> 311 </span><span class="lineCov"> 1802 : ++bad;</span>
<span class="lineNum"> 312 </span> : }
<span class="lineNum"> 313 </span> :
<span class="lineNum"> 314 </span><span class="lineCov"> 39606 : if (info_get_rehash(info))</span>
@ -379,10 +379,10 @@
<span class="lineNum"> 317 </span><span class="lineCov"> 39606 : scrub_time = info_get_time(info);</span>
<span class="lineNum"> 318 </span> :
<span class="lineNum"> 319 </span><span class="lineCov"> 39606 : if (info_get_justsynced(info)) {</span>
<span class="lineNum"> 320 </span><span class="lineCov"> 20357 : ++unscrubbed_blocks;</span>
<span class="lineNum"> 320 </span><span class="lineCov"> 20364 : ++unscrubbed_blocks;</span>
<span class="lineNum"> 321 </span> :
<span class="lineNum"> 322 </span> : /* mark the time as not scrubbed */
<span class="lineNum"> 323 </span><span class="lineCov"> 20357 : scrub_time |= TIME_NEW;</span>
<span class="lineNum"> 323 </span><span class="lineCov"> 20364 : scrub_time |= TIME_NEW;</span>
<span class="lineNum"> 324 </span> : }
<span class="lineNum"> 325 </span> :
<span class="lineNum"> 326 </span><span class="lineCov"> 39606 : timemap[count++] = scrub_time;</span>
@ -414,16 +414,16 @@
<span class="lineNum"> 352 </span> : /* output the info map */
<span class="lineNum"> 353 </span><span class="lineCov"> 8 : i = 0;</span>
<span class="lineNum"> 354 </span><span class="lineCov"> 8 : log_tag(&quot;info_count:%u\n&quot;, count);</span>
<span class="lineNum"> 355 </span><span class="lineCov"> 39 : while (i &lt; count) {</span>
<span class="lineNum"> 356 </span><span class="lineCov"> 23 : unsigned j = i + 1;</span>
<span class="lineNum"> 357 </span><span class="lineCov"> 39629 : while (j &lt; count &amp;&amp; timemap[i] == timemap[j])</span>
<span class="lineNum"> 358 </span><span class="lineCov"> 39583 : ++j;</span>
<span class="lineNum"> 359 </span><span class="lineCov"> 23 : if ((timemap[i] &amp; TIME_NEW) == 0) {</span>
<span class="lineNum"> 360 </span><span class="lineCov"> 8 : log_tag(&quot;info_time:%&quot; PRIu64 &quot;:%u:scrubbed\n&quot;, (uint64_t)timemap[i], j - i);</span>
<span class="lineNum"> 355 </span><span class="lineCov"> 41 : while (i &lt; count) {</span>
<span class="lineNum"> 356 </span><span class="lineCov"> 25 : unsigned j = i + 1;</span>
<span class="lineNum"> 357 </span><span class="lineCov"> 39631 : while (j &lt; count &amp;&amp; timemap[i] == timemap[j])</span>
<span class="lineNum"> 358 </span><span class="lineCov"> 39581 : ++j;</span>
<span class="lineNum"> 359 </span><span class="lineCov"> 25 : if ((timemap[i] &amp; TIME_NEW) == 0) {</span>
<span class="lineNum"> 360 </span><span class="lineCov"> 9 : log_tag(&quot;info_time:%&quot; PRIu64 &quot;:%u:scrubbed\n&quot;, (uint64_t)timemap[i], j - i);</span>
<span class="lineNum"> 361 </span> : } else {
<span class="lineNum"> 362 </span><span class="lineCov"> 15 : log_tag(&quot;info_time:%&quot; PRIu64 &quot;:%u:new\n&quot;, (uint64_t)(timemap[i] &amp; ~TIME_NEW), j - i);</span>
<span class="lineNum"> 362 </span><span class="lineCov"> 16 : log_tag(&quot;info_time:%&quot; PRIu64 &quot;:%u:new\n&quot;, (uint64_t)(timemap[i] &amp; ~TIME_NEW), j - i);</span>
<span class="lineNum"> 363 </span> : }
<span class="lineNum"> 364 </span><span class="lineCov"> 23 : i = j;</span>
<span class="lineNum"> 364 </span><span class="lineCov"> 25 : i = j;</span>
<span class="lineNum"> 365 </span> : }
<span class="lineNum"> 366 </span> :
<span class="lineNum"> 367 </span><span class="lineCov"> 8 : oldest = timemap[0];</span>
@ -446,9 +446,9 @@
<span class="lineNum"> 384 </span><span class="lineCov"> 560 : step_new = 0;</span>
<span class="lineNum"> 385 </span><span class="lineCov"> 40726 : while (barpos &lt; count &amp;&amp; timemap[barpos] &lt;= limit) {</span>
<span class="lineNum"> 386 </span><span class="lineCov"> 39606 : if ((timemap[barpos] &amp; TIME_NEW) != 0)</span>
<span class="lineNum"> 387 </span><span class="lineCov"> 20357 : ++step_new;</span>
<span class="lineNum"> 387 </span><span class="lineCov"> 20364 : ++step_new;</span>
<span class="lineNum"> 388 </span> : else
<span class="lineNum"> 389 </span><span class="lineCov"> 19249 : ++step_scrubbed;</span>
<span class="lineNum"> 389 </span><span class="lineCov"> 19242 : ++step_scrubbed;</span>
<span class="lineNum"> 390 </span><span class="lineCov"> 39606 : ++barpos;</span>
<span class="lineNum"> 391 </span> : }
<span class="lineNum"> 392 </span> :
@ -483,13 +483,13 @@
<span class="lineNum"> 421 </span> : else
<span class="lineNum"> 422 </span><span class="lineCov"> 94 : printf(&quot;o&quot;);</span>
<span class="lineNum"> 423 </span><span class="lineCov"> 8232 : } else if (both &gt; pivot_lower) {</span>
<span class="lineNum"> 424 </span><span class="lineCov"> 23 : if (scrubbed == both)</span>
<span class="lineNum"> 425 </span><span class="lineCov"> 8 : printf(&quot;*&quot;);</span>
<span class="lineNum"> 424 </span><span class="lineCov"> 25 : if (scrubbed == both)</span>
<span class="lineNum"> 425 </span><span class="lineCov"> 9 : printf(&quot;*&quot;);</span>
<span class="lineNum"> 426 </span> : else
<span class="lineNum"> 427 </span><span class="lineCov"> 15 : printf(&quot;o&quot;);</span>
<span class="lineNum"> 427 </span><span class="lineCov"> 16 : printf(&quot;o&quot;);</span>
<span class="lineNum"> 428 </span> : } else {
<span class="lineNum"> 429 </span><span class="lineCov"> 8209 : if (y == GRAPH_ROW - 1)</span>
<span class="lineNum"> 430 </span><span class="lineCov"> 537 : printf(&quot;_&quot;);</span>
<span class="lineNum"> 429 </span><span class="lineCov"> 8207 : if (y == GRAPH_ROW - 1)</span>
<span class="lineNum"> 430 </span><span class="lineCov"> 535 : printf(&quot;_&quot;);</span>
<span class="lineNum"> 431 </span> : else
<span class="lineNum"> 432 </span><span class="lineCov"> 7672 : printf(&quot; &quot;);</span>
<span class="lineNum"> 433 </span> : }
@ -536,19 +536,19 @@
<span class="lineNum"> 474 </span> :
<span class="lineNum"> 475 </span> : /* print some of the errors */
<span class="lineNum"> 476 </span><span class="lineCov"> 2 : bad_print = 0;</span>
<span class="lineNum"> 477 </span><span class="lineCov"> 611 : for (i = 0; i &lt; blockmax; ++i) {</span>
<span class="lineNum"> 478 </span><span class="lineCov"> 611 : snapraid_info info = info_get(&amp;state-&gt;infoarr, i);</span>
<span class="lineNum"> 477 </span><span class="lineCov"> 609 : for (i = 0; i &lt; blockmax; ++i) {</span>
<span class="lineNum"> 478 </span><span class="lineCov"> 609 : snapraid_info info = info_get(&amp;state-&gt;infoarr, i);</span>
<span class="lineNum"> 479 </span> :
<span class="lineNum"> 480 </span> : /* skip unused blocks */
<span class="lineNum"> 481 </span><span class="lineCov"> 611 : if (info == 0)</span>
<span class="lineNum"> 481 </span><span class="lineCov"> 609 : if (info == 0)</span>
<span class="lineNum"> 482 </span><span class="lineNoCov"> 0 : continue;</span>
<span class="lineNum"> 483 </span> :
<span class="lineNum"> 484 </span><span class="lineCov"> 611 : if (info_get_bad(info)) {</span>
<span class="lineNum"> 484 </span><span class="lineCov"> 609 : if (info_get_bad(info)) {</span>
<span class="lineNum"> 485 </span><span class="lineCov"> 202 : printf(&quot; %u&quot;, i);</span>
<span class="lineNum"> 486 </span><span class="lineCov"> 202 : ++bad_print;</span>
<span class="lineNum"> 487 </span> : }
<span class="lineNum"> 488 </span> :
<span class="lineNum"> 489 </span><span class="lineCov"> 611 : if (bad_print &gt; 100) {</span>
<span class="lineNum"> 489 </span><span class="lineCov"> 609 : if (bad_print &gt; 100) {</span>
<span class="lineNum"> 490 </span><span class="lineCov"> 2 : printf(&quot; and %u more...&quot;, bad - bad_print);</span>
<span class="lineNum"> 491 </span><span class="lineCov"> 2 : break;</span>
<span class="lineNum"> 492 </span> : }

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">28</td>
@ -61,47 +61,47 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#622">swrite</a></td>
<td class="coverFnHi">130046569</td>
<td class="coverFnHi">129597634</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#659">sputb32</a></td>
<td class="coverFnHi">62124806</td>
<td class="coverFnHi">62339359</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#680">sputb64</a></td>
<td class="coverFnHi">34119322</td>
<td class="coverFnHi">34173479</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#514">sgetb32</a></td>
<td class="coverFnHi">18698507</td>
<td class="coverFnHi">18710390</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#373">sread</a></td>
<td class="coverFnHi">12343180</td>
<td class="coverFnHi">12342909</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#713">sputbs</a></td>
<td class="coverFnHi">12250827</td>
<td class="coverFnHi">12306366</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#550">sgetb64</a></td>
<td class="coverFnHi">10465700</td>
<td class="coverFnHi">10465937</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#601">sgetbs</a></td>
<td class="coverFnHi">3732711</td>
<td class="coverFnHi">3732790</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#191">sfill</a></td>
<td class="coverFnHi">606448</td>
<td class="coverFnHi">606496</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#328">sgetc_uncached</a></td>
<td class="coverFnHi">298580</td>
<td class="coverFnHi">298585</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#266">sflush</a></td>
<td class="coverFnHi">52551</td>
<td class="coverFnHi">52590</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#336">sgettok</a></td>
@ -117,7 +117,7 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#142">sclose</a></td>
<td class="coverFnHi">2576</td>
<td class="coverFnHi">2575</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#318">scrc</a></td>
@ -125,7 +125,7 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#27">sopen_read</a></td>
<td class="coverFnHi">1700</td>
<td class="coverFnHi">1701</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#228">sdeplete</a></td>
@ -139,22 +139,22 @@
<td class="coverFn"><a href="stream.c.gcov.html#323">scrc_stream</a></td>
<td class="coverFnHi">929</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#72">sopen_multi_write</a></td>
<td class="coverFnHi">929</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#701">sputble32</a></td>
<td class="coverFnHi">929</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#727">ssync</a></td>
<td class="coverFnHi">913</td>
<td class="coverFn"><a href="stream.c.gcov.html#72">sopen_multi_write</a></td>
<td class="coverFnHi">928</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#130">sopen_write</a></td>
<td class="coverFnHi">913</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#727">ssync</a></td>
<td class="coverFnHi">912</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#586">sgetble32</a></td>
<td class="coverFnHi">362</td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">28</td>
@ -61,7 +61,7 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#142">sclose</a></td>
<td class="coverFnHi">2576</td>
<td class="coverFnHi">2575</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#318">scrc</a></td>
@ -77,19 +77,19 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#191">sfill</a></td>
<td class="coverFnHi">606448</td>
<td class="coverFnHi">606496</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#266">sflush</a></td>
<td class="coverFnHi">52551</td>
<td class="coverFnHi">52590</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#514">sgetb32</a></td>
<td class="coverFnHi">18698507</td>
<td class="coverFnHi">18710390</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#550">sgetb64</a></td>
<td class="coverFnHi">10465700</td>
<td class="coverFnHi">10465937</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#586">sgetble32</a></td>
@ -97,11 +97,11 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#601">sgetbs</a></td>
<td class="coverFnHi">3732711</td>
<td class="coverFnHi">3732790</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#328">sgetc_uncached</a></td>
<td class="coverFnHi">298580</td>
<td class="coverFnHi">298585</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#466">sgetlasttok</a></td>
@ -129,11 +129,11 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#72">sopen_multi_write</a></td>
<td class="coverFnHi">929</td>
<td class="coverFnHi">928</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#27">sopen_read</a></td>
<td class="coverFnHi">1700</td>
<td class="coverFnHi">1701</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#130">sopen_write</a></td>
@ -141,11 +141,11 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#659">sputb32</a></td>
<td class="coverFnHi">62124806</td>
<td class="coverFnHi">62339359</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#680">sputb64</a></td>
<td class="coverFnHi">34119322</td>
<td class="coverFnHi">34173479</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#701">sputble32</a></td>
@ -153,15 +153,15 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#713">sputbs</a></td>
<td class="coverFnHi">12250827</td>
<td class="coverFnHi">12306366</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#373">sread</a></td>
<td class="coverFnHi">12343180</td>
<td class="coverFnHi">12342909</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#727">ssync</a></td>
<td class="coverFnHi">913</td>
<td class="coverFnHi">912</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#313">stell</a></td>
@ -169,7 +169,7 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.c.gcov.html#622">swrite</a></td>
<td class="coverFnHi">130046569</td>
<td class="coverFnHi">129597634</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">28</td>
@ -88,19 +88,19 @@
<span class="lineNum"> 26 </span> :
<a name="27"><span class="lineNum"> 27 </span> : unsigned STREAM_SIZE = 1024 * 64;</a>
<span class="lineNum"> 28 </span> :
<span class="lineNum"> 29 </span><span class="lineCov"> 1700 : STREAM* sopen_read(const char* file)</span>
<span class="lineNum"> 29 </span><span class="lineCov"> 1701 : STREAM* sopen_read(const char* file)</span>
<span class="lineNum"> 30 </span> : {
<span class="lineNum"> 31 </span> : #if HAVE_POSIX_FADVISE
<span class="lineNum"> 32 </span> : int ret;
<span class="lineNum"> 33 </span> : #endif
<span class="lineNum"> 34 </span><span class="lineCov"> 1700 : STREAM* s = malloc_nofail(sizeof(STREAM));</span>
<span class="lineNum"> 34 </span><span class="lineCov"> 1701 : STREAM* s = malloc_nofail(sizeof(STREAM));</span>
<span class="lineNum"> 35 </span> :
<span class="lineNum"> 36 </span><span class="lineCov"> 1701 : s-&gt;handle_size = 1;</span>
<span class="lineNum"> 37 </span><span class="lineCov"> 1701 : s-&gt;handle = malloc_nofail(sizeof(struct stream_handle));</span>
<span class="lineNum"> 38 </span> :
<span class="lineNum"> 39 </span><span class="lineCov"> 1700 : pathcpy(s-&gt;handle[0].path, sizeof(s-&gt;handle[0].path), file);</span>
<span class="lineNum"> 40 </span><span class="lineCov"> 1701 : s-&gt;handle[0].f = open(file, O_RDONLY | O_BINARY | O_SEQUENTIAL);</span>
<span class="lineNum"> 41 </span><span class="lineCov"> 1701 : if (s-&gt;handle[0].f == -1) {</span>
<span class="lineNum"> 41 </span><span class="lineCov"> 1700 : if (s-&gt;handle[0].f == -1) {</span>
<span class="lineNum"> 42 </span><span class="lineCov"> 50 : free(s-&gt;handle);</span>
<span class="lineNum"> 43 </span><span class="lineCov"> 50 : free(s);</span>
<span class="lineNum"> 44 </span><span class="lineCov"> 50 : return 0;</span>
@ -108,8 +108,8 @@
<span class="lineNum"> 46 </span> :
<span class="lineNum"> 47 </span> : #if HAVE_POSIX_FADVISE
<span class="lineNum"> 48 </span> : /* advise sequential access */
<span class="lineNum"> 49 </span><span class="lineCov"> 1651 : ret = posix_fadvise(s-&gt;handle[0].f, 0, 0, POSIX_FADV_SEQUENTIAL);</span>
<span class="lineNum"> 50 </span><span class="lineCov"> 1651 : if (ret != 0) {</span>
<span class="lineNum"> 49 </span><span class="lineCov"> 1650 : ret = posix_fadvise(s-&gt;handle[0].f, 0, 0, POSIX_FADV_SEQUENTIAL);</span>
<span class="lineNum"> 50 </span><span class="lineCov"> 1644 : if (ret != 0) {</span>
<span class="lineNum"> 51 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 52 </span> : close(s-&gt;handle[0].f);
<span class="lineNum"> 53 </span> : free(s-&gt;handle);
@ -119,33 +119,33 @@
<span class="lineNum"> 57 </span> : }
<span class="lineNum"> 58 </span> : #endif
<span class="lineNum"> 59 </span> :
<span class="lineNum"> 60 </span><span class="lineCov"> 1651 : s-&gt;buffer = malloc_nofail_test(STREAM_SIZE);</span>
<span class="lineNum"> 61 </span><span class="lineCov"> 1651 : s-&gt;pos = s-&gt;buffer;</span>
<span class="lineNum"> 62 </span><span class="lineCov"> 1651 : s-&gt;end = s-&gt;buffer;</span>
<span class="lineNum"> 63 </span><span class="lineCov"> 1651 : s-&gt;state = STREAM_STATE_READ;</span>
<span class="lineNum"> 64 </span><span class="lineCov"> 1651 : s-&gt;state_index = 0;</span>
<span class="lineNum"> 65 </span><span class="lineCov"> 1651 : s-&gt;offset = 0;</span>
<span class="lineNum"> 66 </span><span class="lineCov"> 1651 : s-&gt;offset_uncached = 0;</span>
<span class="lineNum"> 67 </span><span class="lineCov"> 1651 : s-&gt;crc = 0;</span>
<span class="lineNum"> 68 </span><span class="lineCov"> 1651 : s-&gt;crc_uncached = 0;</span>
<span class="lineNum"> 69 </span><span class="lineCov"> 1651 : s-&gt;crc_stream = CRC_IV;</span>
<span class="lineNum"> 60 </span><span class="lineCov"> 1644 : s-&gt;buffer = malloc_nofail_test(STREAM_SIZE);</span>
<span class="lineNum"> 61 </span><span class="lineCov"> 1650 : s-&gt;pos = s-&gt;buffer;</span>
<span class="lineNum"> 62 </span><span class="lineCov"> 1650 : s-&gt;end = s-&gt;buffer;</span>
<span class="lineNum"> 63 </span><span class="lineCov"> 1650 : s-&gt;state = STREAM_STATE_READ;</span>
<span class="lineNum"> 64 </span><span class="lineCov"> 1650 : s-&gt;state_index = 0;</span>
<span class="lineNum"> 65 </span><span class="lineCov"> 1650 : s-&gt;offset = 0;</span>
<span class="lineNum"> 66 </span><span class="lineCov"> 1650 : s-&gt;offset_uncached = 0;</span>
<span class="lineNum"> 67 </span><span class="lineCov"> 1650 : s-&gt;crc = 0;</span>
<span class="lineNum"> 68 </span><span class="lineCov"> 1650 : s-&gt;crc_uncached = 0;</span>
<span class="lineNum"> 69 </span><span class="lineCov"> 1650 : s-&gt;crc_stream = CRC_IV;</span>
<span class="lineNum"> 70 </span> :
<span class="lineNum"> 71 </span><span class="lineCov"> 1651 : return s;</span>
<span class="lineNum"> 71 </span><span class="lineCov"> 1650 : return s;</span>
<a name="72"><span class="lineNum"> 72 </span> : }</a>
<span class="lineNum"> 73 </span> :
<span class="lineNum"> 74 </span><span class="lineCov"> 929 : STREAM* sopen_multi_write(unsigned count)</span>
<span class="lineNum"> 74 </span><span class="lineCov"> 928 : STREAM* sopen_multi_write(unsigned count)</span>
<span class="lineNum"> 75 </span> : {
<span class="lineNum"> 76 </span> : unsigned i;
<span class="lineNum"> 77 </span> :
<span class="lineNum"> 78 </span><span class="lineCov"> 929 : STREAM* s = malloc_nofail(sizeof(STREAM));</span>
<span class="lineNum"> 78 </span><span class="lineCov"> 928 : STREAM* s = malloc_nofail(sizeof(STREAM));</span>
<span class="lineNum"> 79 </span> :
<span class="lineNum"> 80 </span><span class="lineCov"> 929 : s-&gt;handle_size = count;</span>
<span class="lineNum"> 81 </span><span class="lineCov"> 929 : s-&gt;handle = malloc_nofail(count * sizeof(struct stream_handle));</span>
<span class="lineNum"> 82 </span> :
<span class="lineNum"> 83 </span><span class="lineCov"> 1970 : for (i = 0; i &lt; count; ++i)</span>
<span class="lineNum"> 84 </span><span class="lineCov"> 1041 : s-&gt;handle[i].f = -1;</span>
<span class="lineNum"> 83 </span><span class="lineCov"> 1968 : for (i = 0; i &lt; count; ++i)</span>
<span class="lineNum"> 84 </span><span class="lineCov"> 1040 : s-&gt;handle[i].f = -1;</span>
<span class="lineNum"> 85 </span> :
<span class="lineNum"> 86 </span><span class="lineCov"> 929 : s-&gt;buffer = malloc_nofail_test(STREAM_SIZE);</span>
<span class="lineNum"> 86 </span><span class="lineCov"> 928 : s-&gt;buffer = malloc_nofail_test(STREAM_SIZE);</span>
<span class="lineNum"> 87 </span><span class="lineCov"> 929 : s-&gt;pos = s-&gt;buffer;</span>
<span class="lineNum"> 88 </span><span class="lineCov"> 929 : s-&gt;end = s-&gt;buffer + STREAM_SIZE;</span>
<span class="lineNum"> 89 </span><span class="lineCov"> 929 : s-&gt;state = STREAM_STATE_WRITE;</span>
@ -203,21 +203,21 @@
<span class="lineNum"> 141 </span><span class="lineCov"> 913 : return s;</span>
<a name="142"><span class="lineNum"> 142 </span> : }</a>
<span class="lineNum"> 143 </span> :
<span class="lineNum"> 144 </span><span class="lineCov"> 2576 : int sclose(STREAM* s)</span>
<span class="lineNum"> 144 </span><span class="lineCov"> 2575 : int sclose(STREAM* s)</span>
<span class="lineNum"> 145 </span> : {
<span class="lineNum"> 146 </span><span class="lineCov"> 2576 : int fail = 0;</span>
<span class="lineNum"> 146 </span><span class="lineCov"> 2575 : int fail = 0;</span>
<span class="lineNum"> 147 </span> : unsigned i;
<span class="lineNum"> 148 </span> :
<span class="lineNum"> 149 </span><span class="lineCov"> 2576 : if (s-&gt;state == STREAM_STATE_WRITE) {</span>
<span class="lineNum"> 150 </span><span class="lineCov"> 928 : if (sflush(s) != 0) {</span>
<span class="lineNum"> 149 </span><span class="lineCov"> 2575 : if (s-&gt;state == STREAM_STATE_WRITE) {</span>
<span class="lineNum"> 150 </span><span class="lineCov"> 927 : if (sflush(s) != 0) {</span>
<span class="lineNum"> 151 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 152 </span> : fail = 1;
<span class="lineNum"> 153 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 154 </span> : }
<span class="lineNum"> 155 </span> : }
<span class="lineNum"> 156 </span> :
<span class="lineNum"> 157 </span><span class="lineCov"> 5267 : for (i = 0; i &lt; s-&gt;handle_size; ++i) {</span>
<span class="lineNum"> 158 </span><span class="lineCov"> 2689 : if (close(s-&gt;handle[i].f) != 0) {</span>
<span class="lineNum"> 157 </span><span class="lineCov"> 5266 : for (i = 0; i &lt; s-&gt;handle_size; ++i) {</span>
<span class="lineNum"> 158 </span><span class="lineCov"> 2688 : if (close(s-&gt;handle[i].f) != 0) {</span>
<span class="lineNum"> 159 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 160 </span> : fail = 1;
<span class="lineNum"> 161 </span> : /* LCOV_EXCL_STOP */
@ -252,41 +252,41 @@
<span class="lineNum"> 190 </span> : * Fill the read stream buffer.
<a name="191"><span class="lineNum"> 191 </span> : * \return 0 if at least on char is read, or EOF on error.</a>
<span class="lineNum"> 192 </span> : */
<span class="lineNum"> 193 </span><span class="lineCov"> 606448 : static int sfill(STREAM* s)</span>
<span class="lineNum"> 193 </span><span class="lineCov"> 606496 : static int sfill(STREAM* s)</span>
<span class="lineNum"> 194 </span> : {
<span class="lineNum"> 195 </span> : ssize_t ret;
<span class="lineNum"> 196 </span> :
<span class="lineNum"> 197 </span><span class="lineCov"> 606448 : if (s-&gt;state != STREAM_STATE_READ) {</span>
<span class="lineNum"> 197 </span><span class="lineCov"> 606496 : if (s-&gt;state != STREAM_STATE_READ) {</span>
<span class="lineNum"> 198 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 199 </span> : return EOF;
<span class="lineNum"> 200 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 201 </span> : }
<span class="lineNum"> 202 </span> :
<span class="lineNum"> 203 </span><span class="lineCov"> 605464 : ret = read(s-&gt;handle[0].f, s-&gt;buffer, STREAM_SIZE);</span>
<span class="lineNum"> 203 </span><span class="lineCov"> 605512 : ret = read(s-&gt;handle[0].f, s-&gt;buffer, STREAM_SIZE);</span>
<span class="lineNum"> 204 </span> :
<span class="lineNum"> 205 </span><span class="lineCov"> 605464 : if (ret &lt; 0) {</span>
<span class="lineNum"> 205 </span><span class="lineCov"> 605512 : if (ret &lt; 0) {</span>
<span class="lineNum"> 206 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 207 </span> : s-&gt;state = STREAM_STATE_ERROR;
<span class="lineNum"> 208 </span> : return EOF;
<span class="lineNum"> 209 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 210 </span> : }
<span class="lineNum"> 211 </span><span class="lineCov"> 605464 : if (ret == 0) {</span>
<span class="lineNum"> 211 </span><span class="lineCov"> 605512 : if (ret == 0) {</span>
<span class="lineNum"> 212 </span><span class="lineCov"> 1522 : s-&gt;state = STREAM_STATE_EOF;</span>
<span class="lineNum"> 213 </span><span class="lineCov"> 1522 : return EOF;</span>
<span class="lineNum"> 214 </span> : }
<span class="lineNum"> 215 </span> :
<span class="lineNum"> 216 </span> : /* update the crc */
<span class="lineNum"> 217 </span><span class="lineCov"> 603942 : s-&gt;crc_uncached = s-&gt;crc;</span>
<span class="lineNum"> 218 </span><span class="lineCov"> 603942 : s-&gt;crc = crc32c(s-&gt;crc, s-&gt;buffer, ret);</span>
<span class="lineNum"> 217 </span><span class="lineCov"> 603990 : s-&gt;crc_uncached = s-&gt;crc;</span>
<span class="lineNum"> 218 </span><span class="lineCov"> 603990 : s-&gt;crc = crc32c(s-&gt;crc, s-&gt;buffer, ret);</span>
<span class="lineNum"> 219 </span> :
<span class="lineNum"> 220 </span> : /* update the offset */
<span class="lineNum"> 221 </span><span class="lineCov"> 603942 : s-&gt;offset_uncached = s-&gt;offset;</span>
<span class="lineNum"> 222 </span><span class="lineCov"> 603942 : s-&gt;offset += ret;</span>
<span class="lineNum"> 221 </span><span class="lineCov"> 603990 : s-&gt;offset_uncached = s-&gt;offset;</span>
<span class="lineNum"> 222 </span><span class="lineCov"> 603990 : s-&gt;offset += ret;</span>
<span class="lineNum"> 223 </span> :
<span class="lineNum"> 224 </span><span class="lineCov"> 603942 : s-&gt;pos = s-&gt;buffer;</span>
<span class="lineNum"> 225 </span><span class="lineCov"> 603942 : s-&gt;end = s-&gt;buffer + ret;</span>
<span class="lineNum"> 224 </span><span class="lineCov"> 603990 : s-&gt;pos = s-&gt;buffer;</span>
<span class="lineNum"> 225 </span><span class="lineCov"> 603990 : s-&gt;end = s-&gt;buffer + ret;</span>
<span class="lineNum"> 226 </span> :
<span class="lineNum"> 227 </span><span class="lineCov"> 603942 : return 0;</span>
<span class="lineNum"> 227 </span><span class="lineCov"> 603990 : return 0;</span>
<a name="228"><span class="lineNum"> 228 </span> : }</a>
<span class="lineNum"> 229 </span> :
<span class="lineNum"> 230 </span><span class="lineCov"> 1042 : int sdeplete(STREAM* s, unsigned char* last)</span>
@ -299,19 +299,19 @@
<span class="lineNum"> 237 </span> :
<span class="lineNum"> 238 </span> : while (1) {
<span class="lineNum"> 239 </span> : /* increase the position up to 4 bytes before the end */
<span class="lineNum"> 240 </span><span class="lineCov"> 307868 : if (s-&gt;pos + 4 &lt;= s-&gt;end)</span>
<span class="lineNum"> 241 </span><span class="lineCov"> 148091 : s-&gt;pos = s-&gt;end - 4;</span>
<span class="lineNum"> 240 </span><span class="lineCov"> 307911 : if (s-&gt;pos + 4 &lt;= s-&gt;end)</span>
<span class="lineNum"> 241 </span><span class="lineCov"> 148134 : s-&gt;pos = s-&gt;end - 4;</span>
<span class="lineNum"> 242 </span> :
<span class="lineNum"> 243 </span> : /* insert the last 4 bytes */
<span class="lineNum"> 244 </span><span class="lineCov"> 1467868 : while (s-&gt;pos &lt; s-&gt;end) {</span>
<span class="lineNum"> 245 </span><span class="lineCov"> 852132 : last[0] = last[1];</span>
<span class="lineNum"> 246 </span><span class="lineCov"> 852132 : last[1] = last[2];</span>
<span class="lineNum"> 247 </span><span class="lineCov"> 852132 : last[2] = last[3];</span>
<span class="lineNum"> 248 </span><span class="lineCov"> 852132 : last[3] = *s-&gt;pos++;</span>
<span class="lineNum"> 244 </span><span class="lineCov"> 1468126 : while (s-&gt;pos &lt; s-&gt;end) {</span>
<span class="lineNum"> 245 </span><span class="lineCov"> 852304 : last[0] = last[1];</span>
<span class="lineNum"> 246 </span><span class="lineCov"> 852304 : last[1] = last[2];</span>
<span class="lineNum"> 247 </span><span class="lineCov"> 852304 : last[2] = last[3];</span>
<span class="lineNum"> 248 </span><span class="lineCov"> 852304 : last[3] = *s-&gt;pos++;</span>
<span class="lineNum"> 249 </span> : }
<span class="lineNum"> 250 </span> :
<span class="lineNum"> 251 </span> : /* fill again the buffer until the end of the file */
<span class="lineNum"> 252 </span><span class="lineCov"> 307868 : if (sfill(s) != 0) {</span>
<span class="lineNum"> 252 </span><span class="lineCov"> 307911 : if (sfill(s) != 0) {</span>
<span class="lineNum"> 253 </span> : /* on error fail */
<span class="lineNum"> 254 </span><span class="lineCov"> 1042 : if (serror(s)) {</span>
<span class="lineNum"> 255 </span> : /* LCOV_EXCL_START */
@ -322,31 +322,31 @@
<span class="lineNum"> 260 </span> : /* on EOF terminate */
<span class="lineNum"> 261 </span><span class="lineCov"> 1042 : break;</span>
<span class="lineNum"> 262 </span> : }
<span class="lineNum"> 263 </span><span class="lineCov"> 306826 : }</span>
<span class="lineNum"> 263 </span><span class="lineCov"> 306869 : }</span>
<span class="lineNum"> 264 </span> :
<span class="lineNum"> 265 </span><span class="lineCov"> 1042 : return 0;</span>
<a name="266"><span class="lineNum"> 266 </span> : }</a>
<span class="lineNum"> 267 </span> :
<span class="lineNum"> 268 </span><span class="lineCov"> 52551 : int sflush(STREAM* s)</span>
<span class="lineNum"> 268 </span><span class="lineCov"> 52590 : int sflush(STREAM* s)</span>
<span class="lineNum"> 269 </span> : {
<span class="lineNum"> 270 </span> : ssize_t ret;
<span class="lineNum"> 271 </span> : ssize_t size;
<span class="lineNum"> 272 </span> : unsigned i;
<span class="lineNum"> 273 </span> :
<span class="lineNum"> 274 </span><span class="lineCov"> 52551 : if (s-&gt;state != STREAM_STATE_WRITE) {</span>
<span class="lineNum"> 274 </span><span class="lineCov"> 52590 : if (s-&gt;state != STREAM_STATE_WRITE) {</span>
<span class="lineNum"> 275 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 276 </span> : return EOF;
<span class="lineNum"> 277 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 278 </span> : }
<span class="lineNum"> 279 </span> :
<span class="lineNum"> 280 </span><span class="lineCov"> 52551 : size = s-&gt;pos - s-&gt;buffer;</span>
<span class="lineNum"> 281 </span><span class="lineCov"> 52551 : if (!size)</span>
<span class="lineNum"> 282 </span><span class="lineCov"> 913 : return 0;</span>
<span class="lineNum"> 280 </span><span class="lineCov"> 52590 : size = s-&gt;pos - s-&gt;buffer;</span>
<span class="lineNum"> 281 </span><span class="lineCov"> 52590 : if (!size)</span>
<span class="lineNum"> 282 </span><span class="lineCov"> 909 : return 0;</span>
<span class="lineNum"> 283 </span> :
<span class="lineNum"> 284 </span><span class="lineCov"> 359365 : for (i = 0; i &lt; s-&gt;handle_size; ++i) {</span>
<span class="lineNum"> 285 </span><span class="lineCov"> 307726 : ret = write(s-&gt;handle[i].f, s-&gt;buffer, size);</span>
<span class="lineNum"> 284 </span><span class="lineCov"> 359449 : for (i = 0; i &lt; s-&gt;handle_size; ++i) {</span>
<span class="lineNum"> 285 </span><span class="lineCov"> 307768 : ret = write(s-&gt;handle[i].f, s-&gt;buffer, size);</span>
<span class="lineNum"> 286 </span> :
<span class="lineNum"> 287 </span><span class="lineCov"> 307727 : if (ret != size) {</span>
<span class="lineNum"> 287 </span><span class="lineCov"> 307768 : if (ret != size) {</span>
<span class="lineNum"> 288 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 289 </span> : s-&gt;state = STREAM_STATE_ERROR;
<span class="lineNum"> 290 </span> : s-&gt;state_index = i;
@ -362,16 +362,16 @@
<span class="lineNum"> 300 </span> : * to be able to detect memory errors on the buffer,
<span class="lineNum"> 301 </span> : * happening during the write.
<span class="lineNum"> 302 </span> : */
<span class="lineNum"> 303 </span><span class="lineCov"> 51639 : s-&gt;crc = crc32c(s-&gt;crc, s-&gt;buffer, size);</span>
<span class="lineNum"> 304 </span><span class="lineCov"> 51639 : s-&gt;crc_uncached = s-&gt;crc;</span>
<span class="lineNum"> 303 </span><span class="lineCov"> 51681 : s-&gt;crc = crc32c(s-&gt;crc, s-&gt;buffer, size);</span>
<span class="lineNum"> 304 </span><span class="lineCov"> 51680 : s-&gt;crc_uncached = s-&gt;crc;</span>
<span class="lineNum"> 305 </span> :
<span class="lineNum"> 306 </span> : /* update the offset */
<span class="lineNum"> 307 </span><span class="lineCov"> 51639 : s-&gt;offset += size;</span>
<span class="lineNum"> 308 </span><span class="lineCov"> 51639 : s-&gt;offset_uncached = s-&gt;offset;</span>
<span class="lineNum"> 307 </span><span class="lineCov"> 51680 : s-&gt;offset += size;</span>
<span class="lineNum"> 308 </span><span class="lineCov"> 51680 : s-&gt;offset_uncached = s-&gt;offset;</span>
<span class="lineNum"> 309 </span> :
<span class="lineNum"> 310 </span><span class="lineCov"> 51639 : s-&gt;pos = s-&gt;buffer;</span>
<span class="lineNum"> 310 </span><span class="lineCov"> 51680 : s-&gt;pos = s-&gt;buffer;</span>
<span class="lineNum"> 311 </span> :
<span class="lineNum"> 312 </span><span class="lineCov"> 51639 : return 0;</span>
<span class="lineNum"> 312 </span><span class="lineCov"> 51680 : return 0;</span>
<a name="313"><span class="lineNum"> 313 </span> : }</a>
<span class="lineNum"> 314 </span> :
<span class="lineNum"> 315 </span><span class="lineCov"> 1 : int64_t stell(STREAM* s)</span>
@ -389,12 +389,12 @@
<span class="lineNum"> 327 </span><span class="lineCov"> 929 : return s-&gt;crc_stream ^ CRC_IV;</span>
<a name="328"><span class="lineNum"> 328 </span> : }</a>
<span class="lineNum"> 329 </span> :
<span class="lineNum"> 330 </span><span class="lineCov"> 298580 : int sgetc_uncached(STREAM* s)</span>
<span class="lineNum"> 330 </span><span class="lineCov"> 298585 : int sgetc_uncached(STREAM* s)</span>
<span class="lineNum"> 331 </span> : {
<span class="lineNum"> 332 </span> : /* if at the end of the buffer, fill it */
<span class="lineNum"> 333 </span><span class="lineCov"> 298580 : if (s-&gt;pos == s-&gt;end &amp;&amp; sfill(s) != 0)</span>
<span class="lineNum"> 333 </span><span class="lineCov"> 298585 : if (s-&gt;pos == s-&gt;end &amp;&amp; sfill(s) != 0)</span>
<span class="lineNum"> 334 </span><span class="lineCov"> 1464 : return EOF;</span>
<span class="lineNum"> 335 </span><span class="lineCov"> 297116 : return *s-&gt;pos++;</span>
<span class="lineNum"> 335 </span><span class="lineCov"> 297121 : return *s-&gt;pos++;</span>
<a name="336"><span class="lineNum"> 336 </span> : }</a>
<span class="lineNum"> 337 </span> :
<span class="lineNum"> 338 </span><span class="lineCov"> 7623 : int sgettok(STREAM* f, char* str, int size)</span>
@ -434,35 +434,35 @@
<span class="lineNum"> 372 </span><span class="lineCov"> 7623 : return i - str;</span>
<a name="373"><span class="lineNum"> 373 </span> : }</a>
<span class="lineNum"> 374 </span> :
<span class="lineNum"> 375 </span><span class="lineCov"> 12343180 : int sread(STREAM* f, void* void_data, unsigned size)</span>
<span class="lineNum"> 375 </span><span class="lineCov"> 12342909 : int sread(STREAM* f, void* void_data, unsigned size)</span>
<span class="lineNum"> 376 </span> : {
<span class="lineNum"> 377 </span><span class="lineCov"> 12343180 : unsigned char* data = void_data;</span>
<span class="lineNum"> 377 </span><span class="lineCov"> 12342909 : unsigned char* data = void_data;</span>
<span class="lineNum"> 378 </span> :
<span class="lineNum"> 379 </span> : /* if there is enough space in memory */
<span class="lineNum"> 380 </span><span class="lineCov"> 12343180 : if (sptrlookup(f, size)) {</span>
<span class="lineNum"> 380 </span><span class="lineCov"> 12342909 : if (sptrlookup(f, size)) {</span>
<span class="lineNum"> 381 </span> : /* optimized version with all the data in memory */
<span class="lineNum"> 382 </span><span class="lineCov"> 12317138 : unsigned char* pos = sptrget(f);</span>
<span class="lineNum"> 382 </span><span class="lineCov"> 12316849 : unsigned char* pos = sptrget(f);</span>
<span class="lineNum"> 383 </span> :
<span class="lineNum"> 384 </span> : /* copy it */
<span class="lineNum"> 385 </span><span class="lineCov"> 209705167 : while (size--)</span>
<span class="lineNum"> 386 </span><span class="lineCov"> 185070891 : *data++ = *pos++;</span>
<span class="lineNum"> 385 </span><span class="lineCov"> 209697747 : while (size--)</span>
<span class="lineNum"> 386 </span><span class="lineCov"> 185064049 : *data++ = *pos++;</span>
<span class="lineNum"> 387 </span> :
<span class="lineNum"> 388 </span><span class="lineCov"> 12317138 : sptrset(f, pos);</span>
<span class="lineNum"> 388 </span><span class="lineCov"> 12316849 : sptrset(f, pos);</span>
<span class="lineNum"> 389 </span> : } else {
<span class="lineNum"> 390 </span> : /* standard version using sgetc() */
<span class="lineNum"> 391 </span><span class="lineCov"> 1373473 : while (size--) {</span>
<span class="lineNum"> 392 </span><span class="lineCov"> 1321389 : int c = sgetc(f);</span>
<span class="lineNum"> 393 </span><span class="lineCov"> 1321389 : if (c == EOF) {</span>
<span class="lineNum"> 391 </span><span class="lineCov"> 1373859 : while (size--) {</span>
<span class="lineNum"> 392 </span><span class="lineCov"> 1321739 : int c = sgetc(f);</span>
<span class="lineNum"> 393 </span><span class="lineCov"> 1321739 : if (c == EOF) {</span>
<span class="lineNum"> 394 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 395 </span> : return -1;
<span class="lineNum"> 396 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 397 </span> : }
<span class="lineNum"> 398 </span> :
<span class="lineNum"> 399 </span><span class="lineCov"> 1321389 : *data++ = c;</span>
<span class="lineNum"> 399 </span><span class="lineCov"> 1321739 : *data++ = c;</span>
<span class="lineNum"> 400 </span> : }
<span class="lineNum"> 401 </span> : }
<span class="lineNum"> 402 </span> :
<span class="lineNum"> 403 </span><span class="lineCov"> 12343180 : return 0;</span>
<span class="lineNum"> 403 </span><span class="lineCov"> 12342909 : return 0;</span>
<a name="404"><span class="lineNum"> 404 </span> : }</a>
<span class="lineNum"> 405 </span> :
<span class="lineNum"> 406 </span><span class="lineCov"> 5069 : int sgetline(STREAM* f, char* str, int size)</span>
@ -575,76 +575,76 @@
<span class="lineNum"> 513 </span> : }
<a name="514"><span class="lineNum"> 514 </span> : }</a>
<span class="lineNum"> 515 </span> :
<span class="lineNum"> 516 </span><span class="lineCov"> 18698507 : int sgetb32(STREAM* f, uint32_t* value)</span>
<span class="lineNum"> 516 </span><span class="lineCov"> 18710390 : int sgetb32(STREAM* f, uint32_t* value)</span>
<span class="lineNum"> 517 </span> : {
<span class="lineNum"> 518 </span> : uint32_t v;
<span class="lineNum"> 519 </span> : unsigned char b;
<span class="lineNum"> 520 </span> : unsigned char s;
<span class="lineNum"> 521 </span> : int c;
<span class="lineNum"> 522 </span> :
<span class="lineNum"> 523 </span><span class="lineCov"> 18698507 : v = 0;</span>
<span class="lineNum"> 524 </span><span class="lineCov"> 18698507 : s = 0;</span>
<span class="lineNum"> 523 </span><span class="lineCov"> 18710390 : v = 0;</span>
<span class="lineNum"> 524 </span><span class="lineCov"> 18710390 : s = 0;</span>
<span class="lineNum"> 525 </span> : loop:
<span class="lineNum"> 526 </span><span class="lineCov"> 35035464 : c = sgetc(f);</span>
<span class="lineNum"> 527 </span><span class="lineCov"> 35035464 : if (c == EOF) {</span>
<span class="lineNum"> 526 </span><span class="lineCov"> 35314985 : c = sgetc(f);</span>
<span class="lineNum"> 527 </span><span class="lineCov"> 35314985 : if (c == EOF) {</span>
<span class="lineNum"> 528 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 529 </span> : return -1;
<span class="lineNum"> 530 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 531 </span> : }
<span class="lineNum"> 532 </span> :
<span class="lineNum"> 533 </span><span class="lineCov"> 35035464 : b = (unsigned char)c;</span>
<span class="lineNum"> 534 </span><span class="lineCov"> 35035464 : if ((b &amp; 0x80) == 0) {</span>
<span class="lineNum"> 535 </span><span class="lineCov"> 16336957 : v |= (uint32_t)b &lt;&lt; s;</span>
<span class="lineNum"> 536 </span><span class="lineCov"> 16336957 : s += 7;</span>
<span class="lineNum"> 537 </span><span class="lineCov"> 16336957 : if (s &gt;= 32) {</span>
<span class="lineNum"> 533 </span><span class="lineCov"> 35314985 : b = (unsigned char)c;</span>
<span class="lineNum"> 534 </span><span class="lineCov"> 35314985 : if ((b &amp; 0x80) == 0) {</span>
<span class="lineNum"> 535 </span><span class="lineCov"> 16604595 : v |= (uint32_t)b &lt;&lt; s;</span>
<span class="lineNum"> 536 </span><span class="lineCov"> 16604595 : s += 7;</span>
<span class="lineNum"> 537 </span><span class="lineCov"> 16604595 : if (s &gt;= 32) {</span>
<span class="lineNum"> 538 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 539 </span> : return -1;
<span class="lineNum"> 540 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 541 </span> : }
<span class="lineNum"> 542 </span><span class="lineCov"> 16336957 : goto loop;</span>
<span class="lineNum"> 542 </span><span class="lineCov"> 16604595 : goto loop;</span>
<span class="lineNum"> 543 </span> : }
<span class="lineNum"> 544 </span> :
<span class="lineNum"> 545 </span><span class="lineCov"> 18698507 : v |= (uint32_t)(b &amp; 0x7f) &lt;&lt; s;</span>
<span class="lineNum"> 545 </span><span class="lineCov"> 18710390 : v |= (uint32_t)(b &amp; 0x7f) &lt;&lt; s;</span>
<span class="lineNum"> 546 </span> :
<span class="lineNum"> 547 </span><span class="lineCov"> 18698507 : *value = v;</span>
<span class="lineNum"> 547 </span><span class="lineCov"> 18710390 : *value = v;</span>
<span class="lineNum"> 548 </span> :
<span class="lineNum"> 549 </span><span class="lineCov"> 18698507 : return 0;</span>
<span class="lineNum"> 549 </span><span class="lineCov"> 18710390 : return 0;</span>
<a name="550"><span class="lineNum"> 550 </span> : }</a>
<span class="lineNum"> 551 </span> :
<span class="lineNum"> 552 </span><span class="lineCov"> 10465700 : int sgetb64(STREAM* f, uint64_t* value)</span>
<span class="lineNum"> 552 </span><span class="lineCov"> 10465937 : int sgetb64(STREAM* f, uint64_t* value)</span>
<span class="lineNum"> 553 </span> : {
<span class="lineNum"> 554 </span> : uint64_t v;
<span class="lineNum"> 555 </span> : unsigned char b;
<span class="lineNum"> 556 </span> : unsigned char s;
<span class="lineNum"> 557 </span> : int c;
<span class="lineNum"> 558 </span> :
<span class="lineNum"> 559 </span><span class="lineCov"> 10465700 : v = 0;</span>
<span class="lineNum"> 560 </span><span class="lineCov"> 10465700 : s = 0;</span>
<span class="lineNum"> 559 </span><span class="lineCov"> 10465937 : v = 0;</span>
<span class="lineNum"> 560 </span><span class="lineCov"> 10465937 : s = 0;</span>
<span class="lineNum"> 561 </span> : loop:
<span class="lineNum"> 562 </span><span class="lineCov"> 38270922 : c = sgetc(f);</span>
<span class="lineNum"> 563 </span><span class="lineCov"> 38270922 : if (c == EOF) {</span>
<span class="lineNum"> 562 </span><span class="lineCov"> 38271575 : c = sgetc(f);</span>
<span class="lineNum"> 563 </span><span class="lineCov"> 38271575 : if (c == EOF) {</span>
<span class="lineNum"> 564 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 565 </span> : return -1;
<span class="lineNum"> 566 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 567 </span> : }
<span class="lineNum"> 568 </span> :
<span class="lineNum"> 569 </span><span class="lineCov"> 38270922 : b = (unsigned char)c;</span>
<span class="lineNum"> 570 </span><span class="lineCov"> 38270922 : if ((b &amp; 0x80) == 0) {</span>
<span class="lineNum"> 571 </span><span class="lineCov"> 27805222 : v |= (uint64_t)b &lt;&lt; s;</span>
<span class="lineNum"> 572 </span><span class="lineCov"> 27805222 : s += 7;</span>
<span class="lineNum"> 573 </span><span class="lineCov"> 27805222 : if (s &gt;= 64) {</span>
<span class="lineNum"> 569 </span><span class="lineCov"> 38271575 : b = (unsigned char)c;</span>
<span class="lineNum"> 570 </span><span class="lineCov"> 38271575 : if ((b &amp; 0x80) == 0) {</span>
<span class="lineNum"> 571 </span><span class="lineCov"> 27805638 : v |= (uint64_t)b &lt;&lt; s;</span>
<span class="lineNum"> 572 </span><span class="lineCov"> 27805638 : s += 7;</span>
<span class="lineNum"> 573 </span><span class="lineCov"> 27805638 : if (s &gt;= 64) {</span>
<span class="lineNum"> 574 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 575 </span> : return -1;
<span class="lineNum"> 576 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 577 </span> : }
<span class="lineNum"> 578 </span><span class="lineCov"> 27805222 : goto loop;</span>
<span class="lineNum"> 578 </span><span class="lineCov"> 27805638 : goto loop;</span>
<span class="lineNum"> 579 </span> : }
<span class="lineNum"> 580 </span> :
<span class="lineNum"> 581 </span><span class="lineCov"> 10465700 : v |= (uint64_t)(b &amp; 0x7f) &lt;&lt; s;</span>
<span class="lineNum"> 581 </span><span class="lineCov"> 10465937 : v |= (uint64_t)(b &amp; 0x7f) &lt;&lt; s;</span>
<span class="lineNum"> 582 </span> :
<span class="lineNum"> 583 </span><span class="lineCov"> 10465700 : *value = v;</span>
<span class="lineNum"> 583 </span><span class="lineCov"> 10465937 : *value = v;</span>
<span class="lineNum"> 584 </span> :
<span class="lineNum"> 585 </span><span class="lineCov"> 10465700 : return 0;</span>
<span class="lineNum"> 585 </span><span class="lineCov"> 10465937 : return 0;</span>
<a name="586"><span class="lineNum"> 586 </span> : }</a>
<span class="lineNum"> 587 </span> :
<span class="lineNum"> 588 </span><span class="lineCov"> 362 : int sgetble32(STREAM* f, uint32_t* value)</span>
@ -662,35 +662,35 @@
<span class="lineNum"> 600 </span><span class="lineCov"> 362 : return 0;</span>
<a name="601"><span class="lineNum"> 601 </span> : }</a>
<span class="lineNum"> 602 </span> :
<span class="lineNum"> 603 </span><span class="lineCov"> 3732711 : int sgetbs(STREAM* f, char* str, int size)</span>
<span class="lineNum"> 603 </span><span class="lineCov"> 3732790 : int sgetbs(STREAM* f, char* str, int size)</span>
<span class="lineNum"> 604 </span> : {
<span class="lineNum"> 605 </span> : uint32_t len;
<span class="lineNum"> 606 </span> :
<span class="lineNum"> 607 </span><span class="lineCov"> 3732711 : if (sgetb32(f, &amp;len) &lt; 0) {</span>
<span class="lineNum"> 607 </span><span class="lineCov"> 3732790 : if (sgetb32(f, &amp;len) &lt; 0) {</span>
<span class="lineNum"> 608 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 609 </span> : return -1;
<span class="lineNum"> 610 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 611 </span> : }
<span class="lineNum"> 612 </span> :
<span class="lineNum"> 613 </span><span class="lineCov"> 3732711 : if (len + 1 &gt; (uint32_t)size) {</span>
<span class="lineNum"> 613 </span><span class="lineCov"> 3732790 : if (len + 1 &gt; (uint32_t)size) {</span>
<span class="lineNum"> 614 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 615 </span> : return -1;
<span class="lineNum"> 616 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 617 </span> : }
<span class="lineNum"> 618 </span> :
<span class="lineNum"> 619 </span><span class="lineCov"> 3732711 : str[len] = 0;</span>
<span class="lineNum"> 619 </span><span class="lineCov"> 3732790 : str[len] = 0;</span>
<span class="lineNum"> 620 </span> :
<span class="lineNum"> 621 </span><span class="lineCov"> 3732711 : return sread(f, str, (int)len);</span>
<span class="lineNum"> 621 </span><span class="lineCov"> 3732790 : return sread(f, str, (int)len);</span>
<a name="622"><span class="lineNum"> 622 </span> : }</a>
<span class="lineNum"> 623 </span> :
<span class="lineNum"> 624 </span><span class="lineCov"> 130046569 : int swrite(const void* void_data, unsigned size, STREAM* f)</span>
<span class="lineNum"> 624 </span><span class="lineCov"> 129597634 : int swrite(const void* void_data, unsigned size, STREAM* f)</span>
<span class="lineNum"> 625 </span> : {
<span class="lineNum"> 626 </span><span class="lineCov"> 130046569 : const unsigned char* data = void_data;</span>
<span class="lineNum"> 626 </span><span class="lineCov"> 129597634 : const unsigned char* data = void_data;</span>
<span class="lineNum"> 627 </span> :
<span class="lineNum"> 628 </span> : /* if there is enough space in memory */
<span class="lineNum"> 629 </span><span class="lineCov"> 130046569 : if (sptrlookup(f, size)) {</span>
<span class="lineNum"> 629 </span><span class="lineCov"> 129597634 : if (sptrlookup(f, size)) {</span>
<span class="lineNum"> 630 </span> : /* optimized version with all the data in memory */
<span class="lineNum"> 631 </span><span class="lineCov"> 127834006 : unsigned char* pos = sptrget(f);</span>
<span class="lineNum"> 631 </span><span class="lineCov"> 128366511 : unsigned char* pos = sptrget(f);</span>
<span class="lineNum"> 632 </span> :
<span class="lineNum"> 633 </span> : /**
<span class="lineNum"> 634 </span> : * Update the crc *before* writing the data in the buffer
@ -699,17 +699,17 @@
<span class="lineNum"> 637 </span> : * to be able to detect memory errors on the buffer,
<span class="lineNum"> 638 </span> : * happening before we write it on the file.
<span class="lineNum"> 639 </span> : */
<span class="lineNum"> 640 </span><span class="lineCov"> 129791160 : f-&gt;crc_stream = crc32c_plain(f-&gt;crc_stream, data, size);</span>
<span class="lineNum"> 640 </span><span class="lineCov"> 127220529 : f-&gt;crc_stream = crc32c_plain(f-&gt;crc_stream, data, size);</span>
<span class="lineNum"> 641 </span> :
<span class="lineNum"> 642 </span> : /* copy it */
<span class="lineNum"> 643 </span><span class="lineCov"> 1011408978 : while (size--)</span>
<span class="lineNum"> 644 </span><span class="lineCov"> 752691158 : *pos++ = *data++;</span>
<span class="lineNum"> 643 </span><span class="lineCov"> 984312399 : while (size--)</span>
<span class="lineNum"> 644 </span><span class="lineCov"> 729779043 : *pos++ = *data++;</span>
<span class="lineNum"> 645 </span> :
<span class="lineNum"> 646 </span><span class="lineCov"> 129358910 : sptrset(f, pos);</span>
<span class="lineNum"> 646 </span><span class="lineCov"> 127266678 : sptrset(f, pos);</span>
<span class="lineNum"> 647 </span> : } else {
<span class="lineNum"> 648 </span> : /* standard version using sputc() */
<span class="lineNum"> 649 </span><span class="lineCov"> 355086 : while (size--) {</span>
<span class="lineNum"> 650 </span><span class="lineCov"> 321067 : if (sputc(*data++, f) != 0) {</span>
<span class="lineNum"> 649 </span><span class="lineCov"> 352837 : while (size--) {</span>
<span class="lineNum"> 650 </span><span class="lineCov"> 318158 : if (sputc(*data++, f) != 0) {</span>
<span class="lineNum"> 651 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 652 </span> : return -1;
<span class="lineNum"> 653 </span> : /* LCOV_EXCL_STOP */
@ -717,49 +717,49 @@
<span class="lineNum"> 655 </span> : }
<span class="lineNum"> 656 </span> : }
<span class="lineNum"> 657 </span> :
<span class="lineNum"> 658 </span><span class="lineCov"> 131892349 : return 0;</span>
<span class="lineNum"> 658 </span><span class="lineCov"> 129224881 : return 0;</span>
<a name="659"><span class="lineNum"> 659 </span> : }</a>
<span class="lineNum"> 660 </span> :
<span class="lineNum"> 661 </span><span class="lineCov"> 62124806 : int sputb32(uint32_t value, STREAM* s)</span>
<span class="lineNum"> 661 </span><span class="lineCov"> 62339359 : int sputb32(uint32_t value, STREAM* s)</span>
<span class="lineNum"> 662 </span> : {
<span class="lineNum"> 663 </span> : unsigned char b;
<span class="lineNum"> 664 </span> : unsigned char buf[16];
<span class="lineNum"> 665 </span> : unsigned i;
<span class="lineNum"> 666 </span> :
<span class="lineNum"> 667 </span><span class="lineCov"> 62124806 : i = 0;</span>
<span class="lineNum"> 667 </span><span class="lineCov"> 62339359 : i = 0;</span>
<span class="lineNum"> 668 </span> : loop:
<span class="lineNum"> 669 </span><span class="lineCov"> 115908253 : b = value &amp; 0x7f;</span>
<span class="lineNum"> 670 </span><span class="lineCov"> 115908253 : value &gt;&gt;= 7;</span>
<span class="lineNum"> 669 </span><span class="lineCov"> 117525500 : b = value &amp; 0x7f;</span>
<span class="lineNum"> 670 </span><span class="lineCov"> 117525500 : value &gt;&gt;= 7;</span>
<span class="lineNum"> 671 </span> :
<span class="lineNum"> 672 </span><span class="lineCov"> 115908253 : if (value) {</span>
<span class="lineNum"> 673 </span><span class="lineCov"> 53783447 : buf[i++] = b;</span>
<span class="lineNum"> 674 </span><span class="lineCov"> 53783447 : goto loop;</span>
<span class="lineNum"> 672 </span><span class="lineCov"> 117525500 : if (value) {</span>
<span class="lineNum"> 673 </span><span class="lineCov"> 55186141 : buf[i++] = b;</span>
<span class="lineNum"> 674 </span><span class="lineCov"> 55186141 : goto loop;</span>
<span class="lineNum"> 675 </span> : }
<span class="lineNum"> 676 </span> :
<span class="lineNum"> 677 </span><span class="lineCov"> 62124806 : buf[i++] = b | 0x80;</span>
<span class="lineNum"> 677 </span><span class="lineCov"> 62339359 : buf[i++] = b | 0x80;</span>
<span class="lineNum"> 678 </span> :
<span class="lineNum"> 679 </span><span class="lineCov"> 62124806 : return swrite(buf, i, s);</span>
<span class="lineNum"> 679 </span><span class="lineCov"> 62339359 : return swrite(buf, i, s);</span>
<a name="680"><span class="lineNum"> 680 </span> : }</a>
<span class="lineNum"> 681 </span> :
<span class="lineNum"> 682 </span><span class="lineCov"> 34119322 : int sputb64(uint64_t value, STREAM* s)</span>
<span class="lineNum"> 682 </span><span class="lineCov"> 34173479 : int sputb64(uint64_t value, STREAM* s)</span>
<span class="lineNum"> 683 </span> : {
<span class="lineNum"> 684 </span> : unsigned char b;
<span class="lineNum"> 685 </span> : unsigned char buf[16];
<span class="lineNum"> 686 </span> : unsigned i;
<span class="lineNum"> 687 </span> :
<span class="lineNum"> 688 </span><span class="lineCov"> 34119322 : i = 0;</span>
<span class="lineNum"> 688 </span><span class="lineCov"> 34173479 : i = 0;</span>
<span class="lineNum"> 689 </span> : loop:
<span class="lineNum"> 690 </span><span class="lineCov"> 124052999 : b = value &amp; 0x7f;</span>
<span class="lineNum"> 691 </span><span class="lineCov"> 124052999 : value &gt;&gt;= 7;</span>
<span class="lineNum"> 690 </span><span class="lineCov"> 124705929 : b = value &amp; 0x7f;</span>
<span class="lineNum"> 691 </span><span class="lineCov"> 124705929 : value &gt;&gt;= 7;</span>
<span class="lineNum"> 692 </span> :
<span class="lineNum"> 693 </span><span class="lineCov"> 124052999 : if (value) {</span>
<span class="lineNum"> 694 </span><span class="lineCov"> 89933677 : buf[i++] = b;</span>
<span class="lineNum"> 695 </span><span class="lineCov"> 89933677 : goto loop;</span>
<span class="lineNum"> 693 </span><span class="lineCov"> 124705929 : if (value) {</span>
<span class="lineNum"> 694 </span><span class="lineCov"> 90532450 : buf[i++] = b;</span>
<span class="lineNum"> 695 </span><span class="lineCov"> 90532450 : goto loop;</span>
<span class="lineNum"> 696 </span> : }
<span class="lineNum"> 697 </span> :
<span class="lineNum"> 698 </span><span class="lineCov"> 34119322 : buf[i++] = b | 0x80;</span>
<span class="lineNum"> 698 </span><span class="lineCov"> 34173479 : buf[i++] = b | 0x80;</span>
<span class="lineNum"> 699 </span> :
<span class="lineNum"> 700 </span><span class="lineCov"> 34119322 : return swrite(buf, i, s);</span>
<span class="lineNum"> 700 </span><span class="lineCov"> 34173479 : return swrite(buf, i, s);</span>
<a name="701"><span class="lineNum"> 701 </span> : }</a>
<span class="lineNum"> 702 </span> :
<span class="lineNum"> 703 </span><span class="lineCov"> 929 : int sputble32(uint32_t value, STREAM* s)</span>
@ -774,25 +774,25 @@
<span class="lineNum"> 712 </span><span class="lineCov"> 929 : return swrite(buf, 4, s);</span>
<a name="713"><span class="lineNum"> 713 </span> : }</a>
<span class="lineNum"> 714 </span> :
<span class="lineNum"> 715 </span><span class="lineCov"> 12250827 : int sputbs(const char* str, STREAM* f)</span>
<span class="lineNum"> 715 </span><span class="lineCov"> 12306366 : int sputbs(const char* str, STREAM* f)</span>
<span class="lineNum"> 716 </span> : {
<span class="lineNum"> 717 </span><span class="lineCov"> 12250827 : size_t len = strlen(str);</span>
<span class="lineNum"> 717 </span><span class="lineCov"> 12306366 : size_t len = strlen(str);</span>
<span class="lineNum"> 718 </span> :
<span class="lineNum"> 719 </span><span class="lineCov"> 12250827 : if (sputb32(len, f) != 0) {</span>
<span class="lineNum"> 719 </span><span class="lineCov"> 12306366 : if (sputb32(len, f) != 0) {</span>
<span class="lineNum"> 720 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 721 </span> : return -1;
<span class="lineNum"> 722 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 723 </span> : }
<span class="lineNum"> 724 </span> :
<span class="lineNum"> 725 </span><span class="lineCov"> 12311369 : return swrite(str, len, f);</span>
<span class="lineNum"> 725 </span><span class="lineCov"> 12287997 : return swrite(str, len, f);</span>
<span class="lineNum"> 726 </span> : }
<a name="727"><span class="lineNum"> 727 </span> : </a>
<span class="lineNum"> 728 </span> : #if HAVE_FSYNC
<span class="lineNum"> 729 </span><span class="lineCov"> 913 : int ssync(STREAM* s)</span>
<span class="lineNum"> 729 </span><span class="lineCov"> 912 : int ssync(STREAM* s)</span>
<span class="lineNum"> 730 </span> : {
<span class="lineNum"> 731 </span> : unsigned i;
<span class="lineNum"> 732 </span> :
<span class="lineNum"> 733 </span><span class="lineCov"> 1826 : for (i = 0; i &lt; s-&gt;handle_size; ++i) {</span>
<span class="lineNum"> 733 </span><span class="lineCov"> 1824 : for (i = 0; i &lt; s-&gt;handle_size; ++i) {</span>
<span class="lineNum"> 734 </span><span class="lineCov"> 913 : if (fsync(s-&gt;handle[i].f) != 0) {</span>
<span class="lineNum"> 735 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 736 </span> : s-&gt;state = STREAM_STATE_ERROR;
@ -802,7 +802,7 @@
<span class="lineNum"> 740 </span> : }
<span class="lineNum"> 741 </span> : }
<span class="lineNum"> 742 </span> :
<span class="lineNum"> 743 </span><span class="lineCov"> 913 : return 0;</span>
<span class="lineNum"> 743 </span><span class="lineCov"> 911 : return 0;</span>
<span class="lineNum"> 744 </span> : }
<span class="lineNum"> 745 </span> : #endif
<span class="lineNum"> 746 </span> :

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -60,28 +60,28 @@
<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="stream.h.gcov.html#168">sptrget</a></td>
<td class="coverFnHi">143442663</td>
<td class="coverFn"><a href="stream.h.gcov.html#160">sptrlookup</a></td>
<td class="coverFnHi">140471390</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#160">sptrlookup</a></td>
<td class="coverFnHi">140856705</td>
<td class="coverFn"><a href="stream.h.gcov.html#168">sptrget</a></td>
<td class="coverFnHi">140020205</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#176">sptrset</a></td>
<td class="coverFnHi">139615572</td>
<td class="coverFnHi">138951723</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#230">sgetc</a></td>
<td class="coverFnHi">81925866</td>
<td class="coverFnHi">82206359</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#184">serror</a></td>
<td class="coverFnHi">24801447</td>
<td class="coverFnHi">24784868</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#346">sputc</a></td>
<td class="coverFnHi">23657932</td>
<td class="coverFnHi">23611223</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#241">sungetc</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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#184">serror</a></td>
<td class="coverFnHi">24801447</td>
<td class="coverFnHi">24784868</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#208">serrorfile</a></td>
@ -73,7 +73,7 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#230">sgetc</a></td>
<td class="coverFnHi">81925866</td>
<td class="coverFnHi">82206359</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#256">sgeteol</a></td>
@ -85,19 +85,19 @@
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#168">sptrget</a></td>
<td class="coverFnHi">143442663</td>
<td class="coverFnHi">140020205</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#160">sptrlookup</a></td>
<td class="coverFnHi">140856705</td>
<td class="coverFnHi">140471390</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#176">sptrset</a></td>
<td class="coverFnHi">139615572</td>
<td class="coverFnHi">138951723</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#346">sputc</a></td>
<td class="coverFnHi">23657932</td>
<td class="coverFnHi">23611223</td>
</tr>
<tr>
<td class="coverFn"><a href="stream.h.gcov.html#241">sungetc</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">10</td>
@ -221,33 +221,33 @@
<span class="lineNum"> 159 </span> : /**
<a name="160"><span class="lineNum"> 160 </span> : * Check if the buffer has enough data loaded.</a>
<span class="lineNum"> 161 </span> : */
<span class="lineNum"> 162 </span><span class="lineCov"> 140856705 : static inline int sptrlookup(STREAM* s, int size)</span>
<span class="lineNum"> 162 </span><span class="lineCov"> 140471390 : static inline int sptrlookup(STREAM* s, int size)</span>
<span class="lineNum"> 163 </span> : {
<span class="lineNum"> 164 </span><span class="lineCov"> 140856705 : return s-&gt;pos + size &lt;= s-&gt;end;</span>
<span class="lineNum"> 164 </span><span class="lineCov"> 140471390 : return s-&gt;pos + size &lt;= s-&gt;end;</span>
<span class="lineNum"> 165 </span> : }
<span class="lineNum"> 166 </span> :
<span class="lineNum"> 167 </span> : /**
<a name="168"><span class="lineNum"> 168 </span> : * Get the current stream ptr.</a>
<span class="lineNum"> 169 </span> : */
<span class="lineNum"> 170 </span><span class="lineCov"> 143442663 : static inline unsigned char* sptrget(STREAM* s)</span>
<span class="lineNum"> 170 </span><span class="lineCov"> 140020205 : static inline unsigned char* sptrget(STREAM* s)</span>
<span class="lineNum"> 171 </span> : {
<span class="lineNum"> 172 </span><span class="lineCov"> 143442663 : return s-&gt;pos;</span>
<span class="lineNum"> 172 </span><span class="lineCov"> 140020205 : return s-&gt;pos;</span>
<span class="lineNum"> 173 </span> : }
<span class="lineNum"> 174 </span> :
<span class="lineNum"> 175 </span> : /**
<a name="176"><span class="lineNum"> 176 </span> : * Set the current stream ptr.</a>
<span class="lineNum"> 177 </span> : */
<span class="lineNum"> 178 </span><span class="lineCov"> 139615572 : static inline void sptrset(STREAM* s, unsigned char* ptr)</span>
<span class="lineNum"> 178 </span><span class="lineCov"> 138951723 : static inline void sptrset(STREAM* s, unsigned char* ptr)</span>
<span class="lineNum"> 179 </span> : {
<span class="lineNum"> 180 </span><span class="lineCov"> 139615572 : s-&gt;pos = ptr;</span>
<span class="lineNum"> 181 </span><span class="lineCov"> 139615572 : }</span>
<span class="lineNum"> 180 </span><span class="lineCov"> 138951723 : s-&gt;pos = ptr;</span>
<span class="lineNum"> 181 </span><span class="lineCov"> 138951723 : }</span>
<span class="lineNum"> 182 </span> :
<span class="lineNum"> 183 </span> : /**
<a name="184"><span class="lineNum"> 184 </span> : * Check the error status. Like ferror().</a>
<span class="lineNum"> 185 </span> : */
<span class="lineNum"> 186 </span><span class="lineCov"> 24801447 : static inline int serror(STREAM* s)</span>
<span class="lineNum"> 186 </span><span class="lineCov"> 24784868 : static inline int serror(STREAM* s)</span>
<span class="lineNum"> 187 </span> : {
<span class="lineNum"> 188 </span><span class="lineCov"> 24801447 : return s-&gt;state == STREAM_STATE_ERROR;</span>
<span class="lineNum"> 188 </span><span class="lineCov"> 24784868 : return s-&gt;state == STREAM_STATE_ERROR;</span>
<span class="lineNum"> 189 </span> : }
<span class="lineNum"> 190 </span> :
<span class="lineNum"> 191 </span> : /**
@ -291,11 +291,11 @@
<span class="lineNum"> 229 </span> : /**
<a name="230"><span class="lineNum"> 230 </span> : * Read a char. Like fgetc().</a>
<span class="lineNum"> 231 </span> : */
<span class="lineNum"> 232 </span><span class="lineCov"> 81925866 : static inline int sgetc(STREAM* s)</span>
<span class="lineNum"> 232 </span><span class="lineCov"> 82206359 : static inline int sgetc(STREAM* s)</span>
<span class="lineNum"> 233 </span> : {
<span class="lineNum"> 234 </span><span class="lineCov"> 81925866 : if (tommy_unlikely(s-&gt;pos == s-&gt;end))</span>
<span class="lineNum"> 235 </span><span class="lineCov"> 298580 : return sgetc_uncached(s);</span>
<span class="lineNum"> 236 </span><span class="lineCov"> 81627286 : return *s-&gt;pos++;</span>
<span class="lineNum"> 234 </span><span class="lineCov"> 82206359 : if (tommy_unlikely(s-&gt;pos == s-&gt;end))</span>
<span class="lineNum"> 235 </span><span class="lineCov"> 298585 : return sgetc_uncached(s);</span>
<span class="lineNum"> 236 </span><span class="lineCov"> 81907774 : return *s-&gt;pos++;</span>
<span class="lineNum"> 237 </span> : }
<span class="lineNum"> 238 </span> :
<span class="lineNum"> 239 </span> : /**
@ -407,10 +407,10 @@
<span class="lineNum"> 345 </span> : * Write a char. Like fputc().
<a name="346"><span class="lineNum"> 346 </span> : * Return 0 on success or -1 on error.</a>
<span class="lineNum"> 347 </span> : */
<span class="lineNum"> 348 </span><span class="lineCov"> 23657932 : static inline int sputc(int c, STREAM* s)</span>
<span class="lineNum"> 348 </span><span class="lineCov"> 23611223 : static inline int sputc(int c, STREAM* s)</span>
<span class="lineNum"> 349 </span> : {
<span class="lineNum"> 350 </span><span class="lineCov"> 23657932 : if (s-&gt;pos == s-&gt;end) {</span>
<span class="lineNum"> 351 </span><span class="lineCov"> 49796 : if (sflush(s) != 0)</span>
<span class="lineNum"> 350 </span><span class="lineCov"> 23611223 : if (s-&gt;pos == s-&gt;end) {</span>
<span class="lineNum"> 351 </span><span class="lineCov"> 49838 : if (sflush(s) != 0)</span>
<span class="lineNum"> 352 </span><span class="lineNoCov"> 0 : return -1;</span>
<span class="lineNum"> 353 </span> : }
<span class="lineNum"> 354 </span> :
@ -421,11 +421,11 @@
<span class="lineNum"> 359 </span> : * to be able to detect memory errors on the buffer,
<span class="lineNum"> 360 </span> : * happening before we write it on the file.
<span class="lineNum"> 361 </span> : */
<span class="lineNum"> 362 </span><span class="lineCov"> 23657933 : s-&gt;crc_stream = crc32c_plain_char(s-&gt;crc_stream, c);</span>
<span class="lineNum"> 362 </span><span class="lineCov"> 23611224 : s-&gt;crc_stream = crc32c_plain_char(s-&gt;crc_stream, c);</span>
<span class="lineNum"> 363 </span> :
<span class="lineNum"> 364 </span><span class="lineCov"> 23816691 : *s-&gt;pos++ = c;</span>
<span class="lineNum"> 364 </span><span class="lineCov"> 23809904 : *s-&gt;pos++ = c;</span>
<span class="lineNum"> 365 </span> :
<span class="lineNum"> 366 </span><span class="lineCov"> 23816691 : return 0;</span>
<span class="lineNum"> 366 </span><span class="lineCov"> 23809904 : return 0;</span>
<span class="lineNum"> 367 </span> : }
<span class="lineNum"> 368 </span> :
<span class="lineNum"> 369 </span> : /**

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">29</td>
@ -61,55 +61,55 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#465">pathcmp</a></td>
<td class="coverFnHi">50334016</td>
<td class="coverFnHi">50336221</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#422">pathprint</a></td>
<td class="coverFnHi">50027975</td>
<td class="coverFnHi">50030363</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#657">malloc_nofail</a></td>
<td class="coverFnHi">13871380</td>
<td class="coverFnHi">13871886</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#350">pathcpy</a></td>
<td class="coverFnHi">6858280</td>
<td class="coverFnHi">6858601</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#706">strdup_nofail</a></td>
<td class="coverFnHi">5662644</td>
<td class="coverFnHi">5663011</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#116">log_tag</a></td>
<td class="coverFnHi">4043608</td>
<td class="coverFnHi">4041705</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#290">esc</a></td>
<td class="coverFnHi">3594259</td>
<td class="coverFnHi">3592843</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#485">mkancestor</a></td>
<td class="coverFnHi">793004</td>
<td class="coverFnHi">792978</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#77">log_error</a></td>
<td class="coverFnHi">614821</td>
<td class="coverFnHi">614592</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#169">msg_info</a></td>
<td class="coverFnHi">296170</td>
<td class="coverFnHi">295863</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#231">msg_verbose</a></td>
<td class="coverFnHi">127078</td>
<td class="coverFnHi">126936</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#549">fmtime</a></td>
<td class="coverFnHi">118002</td>
<td class="coverFnHi">117937</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#408">pathexport</a></td>
<td class="coverFnHi">17567</td>
<td class="coverFnHi">17569</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#99">log_expected</a></td>
@ -137,7 +137,7 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#212">msg_bar</a></td>
<td class="coverFnHi">954</td>
<td class="coverFnHi">952</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#55">log_fatal</a></td>
@ -149,7 +149,7 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#145">msg_status</a></td>
<td class="coverFnHi">568</td>
<td class="coverFnHi">569</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#603">malloc_counter</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">29</td>
@ -65,15 +65,15 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#290">esc</a></td>
<td class="coverFnHi">3594259</td>
<td class="coverFnHi">3592843</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#549">fmtime</a></td>
<td class="coverFnHi">118002</td>
<td class="coverFnHi">117937</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#77">log_error</a></td>
<td class="coverFnHi">614821</td>
<td class="coverFnHi">614592</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#99">log_expected</a></td>
@ -89,7 +89,7 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#116">log_tag</a></td>
<td class="coverFnHi">4043608</td>
<td class="coverFnHi">4041705</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#603">malloc_counter</a></td>
@ -97,15 +97,15 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#657">malloc_nofail</a></td>
<td class="coverFnHi">13871380</td>
<td class="coverFnHi">13871886</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#485">mkancestor</a></td>
<td class="coverFnHi">793004</td>
<td class="coverFnHi">792978</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#212">msg_bar</a></td>
<td class="coverFnHi">954</td>
<td class="coverFnHi">952</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#255">msg_flush</a></td>
@ -113,7 +113,7 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#169">msg_info</a></td>
<td class="coverFnHi">296170</td>
<td class="coverFnHi">295863</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#188">msg_progress</a></td>
@ -121,11 +121,11 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#145">msg_status</a></td>
<td class="coverFnHi">568</td>
<td class="coverFnHi">569</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#231">msg_verbose</a></td>
<td class="coverFnHi">127078</td>
<td class="coverFnHi">126936</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#364">pathcat</a></td>
@ -137,11 +137,11 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#465">pathcmp</a></td>
<td class="coverFnHi">50334016</td>
<td class="coverFnHi">50336221</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#350">pathcpy</a></td>
<td class="coverFnHi">6858280</td>
<td class="coverFnHi">6858601</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#456">pathcut</a></td>
@ -149,7 +149,7 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#408">pathexport</a></td>
<td class="coverFnHi">17567</td>
<td class="coverFnHi">17569</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#394">pathimport</a></td>
@ -157,7 +157,7 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#422">pathprint</a></td>
<td class="coverFnHi">50027975</td>
<td class="coverFnHi">50030363</td>
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#439">pathslash</a></td>
@ -181,7 +181,7 @@
</tr>
<tr>
<td class="coverFn"><a href="support.c.gcov.html#706">strdup_nofail</a></td>
<td class="coverFnHi">5662644</td>
<td class="coverFnHi">5663011</td>
</tr>
</table>
<br>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">29</td>
@ -138,27 +138,27 @@
<span class="lineNum"> 76 </span><span class="lineCov"> 804 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="77"><span class="lineNum"> 77 </span><span class="lineCov"> 804 : }</span></a>
<span class="lineNum"> 78 </span> :
<span class="lineNum"> 79 </span><span class="lineCov"> 614821 : void log_error(const char* format, ...)</span>
<span class="lineNum"> 79 </span><span class="lineCov"> 614592 : void log_error(const char* format, ...)</span>
<span class="lineNum"> 80 </span> : {
<span class="lineNum"> 81 </span> : va_list ap;
<span class="lineNum"> 82 </span> :
<span class="lineNum"> 83 </span><span class="lineCov"> 614821 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 83 </span><span class="lineCov"> 614592 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 84 </span> :
<span class="lineNum"> 85 </span><span class="lineCov"> 614821 : if (stdlog) {</span>
<span class="lineNum"> 86 </span><span class="lineCov"> 612910 : va_start(ap, format);</span>
<span class="lineNum"> 87 </span><span class="lineCov"> 612910 : fprintf(stdlog, &quot;msg:error: &quot;);</span>
<span class="lineNum"> 88 </span><span class="lineCov"> 612910 : vfprintf(stdlog, format, ap);</span>
<span class="lineNum"> 89 </span><span class="lineCov"> 612910 : fflush(stdlog);</span>
<span class="lineNum"> 90 </span><span class="lineCov"> 612910 : va_end(ap);</span>
<span class="lineNum"> 85 </span><span class="lineCov"> 614592 : if (stdlog) {</span>
<span class="lineNum"> 86 </span><span class="lineCov"> 612682 : va_start(ap, format);</span>
<span class="lineNum"> 87 </span><span class="lineCov"> 612682 : fprintf(stdlog, &quot;msg:error: &quot;);</span>
<span class="lineNum"> 88 </span><span class="lineCov"> 612682 : vfprintf(stdlog, format, ap);</span>
<span class="lineNum"> 89 </span><span class="lineCov"> 612682 : fflush(stdlog);</span>
<span class="lineNum"> 90 </span><span class="lineCov"> 612682 : va_end(ap);</span>
<span class="lineNum"> 91 </span> : } else {
<span class="lineNum"> 92 </span><span class="lineCov"> 1911 : va_start(ap, format);</span>
<span class="lineNum"> 93 </span><span class="lineCov"> 1911 : vfprintf(stderr, format, ap);</span>
<span class="lineNum"> 94 </span><span class="lineCov"> 1911 : fflush(stderr);</span>
<span class="lineNum"> 95 </span><span class="lineCov"> 1911 : va_end(ap);</span>
<span class="lineNum"> 92 </span><span class="lineCov"> 1910 : va_start(ap, format);</span>
<span class="lineNum"> 93 </span><span class="lineCov"> 1910 : vfprintf(stderr, format, ap);</span>
<span class="lineNum"> 94 </span><span class="lineCov"> 1910 : fflush(stderr);</span>
<span class="lineNum"> 95 </span><span class="lineCov"> 1910 : va_end(ap);</span>
<span class="lineNum"> 96 </span> : }
<span class="lineNum"> 97 </span> :
<span class="lineNum"> 98 </span><span class="lineCov"> 614821 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="99"><span class="lineNum"> 99 </span><span class="lineCov"> 614821 : }</span></a>
<span class="lineNum"> 98 </span><span class="lineCov"> 614592 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="99"><span class="lineNum"> 99 </span><span class="lineCov"> 614592 : }</span></a>
<span class="lineNum"> 100 </span> :
<span class="lineNum"> 101 </span><span class="lineCov"> 11751 : void log_expected(const char* format, ...)</span>
<span class="lineNum"> 102 </span> : {
@ -177,22 +177,22 @@
<span class="lineNum"> 115 </span><span class="lineCov"> 11751 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="116"><span class="lineNum"> 116 </span><span class="lineCov"> 11751 : }</span></a>
<span class="lineNum"> 117 </span> :
<span class="lineNum"> 118 </span><span class="lineCov"> 4043608 : void log_tag(const char* format, ...)</span>
<span class="lineNum"> 118 </span><span class="lineCov"> 4041705 : void log_tag(const char* format, ...)</span>
<span class="lineNum"> 119 </span> : {
<span class="lineNum"> 120 </span> : va_list ap;
<span class="lineNum"> 121 </span> :
<span class="lineNum"> 122 </span><span class="lineCov"> 4043608 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 122 </span><span class="lineCov"> 4041705 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 123 </span> :
<span class="lineNum"> 124 </span><span class="lineCov"> 4043608 : if (stdlog) {</span>
<span class="lineNum"> 125 </span><span class="lineCov"> 2964603 : va_start(ap, format);</span>
<span class="lineNum"> 126 </span><span class="lineCov"> 2964603 : vfprintf(stdlog, format, ap);</span>
<span class="lineNum"> 124 </span><span class="lineCov"> 4041705 : if (stdlog) {</span>
<span class="lineNum"> 125 </span><span class="lineCov"> 2962677 : va_start(ap, format);</span>
<span class="lineNum"> 126 </span><span class="lineCov"> 2962677 : vfprintf(stdlog, format, ap);</span>
<span class="lineNum"> 127 </span> : /* here we intentionally don't flush */
<span class="lineNum"> 128 </span> : /* to make the output faster */
<span class="lineNum"> 129 </span><span class="lineCov"> 2964603 : va_end(ap);</span>
<span class="lineNum"> 129 </span><span class="lineCov"> 2962677 : va_end(ap);</span>
<span class="lineNum"> 130 </span> : }
<span class="lineNum"> 131 </span> :
<span class="lineNum"> 132 </span><span class="lineCov"> 4043608 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="133"><span class="lineNum"> 133 </span><span class="lineCov"> 4043608 : }</span></a>
<span class="lineNum"> 132 </span><span class="lineCov"> 4041705 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="133"><span class="lineNum"> 133 </span><span class="lineCov"> 4041705 : }</span></a>
<span class="lineNum"> 134 </span> :
<span class="lineNum"> 135 </span><span class="lineCov"> 1108 : void log_flush(void)</span>
<span class="lineNum"> 136 </span> : {
@ -206,11 +206,11 @@
<span class="lineNum"> 144 </span><span class="lineCov"> 1108 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="145"><span class="lineNum"> 145 </span><span class="lineCov"> 1108 : }</span></a>
<span class="lineNum"> 146 </span> :
<span class="lineNum"> 147 </span><span class="lineCov"> 568 : void msg_status(const char* format, ...)</span>
<span class="lineNum"> 147 </span><span class="lineCov"> 569 : void msg_status(const char* format, ...)</span>
<span class="lineNum"> 148 </span> : {
<span class="lineNum"> 149 </span> : va_list ap;
<span class="lineNum"> 150 </span> :
<span class="lineNum"> 151 </span><span class="lineCov"> 568 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 151 </span><span class="lineCov"> 569 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 152 </span> :
<span class="lineNum"> 153 </span><span class="lineCov"> 569 : if (stdlog) {</span>
<span class="lineNum"> 154 </span><span class="lineCov"> 276 : va_start(ap, format);</span>
@ -230,24 +230,24 @@
<span class="lineNum"> 168 </span><span class="lineCov"> 569 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="169"><span class="lineNum"> 169 </span><span class="lineCov"> 569 : }</span></a>
<span class="lineNum"> 170 </span> :
<span class="lineNum"> 171 </span><span class="lineCov"> 296170 : void msg_info(const char* format, ...)</span>
<span class="lineNum"> 171 </span><span class="lineCov"> 295863 : void msg_info(const char* format, ...)</span>
<span class="lineNum"> 172 </span> : {
<span class="lineNum"> 173 </span> : va_list ap;
<span class="lineNum"> 174 </span> :
<span class="lineNum"> 175 </span><span class="lineCov"> 296170 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 175 </span><span class="lineCov"> 295863 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 176 </span> :
<span class="lineNum"> 177 </span> : /* don't output in stdlog as these messages */
<span class="lineNum"> 178 </span> : /* are always paired with a msg_tag() call */
<span class="lineNum"> 179 </span> :
<span class="lineNum"> 180 </span><span class="lineCov"> 296170 : if (msg_level &gt;= MSG_INFO) {</span>
<span class="lineNum"> 181 </span><span class="lineCov"> 28833 : va_start(ap, format);</span>
<span class="lineNum"> 182 </span><span class="lineCov"> 28833 : vfprintf(stdout, format, ap);</span>
<span class="lineNum"> 183 </span><span class="lineCov"> 28833 : fflush(stdout);</span>
<span class="lineNum"> 184 </span><span class="lineCov"> 28833 : va_end(ap);</span>
<span class="lineNum"> 180 </span><span class="lineCov"> 295863 : if (msg_level &gt;= MSG_INFO) {</span>
<span class="lineNum"> 181 </span><span class="lineCov"> 28776 : va_start(ap, format);</span>
<span class="lineNum"> 182 </span><span class="lineCov"> 28776 : vfprintf(stdout, format, ap);</span>
<span class="lineNum"> 183 </span><span class="lineCov"> 28776 : fflush(stdout);</span>
<span class="lineNum"> 184 </span><span class="lineCov"> 28776 : va_end(ap);</span>
<span class="lineNum"> 185 </span> : }
<span class="lineNum"> 186 </span> :
<span class="lineNum"> 187 </span><span class="lineCov"> 296170 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="188"><span class="lineNum"> 188 </span><span class="lineCov"> 296170 : }</span></a>
<span class="lineNum"> 187 </span><span class="lineCov"> 295863 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="188"><span class="lineNum"> 188 </span><span class="lineCov"> 295863 : }</span></a>
<span class="lineNum"> 189 </span> :
<span class="lineNum"> 190 </span><span class="lineCov"> 3911 : void msg_progress(const char* format, ...)</span>
<span class="lineNum"> 191 </span> : {
@ -273,48 +273,48 @@
<span class="lineNum"> 211 </span><span class="lineCov"> 3911 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="212"><span class="lineNum"> 212 </span><span class="lineCov"> 3911 : }</span></a>
<span class="lineNum"> 213 </span> :
<span class="lineNum"> 214 </span><span class="lineCov"> 954 : void msg_bar(const char* format, ...)</span>
<span class="lineNum"> 214 </span><span class="lineCov"> 952 : void msg_bar(const char* format, ...)</span>
<span class="lineNum"> 215 </span> : {
<span class="lineNum"> 216 </span> : va_list ap;
<span class="lineNum"> 217 </span> :
<span class="lineNum"> 218 </span><span class="lineCov"> 954 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 218 </span><span class="lineCov"> 952 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 219 </span> :
<span class="lineNum"> 220 </span> : /* don't output in stdlog as these messages */
<span class="lineNum"> 221 </span> : /* are intended for screen only */
<span class="lineNum"> 222 </span> : /* also don't flush stdout as they are intended to be partial messages */
<span class="lineNum"> 223 </span> :
<span class="lineNum"> 224 </span><span class="lineCov"> 954 : if (msg_level &gt;= MSG_BAR) {</span>
<span class="lineNum"> 224 </span><span class="lineCov"> 952 : if (msg_level &gt;= MSG_BAR) {</span>
<span class="lineNum"> 225 </span><span class="lineNoCov"> 0 : va_start(ap, format);</span>
<span class="lineNum"> 226 </span><span class="lineNoCov"> 0 : vfprintf(stdout, format, ap);</span>
<span class="lineNum"> 227 </span><span class="lineNoCov"> 0 : va_end(ap);</span>
<span class="lineNum"> 228 </span> : }
<span class="lineNum"> 229 </span> :
<span class="lineNum"> 230 </span><span class="lineCov"> 954 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="231"><span class="lineNum"> 231 </span><span class="lineCov"> 954 : }</span></a>
<span class="lineNum"> 230 </span><span class="lineCov"> 952 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="231"><span class="lineNum"> 231 </span><span class="lineCov"> 952 : }</span></a>
<span class="lineNum"> 232 </span> :
<span class="lineNum"> 233 </span><span class="lineCov"> 127078 : void msg_verbose(const char* format, ...)</span>
<span class="lineNum"> 233 </span><span class="lineCov"> 126936 : void msg_verbose(const char* format, ...)</span>
<span class="lineNum"> 234 </span> : {
<span class="lineNum"> 235 </span> : va_list ap;
<span class="lineNum"> 236 </span> :
<span class="lineNum"> 237 </span><span class="lineCov"> 127078 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 237 </span><span class="lineCov"> 126936 : pthread_mutex_lock(&amp;msg_lock);</span>
<span class="lineNum"> 238 </span> :
<span class="lineNum"> 239 </span><span class="lineCov"> 127078 : if (stdlog) {</span>
<span class="lineNum"> 240 </span><span class="lineCov"> 125434 : va_start(ap, format);</span>
<span class="lineNum"> 241 </span><span class="lineCov"> 125434 : fprintf(stdlog, &quot;msg:verbose: &quot;);</span>
<span class="lineNum"> 242 </span><span class="lineCov"> 125434 : vfprintf(stdlog, format, ap);</span>
<span class="lineNum"> 243 </span><span class="lineCov"> 125434 : fflush(stdlog);</span>
<span class="lineNum"> 244 </span><span class="lineCov"> 125434 : va_end(ap);</span>
<span class="lineNum"> 239 </span><span class="lineCov"> 126936 : if (stdlog) {</span>
<span class="lineNum"> 240 </span><span class="lineCov"> 125292 : va_start(ap, format);</span>
<span class="lineNum"> 241 </span><span class="lineCov"> 125292 : fprintf(stdlog, &quot;msg:verbose: &quot;);</span>
<span class="lineNum"> 242 </span><span class="lineCov"> 125292 : vfprintf(stdlog, format, ap);</span>
<span class="lineNum"> 243 </span><span class="lineCov"> 125292 : fflush(stdlog);</span>
<span class="lineNum"> 244 </span><span class="lineCov"> 125292 : va_end(ap);</span>
<span class="lineNum"> 245 </span> : }
<span class="lineNum"> 246 </span> :
<span class="lineNum"> 247 </span><span class="lineCov"> 127078 : if (msg_level &gt;= MSG_VERBOSE) {</span>
<span class="lineNum"> 247 </span><span class="lineCov"> 126936 : if (msg_level &gt;= MSG_VERBOSE) {</span>
<span class="lineNum"> 248 </span><span class="lineCov"> 79 : va_start(ap, format);</span>
<span class="lineNum"> 249 </span><span class="lineCov"> 79 : vfprintf(stdout, format, ap);</span>
<span class="lineNum"> 250 </span><span class="lineCov"> 79 : fflush(stdout);</span>
<span class="lineNum"> 251 </span><span class="lineCov"> 79 : va_end(ap);</span>
<span class="lineNum"> 252 </span> : }
<span class="lineNum"> 253 </span> :
<span class="lineNum"> 254 </span><span class="lineCov"> 127078 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="255"><span class="lineNum"> 255 </span><span class="lineCov"> 127078 : }</span></a>
<span class="lineNum"> 254 </span><span class="lineCov"> 126936 : pthread_mutex_unlock(&amp;msg_lock);</span>
<a name="255"><span class="lineNum"> 255 </span><span class="lineCov"> 126936 : }</span></a>
<span class="lineNum"> 256 </span> :
<span class="lineNum"> 257 </span><span class="lineCov"> 440 : void msg_flush(void)</span>
<span class="lineNum"> 258 </span> : {
@ -351,20 +351,20 @@
<span class="lineNum"> 289 </span> : *p++ = to; \
<a name="290"><span class="lineNum"> 290 </span> : break</a>
<span class="lineNum"> 291 </span> :
<span class="lineNum"> 292 </span><span class="lineCov"> 3594259 : const char* esc(const char* str)</span>
<span class="lineNum"> 292 </span><span class="lineCov"> 3592843 : const char* esc(const char* str)</span>
<span class="lineNum"> 293 </span> : {
<span class="lineNum"> 294 </span><span class="lineCov"> 3594259 : char* begin = esc_table[esc_index];</span>
<span class="lineNum"> 295 </span><span class="lineCov"> 3594259 : char* end = begin + PATH_MAX;</span>
<span class="lineNum"> 296 </span><span class="lineCov"> 3594259 : char* p = begin;</span>
<span class="lineNum"> 294 </span><span class="lineCov"> 3592843 : char* begin = esc_table[esc_index];</span>
<span class="lineNum"> 295 </span><span class="lineCov"> 3592843 : char* end = begin + PATH_MAX;</span>
<span class="lineNum"> 296 </span><span class="lineCov"> 3592843 : char* p = begin;</span>
<span class="lineNum"> 297 </span> :
<span class="lineNum"> 298 </span> : /* next call uses the next buffer */
<span class="lineNum"> 299 </span><span class="lineCov"> 3594259 : esc_index = (esc_index + 1) % ESC_MAX;</span>
<span class="lineNum"> 299 </span><span class="lineCov"> 3592843 : esc_index = (esc_index + 1) % ESC_MAX;</span>
<span class="lineNum"> 300 </span> :
<span class="lineNum"> 301 </span> : /* copy string with escaping */
<span class="lineNum"> 302 </span><span class="lineCov"> 53734097 : while (*str) {</span>
<span class="lineNum"> 303 </span><span class="lineCov"> 46545579 : char c = *str;</span>
<span class="lineNum"> 302 </span><span class="lineCov"> 53695808 : while (*str) {</span>
<span class="lineNum"> 303 </span><span class="lineCov"> 46510122 : char c = *str;</span>
<span class="lineNum"> 304 </span> :
<span class="lineNum"> 305 </span><span class="lineCov"> 46545579 : switch (c) {</span>
<span class="lineNum"> 305 </span><span class="lineCov"> 46510122 : switch (c) {</span>
<span class="lineNum"> 306 </span> :
<span class="lineNum"> 307 </span><span class="lineNoCov"> 0 : ESCAPE('\n', 'n');</span>
<span class="lineNum"> 308 </span><span class="lineNoCov"> 0 : ESCAPE('\r', 'r');</span>
@ -372,21 +372,21 @@
<span class="lineNum"> 310 </span><span class="lineNoCov"> 0 : ESCAPE('\\', '\\');</span>
<span class="lineNum"> 311 </span> :
<span class="lineNum"> 312 </span> : default:
<span class="lineNum"> 313 </span><span class="lineCov"> 46545579 : if (p == end)</span>
<span class="lineNum"> 313 </span><span class="lineCov"> 46510122 : if (p == end)</span>
<span class="lineNum"> 314 </span><span class="lineNoCov"> 0 : goto bail;</span>
<span class="lineNum"> 315 </span><span class="lineCov"> 46545579 : *p++ = c;</span>
<span class="lineNum"> 316 </span><span class="lineCov"> 46545579 : break;</span>
<span class="lineNum"> 315 </span><span class="lineCov"> 46510122 : *p++ = c;</span>
<span class="lineNum"> 316 </span><span class="lineCov"> 46510122 : break;</span>
<span class="lineNum"> 317 </span> : }
<span class="lineNum"> 318 </span> :
<span class="lineNum"> 319 </span><span class="lineCov"> 46545579 : ++str;</span>
<span class="lineNum"> 319 </span><span class="lineCov"> 46510122 : ++str;</span>
<span class="lineNum"> 320 </span> : }
<span class="lineNum"> 321 </span> :
<span class="lineNum"> 322 </span> : /* put final 0 */
<span class="lineNum"> 323 </span><span class="lineCov"> 3594259 : if (p == end)</span>
<span class="lineNum"> 323 </span><span class="lineCov"> 3592843 : if (p == end)</span>
<span class="lineNum"> 324 </span><span class="lineNoCov"> 0 : goto bail;</span>
<span class="lineNum"> 325 </span><span class="lineCov"> 3594259 : *p = 0;</span>
<span class="lineNum"> 325 </span><span class="lineCov"> 3592843 : *p = 0;</span>
<span class="lineNum"> 326 </span> :
<span class="lineNum"> 327 </span><span class="lineCov"> 7188518 : return begin;</span>
<span class="lineNum"> 327 </span><span class="lineCov"> 7185686 : return begin;</span>
<span class="lineNum"> 328 </span> :
<span class="lineNum"> 329 </span> : bail:
<span class="lineNum"> 330 </span> : /* LCOV_EXCL_START */
@ -411,19 +411,19 @@
<span class="lineNum"> 349 </span> : /****************************************************************************/
<a name="350"><span class="lineNum"> 350 </span> : /* path */</a>
<span class="lineNum"> 351 </span> :
<span class="lineNum"> 352 </span><span class="lineCov"> 6858280 : void pathcpy(char* dst, size_t size, const char* src)</span>
<span class="lineNum"> 352 </span><span class="lineCov"> 6858601 : void pathcpy(char* dst, size_t size, const char* src)</span>
<span class="lineNum"> 353 </span> : {
<span class="lineNum"> 354 </span><span class="lineCov"> 6858280 : size_t len = strlen(src);</span>
<span class="lineNum"> 354 </span><span class="lineCov"> 6858601 : size_t len = strlen(src);</span>
<span class="lineNum"> 355 </span> :
<span class="lineNum"> 356 </span><span class="lineCov"> 6858280 : if (len + 1 &gt; size) {</span>
<span class="lineNum"> 356 </span><span class="lineCov"> 6858601 : if (len + 1 &gt; size) {</span>
<span class="lineNum"> 357 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 358 </span> : log_fatal(&quot;Path too long\n&quot;);
<span class="lineNum"> 359 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 360 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 361 </span> : }
<span class="lineNum"> 362 </span> :
<span class="lineNum"> 363 </span><span class="lineCov"> 6858280 : memcpy(dst, src, len + 1);</span>
<a name="364"><span class="lineNum"> 364 </span><span class="lineCov"> 6858280 : }</span></a>
<span class="lineNum"> 363 </span><span class="lineCov"> 6858601 : memcpy(dst, src, len + 1);</span>
<a name="364"><span class="lineNum"> 364 </span><span class="lineCov"> 6858601 : }</span></a>
<span class="lineNum"> 365 </span> :
<span class="lineNum"> 366 </span><span class="lineCov"> 248 : void pathcat(char* dst, size_t size, const char* src)</span>
<span class="lineNum"> 367 </span> : {
@ -469,9 +469,9 @@
<span class="lineNum"> 407 </span> : #endif
<a name="408"><span class="lineNum"> 408 </span><span class="lineCov"> 8852 : }</span></a>
<span class="lineNum"> 409 </span> :
<span class="lineNum"> 410 </span><span class="lineCov"> 17567 : void pathexport(char* dst, size_t size, const char* src)</span>
<span class="lineNum"> 410 </span><span class="lineCov"> 17569 : void pathexport(char* dst, size_t size, const char* src)</span>
<span class="lineNum"> 411 </span> : {
<span class="lineNum"> 412 </span><span class="lineCov"> 17567 : pathcpy(dst, size, src);</span>
<span class="lineNum"> 412 </span><span class="lineCov"> 17569 : pathcpy(dst, size, src);</span>
<span class="lineNum"> 413 </span> :
<span class="lineNum"> 414 </span> : #ifdef _WIN32
<span class="lineNum"> 415 </span> : /* convert all C '/' to Windows '\' */
@ -481,24 +481,24 @@
<span class="lineNum"> 419 </span> : ++dst;
<span class="lineNum"> 420 </span> : }
<span class="lineNum"> 421 </span> : #endif
<a name="422"><span class="lineNum"> 422 </span><span class="lineCov"> 17567 : }</span></a>
<a name="422"><span class="lineNum"> 422 </span><span class="lineCov"> 17569 : }</span></a>
<span class="lineNum"> 423 </span> :
<span class="lineNum"> 424 </span><span class="lineCov"> 50027975 : void pathprint(char* dst, size_t size, const char* format, ...)</span>
<span class="lineNum"> 424 </span><span class="lineCov"> 50030363 : void pathprint(char* dst, size_t size, const char* format, ...)</span>
<span class="lineNum"> 425 </span> : {
<span class="lineNum"> 426 </span> : size_t len;
<span class="lineNum"> 427 </span> : va_list ap;
<span class="lineNum"> 428 </span> :
<span class="lineNum"> 429 </span><span class="lineCov"> 50027975 : va_start(ap, format);</span>
<span class="lineNum"> 430 </span><span class="lineCov"> 50027975 : len = vsnprintf(dst, size, format, ap);</span>
<span class="lineNum"> 431 </span><span class="lineCov"> 50027975 : va_end(ap);</span>
<span class="lineNum"> 429 </span><span class="lineCov"> 50030363 : va_start(ap, format);</span>
<span class="lineNum"> 430 </span><span class="lineCov"> 50030363 : len = vsnprintf(dst, size, format, ap);</span>
<span class="lineNum"> 431 </span><span class="lineCov"> 50030363 : va_end(ap);</span>
<span class="lineNum"> 432 </span> :
<span class="lineNum"> 433 </span><span class="lineCov"> 50027975 : if (len &gt;= size) {</span>
<span class="lineNum"> 433 </span><span class="lineCov"> 50030363 : if (len &gt;= size) {</span>
<span class="lineNum"> 434 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 435 </span> : log_fatal(&quot;Path too long\n&quot;);
<span class="lineNum"> 436 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 437 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 438 </span> : }
<a name="439"><span class="lineNum"> 439 </span><span class="lineCov"> 50027975 : }</span></a>
<a name="439"><span class="lineNum"> 439 </span><span class="lineCov"> 50030363 : }</span></a>
<span class="lineNum"> 440 </span> :
<span class="lineNum"> 441 </span><span class="lineCov"> 7319 : void pathslash(char* dst, size_t size)</span>
<span class="lineNum"> 442 </span> : {
@ -526,7 +526,7 @@
<span class="lineNum"> 464 </span><span class="lineNoCov"> 0 : dst[0] = 0;</span>
<a name="465"><span class="lineNum"> 465 </span><span class="lineCov"> 30 : }</span></a>
<span class="lineNum"> 466 </span> :
<span class="lineNum"> 467 </span><span class="lineCov"> 50334016 : int pathcmp(const char* a, const char* b)</span>
<span class="lineNum"> 467 </span><span class="lineCov"> 50336221 : int pathcmp(const char* a, const char* b)</span>
<span class="lineNum"> 468 </span> : {
<span class="lineNum"> 469 </span> : #ifdef _WIN32
<span class="lineNum"> 470 </span> : char ai[PATH_MAX];
@ -539,32 +539,32 @@
<span class="lineNum"> 477 </span> : /* case insensitive compare in Windows */
<span class="lineNum"> 478 </span> : return stricmp(ai, bi);
<span class="lineNum"> 479 </span> : #else
<span class="lineNum"> 480 </span><span class="lineCov"> 50334016 : return strcmp(a, b);</span>
<span class="lineNum"> 480 </span><span class="lineCov"> 50336221 : return strcmp(a, b);</span>
<span class="lineNum"> 481 </span> : #endif
<span class="lineNum"> 482 </span> : }
<span class="lineNum"> 483 </span> :
<span class="lineNum"> 484 </span> : /****************************************************************************/
<a name="485"><span class="lineNum"> 485 </span> : /* filesystem */</a>
<span class="lineNum"> 486 </span> :
<span class="lineNum"> 487 </span><span class="lineCov"> 793004 : int mkancestor(const char* file)</span>
<span class="lineNum"> 487 </span><span class="lineCov"> 792978 : int mkancestor(const char* file)</span>
<span class="lineNum"> 488 </span> : {
<span class="lineNum"> 489 </span> : char dir[PATH_MAX];
<span class="lineNum"> 490 </span> : struct stat st;
<span class="lineNum"> 491 </span> : char* c;
<span class="lineNum"> 492 </span> :
<span class="lineNum"> 493 </span><span class="lineCov"> 793004 : pathcpy(dir, sizeof(dir), file);</span>
<span class="lineNum"> 493 </span><span class="lineCov"> 792978 : pathcpy(dir, sizeof(dir), file);</span>
<span class="lineNum"> 494 </span> :
<span class="lineNum"> 495 </span><span class="lineCov"> 793004 : c = strrchr(dir, '/');</span>
<span class="lineNum"> 496 </span><span class="lineCov"> 793004 : if (!c) {</span>
<span class="lineNum"> 495 </span><span class="lineCov"> 792978 : c = strrchr(dir, '/');</span>
<span class="lineNum"> 496 </span><span class="lineCov"> 792978 : if (!c) {</span>
<span class="lineNum"> 497 </span> : /* no ancestor */
<span class="lineNum"> 498 </span><span class="lineNoCov"> 0 : return 0;</span>
<span class="lineNum"> 499 </span> : }
<span class="lineNum"> 500 </span> :
<span class="lineNum"> 501 </span> : /* clear the file */
<span class="lineNum"> 502 </span><span class="lineCov"> 793004 : *c = 0;</span>
<span class="lineNum"> 502 </span><span class="lineCov"> 792978 : *c = 0;</span>
<span class="lineNum"> 503 </span> :
<span class="lineNum"> 504 </span> : /* if it's the root dir */
<span class="lineNum"> 505 </span><span class="lineCov"> 793004 : if (*dir == 0) {</span>
<span class="lineNum"> 505 </span><span class="lineCov"> 792978 : if (*dir == 0) {</span>
<span class="lineNum"> 506 </span> : /* nothing more to do */
<span class="lineNum"> 507 </span><span class="lineNoCov"> 0 : return 0;</span>
<span class="lineNum"> 508 </span> : }
@ -587,9 +587,9 @@
<span class="lineNum"> 525 </span> : * Also in Windows it's better to use lstat() than stat() because it
<span class="lineNum"> 526 </span> : * doen't need to open the dir with CreateFile().
<span class="lineNum"> 527 </span> : */
<span class="lineNum"> 528 </span><span class="lineCov"> 793004 : if (lstat(dir, &amp;st) == 0) {</span>
<span class="lineNum"> 528 </span><span class="lineCov"> 792978 : if (lstat(dir, &amp;st) == 0) {</span>
<span class="lineNum"> 529 </span> : /* it already exists */
<span class="lineNum"> 530 </span><span class="lineCov"> 792924 : return 0;</span>
<span class="lineNum"> 530 </span><span class="lineCov"> 792898 : return 0;</span>
<span class="lineNum"> 531 </span> : }
<span class="lineNum"> 532 </span> :
<span class="lineNum"> 533 </span> : /* recursively create them all */
@ -610,7 +610,7 @@
<span class="lineNum"> 548 </span><span class="lineCov"> 80 : return 0;</span>
<a name="549"><span class="lineNum"> 549 </span> : }</a>
<span class="lineNum"> 550 </span> :
<span class="lineNum"> 551 </span><span class="lineCov"> 118002 : int fmtime(int f, int64_t mtime_sec, int mtime_nsec)</span>
<span class="lineNum"> 551 </span><span class="lineCov"> 117937 : int fmtime(int f, int64_t mtime_sec, int mtime_nsec)</span>
<span class="lineNum"> 552 </span> : {
<span class="lineNum"> 553 </span> : #if HAVE_FUTIMENS
<span class="lineNum"> 554 </span> : struct timespec tv[2];
@ -620,15 +620,15 @@
<span class="lineNum"> 558 </span> : int ret;
<span class="lineNum"> 559 </span> :
<span class="lineNum"> 560 </span> : #if HAVE_FUTIMENS /* futimens() is preferred because it gives nanosecond precision */
<span class="lineNum"> 561 </span><span class="lineCov"> 118002 : tv[0].tv_sec = mtime_sec;</span>
<span class="lineNum"> 562 </span><span class="lineCov"> 118002 : if (mtime_nsec != STAT_NSEC_INVALID)</span>
<span class="lineNum"> 563 </span><span class="lineCov"> 118002 : tv[0].tv_nsec = mtime_nsec;</span>
<span class="lineNum"> 561 </span><span class="lineCov"> 117937 : tv[0].tv_sec = mtime_sec;</span>
<span class="lineNum"> 562 </span><span class="lineCov"> 117937 : if (mtime_nsec != STAT_NSEC_INVALID)</span>
<span class="lineNum"> 563 </span><span class="lineCov"> 117937 : tv[0].tv_nsec = mtime_nsec;</span>
<span class="lineNum"> 564 </span> : else
<span class="lineNum"> 565 </span><span class="lineNoCov"> 0 : tv[0].tv_nsec = 0;</span>
<span class="lineNum"> 566 </span><span class="lineCov"> 118002 : tv[1].tv_sec = tv[0].tv_sec;</span>
<span class="lineNum"> 567 </span><span class="lineCov"> 118002 : tv[1].tv_nsec = tv[0].tv_nsec;</span>
<span class="lineNum"> 566 </span><span class="lineCov"> 117937 : tv[1].tv_sec = tv[0].tv_sec;</span>
<span class="lineNum"> 567 </span><span class="lineCov"> 117937 : tv[1].tv_nsec = tv[0].tv_nsec;</span>
<span class="lineNum"> 568 </span> :
<span class="lineNum"> 569 </span><span class="lineCov"> 118002 : ret = futimens(f, tv);</span>
<span class="lineNum"> 569 </span><span class="lineCov"> 117937 : ret = futimens(f, tv);</span>
<span class="lineNum"> 570 </span> : #elif HAVE_FUTIMES /* fallback to futimes() if nanosecond precision is not available */
<span class="lineNum"> 571 </span> : tv[0].tv_sec = mtime_sec;
<span class="lineNum"> 572 </span> : if (mtime_nsec != STAT_NSEC_INVALID)
@ -653,7 +653,7 @@
<span class="lineNum"> 591 </span> : #error No function available to set file timestamps with sub-second precision
<span class="lineNum"> 592 </span> : #endif
<span class="lineNum"> 593 </span> :
<span class="lineNum"> 594 </span><span class="lineCov"> 118002 : return ret;</span>
<span class="lineNum"> 594 </span><span class="lineCov"> 117937 : return ret;</span>
<span class="lineNum"> 595 </span> : }
<span class="lineNum"> 596 </span> :
<span class="lineNum"> 597 </span> : /****************************************************************************/
@ -718,11 +718,11 @@
<span class="lineNum"> 656 </span> : }
<a name="657"><span class="lineNum"> 657 </span> : /* LCOV_EXCL_STOP */</a>
<span class="lineNum"> 658 </span> :
<span class="lineNum"> 659 </span><span class="lineCov"> 13871380 : void* malloc_nofail(size_t size)</span>
<span class="lineNum"> 659 </span><span class="lineCov"> 13871886 : void* malloc_nofail(size_t size)</span>
<span class="lineNum"> 660 </span> : {
<span class="lineNum"> 661 </span><span class="lineCov"> 13871380 : void* ptr = malloc(size);</span>
<span class="lineNum"> 661 </span><span class="lineCov"> 13871886 : void* ptr = malloc(size);</span>
<span class="lineNum"> 662 </span> :
<span class="lineNum"> 663 </span><span class="lineCov"> 13871380 : if (!ptr) {</span>
<span class="lineNum"> 663 </span><span class="lineCov"> 13871886 : if (!ptr) {</span>
<span class="lineNum"> 664 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 665 </span> : malloc_fail(size);
<span class="lineNum"> 666 </span> : exit(EXIT_FAILURE);
@ -736,12 +736,12 @@
<span class="lineNum"> 674 </span> : /* Filling the memory doesn't ensure to disable OOM, but it increase a lot the chances to */
<span class="lineNum"> 675 </span> : /* get a real error from malloc() instead than a process killed. */
<span class="lineNum"> 676 </span> : /* Note that calloc() doesn't have the same effect. */
<span class="lineNum"> 677 </span><span class="lineCov"> 13871380 : memset(ptr, 0xA5, size);</span>
<span class="lineNum"> 677 </span><span class="lineCov"> 13871886 : memset(ptr, 0xA5, size);</span>
<span class="lineNum"> 678 </span> : #endif
<span class="lineNum"> 679 </span> :
<span class="lineNum"> 680 </span><span class="lineCov"> 13871380 : mcounter += size;</span>
<span class="lineNum"> 680 </span><span class="lineCov"> 13871886 : mcounter += size;</span>
<span class="lineNum"> 681 </span> :
<span class="lineNum"> 682 </span><span class="lineCov"> 13871380 : return ptr;</span>
<span class="lineNum"> 682 </span><span class="lineCov"> 13871886 : return ptr;</span>
<a name="683"><span class="lineNum"> 683 </span> : }</a>
<span class="lineNum"> 684 </span> :
<span class="lineNum"> 685 </span><span class="lineCov"> 9283 : void* calloc_nofail(size_t count, size_t size)</span>
@ -767,27 +767,27 @@
<span class="lineNum"> 705 </span><span class="lineCov"> 9283 : return ptr;</span>
<a name="706"><span class="lineNum"> 706 </span> : }</a>
<span class="lineNum"> 707 </span> :
<span class="lineNum"> 708 </span><span class="lineCov"> 5662644 : char* strdup_nofail(const char* str)</span>
<span class="lineNum"> 708 </span><span class="lineCov"> 5663011 : char* strdup_nofail(const char* str)</span>
<span class="lineNum"> 709 </span> : {
<span class="lineNum"> 710 </span> : size_t size;
<span class="lineNum"> 711 </span> : char* ptr;
<span class="lineNum"> 712 </span> :
<span class="lineNum"> 713 </span><span class="lineCov"> 5662644 : size = strlen(str) + 1;</span>
<span class="lineNum"> 713 </span><span class="lineCov"> 5663011 : size = strlen(str) + 1;</span>
<span class="lineNum"> 714 </span> :
<span class="lineNum"> 715 </span><span class="lineCov"> 5662644 : ptr = malloc(size);</span>
<span class="lineNum"> 715 </span><span class="lineCov"> 5663011 : ptr = malloc(size);</span>
<span class="lineNum"> 716 </span> :
<span class="lineNum"> 717 </span><span class="lineCov"> 5662644 : if (!ptr) {</span>
<span class="lineNum"> 717 </span><span class="lineCov"> 5663011 : if (!ptr) {</span>
<span class="lineNum"> 718 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 719 </span> : malloc_fail(size);
<span class="lineNum"> 720 </span> : exit(EXIT_FAILURE);
<span class="lineNum"> 721 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 722 </span> : }
<span class="lineNum"> 723 </span> :
<span class="lineNum"> 724 </span><span class="lineCov"> 5662644 : memcpy(ptr, str, size);</span>
<span class="lineNum"> 724 </span><span class="lineCov"> 5663011 : memcpy(ptr, str, size);</span>
<span class="lineNum"> 725 </span> :
<span class="lineNum"> 726 </span><span class="lineCov"> 5662644 : mcounter += size;</span>
<span class="lineNum"> 726 </span><span class="lineCov"> 5663011 : mcounter += size;</span>
<span class="lineNum"> 727 </span> :
<span class="lineNum"> 728 </span><span class="lineCov"> 5662644 : return ptr;</span>
<span class="lineNum"> 728 </span><span class="lineCov"> 5663011 : return ptr;</span>
<span class="lineNum"> 729 </span> : }
<span class="lineNum"> 730 </span> :
<span class="lineNum"> 731 </span> : /****************************************************************************/
@ -822,8 +822,8 @@
<span class="lineNum"> 760 </span> :
<span class="lineNum"> 761 </span> : /* preclear attribute */
<span class="lineNum"> 762 </span><span class="lineCov"> 25 : *serial = 0;</span>
<span class="lineNum"> 763 </span><span class="lineCov"> 6525 : for (i = 0; i &lt; SMART_COUNT; ++i)</span>
<span class="lineNum"> 764 </span><span class="lineCov"> 6500 : smart[i] = SMART_UNASSIGNED;</span>
<span class="lineNum"> 763 </span><span class="lineCov"> 6501 : for (i = 0; i &lt; SMART_COUNT; ++i)</span>
<span class="lineNum"> 764 </span><span class="lineCov"> 6476 : smart[i] = SMART_UNASSIGNED;</span>
<span class="lineNum"> 765 </span> :
<span class="lineNum"> 766 </span> : /* read the file */
<span class="lineNum"> 767 </span><span class="lineCov"> 25 : inside = 0;</span>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</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">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">4</td>
@ -488,14 +488,14 @@
<span class="lineNum"> 426 </span><span class="lineCov"> 4180078 : one_valid = 1;</span>
<span class="lineNum"> 427 </span> :
<span class="lineNum"> 428 </span><span class="lineCov"> 4389366 : if (block_has_invalid_parity(block))</span>
<span class="lineNum"> 429 </span><span class="lineCov"> 360958 : one_invalid = 1;</span>
<span class="lineNum"> 429 </span><span class="lineCov"> 361206 : one_invalid = 1;</span>
<span class="lineNum"> 430 </span> : }
<span class="lineNum"> 431 </span> :
<span class="lineNum"> 432 </span> : /* if none valid or none invalid, we don't need to update */
<span class="lineNum"> 433 </span><span class="lineCov"> 733118 : if (!one_invalid || !one_valid)</span>
<span class="lineNum"> 434 </span><span class="lineCov"> 568698 : return 0;</span>
<span class="lineNum"> 434 </span><span class="lineCov"> 568436 : return 0;</span>
<span class="lineNum"> 435 </span> :
<span class="lineNum"> 436 </span><span class="lineCov"> 164420 : return 1;</span>
<span class="lineNum"> 436 </span><span class="lineCov"> 164682 : return 1;</span>
<a name="437"><span class="lineNum"> 437 </span> : }</a>
<span class="lineNum"> 438 </span> :
<span class="lineNum"> 439 </span><span class="lineCov"> 68 : static int state_sync_process(struct snapraid_state* state, struct snapraid_parity_handle** parity, block_off_t blockstart, block_off_t blockmax)</span>
@ -559,8 +559,8 @@
<span class="lineNum"> 497 </span><span class="lineCov"> 68 : countmax = 0;</span>
<span class="lineNum"> 498 </span><span class="lineCov"> 366627 : for (i = blockstart; i &lt; blockmax; ++i) {</span>
<span class="lineNum"> 499 </span><span class="lineCov"> 366559 : if (!block_is_enabled(i, handle, diskmax))</span>
<span class="lineNum"> 500 </span><span class="lineCov"> 284349 : continue;</span>
<span class="lineNum"> 501 </span><span class="lineCov"> 82210 : ++countmax;</span>
<span class="lineNum"> 500 </span><span class="lineCov"> 284218 : continue;</span>
<span class="lineNum"> 501 </span><span class="lineCov"> 82341 : ++countmax;</span>
<span class="lineNum"> 502 </span> : }
<span class="lineNum"> 503 </span> :
<span class="lineNum"> 504 </span> : /* compute the autosave size for all disk, even if not read */
@ -589,26 +589,26 @@
<span class="lineNum"> 527 </span> : int rehash;
<span class="lineNum"> 528 </span> :
<span class="lineNum"> 529 </span><span class="lineCov"> 366559 : if (!block_is_enabled(i, handle, diskmax))</span>
<span class="lineNum"> 530 </span><span class="lineCov"> 284349 : continue;</span>
<span class="lineNum"> 530 </span><span class="lineCov"> 284218 : continue;</span>
<span class="lineNum"> 531 </span> :
<span class="lineNum"> 532 </span> : /* one more block processed for autosave */
<span class="lineNum"> 533 </span><span class="lineCov"> 82210 : ++autosavedone;</span>
<span class="lineNum"> 534 </span><span class="lineCov"> 82210 : --autosavemissing;</span>
<span class="lineNum"> 533 </span><span class="lineCov"> 82341 : ++autosavedone;</span>
<span class="lineNum"> 534 </span><span class="lineCov"> 82341 : --autosavemissing;</span>
<span class="lineNum"> 535 </span> :
<span class="lineNum"> 536 </span> : /* by default process the block, and skip it if something go wrong */
<span class="lineNum"> 537 </span><span class="lineCov"> 82210 : error_on_this_block = 0;</span>
<span class="lineNum"> 538 </span><span class="lineCov"> 82210 : silent_error_on_this_block = 0;</span>
<span class="lineNum"> 539 </span><span class="lineCov"> 82210 : io_error_on_this_block = 0;</span>
<span class="lineNum"> 540 </span><span class="lineCov"> 82210 : fixed_error_on_this_block = 0;</span>
<span class="lineNum"> 537 </span><span class="lineCov"> 82341 : error_on_this_block = 0;</span>
<span class="lineNum"> 538 </span><span class="lineCov"> 82341 : silent_error_on_this_block = 0;</span>
<span class="lineNum"> 539 </span><span class="lineCov"> 82341 : io_error_on_this_block = 0;</span>
<span class="lineNum"> 540 </span><span class="lineCov"> 82341 : fixed_error_on_this_block = 0;</span>
<span class="lineNum"> 541 </span> :
<span class="lineNum"> 542 </span> : /* keep track of the number of failed blocks */
<span class="lineNum"> 543 </span><span class="lineCov"> 82210 : failed_count = 0;</span>
<span class="lineNum"> 543 </span><span class="lineCov"> 82341 : failed_count = 0;</span>
<span class="lineNum"> 544 </span> :
<span class="lineNum"> 545 </span> : /* get block specific info */
<span class="lineNum"> 546 </span><span class="lineCov"> 82210 : info = info_get(&amp;state-&gt;infoarr, i);</span>
<span class="lineNum"> 546 </span><span class="lineCov"> 82341 : info = info_get(&amp;state-&gt;infoarr, i);</span>
<span class="lineNum"> 547 </span> :
<span class="lineNum"> 548 </span> : /* if we have to use the old hash */
<span class="lineNum"> 549 </span><span class="lineCov"> 82210 : rehash = info_get_rehash(info);</span>
<span class="lineNum"> 549 </span><span class="lineCov"> 82341 : rehash = info_get_rehash(info);</span>
<span class="lineNum"> 550 </span> :
<span class="lineNum"> 551 </span> : /* it could happens that all the blocks are EMPTY/BLK and CHG but with the hash */
<span class="lineNum"> 552 </span> : /* still matching because the specific CHG block was not modified. */
@ -616,55 +616,55 @@
<span class="lineNum"> 554 </span> : /* have the hash cleared (::clear_past_hash flag), and then they won't never match the hash. */
<span class="lineNum"> 555 </span> : /* We are treating only CHG blocks created at runtime. */
<span class="lineNum"> 556 </span> : /* In such case, we can avoid to update parity, because it would be the same as before */
<span class="lineNum"> 557 </span><span class="lineCov"> 82210 : parity_needs_to_be_updated = 0;</span>
<span class="lineNum"> 557 </span><span class="lineCov"> 82341 : parity_needs_to_be_updated = 0;</span>
<span class="lineNum"> 558 </span> :
<span class="lineNum"> 559 </span> : /* if the block is marked as bad, we force the parity update */
<span class="lineNum"> 560 </span> : /* because the bad block may be the result of a wrong parity */
<span class="lineNum"> 561 </span><span class="lineCov"> 82210 : if (info_get_bad(info))</span>
<span class="lineNum"> 561 </span><span class="lineCov"> 82341 : if (info_get_bad(info))</span>
<span class="lineNum"> 562 </span><span class="lineNoCov"> 0 : parity_needs_to_be_updated = 1;</span>
<span class="lineNum"> 563 </span> :
<span class="lineNum"> 564 </span> : /* for each disk, process the block */
<span class="lineNum"> 565 </span><span class="lineCov"> 575470 : for (j = 0; j &lt; diskmax; ++j) {</span>
<span class="lineNum"> 565 </span><span class="lineCov"> 576387 : for (j = 0; j &lt; diskmax; ++j) {</span>
<span class="lineNum"> 566 </span> : int read_size;
<span class="lineNum"> 567 </span> : unsigned char hash[HASH_SIZE];
<span class="lineNum"> 568 </span> : struct snapraid_block* block;
<span class="lineNum"> 569 </span> : unsigned block_state;
<span class="lineNum"> 570 </span><span class="lineCov"> 493260 : struct snapraid_disk* disk = handle[j].disk;</span>
<span class="lineNum"> 570 </span><span class="lineCov"> 494046 : struct snapraid_disk* disk = handle[j].disk;</span>
<span class="lineNum"> 571 </span> : struct snapraid_file* file;
<span class="lineNum"> 572 </span> : block_off_t file_pos;
<span class="lineNum"> 573 </span> :
<span class="lineNum"> 574 </span> : /* by default no rehash in case of &quot;continue&quot; */
<span class="lineNum"> 575 </span><span class="lineCov"> 493260 : rehandle[j].block = 0;</span>
<span class="lineNum"> 575 </span><span class="lineCov"> 494046 : rehandle[j].block = 0;</span>
<span class="lineNum"> 576 </span> :
<span class="lineNum"> 577 </span> : /* if the disk position is not used */
<span class="lineNum"> 578 </span><span class="lineCov"> 493260 : if (!disk) {</span>
<span class="lineNum"> 578 </span><span class="lineCov"> 494046 : if (!disk) {</span>
<span class="lineNum"> 579 </span> : /* use an empty block */
<span class="lineNum"> 580 </span><span class="lineNoCov"> 0 : memset(buffer[j], 0, state-&gt;block_size);</span>
<span class="lineNum"> 581 </span><span class="lineCov"> 89224 : continue;</span>
<span class="lineNum"> 581 </span><span class="lineCov"> 89194 : continue;</span>
<span class="lineNum"> 582 </span> : }
<span class="lineNum"> 583 </span> :
<span class="lineNum"> 584 </span> : /* get the block */
<span class="lineNum"> 585 </span><span class="lineCov"> 493260 : block = fs_par2block_get(disk, i);</span>
<span class="lineNum"> 585 </span><span class="lineCov"> 494046 : block = fs_par2block_get(disk, i);</span>
<span class="lineNum"> 586 </span> :
<span class="lineNum"> 587 </span> : /* get the state of the block */
<span class="lineNum"> 588 </span><span class="lineCov"> 493260 : block_state = block_state_get(block);</span>
<span class="lineNum"> 588 </span><span class="lineCov"> 494046 : block_state = block_state_get(block);</span>
<span class="lineNum"> 589 </span> :
<span class="lineNum"> 590 </span> : /* if the block has invalid parity, */
<span class="lineNum"> 591 </span> : /* we have to take care of it in case of recover */
<span class="lineNum"> 592 </span><span class="lineCov"> 493260 : if (block_has_invalid_parity(block)) {</span>
<span class="lineNum"> 592 </span><span class="lineCov"> 494046 : if (block_has_invalid_parity(block)) {</span>
<span class="lineNum"> 593 </span> : /* store it in the failed set, because */
<span class="lineNum"> 594 </span> : /* the parity may be still computed with the previous content */
<span class="lineNum"> 595 </span><span class="lineCov"> 180479 : failed[failed_count].index = j;</span>
<span class="lineNum"> 596 </span><span class="lineCov"> 180479 : failed[failed_count].size = state-&gt;block_size;</span>
<span class="lineNum"> 597 </span><span class="lineCov"> 180479 : failed[failed_count].block = block;</span>
<span class="lineNum"> 598 </span><span class="lineCov"> 180479 : ++failed_count;</span>
<span class="lineNum"> 595 </span><span class="lineCov"> 180603 : failed[failed_count].index = j;</span>
<span class="lineNum"> 596 </span><span class="lineCov"> 180603 : failed[failed_count].size = state-&gt;block_size;</span>
<span class="lineNum"> 597 </span><span class="lineCov"> 180603 : failed[failed_count].block = block;</span>
<span class="lineNum"> 598 </span><span class="lineCov"> 180603 : ++failed_count;</span>
<span class="lineNum"> 599 </span> :
<span class="lineNum"> 600 </span> : /* if the block has invalid parity, we have to update the parity */
<span class="lineNum"> 601 </span> : /* to include this block change */
<span class="lineNum"> 602 </span> : /* This also apply to CHG blocks, but we are going to handle */
<span class="lineNum"> 603 </span> : /* later this case to do the updates only if really needed */
<span class="lineNum"> 604 </span><span class="lineCov"> 180479 : if (block_state != BLOCK_STATE_CHG)</span>
<span class="lineNum"> 605 </span><span class="lineCov"> 56263 : parity_needs_to_be_updated = 1;</span>
<span class="lineNum"> 604 </span><span class="lineCov"> 180603 : if (block_state != BLOCK_STATE_CHG)</span>
<span class="lineNum"> 605 </span><span class="lineCov"> 56266 : parity_needs_to_be_updated = 1;</span>
<span class="lineNum"> 606 </span> :
<span class="lineNum"> 607 </span> : /* note that DELETE blocks are skipped in the next check */
<span class="lineNum"> 608 </span> : /* and we have to store them in the failed blocks */
@ -675,24 +675,24 @@
<span class="lineNum"> 613 </span> :
<span class="lineNum"> 614 </span> : /* if the block has no file, meanining that it's EMPTY or DELETED, */
<span class="lineNum"> 615 </span> : /* it doesn't partecipate in the new parity computation */
<span class="lineNum"> 616 </span><span class="lineCov"> 493260 : if (!block_has_file(block)) {</span>
<span class="lineNum"> 616 </span><span class="lineCov"> 494046 : if (!block_has_file(block)) {</span>
<span class="lineNum"> 617 </span> : /* use an empty block */
<span class="lineNum"> 618 </span><span class="lineCov"> 88322 : memset(buffer[j], 0, state-&gt;block_size);</span>
<span class="lineNum"> 619 </span><span class="lineCov"> 88322 : continue;</span>
<span class="lineNum"> 618 </span><span class="lineCov"> 88293 : memset(buffer[j], 0, state-&gt;block_size);</span>
<span class="lineNum"> 619 </span><span class="lineCov"> 88293 : continue;</span>
<span class="lineNum"> 620 </span> : }
<span class="lineNum"> 621 </span> :
<span class="lineNum"> 622 </span> : /* get the file of this block */
<span class="lineNum"> 623 </span><span class="lineCov"> 404938 : file = fs_par2file_get(disk, i, &amp;file_pos);</span>
<span class="lineNum"> 623 </span><span class="lineCov"> 405753 : file = fs_par2file_get(disk, i, &amp;file_pos);</span>
<span class="lineNum"> 624 </span> :
<span class="lineNum"> 625 </span> : /* until now is CPU */
<span class="lineNum"> 626 </span><span class="lineCov"> 404938 : state_usage_cpu(state);</span>
<span class="lineNum"> 626 </span><span class="lineCov"> 405753 : state_usage_cpu(state);</span>
<span class="lineNum"> 627 </span> :
<span class="lineNum"> 628 </span> : /* if the file is different than the current one, close it */
<span class="lineNum"> 629 </span><span class="lineCov"> 404938 : if (handle[j].file != 0 &amp;&amp; handle[j].file != file) {</span>
<span class="lineNum"> 629 </span><span class="lineCov"> 405753 : if (handle[j].file != 0 &amp;&amp; handle[j].file != file) {</span>
<span class="lineNum"> 630 </span> : /* keep a pointer at the file we are going to close for error reporting */
<span class="lineNum"> 631 </span><span class="lineCov"> 168338 : struct snapraid_file* report = handle[j].file;</span>
<span class="lineNum"> 632 </span><span class="lineCov"> 168338 : ret = handle_close(&amp;handle[j]);</span>
<span class="lineNum"> 633 </span><span class="lineCov"> 168338 : if (ret == -1) {</span>
<span class="lineNum"> 631 </span><span class="lineCov"> 168779 : struct snapraid_file* report = handle[j].file;</span>
<span class="lineNum"> 632 </span><span class="lineCov"> 168779 : ret = handle_close(&amp;handle[j]);</span>
<span class="lineNum"> 633 </span><span class="lineCov"> 168779 : if (ret == -1) {</span>
<span class="lineNum"> 634 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 635 </span> : /* This one is really an unexpected error, because we are only reading */
<span class="lineNum"> 636 </span> : /* and closing a descriptor should never fail */
@ -715,8 +715,8 @@
<span class="lineNum"> 653 </span> : }
<span class="lineNum"> 654 </span> : }
<span class="lineNum"> 655 </span> :
<span class="lineNum"> 656 </span><span class="lineCov"> 404938 : ret = handle_open(&amp;handle[j], file, state-&gt;file_mode, log_error, 0);</span>
<span class="lineNum"> 657 </span><span class="lineCov"> 404938 : if (ret == -1) {</span>
<span class="lineNum"> 656 </span><span class="lineCov"> 405753 : ret = handle_open(&amp;handle[j], file, state-&gt;file_mode, log_error, 0);</span>
<span class="lineNum"> 657 </span><span class="lineCov"> 405753 : if (ret == -1) {</span>
<span class="lineNum"> 658 </span><span class="lineCov"> 12 : if (errno == EIO) {</span>
<span class="lineNum"> 659 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 660 </span> : log_tag(&quot;error:%u:%s:%s: Open EIO error. %s\n&quot;, i, disk-&gt;name, esc(file-&gt;sub), strerror(errno));
@ -762,10 +762,10 @@
<span class="lineNum"> 700 </span> : }
<span class="lineNum"> 701 </span> :
<span class="lineNum"> 702 </span> : /* check if the file is changed */
<span class="lineNum"> 703 </span><span class="lineCov"> 404926 : if (handle[j].st.st_size != file-&gt;size</span>
<span class="lineNum"> 704 </span><span class="lineCov"> 404924 : || handle[j].st.st_mtime != file-&gt;mtime_sec</span>
<span class="lineNum"> 705 </span><span class="lineCov"> 404922 : || STAT_NSEC(&amp;handle[j].st) != file-&gt;mtime_nsec</span>
<span class="lineNum"> 706 </span><span class="lineCov"> 404922 : || handle[j].st.st_ino != file-&gt;inode</span>
<span class="lineNum"> 703 </span><span class="lineCov"> 405741 : if (handle[j].st.st_size != file-&gt;size</span>
<span class="lineNum"> 704 </span><span class="lineCov"> 405739 : || handle[j].st.st_mtime != file-&gt;mtime_sec</span>
<span class="lineNum"> 705 </span><span class="lineCov"> 405737 : || STAT_NSEC(&amp;handle[j].st) != file-&gt;mtime_nsec</span>
<span class="lineNum"> 706 </span><span class="lineCov"> 405737 : || handle[j].st.st_ino != file-&gt;inode</span>
<span class="lineNum"> 707 </span> : ) {
<span class="lineNum"> 708 </span><span class="lineCov"> 6 : log_tag(&quot;error:%u:%s:%s: Unexpected attribute change\n&quot;, i, disk-&gt;name, esc(file-&gt;sub));</span>
<span class="lineNum"> 709 </span><span class="lineCov"> 6 : if (handle[j].st.st_size != file-&gt;size) {</span>
@ -785,8 +785,8 @@
<span class="lineNum"> 723 </span><span class="lineCov"> 6 : continue;</span>
<span class="lineNum"> 724 </span> : }
<span class="lineNum"> 725 </span> :
<span class="lineNum"> 726 </span><span class="lineCov"> 404920 : read_size = handle_read(&amp;handle[j], file_pos, buffer[j], state-&gt;block_size, log_error, 0);</span>
<span class="lineNum"> 727 </span><span class="lineCov"> 404920 : if (read_size == -1) {</span>
<span class="lineNum"> 726 </span><span class="lineCov"> 405735 : read_size = handle_read(&amp;handle[j], file_pos, buffer[j], state-&gt;block_size, log_error, 0);</span>
<span class="lineNum"> 727 </span><span class="lineCov"> 405735 : if (read_size == -1) {</span>
<span class="lineNum"> 728 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 729 </span> : if (errno == EIO) {
<span class="lineNum"> 730 </span> : log_tag(&quot;error:%u:%s:%s: Read EIO error at position %u. %s\n&quot;, i, disk-&gt;name, esc(file-&gt;sub), file_pos, strerror(errno));
@ -814,26 +814,26 @@
<span class="lineNum"> 752 </span> : }
<span class="lineNum"> 753 </span> :
<span class="lineNum"> 754 </span> : /* until now is disk */
<span class="lineNum"> 755 </span><span class="lineCov"> 404920 : state_usage_disk(state, disk);</span>
<span class="lineNum"> 755 </span><span class="lineCov"> 405735 : state_usage_disk(state, disk);</span>
<span class="lineNum"> 756 </span> :
<span class="lineNum"> 757 </span><span class="lineCov"> 404920 : countsize += read_size;</span>
<span class="lineNum"> 757 </span><span class="lineCov"> 405735 : countsize += read_size;</span>
<span class="lineNum"> 758 </span> :
<span class="lineNum"> 759 </span> : /* now compute the hash */
<span class="lineNum"> 760 </span><span class="lineCov"> 404920 : if (rehash) {</span>
<span class="lineNum"> 760 </span><span class="lineCov"> 405735 : if (rehash) {</span>
<span class="lineNum"> 761 </span><span class="lineCov"> 52244 : memhash(state-&gt;prevhash, state-&gt;prevhashseed, hash, buffer[j], read_size);</span>
<span class="lineNum"> 762 </span> :
<span class="lineNum"> 763 </span> : /* compute the new hash, and store it */
<span class="lineNum"> 764 </span><span class="lineCov"> 52244 : rehandle[j].block = block;</span>
<span class="lineNum"> 765 </span><span class="lineCov"> 52244 : memhash(state-&gt;hash, state-&gt;hashseed, rehandle[j].hash, buffer[j], read_size);</span>
<span class="lineNum"> 766 </span> : } else {
<span class="lineNum"> 767 </span><span class="lineCov"> 352676 : memhash(state-&gt;hash, state-&gt;hashseed, hash, buffer[j], read_size);</span>
<span class="lineNum"> 767 </span><span class="lineCov"> 353491 : memhash(state-&gt;hash, state-&gt;hashseed, hash, buffer[j], read_size);</span>
<span class="lineNum"> 768 </span> : }
<span class="lineNum"> 769 </span> :
<span class="lineNum"> 770 </span><span class="lineCov"> 404920 : if (block_has_updated_hash(block)) {</span>
<span class="lineNum"> 770 </span><span class="lineCov"> 405735 : if (block_has_updated_hash(block)) {</span>
<span class="lineNum"> 771 </span> : /* compare the hash */
<span class="lineNum"> 772 </span><span class="lineCov"> 280722 : if (memcmp(hash, block-&gt;hash, HASH_SIZE) != 0) {</span>
<span class="lineNum"> 772 </span><span class="lineCov"> 281416 : if (memcmp(hash, block-&gt;hash, HASH_SIZE) != 0) {</span>
<span class="lineNum"> 773 </span> : /* if the file has invalid parity, it's a REP changed during the sync */
<span class="lineNum"> 774 </span><span class="lineCov"> 884 : if (block_has_invalid_parity(block)) {</span>
<span class="lineNum"> 774 </span><span class="lineCov"> 883 : if (block_has_invalid_parity(block)) {</span>
<span class="lineNum"> 775 </span><span class="lineCov"> 1 : log_tag(&quot;error:%u:%s:%s: Unexpected data change\n&quot;, i, disk-&gt;name, esc(file-&gt;sub));</span>
<span class="lineNum"> 776 </span><span class="lineCov"> 1 : log_error(&quot;Data change at file '%s' at position '%u'\n&quot;, handle[j].path, file_pos);</span>
<span class="lineNum"> 777 </span><span class="lineCov"> 1 : log_error(&quot;WARNING! Unexpected data modification of a file without parity!\n&quot;);</span>
@ -854,38 +854,38 @@
<span class="lineNum"> 792 </span><span class="lineCov"> 1 : error_on_this_block = 1;</span>
<span class="lineNum"> 793 </span><span class="lineCov"> 1 : continue;</span>
<span class="lineNum"> 794 </span> : } else { /* otherwise it's a BLK with silent error */
<span class="lineNum"> 795 </span><span class="lineCov"> 883 : unsigned diff = memdiff(hash, block-&gt;hash, HASH_SIZE);</span>
<span class="lineNum"> 796 </span><span class="lineCov"> 883 : log_tag(&quot;error:%u:%s:%s: Data error at position %u, diff bits %u\n&quot;, i, disk-&gt;name, esc(file-&gt;sub), file_pos, diff);</span>
<span class="lineNum"> 797 </span><span class="lineCov"> 883 : log_error(&quot;Data error in file '%s' at position '%u', diff bits %u\n&quot;, handle[j].path, file_pos, diff);</span>
<span class="lineNum"> 795 </span><span class="lineCov"> 882 : unsigned diff = memdiff(hash, block-&gt;hash, HASH_SIZE);</span>
<span class="lineNum"> 796 </span><span class="lineCov"> 882 : log_tag(&quot;error:%u:%s:%s: Data error at position %u, diff bits %u\n&quot;, i, disk-&gt;name, esc(file-&gt;sub), file_pos, diff);</span>
<span class="lineNum"> 797 </span><span class="lineCov"> 882 : log_error(&quot;Data error in file '%s' at position '%u', diff bits %u\n&quot;, handle[j].path, file_pos, diff);</span>
<span class="lineNum"> 798 </span> :
<span class="lineNum"> 799 </span> : /* save the failed block for the fix */
<span class="lineNum"> 800 </span><span class="lineCov"> 883 : failed[failed_count].index = j;</span>
<span class="lineNum"> 801 </span><span class="lineCov"> 883 : failed[failed_count].size = read_size;</span>
<span class="lineNum"> 802 </span><span class="lineCov"> 883 : failed[failed_count].block = block;</span>
<span class="lineNum"> 803 </span><span class="lineCov"> 883 : ++failed_count;</span>
<span class="lineNum"> 800 </span><span class="lineCov"> 882 : failed[failed_count].index = j;</span>
<span class="lineNum"> 801 </span><span class="lineCov"> 882 : failed[failed_count].size = read_size;</span>
<span class="lineNum"> 802 </span><span class="lineCov"> 882 : failed[failed_count].block = block;</span>
<span class="lineNum"> 803 </span><span class="lineCov"> 882 : ++failed_count;</span>
<span class="lineNum"> 804 </span> :
<span class="lineNum"> 805 </span> : /* silent errors are very rare, and are not a signal that a disk */
<span class="lineNum"> 806 </span> : /* is going to fail. So, we just continue marking the block as bad */
<span class="lineNum"> 807 </span> : /* just like in scrub */
<span class="lineNum"> 808 </span><span class="lineCov"> 883 : ++silent_error;</span>
<span class="lineNum"> 809 </span><span class="lineCov"> 883 : silent_error_on_this_block = 1;</span>
<span class="lineNum"> 810 </span><span class="lineCov"> 883 : continue;</span>
<span class="lineNum"> 808 </span><span class="lineCov"> 882 : ++silent_error;</span>
<span class="lineNum"> 809 </span><span class="lineCov"> 882 : silent_error_on_this_block = 1;</span>
<span class="lineNum"> 810 </span><span class="lineCov"> 882 : continue;</span>
<span class="lineNum"> 811 </span> : }
<span class="lineNum"> 812 </span> : }
<span class="lineNum"> 813 </span> : } else {
<span class="lineNum"> 814 </span> : /* if until now the parity doesn't need to be updated */
<span class="lineNum"> 815 </span><span class="lineCov"> 124198 : if (!parity_needs_to_be_updated) {</span>
<span class="lineNum"> 815 </span><span class="lineCov"> 124319 : if (!parity_needs_to_be_updated) {</span>
<span class="lineNum"> 816 </span> : /* for sure it's a CHG block, because EMPTY are processed before with &quot;continue&quot; */
<span class="lineNum"> 817 </span> : /* and BLK and REP have &quot;block_has_updated_hash()&quot; as 1, and all the others */
<span class="lineNum"> 818 </span> : /* have &quot;parity_needs_to_be_updated&quot; already at 1 */
<span class="lineNum"> 819 </span><span class="lineCov"> 56621 : assert(block_state_get(block) == BLOCK_STATE_CHG);</span>
<span class="lineNum"> 819 </span><span class="lineCov"> 56741 : assert(block_state_get(block) == BLOCK_STATE_CHG);</span>
<span class="lineNum"> 820 </span> :
<span class="lineNum"> 821 </span> : /* if there is an hash */
<span class="lineNum"> 822 </span><span class="lineCov"> 56621 : if (hash_is_real(block-&gt;hash)) {</span>
<span class="lineNum"> 822 </span><span class="lineCov"> 56741 : if (hash_is_real(block-&gt;hash)) {</span>
<span class="lineNum"> 823 </span> : /* check if the hash is changed */
<span class="lineNum"> 824 </span><span class="lineCov"> 12894 : if (memcmp(hash, block-&gt;hash, HASH_SIZE) != 0) {</span>
<span class="lineNum"> 824 </span><span class="lineCov"> 13014 : if (memcmp(hash, block-&gt;hash, HASH_SIZE) != 0) {</span>
<span class="lineNum"> 825 </span> : /* the block is different, and we must update parity */
<span class="lineNum"> 826 </span><span class="lineCov"> 10323 : parity_needs_to_be_updated = 1;</span>
<span class="lineNum"> 826 </span><span class="lineCov"> 10443 : parity_needs_to_be_updated = 1;</span>
<span class="lineNum"> 827 </span> : }
<span class="lineNum"> 828 </span> : } else {
<span class="lineNum"> 829 </span> : /* if the hash is already invalid, we update parity */
@ -895,7 +895,7 @@
<span class="lineNum"> 833 </span> :
<span class="lineNum"> 834 </span> : /* copy the hash in the block, but doesn't mark the block as hashed */
<span class="lineNum"> 835 </span> : /* this allow in case of skipped block to do not save the failed computation */
<span class="lineNum"> 836 </span><span class="lineCov"> 124198 : memcpy(block-&gt;hash, hash, HASH_SIZE);</span>
<span class="lineNum"> 836 </span><span class="lineCov"> 124319 : memcpy(block-&gt;hash, hash, HASH_SIZE);</span>
<span class="lineNum"> 837 </span> :
<span class="lineNum"> 838 </span> : /* note that in case of rehash, this is the wrong hash, */
<span class="lineNum"> 839 </span> : /* but it will be overwritten later */
@ -905,52 +905,52 @@
<span class="lineNum"> 843 </span> : /* if we have only silent errors we can try to fix them on-the-fly */
<span class="lineNum"> 844 </span> : /* note the the fix is not written to disk, but used only to */
<span class="lineNum"> 845 </span> : /* compute the new parity */
<span class="lineNum"> 846 </span><span class="lineCov"> 82210 : if (!error_on_this_block &amp;&amp; !io_error_on_this_block &amp;&amp; silent_error_on_this_block) {</span>
<span class="lineNum"> 846 </span><span class="lineCov"> 82341 : if (!error_on_this_block &amp;&amp; !io_error_on_this_block &amp;&amp; silent_error_on_this_block) {</span>
<span class="lineNum"> 847 </span> : unsigned failed_mac;
<span class="lineNum"> 848 </span><span class="lineCov"> 883 : int something_to_recover = 0;</span>
<span class="lineNum"> 848 </span><span class="lineCov"> 882 : int something_to_recover = 0;</span>
<span class="lineNum"> 849 </span> :
<span class="lineNum"> 850 </span> : /* setup the blocks to recover */
<span class="lineNum"> 851 </span><span class="lineCov"> 883 : failed_mac = 0;</span>
<span class="lineNum"> 852 </span><span class="lineCov"> 2649 : for (j = 0; j &lt; failed_count; ++j) {</span>
<span class="lineNum"> 853 </span><span class="lineCov"> 1766 : unsigned char* block_buffer = buffer[failed[j].index];</span>
<span class="lineNum"> 854 </span><span class="lineCov"> 1766 : unsigned char* block_copy = buffer[diskmax + state-&gt;level + failed[j].index];</span>
<span class="lineNum"> 855 </span><span class="lineCov"> 1766 : unsigned block_state = block_state_get(failed[j].block);</span>
<span class="lineNum"> 851 </span><span class="lineCov"> 882 : failed_mac = 0;</span>
<span class="lineNum"> 852 </span><span class="lineCov"> 2646 : for (j = 0; j &lt; failed_count; ++j) {</span>
<span class="lineNum"> 853 </span><span class="lineCov"> 1764 : unsigned char* block_buffer = buffer[failed[j].index];</span>
<span class="lineNum"> 854 </span><span class="lineCov"> 1764 : unsigned char* block_copy = buffer[diskmax + state-&gt;level + failed[j].index];</span>
<span class="lineNum"> 855 </span><span class="lineCov"> 1764 : unsigned block_state = block_state_get(failed[j].block);</span>
<span class="lineNum"> 856 </span> :
<span class="lineNum"> 857 </span> : /* we try to recover only if at least one BLK is present */
<span class="lineNum"> 858 </span><span class="lineCov"> 1766 : if (block_state == BLOCK_STATE_BLK)</span>
<span class="lineNum"> 859 </span><span class="lineCov"> 883 : something_to_recover = 1;</span>
<span class="lineNum"> 858 </span><span class="lineCov"> 1764 : if (block_state == BLOCK_STATE_BLK)</span>
<span class="lineNum"> 859 </span><span class="lineCov"> 882 : something_to_recover = 1;</span>
<span class="lineNum"> 860 </span> :
<span class="lineNum"> 861 </span> : /* save a copy of the content just read */
<span class="lineNum"> 862 </span> : /* that it's going to be overwritten by the recovering function */
<span class="lineNum"> 863 </span><span class="lineCov"> 1766 : memcpy(block_copy, block_buffer, state-&gt;block_size);</span>
<span class="lineNum"> 863 </span><span class="lineCov"> 1764 : memcpy(block_copy, block_buffer, state-&gt;block_size);</span>
<span class="lineNum"> 864 </span> :
<span class="lineNum"> 865 </span><span class="lineCov"> 1766 : if (block_state == BLOCK_STATE_CHG</span>
<span class="lineNum"> 866 </span><span class="lineCov"> 883 : &amp;&amp; hash_is_zero(failed[j].block-&gt;hash)</span>
<span class="lineNum"> 865 </span><span class="lineCov"> 1764 : if (block_state == BLOCK_STATE_CHG</span>
<span class="lineNum"> 866 </span><span class="lineCov"> 882 : &amp;&amp; hash_is_zero(failed[j].block-&gt;hash)</span>
<span class="lineNum"> 867 </span> : ) {
<span class="lineNum"> 868 </span> : /* if the block was filled with 0, restore this state */
<span class="lineNum"> 869 </span> : /* and avoid to recover it */
<span class="lineNum"> 870 </span><span class="lineNoCov"> 0 : memset(block_buffer, 0, state-&gt;block_size);</span>
<span class="lineNum"> 871 </span> : } else {
<span class="lineNum"> 872 </span> : /* if we have too many failures, we cannot recover */
<span class="lineNum"> 873 </span><span class="lineCov"> 1766 : if (failed_mac &gt;= state-&gt;level)</span>
<span class="lineNum"> 873 </span><span class="lineCov"> 1764 : if (failed_mac &gt;= state-&gt;level)</span>
<span class="lineNum"> 874 </span><span class="lineNoCov"> 0 : break;</span>
<span class="lineNum"> 875 </span> :
<span class="lineNum"> 876 </span> : /* otherwise it has to be recovered */
<span class="lineNum"> 877 </span><span class="lineCov"> 1766 : failed_map[failed_mac++] = failed[j].index;</span>
<span class="lineNum"> 877 </span><span class="lineCov"> 1764 : failed_map[failed_mac++] = failed[j].index;</span>
<span class="lineNum"> 878 </span> : }
<span class="lineNum"> 879 </span> : }
<span class="lineNum"> 880 </span> :
<span class="lineNum"> 881 </span> : /* if we have something to recover and enough parity */
<span class="lineNum"> 882 </span><span class="lineCov"> 883 : if (something_to_recover &amp;&amp; j == failed_count) {</span>
<span class="lineNum"> 882 </span><span class="lineCov"> 882 : if (something_to_recover &amp;&amp; j == failed_count) {</span>
<span class="lineNum"> 883 </span> : /* until now is CPU */
<span class="lineNum"> 884 </span><span class="lineCov"> 883 : state_usage_cpu(state);</span>
<span class="lineNum"> 884 </span><span class="lineCov"> 882 : state_usage_cpu(state);</span>
<span class="lineNum"> 885 </span> :
<span class="lineNum"> 886 </span> : /* read the parity */
<span class="lineNum"> 887 </span> : /* we are sure that parity exists because */
<span class="lineNum"> 888 </span> : /* we have at least one BLK block */
<span class="lineNum"> 889 </span><span class="lineCov"> 6181 : for (l = 0; l &lt; state-&gt;level; ++l) {</span>
<span class="lineNum"> 890 </span><span class="lineCov"> 5298 : ret = parity_read(parity[l], i, buffer[diskmax + l], state-&gt;block_size, log_error);</span>
<span class="lineNum"> 891 </span><span class="lineCov"> 5298 : if (ret == -1) {</span>
<span class="lineNum"> 889 </span><span class="lineCov"> 6174 : for (l = 0; l &lt; state-&gt;level; ++l) {</span>
<span class="lineNum"> 890 </span><span class="lineCov"> 5292 : ret = parity_read(parity[l], i, buffer[diskmax + l], state-&gt;block_size, log_error);</span>
<span class="lineNum"> 891 </span><span class="lineCov"> 5292 : if (ret == -1) {</span>
<span class="lineNum"> 892 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 893 </span> : if (errno == EIO) {
<span class="lineNum"> 894 </span> : log_tag(&quot;parity_error:%u:%s: Read EIO error. %s\n&quot;, i, lev_config_name(l), strerror(errno));
@ -978,74 +978,74 @@
<span class="lineNum"> 916 </span> : }
<span class="lineNum"> 917 </span> :
<span class="lineNum"> 918 </span> : /* until now is parity */
<span class="lineNum"> 919 </span><span class="lineCov"> 5298 : state_usage_parity(state, l);</span>
<span class="lineNum"> 919 </span><span class="lineCov"> 5292 : state_usage_parity(state, l);</span>
<span class="lineNum"> 920 </span> : }
<span class="lineNum"> 921 </span> :
<span class="lineNum"> 922 </span> : /* if no error in parity read */
<span class="lineNum"> 923 </span><span class="lineCov"> 883 : if (!io_error_on_this_block) {</span>
<span class="lineNum"> 923 </span><span class="lineCov"> 882 : if (!io_error_on_this_block) {</span>
<span class="lineNum"> 924 </span> : /* try to fix the data */
<span class="lineNum"> 925 </span> : /* note that this is a simple fix algorithm, that doesn't take into */
<span class="lineNum"> 926 </span> : /* account the case of a wrong parity */
<span class="lineNum"> 927 </span> : /* only 'fix' supports the most advanced fixing */
<span class="lineNum"> 928 </span><span class="lineCov"> 883 : raid_rec(failed_mac, failed_map, diskmax, state-&gt;level, state-&gt;block_size, buffer);</span>
<span class="lineNum"> 928 </span><span class="lineCov"> 882 : raid_rec(failed_mac, failed_map, diskmax, state-&gt;level, state-&gt;block_size, buffer);</span>
<span class="lineNum"> 929 </span> :
<span class="lineNum"> 930 </span> : /* check the result and prepare the data */
<span class="lineNum"> 931 </span><span class="lineCov"> 5298 : for (j = 0; j &lt; failed_count; ++j) {</span>
<span class="lineNum"> 931 </span><span class="lineCov"> 5292 : for (j = 0; j &lt; failed_count; ++j) {</span>
<span class="lineNum"> 932 </span> : unsigned char hash[HASH_SIZE];
<span class="lineNum"> 933 </span><span class="lineCov"> 1766 : unsigned char* block_buffer = buffer[failed[j].index];</span>
<span class="lineNum"> 934 </span><span class="lineCov"> 1766 : unsigned char* block_copy = buffer[diskmax + state-&gt;level + failed[j].index];</span>
<span class="lineNum"> 935 </span><span class="lineCov"> 1766 : unsigned block_state = block_state_get(failed[j].block);</span>
<span class="lineNum"> 933 </span><span class="lineCov"> 1764 : unsigned char* block_buffer = buffer[failed[j].index];</span>
<span class="lineNum"> 934 </span><span class="lineCov"> 1764 : unsigned char* block_copy = buffer[diskmax + state-&gt;level + failed[j].index];</span>
<span class="lineNum"> 935 </span><span class="lineCov"> 1764 : unsigned block_state = block_state_get(failed[j].block);</span>
<span class="lineNum"> 936 </span> :
<span class="lineNum"> 937 </span><span class="lineCov"> 1766 : if (block_state == BLOCK_STATE_BLK) {</span>
<span class="lineNum"> 938 </span><span class="lineCov"> 883 : unsigned size = failed[j].size;</span>
<span class="lineNum"> 937 </span><span class="lineCov"> 1764 : if (block_state == BLOCK_STATE_BLK) {</span>
<span class="lineNum"> 938 </span><span class="lineCov"> 882 : unsigned size = failed[j].size;</span>
<span class="lineNum"> 939 </span> :
<span class="lineNum"> 940 </span> : /* compute the hash of the recovered block */
<span class="lineNum"> 941 </span><span class="lineCov"> 883 : if (rehash) {</span>
<span class="lineNum"> 941 </span><span class="lineCov"> 882 : if (rehash) {</span>
<span class="lineNum"> 942 </span><span class="lineNoCov"> 0 : memhash(state-&gt;prevhash, state-&gt;prevhashseed, hash, block_buffer, size);</span>
<span class="lineNum"> 943 </span> : } else {
<span class="lineNum"> 944 </span><span class="lineCov"> 883 : memhash(state-&gt;hash, state-&gt;hashseed, hash, block_buffer, size);</span>
<span class="lineNum"> 944 </span><span class="lineCov"> 882 : memhash(state-&gt;hash, state-&gt;hashseed, hash, block_buffer, size);</span>
<span class="lineNum"> 945 </span> : }
<span class="lineNum"> 946 </span> :
<span class="lineNum"> 947 </span> : /* if the hash doesn't match */
<span class="lineNum"> 948 </span><span class="lineCov"> 883 : if (memcmp(hash, failed[j].block-&gt;hash, HASH_SIZE) != 0) {</span>
<span class="lineNum"> 948 </span><span class="lineCov"> 882 : if (memcmp(hash, failed[j].block-&gt;hash, HASH_SIZE) != 0) {</span>
<span class="lineNum"> 949 </span> : /* we have not recovered */
<span class="lineNum"> 950 </span><span class="lineNoCov"> 0 : break;</span>
<span class="lineNum"> 951 </span> : }
<span class="lineNum"> 952 </span> :
<span class="lineNum"> 953 </span> : /* pad with 0 if needed */
<span class="lineNum"> 954 </span><span class="lineCov"> 883 : if (size &lt; state-&gt;block_size)</span>
<span class="lineNum"> 955 </span><span class="lineCov"> 370 : memset(block_buffer + size, 0, state-&gt;block_size - size);</span>
<span class="lineNum"> 954 </span><span class="lineCov"> 882 : if (size &lt; state-&gt;block_size)</span>
<span class="lineNum"> 955 </span><span class="lineCov"> 342 : memset(block_buffer + size, 0, state-&gt;block_size - size);</span>
<span class="lineNum"> 956 </span> : } else {
<span class="lineNum"> 957 </span> : /* otherwise restore the content */
<span class="lineNum"> 958 </span> : /* because we are not interested in the old state */
<span class="lineNum"> 959 </span> : /* that it's recovered for CHG, REP and DELETED blocks */
<span class="lineNum"> 960 </span><span class="lineCov"> 883 : memcpy(block_buffer, block_copy, state-&gt;block_size);</span>
<span class="lineNum"> 960 </span><span class="lineCov"> 882 : memcpy(block_buffer, block_copy, state-&gt;block_size);</span>
<span class="lineNum"> 961 </span> : }
<span class="lineNum"> 962 </span> : }
<span class="lineNum"> 963 </span> :
<span class="lineNum"> 964 </span> : /* if all is processed, we have fixed it */
<span class="lineNum"> 965 </span><span class="lineCov"> 883 : if (j == failed_count)</span>
<span class="lineNum"> 966 </span><span class="lineCov"> 883 : fixed_error_on_this_block = 1;</span>
<span class="lineNum"> 965 </span><span class="lineCov"> 882 : if (j == failed_count)</span>
<span class="lineNum"> 966 </span><span class="lineCov"> 882 : fixed_error_on_this_block = 1;</span>
<span class="lineNum"> 967 </span> : }
<span class="lineNum"> 968 </span> : }
<span class="lineNum"> 969 </span> : }
<span class="lineNum"> 970 </span> :
<span class="lineNum"> 971 </span> : /* if we have read all the data required and it's correct, proceed with the parity */
<span class="lineNum"> 972 </span><span class="lineCov"> 82210 : if (!error_on_this_block &amp;&amp; !io_error_on_this_block</span>
<span class="lineNum"> 973 </span><span class="lineCov"> 82191 : &amp;&amp; (!silent_error_on_this_block || fixed_error_on_this_block)</span>
<span class="lineNum"> 972 </span><span class="lineCov"> 82341 : if (!error_on_this_block &amp;&amp; !io_error_on_this_block</span>
<span class="lineNum"> 973 </span><span class="lineCov"> 82322 : &amp;&amp; (!silent_error_on_this_block || fixed_error_on_this_block)</span>
<span class="lineNum"> 974 </span> : ) {
<span class="lineNum"> 975 </span> : /* update the parity only if really needed */
<span class="lineNum"> 976 </span><span class="lineCov"> 82191 : if (parity_needs_to_be_updated) {</span>
<span class="lineNum"> 976 </span><span class="lineCov"> 82322 : if (parity_needs_to_be_updated) {</span>
<span class="lineNum"> 977 </span> : /* compute the parity */
<span class="lineNum"> 978 </span><span class="lineCov"> 79852 : raid_gen(diskmax, state-&gt;level, state-&gt;block_size, buffer);</span>
<span class="lineNum"> 978 </span><span class="lineCov"> 79972 : raid_gen(diskmax, state-&gt;level, state-&gt;block_size, buffer);</span>
<span class="lineNum"> 979 </span> :
<span class="lineNum"> 980 </span> : /* until now is CPU */
<span class="lineNum"> 981 </span><span class="lineCov"> 79852 : state_usage_cpu(state);</span>
<span class="lineNum"> 981 </span><span class="lineCov"> 79972 : state_usage_cpu(state);</span>
<span class="lineNum"> 982 </span> :
<span class="lineNum"> 983 </span> : /* write the parity */
<span class="lineNum"> 984 </span><span class="lineCov"> 522644 : for (l = 0; l &lt; state-&gt;level; ++l) {</span>
<span class="lineNum"> 985 </span><span class="lineCov"> 442792 : ret = parity_write(parity[l], i, buffer[diskmax + l], state-&gt;block_size);</span>
<span class="lineNum"> 986 </span><span class="lineCov"> 442792 : if (ret == -1) {</span>
<span class="lineNum"> 984 </span><span class="lineCov"> 523484 : for (l = 0; l &lt; state-&gt;level; ++l) {</span>
<span class="lineNum"> 985 </span><span class="lineCov"> 443512 : ret = parity_write(parity[l], i, buffer[diskmax + l], state-&gt;block_size);</span>
<span class="lineNum"> 986 </span><span class="lineCov"> 443512 : if (ret == -1) {</span>
<span class="lineNum"> 987 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 988 </span> : if (errno == EIO) {
<span class="lineNum"> 989 </span> : log_tag(&quot;parity_error:%u:%s: Write EIO error. %s\n&quot;, i, lev_config_name(l), strerror(errno));
@ -1073,35 +1073,35 @@
<span class="lineNum"> 1011 </span> : }
<span class="lineNum"> 1012 </span> :
<span class="lineNum"> 1013 </span> : /* until now is parity */
<span class="lineNum"> 1014 </span><span class="lineCov"> 442792 : state_usage_parity(state, l);</span>
<span class="lineNum"> 1014 </span><span class="lineCov"> 443512 : state_usage_parity(state, l);</span>
<span class="lineNum"> 1015 </span> : }
<span class="lineNum"> 1016 </span> : }
<span class="lineNum"> 1017 </span> :
<span class="lineNum"> 1018 </span> : /* if no error in parity write */
<span class="lineNum"> 1019 </span><span class="lineCov"> 82191 : if (!io_error_on_this_block) {</span>
<span class="lineNum"> 1019 </span><span class="lineCov"> 82322 : if (!io_error_on_this_block) {</span>
<span class="lineNum"> 1020 </span> : /* for each disk, mark the blocks as processed */
<span class="lineNum"> 1021 </span><span class="lineCov"> 575337 : for (j = 0; j &lt; diskmax; ++j) {</span>
<span class="lineNum"> 1021 </span><span class="lineCov"> 576254 : for (j = 0; j &lt; diskmax; ++j) {</span>
<span class="lineNum"> 1022 </span> : struct snapraid_block* block;
<span class="lineNum"> 1023 </span> :
<span class="lineNum"> 1024 </span><span class="lineCov"> 493146 : if (!handle[j].disk)</span>
<span class="lineNum"> 1024 </span><span class="lineCov"> 493932 : if (!handle[j].disk)</span>
<span class="lineNum"> 1025 </span><span class="lineNoCov"> 0 : continue;</span>
<span class="lineNum"> 1026 </span> :
<span class="lineNum"> 1027 </span><span class="lineCov"> 493146 : block = fs_par2block_get(handle[j].disk, i);</span>
<span class="lineNum"> 1027 </span><span class="lineCov"> 493932 : block = fs_par2block_get(handle[j].disk, i);</span>
<span class="lineNum"> 1028 </span> :
<span class="lineNum"> 1029 </span><span class="lineCov"> 493146 : if (block == BLOCK_EMPTY) {</span>
<span class="lineNum"> 1029 </span><span class="lineCov"> 493932 : if (block == BLOCK_EMPTY) {</span>
<span class="lineNum"> 1030 </span> : /* nothing to do */
<span class="lineNum"> 1031 </span><span class="lineCov"> 77254 : continue;</span>
<span class="lineNum"> 1031 </span><span class="lineCov"> 77225 : continue;</span>
<span class="lineNum"> 1032 </span> : }
<span class="lineNum"> 1033 </span> :
<span class="lineNum"> 1034 </span> : /* if it's a deleted block */
<span class="lineNum"> 1035 </span><span class="lineCov"> 415892 : if (block_state_get(block) == BLOCK_STATE_DELETED) {</span>
<span class="lineNum"> 1035 </span><span class="lineCov"> 416707 : if (block_state_get(block) == BLOCK_STATE_DELETED) {</span>
<span class="lineNum"> 1036 </span> : /* the parity is now updated without this block, so it's now empty */
<span class="lineNum"> 1037 </span><span class="lineCov"> 11066 : fs_deallocate(handle[j].disk, i);</span>
<span class="lineNum"> 1038 </span><span class="lineCov"> 11066 : continue;</span>
<span class="lineNum"> 1039 </span> : }
<span class="lineNum"> 1040 </span> :
<span class="lineNum"> 1041 </span> : /* now all the blocks have the hash and the parity computed */
<span class="lineNum"> 1042 </span><span class="lineCov"> 404826 : block_state_set(block, BLOCK_STATE_BLK);</span>
<span class="lineNum"> 1042 </span><span class="lineCov"> 405641 : block_state_set(block, BLOCK_STATE_BLK);</span>
<span class="lineNum"> 1043 </span> : }
<span class="lineNum"> 1044 </span> : }
<span class="lineNum"> 1045 </span> :
@ -1110,12 +1110,12 @@
<span class="lineNum"> 1048 </span> : /* wrote the parity at this time */
<span class="lineNum"> 1049 </span> : /* we also update the info block only if no silent error was found */
<span class="lineNum"> 1050 </span> : /* because has no sense to refresh the time for data that we know bad */
<span class="lineNum"> 1051 </span><span class="lineCov"> 82191 : if (parity_needs_to_be_updated</span>
<span class="lineNum"> 1052 </span><span class="lineCov"> 79852 : &amp;&amp; !silent_error_on_this_block</span>
<span class="lineNum"> 1053 </span><span class="lineCov"> 79501 : &amp;&amp; !io_error_on_this_block</span>
<span class="lineNum"> 1051 </span><span class="lineCov"> 82322 : if (parity_needs_to_be_updated</span>
<span class="lineNum"> 1052 </span><span class="lineCov"> 79972 : &amp;&amp; !silent_error_on_this_block</span>
<span class="lineNum"> 1053 </span><span class="lineCov"> 79625 : &amp;&amp; !io_error_on_this_block</span>
<span class="lineNum"> 1054 </span> : ) {
<span class="lineNum"> 1055 </span> : /* if rehash is neeed */
<span class="lineNum"> 1056 </span><span class="lineCov"> 79501 : if (rehash) {</span>
<span class="lineNum"> 1056 </span><span class="lineCov"> 79625 : if (rehash) {</span>
<span class="lineNum"> 1057 </span> : /* store all the new hash already computed */
<span class="lineNum"> 1058 </span><span class="lineCov"> 64358 : for (j = 0; j &lt; diskmax; ++j) {</span>
<span class="lineNum"> 1059 </span><span class="lineCov"> 55164 : if (rehandle[j].block)</span>
@ -1125,37 +1125,37 @@
<span class="lineNum"> 1063 </span> :
<span class="lineNum"> 1064 </span> : /* update the time info of the block */
<span class="lineNum"> 1065 </span> : /* we are also clearing any previous bad and rehash flag */
<span class="lineNum"> 1066 </span><span class="lineCov"> 79501 : info_set(&amp;state-&gt;infoarr, i, info_make(now, 0, 0, 1));</span>
<span class="lineNum"> 1066 </span><span class="lineCov"> 79625 : info_set(&amp;state-&gt;infoarr, i, info_make(now, 0, 0, 1));</span>
<span class="lineNum"> 1067 </span> : }
<span class="lineNum"> 1068 </span> : }
<span class="lineNum"> 1069 </span> :
<span class="lineNum"> 1070 </span> : /* if a silent (even if corrected) or input/output error was found */
<span class="lineNum"> 1071 </span> : /* mark the block as bad to have check/fix to handle it */
<span class="lineNum"> 1072 </span> : /* because our correction is in memory only and not yet written */
<span class="lineNum"> 1073 </span><span class="lineCov"> 82210 : if (silent_error_on_this_block || io_error_on_this_block) {</span>
<span class="lineNum"> 1073 </span><span class="lineCov"> 82341 : if (silent_error_on_this_block || io_error_on_this_block) {</span>
<span class="lineNum"> 1074 </span> : /* set the error status keeping the other info */
<span class="lineNum"> 1075 </span><span class="lineCov"> 883 : info_set(&amp;state-&gt;infoarr, i, info_set_bad(info));</span>
<span class="lineNum"> 1075 </span><span class="lineCov"> 882 : info_set(&amp;state-&gt;infoarr, i, info_set_bad(info));</span>
<span class="lineNum"> 1076 </span> : }
<span class="lineNum"> 1077 </span> :
<span class="lineNum"> 1078 </span> : /* mark the state as needing write */
<span class="lineNum"> 1079 </span><span class="lineCov"> 82210 : state-&gt;need_write = 1;</span>
<span class="lineNum"> 1079 </span><span class="lineCov"> 82341 : state-&gt;need_write = 1;</span>
<span class="lineNum"> 1080 </span> :
<span class="lineNum"> 1081 </span> : /* count the number of processed block */
<span class="lineNum"> 1082 </span><span class="lineCov"> 82210 : ++countpos;</span>
<span class="lineNum"> 1082 </span><span class="lineCov"> 82341 : ++countpos;</span>
<span class="lineNum"> 1083 </span> :
<span class="lineNum"> 1084 </span> : /* progress */
<span class="lineNum"> 1085 </span><span class="lineCov"> 82210 : if (state_progress(state, i, countpos, countmax, countsize)) {</span>
<span class="lineNum"> 1085 </span><span class="lineCov"> 82341 : if (state_progress(state, i, countpos, countmax, countsize)) {</span>
<span class="lineNum"> 1086 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 1087 </span> : break;
<span class="lineNum"> 1088 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 1089 </span> : }
<span class="lineNum"> 1090 </span> :
<span class="lineNum"> 1091 </span> : /* autosave */
<span class="lineNum"> 1092 </span><span class="lineCov"> 82210 : if ((state-&gt;autosave != 0</span>
<span class="lineNum"> 1092 </span><span class="lineCov"> 82341 : if ((state-&gt;autosave != 0</span>
<span class="lineNum"> 1093 </span><span class="lineCov"> 7264 : &amp;&amp; autosavedone &gt;= autosavelimit /* if we have reached the limit */</span>
<span class="lineNum"> 1094 </span><span class="lineNoCov"> 0 : &amp;&amp; autosavemissing &gt;= autosavelimit) /* if we have at least a full step to do */</span>
<span class="lineNum"> 1095 </span> : /* or if we have a forced autosave at the specified block */
<span class="lineNum"> 1096 </span><span class="lineCov"> 82210 : || (state-&gt;opt.force_autosave_at != 0 &amp;&amp; state-&gt;opt.force_autosave_at == i)</span>
<span class="lineNum"> 1096 </span><span class="lineCov"> 82341 : || (state-&gt;opt.force_autosave_at != 0 &amp;&amp; state-&gt;opt.force_autosave_at == i)</span>
<span class="lineNum"> 1097 </span> : ) {
<span class="lineNum"> 1098 </span><span class="lineCov"> 1 : autosavedone = 0; /* restart the counter */</span>
<span class="lineNum"> 1099 </span> :

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">21</td>
@ -61,15 +61,15 @@
</tr>
<tr>
<td class="coverFn"><a href="unix.c.gcov.html#263">tick</a></td>
<td class="coverFnHi">2046547</td>
<td class="coverFnHi">2049010</td>
</tr>
<tr>
<td class="coverFn"><a href="unix.c.gcov.html#29">open_noatime</a></td>
<td class="coverFnHi">1639793</td>
<td class="coverFnHi">1640600</td>
</tr>
<tr>
<td class="coverFn"><a href="unix.c.gcov.html#124">filephy</a></td>
<td class="coverFnHi">11430</td>
<td class="coverFnHi">11432</td>
</tr>
<tr>
<td class="coverFn"><a href="unix.c.gcov.html#74">devuuid</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">21</td>
@ -105,7 +105,7 @@
</tr>
<tr>
<td class="coverFn"><a href="unix.c.gcov.html#124">filephy</a></td>
<td class="coverFnHi">11430</td>
<td class="coverFnHi">11432</td>
</tr>
<tr>
<td class="coverFn"><a href="unix.c.gcov.html#200">fsinfo</a></td>
@ -113,7 +113,7 @@
</tr>
<tr>
<td class="coverFn"><a href="unix.c.gcov.html#29">open_noatime</a></td>
<td class="coverFnHi">1639793</td>
<td class="coverFnHi">1640600</td>
</tr>
<tr>
<td class="coverFn"><a href="unix.c.gcov.html#1009">os_done</a></td>
@ -145,7 +145,7 @@
</tr>
<tr>
<td class="coverFn"><a href="unix.c.gcov.html#263">tick</a></td>
<td class="coverFnHi">2046547</td>
<td class="coverFnHi">2049010</td>
</tr>
<tr>
<td class="coverFn"><a href="unix.c.gcov.html#295">tick_ms</a></td>

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">21</td>
@ -90,15 +90,15 @@
<span class="lineNum"> 28 </span> : int exit_failure = 1;
<a name="29"><span class="lineNum"> 29 </span> : int exit_sync_needed = 2;</a>
<span class="lineNum"> 30 </span> :
<span class="lineNum"> 31 </span><span class="lineCov"> 1639793 : int open_noatime(const char* file, int flags)</span>
<span class="lineNum"> 31 </span><span class="lineCov"> 1640600 : int open_noatime(const char* file, int flags)</span>
<span class="lineNum"> 32 </span> : {
<span class="lineNum"> 33 </span> : #ifdef O_NOATIME
<span class="lineNum"> 34 </span><span class="lineCov"> 1639793 : int f = open(file, flags | O_NOATIME);</span>
<span class="lineNum"> 34 </span><span class="lineCov"> 1640600 : int f = open(file, flags | O_NOATIME);</span>
<span class="lineNum"> 35 </span> :
<span class="lineNum"> 36 </span> : /* only root is allowed to use O_NOATIME, in case retry without it */
<span class="lineNum"> 37 </span><span class="lineCov"> 1639793 : if (f == -1 &amp;&amp; errno == EPERM)</span>
<span class="lineNum"> 37 </span><span class="lineCov"> 1640600 : if (f == -1 &amp;&amp; errno == EPERM)</span>
<span class="lineNum"> 38 </span><span class="lineNoCov"> 0 : f = open(file, flags);</span>
<span class="lineNum"> 39 </span><span class="lineCov"> 1639793 : return f;</span>
<span class="lineNum"> 39 </span><span class="lineCov"> 1640600 : return f;</span>
<span class="lineNum"> 40 </span> : #else
<span class="lineNum"> 41 </span> : return open(file, flags);
<span class="lineNum"> 42 </span> : #endif
@ -185,7 +185,7 @@
<span class="lineNum"> 123 </span> : }
<a name="124"><span class="lineNum"> 124 </span> : #endif</a>
<span class="lineNum"> 125 </span> :
<span class="lineNum"> 126 </span><span class="lineCov"> 11430 : int filephy(const char* path, uint64_t size, uint64_t* physical)</span>
<span class="lineNum"> 126 </span><span class="lineCov"> 11432 : int filephy(const char* path, uint64_t size, uint64_t* physical)</span>
<span class="lineNum"> 127 </span> : {
<span class="lineNum"> 128 </span> : #if HAVE_LINUX_FIEMAP_H
<span class="lineNum"> 129 </span> : /* In Linux get the real physical address of the file */
@ -197,24 +197,24 @@
<span class="lineNum"> 135 </span> : } fm;
<span class="lineNum"> 136 </span> : unsigned int blknum;
<span class="lineNum"> 137 </span> :
<span class="lineNum"> 138 </span><span class="lineCov"> 11430 : f = open(path, O_RDONLY);</span>
<span class="lineNum"> 139 </span><span class="lineCov"> 11430 : if (f == -1) {</span>
<span class="lineNum"> 138 </span><span class="lineCov"> 11432 : f = open(path, O_RDONLY);</span>
<span class="lineNum"> 139 </span><span class="lineCov"> 11432 : if (f == -1) {</span>
<span class="lineNum"> 140 </span><span class="lineNoCov"> 0 : return -1;</span>
<span class="lineNum"> 141 </span> : }
<span class="lineNum"> 142 </span> :
<span class="lineNum"> 143 </span> : /* first try with FIEMAP */
<span class="lineNum"> 144 </span> : /* if works for ext2, ext3, ext4, xfs, btrfs */
<span class="lineNum"> 145 </span><span class="lineCov"> 11430 : memset(&amp;fm, 0, sizeof(fm));</span>
<span class="lineNum"> 146 </span><span class="lineCov"> 11430 : fm.fiemap.fm_start = 0;</span>
<span class="lineNum"> 147 </span><span class="lineCov"> 11430 : fm.fiemap.fm_length = ~0ULL;</span>
<span class="lineNum"> 148 </span><span class="lineCov"> 11430 : fm.fiemap.fm_flags = FIEMAP_FLAG_SYNC; /* required to ensure that just created files report a valid address and not 0 */</span>
<span class="lineNum"> 149 </span><span class="lineCov"> 11430 : fm.fiemap.fm_extent_count = 1; /* we are interested only at the first block */</span>
<span class="lineNum"> 145 </span><span class="lineCov"> 11432 : memset(&amp;fm, 0, sizeof(fm));</span>
<span class="lineNum"> 146 </span><span class="lineCov"> 11432 : fm.fiemap.fm_start = 0;</span>
<span class="lineNum"> 147 </span><span class="lineCov"> 11432 : fm.fiemap.fm_length = ~0ULL;</span>
<span class="lineNum"> 148 </span><span class="lineCov"> 11432 : fm.fiemap.fm_flags = FIEMAP_FLAG_SYNC; /* required to ensure that just created files report a valid address and not 0 */</span>
<span class="lineNum"> 149 </span><span class="lineCov"> 11432 : fm.fiemap.fm_extent_count = 1; /* we are interested only at the first block */</span>
<span class="lineNum"> 150 </span> :
<span class="lineNum"> 151 </span><span class="lineCov"> 11430 : if (ioctl(f, FS_IOC_FIEMAP, &amp;fm) != -1) {</span>
<span class="lineNum"> 152 </span><span class="lineCov"> 11430 : *physical = fm.fiemap.fm_extents[0].fe_physical + FILEPHY_REAL_OFFSET;</span>
<span class="lineNum"> 153 </span><span class="lineCov"> 11430 : if (close(f) == -1)</span>
<span class="lineNum"> 151 </span><span class="lineCov"> 11432 : if (ioctl(f, FS_IOC_FIEMAP, &amp;fm) != -1) {</span>
<span class="lineNum"> 152 </span><span class="lineCov"> 11432 : *physical = fm.fiemap.fm_extents[0].fe_physical + FILEPHY_REAL_OFFSET;</span>
<span class="lineNum"> 153 </span><span class="lineCov"> 11432 : if (close(f) == -1)</span>
<span class="lineNum"> 154 </span><span class="lineNoCov"> 0 : return -1;</span>
<span class="lineNum"> 155 </span><span class="lineCov"> 11430 : return 0;</span>
<span class="lineNum"> 155 </span><span class="lineCov"> 11432 : return 0;</span>
<span class="lineNum"> 156 </span> : }
<span class="lineNum"> 157 </span> :
<span class="lineNum"> 158 </span> : /* if the file is empty, FIBMAP doesn't work, and we don't even try to use it */
@ -324,7 +324,7 @@
<span class="lineNum"> 262 </span><span class="lineCov"> 2175 : return 0;</span>
<a name="263"><span class="lineNum"> 263 </span> : }</a>
<span class="lineNum"> 264 </span> :
<span class="lineNum"> 265 </span><span class="lineCov"> 2046547 : uint64_t tick(void)</span>
<span class="lineNum"> 265 </span><span class="lineCov"> 2049010 : uint64_t tick(void)</span>
<span class="lineNum"> 266 </span> : {
<span class="lineNum"> 267 </span> : #if HAVE_MACH_ABSOLUTE_TIME
<span class="lineNum"> 268 </span> : /* for Mac OS X */
@ -335,14 +335,14 @@
<span class="lineNum"> 273 </span> :
<span class="lineNum"> 274 </span> : /* nanosecond precision with clock_gettime() */
<span class="lineNum"> 275 </span> : #if defined(CLOCK_MONOTONIC_RAW)
<span class="lineNum"> 276 </span><span class="lineCov"> 2046547 : if (clock_gettime(CLOCK_MONOTONIC_RAW, &amp;tv) != 0) {</span>
<span class="lineNum"> 276 </span><span class="lineCov"> 2049010 : if (clock_gettime(CLOCK_MONOTONIC_RAW, &amp;tv) != 0) {</span>
<span class="lineNum"> 277 </span> : #else
<span class="lineNum"> 278 </span> : if (clock_gettime(CLOCK_MONOTONIC, &amp;tv) != 0) {
<span class="lineNum"> 279 </span> : #endif
<span class="lineNum"> 280 </span><span class="lineNoCov"> 0 : return 0;</span>
<span class="lineNum"> 281 </span> : }
<span class="lineNum"> 282 </span> :
<span class="lineNum"> 283 </span><span class="lineCov"> 2046547 : return tv.tv_sec * 1000000000ULL + tv.tv_nsec;</span>
<span class="lineNum"> 283 </span><span class="lineCov"> 2049010 : return tv.tv_sec * 1000000000ULL + tv.tv_nsec;</span>
<span class="lineNum"> 284 </span> : #else
<span class="lineNum"> 285 </span> : /* other platforms */
<span class="lineNum"> 286 </span> : struct timeval tv;
@ -504,14 +504,14 @@
<span class="lineNum"> 442 </span> : return -1;
<span class="lineNum"> 443 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 444 </span> : }
<span class="lineNum"> 445 </span><span class="lineCov"> 96 : if (st.st_rdev != device) {</span>
<span class="lineNum"> 445 </span><span class="lineCov"> 97 : if (st.st_rdev != device) {</span>
<span class="lineNum"> 446 </span> : /* LCOV_EXCL_START */
<span class="lineNum"> 447 </span> : log_fatal(&quot;Unexpected device '%u:%u' instead of '%u:%u' for '%s'.\n&quot;, major(st.st_rdev), minor(st.st_rdev), major(device), minor(device), path);
<span class="lineNum"> 448 </span> : return -1;
<span class="lineNum"> 449 </span> : /* LCOV_EXCL_STOP */
<span class="lineNum"> 450 </span> : }
<span class="lineNum"> 451 </span> :
<span class="lineNum"> 452 </span><span class="lineCov"> 96 : return 0;</span>
<span class="lineNum"> 452 </span><span class="lineCov"> 97 : return 0;</span>
<span class="lineNum"> 453 </span> : }
<span class="lineNum"> 454 </span> : #endif
<span class="lineNum"> 455 </span> :

View file

@ -37,7 +37,7 @@
</tr>
<tr>
<td class="headerItem">Date:</td>
<td class="headerValue">2015-11-13</td>
<td class="headerValue">2015-11-20</td>
<td></td>
<td class="headerItem">Functions:</td>
<td class="headerCovTableEntry">14</td>
@ -61,35 +61,35 @@
</tr>
<tr>
<td class="coverFn"><a href="util.c.gcov.html#399">util_rotl32</a></td>
<td class="coverFnHi">924868918</td>
<td class="coverFnHi">924861211</td>
</tr>
<tr>
<td class="coverFn"><a href="util.c.gcov.html#404">util_rotl64</a></td>
<td class="coverFnHi">461100864</td>
<td class="coverFnHi">461015664</td>
</tr>
<tr>
<td class="coverFn"><a href="util.c.gcov.html#447">memhash</a></td>
<td class="coverFnHi">5723453</td>
<td class="coverFnHi">5724756</td>
</tr>
<tr>
<td class="coverFn"><a href="util.c.gcov.html#367">crc32c_x86</a></td>
<td class="coverFnHi">659437</td>
<td class="coverFnHi">659527</td>
</tr>
<tr>
<td class="coverFn"><a href="util.c.gcov.html#478">memdiff</a></td>
<td class="coverFnHi">25256</td>
<td class="coverFnHi">25190</td>
</tr>
<tr>
<td class="coverFn"><a href="util.c.gcov.html#58">malloc_nofail_test</a></td>
<td class="coverFnHi">2579</td>
<td class="coverFnHi">2580</td>
</tr>
<tr>
<td class="coverFn"><a href="util.c.gcov.html#69">mtest_vector</a></td>
<td class="coverFnHi">2579</td>
<td class="coverFnHi">2580</td>
</tr>
<tr>
<td class="coverFn"><a href="util.c.gcov.html#355">crc32c_gen</a></td>
<td class="coverFnHi">337</td>
<td class="coverFnHi">353</td>
</tr>
<tr>
<td class="coverFn"><a href="util.c.gcov.html#381">crc32c_init</a></td>

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