📄 trackio.c.htm
字号:
<a class="l" name="441"> 441 </a> <a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_state">iob_state</a> = <a href="/source/s?defs=IOBS_UNDER_FILE_IO">IOBS_UNDER_FILE_IO</a>;<a class="l" name="442"> 442 </a> (<b>void</b>) <a href="/source/s?defs=mutex_unlock">mutex_unlock</a>(&<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="l" name="443"> 443 </a><a class="l" name="444"> 444 </a> <a href="/source/s?defs=sz_read">sz_read</a> = h-><a href="/source/s?defs=bstr_read">bstr_read</a>(h, <a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_buf">iob_buf</a>,<a class="l" name="445"> 445 </a> <a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_total_size">iob_total_size</a>);<a class="l" name="446"> 446 </a><a class="l" name="447"> 447 </a> <span class="c">/*<a class="l" name="448"> 448 </a> * We need to read the source file into the buffer and make<a class="l" name="449"> 449 </a> * sure that the data in the buffer is a multiple of the<a class="hl" name="450"> 450 </a> * blocksize (data or audio blocksize). this case should only<a class="l" name="451"> 451 </a> * be encountered at EOF or from piped input.<a class="l" name="452"> 452 </a> */</span><a class="l" name="453"> 453 </a><a class="l" name="454"> 454 </a> <b>while</b> ((<a href="/source/s?defs=rem">rem</a> = (<a href="/source/s?defs=sz_read">sz_read</a> % <a href="/source/s?defs=blksize">blksize</a>)) != <span class="n">0</span>) {<a class="l" name="455"> 455 </a> <b>int</b> <a href="/source/s?defs=ret">ret</a>;<a class="l" name="456"> 456 </a><a class="l" name="457"> 457 </a><a class="l" name="458"> 458 </a> <span class="c">/*<a class="l" name="459"> 459 </a> * This should not occur, we are trying to write<a class="hl" name="460"> 460 </a> * past the end of the buffer, return error.<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=sz_read">sz_read</a> + (<a href="/source/s?defs=blksize">blksize</a> - <a href="/source/s?defs=rem">rem</a>)) ><a class="l" name="464"> 464 </a> <a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_total_size">iob_total_size</a>) {<a class="l" name="465"> 465 </a><a class="l" name="466"> 466 </a> <a href="/source/s?defs=sz_read">sz_read</a> = -<span class="n">1</span>;<a class="l" name="467"> 467 </a> <b>break</b>;<a class="l" name="468"> 468 </a> }<a class="l" name="469"> 469 </a><a class="hl" name="470"> 470 </a> <span class="c">/*<a class="l" name="471"> 471 </a> * Try to continue reading in case the data is being<a class="l" name="472"> 472 </a> * piped in.<a class="l" name="473"> 473 </a> */</span><a class="l" name="474"> 474 </a><a class="l" name="475"> 475 </a> <a href="/source/s?defs=ret">ret</a> = h-><a href="/source/s?defs=bstr_read">bstr_read</a>(h, &<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_buf">iob_buf</a>[<a href="/source/s?defs=sz_read">sz_read</a>],<a class="l" name="476"> 476 </a> (<a href="/source/s?defs=blksize">blksize</a> - <a href="/source/s?defs=rem">rem</a>));<a class="l" name="477"> 477 </a><a class="l" name="478"> 478 </a> <b>if</b> (<a href="/source/s?defs=ret">ret</a> < <span class="n">0</span>) {<a class="l" name="479"> 479 </a> <a href="/source/s?defs=sz_read">sz_read</a> = <a href="/source/s?defs=ret">ret</a>;<a class="hl" name="480"> 480 </a> <b>break</b>;<a class="l" name="481"> 481 </a> }<a class="l" name="482"> 482 </a><a class="l" name="483"> 483 </a> <span class="c">/*<a class="l" name="484"> 484 </a> * No more data. We need to make sure that we are<a class="l" name="485"> 485 </a> * aligned with the blocksize. so pad the rest of<a class="l" name="486"> 486 </a> * the buffer with 0s<a class="l" name="487"> 487 </a> */</span><a class="l" name="488"> 488 </a><a class="l" name="489"> 489 </a> <b>if</b> (<a href="/source/s?defs=ret">ret</a> == <span class="n">0</span>) {<a class="hl" name="490"> 490 </a> <span class="c">/*<a class="l" name="491"> 491 </a> * rem contains the amount of data past the<a class="l" name="492"> 492 </a> * previous block boundry. we need to subtract<a class="l" name="493"> 493 </a> * it from the blocksize to get the amount<a class="l" name="494"> 494 </a> * needed to reach the next block boundry.<a class="l" name="495"> 495 </a> */</span><a class="l" name="496"> 496 </a> <a href="/source/s?defs=ret">ret</a> = <a href="/source/s?defs=blksize">blksize</a> - <a href="/source/s?defs=rem">rem</a>;<a class="l" name="497"> 497 </a> (<b>void</b>) <a href="/source/s?defs=memset">memset</a>(&<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_buf">iob_buf</a>[<a href="/source/s?defs=sz_read">sz_read</a>],<a class="l" name="498"> 498 </a> <span class="n">0</span>, <a href="/source/s?defs=ret">ret</a>);<a class="l" name="499"> 499 </a> }<a class="hl" name="500"> 500 </a> <a href="/source/s?defs=sz_read">sz_read</a> += <a href="/source/s?defs=ret">ret</a>;<a class="l" name="501"> 501 </a> }<a class="l" name="502"> 502 </a> <b>if</b> (<a href="/source/s?defs=sz_read">sz_read</a> < <span class="n">0</span>) {<a class="l" name="503"> 503 </a> <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=err_type">err_type</a> = <a href="/source/s?defs=TRACKIO_ERR_SYSTEM">TRACKIO_ERR_SYSTEM</a>;<a class="l" name="504"> 504 </a> <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=te_errno">te_errno</a> = <a href="/source/s?defs=errno">errno</a>;<a class="l" name="505"> 505 </a> <b>goto</b> <a href="/source/s?defs=write_track_failed">write_track_failed</a>;<a class="l" name="506"> 506 </a> }<a class="l" name="507"> 507 </a> (<b>void</b>) <a href="/source/s?defs=mutex_lock">mutex_lock</a>(&<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="l" name="508"> 508 </a> <a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_start_blk">iob_start_blk</a> = <a href="/source/s?defs=start_b">start_b</a>;<a class="l" name="509"> 509 </a> <a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_nblks">iob_nblks</a> = (<a href="/source/s?defs=sz_read">sz_read</a>/<a href="/source/s?defs=blksize">blksize</a>);<a class="hl" name="510"> 510 </a> <a href="/source/s?defs=start_b">start_b</a> += <a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_nblks">iob_nblks</a>;<a class="l" name="511"> 511 </a> <a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_data_size">iob_data_size</a> = <a href="/source/s?defs=sz_read">sz_read</a>;<a class="l" name="512"> 512 </a> <a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_state">iob_state</a> = <a href="/source/s?defs=IOBS_READY">IOBS_READY</a>;<a class="l" name="513"> 513 </a> (<b>void</b>) <a href="/source/s?defs=cond_broadcast">cond_broadcast</a>(&<a href="/source/s?defs=tio_cond">tio_cond</a>);<a class="l" name="514"> 514 </a> (<b>void</b>) <a href="/source/s?defs=mutex_unlock">mutex_unlock</a>(&<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="l" name="515"> 515 </a> i++;<a class="l" name="516"> 516 </a> <b>if</b> (i == <a href="/source/s?defs=NIOBS">NIOBS</a>)<a class="l" name="517"> 517 </a> i = <span class="n">0</span>;<a class="l" name="518"> 518 </a> }<a class="l" name="519"> 519 </a> (<b>void</b>) <a href="/source/s?defs=mutex_lock">mutex_lock</a>(&<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="hl" name="520"> 520 </a> <b>while</b> ((<a href="/source/s?defs=tio_errno">tio_errno</a> == <span class="n">0</span>) && (<a href="/source/s?defs=tio_done">tio_done</a> == <span class="n">0</span>)) {<a class="l" name="521"> 521 </a><a class="l" name="522"> 522 </a> <span class="c">/* Wait for track IO to complete */</span><a class="l" name="523"> 523 </a> (<b>void</b>) <a href="/source/s?defs=cond_wait">cond_wait</a>(&<a href="/source/s?defs=tio_cond">tio_cond</a>, &<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="l" name="524"> 524 </a> <b>if</b> (<a href="/source/s?defs=tio_errno">tio_errno</a> != <span class="n">0</span>) {<a class="l" name="525"> 525 </a> <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=err_type">err_type</a> = <a href="/source/s?defs=TRACKIO_ERR_TRANSPORT">TRACKIO_ERR_TRANSPORT</a>;<a class="l" name="526"> 526 </a> <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=te_errno">te_errno</a> = <a href="/source/s?defs=tio_errno">tio_errno</a>;<a class="l" name="527"> 527 </a> <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=status">status</a> = <a href="/source/s?defs=uscsi_status">uscsi_status</a>;<a class="l" name="528"> 528 </a> <b>if</b> (<a href="/source/s?defs=uscsi_status">uscsi_status</a> == <span class="n">2</span>) {<a class="l" name="529"> 529 </a> <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=key">key</a> = <a href="/source/s?defs=SENSE_KEY">SENSE_KEY</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>) & <span class="n">0xf</span>;<a class="hl" name="530"> 530 </a> <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=asc">asc</a> = <a href="/source/s?defs=ASC">ASC</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>);<a class="l" name="531"> 531 </a> <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=ascq">ascq</a> = <a href="/source/s?defs=ASCQ">ASCQ</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>);<a class="l" name="532"> 532 </a> }<a class="l" name="533"> 533 </a> (<b>void</b>) <a href="/source/s?defs=mutex_unlock">mutex_unlock</a>(&<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="l" name="534"> 534 </a> <b>goto</b> <a href="/source/s?defs=write_track_failed">write_track_failed</a>;<a class="l" name="535"> 535 </a> }<a class="l" name="536"> 536 </a> <b>if</b> (<a href="/source/s?defs=cb">cb</a> != <a href="/source/s?defs=NULL">NULL</a>) {<a class="l" name="537"> 537 </a> <b>while</b> (<a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_state">iob_state</a> == <a href="/source/s?defs=IOBS_EMPTY">IOBS_EMPTY</a>) {<a class="l" name="538"> 538 </a> (<b>void</b>) <a href="/source/s?defs=mutex_lock">mutex_lock</a>(&<a href="/source/s?defs=pcb_mutex">pcb_mutex</a>);<a class="l" name="539"> 539 </a> <a href="/source/s?defs=pcb_completed_io_size">pcb_completed_io_size</a> +=<a class="hl" name="540"> 540 </a> <a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_data_size">iob_data_size</a>;<a class="l" name="541"> 541 </a> (<b>void</b>) <a href="/source/s?defs=cond_broadcast">cond_broadcast</a>(&<a href="/source/s?defs=pcb_cond">pcb_cond</a>);<a class="l" name="542"> 542 </a> (<b>void</b>) <a href="/source/s?defs=mutex_unlock">mutex_unlock</a>(&<a href="/source/s?defs=pcb_mutex">pcb_mutex</a>);<a class="l" name="543"> 543 </a> i++;<a class="l" name="544"> 544 </a> <b>if</b> (i == <a href="/source/s?defs=NIOBS">NIOBS</a>)<a class="l" name="545"> 545 </a> i = <span class="n">0</span>;<a class="l" name="546"> 546 </a> }<a class="l" name="547"> 547 </a> }<a class="l" name="548"> 548 </a> }<a class="l" name="549"> 549 </a> (<b>void</b>) <a href="/source/s?defs=mutex_unlock">mutex_unlock</a>(&<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="hl" name="550"> 550 </a> <a href="/source/s?defs=retval">retval</a> = <span class="n">1</span>;<a class="l" name="551"> 551 </a><a href="/source/s?defs=write_track_failed">write_track_failed</a>:<a class="l" name="552"> 552 </a> <b>if</b> (<a href="/source/s?defs=progress_callback_thr_created">progress_callback_thr_created</a>) {<a class="l" name="553"> 553 </a> <b>if</b> (<a href="/source/s?defs=thr_kill">thr_kill</a>(<a href="/source/s?defs=pc_thread">pc_thread</a>, <span class="n">0</span>) == <span class="n">0</span>) {<a class="l" name="554"> 554 </a> (<b>void</b>) <a href="/source/s?defs=mutex_lock">mutex_lock</a>(&<a href="/source/s?defs=pcb_mutex">pcb_mutex</a>);<a class="l" name="555"> 555 </a><a class="l" name="556"> 556 </a> <a href="/source/s?defs=pcb_done">pcb_done</a> = <span class="n">1</span>;<a class="l" name="557"> 557 </a> (<b>void</b>) <a href="/source/s?defs=cond_broadcast">cond_broadcast</a>(&<a href="/source/s?defs=pcb_cond">pcb_cond</a>);<a class="l" name="558"> 558 </a> (<b>void</b>) <a href="/source/s?defs=mutex_unlock">mutex_unlock</a>(&<a href="/source/s?defs=pcb_mutex">pcb_mutex</a>);<a class="l" name="559"> 559 </a> (<b>void</b>) <a href="/source/s?defs=thr_join">thr_join</a>(<a href="/source/s?defs=pc_thread">pc_thread</a>, <a href="/source/s?defs=NULL">NULL</a>, <a href="/source/s?defs=NULL">NULL</a>);<a class="hl" name="560"> 560 </a> }<a class="l" name="561"> 561 </a> }<a class="l" name="562"> 562 </a> <b>if</b> (<a href="/source/s?defs=write_cd_thr_created">write_cd_thr_created</a>) {<a class="l" name="563"> 563 </a> <b>if</b> (<a href="/source/s?defs=thr_kill">thr_kill</a>(<a href="/source/s?defs=tio_thread">tio_thread</a>, <span class="n">0</span>) == <span class="n">0</span>) {<a class="l" name="564"> 564 </a> (<b>void</b>) <a href="/source/s?defs=mutex_lock">mutex_lock</a>(&<a href="/source/s?defs=tio_mutex">tio_mutex</a>);<a class="l" name="565"> 565 </a> <a hr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -