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

📄 trackio.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<a class="l" name="314">    314 </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="315">    315 </a><a class="l" name="316">    316 </a>			<span class="c">/*<a class="l" name="317">    317 </a>			 * This should not occur, but we are trying to<a class="l" name="318">    318 </a>			 * write past the end of the buffer. return<a class="l" name="319">    319 </a>			 * with an error.<a class="hl" name="320">    320 </a>			 */</span><a class="l" name="321">    321 </a>				<a href="/source/s?defs=sz_read">sz_read</a> = -<span class="n">1</span>;<a class="l" name="322">    322 </a>				<b>break</b>;<a class="l" name="323">    323 </a>			}<a class="l" name="324">    324 </a><a class="l" name="325">    325 </a>			<span class="c">/*<a class="l" name="326">    326 </a>			 * Try to continue reading in case the data is being<a class="l" name="327">    327 </a>			 * piped in.<a class="l" name="328">    328 </a>			 */</span><a class="l" name="329">    329 </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="hl" name="330">    330 </a>			    (<a href="/source/s?defs=blksize">blksize</a> - <a href="/source/s?defs=rem">rem</a>));<a class="l" name="331">    331 </a><a class="l" name="332">    332 </a>			<b>if</b> (<a href="/source/s?defs=ret">ret</a> &lt; <span class="n">0</span>) {<a class="l" name="333">    333 </a>				<a href="/source/s?defs=sz_read">sz_read</a> = <a href="/source/s?defs=ret">ret</a>;<a class="l" name="334">    334 </a>				<b>break</b>;<a class="l" name="335">    335 </a>			}<a class="l" name="336">    336 </a><a class="l" name="337">    337 </a>			<span class="c">/*<a class="l" name="338">    338 </a>			 * No more data. We need to make sure that we are<a class="l" name="339">    339 </a>			 * aligned with the blocksize. so pad the rest of<a class="hl" name="340">    340 </a>			 * the buffer with 0s<a class="l" name="341">    341 </a>			 */</span><a class="l" name="342">    342 </a><a class="l" name="343">    343 </a>			<b>if</b> (<a href="/source/s?defs=ret">ret</a> == <span class="n">0</span>) {<a class="l" name="344">    344 </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="345">    345 </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="346">    346 </a>				    <span class="n">0</span>, <a href="/source/s?defs=ret">ret</a>);<a class="l" name="347">    347 </a>			}<a class="l" name="348">    348 </a>			<a href="/source/s?defs=sz_read">sz_read</a> += <a href="/source/s?defs=ret">ret</a>;<a class="l" name="349">    349 </a>		}<a class="hl" name="350">    350 </a><a class="l" name="351">    351 </a>		<b>if</b> (<a href="/source/s?defs=sz_read">sz_read</a> &lt; <span class="n">0</span>) {<a class="l" name="352">    352 </a><a class="l" name="353">    353 </a>			<span class="c">/* reading the source failed, clean up and return */</span><a class="l" name="354">    354 </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="355">    355 </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="356">    356 </a>			<b>goto</b> <a href="/source/s?defs=write_track_failed">write_track_failed</a>;<a class="l" name="357">    357 </a>		}<a class="l" name="358">    358 </a><a class="l" name="359">    359 </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="hl" name="360">    360 </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="l" name="361">    361 </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="362">    362 </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="363">    363 </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="364">    364 </a>		<b>if</b> (<a href="/source/s?defs=sz_read">sz_read</a> == <span class="n">0</span>)<a class="l" name="365">    365 </a>			<b>break</b>;<a class="l" name="366">    366 </a>	}<a class="l" name="367">    367 </a><a class="l" name="368">    368 </a>	<a href="/source/s?defs=tio_fd">tio_fd</a> = <a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_fd">d_fd</a>;<a class="l" name="369">    369 </a>	<a href="/source/s?defs=tio_trackno">tio_trackno</a> = <a href="/source/s?defs=ti">ti</a>-&gt;<a href="/source/s?defs=ti_track_no">ti_track_no</a>;<a class="hl" name="370">    370 </a><a class="l" name="371">    371 </a>	<span class="c">/* Install signal handler for CTRL-C */</span><a class="l" name="372">    372 </a>	<a href="/source/s?defs=ohandler">ohandler</a> = <a href="/source/s?defs=signal">signal</a>(<a href="/source/s?defs=SIGINT">SIGINT</a>, <a href="/source/s?defs=trackio_sig_handler">trackio_sig_handler</a>);<a class="l" name="373">    373 </a>	<b>if</b> (<a href="/source/s?defs=ohandler">ohandler</a>) {<a class="l" name="374">    374 </a>		<a href="/source/s?defs=signal_handler_installed">signal_handler_installed</a> = <span class="n">1</span>;<a class="l" name="375">    375 </a>	}<a class="l" name="376">    376 </a><a class="l" name="377">    377 </a>	<span class="c">/* Create thread which will issue commands to write to device */</span><a class="l" name="378">    378 </a>	<b>if</b> (<a href="/source/s?defs=thr_create">thr_create</a>(<span class="n">0</span>, <span class="n">0</span>, <a href="/source/s?defs=write_to_cd">write_to_cd</a>, <a href="/source/s?defs=NULL">NULL</a>,<a class="l" name="379">    379 </a>	    <a href="/source/s?defs=THR_BOUND">THR_BOUND</a> | <a href="/source/s?defs=THR_NEW_LWP">THR_NEW_LWP</a>, &amp;<a href="/source/s?defs=tio_thread">tio_thread</a>) != <span class="n">0</span>) {<a class="hl" name="380">    380 </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="381">    381 </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="382">    382 </a>		<b>goto</b> <a href="/source/s?defs=write_track_failed">write_track_failed</a>;<a class="l" name="383">    383 </a>	}<a class="l" name="384">    384 </a>	<a href="/source/s?defs=write_cd_thr_created">write_cd_thr_created</a> = <span class="n">1</span>;<a class="l" name="385">    385 </a><a class="l" name="386">    386 </a>	<span class="c">/* If caller specified a callback, create a thread to do callbacks */</span><a class="l" name="387">    387 </a>	<b>if</b> (<a href="/source/s?defs=cb">cb</a> != <a href="/source/s?defs=NULL">NULL</a>) {<a class="l" name="388">    388 </a>		<a href="/source/s?defs=init_pcb_data">init_pcb_data</a>();<a class="l" name="389">    389 </a>		<a href="/source/s?defs=pcb_cb">pcb_cb</a> = <a href="/source/s?defs=cb">cb</a>;<a class="hl" name="390">    390 </a>		<a href="/source/s?defs=pcb_arg">pcb_arg</a> = <a href="/source/s?defs=arg">arg</a>;<a class="l" name="391">    391 </a>		<b>if</b> (<a href="/source/s?defs=thr_create">thr_create</a>(<span class="n">0</span>, <span class="n">0</span>, <a href="/source/s?defs=progress_callback">progress_callback</a>, <a href="/source/s?defs=NULL">NULL</a>,<a class="l" name="392">    392 </a>		    <a href="/source/s?defs=THR_BOUND">THR_BOUND</a> | <a href="/source/s?defs=THR_NEW_LWP">THR_NEW_LWP</a>, &amp;<a href="/source/s?defs=pc_thread">pc_thread</a>) != <span class="n">0</span>) {<a class="l" name="393">    393 </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="394">    394 </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="395">    395 </a>			<b>goto</b> <a href="/source/s?defs=write_track_failed">write_track_failed</a>;<a class="l" name="396">    396 </a>		}<a class="l" name="397">    397 </a>		<a href="/source/s?defs=progress_callback_thr_created">progress_callback_thr_created</a> = <span class="n">1</span>;<a class="l" name="398">    398 </a>	}<a class="l" name="399">    399 </a><a class="hl" name="400">    400 </a>	i = <span class="n">0</span>;<a class="l" name="401">    401 </a>	<b>while</b> (<a href="/source/s?defs=sz_read">sz_read</a> != <span class="n">0</span>) {<a class="l" name="402">    402 </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="403">    403 </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>) &amp;&amp;<a class="l" name="404">    404 </a>		    (<a href="/source/s?defs=tio_errno">tio_errno</a> == <span class="n">0</span>) &amp;&amp; (<a href="/source/s?defs=pcb_user_abort">pcb_user_abort</a> == <span class="n">0</span>)) {<a class="l" name="405">    405 </a><a class="l" name="406">    406 </a>			<span class="c">/* Do callbacks only if there is nothing else to do */</span><a class="l" name="407">    407 </a>			<b>if</b> (<a href="/source/s?defs=cb">cb</a> != <a href="/source/s?defs=NULL">NULL</a>) {<a class="l" name="408">    408 </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="409">    409 </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="hl" name="410">    410 </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="411">    411 </a>			}<a class="l" name="412">    412 </a><a class="l" name="413">    413 </a>			<span class="c">/* If user requested abort, bail out */</span><a class="l" name="414">    414 </a>			<b>if</b> (<a href="/source/s?defs=pcb_user_abort">pcb_user_abort</a> || <a href="/source/s?defs=tio_got_ctrl_c">tio_got_ctrl_c</a>) {<a class="l" name="415">    415 </a>				<b>break</b>;<a class="l" name="416">    416 </a>			}<a class="l" name="417">    417 </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="418">    418 </a>		}<a class="l" name="419">    419 </a>		<b>if</b> (<a href="/source/s?defs=pcb_user_abort">pcb_user_abort</a> || <a href="/source/s?defs=tio_got_ctrl_c">tio_got_ctrl_c</a>) {<a class="hl" name="420">    420 </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="421">    421 </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_USER_ABORT">TRACKIO_ERR_USER_ABORT</a>;<a class="l" name="422">    422 </a>			<b>goto</b> <a href="/source/s?defs=write_track_failed">write_track_failed</a>;<a class="l" name="423">    423 </a>		}<a class="l" name="424">    424 </a>		<span class="c">/*<a class="l" name="425">    425 </a>		 * We've got a transport error, stop writing, save all<a class="l" name="426">    426 </a>		 * of the error information and clean up the threads.<a class="l" name="427">    427 </a>		 */</span><a class="l" name="428">    428 </a>		<b>if</b> (<a href="/source/s?defs=tio_errno">tio_errno</a> != <span class="n">0</span>) {<a class="l" name="429">    429 </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="430">    430 </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="431">    431 </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="432">    432 </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="433">    433 </a>			<b>if</b> (<a href="/source/s?defs=uscsi_status">uscsi_status</a> == <span class="n">2</span>) {<a class="l" name="434">    434 </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="l" name="435">    435 </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="436">    436 </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="437">    437 </a>			}<a class="l" name="438">    438 </a>			<b>goto</b> <a href="/source/s?defs=write_track_failed">write_track_failed</a>;<a class="l" name="439">    439 </a>		}<a class="hl" name="440">    440 </a>		<a href="/source/s?defs=pcb_completed_io_size">pcb_completed_io_size</a> += <a href="/source/s?defs=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_data_size">iob_data_size</a>;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -