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

📄 device.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<a class="l" name="296">    296 </a>	<a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=dev">dev</a>-&gt;<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>-&gt;<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>-&gt;<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>-&gt;<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>(&amp;<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>, &amp;<a href="/source/s?defs=ndevs">ndevs</a>, &amp;<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 &lt; <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>(&amp;<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>(&amp;<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>(&amp;<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>, &amp;<a href="/source/s?defs=ndevs">ndevs</a>,<a class="l" name="376">    376 </a>		    &amp;<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 &lt; <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>(&amp;<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>(&amp;<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 + -