Version 1.26 - 21 December 2007, by Olivier "blino" Blin - rebuild with list_modules to handle atl2 ethernet driver - fix live stage2 support Version 1.25 - 12 December 2007, by Pascal "Pixel" Rigaux - rebuild for new list_modules Version 1.24 - 15 October 2007, by Olivier "blino" Blin - rebuild for new list_modules (to include ipw3945) Version 1.23 - 17 September 2007, by Pascal "Pixel" Rigaux - add dm-zero for dmraid Version 1.22 - 11 September 2007, by Olivier "blino" Blin - add /lib/module-init-tools/ldetect-lst-modules.alias Version 1.21 - 7 September 2007, by Olivier "blino" Blin - add jmicron driver - provide /usr/share/ldetect-lst/*-modules.alias in installer images Version 1.20 - 31 August 2007, by Pascal "Pixel" Rigaux - dynamically determine the size of all.img Version 1.19 - 27 August 2007, by Olivier "blino" Blin - add raid456 module Version 1.18 - 21 August 2007, by Olivier "blino" Blin - release with latest scripts from drakx/kernel Version 1.17 - 21 August 2007, by Olivier "blino" Blin - keep modules without dependencies in modules.dep Version 1.16 - 21 August 2007, by Olivier "blino" Blin - build with new list_modules Version 1.15 - 15 August 2007, by Olivier "blino" Blin - add pcitable, usbtable and pci.ids - fix typos affecting mtab and /var/run creation - add a /lib/modules symlink Version 1.14 - 9 August 2007, by Pascal "Pixel" Rigaux - update_kernel: now require install rpms or rpm files as arguments (this allow specifying precisely which installed kernels are used) Version 1.13 - 8 August 2007, by Pascal "Pixel" Rigaux - add modules.alias in /modules/<version> as required by stage2 with new libldetect - add unionfs module - revert isolinux starting install by default instead of booting on harddrive (#32040) Version 1.12 - 17 July 2007, by Olivier "blino" Blin - add ide-disk module Version 1.11 - 29 June 2007, by Pascal "Pixel" Rigaux - increase all.img size to 10.5MB - default to theme Mandriva-Free, and allow setting another one through THEME environment variable Version 1.9 - 3 April 2007, by Pascal "Pixel" Rigaux - include mmc_block for card readers Version 1.8 - 23 March 2007, by Pascal "Pixel" Rigaux - restore F1 & F2 in boot.iso (#29766) Version 1.6 - 14 March 2007, by Olivier Blin - add tifm modules (Titi) Version 1.5 - 9 March 2007, by Pascal "Pixel" Rigaux - copy isolinux images for x86_64 as well Version 1.4 - 8 March 2007, by Pascal "Pixel" Rigaux - restore vga= and automatic= default options. also restore noacpi, alt0, vgalo, vgahi, text entries (all this is needed when gfxboot is not working or not there) Version 1.3 - 16 February 2007, by Pascal "Pixel" Rigaux - rely on gfxboot for options (vga=, automatic=...) - really use memtest instead of memtest.bin (with file name "memtest.bin" it fails with error 8000, with "memtest" it works) (it seems to be an ancient bug as far as google says) n> <option value='topic/efi'>topic/efi</option> <option value='topic/extlinux'>topic/extlinux</option> <option value='topic/firewall'>topic/firewall</option> <option value='topic/gdk-pixbuf-0-branch'>topic/gdk-pixbuf-0-branch</option> <option value='topic/gi-ppc'>topic/gi-ppc</option> <option value='topic/ia64-8_1'>topic/ia64-8_1</option> <option value='topic/mandrakesoft'>topic/mandrakesoft</option> <option value='topic/mlcd4'>topic/mlcd4</option> <option value='topic/ppp'>topic/ppp</option> <option value='topic/rp-pppoe'>topic/rp-pppoe</option> <option value='topic/switching_to_dnf'>topic/switching_to_dnf</option> <option value='topic/switching_to_urpmi'>topic/switching_to_urpmi</option> <option value='topic/unlabeled-1.1.1'>topic/unlabeled-1.1.1</option> <option value='topic/v_webmin_0_87'>topic/v_webmin_0_87</option> <option value='topic/x86_64-branch'>topic/x86_64-branch</option> <option value='user/animtim/designWork'>user/animtim/designWork</option> <option value='user/colin/rescue-systemd'>user/colin/rescue-systemd</option> <option value='user/ennael/mga6'>user/ennael/mga6</option> <option value='user/erwan/bug-13680'>user/erwan/bug-13680</option> <option value='user/jibz/aarch64'>user/jibz/aarch64</option> <option value='user/martinw/mga6'>user/martinw/mga6</option> <option value='user/pterjan/arm64'>user/pterjan/arm64</option> </select> <input type='submit' value='switch'/></form></td></tr> <tr><td class='sub'>Mageia Installer and base platform for many utilities</td><td class='sub right'>Thierry Vignaud [tv]</td></tr></table> <table class='tabs'><tr><td> <a href='/software/drakx/?h=16.21'>summary</a><a href='/software/drakx/refs/?h=16.21&id=0f60a5cae98c14c9ac9167178395d542ab72d249'>refs</a><a href='/software/drakx/log/perl-install/partition_table_sun.pm?h=16.21'>log</a><a class='active' href='/software/drakx/tree/perl-install/partition_table_sun.pm?h=16.21&id=0f60a5cae98c14c9ac9167178395d542ab72d249'>tree</a><a href='/software/drakx/commit/perl-install/partition_table_sun.pm?h=16.21&id=0f60a5cae98c14c9ac9167178395d542ab72d249'>commit</a><a href='/software/drakx/diff/perl-install/partition_table_sun.pm?h=16.21&id=0f60a5cae98c14c9ac9167178395d542ab72d249'>diff</a><a href='/software/drakx/stats/perl-install/partition_table_sun.pm?h=16.21'>stats</a></td><td class='form'><form class='right' method='get' action='/software/drakx/log/perl-install/partition_table_sun.pm'> <input type='hidden' name='h' value='16.21'/><input type='hidden' name='id' value='0f60a5cae98c14c9ac9167178395d542ab72d249'/><select name='qt'> <option value='grep'>log msg</option> <option value='author'>author</option> <option value='committer'>committer</option> <option value='range'>range</option> </select> <input class='txt' type='search' size='10' name='q' value=''/> <input type='submit' value='search'/> </form> </td></tr></table> <div class='path'>path: <a href='/software/drakx/tree/?h=16.21&id=0f60a5cae98c14c9ac9167178395d542ab72d249'>root</a>/<a href='/software/drakx/tree/perl-install?h=16.21&id=0f60a5cae98c14c9ac9167178395d542ab72d249'>perl-install</a>/<a href='/software/drakx/tree/perl-install/partition_table_sun.pm?h=16.21&id=0f60a5cae98c14c9ac9167178395d542ab72d249'>partition_table_sun.pm</a></div><div class='content'>blob: 75025b5035d90fca859c77d1924734fb3e051289 (<a href='/software/drakx/plain/perl-install/partition_table_sun.pm?h=16.21&id=0f60a5cae98c14c9ac9167178395d542ab72d249'>plain</a>) <table summary='blob content' class='blob'> <tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a> <a id='n2' href='#n2'>2</a> <a id='n3' href='#n3'>3</a> <a id='n4' href='#n4'>4</a> <a id='n5' href='#n5'>5</a> <a id='n6' href='#n6'>6</a> <a id='n7' href='#n7'>7</a> <a id='n8' href='#n8'>8</a> <a id='n9' href='#n9'>9</a> <a id='n10' href='#n10'>10</a> <a id='n11' href='#n11'>11</a> <a id='n12' href='#n12'>12</a> <a id='n13' href='#n13'>13</a> <a id='n14' href='#n14'>14</a> <a id='n15' href='#n15'>15</a> <a id='n16' href='#n16'>16</a> <a id='n17' href='#n17'>17</a> <a id='n18' href='#n18'>18</a> <a id='n19' href='#n19'>19</a> <a id='n20' href='#n20'>20</a> <a id='n21' href='#n21'>21</a> <a id='n22' href='#n22'>22</a> <a id='n23' href='#n23'>23</a> <a id='n24' href='#n24'>24</a> <a id='n25' href='#n25'>25</a> <a id='n26' href='#n26'>26</a> <a id='n27' href='#n27'>27</a> <a id='n28' href='#n28'>28</a> <a id='n29' href='#n29'>29</a> <a id='n30' href='#n30'>30</a> <a id='n31' href='#n31'>31</a> <a id='n32' href='#n32'>32</a> <a id='n33' href='#n33'>33</a> <a id='n34' href='#n34'>34</a> <a id='n35' href='#n35'>35</a> <a id='n36' href='#n36'>36</a> <a id='n37' href='#n37'>37</a> <a id='n38' href='#n38'>38</a> <a id='n39' href='#n39'>39</a> <a id='n40' href='#n40'>40</a> <a id='n41' href='#n41'>41</a> <a id='n42' href='#n42'>42</a> <a id='n43' href='#n43'>43</a> <a id='n44' href='#n44'>44</a> <a id='n45' href='#n45'>45</a> <a id='n46' href='#n46'>46</a> <a id='n47' href='#n47'>47</a> <a id='n48' href='#n48'>48</a> <a id='n49' href='#n49'>49</a> <a id='n50' href='#n50'>50</a> <a id='n51' href='#n51'>51</a> <a id='n52' href='#n52'>52</a> <a id='n53' href='#n53'>53</a> <a id='n54' href='#n54'>54</a> <a id='n55' href='#n55'>55</a> <a id='n56' href='#n56'>56</a> <a id='n57' href='#n57'>57</a> <a id='n58' href='#n58'>58</a> <a id='n59' href='#n59'>59</a> <a id='n60' href='#n60'>60</a> <a id='n61' href='#n61'>61</a> <a id='n62' href='#n62'>62</a> <a id='n63' href='#n63'>63</a> <a id='n64' href='#n64'>64</a> <a id='n65' href='#n65'>65</a> <a id='n66' href='#n66'>66</a> <a id='n67' href='#n67'>67</a> <a id='n68' href='#n68'>68</a> <a id='n69' href='#n69'>69</a> <a id='n70' href='#n70'>70</a> <a id='n71' href='#n71'>71</a> <a id='n72' href='#n72'>72</a> <a id='n73' href='#n73'>73</a> <a id='n74' href='#n74'>74</a> <a id='n75' href='#n75'>75</a> <a id='n76' href='#n76'>76</a> <a id='n77' href='#n77'>77</a> <a id='n78' href='#n78'>78</a> <a id='n79' href='#n79'>79</a> <a id='n80' href='#n80'>80</a> <a id='n81' href='#n81'>81</a> <a id='n82' href='#n82'>82</a> <a id='n83' href='#n83'>83</a> <a id='n84' href='#n84'>84</a> <a id='n85' href='#n85'>85</a> <a id='n86' href='#n86'>86</a> <a id='n87' href='#n87'>87</a> <a id='n88' href='#n88'>88</a> <a id='n89' href='#n89'>89</a> <a id='n90' href='#n90'>90</a> <a id='n91' href='#n91'>91</a> <a id='n92' href='#n92'>92</a> <a id='n93' href='#n93'>93</a> <a id='n94' href='#n94'>94</a> <a id='n95' href='#n95'>95</a> <a id='n96' href='#n96'>96</a> <a id='n97' href='#n97'>97</a> <a id='n98' href='#n98'>98</a> <a id='n99' href='#n99'>99</a> <a id='n100' href='#n100'>100</a> <a id='n101' href='#n101'>101</a> <a id='n102' href='#n102'>102</a> <a id='n103' href='#n103'>103</a> <a id='n104' href='#n104'>104</a> <a id='n105' href='#n105'>105</a> <a id='n106' href='#n106'>106</a> <a id='n107' href='#n107'>107</a> <a id='n108' href='#n108'>108</a> <a id='n109' href='#n109'>109</a> <a id='n110' href='#n110'>110</a> <a id='n111' href='#n111'>111</a> <a id='n112' href='#n112'>112</a> <a id='n113' href='#n113'>113</a> <a id='n114' href='#n114'>114</a> <a id='n115' href='#n115'>115</a> <a id='n116' href='#n116'>116</a> <a id='n117' href='#n117'>117</a> <a id='n118' href='#n118'>118</a> <a id='n119' href='#n119'>119</a> <a id='n120' href='#n120'>120</a> <a id='n121' href='#n121'>121</a> <a id='n122' href='#n122'>122</a> <a id='n123' href='#n123'>123</a> <a id='n124' href='#n124'>124</a> <a id='n125' href='#n125'>125</a> <a id='n126' href='#n126'>126</a> <a id='n127' href='#n127'>127</a> <a id='n128' href='#n128'>128</a> <a id='n129' href='#n129'>129</a> <a id='n130' href='#n130'>130</a> <a id='n131' href='#n131'>131</a> <a id='n132' href='#n132'>132</a> <a id='n133' href='#n133'>133</a> <a id='n134' href='#n134'>134</a> <a id='n135' href='#n135'>135</a> <a id='n136' href='#n136'>136</a> <a id='n137' href='#n137'>137</a> <a id='n138' href='#n138'>138</a> <a id='n139' href='#n139'>139</a> <a id='n140' href='#n140'>140</a> <a id='n141' href='#n141'>141</a> <a id='n142' href='#n142'>142</a> <a id='n143' href='#n143'>143</a> <a id='n144' href='#n144'>144</a> <a id='n145' href='#n145'>145</a> <a id='n146' href='#n146'>146</a> <a id='n147' href='#n147'>147</a> <a id='n148' href='#n148'>148</a> <a id='n149' href='#n149'>149</a> <a id='n150' href='#n150'>150</a> <a id='n151' href='#n151'>151</a> <a id='n152' href='#n152'>152</a> <a id='n153' href='#n153'>153</a> <a id='n154' href='#n154'>154</a> <a id='n155' href='#n155'>155</a> <a id='n156' href='#n156'>156</a> <a id='n157' href='#n157'>157</a> <a id='n158' href='#n158'>158</a> <a id='n159' href='#n159'>159</a> <a id='n160' href='#n160'>160</a> <a id='n161' href='#n161'>161</a> <a id='n162' href='#n162'>162</a> <a id='n163' href='#n163'>163</a> <a id='n164' href='#n164'>164</a> <a id='n165' href='#n165'>165</a> <a id='n166' href='#n166'>166</a> <a id='n167' href='#n167'>167</a> <a id='n168' href='#n168'>168</a> <a id='n169' href='#n169'>169</a> <a id='n170' href='#n170'>170</a> <a id='n171' href='#n171'>171</a> <a id='n172' href='#n172'>172</a> <a id='n173' href='#n173'>173</a> <a id='n174' href='#n174'>174</a> <a id='n175' href='#n175'>175</a> <a id='n176' href='#n176'>176</a> <a id='n177' href='#n177'>177</a> <a id='n178' href='#n178'>178</a> <a id='n179' href='#n179'>179</a> <a id='n180' href='#n180'>180</a> <a id='n181' href='#n181'>181</a> <a id='n182' href='#n182'>182</a> <a id='n183' href='#n183'>183</a> <a id='n184' href='#n184'>184</a> <a id='n185' href='#n185'>185</a> <a id='n186' href='#n186'>186</a> <a id='n187' href='#n187'>187</a> <a id='n188' href='#n188'>188</a> <a id='n189' href='#n189'>189</a> <a id='n190' href='#n190'>190</a> <a id='n191' href='#n191'>191</a> <a id='n192' href='#n192'>192</a> <a id='n193' href='#n193'>193</a> <a id='n194' href='#n194'>194</a> <a id='n195' href='#n195'>195</a> <a id='n196' href='#n196'>196</a> <a id='n197' href='#n197'>197</a> <a id='n198' href='#n198'>198</a> <a id='n199' href='#n199'>199</a> <a id='n200' href='#n200'>200</a> <a id='n201' href='#n201'>201</a> </pre></td> <td class='lines'><pre><code><span class="hl kwa">package</span> partition_table_sun<span class="hl opt">;</span> <span class="hl slc"># $Id$</span> <span class="hl kwa">use</span> diagnostics<span class="hl opt">;</span> <span class="hl kwa">use</span> strict<span class="hl opt">;</span> <span class="hl kwa">use</span> vars <span class="hl str">qw(</span><span class="hl ipl">@ISA</span><span class="hl str">)</span><span class="hl opt">;</span> <span class="hl kwb">@ISA</span> <span class="hl opt">=</span> <span class="hl str">qw(partition_table_raw)</span><span class="hl opt">;</span> <span class="hl kwa">use</span> common<span class="hl opt">;</span> <span class="hl kwa">use</span> partition_table_raw<span class="hl opt">;</span> <span class="hl kwa">use</span> partition_table<span class="hl opt">;</span> <span class="hl kwa">use</span> c<span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$main_format, $main_fields</span><span class="hl opt">) =</span> list2kv<span class="hl opt">(</span> a128 <span class="hl opt">=></span> <span class="hl str">'info'</span><span class="hl opt">,</span> a14 <span class="hl opt">=></span> <span class="hl str">'spare0'</span><span class="hl opt">,</span> a32 <span class="hl opt">=></span> <span class="hl str">'infos'</span><span class="hl opt">,</span> a246 <span class="hl opt">=></span> <span class="hl str">'spare1'</span><span class="hl opt">,</span> n <span class="hl opt">=></span> <span class="hl str">'rspeed'</span><span class="hl opt">,</span> n <span class="hl opt">=></span> <span class="hl str">'pcylcount'</span><span class="hl opt">,</span> n <span class="hl opt">=></span> <span class="hl str">'sparecyl'</span><span class="hl opt">,</span> a4 <span class="hl opt">=></span> <span class="hl str">'spare2'</span><span class="hl opt">,</span> n <span class="hl opt">=></span> <span class="hl str">'ilfact'</span><span class="hl opt">,</span> n <span class="hl opt">=></span> <span class="hl str">'ncyl'</span><span class="hl opt">,</span> n <span class="hl opt">=></span> <span class="hl str">'nacyl'</span><span class="hl opt">,</span> n <span class="hl opt">=></span> <span class="hl str">'ntrks'</span><span class="hl opt">,</span> n <span class="hl opt">=></span> <span class="hl str">'nsect'</span><span class="hl opt">,</span> a4 <span class="hl opt">=></span> <span class="hl str">'spare3'</span><span class="hl opt">,</span> a64 <span class="hl opt">=></span> <span class="hl str">'partitions'</span><span class="hl opt">,</span> n <span class="hl opt">=></span> <span class="hl str">'magic'</span><span class="hl opt">,</span> n <span class="hl opt">=></span> <span class="hl str">'csum'</span><span class="hl opt">,</span> <span class="hl opt">);</span> <span class="hl kwb">$main_format</span> <span class="hl opt">=</span> <span class="hl kwc">join</span> <span class="hl str">''</span><span class="hl opt">,</span> <span class="hl kwb">@$main_format</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$fields1, $fields2</span><span class="hl opt">) = ([</span> <span class="hl str">qw(type flags)</span> <span class="hl opt">], [</span> <span class="hl str">qw(start_cylinder size)</span> <span class="hl opt">]);</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$format1, $format2</span><span class="hl opt">) = (</span><span class="hl str">"xCxC"</span><span class="hl opt">,</span> <span class="hl str">"N2"</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$size1, $size2</span><span class="hl opt">) =</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> psizeof<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) } (</span><span class="hl kwb">$format1, $format2</span><span class="hl opt">);</span> <span class="hl kwc">my</span> <span class="hl kwb">$magic</span> <span class="hl opt">=</span> <span class="hl num">0xDABE</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$nb_primary</span> <span class="hl opt">=</span> <span class="hl num">8</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$offset</span> <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwa">sub</span> adjustStart<span class="hl opt">(</span><span class="hl kwb">$$</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$hd, $part</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$end</span> <span class="hl opt">=</span> <span class="hl kwb">$part</span><span class="hl opt">->{</span>start<span class="hl opt">} +</span> <span class="hl kwb">$part</span><span class="hl opt">->{</span>size<span class="hl opt">};</span> <span class="hl slc">#- since partition must always start on cylinders boundaries on sparc,</span> <span class="hl slc">#- note that if start sector is on the first cylinder, it is adjusted</span> <span class="hl slc">#- to 0 and it is valid, cylinder 0 bug is from bad define for sparc</span> <span class="hl slc">#- compilation of mke2fs combined with a blind kernel...</span> <span class="hl kwb">$part</span><span class="hl opt">->{</span>start<span class="hl opt">} =</span> round_down<span class="hl opt">(</span><span class="hl kwb">$part</span><span class="hl opt">->{</span>start<span class="hl opt">},</span> <span class="hl kwb">$hd</span><span class="hl opt">-></span><span class="hl kwd">cylinder_size</span><span class="hl opt">());</span> <span class="hl kwb">$part</span><span class="hl opt">->{</span>size<span class="hl opt">} =</span> <span class="hl kwb">$end</span> <span class="hl opt">-</span> <span class="hl kwb">$part</span><span class="hl opt">->{</span>start<span class="hl opt">};</span> <span class="hl kwb">$part</span><span class="hl opt">->{</span>size<span class="hl opt">} =</span> <span class="hl kwb">$hd</span><span class="hl opt">-></span><span class="hl kwd">cylinder_size</span><span class="hl opt">()</span> <span class="hl kwa">if</span> <span class="hl kwb">$part</span><span class="hl opt">->{</span>size<span class="hl opt">} <=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> adjustEnd<span class="hl opt">(</span><span class="hl kwb">$$</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$hd, $part</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$end</span> <span class="hl opt">=</span> <span class="hl kwb">$part</span><span class="hl opt">->{</span>start<span class="hl opt">} +</span> <span class="hl kwb">$part</span><span class="hl opt">->{</span>size<span class="hl opt">};</span> <span class="hl kwc">my</span> <span class="hl kwb">$end2</span> <span class="hl opt">=</span> round_up<span class="hl opt">(</span><span class="hl kwb">$end, $hd</span><span class="hl opt">-></span><span class="hl kwd">cylinder_size</span><span class="hl opt">());</span> <span class="hl kwb">$end2</span> <span class="hl opt">=</span> <span class="hl kwb">$hd</span><span class="hl opt">->{</span>geom<span class="hl opt">}{</span>cylinders<span class="hl opt">} *</span> <span class="hl kwb">$hd</span><span class="hl opt">-></span><span class="hl kwd">cylinder_size</span><span class="hl opt">()</span> <span class="hl kwa">if</span> <span class="hl kwb">$end2</span> <span class="hl opt">></span> <span class="hl kwb">$hd</span><span class="hl opt">->{</span>geom<span class="hl opt">}{</span>cylinders<span class="hl opt">} *</span> <span class="hl kwb">$hd</span><span class="hl opt">-></span><span class="hl kwd">cylinder_size</span><span class="hl opt">();</span> <span class="hl kwb">$part</span><span class="hl opt">->{</span>size<span class="hl opt">} =</span> <span class="hl kwb">$end2</span> <span class="hl opt">-</span> <span class="hl kwb">$part</span><span class="hl opt">->{</span>start<span class="hl opt">};</span> <span class="hl opt">}</span> <span class="hl slc">#- compute crc checksum used for Sun Label partition, expect</span> <span class="hl slc">#- $tmp to be the 512 bytes buffer to be read/written to MBR.</span> <span class="hl kwa">sub</span> compute_crc<span class="hl opt">($) {</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$tmp</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">@l2b</span> <span class="hl opt">=</span> <span class="hl kwc">unpack</span> <span class="hl str">"n256"</span><span class="hl opt">,</span> <span class="hl kwb">$tmp</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$crc</span> <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$crc</span> <span class="hl opt">^=</span> <span class="hl kwb">$_</span> <span class="hl opt">}</span> <span class="hl kwb">@l2b</span><span class="hl opt">;</span> <span class="hl kwb">$crc</span><span class="hl opt">;</span> <span class="hl opt">}</span> <span class="hl kwa">sub</span> <span class="hl kwc">read</span><span class="hl opt">(</span><span class="hl kwb">$$</span><span class="hl opt">) {</span> <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$hd, $sector</span><span class="hl opt">) =</span> <span class="hl kwb">@_</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">$tmp</span><span class="hl opt">;</span> <span class="hl kwc">local</span> <span class="hl opt">*</span>F<span class="hl opt">;</span> partition_table_raw<span class="hl opt">::</span>openit<span class="hl opt">(</span><span class="hl kwb">$hd,</span> <span class="hl opt">*</span>F<span class="hl opt">)</span> <span class="hl kwc">or die</span> <span class="hl str">"failed to open device"</span><span class="hl opt">;</span> c<span class="hl opt">::</span>lseek_sector<span class="hl opt">(</span><span class="hl kwc">fileno</span><span class="hl opt">(</span>F<span class="hl opt">),</span> <span class="hl kwb">$sector, $offset</span><span class="hl opt">)</span> <span class="hl kwc">or die</span> <span class="hl str">"reading of partition in sector</span> <span class="hl ipl">$sector</span> <span class="hl str">failed"</span><span class="hl opt">;</span> <span class="hl kwc">sysread</span> F<span class="hl opt">,</span> <span class="hl kwb">$tmp,</span> psizeof<span class="hl opt">(</span><span class="hl kwb">$main_format</span><span class="hl opt">)</span> <span class="hl kwc">or die</span> <span class="hl str">"error while reading partition table in sector</span> <span class="hl ipl">$sector</span><span class="hl str">"</span><span class="hl opt">;</span> <span class="hl kwc">my</span> <span class="hl kwb">%info</span><span class="hl opt">;</span> <span class="hl kwb">@info</span><span class="hl opt">{</span><span class="hl kwb">@$main_fields</span><span class="hl opt">} =</span> <span class="hl kwc">unpack</span> <span class="hl kwb">$main_format, $tmp</span><span class="hl opt">;</span> <span class="hl slc">#- check magic number</span> <span class="hl kwb">$info</span><span class="hl opt">{</span>magic<span class="hl opt">} ==</span> <span class="hl kwb">$magic</span> <span class="hl kwc">or die</span> <span class="hl str">"bad magic number"</span><span class="hl opt">;</span> <span class="hl slc">#- check crc, csum contains the crc so result should be 0.</span> compute_crc<span class="hl opt">(</span><span class="hl kwb">$tmp</span><span class="hl opt">) ==</span> <span class="hl num">0</span> <span class="hl kwc">or die</span> <span class="hl str">"bad checksum"</span><span class="hl opt">;</span>