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

📄 bstream.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<a class="l" name="305">    305 </a>		<b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="l" name="306">    306 </a>			(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"ISO 9660 header size not sane.\n"</span>);<a class="l" name="307">    307 </a>		h-&gt;<a href="/source/s?defs=bstr_close">bstr_close</a>(h);<a class="l" name="308">    308 </a>		<a href="/source/s?defs=str_errno">str_errno</a> = <a href="/source/s?defs=STR_ERR_ISO_BAD_HEADER">STR_ERR_ISO_BAD_HEADER</a>;<a class="l" name="309">    309 </a>		<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="hl" name="310">    310 </a>	}<a class="l" name="311">    311 </a><a class="l" name="312">    312 </a>	<b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="l" name="313">    313 </a>		(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"ISO 9660 header size is sane.\n"</span>);<a class="l" name="314">    314 </a><a class="l" name="315">    315 </a>	<span class="c">/* Skip over the boot block sector of the ISO. */</span><a class="l" name="316">    316 </a>	(<b>void</b>) <a href="/source/s?defs=lseek">lseek</a>(h-&gt;<a href="/source/s?defs=bstr_fd">bstr_fd</a>, <a href="/source/s?defs=ISO9660_BOOT_BLOCK_SIZE">ISO9660_BOOT_BLOCK_SIZE</a>, <a href="/source/s?defs=SEEK_SET">SEEK_SET</a>);<a class="l" name="317">    317 </a><a class="l" name="318">    318 </a>	<span class="c">/*<a class="l" name="319">    319 </a>	 * Try to read in the ISO Descriptor and validate this<a class="hl" name="320">    320 </a>	 * is in fact an ISO 9660 image.<a class="l" name="321">    321 </a>	 */</span><a class="l" name="322">    322 </a>	<b>if</b> (<a href="/source/s?defs=read">read</a>(h-&gt;<a href="/source/s?defs=bstr_fd">bstr_fd</a>, <a href="/source/s?defs=iso_desc">iso_desc</a>, <a href="/source/s?defs=ISO9660_PRIMARY_DESC_SIZE">ISO9660_PRIMARY_DESC_SIZE</a>) ==<a class="l" name="323">    323 </a>	    <a href="/source/s?defs=ISO9660_PRIMARY_DESC_SIZE">ISO9660_PRIMARY_DESC_SIZE</a>) {<a class="l" name="324">    324 </a>		<span class="c">/*<a class="l" name="325">    325 </a>		 * Bytes one through five of a valid ISO 9660 cd image<a class="l" name="326">    326 </a>		 * should contain the string CD001. High Sierra format,<a class="l" name="327">    327 </a>		 * the ISO 9660 predecessor, fills this field with the<a class="l" name="328">    328 </a>		 * string CDROM. If neither is the case then we should<a class="l" name="329">    329 </a>		 * close the stream, set str_errno, and return NULL.<a class="hl" name="330">    330 </a>		 */</span><a class="l" name="331">    331 </a>		<b>if</b> (<a href="/source/s?defs=strncmp">strncmp</a>(<a href="/source/s?defs=iso_desc">iso_desc</a> + <a href="/source/s?defs=ISO9660_STD_IDENT_OFFSET">ISO9660_STD_IDENT_OFFSET</a>, <span class="s">"CD001"</span>,<a class="l" name="332">    332 </a>		    <span class="n">5</span>) != <span class="n">0</span> &amp;&amp; <a href="/source/s?defs=strncmp">strncmp</a>(<a href="/source/s?defs=iso_desc">iso_desc</a> + <a href="/source/s?defs=ISO9660_STD_IDENT_OFFSET">ISO9660_STD_IDENT_OFFSET</a>,<a class="l" name="333">    333 </a>		    <span class="s">"CDROM"</span>, <span class="n">5</span>) != <span class="n">0</span>) {<a class="l" name="334">    334 </a>			<b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="l" name="335">    335 </a>				(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"Invalid ISO 9660 identifier.\n"</span>);<a class="l" name="336">    336 </a>			h-&gt;<a href="/source/s?defs=bstr_close">bstr_close</a>(h);<a class="l" name="337">    337 </a>			<a href="/source/s?defs=str_errno">str_errno</a> = <a href="/source/s?defs=STR_ERR_ISO_BAD_HEADER">STR_ERR_ISO_BAD_HEADER</a>;<a class="l" name="338">    338 </a>			<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="339">    339 </a>		}<a class="hl" name="340">    340 </a>	} <b>else</b> {<a class="l" name="341">    341 </a>		h-&gt;<a href="/source/s?defs=bstr_close">bstr_close</a>(h);<a class="l" name="342">    342 </a>		<a href="/source/s?defs=str_errno">str_errno</a> = <a href="/source/s?defs=STR_ERR_ISO_READ_ERR">STR_ERR_ISO_READ_ERR</a>;<a class="l" name="343">    343 </a>		<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="344">    344 </a>	}<a class="l" name="345">    345 </a><a class="l" name="346">    346 </a>	<span class="c">/*<a class="l" name="347">    347 </a>	 * Our ISO image is valid rewind the stream<a class="l" name="348">    348 </a>	 * and return the handle.<a class="l" name="349">    349 </a>	 */</span><a class="hl" name="350">    350 </a>	<b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="l" name="351">    351 </a>		(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"ISO 9660 header is sane.\n"</span>);<a class="l" name="352">    352 </a>	h-&gt;<a href="/source/s?defs=bstr_rewind">bstr_rewind</a>(h);<a class="l" name="353">    353 </a>	<b>return</b> (h);<a class="l" name="354">    354 </a>}<a class="l" name="355">    355 </a><a class="l" name="356">    356 </a><a href="/source/s?defs=bstreamhandle">bstreamhandle</a><a class="l" name="357">    357 </a><a href="/source/s?defs=open_stdin_read_stream">open_stdin_read_stream</a>(<b>void</b>)<a class="l" name="358">    358 </a>{<a class="l" name="359">    359 </a>	<a href="/source/s?defs=bstreamhandle">bstreamhandle</a> h;<a class="hl" name="360">    360 </a>	<b>int</b> <a href="/source/s?defs=mode">mode</a>;<a class="l" name="361">    361 </a><a class="l" name="362">    362 </a>	<a href="/source/s?defs=str_errno">str_errno</a> = <span class="n">0</span>;<a class="l" name="363">    363 </a>	<b>if</b> ((<a href="/source/s?defs=mode">mode</a> = <a href="/source/s?defs=fcntl">fcntl</a>(<span class="n">0</span>, <a href="/source/s?defs=F_GETFD">F_GETFD</a>, <a href="/source/s?defs=NULL">NULL</a>)) &lt; <span class="n">0</span>) {<a class="l" name="364">    364 </a>		<a href="/source/s?defs=str_errno">str_errno</a> = <a href="/source/s?defs=STR_ERR_NO_READ_STDIN">STR_ERR_NO_READ_STDIN</a>;<a class="l" name="365">    365 </a>		<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="366">    366 </a>	}<a class="l" name="367">    367 </a>	<a href="/source/s?defs=mode">mode</a> &amp;= <span class="n">3</span>;<a class="l" name="368">    368 </a>	<b>if</b> ((<a href="/source/s?defs=mode">mode</a> != <a href="/source/s?defs=O_RDONLY">O_RDONLY</a>) &amp;&amp; (<a href="/source/s?defs=mode">mode</a> != <a href="/source/s?defs=O_RDWR">O_RDWR</a>)) {<a class="l" name="369">    369 </a>		<a href="/source/s?defs=str_errno">str_errno</a> = <a href="/source/s?defs=STR_ERR_NO_READ_STDIN">STR_ERR_NO_READ_STDIN</a>;<a class="hl" name="370">    370 </a>		<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="371">    371 </a>	}<a class="l" name="372">    372 </a>	h = (<a href="/source/s?defs=bstreamhandle">bstreamhandle</a>)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<b>sizeof</b> (*h));<a class="l" name="373">    373 </a>	h-&gt;<a href="/source/s?defs=bstr_fd">bstr_fd</a> = <span class="n">0</span>;<a class="l" name="374">    374 </a>	h-&gt;<a href="/source/s?defs=bstr_read">bstr_read</a> = <a href="/source/s?defs=file_stream_read">file_stream_read</a>;<a class="l" name="375">    375 </a>	h-&gt;<a href="/source/s?defs=bstr_close">bstr_close</a> = <a href="/source/s?defs=stdin_stream_close">stdin_stream_close</a>;<a class="l" name="376">    376 </a>	h-&gt;<a href="/source/s?defs=bstr_size">bstr_size</a> = <a href="/source/s?defs=file_stream_size">file_stream_size</a>;<a class="l" name="377">    377 </a>	h-&gt;<a href="/source/s?defs=bstr_rewind">bstr_rewind</a> = <a href="/source/s?defs=stdin_stream_rewind">stdin_stream_rewind</a>;<a class="l" name="378">    378 </a><a class="l" name="379">    379 </a>	<b>return</b> (h);<a class="hl" name="380">    380 </a>}<a class="l" name="381">    381 </a><a class="l" name="382">    382 </a><a href="/source/s?defs=bstreamhandle">bstreamhandle</a><a class="l" name="383">    383 </a><a href="/source/s?defs=open_au_read_stream">open_au_read_stream</a>(<b>char</b> *<a href="/source/s?defs=fname">fname</a>)<a class="l" name="384">    384 </a>{<a class="l" name="385">    385 </a>	<a href="/source/s?defs=bstreamhandle">bstreamhandle</a> h;<a class="l" name="386">    386 </a>	<b>int</b> <a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=sav">sav</a>;<a class="l" name="387">    387 </a>	<a href="/source/s?defs=au_filehdr_t">au_filehdr_t</a> *<a href="/source/s?defs=au">au</a>;<a class="l" name="388">    388 </a>	<b>struct</b> <a href="/source/s?defs=stat">stat</a> <a href="/source/s?defs=st">st</a>;<a class="l" name="389">    389 </a>	<a href="/source/s?defs=uint32_t">uint32_t</a> <a href="/source/s?defs=data_size">data_size</a>;<a class="hl" name="390">    390 </a><a class="l" name="391">    391 </a>	<a href="/source/s?defs=au">au</a> = <a href="/source/s?defs=NULL">NULL</a>;<a class="l" name="392">    392 </a>	<a href="/source/s?defs=str_errno">str_errno</a> = <span class="n">0</span>;<a class="l" name="393">    393 </a>	<a href="/source/s?defs=fd">fd</a> = <a href="/source/s?defs=open">open</a>(<a href="/source/s?defs=fname">fname</a>, <a href="/source/s?defs=O_RDONLY">O_RDONLY</a>);<a class="l" name="394">    394 </a>	<b>if</b> (<a href="/source/s?defs=fd">fd</a> &lt; <span class="n">0</span>)<a class="l" name="395">    395 </a>		<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="396">    396 </a><a class="l" name="397">    397 </a>	<b>if</b> (<a href="/source/s?defs=fstat">fstat</a>(<a href="/source/s?defs=fd">fd</a>, &amp;<a href="/source/s?defs=st">st</a>) &lt; <span class="n">0</span>) {<a class="l" name="398">    398 </a>		<b>goto</b> <a href="/source/s?defs=au_open_failed">au_open_failed</a>;<a class="l" name="399">    399 </a>	}<a class="hl" name="400">    400 </a>	<b>if</b> ((<a href="/source/s?defs=st">st</a>.<a href="/source/s?defs=st_mode">st_mode</a> &amp; <a href="/source/s?defs=S_IFMT">S_IFMT</a>) != <a href="/source/s?defs=S_IFREG">S_IFREG</a>) {<a class="l" name="401">    401 </a>		<a href="/source/s?defs=str_errno">str_errno</a> = <a href="/source/s?defs=STR_ERR_NO_REG_FILE">STR_ERR_NO_REG_FILE</a>;<a class="l" name="402">    402 </a>		<b>goto</b> <a href="/source/s?defs=au_open_failed">au_open_failed</a>;<a class="l" name="403">    403 </a>	}<a class="l" name="404">    404 </a>	<a href="/source/s?defs=au">au</a> = (<a href="/source/s?defs=au_filehdr_t">au_filehdr_t</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<b>sizeof</b> (*<a href="/source/s?defs=au">au</a>));<a class="l" name="405">    405 </a>	<b>if</b> (<a href="/source/s?defs=read">read</a>(<a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=au">au</a>, <b>sizeof</b> (*<a href="/source/s?defs=au">au</a>)) != <b>sizeof</b> (*<a href="/source/s?defs=au">au</a>)) {<a class="l" name="406">    406 </a>		<a href="/source/s?defs=str_errno">str_errno</a> = <a href="/source/s?defs=STR_ERR_AU_READ_ERR">STR_ERR_AU_READ_ERR</a>;<a class="l" name="407">    407 </a>		<b>goto</b> <a href="/source/s?defs=au_open_failed">au_open_failed</a>;<a class="l" name="408">    408 </a>	}<a class="l" name="409">    409 </a>	<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_magic">au_magic</a> = <a href="/source/s?defs=BE32_TO_CPU">BE32_TO_CPU</a>(<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_magic">au_magic</a>);<a class="hl" name="410">    410 </a>	<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_offset">au_offset</a> = <a href="/source/s?defs=BE32_TO_CPU">BE32_TO_CPU</a>(<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_offset">au_offset</a>);<a class="l" name="411">    411 </a>	<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_data_size">au_data_size</a> = <a href="/source/s?defs=BE32_TO_CPU">BE32_TO_CPU</a>(<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_data_size">au_data_size</a>);<a class="l" name="412">    412 </a>	<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_encoding">au_encoding</a> = <a href="/source/s?defs=BE32_TO_CPU">BE32_TO_CPU</a>(<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_encoding">au_encoding</a>);<a class="l" name="413">    413 </a>	<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_sample_rate">au_sample_rate</a> = <a href="/source/s?defs=BE32_TO_CPU">BE32_TO_CPU</a>(<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_sample_rate">au_sample_rate</a>);<a class="l" name="414">    414 </a>	<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_channels">au_channels</a> = <a href="/source/s?defs=BE32_TO_CPU">BE32_TO_CPU</a>(<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_channels">au_channels</a>);<a class="l" name="415">    415 </a><a class="l" name="416">    416 </a>	<b>if</b> (<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_magic">au_magic</a> != <a href="/source/s?defs=AUDIO_AU_FILE_MAGIC">AUDIO_AU_FILE_MAGIC</a>) {<a class="l" name="417">    417 </a>		<a href="/source/s?defs=str_errno">str_errno</a> = <a href="/source/s?defs=STR_ERR_AU_BAD_HEADER">STR_ERR_AU_BAD_HEADER</a>;<a class="l" name="418">    418 </a>		<b>goto</b> <a href="/source/s?defs=au_open_failed">au_open_failed</a>;<a class="l" name="419">    419 </a>	}<a class="hl" name="420">    420 </a>	<b>if</b> ((<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_encoding">au_encoding</a> != <a href="/source/s?defs=AUDIO_AU_ENCODING_LINEAR_16">AUDIO_AU_ENCODING_LINEAR_16</a>) ||<a class="l" name="421">    421 </a>	    (<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_sample_rate">au_sample_rate</a> != <span class="n">44100</span>) || (<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_channels">au_channels</a> != <span class="n">2</span>)) {<a class="l" name="422">    422 </a><a class="l" name="423">    423 </a>		<a href="/source/s?defs=str_errno">str_errno</a> = <a href="/source/s?defs=STR_ERR_AU_UNSUPPORTED_FORMAT">STR_ERR_AU_UNSUPPORTED_FORMAT</a>;<a class="l" name="424">    424 </a>		<b>goto</b> <a href="/source/s?defs=au_open_failed">au_open_failed</a>;<a class="l" name="425">    425 </a>	}<a class="l" name="426">    426 </a>	<b>if</b> (<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_data_size">au_data_size</a> != <a href="/source/s?defs=AUDIO_AU_UNKNOWN_SIZE">AUDIO_AU_UNKNOWN_SIZE</a>) {<a class="l" name="427">    427 </a>		<b>if</b> ((<a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_offset">au_offset</a> + <a href="/source/s?defs=au">au</a>-&gt;<a href="/source/s?defs=au_data_size">au_data_size</a>) != <a href="/source/s?defs=st">st</a>.<a href="/source/s?defs=st_size">st_size</a>) {<a class="l" name="428">    428 </a>			<a href="/source/s?defs=str_errno">str_errno</a> = <a href="/source/s?defs=STR_ERR_AU_BAD_HEADER">STR_ERR_AU_BAD_HEADER</a>;

⌨️ 快捷键说明

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