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

📄 device.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<a class="l" name="417">    417 </a>	<b>if</b> (<a href="/source/s?defs=stat">stat</a>(<a href="/source/s?defs=p1">p1</a>, &amp;<a href="/source/s?defs=statbuf">statbuf</a>) &lt; <span class="n">0</span>) {<a class="l" name="418">    418 </a>		<a href="/source/s?defs=libhal_free_string">libhal_free_string</a>(<a href="/source/s?defs=p1">p1</a>);<a class="l" name="419">    419 </a>		<b>return</b> (<span class="n">0</span>);<a class="hl" name="420">    420 </a>	}<a class="l" name="421">    421 </a>	<b>if</b> (<a href="/source/s?defs=S_ISDIR">S_ISDIR</a>(<a href="/source/s?defs=statbuf">statbuf</a>.<a href="/source/s?defs=st_mode">st_mode</a>)) {<a class="l" name="422">    422 </a>		<b>for</b> (i = <span class="n">0</span>; i &lt; <span class="n">16</span>; i++) {<a class="l" name="423">    423 </a>			(<b>void</b>) <a href="/source/s?defs=snprintf">snprintf</a>(<a href="/source/s?defs=found">found</a>, <a href="/source/s?defs=PATH_MAX">PATH_MAX</a>, <span class="s">"%s/s%d"</span>, <a href="/source/s?defs=p1">p1</a>, i);<a class="l" name="424">    424 </a>			<b>if</b> (<a href="/source/s?defs=access">access</a>(<a href="/source/s?defs=found">found</a>, <a href="/source/s?defs=F_OK">F_OK</a>) &gt;= <span class="n">0</span>)<a class="l" name="425">    425 </a>				<b>break</b>;<a class="l" name="426">    426 </a>		}<a class="l" name="427">    427 </a>		<b>if</b> (i == <span class="n">16</span>) {<a class="l" name="428">    428 </a>			<a href="/source/s?defs=libhal_free_string">libhal_free_string</a>(<a href="/source/s?defs=p1">p1</a>);<a class="l" name="429">    429 </a>			<b>return</b> (<span class="n">0</span>);<a class="hl" name="430">    430 </a>		}<a class="l" name="431">    431 </a>	} <b>else</b> {<a class="l" name="432">    432 </a>		(<b>void</b>) <a href="/source/s?defs=strlcpy">strlcpy</a>(<a href="/source/s?defs=found">found</a>, <a href="/source/s?defs=p1">p1</a>, <a href="/source/s?defs=PATH_MAX">PATH_MAX</a>);<a class="l" name="433">    433 </a>	}<a class="l" name="434">    434 </a>	<a href="/source/s?defs=libhal_free_string">libhal_free_string</a>(<a href="/source/s?defs=p1">p1</a>);<a class="l" name="435">    435 </a>	<b>return</b> (<span class="n">1</span>);<a class="l" name="436">    436 </a>}<a class="l" name="437">    437 </a><a class="l" name="438">    438 </a><span class="c">/*<a class="l" name="439">    439 </a> * Builds an open()able device path from a user supplied node which can be<a class="hl" name="440">    440 </a> * of the * form of /dev/[r]<a href="/source/s?path=dsk/">dsk</a>/<a href="/source/s?path=dsk/cxtxdx">cxtxdx</a>[sx] or cxtxdx[sx] or volmgt-name like<a class="l" name="441">    441 </a> * cdrom[n]<a class="l" name="442">    442 </a> * returns the path found in 'found' and returns 1. Otherwise returns 0.<a class="l" name="443">    443 </a> */</span><a class="l" name="444">    444 </a><b>int</b><a class="l" name="445">    445 </a><a href="/source/s?defs=lookup_device">lookup_device</a>(<b>char</b> *<a href="/source/s?defs=supplied">supplied</a>, <b>char</b> *<a href="/source/s?defs=found">found</a>)<a class="l" name="446">    446 </a>{<a class="l" name="447">    447 </a>	<b>struct</b> <a href="/source/s?defs=stat">stat</a> <a href="/source/s?defs=statbuf">statbuf</a>;<a class="l" name="448">    448 </a>	<b>int</b> <a href="/source/s?defs=fd">fd</a>;<a class="l" name="449">    449 </a>	<b>char</b> <a href="/source/s?defs=tmpstr">tmpstr</a>[<a href="/source/s?defs=PATH_MAX">PATH_MAX</a>];<a class="hl" name="450">    450 </a><a class="l" name="451">    451 </a>	<span class="c">/* If everything is fine and proper, no need to analyze */</span><a class="l" name="452">    452 </a>	<b>if</b> ((<a href="/source/s?defs=stat">stat</a>(<a href="/source/s?defs=supplied">supplied</a>, &amp;<a href="/source/s?defs=statbuf">statbuf</a>) == <span class="n">0</span>) &amp;&amp; <a href="/source/s?defs=S_ISCHR">S_ISCHR</a>(<a href="/source/s?defs=statbuf">statbuf</a>.<a href="/source/s?defs=st_mode">st_mode</a>) &amp;&amp;<a class="l" name="453">    453 </a>	    ((<a href="/source/s?defs=fd">fd</a> = <a href="/source/s?defs=open">open</a>(<a href="/source/s?defs=supplied">supplied</a>, <a href="/source/s?defs=O_RDONLY">O_RDONLY</a>|<a href="/source/s?defs=O_NDELAY">O_NDELAY</a>)) &gt;= <span class="n">0</span>)) {<a class="l" name="454">    454 </a>		(<b>void</b>) <a href="/source/s?defs=close">close</a>(<a href="/source/s?defs=fd">fd</a>);<a class="l" name="455">    455 </a>		(<b>void</b>) <a href="/source/s?defs=strlcpy">strlcpy</a>(<a href="/source/s?defs=found">found</a>, <a href="/source/s?defs=supplied">supplied</a>, <a href="/source/s?defs=PATH_MAX">PATH_MAX</a>);<a class="l" name="456">    456 </a>		<b>return</b> (<span class="n">1</span>);<a class="l" name="457">    457 </a>	}<a class="l" name="458">    458 </a><a class="l" name="459">    459 </a>	<span class="c">/*<a class="hl" name="460">    460 </a>	 * Hal only allows access to a device when the user is<a class="l" name="461">    461 </a>	 * on the console, therefore if hal is running and we can't<a class="l" name="462">    462 </a>	 * open the /<a href="/source/s?path=/dev/">dev</a>/<a href="/source/s?path=/dev/rdsk">rdsk</a> or /<a href="/source/s?path=/dev/">dev</a>/<a href="/source/s?path=/dev/removable-media/">removable-media</a>/<a href="/source/s?path=/dev/removable-media/rdsk">rdsk</a> device<a class="l" name="463">    463 </a>	 * file we will return 0 marking this device as not avaiable.<a class="l" name="464">    464 </a>	 */</span><a class="l" name="465">    465 </a>	<b>if</b> (<a href="/source/s?defs=fd">fd</a> &lt; <span class="n">0</span> &amp;&amp; ((<a href="/source/s?defs=strncmp">strncmp</a>(<a href="/source/s?defs=supplied">supplied</a>, <span class="s">"/<a href="/source/s?path=/dev/">dev</a>/<a href="/source/s?path=/dev/rdsk">rdsk</a>/"</span>, <span class="n">10</span>) == <span class="n">0</span>) ||<a class="l" name="466">    466 </a>	    (<a href="/source/s?defs=strncmp">strncmp</a>(<a href="/source/s?defs=supplied">supplied</a>, <span class="s">"/<a href="/source/s?path=/dev/">dev</a>/<a href="/source/s?path=/dev/removable-media/">removable-media</a>/<a href="/source/s?path=/dev/removable-media/rdsk">rdsk</a>/"</span>, <span class="n">26</span>) == <span class="n">0</span>)))<a class="l" name="467">    467 </a>		<b>return</b> (<span class="n">0</span>);<a class="l" name="468">    468 </a><a class="l" name="469">    469 </a>	<b>if</b> ((<a href="/source/s?defs=strncmp">strncmp</a>(<a href="/source/s?defs=supplied">supplied</a>, <span class="s">"/<a href="/source/s?path=/dev/">dev</a>/<a href="/source/s?path=/dev/dsk">dsk</a>/"</span>, <span class="n">9</span>) == <span class="n">0</span>) ||<a class="hl" name="470">    470 </a>	    (<a href="/source/s?defs=strncmp">strncmp</a>(<a href="/source/s?defs=supplied">supplied</a>, <span class="s">"/<a href="/source/s?path=/dev/">dev</a>/<a href="/source/s?path=/dev/removable-media/">removable-media</a>/<a href="/source/s?path=/dev/removable-media/dsk">dsk</a>/"</span>, <span class="n">25</span>) == <span class="n">0</span>)) {<a class="l" name="471">    471 </a>		(<b>void</b>) <a href="/source/s?defs=snprintf">snprintf</a>(<a href="/source/s?defs=tmpstr">tmpstr</a>, <a href="/source/s?defs=PATH_MAX">PATH_MAX</a>, <span class="s">"/<a href="/source/s?path=/dev/">dev</a>/<a href="/source/s?path=/dev/rdsk">rdsk</a>/%s"</span>,<a class="l" name="472">    472 </a>		    (<b>char</b> *)<a href="/source/s?defs=strrchr">strrchr</a>(<a href="/source/s?defs=supplied">supplied</a>, <span class="s">'/'</span>));<a class="l" name="473">    473 </a><a class="l" name="474">    474 </a>		<b>if</b> ((<a href="/source/s?defs=fd">fd</a> = <a href="/source/s?defs=open">open</a>(<a href="/source/s?defs=tmpstr">tmpstr</a>, <a href="/source/s?defs=O_RDONLY">O_RDONLY</a>|<a href="/source/s?defs=O_NDELAY">O_NDELAY</a>)) &gt;= <span class="n">0</span>) {<a class="l" name="475">    475 </a>			(<b>void</b>) <a href="/source/s?defs=close">close</a>(<a href="/source/s?defs=fd">fd</a>);<a class="l" name="476">    476 </a>			(<b>void</b>) <a href="/source/s?defs=strlcpy">strlcpy</a>(<a href="/source/s?defs=found">found</a>, <a href="/source/s?defs=supplied">supplied</a>, <a href="/source/s?defs=PATH_MAX">PATH_MAX</a>);<a class="l" name="477">    477 </a>			<b>return</b> (<span class="n">1</span>);<a class="l" name="478">    478 </a>		}<a class="l" name="479">    479 </a><a class="hl" name="480">    480 </a>		<span class="c">/* This device can't be opened mark it as unavailable. */</span><a class="l" name="481">    481 </a>		<b>return</b> (<span class="n">0</span>);<a class="l" name="482">    482 </a>	}<a class="l" name="483">    483 </a>	<b>if</b> ((<a href="/source/s?defs=strncmp">strncmp</a>(<a href="/source/s?defs=supplied">supplied</a>, <span class="s">"cdrom"</span>, <span class="n">5</span>) != <span class="n">0</span>) &amp;&amp;<a class="l" name="484">    484 </a>	    (<a href="/source/s?defs=strlen">strlen</a>(<a href="/source/s?defs=supplied">supplied</a>) &lt; <span class="n">32</span>)) {<a class="l" name="485">    485 </a>		(<b>void</b>) <a href="/source/s?defs=snprintf">snprintf</a>(<a href="/source/s?defs=tmpstr">tmpstr</a>, <b>sizeof</b> (<a href="/source/s?defs=tmpstr">tmpstr</a>), <span class="s">"/<a href="/source/s?path=/dev/">dev</a>/<a href="/source/s?path=/dev/rdsk">rdsk</a>/%s"</span>,<a class="l" name="486">    486 </a>		    <a href="/source/s?defs=supplied">supplied</a>);<a class="l" name="487">    487 </a>		<b>if</b> (<a href="/source/s?defs=access">access</a>(<a href="/source/s?defs=tmpstr">tmpstr</a>, <a href="/source/s?defs=F_OK">F_OK</a>) &lt; <span class="n">0</span>) {<a class="l" name="488">    488 </a>			(<b>void</b>) <a href="/source/s?defs=strcat">strcat</a>(<a href="/source/s?defs=tmpstr">tmpstr</a>, <span class="s">"s2"</span>);<a class="l" name="489">    489 </a>		}<a class="hl" name="490">    490 </a>		<b>if</b> ((<a href="/source/s?defs=fd">fd</a> = <a href="/source/s?defs=open">open</a>(<a href="/source/s?defs=tmpstr">tmpstr</a>, <a href="/source/s?defs=O_RDONLY">O_RDONLY</a>|<a href="/source/s?defs=O_NDELAY">O_NDELAY</a>)) &gt;= <span class="n">0</span>) {<a class="l" name="491">    491 </a>			(<b>void</b>) <a href="/source/s?defs=close">close</a>(<a href="/source/s?defs=fd">fd</a>);<a class="l" name="492">    492 </a>			(<b>void</b>) <a href="/source/s?defs=strlcpy">strlcpy</a>(<a href="/source/s?defs=found">found</a>, <a href="/source/s?defs=tmpstr">tmpstr</a>, <a href="/source/s?defs=PATH_MAX">PATH_MAX</a>);<a class="l" name="493">    493 </a>			<b>return</b> (<span class="n">1</span>);<a class="l" name="494">    494 </a>		}<a class="l" name="495">    495 </a><a class="l" name="496">    496 </a>		<span class="c">/* This device can't be opened mark it as unavailable. */</span><a class="l" name="497">    497 </a>		<b>return</b> (<span class="n">0</span>);<a class="l" name="498">    498 </a>	}<a class="l" name="499">    499 </a>	<b>return</b> (<a href="/source/s?defs=vol_name_to_dev_node">vol_name_to_dev_node</a>(<a href="/source/s?defs=supplied">supplied</a>, <a href="/source/s?defs=found">found</a>));<a class="hl" name="500">    500 </a>}<a class="l" name="501">    501 </a><a class="l" name="502">    502 </a><span class="c">/*<a class="l" name="503">    503 </a> * Opens the device node name passed and returns 1 (true) if the<a class="l" name="504">    504 </a> * device is a CD.<a class="l" name="505">    505 </a> */</span><a class="l" name="506">    506 </a><a class="l" name="507">    507 </a><b>static</b> <b>int</b><a class="l" name="508">    508 </a><a href="/source/s?defs=is_cd">is_cd</a>(<b>char</b> *<a href="/source/s?defs=node">node</a>)<a class="l" name="509">    509 </a>{<a class="hl" name="510">    510 </a>	<b>int</b> <a href="/source/s?defs=fd">fd</a>;<a class="l" name="511">    511 </a>	<b>struct</b> <a href="/source/s?defs=dk_cinfo">dk_cinfo</a> <a href="/source/s?defs=cinfo">cinfo</a>;<a class="l" name="512">    512 </a>	<b>int</b> <a href="/source/s?defs=ret">ret</a> = <span class="n">1</span>;<a class="l" name="513">    513 </a><a class="l" name="514">    514 </a>	<a href="/source/s?defs=fd">fd</a> = <a href="/source/s?defs=open">open</a>(<a href="/source/s?defs=node">node</a>, <a href="/source/s?defs=O_RDONLY">O_RDONLY</a>|<a href="/source/s?defs=O_NDELAY">O_NDELAY</a>);<a class="l" name="515">    515 </a>	<b>if</b> (<a href="/source/s?defs=fd">fd</a> &lt; <span class="n">0</span>) {<a class="l" name="516">    516 </a>		<a href="/source/s?defs=ret">ret</a> = <span class="n">0</span>;<a class="l" name="517">    517 </a>	} <b>else</b> <b>if</b> (<a href="/source/s?defs=ioctl">ioctl</a>(<a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=DKIOCINFO">DKIOCINFO</a>, &amp;<a href="/source/s?defs=cinfo">cinfo</a>) &lt; <span class="n">0</span>) {<a class="l" name="518">    518 </a>		<a href="/source/s?defs=ret">ret</a> = <span class="n">0</span>;<a class="l" name="519">    519 </a>	} <b>else</b> <b>if</b> (<a href="/source/s?defs=cinfo">cinfo</a>.<a href="/source/s?defs=dki_ctype">dki_ctype</a> != <a href="/source/s?defs=DKC_CDROM">DKC_CDROM</a>) {<a class="hl" name="520">    520 </a>		<a href="/source/s?defs=ret">ret</a> = <span class="n">0</span>;<a class="l" name="521">    521 </a>	}<a class="l" name="522">    522 </a><a class="l" name="523">    523 </a>	<b>if</b> (<a href="/source/s?defs=fd">fd</a> &gt;= <span class="n">0</span>) {<a class="l" name="524">    524 </a>		(<b>void</b>) <a href="/source/s?defs=close">close</a>(<a href="/source/s?defs=fd">fd</a>);<a class="l" name="525">    525 </a>	}<a class="l" name="526">    526 </a>	<b>return</b> (<a href="/source/s?defs=ret">ret</a>);<a class="l" name="527">    527 </a>}<a class="l" name="528">    528 </a><a class="l" name="529">    529 </a><b>static</b> <b>void</b><a class="hl" name="530">    530 </a><a href="/source/s?defs=print_header">print_header</a>(<b>void</b>)<a class="l" name="531">    531 </a>{<a class="l" name="532">    532 </a>	<span class="c">/* l10n_NOTE : Column spacing should be kept same */</span><a class="l" name="533">    533 </a>	(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"    Node	           Connected Device"</span>));<a class="l" name="534">    534 </a>	<span class="c">/* l10n_NOTE : Column spacing should be kept same */</span><a class="l" name="535">    535 </a>	(<b>void</b>) <a href="/source/s?d

⌨️ 快捷键说明

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