📄 copycd.c.htm
字号:
<a class="l" name="359"> 359 </a> <a href="/source/s?defs=print_n_flush">print_n_flush</a>(<a class="hl" name="360"> 360 </a> <a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Insert a blank media in the drive and press Enter."</span>));<a class="l" name="361"> 361 </a> (<b>void</b>) <a href="/source/s?defs=fflush">fflush</a>(<a href="/source/s?defs=stdin">stdin</a>);<a class="l" name="362"> 362 </a> <b>if</b> (<a href="/source/s?defs=target">target</a>) {<a class="l" name="363"> 363 </a> <a href="/source/s?defs=fini_device">fini_device</a>(<a href="/source/s?defs=target">target</a>);<a class="l" name="364"> 364 </a> <a href="/source/s?defs=target">target</a> = <a href="/source/s?defs=NULL">NULL</a>;<a class="l" name="365"> 365 </a> }<a class="l" name="366"> 366 </a> (<b>void</b>) <a href="/source/s?defs=getchar">getchar</a>();<a class="l" name="367"> 367 </a> (<b>void</b>) <a href="/source/s?defs=sleep">sleep</a>(<span class="n">4</span>);<a class="l" name="368"> 368 </a> (<b>void</b>) <a href="/source/s?defs=setup_target">setup_target</a>(<a href="/source/s?defs=SCAN_WRITERS">SCAN_WRITERS</a>);<a class="l" name="369"> 369 </a> <b>if</b> (<a href="/source/s?defs=target">target</a>)<a class="hl" name="370"> 370 </a> <a href="/source/s?defs=get_media_type">get_media_type</a>(<a href="/source/s?defs=target">target</a>-><a href="/source/s?defs=d_fd">d_fd</a>);<a class="l" name="371"> 371 </a> } <b>while</b> ((<a href="/source/s?defs=target">target</a> == <a href="/source/s?defs=NULL">NULL</a>) ||<a class="l" name="372"> 372 </a> ((<a href="/source/s?defs=device_type">device_type</a> == <a href="/source/s?defs=DVD_PLUS_W">DVD_PLUS_W</a>)? <a href="/source/s?defs=check_device">check_device</a>(<a href="/source/s?defs=target">target</a>, <a href="/source/s?defs=CHECK_NO_MEDIA">CHECK_NO_MEDIA</a>):<a class="l" name="373"> 373 </a> <a href="/source/s?defs=check_device">check_device</a>(<a href="/source/s?defs=target">target</a>, <a href="/source/s?defs=CHECK_NO_MEDIA">CHECK_NO_MEDIA</a>|<a href="/source/s?defs=CHECK_MEDIA_IS_NOT_BLANK">CHECK_MEDIA_IS_NOT_BLANK</a>)));<a class="l" name="374"> 374 </a><a class="l" name="375"> 375 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"\n"</span>);<a class="l" name="376"> 376 </a> (<b>void</b>) <a href="/source/s?defs=setreuid">setreuid</a>(<a href="/source/s?defs=ruid">ruid</a>, <span class="n">0</span>);<a class="l" name="377"> 377 </a><a class="l" name="378"> 378 </a> <b>if</b> ((<a href="/source/s?defs=device_type">device_type</a> != <a href="/source/s?defs=DVD_PLUS">DVD_PLUS</a>) && (<a href="/source/s?defs=device_type">device_type</a> != <a href="/source/s?defs=DVD_PLUS_W">DVD_PLUS_W</a>)) {<a class="l" name="379"> 379 </a> <a href="/source/s?defs=ensure_media_space">ensure_media_space</a>(<a href="/source/s?defs=total_nblks">total_nblks</a>, <a href="/source/s?defs=end_tno">end_tno</a>);<a class="hl" name="380"> 380 </a> <a href="/source/s?defs=write_init">write_init</a>(<a href="/source/s?defs=audio_cd">audio_cd</a> ? <a href="/source/s?defs=TRACK_MODE_AUDIO">TRACK_MODE_AUDIO</a> : <a href="/source/s?defs=TRACK_MODE_DATA">TRACK_MODE_DATA</a>);<a class="l" name="381"> 381 </a> }<a class="l" name="382"> 382 </a><a class="l" name="383"> 383 </a> <span class="c">/*<a class="l" name="384"> 384 </a> * Simulation writing can't happen on DVD+RW's<a class="l" name="385"> 385 </a> * or DVD+R's. According to the MMC spec this<a class="l" name="386"> 386 </a> * operation is not supported. So we should<a class="l" name="387"> 387 </a> * bail out if the user tries to do a simulation<a class="l" name="388"> 388 </a> * write.<a class="l" name="389"> 389 </a> */</span><a class="hl" name="390"> 390 </a> <b>if</b> (<a href="/source/s?defs=simulation">simulation</a> && (<a href="/source/s?defs=device_type">device_type</a> == <a href="/source/s?defs=DVD_PLUS_W">DVD_PLUS_W</a> ||<a class="l" name="391"> 391 </a> <a href="/source/s?defs=device_type">device_type</a> == <a href="/source/s?defs=DVD_PLUS">DVD_PLUS</a>)) {<a class="l" name="392"> 392 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Media does not support simulated writing.\n"</span>));<a class="l" name="393"> 393 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="394"> 394 </a> }<a class="l" name="395"> 395 </a><a class="l" name="396"> 396 </a> <b>if</b> (<a href="/source/s?defs=device_type">device_type</a> == <a href="/source/s?defs=DVD_PLUS_W">DVD_PLUS_W</a>) {<a class="l" name="397"> 397 </a> <span class="c">/*<a class="l" name="398"> 398 </a> * DVD+RW requires that we format the media before<a class="l" name="399"> 399 </a> * writing.<a class="hl" name="400"> 400 </a> */</span><a class="l" name="401"> 401 </a> (<b>void</b>) <a href="/source/s?defs=print_n_flush">print_n_flush</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Formatting media..."</span>));<a class="l" name="402"> 402 </a> <b>if</b> (!<a href="/source/s?defs=format_media">format_media</a>(<a href="/source/s?defs=target">target</a>-><a href="/source/s?defs=d_fd">d_fd</a>)) {<a class="l" name="403"> 403 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="l" name="404"> 404 </a> <span class="s">"Could not format media\n"</span>));<a class="l" name="405"> 405 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="406"> 406 </a> } <b>else</b> {<a class="l" name="407"> 407 </a> <b>int</b> <a href="/source/s?defs=counter">counter</a>;<a class="l" name="408"> 408 </a> <a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=di">di</a>;<a class="l" name="409"> 409 </a><a class="hl" name="410"> 410 </a> <span class="c">/* poll until format is done */</span><a class="l" name="411"> 411 </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="412"> 412 </a> (<b>void</b>) <a href="/source/s?defs=sleep">sleep</a>(<span class="n">10</span>);<a class="l" name="413"> 413 </a> <b>for</b> (<a href="/source/s?defs=counter">counter</a> = <span class="n">0</span>; <a href="/source/s?defs=counter">counter</a> < <span class="n">200</span>; <a href="/source/s?defs=counter">counter</a>++) {<a class="l" name="414"> 414 </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="415"> 415 </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="l" name="416"> 416 </a> (<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="417"> 417 </a> (<b>void</b>) <a href="/source/s?defs=print_n_flush">print_n_flush</a>(<span class="s">"."</span>);<a class="l" name="418"> 418 </a> (<b>void</b>) <a href="/source/s?defs=sleep">sleep</a>(<span class="n">5</span>);<a class="l" name="419"> 419 </a> } <b>else</b> {<a class="hl" name="420"> 420 </a> <b>break</b>;<a class="l" name="421"> 421 </a> }<a class="l" name="422"> 422 </a> }<a class="l" name="423"> 423 </a> }<a class="l" name="424"> 424 </a> }<a class="l" name="425"> 425 </a><a class="l" name="426"> 426 </a> <span class="c">/* for each track */</span><a class="l" name="427"> 427 </a> <b>for</b> (i = <span class="n">0</span>; i < <a href="/source/s?defs=end_tno">end_tno</a>; i++) {<a class="l" name="428"> 428 </a> <span class="c">/*<a class="l" name="429"> 429 </a> * DVD's dont contain tracks and need to be written in DAO<a class="hl" name="430"> 430 </a> * mode.<a class="l" name="431"> 431 </a> */</span><a class="l" name="432"> 432 </a> <b>if</b> (<a href="/source/s?defs=device_type">device_type</a> != <a href="/source/s?defs=CD_RW">CD_RW</a>) {<a class="l" name="433"> 433 </a> <b>if</b> (<a href="/source/s?defs=end_tno">end_tno</a> > <span class="n">1</span>) {<a class="l" name="434"> 434 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="l" name="435"> 435 </a> <span class="s">"Media state is not suitable for this"</span><a class="l" name="436"> 436 </a> <span class="s">" write mode.\n"</span>));<a class="l" name="437"> 437 </a> }<a class="l" name="438"> 438 </a> <a href="/source/s?defs=write_mode">write_mode</a> = <a href="/source/s?defs=DAO_MODE">DAO_MODE</a>;<a class="l" name="439"> 439 </a><a class="hl" name="440"> 440 </a> <span class="c">/*<a class="l" name="441"> 441 </a> * DVD-R(W) and DVD+R needs to have space reserved<a class="l" name="442"> 442 </a> * prior to writing.<a class="l" name="443"> 443 </a> */</span><a class="l" name="444"> 444 </a> <b>if</b> ((<a href="/source/s?defs=device_type">device_type</a> == <a href="/source/s?defs=DVD_MINUS">DVD_MINUS</a>) ||<a class="l" name="445"> 445 </a> (<a href="/source/s?defs=device_type">device_type</a> == <a href="/source/s?defs=DVD_PLUS">DVD_PLUS</a>)) {<a class="l" name="446"> 446 </a> <b>if</b> (!<a href="/source/s?defs=set_reservation">set_reservation</a>(<a href="/source/s?defs=target">target</a>-><a href="/source/s?defs=d_fd">d_fd</a>,<a class="l" name="447"> 447 </a> <a href="/source/s?defs=total_nblks">total_nblks</a> + <span class="n">1</span>)) {<a class="l" name="448"> 448 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="l" name="449"> 449 </a> <span class="s">"Setting reservation failed\n"</span>));<a class="hl" name="450"> 450 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="451"> 451 </a> }<a class="l" name="452"> 452 </a> }<a class="l" name="453"> 453 </a> }<a class="l" name="454"> 454 </a><a class="l" name="455"> 455 </a> <a href="/source/s?defs=write_next_track">write_next_track</a>(<a href="/source/s?defs=audio_cd">audio_cd</a> ? <a href="/source/s?defs=TRACK_MODE_AUDIO">TRACK_MODE_AUDIO</a> : <a href="/source/s?defs=TRACK_MODE_DATA">TRACK_MODE_DATA</a>,<a class="l" name="456"> 456 </a> <a href="/source/s?defs=tlist">tlist</a>[i].h);<a class="l" name="457"> 457 </a><a class="l" name="458"> 458 </a> <span class="c">/*<a class="l" name="459"> 459 </a> * Running in simulation mode and writing several tracks is<a class="hl" name="460"> 460 </a> * useless so bail after the first track is done.<a class="l" name="461"> 461 </a> */</span><a class="l" name="462"> 462 </a><a class="l" name="463"> 463 </a> <b>if</b> (<a href="/source/s?defs=simulation">simulation</a> && (<a href="/source/s?defs=end_tno">end_tno</a> != <span class="n">1</span>)) {<a class="l" name="464"> 464 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="l" name="465"> 465 </a> <span class="s">"Simulation mode : skipping remaining tracks\n"</span>));<a class="l" name="466"> 466 </a> <b>break</b>;<a class="l" name="467"> 467 </a> }<a class="l" name="468"> 468 </a> }<a class="l" name="469"> 469 </a><a class="hl" name="470"> 470 </a> <a href="/source/s?defs=write_fini">write_fini</a>();<a class="l" name="471"> 471 </a> <span class="c">/* close the temp file handles */</span><a class="l" name="472"> 472 </a> <b>for</b> (i = <span class="n">0</span>; i < <a href="/source/s?defs=end_tno">end_tno</a>; i++)<a class="l" name="473"> 473 </a> (<a href="/source/s?defs=tlist">tlist</a>[i].h)-><a href="/source/s?defs=bstr_close">bstr_close</a>(<a href="/source/s?defs=tlist">tlist</a>[i].h);<a class="l" name="474"> 474 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=tlist">tlist</a>);<a class="l" name="475"> 475 </a> <a href="/source/s?defs=fini_device">fini_device</a>(<a href="/source/s?defs=target">target</a>);<a class="l" name="476"> 476 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">0</span>);<a class="l" name="477"> 477 </a>}<a class="l" name="478"> 478 </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 + -