📄 device.c.htm
字号:
<a class="l" name="296"> 296 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=dev">dev</a>-><a href="/source/s?defs=d_node">d_node</a>);<a class="l" name="297"> 297 </a> (<b>void</b>) <a href="/source/s?defs=close">close</a>(<a href="/source/s?defs=dev">dev</a>-><a href="/source/s?defs=d_fd">d_fd</a>);<a class="l" name="298"> 298 </a> <b>if</b> (<a href="/source/s?defs=dev">dev</a>-><a href="/source/s?defs=d_name">d_name</a>)<a class="l" name="299"> 299 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=dev">dev</a>-><a href="/source/s?defs=d_name">d_name</a>);<a class="hl" name="300"> 300 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=dev">dev</a>);<a class="l" name="301"> 301 </a>}<a class="l" name="302"> 302 </a><a class="l" name="303"> 303 </a><span class="c">/*<a class="l" name="304"> 304 </a> * Given a /dev path resolve that path to a symbolic<a class="l" name="305"> 305 </a> * name such as cdrom0 if hald is running. If hald is<a class="l" name="306"> 306 </a> * not running, or does not have a symbolic name for the<a class="l" name="307"> 307 </a> * the specified /dev path return NULL.<a class="l" name="308"> 308 </a> */</span><a class="l" name="309"> 309 </a><b>static</b> <b>char</b> *<a class="hl" name="310"> 310 </a><a href="/source/s?defs=hald_symname">hald_symname</a>(<b>char</b> *<a href="/source/s?defs=path">path</a>)<a class="l" name="311"> 311 </a>{<a class="l" name="312"> 312 </a> <a href="/source/s?defs=LibHalContext">LibHalContext</a> *<a href="/source/s?defs=ctx">ctx</a> = <a href="/source/s?defs=NULL">NULL</a>;<a class="l" name="313"> 313 </a> <a href="/source/s?defs=DBusError">DBusError</a> <a href="/source/s?defs=error">error</a>;<a class="l" name="314"> 314 </a><a class="l" name="315"> 315 </a> <b>char</b> **<a href="/source/s?defs=udi">udi</a>, *p = <a href="/source/s?defs=NULL">NULL</a>;<a class="l" name="316"> 316 </a> <b>int</b> <a href="/source/s?defs=ndevs">ndevs</a> = <span class="n">0</span>, i;<a class="l" name="317"> 317 </a><a class="l" name="318"> 318 </a> <span class="c">/* Make sure hald is running */</span><a class="l" name="319"> 319 </a> <b>if</b> (<a href="/source/s?defs=vol_running">vol_running</a> == <span class="n">0</span>)<a class="hl" name="320"> 320 </a> <b>return</b> (p);<a class="l" name="321"> 321 </a><a class="l" name="322"> 322 </a> <a href="/source/s?defs=dbus_error_init">dbus_error_init</a>(&<a href="/source/s?defs=error">error</a>);<a class="l" name="323"> 323 </a><a class="l" name="324"> 324 </a> <b>if</b> ((<a href="/source/s?defs=ctx">ctx</a> = <a href="/source/s?defs=attach_to_hald">attach_to_hald</a>()) == <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="325"> 325 </a> <b>return</b> (p);<a class="l" name="326"> 326 </a><a class="l" name="327"> 327 </a> <b>if</b> ((<a href="/source/s?defs=udi">udi</a> = <a href="/source/s?defs=libhal_manager_find_device_string_match">libhal_manager_find_device_string_match</a>(<a href="/source/s?defs=ctx">ctx</a>,<a class="l" name="328"> 328 </a> <a href="/source/s?defs=HAL_RDSK_PROP">HAL_RDSK_PROP</a>, <a href="/source/s?defs=path">path</a>, &<a href="/source/s?defs=ndevs">ndevs</a>, &<a href="/source/s?defs=error">error</a>)) == <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="329"> 329 </a> <b>goto</b> <a href="/source/s?defs=done">done</a>;<a class="hl" name="330"> 330 </a><a class="l" name="331"> 331 </a> <span class="c">/* Look for the node that contains the valid (non-null) symdev */</span><a class="l" name="332"> 332 </a> <b>for</b> (i = <span class="n">0</span>; i < <a href="/source/s?defs=ndevs">ndevs</a>; i++) {<a class="l" name="333"> 333 </a> <b>if</b> ((p = <a href="/source/s?defs=libhal_device_get_property_string">libhal_device_get_property_string</a>(<a href="/source/s?defs=ctx">ctx</a>, <a href="/source/s?defs=udi">udi</a>[i],<a class="l" name="334"> 334 </a> <a href="/source/s?defs=HAL_SYMDEV_PROP">HAL_SYMDEV_PROP</a>, <a href="/source/s?defs=NULL">NULL</a>)) != <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="335"> 335 </a> <b>break</b>;<a class="l" name="336"> 336 </a> <b>else</b><a class="l" name="337"> 337 </a> <a href="/source/s?defs=libhal_free_string">libhal_free_string</a>(p);<a class="l" name="338"> 338 </a> }<a class="l" name="339"> 339 </a><a class="hl" name="340"> 340 </a><a href="/source/s?defs=done">done</a>:<a class="l" name="341"> 341 </a> <b>if</b> (<a href="/source/s?defs=udi">udi</a> != <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="342"> 342 </a> <a href="/source/s?defs=libhal_free_string_array">libhal_free_string_array</a>(<a href="/source/s?defs=udi">udi</a>);<a class="l" name="343"> 343 </a> <b>if</b> (<a href="/source/s?defs=dbus_error_is_set">dbus_error_is_set</a>(&<a href="/source/s?defs=error">error</a>))<a class="l" name="344"> 344 </a> <a href="/source/s?defs=dbus_error_free">dbus_error_free</a>(&<a href="/source/s?defs=error">error</a>);<a class="l" name="345"> 345 </a> <a href="/source/s?defs=detach_from_hald">detach_from_hald</a>(<a href="/source/s?defs=ctx">ctx</a>, <a href="/source/s?defs=HAL_INITIALIZED">HAL_INITIALIZED</a>);<a class="l" name="346"> 346 </a> <b>return</b> (p);<a class="l" name="347"> 347 </a>}<a class="l" name="348"> 348 </a><a class="l" name="349"> 349 </a><span class="c">/*<a class="hl" name="350"> 350 </a> * Given a name resolve that name to a raw device in the case<a class="l" name="351"> 351 </a> * that it is a symbolic name or just return what is given if<a class="l" name="352"> 352 </a> * we are given a /dev path or hald is not running.<a class="l" name="353"> 353 </a> */</span><a class="l" name="354"> 354 </a><b>static</b> <b>char</b> *<a class="l" name="355"> 355 </a><a href="/source/s?defs=hald_findname">hald_findname</a>(<b>char</b> *<a href="/source/s?defs=symname">symname</a>)<a class="l" name="356"> 356 </a>{<a class="l" name="357"> 357 </a> <a href="/source/s?defs=LibHalContext">LibHalContext</a> *<a href="/source/s?defs=ctx">ctx</a> = <a href="/source/s?defs=NULL">NULL</a>;<a class="l" name="358"> 358 </a> <a href="/source/s?defs=DBusError">DBusError</a> <a href="/source/s?defs=error">error</a>;<a class="l" name="359"> 359 </a><a class="hl" name="360"> 360 </a> <b>char</b> **<a href="/source/s?defs=udi">udi</a>, *<a href="/source/s?defs=path">path</a> = <a href="/source/s?defs=NULL">NULL</a>;<a class="l" name="361"> 361 </a> <b>int</b> <a href="/source/s?defs=ndevs">ndevs</a> = <span class="n">0</span>, i;<a class="l" name="362"> 362 </a><a class="l" name="363"> 363 </a> <span class="c">/* We already have a raw path just return that */</span><a class="l" name="364"> 364 </a> <b>if</b> (<a href="/source/s?defs=symname">symname</a>[<span class="n">0</span>] == <span class="s">'/'</span>)<a class="l" name="365"> 365 </a> <b>return</b> (<a href="/source/s?defs=symname">symname</a>);<a class="l" name="366"> 366 </a><a class="l" name="367"> 367 </a> <span class="c">/* Get the raw device from the hal record */</span><a class="l" name="368"> 368 </a> <b>if</b> (<a href="/source/s?defs=vol_running">vol_running</a> != <span class="n">0</span>) {<a class="l" name="369"> 369 </a> <a href="/source/s?defs=dbus_error_init">dbus_error_init</a>(&<a href="/source/s?defs=error">error</a>);<a class="hl" name="370"> 370 </a><a class="l" name="371"> 371 </a> <b>if</b> ((<a href="/source/s?defs=ctx">ctx</a> = <a href="/source/s?defs=attach_to_hald">attach_to_hald</a>()) == <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="372"> 372 </a> <b>return</b> (<a href="/source/s?defs=path">path</a>);<a class="l" name="373"> 373 </a><a class="l" name="374"> 374 </a> <b>if</b> ((<a href="/source/s?defs=udi">udi</a> = <a href="/source/s?defs=libhal_manager_find_device_string_match">libhal_manager_find_device_string_match</a>(<a href="/source/s?defs=ctx">ctx</a>,<a class="l" name="375"> 375 </a> <a href="/source/s?defs=HAL_SYMDEV_PROP">HAL_SYMDEV_PROP</a>, <a href="/source/s?defs=symname">symname</a>, &<a href="/source/s?defs=ndevs">ndevs</a>,<a class="l" name="376"> 376 </a> &<a href="/source/s?defs=error">error</a>)) == <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="377"> 377 </a> <b>goto</b> <a href="/source/s?defs=done">done</a>;<a class="l" name="378"> 378 </a><a class="l" name="379"> 379 </a> <span class="c">/*<a class="hl" name="380"> 380 </a> * Loop over the returned UDIs to access the raw<a class="l" name="381"> 381 </a> * device path.<a class="l" name="382"> 382 </a> */</span><a class="l" name="383"> 383 </a> <b>for</b> (i = <span class="n">0</span>; i < <a href="/source/s?defs=ndevs">ndevs</a>; i++) {<a class="l" name="384"> 384 </a> <b>if</b> ((<a href="/source/s?defs=path">path</a> = <a href="/source/s?defs=libhal_device_get_property_string">libhal_device_get_property_string</a>(<a href="/source/s?defs=ctx">ctx</a>,<a class="l" name="385"> 385 </a> <a href="/source/s?defs=udi">udi</a>[i], <a href="/source/s?defs=HAL_RDSK_PROP">HAL_RDSK_PROP</a>, <a href="/source/s?defs=NULL">NULL</a>)) != <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="386"> 386 </a> <b>break</b>;<a class="l" name="387"> 387 </a> <b>else</b><a class="l" name="388"> 388 </a> <a href="/source/s?defs=libhal_free_string">libhal_free_string</a>(<a href="/source/s?defs=path">path</a>);<a class="l" name="389"> 389 </a> }<a class="hl" name="390"> 390 </a><a class="l" name="391"> 391 </a><a href="/source/s?defs=done">done</a>:<a class="l" name="392"> 392 </a> <b>if</b> (<a href="/source/s?defs=udi">udi</a> != <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="393"> 393 </a> <a href="/source/s?defs=libhal_free_string_array">libhal_free_string_array</a>(<a href="/source/s?defs=udi">udi</a>);<a class="l" name="394"> 394 </a> <b>if</b> (<a href="/source/s?defs=dbus_error_is_set">dbus_error_is_set</a>(&<a href="/source/s?defs=error">error</a>))<a class="l" name="395"> 395 </a> <a href="/source/s?defs=dbus_error_free">dbus_error_free</a>(&<a href="/source/s?defs=error">error</a>);<a class="l" name="396"> 396 </a> <a href="/source/s?defs=detach_from_hald">detach_from_hald</a>(<a href="/source/s?defs=ctx">ctx</a>, <a href="/source/s?defs=HAL_INITIALIZED">HAL_INITIALIZED</a>);<a class="l" name="397"> 397 </a> <b>return</b> (<a href="/source/s?defs=path">path</a>);<a class="l" name="398"> 398 </a> } <b>else</b> {<a class="l" name="399"> 399 </a> <b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="hl" name="400"> 400 </a> }<a class="l" name="401"> 401 </a>}<a class="l" name="402"> 402 </a><a class="l" name="403"> 403 </a><b>static</b> <b>int</b><a class="l" name="404"> 404 </a><a href="/source/s?defs=vol_name_to_dev_node">vol_name_to_dev_node</a>(<b>char</b> *<a href="/source/s?defs=vname">vname</a>, <b>char</b> *<a href="/source/s?defs=found">found</a>)<a class="l" name="405"> 405 </a>{<a class="l" name="406"> 406 </a> <b>struct</b> <a href="/source/s?defs=stat">stat</a> <a href="/source/s?defs=statbuf">statbuf</a>;<a class="l" name="407"> 407 </a> <b>char</b> *<a href="/source/s?defs=p1">p1</a>;<a class="l" name="408"> 408 </a> <b>int</b> i;<a class="l" name="409"> 409 </a><a class="hl" name="410"> 410 </a> <b>if</b> (<a href="/source/s?defs=vname">vname</a> == <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="411"> 411 </a> <b>return</b> (<span class="n">0</span>);<a class="l" name="412"> 412 </a><a class="l" name="413"> 413 </a> <a href="/source/s?defs=p1">p1</a> = <a href="/source/s?defs=hald_findname">hald_findname</a>(<a href="/source/s?defs=vname">vname</a>);<a class="l" name="414"> 414 </a><a class="l" name="415"> 415 </a> <b>if</b> (<a href="/source/s?defs=p1">p1</a> == <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="416"> 416 </a> <b>return</b> (<span class="n">0</span>);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -