⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 trackio.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<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>(&amp;<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-&gt;<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>)) &gt;<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-&gt;<a href="/source/s?defs=bstr_read">bstr_read</a>(h, &amp;<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> &lt; <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>(&amp;<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> &lt; <span class="n">0</span>) {<a class="l" name="503">    503 </a>			<a href="/source/s?defs=te">te</a>-&gt;<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>-&gt;<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>(&amp;<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>(&amp;<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>(&amp;<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>(&amp;<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>) &amp;&amp; (<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>(&amp;<a href="/source/s?defs=tio_cond">tio_cond</a>, &amp;<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>-&gt;<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>-&gt;<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>-&gt;<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>-&gt;<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>) &amp; <span class="n">0xf</span>;<a class="hl" name="530">    530 </a>				<a href="/source/s?defs=te">te</a>-&gt;<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>-&gt;<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>(&amp;<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>(&amp;<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>(&amp;<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>(&amp;<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>(&amp;<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>(&amp;<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>(&amp;<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>(&amp;<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>(&amp;<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 + -