📄 trackio.c.htm
字号:
<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>(&<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>(&<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>(&<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>(&<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>(&<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>(&<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>(&<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>(&<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>(&<a href="/source/s?defs=pcb_cond">pcb_cond</a>, &<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>(&<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>(&<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>(&<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>(&<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>-><a href="/source/s?defs=ti_track_mode">ti_track_mode</a> & <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>-><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 < <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-><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>)) >
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -