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

📄 trackio.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<a class="l" name="187">    187 </a><a class="l" name="188">    188 </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="189">    189 </a><a class="hl" name="190">    190 </a>		<b>if</b> (!<a href="/source/s?defs=write10">write10</a>(<a href="/source/s?defs=tio_fd">tio_fd</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 class="l" name="191">    191 </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=tio_iobs">tio_iobs</a>[i].<a href="/source/s?defs=iob_buf">iob_buf</a>,<a class="l" name="192">    192 </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="193">    193 </a><a class="l" name="194">    194 </a>			<b>int</b> <a href="/source/s?defs=err">err</a> = <a href="/source/s?defs=errno">errno</a>;<a class="l" name="195">    195 </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="196">    196 </a>			<b>if</b> (<a href="/source/s?defs=err">err</a>)<a class="l" name="197">    197 </a>				<a href="/source/s?defs=tio_errno">tio_errno</a> = <a href="/source/s?defs=err">err</a>;<a class="l" name="198">    198 </a>			<b>else</b><a class="l" name="199">    199 </a>				<a href="/source/s?defs=tio_errno">tio_errno</a> = -<span class="n">1</span>;<a class="hl" name="200">    200 </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="201">    201 </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="202">    202 </a>			<a href="/source/s?defs=thr_exit">thr_exit</a>((<b>void</b> *)<span class="n">2</span>);<a class="l" name="203">    203 </a>		}<a class="l" name="204">    204 </a><a class="l" name="205">    205 </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="206">    206 </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_EMPTY">IOBS_EMPTY</a>;<a class="l" name="207">    207 </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="208">    208 </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="209">    209 </a>		i++;<a class="hl" name="210">    210 </a>		<b>if</b> (i == <a href="/source/s?defs=NIOBS">NIOBS</a>)<a class="l" name="211">    211 </a>			i = <span class="n">0</span>;<a class="l" name="212">    212 </a>#<b>ifndef</b> <a href="/source/s?defs=lint">lint</a><a class="l" name="213">    213 </a>	}<a class="l" name="214">    214 </a>#<b>endif</b><a class="l" name="215">    215 </a>	<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="216">    216 </a>}<a class="l" name="217">    217 </a><a class="l" name="218">    218 </a><span class="c">/* ARGSUSED */</span><a class="l" name="219">    219 </a><b>static</b> <b>void</b> *<a class="hl" name="220">    220 </a><a href="/source/s?defs=progress_callback">progress_callback</a>(<b>void</b> *<a href="/source/s?defs=arg">arg</a>)<a class="l" name="221">    221 </a>{<a class="l" name="222">    222 </a>	<b>int</b> <a href="/source/s?defs=ret">ret</a>;<a class="l" name="223">    223 </a><a class="l" name="224">    224 </a><a href="/source/s?defs=pc_again">pc_again</a>:<a class="l" name="225">    225 </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="226">    226 </a>	<b>if</b> (!<a href="/source/s?defs=pcb_done">pcb_done</a>) {<a class="l" name="227">    227 </a>		(<b>void</b>) <a href="/source/s?defs=cond_wait">cond_wait</a>(&amp;<a href="/source/s?defs=pcb_cond">pcb_cond</a>, &amp;<a href="/source/s?defs=pcb_mutex">pcb_mutex</a>);<a class="l" name="228">    228 </a>	}<a class="l" name="229">    229 </a>	<b>if</b> (<a href="/source/s?defs=pcb_done">pcb_done</a>) {<a class="hl" name="230">    230 </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="231">    231 </a>		<b>if</b> (<a href="/source/s?defs=tio_got_ctrl_c">tio_got_ctrl_c</a>) {<a class="l" name="232">    232 </a>			<a href="/source/s?defs=pcb_cb">pcb_cb</a>(<a href="/source/s?defs=pcb_arg">pcb_arg</a>, <span class="n">0xFFFFFFFF</span>);<a class="l" name="233">    233 </a>		}<a class="l" name="234">    234 </a>		<a href="/source/s?defs=thr_exit">thr_exit</a>((<b>void</b> *)<span class="n">0</span>);<a class="l" name="235">    235 </a>	}<a class="l" name="236">    236 </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="237">    237 </a>	<a href="/source/s?defs=ret">ret</a> = <a href="/source/s?defs=pcb_cb">pcb_cb</a>(<a href="/source/s?defs=pcb_arg">pcb_arg</a>, <a href="/source/s?defs=pcb_completed_io_size">pcb_completed_io_size</a>);<a class="l" name="238">    238 </a>	<b>if</b> (<a href="/source/s?defs=ret">ret</a> != <span class="n">0</span>) {<a class="l" name="239">    239 </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="hl" name="240">    240 </a>		<a href="/source/s?defs=pcb_user_abort">pcb_user_abort</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a>)<a href="/source/s?defs=ret">ret</a>;<a class="l" name="241">    241 </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="242">    242 </a>		<a href="/source/s?defs=thr_exit">thr_exit</a>((<b>void</b> *)<span class="n">0</span>);<a class="l" name="243">    243 </a>	}<a class="l" name="244">    244 </a>#<b>ifdef</b> <a href="/source/s?defs=lint">lint</a><a class="l" name="245">    245 </a>	<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="246">    246 </a>#<b>else</b><a class="l" name="247">    247 </a>	<b>goto</b> <a href="/source/s?defs=pc_again">pc_again</a>;<a class="l" name="248">    248 </a>#<b>endif</b><a class="l" name="249">    249 </a>}<a class="hl" name="250">    250 </a><a class="l" name="251">    251 </a><span class="c">/* ARGSUSED */</span><a class="l" name="252">    252 </a><b>static</b> <b>void</b><a class="l" name="253">    253 </a><a href="/source/s?defs=trackio_sig_handler">trackio_sig_handler</a>(<b>int</b> i)<a class="l" name="254">    254 </a>{<a class="l" name="255">    255 </a>	<span class="c">/* Dont need mutex as it is only modified here */</span><a class="l" name="256">    256 </a>	<a href="/source/s?defs=tio_got_ctrl_c">tio_got_ctrl_c</a> = <span class="n">1</span>;<a class="l" name="257">    257 </a>	(<b>void</b>) <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="258">    258 </a>}<a class="l" name="259">    259 </a><a class="hl" name="260">    260 </a><b>int</b><a class="l" name="261">    261 </a><a href="/source/s?defs=write_track">write_track</a>(<a href="/source/s?defs=cd_device">cd_device</a> *<a href="/source/s?defs=dev">dev</a>, <b>struct</b> <a href="/source/s?defs=track_info">track_info</a> *<a href="/source/s?defs=ti">ti</a>, <a href="/source/s?defs=bstreamhandle">bstreamhandle</a> h,<a class="l" name="262">    262 </a>	<b>int</b> (*<a href="/source/s?defs=cb">cb</a>)(<a href="/source/s?defs=int64_t">int64_t</a>, <a href="/source/s?defs=int64_t">int64_t</a>), <a href="/source/s?defs=int64_t">int64_t</a> <a href="/source/s?defs=arg">arg</a>, <b>struct</b> <a href="/source/s?defs=trackio_error">trackio_error</a> *<a href="/source/s?defs=te">te</a>)<a class="l" name="263">    263 </a>{<a class="l" name="264">    264 </a>	<b>int</b>			<a href="/source/s?defs=blksize">blksize</a>, i, <a href="/source/s?defs=sz_read">sz_read</a>, <a href="/source/s?defs=rem">rem</a>;<a class="l" name="265">    265 </a>	<a href="/source/s?defs=uint32_t">uint32_t</a>		<a href="/source/s?defs=start_b">start_b</a>;<a class="l" name="266">    266 </a>	<a href="/source/s?defs=thread_t">thread_t</a>		<a href="/source/s?defs=tio_thread">tio_thread</a>, <a href="/source/s?defs=pc_thread">pc_thread</a>;<a class="l" name="267">    267 </a>	<b>int</b>			<a href="/source/s?defs=write_cd_thr_created">write_cd_thr_created</a>;<a class="l" name="268">    268 </a>	<b>int</b>			<a href="/source/s?defs=progress_callback_thr_created">progress_callback_thr_created</a>;<a class="l" name="269">    269 </a>	<b>int</b>			<a href="/source/s?defs=signal_handler_installed">signal_handler_installed</a>;<a class="hl" name="270">    270 </a>	<b>int</b>			<a href="/source/s?defs=retval">retval</a>;<a class="l" name="271">    271 </a>	<b>void</b>			(*<a href="/source/s?defs=ohandler">ohandler</a>)(<b>int</b>);<a class="l" name="272">    272 </a><a class="l" name="273">    273 </a>	<a href="/source/s?defs=write_cd_thr_created">write_cd_thr_created</a> = <a href="/source/s?defs=progress_callback_thr_created">progress_callback_thr_created</a> = <span class="n">0</span>;<a class="l" name="274">    274 </a>	<a href="/source/s?defs=signal_handler_installed">signal_handler_installed</a> = <a href="/source/s?defs=retval">retval</a> = <span class="n">0</span>;<a class="l" name="275">    275 </a><a class="l" name="276">    276 </a>	<b>if</b> (<a href="/source/s?defs=ti">ti</a>-&gt;<a href="/source/s?defs=ti_track_mode">ti_track_mode</a> &amp; <span class="n">4</span>)<a class="l" name="277">    277 </a>		<a href="/source/s?defs=blksize">blksize</a> = <a href="/source/s?defs=DATA_TRACK_BLKSIZE">DATA_TRACK_BLKSIZE</a>;<a class="l" name="278">    278 </a>	<b>else</b><a class="l" name="279">    279 </a>		<a href="/source/s?defs=blksize">blksize</a> = <a href="/source/s?defs=AUDIO_TRACK_BLKSIZE">AUDIO_TRACK_BLKSIZE</a>;<a class="hl" name="280">    280 </a><a class="l" name="281">    281 </a>	<span class="c">/* Initialize buffers */</span><a class="l" name="282">    282 </a>	<a href="/source/s?defs=init_tio_data">init_tio_data</a>(<a href="/source/s?defs=NBLKS_PER_BUF">NBLKS_PER_BUF</a>*<a href="/source/s?defs=blksize">blksize</a>);<a class="l" name="283">    283 </a><a class="l" name="284">    284 </a>	<span class="c">/* Fill in all buffers before starting */</span><a class="l" name="285">    285 </a>	<a href="/source/s?defs=start_b">start_b</a> = <a href="/source/s?defs=ti">ti</a>-&gt;<a href="/source/s?defs=ti_start_address">ti_start_address</a>;<a class="l" name="286">    286 </a><a class="l" name="287">    287 </a>	<span class="c">/*<a class="l" name="288">    288 </a>	 * Start filling initial buffer to ensure that there is plenty of<a class="l" name="289">    289 </a>	 * data when writing begins.<a class="hl" name="290">    290 </a>	 */</span><a class="l" name="291">    291 </a>	<b>for</b> (i = <span class="n">0</span>; i &lt; <a href="/source/s?defs=NIOBS">NIOBS</a>; i++) {<a class="l" name="292">    292 </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="293">    293 </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="294">    294 </a><a class="l" name="295">    295 </a><a class="l" name="296">    296 </a>		<span class="c">/*<a class="l" name="297">    297 </a>		 * We need to read the source file into the buffer and make<a class="l" name="298">    298 </a>		 * sure that the data in the buffer is a multiple of the<a class="l" name="299">    299 </a>		 * blocksize (data or audio blocksize). iob_total_size is a<a class="hl" name="300">    300 </a>		 * multiple of the blocksize so this case should only be<a class="l" name="301">    301 </a>		 * encountered at EOF or from piped input.<a class="l" name="302">    302 </a>		 */</span><a class="l" name="303">    303 </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="304">    304 </a>			<b>int</b> <a href="/source/s?defs=ret">ret</a>;<a class="l" name="305">    305 </a><a class="l" name="306">    306 </a>			<span class="c">/*<a class="l" name="307">    307 </a>			 * rem contains the amount of data past the previous<a class="l" name="308">    308 </a>			 * block boundry. we need to subtract it from the<a class="l" name="309">    309 </a>			 * blocksize to get the amount needed to reach the<a class="hl" name="310">    310 </a>			 * next block boundry.<a class="l" name="311">    311 </a>			 */</span><a class="l" name="312">    312 </a><a class="l" name="313">    313 </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;

⌨️ 快捷键说明

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