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&amp;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&amp;id=0f60a5cae98c14c9ac9167178395d542ab72d249'>tree</a><a href='/software/drakx/commit/perl-install/partition_table_sun.pm?h=16.21&amp;id=0f60a5cae98c14c9ac9167178395d542ab72d249'>commit</a><a href='/software/drakx/diff/perl-install/partition_table_sun.pm?h=16.21&amp;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&amp;id=0f60a5cae98c14c9ac9167178395d542ab72d249'>root</a>/<a href='/software/drakx/tree/perl-install?h=16.21&amp;id=0f60a5cae98c14c9ac9167178395d542ab72d249'>perl-install</a>/<a href='/software/drakx/tree/perl-install/partition_table_sun.pm?h=16.21&amp;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&amp;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">&#64;ISA</span><span class="hl str">)</span><span class="hl opt">;</span>

<span class="hl kwb">&#64;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">=&gt;</span> <span class="hl str">&apos;info&apos;</span><span class="hl opt">,</span>
  a14   <span class="hl opt">=&gt;</span> <span class="hl str">&apos;spare0&apos;</span><span class="hl opt">,</span>
  a32   <span class="hl opt">=&gt;</span> <span class="hl str">&apos;infos&apos;</span><span class="hl opt">,</span>
  a246  <span class="hl opt">=&gt;</span> <span class="hl str">&apos;spare1&apos;</span><span class="hl opt">,</span>
  n     <span class="hl opt">=&gt;</span> <span class="hl str">&apos;rspeed&apos;</span><span class="hl opt">,</span>
  n     <span class="hl opt">=&gt;</span> <span class="hl str">&apos;pcylcount&apos;</span><span class="hl opt">,</span>
  n     <span class="hl opt">=&gt;</span> <span class="hl str">&apos;sparecyl&apos;</span><span class="hl opt">,</span>
  a4    <span class="hl opt">=&gt;</span> <span class="hl str">&apos;spare2&apos;</span><span class="hl opt">,</span>
  n     <span class="hl opt">=&gt;</span> <span class="hl str">&apos;ilfact&apos;</span><span class="hl opt">,</span>
  n     <span class="hl opt">=&gt;</span> <span class="hl str">&apos;ncyl&apos;</span><span class="hl opt">,</span>
  n     <span class="hl opt">=&gt;</span> <span class="hl str">&apos;nacyl&apos;</span><span class="hl opt">,</span>
  n     <span class="hl opt">=&gt;</span> <span class="hl str">&apos;ntrks&apos;</span><span class="hl opt">,</span>
  n     <span class="hl opt">=&gt;</span> <span class="hl str">&apos;nsect&apos;</span><span class="hl opt">,</span>
  a4    <span class="hl opt">=&gt;</span> <span class="hl str">&apos;spare3&apos;</span><span class="hl opt">,</span>
  a64   <span class="hl opt">=&gt;</span> <span class="hl str">&apos;partitions&apos;</span><span class="hl opt">,</span>
  n     <span class="hl opt">=&gt;</span> <span class="hl str">&apos;magic&apos;</span><span class="hl opt">,</span>
  n     <span class="hl opt">=&gt;</span> <span class="hl str">&apos;csum&apos;</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">&apos;&apos;</span><span class="hl opt">,</span> <span class="hl kwb">&#64;$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">&quot;xCxC&quot;</span><span class="hl opt">,</span> <span class="hl str">&quot;N2&quot;</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">&#64;_</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">-&gt;{</span>start<span class="hl opt">} +</span> <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</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">-&gt;{</span>start<span class="hl opt">} =</span> round_down<span class="hl opt">(</span><span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>start<span class="hl opt">},</span> <span class="hl kwb">$hd</span><span class="hl opt">-&gt;</span><span class="hl kwd">cylinder_size</span><span class="hl opt">());</span>
    <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</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">-&gt;{</span>start<span class="hl opt">};</span>
    <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} =</span> <span class="hl kwb">$hd</span><span class="hl opt">-&gt;</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">-&gt;{</span>size<span class="hl opt">} &lt;=</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">&#64;_</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">-&gt;{</span>start<span class="hl opt">} +</span> <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</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">-&gt;</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">-&gt;{</span>geom<span class="hl opt">}{</span>cylinders<span class="hl opt">} *</span> <span class="hl kwb">$hd</span><span class="hl opt">-&gt;</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">&gt;</span> <span class="hl kwb">$hd</span><span class="hl opt">-&gt;{</span>geom<span class="hl opt">}{</span>cylinders<span class="hl opt">} *</span> <span class="hl kwb">$hd</span><span class="hl opt">-&gt;</span><span class="hl kwd">cylinder_size</span><span class="hl opt">();</span>
    <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</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">-&gt;{</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">&#64;_</span><span class="hl opt">;</span>
    <span class="hl kwc">my</span> <span class="hl kwb">&#64;l2b</span> <span class="hl opt">=</span> <span class="hl kwc">unpack</span> <span class="hl str">&quot;n256&quot;</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">&#64;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">&#64;_</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">&quot;failed to open device&quot;</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">&quot;reading of partition in sector</span> <span class="hl ipl">$sector</span> <span class="hl str">failed&quot;</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">&quot;error while reading partition table in sector</span> <span class="hl ipl">$sector</span><span class="hl str">&quot;</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">&#64;info</span><span class="hl opt">{</span><span class="hl kwb">&#64;$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">&quot;bad magic number&quot;</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">&quot;bad checksum&quot;</span><span class="hl opt">;</span>