📄 blank.c.htm
字号:
<a class="l" name="181"> 181 </a> }<a class="l" name="182"> 182 </a> <b>if</b> (!<a href="/source/s?defs=blank_disc">blank_disc</a>(<a href="/source/s?defs=target">target</a>-><a href="/source/s?defs=d_fd">d_fd</a>, <a href="/source/s?defs=type">type</a>, <a href="/source/s?defs=immediate">immediate</a>)) {<a class="l" name="183"> 183 </a> <b>if</b> (<a href="/source/s?defs=ignore_error">ignore_error</a>)<a class="l" name="184"> 184 </a> <b>return</b>;<a class="l" name="185"> 185 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Blank command failed\n"</span>));<a class="l" name="186"> 186 </a> <b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="l" name="187"> 187 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"%x %x %x %x\n"</span>, <a href="/source/s?defs=uscsi_status">uscsi_status</a>,<a class="l" name="188"> 188 </a> <a href="/source/s?defs=SENSE_KEY">SENSE_KEY</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>), <a href="/source/s?defs=ASC">ASC</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>), <a href="/source/s?defs=ASCQ">ASCQ</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>));<a class="l" name="189"> 189 </a> <b>goto</b> <a href="/source/s?defs=blank_failed">blank_failed</a>;<a class="hl" name="190"> 190 </a> }<a class="l" name="191"> 191 </a> <span class="c">/* Allow the blanking to start */</span><a class="l" name="192"> 192 </a> (<b>void</b>) <a href="/source/s?defs=sleep">sleep</a>(<span class="n">10</span>);<a class="l" name="193"> 193 </a><a class="l" name="194"> 194 </a> <span class="c">/*<a class="l" name="195"> 195 </a> * set ATAPI devices to immediately return from the command and poll<a class="l" name="196"> 196 </a> * so that we don't hog the channel.<a class="l" name="197"> 197 </a> */</span><a class="l" name="198"> 198 </a><a class="l" name="199"> 199 </a> <b>if</b> (<a href="/source/s?defs=immediate">immediate</a>) {<a class="hl" name="200"> 200 </a> <a href="/source/s?defs=di">di</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<a href="/source/s?defs=DISC_INFO_BLOCK_SIZE">DISC_INFO_BLOCK_SIZE</a>);<a class="l" name="201"> 201 </a> <span class="c">/* Blanking should not take more than 75 minutes */</span><a class="l" name="202"> 202 </a> <b>for</b> (<a href="/source/s?defs=count">count</a> = <span class="n">0</span>; <a href="/source/s?defs=count">count</a> < (<span class="n">16*60</span>); <a href="/source/s?defs=count">count</a>++) {<a class="l" name="203"> 203 </a> <a href="/source/s?defs=ret">ret</a> = <a href="/source/s?defs=read_disc_info">read_disc_info</a>(<a href="/source/s?defs=target">target</a>-><a href="/source/s?defs=d_fd">d_fd</a>, <a href="/source/s?defs=di">di</a>);<a class="l" name="204"> 204 </a> <b>if</b> (<a href="/source/s?defs=ret">ret</a> != <span class="n">0</span>)<a class="l" name="205"> 205 </a> <b>break</b>;<a class="l" name="206"> 206 </a> <b>if</b> (<a href="/source/s?defs=uscsi_status">uscsi_status</a> != <span class="n">2</span>)<a class="l" name="207"> 207 </a> <a href="/source/s?defs=err">err</a> = <span class="n">1</span>;<a class="l" name="208"> 208 </a> <span class="c">/* not ready but not becoming ready */</span><a class="l" name="209"> 209 </a> <b>if</b> (<a href="/source/s?defs=SENSE_KEY">SENSE_KEY</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>) == <span class="n">2</span>) {<a class="hl" name="210"> 210 </a> <b>if</b> (<a href="/source/s?defs=ASC">ASC</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>) != <span class="n">4</span>)<a class="l" name="211"> 211 </a> <a href="/source/s?defs=err">err</a> = <span class="n">1</span>;<a class="l" name="212"> 212 </a> <span class="c">/* illegal mode for this track */</span><a class="l" name="213"> 213 </a> } <b>else</b> <b>if</b> (<a href="/source/s?defs=SENSE_KEY">SENSE_KEY</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>) == <span class="n">5</span>) {<a class="l" name="214"> 214 </a> <b>if</b> (<a href="/source/s?defs=ASC">ASC</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>) != <span class="n">0x64</span>)<a class="l" name="215"> 215 </a> <a href="/source/s?defs=err">err</a> = <span class="n">1</span>;<a class="l" name="216"> 216 </a> } <b>else</b> {<a class="l" name="217"> 217 </a> <a href="/source/s?defs=err">err</a> = <span class="n">1</span>;<a class="l" name="218"> 218 </a> }<a class="l" name="219"> 219 </a> <b>if</b> (<a href="/source/s?defs=err">err</a> == <span class="n">1</span>) {<a class="hl" name="220"> 220 </a> <b>if</b> (<a href="/source/s?defs=ignore_error">ignore_error</a>)<a class="l" name="221"> 221 </a> <b>break</b>;<a class="l" name="222"> 222 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Blanking operation failed\n"</span>));<a class="l" name="223"> 223 </a> <b>if</b> (<a href="/source/s?defs=debug">debug</a>) {<a class="l" name="224"> 224 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"%x %x %x %x\n"</span>,<a class="l" name="225"> 225 </a> <a href="/source/s?defs=uscsi_status">uscsi_status</a>, <a href="/source/s?defs=SENSE_KEY">SENSE_KEY</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>),<a class="l" name="226"> 226 </a> <a href="/source/s?defs=ASC">ASC</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>), <a href="/source/s?defs=ASCQ">ASCQ</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>));<a class="l" name="227"> 227 </a> }<a class="l" name="228"> 228 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=di">di</a>);<a class="l" name="229"> 229 </a> <b>goto</b> <a href="/source/s?defs=blank_failed">blank_failed</a>;<a class="hl" name="230"> 230 </a> }<a class="l" name="231"> 231 </a> (<b>void</b>) <a href="/source/s?defs=sleep">sleep</a>(<span class="n">5</span>);<a class="l" name="232"> 232 </a> }<a class="l" name="233"> 233 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=di">di</a>);<a class="l" name="234"> 234 </a> <b>if</b> (<a href="/source/s?defs=count">count</a> == (<span class="n">16*60</span>)) {<a class="l" name="235"> 235 </a> <b>if</b> (!<a href="/source/s?defs=silent_pass">silent_pass</a>) {<a class="l" name="236"> 236 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="l" name="237"> 237 </a> <span class="s">"Blank command timed out.\n"</span>));<a class="l" name="238"> 238 </a> }<a class="l" name="239"> 239 </a> <b>goto</b> <a href="/source/s?defs=blank_failed">blank_failed</a>;<a class="hl" name="240"> 240 </a> }<a class="l" name="241"> 241 </a> }<a class="l" name="242"> 242 </a> <span class="c">/* we are doing a second pass. We don't want to re-print messsages */</span><a class="l" name="243"> 243 </a> <b>if</b> (!<a href="/source/s?defs=silent_pass">silent_pass</a>) {<a class="l" name="244"> 244 </a> <span class="c">/* l10n_NOTE : 'done' as in "Erasing track 1...done" */</span><a class="l" name="245"> 245 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"done.\n"</span>));<a class="l" name="246"> 246 </a> }<a class="l" name="247"> 247 </a><a class="l" name="248"> 248 </a> <span class="c">/*<a class="l" name="249"> 249 </a> * some cruft left from all blanking, this has been seen on some<a class="hl" name="250"> 250 </a> * newer drives including Toshiba SD-6112 DVD-RW and Sony 510A.<a class="l" name="251"> 251 </a> * we will do a second pass with a recursive call to blank the<a class="l" name="252"> 252 </a> * lead-in.<a class="l" name="253"> 253 </a> */</span><a class="l" name="254"> 254 </a> <b>if</b> (<a href="/source/s?defs=type">type</a> == <a href="/source/s?defs=ALL">ALL</a>) {<a class="l" name="255"> 255 </a> <b>if</b> (<a href="/source/s?defs=check_device">check_device</a>(<a href="/source/s?defs=target">target</a>, <a href="/source/s?defs=CHECK_MEDIA_IS_NOT_BLANK">CHECK_MEDIA_IS_NOT_BLANK</a>)) {<a class="l" name="256"> 256 </a> <a href="/source/s?defs=blanking_type">blanking_type</a> = <span class="s">"clear"</span>;<a class="l" name="257"> 257 </a> <a href="/source/s?defs=blank">blank</a>();<a class="l" name="258"> 258 </a> <b>if</b> (<a href="/source/s?defs=silent_pass">silent_pass</a>)<a class="l" name="259"> 259 </a> <b>return</b>;<a class="hl" name="260"> 260 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">0</span>);<a class="l" name="261"> 261 </a> }<a class="l" name="262"> 262 </a> }<a class="l" name="263"> 263 </a><a class="l" name="264"> 264 </a> <span class="c">/*<a class="l" name="265"> 265 </a> * We erased part of the leadout for the media to unclose<a class="l" name="266"> 266 </a> * the disk, we still need to generate an appendable leadout<a class="l" name="267"> 267 </a> * so that the next track can be written. so do not eject or exit.<a class="l" name="268"> 268 </a> */</span><a class="l" name="269"> 269 </a> <b>if</b> (<a href="/source/s?defs=silent_pass">silent_pass</a>)<a class="hl" name="270"> 270 </a> <b>return</b>;<a class="l" name="271"> 271 </a><a class="l" name="272"> 272 </a> <b>if</b> (<a href="/source/s?defs=vol_running">vol_running</a>)<a class="l" name="273"> 273 </a> (<b>void</b>) <a href="/source/s?defs=eject_media">eject_media</a>(<a href="/source/s?defs=target">target</a>);<a class="l" name="274"> 274 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">0</span>);<a class="l" name="275"> 275 </a><a href="/source/s?defs=blank_failed">blank_failed</a>:<a class="l" name="276"> 276 </a> <b>if</b> ((<a href="/source/s?defs=type">type</a> != <a href="/source/s?defs=ALL">ALL</a>) && !<a href="/source/s?defs=silent_pass">silent_pass</a>) {<a class="l" name="277"> 277 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"Try using blanking type 'all'\n"</span>);<a class="l" name="278"> 278 </a> }<a class="l" name="279"> 279 </a> <b>if</b> (<a href="/source/s?defs=silent_pass">silent_pass</a>)<a class="hl" name="280"> 280 </a> <b>return</b>;<a class="l" name="281"> 281 </a> <b>if</b> (<a href="/source/s?defs=vol_running">vol_running</a>)<a class="l" name="282"> 282 </a> (<b>void</b>) <a href="/source/s?defs=eject_media">eject_media</a>(<a href="/source/s?defs=target">target</a>);<a class="l" name="283"> 283 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="284"> 284 </a>}<a class="l" name="285"> 285 </a></pre></div><div id="Footer"><p class="Center"><a href="http://www.opensolaris.org/os/project/opengrok/"><img src="/source/default/img/servedby.png" alt="Served by OpenGrok" title="Served by OpenGrok"/></a></p><p class="Center"><a href="http://www.opensolaris.org/os/tou/">Terms of Use</a> |<a href="http://www.sun.com/privacy/">Privacy</a> |<a href="http://www.opensolaris.org/os/trademark/">Trademarks</a> |<a href="http://www.opensolaris.org/os/copyrights/">Copyright Policy</a> |<a href="http://www.opensolaris.org/os/site_guidelines/">Site Guidelines</a> |<a href="http://www.opensolaris.org/os/about/help/">Help</a><br />Your use of this web site or any of its content or software indicates your agreement to be bound by these Terms of Use.<br />Copyright © 1995-2008 Sun Microsystems, Inc.<br /></p><script type="text/javascript" src="http://www.opensolaris.org/js/s_code_remote.js"></script></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -