📄 device.c.htm
字号:
<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>, &<a href="/source/s?defs=statbuf">statbuf</a>) < <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 < <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>) >= <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>, &<a href="/source/s?defs=statbuf">statbuf</a>) == <span class="n">0</span>) && <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>) &&<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>)) >= <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> < <span class="n">0</span> && ((<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>)) >= <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>) &&<a class="l" name="484"> 484 </a> (<a href="/source/s?defs=strlen">strlen</a>(<a href="/source/s?defs=supplied">supplied</a>) < <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>) < <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>)) >= <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> < <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>, &<a href="/source/s?defs=cinfo">cinfo</a>) < <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> >= <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 + -