<feed xmlns='http://www.w3.org/2005/Atom'>
<title>drakx/kernel, branch 16.10</title>
<subtitle>Mageia Installer and base platform for many utilities</subtitle>
<link rel='alternate' type='text/html' href='https://gitweb.mageia.org/software/drakx/'/>
<entry>
<title>include "sdhci-acpi" for eMMC (mga#11812)</title>
<updated>2013-12-02T06:16:38+00:00</updated>
<author>
<name>Thierry Vignaud</name>
<email>thierry.vignaud@gmail.com</email>
</author>
<published>2013-12-02T06:16:38+00:00</published>
<link rel='alternate' type='text/html' href='https://gitweb.mageia.org/software/drakx/commit/?id=bc0277714b36ec3207002a22e009317dae65c16e'/>
<id>bc0277714b36ec3207002a22e009317dae65c16e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>images/kernel: Pass the modules we need to be in modules.alias through to dracut.</title>
<updated>2013-11-13T11:35:41+00:00</updated>
<author>
<name>Colin Guthrie</name>
<email>colin@mageia.org</email>
</author>
<published>2013-11-13T10:43:50+00:00</published>
<link rel='alternate' type='text/html' href='https://gitweb.mageia.org/software/drakx/commit/?id=79b08a48f3cff888454ebc4a71db4a3e92d992fd'/>
<id>79b08a48f3cff888454ebc4a71db4a3e92d992fd</id>
<content type='text'>
The installer needs to have the modules.alias information for more kernel
modules than are actually included. In order to do this we need to use
and environment variable as there is no sensible way to do this via dracut
command line arguments.

The mgainstaller dracut module will need updating accordingly.

This should solve the problem where Sound Cards are shown as
'not configured' at the end of the install.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The installer needs to have the modules.alias information for more kernel
modules than are actually included. In order to do this we need to use
and environment variable as there is no sensible way to do this via dracut
command line arguments.

The mgainstaller dracut module will need updating accordingly.

This should solve the problem where Sound Cards are shown as
'not configured' at the end of the install.
</pre>
</div>
</content>
</entry>
<entry>
<title>images/kernel: Ensure the previously hand-picked modules are included in the new dracut-based initrd.</title>
<updated>2013-11-02T11:47:27+00:00</updated>
<author>
<name>Colin Guthrie</name>
<email>colin@mageia.org</email>
</author>
<published>2013-11-01T10:35:03+00:00</published>
<link rel='alternate' type='text/html' href='https://gitweb.mageia.org/software/drakx/commit/?id=284ba5ab6fc742dd3f7a5a4705207f9b2d4de5be'/>
<id>284ba5ab6fc742dd3f7a5a4705207f9b2d4de5be</id>
<content type='text'>
This removes functions no longer called and adds a new one which will
simply list the desired modules and pass them on the dracut command line.

This should mean we have the same modules as before (at least) which should
mean less regressions.

This does increase the size of the initrd back up quite a lot (as expected)
so we may want to look at optimising other areas to bring it back down a bit
again.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This removes functions no longer called and adds a new one which will
simply list the desired modules and pass them on the dracut command line.

This should mean we have the same modules as before (at least) which should
mean less regressions.

This does increase the size of the initrd back up quite a lot (as expected)
so we may want to look at optimising other areas to bring it back down a bit
again.
</pre>
</div>
</content>
</entry>
<entry>
<title>sync with kernel-3.12</title>
<updated>2013-10-14T11:18:40+00:00</updated>
<author>
<name>Thierry Vignaud</name>
<email>thierry.vignaud@gmail.com</email>
</author>
<published>2013-10-14T11:17:24+00:00</published>
<link rel='alternate' type='text/html' href='https://gitweb.mageia.org/software/drakx/commit/?id=17c47aa006c9f4e140c1491879ee3cf7fc6086e4'/>
<id>17c47aa006c9f4e140c1491879ee3cf7fc6086e4</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>sync with kernel-3.11</title>
<updated>2013-10-10T13:46:11+00:00</updated>
<author>
<name>Thierry Vignaud</name>
<email>thierry.vignaud@gmail.com</email>
</author>
<published>2013-10-10T13:46:11+00:00</published>
<link rel='alternate' type='text/html' href='https://gitweb.mageia.org/software/drakx/commit/?id=397b837ec477778869c04581b1ac0fe6a3d50b06'/>
<id>397b837ec477778869c04581b1ac0fe6a3d50b06</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>fix stupid typo</title>
<updated>2013-10-10T12:51:34+00:00</updated>
<author>
<name>Thierry Vignaud</name>
<email>thierry.vignaud@gmail.com</email>
</author>
<published>2013-10-10T12:51:34+00:00</published>
<link rel='alternate' type='text/html' href='https://gitweb.mageia.org/software/drakx/commit/?id=a0f161d08a9be7b99f8b2c011cc0969a0a6ad762'/>
<id>a0f161d08a9be7b99f8b2c011cc0969a0a6ad762</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>partial sync with kernel-3.11 regarding USB:</title>
<updated>2013-10-10T12:43:14+00:00</updated>
<author>
<name>Thierry Vignaud</name>
<email>thierry.vignaud@gmail.com</email>
</author>
<published>2013-10-10T12:41:26+00:00</published>
<link rel='alternate' type='text/html' href='https://gitweb.mageia.org/software/drakx/commit/?id=3466cc7f482b6b09ea124c6146e4fbead2c6d468'/>
<id>3466cc7f482b6b09ea124c6146e4fbead2c6d468</id>
<content type='text'>
include ehci-tegra, ohci-pci ohci-platform fusbh200-hcd &amp; usb_common
(might fix mga#11377)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
include ehci-tegra, ohci-pci ohci-platform fusbh200-hcd &amp; usb_common
(might fix mga#11377)
</pre>
</div>
</content>
</entry>
<entry>
<title>- detect wifi cards managed by ssb driver (mga#9378)</title>
<updated>2013-07-29T10:26:59+00:00</updated>
<author>
<name>Thomas Backlund</name>
<email>tmb@mageia.org</email>
</author>
<published>2013-07-29T10:26:59+00:00</published>
<link rel='alternate' type='text/html' href='https://gitweb.mageia.org/software/drakx/commit/?id=ec01542d1f6cf3b9a5c160884e3fb5aabb935a04'/>
<id>ec01542d1f6cf3b9a5c160884e3fb5aabb935a04</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>sync with kernel-3.10</title>
<updated>2013-07-15T23:11:58+00:00</updated>
<author>
<name>Thierry Vignaud</name>
<email>tv@mageia.org</email>
</author>
<published>2013-07-15T23:11:58+00:00</published>
<link rel='alternate' type='text/html' href='https://gitweb.mageia.org/software/drakx/commit/?id=fd5f1b8d1083a2a488f6fba2571e26ff2d20855e'/>
<id>fd5f1b8d1083a2a488f6fba2571e26ff2d20855e</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>detect wifi cards managed by bcma driver (mga#9378)</title>
<updated>2013-07-13T18:05:19+00:00</updated>
<author>
<name>Thierry Vignaud</name>
<email>tv@mageia.org</email>
</author>
<published>2013-07-13T18:05:19+00:00</published>
<link rel='alternate' type='text/html' href='https://gitweb.mageia.org/software/drakx/commit/?id=13c22f8a6ac48eff61e0a649144ef057f48551f6'/>
<id>13c22f8a6ac48eff61e0a649144ef057f48551f6</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
d='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>
<a id='n202' href='#n202'>202</a>
<a id='n203' href='#n203'>203</a>
<a id='n204' href='#n204'>204</a>
<a id='n205' href='#n205'>205</a>
<a id='n206' href='#n206'>206</a>
<a id='n207' href='#n207'>207</a>
<a id='n208' href='#n208'>208</a>
<a id='n209' href='#n209'>209</a>
<a id='n210' href='#n210'>210</a>
<a id='n211' href='#n211'>211</a>
<a id='n212' href='#n212'>212</a>
<a id='n213' href='#n213'>213</a>
<a id='n214' href='#n214'>214</a>
<a id='n215' href='#n215'>215</a>
<a id='n216' href='#n216'>216</a>
<a id='n217' href='#n217'>217</a>
<a id='n218' href='#n218'>218</a>
<a id='n219' href='#n219'>219</a>
<a id='n220' href='#n220'>220</a>
<a id='n221' href='#n221'>221</a>
<a id='n222' href='#n222'>222</a>
<a id='n223' href='#n223'>223</a>
<a id='n224' href='#n224'>224</a>
<a id='n225' href='#n225'>225</a>
<a id='n226' href='#n226'>226</a>
<a id='n227' href='#n227'>227</a>
<a id='n228' href='#n228'>228</a>
<a id='n229' href='#n229'>229</a>
<a id='n230' href='#n230'>230</a>
<a id='n231' href='#n231'>231</a>
<a id='n232' href='#n232'>232</a>
<a id='n233' href='#n233'>233</a>
<a id='n234' href='#n234'>234</a>
<a id='n235' href='#n235'>235</a>
<a id='n236' href='#n236'>236</a>
<a id='n237' href='#n237'>237</a>
<a id='n238' href='#n238'>238</a>
<a id='n239' href='#n239'>239</a>
<a id='n240' href='#n240'>240</a>
<a id='n241' href='#n241'>241</a>
<a id='n242' href='#n242'>242</a>
<a id='n243' href='#n243'>243</a>
<a id='n244' href='#n244'>244</a>
<a id='n245' href='#n245'>245</a>
<a id='n246' href='#n246'>246</a>
<a id='n247' href='#n247'>247</a>
<a id='n248' href='#n248'>248</a>
<a id='n249' href='#n249'>249</a>
<a id='n250' href='#n250'>250</a>
<a id='n251' href='#n251'>251</a>
<a id='n252' href='#n252'>252</a>
<a id='n253' href='#n253'>253</a>
<a id='n254' href='#n254'>254</a>
<a id='n255' href='#n255'>255</a>
<a id='n256' href='#n256'>256</a>
<a id='n257' href='#n257'>257</a>
<a id='n258' href='#n258'>258</a>
<a id='n259' href='#n259'>259</a>
<a id='n260' href='#n260'>260</a>
<a id='n261' href='#n261'>261</a>
<a id='n262' href='#n262'>262</a>
<a id='n263' href='#n263'>263</a>
<a id='n264' href='#n264'>264</a>
<a id='n265' href='#n265'>265</a>
<a id='n266' href='#n266'>266</a>
<a id='n267' href='#n267'>267</a>
<a id='n268' href='#n268'>268</a>
<a id='n269' href='#n269'>269</a>
<a id='n270' href='#n270'>270</a>
<a id='n271' href='#n271'>271</a>
<a id='n272' href='#n272'>272</a>
<a id='n273' href='#n273'>273</a>
<a id='n274' href='#n274'>274</a>
<a id='n275' href='#n275'>275</a>
<a id='n276' href='#n276'>276</a>
<a id='n277' href='#n277'>277</a>
<a id='n278' href='#n278'>278</a>
<a id='n279' href='#n279'>279</a>
<a id='n280' href='#n280'>280</a>
<a id='n281' href='#n281'>281</a>
<a id='n282' href='#n282'>282</a>
<a id='n283' href='#n283'>283</a>
<a id='n284' href='#n284'>284</a>
<a id='n285' href='#n285'>285</a>
<a id='n286' href='#n286'>286</a>
<a id='n287' href='#n287'>287</a>
<a id='n288' href='#n288'>288</a>
<a id='n289' href='#n289'>289</a>
<a id='n290' href='#n290'>290</a>
<a id='n291' href='#n291'>291</a>
<a id='n292' href='#n292'>292</a>
<a id='n293' href='#n293'>293</a>
<a id='n294' href='#n294'>294</a>
<a id='n295' href='#n295'>295</a>
<a id='n296' href='#n296'>296</a>
<a id='n297' href='#n297'>297</a>
<a id='n298' href='#n298'>298</a>
<a id='n299' href='#n299'>299</a>
<a id='n300' href='#n300'>300</a>
<a id='n301' href='#n301'>301</a>
<a id='n302' href='#n302'>302</a>
<a id='n303' href='#n303'>303</a>
<a id='n304' href='#n304'>304</a>
<a id='n305' href='#n305'>305</a>
<a id='n306' href='#n306'>306</a>
<a id='n307' href='#n307'>307</a>
<a id='n308' href='#n308'>308</a>
<a id='n309' href='#n309'>309</a>
<a id='n310' href='#n310'>310</a>
<a id='n311' href='#n311'>311</a>
<a id='n312' href='#n312'>312</a>
<a id='n313' href='#n313'>313</a>
<a id='n314' href='#n314'>314</a>
<a id='n315' href='#n315'>315</a>
<a id='n316' href='#n316'>316</a>
<a id='n317' href='#n317'>317</a>
<a id='n318' href='#n318'>318</a>
<a id='n319' href='#n319'>319</a>
<a id='n320' href='#n320'>320</a>
<a id='n321' href='#n321'>321</a>
<a id='n322' href='#n322'>322</a>
<a id='n323' href='#n323'>323</a>
<a id='n324' href='#n324'>324</a>
<a id='n325' href='#n325'>325</a>
<a id='n326' href='#n326'>326</a>
<a id='n327' href='#n327'>327</a>
<a id='n328' href='#n328'>328</a>
<a id='n329' href='#n329'>329</a>
<a id='n330' href='#n330'>330</a>
<a id='n331' href='#n331'>331</a>
<a id='n332' href='#n332'>332</a>
<a id='n333' href='#n333'>333</a>
<a id='n334' href='#n334'>334</a>
<a id='n335' href='#n335'>335</a>
<a id='n336' href='#n336'>336</a>
<a id='n337' href='#n337'>337</a>
<a id='n338' href='#n338'>338</a>
<a id='n339' href='#n339'>339</a>
<a id='n340' href='#n340'>340</a>
<a id='n341' href='#n341'>341</a>
<a id='n342' href='#n342'>342</a>
<a id='n343' href='#n343'>343</a>
<a id='n344' href='#n344'>344</a>
<a id='n345' href='#n345'>345</a>
<a id='n346' href='#n346'>346</a>
<a id='n347' href='#n347'>347</a>
<a id='n348' href='#n348'>348</a>
<a id='n349' href='#n349'>349</a>
<a id='n350' href='#n350'>350</a>
<a id='n351' href='#n351'>351</a>
<a id='n352' href='#n352'>352</a>
<a id='n353' href='#n353'>353</a>
<a id='n354' href='#n354'>354</a>
<a id='n355' href='#n355'>355</a>
<a id='n356' href='#n356'>356</a>
<a id='n357' href='#n357'>357</a>
<a id='n358' href='#n358'>358</a>
<a id='n359' href='#n359'>359</a>
<a id='n360' href='#n360'>360</a>
<a id='n361' href='#n361'>361</a>
<a id='n362' href='#n362'>362</a>
<a id='n363' href='#n363'>363</a>
<a id='n364' href='#n364'>364</a>
<a id='n365' href='#n365'>365</a>
<a id='n366' href='#n366'>366</a>
<a id='n367' href='#n367'>367</a>
<a id='n368' href='#n368'>368</a>
<a id='n369' href='#n369'>369</a>
<a id='n370' href='#n370'>370</a>
<a id='n371' href='#n371'>371</a>
<a id='n372' href='#n372'>372</a>
<a id='n373' href='#n373'>373</a>
<a id='n374' href='#n374'>374</a>
<a id='n375' href='#n375'>375</a>
<a id='n376' href='#n376'>376</a>
<a id='n377' href='#n377'>377</a>
<a id='n378' href='#n378'>378</a>
<a id='n379' href='#n379'>379</a>
<a id='n380' href='#n380'>380</a>
<a id='n381' href='#n381'>381</a>
<a id='n382' href='#n382'>382</a>
<a id='n383' href='#n383'>383</a>
<a id='n384' href='#n384'>384</a>
<a id='n385' href='#n385'>385</a>
<a id='n386' href='#n386'>386</a>
<a id='n387' href='#n387'>387</a>
<a id='n388' href='#n388'>388</a>
<a id='n389' href='#n389'>389</a>
<a id='n390' href='#n390'>390</a>
<a id='n391' href='#n391'>391</a>
<a id='n392' href='#n392'>392</a>
<a id='n393' href='#n393'>393</a>
<a id='n394' href='#n394'>394</a>
<a id='n395' href='#n395'>395</a>
<a id='n396' href='#n396'>396</a>
<a id='n397' href='#n397'>397</a>
<a id='n398' href='#n398'>398</a>
<a id='n399' href='#n399'>399</a>
<a id='n400' href='#n400'>400</a>
<a id='n401' href='#n401'>401</a>
<a id='n402' href='#n402'>402</a>
<a id='n403' href='#n403'>403</a>
<a id='n404' href='#n404'>404</a>
<a id='n405' href='#n405'>405</a>
<a id='n406' href='#n406'>406</a>
<a id='n407' href='#n407'>407</a>
<a id='n408' href='#n408'>408</a>
<a id='n409' href='#n409'>409</a>
<a id='n410' href='#n410'>410</a>
<a id='n411' href='#n411'>411</a>
<a id='n412' href='#n412'>412</a>
<a id='n413' href='#n413'>413</a>
<a id='n414' href='#n414'>414</a>
<a id='n415' href='#n415'>415</a>
<a id='n416' href='#n416'>416</a>
<a id='n417' href='#n417'>417</a>
<a id='n418' href='#n418'>418</a>
<a id='n419' href='#n419'>419</a>
<a id='n420' href='#n420'>420</a>
<a id='n421' href='#n421'>421</a>
<a id='n422' href='#n422'>422</a>
<a id='n423' href='#n423'>423</a>
<a id='n424' href='#n424'>424</a>
<a id='n425' href='#n425'>425</a>
<a id='n426' href='#n426'>426</a>
<a id='n427' href='#n427'>427</a>
<a id='n428' href='#n428'>428</a>
<a id='n429' href='#n429'>429</a>
<a id='n430' href='#n430'>430</a>
<a id='n431' href='#n431'>431</a>
<a id='n432' href='#n432'>432</a>
<a id='n433' href='#n433'>433</a>
<a id='n434' href='#n434'>434</a>
<a id='n435' href='#n435'>435</a>
<a id='n436' href='#n436'>436</a>
<a id='n437' href='#n437'>437</a>
<a id='n438' href='#n438'>438</a>
</pre></td>
<td class='lines'><pre><code><span class="hl kwa">package</span> fsedit<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 slc">#-######################################################################################</span>
<span class="hl slc">#- misc imports</span>
<span class="hl slc">#-######################################################################################</span>
<span class="hl kwa">use</span> common <span class="hl str">qw(:common :constant :functional :file)</span><span class="hl opt">;</span>
<span class="hl kwa">use</span> partition_table <span class="hl str">qw(:types)</span><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> detect_devices<span class="hl opt">;</span>
<span class="hl kwa">use</span> Data<span class="hl opt">::</span>Dumper<span class="hl opt">;</span>
<span class="hl kwa">use</span> fsedit<span class="hl opt">;</span>
<span class="hl kwa">use</span> devices<span class="hl opt">;</span>
<span class="hl kwa">use</span> loopback<span class="hl opt">;</span>
<span class="hl kwa">use</span> <span class="hl kwc">log</span><span class="hl opt">;</span>
<span class="hl kwa">use</span> fs<span class="hl opt">;</span>

<span class="hl slc">#-#####################################################################################</span>
<span class="hl slc">#- Globals</span>
<span class="hl slc">#-#####################################################################################</span>
<span class="hl kwc">my</span> <span class="hl kwb">&#64;suggestions</span> <span class="hl opt">= (</span>
  <span class="hl opt">{</span> mntpoint <span class="hl opt">=&gt;</span> <span class="hl str">&quot;/boot&quot;</span><span class="hl opt">,</span>    size <span class="hl opt">=&gt;</span>  <span class="hl num">16</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span><span class="hl opt">,</span> type <span class="hl opt">=&gt;</span> <span class="hl num">0x83</span><span class="hl opt">,</span> ratio <span class="hl opt">=&gt;</span> <span class="hl num">1</span><span class="hl opt">,</span> maxsize <span class="hl opt">=&gt;</span>  <span class="hl num">30</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span> <span class="hl opt">},</span>
  <span class="hl opt">{</span> mntpoint <span class="hl opt">=&gt;</span> <span class="hl str">&quot;/&quot;</span><span class="hl opt">,</span>        size <span class="hl opt">=&gt;</span>  <span class="hl num">50</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span><span class="hl opt">,</span> type <span class="hl opt">=&gt;</span> <span class="hl num">0x83</span><span class="hl opt">,</span> ratio <span class="hl opt">=&gt;</span> <span class="hl num">1</span><span class="hl opt">,</span> maxsize <span class="hl opt">=&gt;</span> <span class="hl num">300</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span> <span class="hl opt">},</span>
  <span class="hl opt">{</span> mntpoint <span class="hl opt">=&gt;</span> <span class="hl str">&quot;swap&quot;</span><span class="hl opt">,</span>     size <span class="hl opt">=&gt;</span>  <span class="hl num">30</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span><span class="hl opt">,</span> type <span class="hl opt">=&gt;</span> <span class="hl num">0x82</span><span class="hl opt">,</span> ratio <span class="hl opt">=&gt;</span> <span class="hl num">1</span><span class="hl opt">,</span> maxsize <span class="hl opt">=&gt;</span> <span class="hl num">250</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span> <span class="hl opt">},</span>
  <span class="hl opt">{</span> mntpoint <span class="hl opt">=&gt;</span> <span class="hl str">&quot;/usr&quot;</span><span class="hl opt">,</span>     size <span class="hl opt">=&gt;</span> <span class="hl num">200</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span><span class="hl opt">,</span> type <span class="hl opt">=&gt;</span> <span class="hl num">0x83</span><span class="hl opt">,</span> ratio <span class="hl opt">=&gt;</span> <span class="hl num">6</span><span class="hl opt">,</span> maxsize <span class="hl opt">=&gt;</span><span class="hl num">3000</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span> <span class="hl opt">},</span>
  <span class="hl opt">{</span> mntpoint <span class="hl opt">=&gt;</span> <span class="hl str">&quot;/home&quot;</span><span class="hl opt">,</span>    size <span class="hl opt">=&gt;</span>  <span class="hl num">50</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span><span class="hl opt">,</span> type <span class="hl opt">=&gt;</span> <span class="hl num">0x83</span><span class="hl opt">,</span> ratio <span class="hl opt">=&gt;</span> <span class="hl num">3</span> <span class="hl opt">},</span>
  <span class="hl opt">{</span> mntpoint <span class="hl opt">=&gt;</span> <span class="hl str">&quot;/var&quot;</span><span class="hl opt">,</span>     size <span class="hl opt">=&gt;</span> <span class="hl num">200</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span><span class="hl opt">,</span> type <span class="hl opt">=&gt;</span> <span class="hl num">0x83</span><span class="hl opt">,</span> ratio <span class="hl opt">=&gt;</span> <span class="hl num">1</span><span class="hl opt">,</span> maxsize <span class="hl opt">=&gt;</span><span class="hl num">1000</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span> <span class="hl opt">},</span>
  <span class="hl opt">{</span> mntpoint <span class="hl opt">=&gt;</span> <span class="hl str">&quot;/tmp&quot;</span><span class="hl opt">,</span>     size <span class="hl opt">=&gt;</span>  <span class="hl num">50</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span><span class="hl opt">,</span> type <span class="hl opt">=&gt;</span> <span class="hl num">0x83</span><span class="hl opt">,</span> ratio <span class="hl opt">=&gt;</span> <span class="hl num">3</span><span class="hl opt">,</span> maxsize <span class="hl opt">=&gt;</span> <span class="hl num">500</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span> <span class="hl opt">},</span>
<span class="hl opt">);</span>
<span class="hl kwc">my</span> <span class="hl kwb">&#64;suggestions_mntpoints</span> <span class="hl opt">= (</span> <span class="hl str">&quot;/root/&quot;</span><span class="hl opt">,</span> arch<span class="hl opt">() =~</span> <span class="hl kwd">/sparc/</span> ? <span class="hl str">&quot;/mnt/sunos&quot;</span> <span class="hl opt">:</span> <span class="hl str">&quot;/mnt/windows&quot;</span> <span class="hl opt">);</span>

<span class="hl kwc">my</span> <span class="hl kwb">&#64;partitions_signatures</span> <span class="hl opt">= (</span>
    <span class="hl opt">[</span> <span class="hl num">0x83</span><span class="hl opt">,</span> <span class="hl num">0x438</span><span class="hl opt">,</span> <span class="hl str">&quot;</span><span class="hl esc">\x53\xEF</span><span class="hl str">&quot;</span> <span class="hl opt">],</span>
    <span class="hl opt">[</span> <span class="hl num">0x183</span><span class="hl opt">,</span> <span class="hl num">0x10034</span><span class="hl opt">,</span> <span class="hl str">&quot;ReIsErFs&quot;</span> <span class="hl opt">],</span>
    <span class="hl opt">[</span> <span class="hl num">0x82</span><span class="hl opt">,</span> <span class="hl num">4086</span><span class="hl opt">,</span> <span class="hl str">&quot;SWAP-SPACE&quot;</span> <span class="hl opt">],</span>
    <span class="hl opt">[</span> <span class="hl num">0x7</span><span class="hl opt">,</span>  <span class="hl num">0x1FE</span><span class="hl opt">,</span> <span class="hl str">&quot;</span><span class="hl esc">\x55\xAA</span><span class="hl str">&quot;</span><span class="hl opt">,</span> <span class="hl num">0x3</span><span class="hl opt">,</span> <span class="hl str">&quot;NTFS&quot;</span> <span class="hl opt">],</span>
    <span class="hl opt">[</span> <span class="hl num">0xc</span><span class="hl opt">,</span>  <span class="hl num">0x1FE</span><span class="hl opt">,</span> <span class="hl str">&quot;</span><span class="hl esc">\x55\xAA</span><span class="hl str">&quot;</span><span class="hl opt">,</span> <span class="hl num">0x52</span><span class="hl opt">,</span> <span class="hl str">&quot;FAT32&quot;</span> <span class="hl opt">],</span>
arch<span class="hl opt">() !~</span> <span class="hl kwd">/^sparc/</span> ? <span class="hl opt">(</span>
    <span class="hl opt">[</span> <span class="hl num">0x6</span><span class="hl opt">,</span>  <span class="hl num">0x1FE</span><span class="hl opt">,</span> <span class="hl str">&quot;</span><span class="hl esc">\x55\xAA</span><span class="hl str">&quot;</span><span class="hl opt">,</span> <span class="hl num">0x36</span><span class="hl opt">,</span> <span class="hl str">&quot;FAT&quot;</span> <span class="hl opt">],</span>
<span class="hl opt">) : (),</span>
<span class="hl opt">);</span>

<span class="hl kwa">sub</span> typeOfPart <span class="hl opt">{</span> typeFromMagic<span class="hl opt">(</span>devices<span class="hl opt">::</span>make<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]),</span> <span class="hl kwb">&#64;partitions_signatures</span><span class="hl opt">) }</span>

<span class="hl slc">#-######################################################################################</span>
<span class="hl slc">#- Functions</span>
<span class="hl slc">#-######################################################################################</span>
<span class="hl kwa">sub</span> hds <span class="hl opt">{</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$drives, $flags</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;hds</span><span class="hl opt">;</span>
    <span class="hl kwc">my</span> <span class="hl kwb">$rc</span><span class="hl opt">;</span>

    <span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwb">&#64;$drives</span><span class="hl opt">) {</span>
	<span class="hl kwc">my</span> <span class="hl kwb">$file</span> <span class="hl opt">=</span> devices<span class="hl opt">::</span>make<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>device<span class="hl opt">});</span>

	<span class="hl kwc">my</span> <span class="hl kwb">$hd</span> <span class="hl opt">=</span> partition_table_raw<span class="hl opt">::</span>get_geometry<span class="hl opt">(</span><span class="hl kwb">$file</span><span class="hl opt">)</span> <span class="hl kwc">or log</span><span class="hl opt">::</span>l<span class="hl opt">(</span><span class="hl str">&quot;An error occurred while getting the geometry of block device</span> <span class="hl ipl">$file</span><span class="hl str">:</span> <span class="hl ipl">$!</span><span class="hl str">&quot;</span><span class="hl opt">),</span> <span class="hl kwa">next</span><span class="hl opt">;</span>
	<span class="hl kwb">$hd</span> <span class="hl opt">= { (</span><span class="hl kwb">%$_, %$hd</span><span class="hl opt">) };</span>
	<span class="hl kwb">$hd</span><span class="hl opt">-&gt;{</span>file<span class="hl opt">} =</span> <span class="hl kwb">$file</span><span class="hl opt">;</span>
	<span class="hl kwb">$hd</span><span class="hl opt">-&gt;{</span>prefix<span class="hl opt">} =</span> <span class="hl kwb">$hd</span><span class="hl opt">-&gt;{</span>device<span class="hl opt">};</span>
	<span class="hl slc"># for RAID arrays of format c0d0p1</span>
	<span class="hl kwb">$hd</span><span class="hl opt">-&gt;{</span>prefix<span class="hl opt">} .=</span> <span class="hl str">&quot;p&quot;</span> <span class="hl kwa">if</span> <span class="hl kwb">$hd</span><span class="hl opt">-&gt;{</span>prefix<span class="hl opt">} =~</span> m<span class="hl opt">,(</span>rd<span class="hl opt">|</span>ida<span class="hl opt">)/,;</span>

	<span class="hl kwc">eval</span> <span class="hl opt">{</span> partition_table<span class="hl opt">::</span><span class="hl kwc">read</span><span class="hl opt">(</span><span class="hl kwb">$hd, $flags</span><span class="hl opt">-&gt;{</span>clearall<span class="hl opt">} ||</span> member<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>device<span class="hl opt">}, &#64;{</span><span class="hl kwb">$flags</span><span class="hl opt">-&gt;{</span>clear<span class="hl opt">} || []})) };</span>
	<span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$&#64;</span><span class="hl opt">) {</span>
	    partition_table_raw<span class="hl opt">::</span>zero_MBR<span class="hl opt">(</span><span class="hl kwb">$hd</span><span class="hl opt">);</span>
	<span class="hl opt">}</span>
	member<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>device<span class="hl opt">}, &#64;{</span><span class="hl kwb">$flags</span><span class="hl opt">-&gt;{</span>clear<span class="hl opt">} || []})</span> <span class="hl kwc">and</span> partition_table<span class="hl opt">::</span>remove<span class="hl opt">(</span><span class="hl kwb">$hd, $_</span><span class="hl opt">)</span>
	  <span class="hl kwa">foreach</span> partition_table<span class="hl opt">::</span>get_normal_parts<span class="hl opt">(</span><span class="hl kwb">$hd</span><span class="hl opt">);</span>

	<span class="hl slc">#- special case for type overloading (eg: reiserfs is 0x183)</span>
	<span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwc">grep</span> <span class="hl opt">{</span> isExt2<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> partition_table<span class="hl opt">::</span>get_normal_parts<span class="hl opt">(</span><span class="hl kwb">$hd</span><span class="hl opt">)) {</span>
	    <span class="hl kwc">my</span> <span class="hl kwb">$type</span> <span class="hl opt">=</span> typeOfPart<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>device<span class="hl opt">});</span>
	    <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>type<span class="hl opt">} =</span> <span class="hl kwb">$type</span> <span class="hl kwa">if</span> <span class="hl kwb">$type</span> <span class="hl opt">&gt;</span> <span class="hl num">0x100</span><span class="hl opt">;</span>
	<span class="hl opt">}</span>
	<span class="hl kwc">push</span> <span class="hl kwb">&#64;hds, $hd</span><span class="hl opt">;</span>
    <span class="hl opt">}</span>
    <span class="hl opt">[</span> <span class="hl kwb">&#64;hds</span> <span class="hl opt">];</span>
<span class="hl opt">}</span>

<span class="hl kwa">sub</span> readProcPartitions <span class="hl opt">{</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$hds</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;parts</span><span class="hl opt">;</span>
    <span class="hl kwa">foreach</span> <span class="hl opt">(</span>cat_<span class="hl opt">(</span><span class="hl str">&quot;/proc/partitions&quot;</span><span class="hl opt">)) {</span>
	<span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwc">undef</span><span class="hl opt">,</span> <span class="hl kwc">undef</span><span class="hl opt">,</span> <span class="hl kwb">$size, $device</span><span class="hl opt">) =</span> <span class="hl kwc">split</span><span class="hl opt">;</span>
	<span class="hl kwa">next if</span> <span class="hl kwb">$size</span> <span class="hl kwc">eq</span> <span class="hl str">&quot;1&quot;</span><span class="hl opt">;</span> <span class="hl slc">#- extended partitions</span>
	<span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwb">&#64;$hds</span><span class="hl opt">) {</span>
	    <span class="hl kwc">push</span> <span class="hl kwb">&#64;parts,</span> <span class="hl opt">{</span> start <span class="hl opt">=&gt;</span> <span class="hl num">0</span><span class="hl opt">,</span> size <span class="hl opt">=&gt;</span> <span class="hl kwb">$size</span> <span class="hl opt">*</span> <span class="hl num">2</span><span class="hl opt">,</span> device <span class="hl opt">=&gt;</span> <span class="hl kwb">$device,</span> 
			   type <span class="hl opt">=&gt;</span> typeOfPart<span class="hl opt">(</span><span class="hl kwb">$device</span><span class="hl opt">),</span> rootDevice <span class="hl opt">=&gt;</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>device<span class="hl opt">}</span> 
			 <span class="hl opt">}</span> <span class="hl kwa">if</span> <span class="hl kwb">$device</span> <span class="hl opt">=~</span> <span class="hl kwd">/^$_-&gt;{device}./</span><span class="hl opt">;</span>
	<span class="hl opt">}</span>
    <span class="hl opt">}</span>
    <span class="hl kwb">&#64;parts</span><span class="hl opt">;</span>
<span class="hl opt">}</span>

<span class="hl slc">#- get all normal partition including special ones as found on sparc.</span>
<span class="hl kwa">sub</span> get_fstab <span class="hl opt">{</span>
    loopback<span class="hl opt">::</span>loopbacks<span class="hl opt">(</span><span class="hl kwb">&#64;_</span><span class="hl opt">),</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> partition_table<span class="hl opt">::</span>get_normal_parts<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> <span class="hl kwb">&#64;_</span>
<span class="hl opt">}</span>

<span class="hl slc">#- get normal partition that should be visible for working on.</span>
<span class="hl kwa">sub</span> get_visible_fstab <span class="hl opt">{</span>
    <span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span> <span class="hl opt">&amp;&amp; !</span>partition_table<span class="hl opt">::</span>isWholedisk<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) &amp;&amp; !</span>partition_table<span class="hl opt">::</span>isHiddenMacPart<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> partition_table<span class="hl opt">::</span>get_normal_parts<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>
<span class="hl opt">}</span>

<span class="hl kwa">sub</span> free_space <span class="hl opt">{</span>
    sum <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} }</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> partition_table<span class="hl opt">::</span>get_holes<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>
<span class="hl opt">}</span>

<span class="hl kwa">sub</span> is_one_big_fat <span class="hl opt">{</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$hds</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>
    <span class="hl kwb">&#64;$hds</span> <span class="hl opt">==</span> <span class="hl num">1</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span>

    <span class="hl kwc">my</span> <span class="hl kwb">&#64;l</span> <span class="hl opt">=</span> get_fstab<span class="hl opt">(</span><span class="hl kwb">&#64;$hds</span><span class="hl opt">);</span>
    <span class="hl kwb">&#64;l</span> <span class="hl opt">==</span> <span class="hl num">1</span> <span class="hl opt">&amp;&amp;</span> isFat<span class="hl opt">(</span><span class="hl kwb">$l</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">]) &amp;&amp;</span> free_space<span class="hl opt">(</span><span class="hl kwb">&#64;$hds</span><span class="hl opt">) &lt;</span> <span class="hl num">10</span> <span class="hl opt">&lt;&lt;</span> <span class="hl num">11</span><span class="hl opt">;</span>
<span class="hl opt">}</span>


<span class="hl kwa">sub</span> computeSize <span class="hl opt">{</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$part, $best, $hds, $suggestions</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">$max</span> <span class="hl opt">=</span> <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>maxsize<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 kwa">return</span> min<span class="hl opt">(</span><span class="hl kwb">$max, $best</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">})</span> <span class="hl kwa">unless</span> <span class="hl kwb">$best</span><span class="hl opt">-&gt;{</span>ratio<span class="hl opt">};</span>

    <span class="hl kwc">my</span> <span class="hl kwb">$free_space</span> <span class="hl opt">=</span> free_space<span class="hl opt">(</span><span class="hl kwb">&#64;$hds</span><span class="hl opt">);</span>
    <span class="hl kwc">my</span> <span class="hl kwb">&#64;l</span> <span class="hl opt">=</span> <span class="hl kwc">my</span> <span class="hl kwb">&#64;L</span> <span class="hl opt">=</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> 
	<span class="hl kwa">if</span> <span class="hl opt">(!</span>has_mntpoint<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">},</span> <span class="hl kwb">$hds</span><span class="hl opt">) &amp;&amp;</span> <span class="hl kwb">$free_space</span> <span class="hl opt">&gt;=</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">}) {</span>
	    <span class="hl kwb">$free_space</span> <span class="hl opt">-=</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">};</span>
	    <span class="hl num">1</span><span class="hl opt">;</span>
	<span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl num">0</span> <span class="hl opt">} }</span> <span class="hl kwb">&#64;$suggestions</span><span class="hl opt">;</span>

    <span class="hl kwc">my</span> <span class="hl kwb">$tot_ratios</span> <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span>
    <span class="hl kwa">while</span> <span class="hl opt">(</span><span class="hl num">1</span><span class="hl opt">) {</span>
	<span class="hl kwc">my</span> <span class="hl kwb">$old_free_space</span> <span class="hl opt">=</span> <span class="hl kwb">$free_space</span><span class="hl opt">;</span>
	<span class="hl kwc">my</span> <span class="hl kwb">$old_tot_ratios</span> <span class="hl opt">=</span> <span class="hl kwb">$tot_ratios</span><span class="hl opt">;</span>

	<span class="hl kwb">$tot_ratios</span> <span class="hl opt">=</span> sum<span class="hl opt">(</span><span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>ratio<span class="hl opt">} }</span> <span class="hl kwb">&#64;l</span><span class="hl opt">);</span>
	<span class="hl kwa">last if</span> <span class="hl kwb">$tot_ratios</span> <span class="hl opt">==</span> <span class="hl kwb">$old_tot_ratios</span><span class="hl opt">;</span>

	<span class="hl kwb">&#64;l</span> <span class="hl opt">=</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> 
	    <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>ratio<span class="hl opt">} &amp;&amp;</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>maxsize<span class="hl opt">} &amp;&amp;</span> <span class="hl kwb">$tot_ratios</span> <span class="hl opt">&amp;&amp;</span>
		<span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} +</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>ratio<span class="hl opt">} /</span> <span class="hl kwb">$tot_ratios</span> <span class="hl opt">*</span> <span class="hl kwb">$old_free_space</span> <span class="hl opt">&gt;=</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>maxsize<span class="hl opt">}) {</span>
		<span class="hl kwa">return</span> min<span class="hl opt">(</span><span class="hl kwb">$max, $best</span><span class="hl opt">-&gt;{</span>maxsize<span class="hl opt">})</span> <span class="hl kwa">if</span> <span class="hl kwb">$best</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">};</span>
		<span class="hl kwb">$free_space</span> <span class="hl opt">-=</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>maxsize<span class="hl opt">} -</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</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">else</span> <span class="hl opt">{</span>
		<span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>ratio<span class="hl opt">};</span>
	    <span class="hl opt">}</span> 
	<span class="hl opt">}</span> <span class="hl kwb">&#64;l</span><span class="hl opt">;</span>
    <span class="hl opt">}</span>
    <span class="hl kwc">my</span> <span class="hl kwb">$size</span> <span class="hl opt">=</span> <span class="hl kwc">int</span> min<span class="hl opt">(</span><span class="hl kwb">$max, $best</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} +</span> <span class="hl kwb">$free_space</span> <span class="hl opt">* (</span><span class="hl kwb">$tot_ratios</span> <span class="hl opt">&amp;&amp;</span> <span class="hl kwb">$best</span><span class="hl opt">-&gt;{</span>ratio<span class="hl opt">} /</span> <span class="hl kwb">$tot_ratios</span><span class="hl opt">));</span>
    <span class="hl slc">#- verify other entry can fill the hole</span>
    <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} &lt;</span> <span class="hl kwb">$max</span> <span class="hl opt">-</span> <span class="hl kwb">$size</span> <span class="hl opt">}</span> <span class="hl kwb">&#64;L</span><span class="hl opt">) {</span> <span class="hl kwb">$size</span> <span class="hl opt">}</span> <span class="hl kwa">else</span> <span class="hl opt">{</span> <span class="hl kwb">$max</span> <span class="hl opt">}</span>
<span class="hl opt">}</span>

<span class="hl kwa">sub</span> suggest_part <span class="hl opt">{</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$part, $hds, $suggestions</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>
    <span class="hl kwb">$suggestions</span> <span class="hl opt">||=</span> \<span class="hl kwb">&#64;suggestions</span><span class="hl opt">;</span>


    <span class="hl kwc">my</span> <span class="hl kwb">$has_swap</span> <span class="hl opt">=</span> <span class="hl kwc">grep</span> <span class="hl opt">{</span> isSwap<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> get_fstab<span class="hl opt">(</span><span class="hl kwb">&#64;$hds</span><span class="hl opt">);</span>

    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$best, $second</span><span class="hl opt">) =</span>
      <span class="hl kwc">grep</span> <span class="hl opt">{ !</span><span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>maxsize<span class="hl opt">} ||</span> <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} &lt;=</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>maxsize<span class="hl opt">} }</span>
      <span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} &lt;= (</span><span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>maxsize<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">grep</span> <span class="hl opt">{ !</span>has_mntpoint<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">},</span> <span class="hl kwb">$hds</span><span class="hl opt">) ||</span> isSwap<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) &amp;&amp; !</span><span class="hl kwb">$has_swap</span> <span class="hl opt">}</span>
      <span class="hl kwc">grep</span> <span class="hl opt">{ !</span><span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>hd<span class="hl opt">} ||</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>hd<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>rootDevice<span class="hl opt">} }</span>
      <span class="hl kwc">grep</span> <span class="hl opt">{ !</span><span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>type<span class="hl opt">} ||</span> <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>type<span class="hl opt">} ==</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>type<span class="hl opt">} ||</span> isTrueFS<span class="hl opt">(</span><span class="hl kwb">$part</span><span class="hl opt">) &amp;&amp;</span> isTrueFS<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span>
	<span class="hl kwb">&#64;$suggestions</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span>

<span class="hl slc">#-    if (arch() =~ /i.86/) {</span>
<span class="hl slc">#-	  $best = $second if</span>
<span class="hl slc">#-	    $best-&gt;{mntpoint} eq &apos;/boot&apos; &amp;&amp;</span>
<span class="hl slc">#-	    $part-&gt;{start} + $best-&gt;{size} &gt; 1024 * $hd-&gt;cylinder_size(); #- if the empty slot is beyond the 1024th cylinder, no use having /boot</span>
<span class="hl slc">#-    }</span>

    <span class="hl kwc">defined</span> <span class="hl kwb">$best</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span> <span class="hl slc">#- sorry no suggestion :(</span>

    <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">} =</span> <span class="hl kwb">$best</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">};</span>
    <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>type<span class="hl opt">} =</span> <span class="hl kwb">$best</span><span class="hl opt">-&gt;{</span>type<span class="hl opt">};</span>
    <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} =</span> computeSize<span class="hl opt">(</span><span class="hl kwb">$part, $best, $hds, $suggestions</span><span class="hl opt">);</span>
    <span class="hl num">1</span><span class="hl opt">;</span>
<span class="hl opt">}</span>

<span class="hl kwa">sub</span> suggestions_mntpoint <span class="hl opt">{</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$hds</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>
    <span class="hl kwc">sort grep</span> <span class="hl opt">{ !</span><span class="hl kwd">/swap/</span> <span class="hl opt">&amp;&amp; !</span>has_mntpoint<span class="hl opt">(</span><span class="hl kwb">$_, $hds</span><span class="hl opt">) }</span>
      <span class="hl opt">(</span><span class="hl kwb">&#64;suggestions_mntpoints,</span> <span class="hl kwc">map</span> <span class="hl opt">{</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">} }</span> <span class="hl kwb">&#64;suggestions</span><span class="hl opt">);</span>
<span class="hl opt">}</span>

<span class="hl slc">#-sub partitionDrives {</span>
<span class="hl slc">#-</span>
<span class="hl slc">#-    my $cmd = &quot;/sbin/fdisk&quot;;</span>
<span class="hl slc">#-    -x $cmd or $cmd = &quot;/usr/bin/fdisk&quot;;</span>
<span class="hl slc">#-</span>
<span class="hl slc">#-    my $drives = findDrivesPresent() or die &quot;You don&apos;t have any hard drives available! You probably forgot to configure a SCSI controller.&quot;;</span>
<span class="hl slc">#-</span>
<span class="hl slc">#-    foreach (&#64;$drives) {</span>
<span class="hl slc">#-	 my $text = &quot;/dev/&quot; . $_-&gt;{device};</span>
<span class="hl slc">#-	 $text .= &quot; - SCSI ID &quot; . $_-&gt;{id} if $_-&gt;{device} =~ /^sd/;</span>
<span class="hl slc">#-	 $text .= &quot; - Model &quot; . $_-&gt;{info};</span>
<span class="hl slc">#-	 $text .= &quot; array&quot; if $_-&gt;{device} =~ /^c.d/;</span>
<span class="hl slc">#-</span>
<span class="hl slc">#-	 #- truncate at 50 columns for now</span>
<span class="hl slc">#-	 $text = substr $text, 0, 50;</span>
<span class="hl slc">#-    }</span>
<span class="hl slc">#-    #-TODO TODO</span>
<span class="hl slc">#-}</span>


<span class="hl kwa">sub</span> mntpoint2part <span class="hl opt">{</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$mntpoint, $fstab</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>
    first<span class="hl opt">(</span><span class="hl kwc">grep</span> <span class="hl opt">{</span> <span class="hl kwb">$mntpoint</span> <span class="hl kwc">eq</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">} }</span> <span class="hl kwb">&#64;$fstab</span><span class="hl opt">);</span>
<span class="hl opt">}</span>
<span class="hl kwa">sub</span> has_mntpoint <span class="hl opt">{</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$mntpoint, $hds</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>
    mntpoint2part<span class="hl opt">(</span><span class="hl kwb">$mntpoint,</span> <span class="hl opt">[</span> get_fstab<span class="hl opt">(</span><span class="hl kwb">&#64;$hds</span><span class="hl opt">) ]);</span>
<span class="hl opt">}</span>
<span class="hl kwa">sub</span> get_root_ <span class="hl opt">{</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$fstab, $boot</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>
    <span class="hl kwb">$boot</span> <span class="hl opt">&amp;&amp;</span> mntpoint2part<span class="hl opt">(</span><span class="hl str">&quot;/boot&quot;</span><span class="hl opt">,</span> <span class="hl kwb">$fstab</span><span class="hl opt">) ||</span> mntpoint2part<span class="hl opt">(</span><span class="hl str">&quot;/&quot;</span><span class="hl opt">,</span> <span class="hl kwb">$fstab</span><span class="hl opt">);</span>
<span class="hl opt">}</span>
<span class="hl kwa">sub</span> get_root <span class="hl opt">{ &amp;</span>get_root_ <span class="hl opt">|| {} }</span>

<span class="hl slc">#- do this before modifying $part-&gt;{mntpoint}</span>
<span class="hl slc">#- $part-&gt;{mntpoint} should not be used here, use $mntpoint instead</span>
<span class="hl kwa">sub</span> check_mntpoint <span class="hl opt">{</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$mntpoint, $hd, $part, $hds, $loopbackDevice</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>

    <span class="hl kwc">ref</span> <span class="hl kwb">$loopbackDevice</span> <span class="hl kwc">or undef</span> <span class="hl kwb">$loopbackDevice</span><span class="hl opt">;</span>

    <span class="hl kwb">$mntpoint</span> <span class="hl kwc">eq</span> <span class="hl str">&apos;&apos;</span> <span class="hl opt">||</span> isSwap<span class="hl opt">(</span><span class="hl kwb">$part</span><span class="hl opt">) ||</span> isRAID<span class="hl opt">(</span><span class="hl kwb">$part</span><span class="hl opt">)</span> <span class="hl kwc">and</span> <span class="hl kwa">return</span><span class="hl opt">;</span>

    <span class="hl kwc">local</span> <span class="hl kwb">$_</span> <span class="hl opt">=</span> <span class="hl kwb">$mntpoint</span><span class="hl opt">;</span>
    m<span class="hl opt">|^</span><span class="hl kwd">/| or die _(&quot;Mount points must begin with a leading /</span><span class="hl str">&quot;);</span>
<span class="hl str">#-    m|(.)/$| and die &quot;</span>The mount point <span class="hl kwb">$_</span> <span class="hl kwa">is</span> illegal<span class="hl opt">.</span><span class="hl esc">\n</span>Mount points may <span class="hl kwc">not</span> end with a <span class="hl opt">/</span><span class="hl str">&quot;;</span>
<span class="hl str"></span>
<span class="hl str">    has_mntpoint(</span><span class="hl ipl">$mntpoint,</span> <span class="hl str"></span><span class="hl ipl">$hds</span><span class="hl str">) and die _(&quot;</span>There <span class="hl kwa">is</span> already a partition with mount point <span class="hl kwb">%s\n</span><span class="hl str">&quot;,</span> <span class="hl ipl">$mntpoint</span><span class="hl str">);</span>
<span class="hl str"></span>
<span class="hl str">    my</span> <span class="hl ipl">$fake_part</span> <span class="hl str">= { mntpoint =&gt;</span> <span class="hl ipl">$mntpoint,</span> <span class="hl str">device =&gt;</span> <span class="hl ipl">$loopbackDevice</span> <span class="hl str">};</span>
<span class="hl str"></span>    <span class="hl ipl">$fake_part</span><span class="hl str">-&gt;{loopback_file} = 1 if</span> <span class="hl ipl">$loopbackDevice</span><span class="hl str">;</span>
<span class="hl str">    my</span> <span class="hl ipl">$fstab</span> <span class="hl str">= [ get_fstab(</span><span class="hl ipl">&#64;$hds</span><span class="hl str">),</span> <span class="hl ipl">$fake_part</span> <span class="hl str">];</span>
<span class="hl str">    my</span> <span class="hl ipl">$check</span><span class="hl str">;</span> <span class="hl ipl">$check</span> <span class="hl str">= sub {</span>
<span class="hl str">	my (</span><span class="hl ipl">$p,</span> <span class="hl str"></span><span class="hl ipl">&#64;seen</span><span class="hl str">) =</span> <span class="hl ipl">&#64;_</span><span class="hl str">;</span>
<span class="hl str">	push</span> <span class="hl ipl">&#64;seen,</span> <span class="hl str"></span><span class="hl ipl">$p</span><span class="hl str">-&gt;{mntpoint} || return;</span>
<span class="hl str"></span>	<span class="hl ipl">&#64;seen</span> <span class="hl str">&gt; 1 &amp;&amp;</span> <span class="hl ipl">$p</span><span class="hl str">-&gt;{mntpoint} eq</span> <span class="hl ipl">$mntpoint</span> <span class="hl str">and die _(&quot;</span>Circular mounts <span class="hl kwb">%s\n</span><span class="hl str">&quot;, join(&quot;</span><span class="hl opt">,</span> <span class="hl str">&quot;,</span> <span class="hl ipl">&#64;seen</span><span class="hl str">));</span>
<span class="hl str">	if (my</span> <span class="hl ipl">$part</span> <span class="hl str">= fs::up_mount_point(</span><span class="hl ipl">$p</span><span class="hl str">-&gt;{mntpoint},</span> <span class="hl ipl">$fstab</span><span class="hl str">)) {</span>
<span class="hl str">	    #- &apos;/&apos; carrier is a special case, it will be mounted first</span>
<span class="hl str"></span>	    <span class="hl ipl">$check</span><span class="hl str">-&gt;(</span><span class="hl ipl">$part,</span> <span class="hl str"></span><span class="hl ipl">&#64;seen</span><span class="hl str">) unless loopback::carryRootLoopback(</span><span class="hl ipl">$p</span><span class="hl str">);</span>
<span class="hl str">	}</span>
<span class="hl str">	if (isLoopback(</span><span class="hl ipl">$p</span><span class="hl str">)) {</span>
<span class="hl str"></span>	    <span class="hl ipl">$check</span><span class="hl str">-&gt;(</span><span class="hl ipl">$p</span><span class="hl str">-&gt;{device},</span> <span class="hl ipl">&#64;seen</span><span class="hl str">);</span>
<span class="hl str">	}</span>
<span class="hl str">    };</span>
<span class="hl str"></span>    <span class="hl ipl">$check</span><span class="hl str">-&gt;(</span><span class="hl ipl">$fake_part</span><span class="hl str">) unless</span> <span class="hl ipl">$mntpoint</span> <span class="hl str">eq &apos;/&apos; &amp;&amp;</span> <span class="hl ipl">$loopbackDevice</span><span class="hl str">; #- &apos;/&apos; is a special case, no loop check</span>
<span class="hl str"></span>
<span class="hl str">    die &quot;</span>raid <span class="hl kwd">/ with no /</span>boot<span class="hl str">&quot; if</span> <span class="hl ipl">$mntpoint</span> <span class="hl str">eq &quot;</span><span class="hl kwd">/&quot; &amp;&amp; isMDRAID($part) &amp;&amp; !has_mntpoint(&quot;/</span>boot<span class="hl str">&quot;,</span> <span class="hl ipl">$hds</span><span class="hl str">);</span>
<span class="hl str">    die _(&quot;</span>This directory should remain within the root filesystem<span class="hl str">&quot;) if member(</span><span class="hl ipl">$mntpoint,</span> <span class="hl str">qw(/bin /dev /etc /lib /sbin)</span><span class="hl opt">);</span>
    <span class="hl kwc">die</span> _<span class="hl opt">(</span><span class="hl str">&quot;You need a true filesystem (ext2, reiserfs) for this mount point</span><span class="hl esc">\n</span><span class="hl str">&quot;</span><span class="hl opt">)</span> <span class="hl kwa">if</span> <span class="hl opt">!</span>isTrueFS<span class="hl opt">(</span><span class="hl kwb">$part</span><span class="hl opt">) &amp;&amp;</span> member<span class="hl opt">(</span><span class="hl kwb">$mntpoint,</span> <span class="hl str">qw(/ /home /tmp /usr /var)</span><span class="hl opt">);</span>
<span class="hl slc">#-    if ($part-&gt;{start} + $part-&gt;{size} &gt; 1024 * $hd-&gt;cylinder_size() &amp;&amp; arch() =~ /i.86/) {</span>
<span class="hl slc">#-	  die &quot;/boot ending on cylinder &gt; 1024&quot; if $mntpoint eq &quot;/boot&quot;;</span>
<span class="hl slc">#-	  die     &quot;/ ending on cylinder &gt; 1024&quot; if $mntpoint eq &quot;/&quot; &amp;&amp; !has_mntpoint(&quot;/boot&quot;, $hds);</span>
<span class="hl slc">#-    }</span>
<span class="hl opt">}</span>

<span class="hl kwa">sub</span> add<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, $hds, $options</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>

    isSwap<span class="hl opt">(</span><span class="hl kwb">$part</span><span class="hl opt">)</span> ?
      <span class="hl opt">(</span><span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">} =</span> <span class="hl str">&apos;swap&apos;</span><span class="hl opt">) :</span>
      <span class="hl kwb">$options</span><span class="hl opt">-&gt;{</span>force<span class="hl opt">} ||</span> check_mntpoint<span class="hl opt">(</span><span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">},</span> <span class="hl kwb">$hd, $part, $hds</span><span class="hl opt">);</span>

    <span class="hl kwc">delete</span> <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>maxsize<span class="hl opt">};</span>
    partition_table<span class="hl opt">::</span>add<span class="hl opt">(</span><span class="hl kwb">$hd, $part, $options</span><span class="hl opt">-&gt;{</span>primaryOrExtended<span class="hl opt">});</span>
<span class="hl opt">}</span>

<span class="hl kwa">sub</span> allocatePartitions<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">$hds, $to_add</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>

    <span class="hl kwa">foreach</span> <span class="hl kwc">my</span> <span class="hl kwb">$hd</span> <span class="hl opt">(</span><span class="hl kwb">&#64;$hds</span><span class="hl opt">) {</span>
	<span class="hl kwa">foreach</span> <span class="hl opt">(</span>partition_table<span class="hl opt">::</span>get_holes<span class="hl opt">(</span><span class="hl kwb">$hd</span><span class="hl opt">)) {</span>
	    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$start, $size</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;$_</span><span class="hl opt">{</span><span class="hl str">&quot;start&quot;</span><span class="hl opt">,</span> <span class="hl str">&quot;size&quot;</span><span class="hl opt">};</span>
	    <span class="hl kwc">my</span> <span class="hl kwb">$part</span><span class="hl opt">;</span>
	    <span class="hl kwa">while</span> <span class="hl opt">(</span>suggest_part<span class="hl opt">(</span><span class="hl kwb">$part</span> <span class="hl opt">= {</span> start <span class="hl opt">=&gt;</span> <span class="hl kwb">$start,</span> size <span class="hl opt">=&gt;</span> <span class="hl num">0</span><span class="hl opt">,</span> maxsize <span class="hl opt">=&gt;</span> <span class="hl kwb">$size,</span> rootDevice <span class="hl opt">=&gt;</span> <span class="hl kwb">$hd</span><span class="hl opt">-&gt;{</span>device<span class="hl opt">} },</span> 
				<span class="hl kwb">$hds, $to_add</span><span class="hl opt">)) {</span>
		add<span class="hl opt">(</span><span class="hl kwb">$hd, $part, $hds</span><span class="hl opt">);</span>
		<span class="hl kwb">$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">$part</span><span class="hl opt">-&gt;{</span>start<span class="hl opt">} -</span> <span class="hl kwb">$start</span><span class="hl opt">;</span>
		<span class="hl kwb">$start</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 opt">}</span>
	<span class="hl opt">}</span>
    <span class="hl opt">}</span>
<span class="hl opt">}</span>

<span class="hl kwa">sub</span> auto_allocate<span class="hl opt">($;$) {</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$hds, $suggestions</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>    
    allocatePartitions<span class="hl opt">(</span><span class="hl kwb">$hds, $suggestions</span> <span class="hl opt">||</span> \<span class="hl kwb">&#64;suggestions</span><span class="hl opt">);</span>
    <span class="hl kwc">map</span> <span class="hl opt">{</span> partition_table<span class="hl opt">::</span>assign_device_numbers<span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">) }</span> <span class="hl kwb">&#64;$hds</span><span class="hl opt">;</span>
<span class="hl opt">}</span>

<span class="hl kwa">sub</span> undo_prepare<span class="hl opt">($) {</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$hds</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>
    <span class="hl kwb">$Data</span><span class="hl opt">::</span>Dumper<span class="hl opt">::</span>Purity <span class="hl opt">=</span> <span class="hl num">1</span><span class="hl opt">;</span>
    <span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwb">&#64;$hds</span><span class="hl opt">) {</span>
	<span class="hl kwc">my</span> <span class="hl kwb">&#64;h</span> <span class="hl opt">= &#64;{</span><span class="hl kwb">$_</span><span class="hl opt">}{</span><span class="hl kwb">&#64;partition_table</span><span class="hl opt">::</span>fields2save<span class="hl opt">};</span>
	<span class="hl kwc">push</span> <span class="hl opt">&#64;{</span><span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>undo<span class="hl opt">}},</span> Data<span class="hl opt">::</span>Dumper-<span class="hl opt">&gt;</span><span class="hl kwd">Dump</span><span class="hl opt">([</span>\<span class="hl kwb">&#64;h</span><span class="hl opt">], [</span><span class="hl str">&apos;</span><span class="hl ipl">$h</span><span class="hl str">&apos;</span><span class="hl opt">]);</span>
    <span class="hl opt">}</span>
<span class="hl opt">}</span>
<span class="hl kwa">sub</span> undo<span class="hl opt">($) {</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$hds</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>
    <span class="hl kwa">foreach</span> <span class="hl opt">(</span><span class="hl kwb">&#64;$hds</span><span class="hl opt">) {</span>
	<span class="hl kwc">my</span> <span class="hl kwb">$h</span><span class="hl opt">;</span> <span class="hl kwc">eval pop</span> <span class="hl opt">&#64;{</span><span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>undo<span class="hl opt">}} ||</span> <span class="hl kwa">next</span><span class="hl opt">;</span>
	<span class="hl opt">&#64;{</span><span class="hl kwb">$_</span><span class="hl opt">}{</span><span class="hl kwb">&#64;partition_table</span><span class="hl opt">::</span>fields2save<span class="hl opt">} =</span> <span class="hl kwb">&#64;$h</span><span class="hl opt">;</span>

	<span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>isDirty<span class="hl opt">} =</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>needKernelReread<span class="hl opt">} =</span> <span class="hl num">1</span> <span class="hl kwa">if</span> <span class="hl kwb">$_</span><span class="hl opt">-&gt;{</span>hasBeenDirty<span class="hl opt">};</span>
    <span class="hl opt">}</span>
<span class="hl opt">}</span>

<span class="hl kwa">sub</span> move <span class="hl opt">{</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$hd, $part, $hd2, $sector2</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">$part1</span> <span class="hl opt">= {</span> <span class="hl kwb">%$part</span> <span class="hl opt">};</span>
    <span class="hl kwc">my</span> <span class="hl kwb">$part2</span> <span class="hl opt">= {</span> <span class="hl kwb">%$part</span> <span class="hl opt">};</span>
    <span class="hl kwb">$part2</span><span class="hl opt">-&gt;{</span>start<span class="hl opt">} =</span> <span class="hl kwb">$sector2</span><span class="hl opt">;</span>
    <span class="hl kwb">$part2</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} +=</span> <span class="hl kwb">$hd2</span><span class="hl opt">-&gt;</span><span class="hl kwd">cylinder_size</span><span class="hl opt">() -</span> <span class="hl num">1</span><span class="hl opt">;</span>
    partition_table<span class="hl opt">::</span>remove<span class="hl opt">(</span><span class="hl kwb">$hd, $part</span><span class="hl opt">);</span>
    <span class="hl opt">{</span>
	<span class="hl kwc">local</span> <span class="hl opt">(</span><span class="hl kwb">$part2</span><span class="hl opt">-&gt;{</span>notFormatted<span class="hl opt">},</span> <span class="hl kwb">$part2</span><span class="hl opt">-&gt;{</span>isFormatted<span class="hl opt">});</span> <span class="hl slc">#- do not allow partition::add to change this</span>
	partition_table<span class="hl opt">::</span>add<span class="hl opt">(</span><span class="hl kwb">$hd2, $part2</span><span class="hl opt">);</span>
    <span class="hl opt">}</span>

    <span class="hl kwa">return if</span> <span class="hl kwb">$part2</span><span class="hl opt">-&gt;{</span>notFormatted<span class="hl opt">} &amp;&amp; !</span><span class="hl kwb">$part2</span><span class="hl opt">-&gt;{</span>isFormatted<span class="hl opt">} || $::</span>testing<span class="hl opt">;</span>

    <span class="hl kwc">local</span> <span class="hl opt">(*</span>F<span class="hl opt">, *</span>G<span class="hl opt">);</span>
    <span class="hl kwc">sysopen</span> F<span class="hl opt">,</span> <span class="hl kwb">$hd</span><span class="hl opt">-&gt;{</span>file<span class="hl opt">},</span> <span class="hl num">0</span> <span class="hl kwc">or die</span> <span class="hl str">&apos;&apos;</span><span class="hl opt">;</span>
    <span class="hl kwc">sysopen</span> G<span class="hl opt">,</span> <span class="hl kwb">$hd2</span><span class="hl opt">-&gt;{</span>file<span class="hl opt">},</span> <span class="hl num">2</span> <span class="hl kwc">or die</span> _<span class="hl opt">(</span><span class="hl str">&quot;Error opening</span> <span class="hl ipl">%s</span> <span class="hl str">for writing:</span> <span class="hl ipl">%s</span><span class="hl str">&quot;</span><span class="hl opt">,</span> <span class="hl kwb">$hd2</span><span class="hl opt">-&gt;{</span>file<span class="hl opt">},</span> <span class="hl str">&quot;</span><span class="hl ipl">$!</span><span class="hl str">&quot;</span><span class="hl opt">);</span>

    <span class="hl kwc">my</span> <span class="hl kwb">$base</span> <span class="hl opt">=</span> <span class="hl kwb">$part1</span><span class="hl opt">-&gt;{</span>start<span class="hl opt">};</span>
    <span class="hl kwc">my</span> <span class="hl kwb">$base2</span> <span class="hl opt">=</span> <span class="hl kwb">$part2</span><span class="hl opt">-&gt;{</span>start<span class="hl opt">};</span>
    <span class="hl kwc">my</span> <span class="hl kwb">$step</span> <span class="hl opt">=</span> <span class="hl num">10</span><span class="hl opt">;</span>
    <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$hd</span> <span class="hl kwc">eq</span> <span class="hl kwb">$hd2</span><span class="hl opt">) {</span>
	<span class="hl kwb">$base</span> <span class="hl opt">==</span> <span class="hl kwb">$base2</span> <span class="hl kwc">and</span> <span class="hl kwa">return</span><span class="hl opt">;</span>
	<span class="hl kwb">$step</span> <span class="hl opt">=</span> min<span class="hl opt">(</span><span class="hl kwb">$step,</span> <span class="hl kwc">abs</span><span class="hl opt">(</span><span class="hl kwb">$base2</span> <span class="hl opt">-</span> <span class="hl kwb">$base</span><span class="hl opt">));</span>

	<span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwb">$base</span> <span class="hl opt">&lt;</span> <span class="hl kwb">$base2</span><span class="hl opt">) {</span>
	    <span class="hl kwb">$base</span>  <span class="hl opt">+=</span> <span class="hl kwb">$part1</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} -</span> <span class="hl kwb">$step</span><span class="hl opt">;</span>
	    <span class="hl kwb">$base2</span> <span class="hl opt">+=</span> <span class="hl kwb">$part1</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} -</span> <span class="hl kwb">$step</span><span class="hl opt">;</span>
	    <span class="hl kwb">$step</span> <span class="hl opt">= -</span><span class="hl kwb">$step</span><span class="hl opt">;</span>
	<span class="hl opt">}</span>
    <span class="hl opt">}</span>

    <span class="hl kwc">my</span> <span class="hl kwb">$f</span> <span class="hl opt">=</span> <span class="hl kwa">sub</span> <span class="hl opt">{</span>
	<span class="hl kwb">$base</span>  <span class="hl opt">&lt;</span> <span class="hl num">0</span> <span class="hl kwc">and</span> <span class="hl kwb">$base2</span> <span class="hl opt">+= -</span><span class="hl kwb">$base,  $base</span>  <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span>
	<span class="hl kwb">$base2</span> <span class="hl opt">&lt;</span> <span class="hl num">0</span> <span class="hl kwc">and</span> <span class="hl kwb">$base</span>  <span class="hl opt">+= -</span><span class="hl kwb">$base2, $base2</span> <span class="hl opt">=</span> <span class="hl num">0</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">$base,</span>  <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwc">or die</span> <span class="hl str">&quot;seeking to sector</span> <span class="hl ipl">$base</span> <span class="hl str">failed on drive</span> <span class="hl ipl">$hd</span><span class="hl str">-&gt;{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>G<span class="hl opt">),</span> <span class="hl kwb">$base2,</span> <span class="hl num">0</span><span class="hl opt">)</span> <span class="hl kwc">or die</span> <span class="hl str">&quot;seeking to sector</span> <span class="hl ipl">$base2</span> <span class="hl str">failed on drive</span> <span class="hl ipl">$hd2</span><span class="hl str">-&gt;{device}&quot;</span><span class="hl opt">;</span>

	<span class="hl kwc">my</span> <span class="hl kwb">$buf</span><span class="hl opt">;</span>
	<span class="hl kwc">sysread</span> F<span class="hl opt">,</span> <span class="hl kwb">$buf, $SECTORSIZE</span> <span class="hl opt">*</span> <span class="hl kwc">abs</span><span class="hl opt">(</span><span class="hl kwb">$_</span><span class="hl opt">[</span><span class="hl num">0</span><span class="hl opt">])</span> <span class="hl kwc">or die</span> <span class="hl str">&apos;&apos;</span><span class="hl opt">;</span>
	<span class="hl kwc">syswrite</span> G<span class="hl opt">,</span> <span class="hl kwb">$buf</span><span class="hl opt">;</span>
    <span class="hl opt">};</span>

    <span class="hl kwa">for</span> <span class="hl opt">(</span><span class="hl kwc">my</span> <span class="hl kwb">$i</span> <span class="hl opt">=</span> <span class="hl num">0</span><span class="hl opt">;</span> <span class="hl kwb">$i</span> <span class="hl opt">&lt;</span> <span class="hl kwb">$part1</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} /</span> <span class="hl kwc">abs</span><span class="hl opt">(</span><span class="hl kwb">$step</span><span class="hl opt">);</span> <span class="hl kwb">$i++, $base</span> <span class="hl opt">+=</span> <span class="hl kwb">$step, $base2</span> <span class="hl opt">+=</span> <span class="hl kwb">$step</span><span class="hl opt">) {</span>
	<span class="hl kwc">print</span> <span class="hl str">&quot;</span><span class="hl ipl">$base</span> <span class="hl str"></span><span class="hl ipl">$base2\n</span><span class="hl str">&quot;</span><span class="hl opt">;</span>
	<span class="hl opt">&amp;</span><span class="hl kwb">$f</span><span class="hl opt">(</span><span class="hl kwb">$step</span><span class="hl opt">);</span>
    <span class="hl opt">}</span>
    <span class="hl kwa">if</span> <span class="hl opt">(</span><span class="hl kwc">my</span> <span class="hl kwb">$v</span> <span class="hl opt">= (</span><span class="hl kwb">$part1</span><span class="hl opt">-&gt;{</span>size<span class="hl opt">} %</span> <span class="hl kwc">abs</span><span class="hl opt">(</span><span class="hl kwb">$step</span><span class="hl opt">)) *</span> sign<span class="hl opt">(</span><span class="hl kwb">$step</span><span class="hl opt">)) {</span>
	<span class="hl kwb">$base</span> <span class="hl opt">+=</span> <span class="hl kwb">$v</span><span class="hl opt">;</span>
	<span class="hl kwb">$base2</span> <span class="hl opt">+=</span> <span class="hl kwb">$v</span><span class="hl opt">;</span>
	<span class="hl opt">&amp;</span><span class="hl kwb">$f</span><span class="hl opt">(</span><span class="hl kwb">$v</span><span class="hl opt">);</span>
    <span class="hl opt">}</span>
<span class="hl opt">}</span>

<span class="hl kwa">sub</span> change_type<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, $type</span><span class="hl opt">) =</span> <span class="hl kwb">&#64;_</span><span class="hl opt">;</span>
    <span class="hl kwb">$type</span> <span class="hl opt">!=</span> <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>type<span class="hl opt">}</span> <span class="hl kwc">or</span> <span class="hl kwa">return</span><span class="hl opt">;</span>
    <span class="hl kwb">$hd</span><span class="hl opt">-&gt;{</span>isDirty<span class="hl opt">} =</span> <span class="hl num">1</span><span class="hl opt">;</span>
    <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">} =</span> <span class="hl str">&apos;&apos;</span> <span class="hl kwa">if</span> isSwap<span class="hl opt">(</span><span class="hl kwb">$part</span><span class="hl opt">) &amp;&amp;</span> <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>mntpoint<span class="hl opt">}</span> <span class="hl kwc">eq</span> <span class="hl str">&quot;swap&quot;</span><span class="hl opt">;</span>
    <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>type<span class="hl opt">} =</span> <span class="hl kwb">$type</span><span class="hl opt">;</span>
    <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>notFormatted<span class="hl opt">} =</span> <span class="hl num">1</span><span class="hl opt">;</span>
    <span class="hl kwb">$part</span><span class="hl opt">-&gt;{</span>isFormatted<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> rescuept<span class="hl opt">($) {</span>
    <span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$hd</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 opt">(</span><span class="hl kwb">$ext, &#64;hd</span><span class="hl opt">);</span>

    <span class="hl kwc">my</span> <span class="hl kwb">$dev</span> <span class="hl opt">=</span> devices<span class="hl opt">::</span>make<span class="hl opt">(</span><span class="hl kwb">$hd</span><span class="hl opt">-&gt;{</span>device<span class="hl opt">});</span>
    <span class="hl kwc">open</span> F<span class="hl opt">,</span> <span class="hl str">&quot;rescuept</span> <span class="hl ipl">$dev</span><span class="hl str">|&quot;</span><span class="hl opt">;</span>
    <span class="hl kwa">foreach</span> <span class="hl opt">(&lt;</span>F<span class="hl opt">&gt;) {</span>
	<span class="hl kwc">my</span> <span class="hl opt">(</span><span class="hl kwb">$st, $si, $id</span><span class="hl opt">) =</span> <span class="hl kwd">/start=\s*(\d+),\s*size=\s*(\d+),\s*Id=\s*(\d+)/</span> <span class="hl kwc">or</span> <span class="hl kwa">next</span><span class="hl opt">;</span>
	<span class="hl kwc">my</span> <span class="hl kwb">$part</span> <span class="hl opt">= {</span> start <span class="hl opt">=&gt;</span> <span class="hl kwb">$st,</span> size <span class="hl opt">=&gt;</span> <span class="hl kwb">$si,</span> type <span class="hl opt">=&gt;</span> <span class="hl kwc">hex</span><span class="hl opt">(</span><span class="hl kwb">$id</span><span class="hl opt">) };</span>
	<span class="hl kwa">if</span> <span class="hl opt">(</span>isExtended<span class="hl opt">(</span><span class="hl kwb">$part</span><span class="hl opt">)) {