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

📄 device.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 5 页
字号:
<a class="l" name="54">     54 </a> * We have the device inquiry strings at this time. This is used to enable<a class="l" name="55">     55 </a> * us to use older sun drives to extract audio.<a class="l" name="56">     56 </a> */</span><a class="l" name="57">     57 </a><b>static</b> <b>int</b><a class="l" name="58">     58 </a><a href="/source/s?defs=is_old_sun_drive">is_old_sun_drive</a>(<a href="/source/s?defs=cd_device">cd_device</a> *<a href="/source/s?defs=dev">dev</a>)<a class="l" name="59">     59 </a>{<a class="hl" name="60">     60 </a>	<span class="c">/*<a class="l" name="61">     61 </a>	 * If we have a SONY CDU 561, CDU 8012, or TOSHIBA model with XMa we<a class="l" name="62">     62 </a>	 * need to handle these drives a bit differently.<a class="l" name="63">     63 </a>	 */</span><a class="l" name="64">     64 </a>	<b>if</b> (<a href="/source/s?defs=strncmp">strncmp</a>(<span class="s">"SONY"</span>, (<b>const</b> <b>char</b> *)&amp;<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">8</span>], <span class="n">4</span>) == <span class="n">0</span>) {<a class="l" name="65">     65 </a>		<b>if</b> (<a href="/source/s?defs=strncmp">strncmp</a>(<span class="s">"CDU 561"</span>, (<b>const</b> <b>char</b> *)&amp;<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">16</span>], <span class="n">7</span>) == <span class="n">0</span>)<a class="l" name="66">     66 </a>			<b>return</b> (<span class="n">1</span>);<a class="l" name="67">     67 </a>		<b>if</b> (<a href="/source/s?defs=strncmp">strncmp</a>(<span class="s">"CDU-8012"</span>, (<b>const</b> <b>char</b> *)&amp;<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">16</span>], <span class="n">8</span>) == <span class="n">0</span>)<a class="l" name="68">     68 </a>			<b>return</b> (<span class="n">1</span>);<a class="l" name="69">     69 </a>	}<a class="hl" name="70">     70 </a><a class="l" name="71">     71 </a>	<b>if</b> ((<a href="/source/s?defs=strncmp">strncmp</a>(<span class="s">"TOSHIBA"</span>, (<b>const</b> <b>char</b> *)&amp;<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">8</span>], <span class="n">7</span>) == <span class="n">0</span>) &amp;&amp;<a class="l" name="72">     72 </a>	    (<a href="/source/s?defs=strncmp">strncmp</a>(<span class="s">"XM"</span>, (<b>const</b> <b>char</b> *)&amp;<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">16</span>], <span class="n">2</span>) == <span class="n">0</span>)) {<a class="l" name="73">     73 </a><a class="l" name="74">     74 </a>		<b>char</b> <a href="/source/s?defs=product_id">product_id</a>[<span class="n">17</span>];<a class="l" name="75">     75 </a><a class="l" name="76">     76 </a>		<span class="c">/* Changing speed is not allowed for 32X TOSHIBA drives */</span><a class="l" name="77">     77 </a>		<b>if</b> (<a href="/source/s?defs=strncmp">strncmp</a>(<span class="s">"SUN32XCD"</span>, (<b>const</b> <b>char</b> *)&amp;<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">24</span>], <span class="n">8</span>) == <span class="n">0</span>)<a class="l" name="78">     78 </a>			<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_cap">d_cap</a> |= <a href="/source/s?defs=DEV_CAP_SETTING_SPEED_NOT_ALLOWED">DEV_CAP_SETTING_SPEED_NOT_ALLOWED</a>;<a class="l" name="79">     79 </a>		(<b>void</b>) <a href="/source/s?defs=strncpy">strncpy</a>(<a href="/source/s?defs=product_id">product_id</a>, (<b>const</b> <b>char</b> *)&amp;<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">16</span>], <span class="n">16</span>);<a class="hl" name="80">     80 </a>		<a href="/source/s?defs=product_id">product_id</a>[<span class="n">16</span>] = <span class="n">0</span>;<a class="l" name="81">     81 </a>		<b>if</b> (<a href="/source/s?defs=strstr">strstr</a>(<a href="/source/s?defs=product_id">product_id</a>, <span class="s">"SUN"</span>) != <a href="/source/s?defs=NULL">NULL</a>)<a class="l" name="82">     82 </a>			<b>return</b> (<span class="n">1</span>);<a class="l" name="83">     83 </a>	}<a class="l" name="84">     84 </a>	<b>return</b> (<span class="n">0</span>);<a class="l" name="85">     85 </a>}<a class="l" name="86">     86 </a><a class="l" name="87">     87 </a><span class="c">/*<a class="l" name="88">     88 </a> * returns a cd_device handle for a node returned by lookup_device()<a class="l" name="89">     89 </a> * also takes the user supplied name and stores it inside the node<a class="hl" name="90">     90 </a> */</span><a class="l" name="91">     91 </a><a href="/source/s?defs=cd_device">cd_device</a> *<a class="l" name="92">     92 </a><a href="/source/s?defs=get_device">get_device</a>(<b>char</b> *<a href="/source/s?defs=user_supplied">user_supplied</a>, <b>char</b> *<a href="/source/s?defs=node">node</a>)<a class="l" name="93">     93 </a>{<a class="l" name="94">     94 </a>	<a href="/source/s?defs=cd_device">cd_device</a> *<a href="/source/s?defs=dev">dev</a>;<a class="l" name="95">     95 </a>	<b>int</b> <a href="/source/s?defs=fd">fd</a>;<a class="l" name="96">     96 </a>	<a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=cap">cap</a>;<a class="l" name="97">     97 </a>	<b>char</b> <a href="/source/s?defs=devnode">devnode</a>[<a href="/source/s?defs=PATH_MAX">PATH_MAX</a>];<a class="l" name="98">     98 </a>	<b>int</b> <a href="/source/s?defs=size">size</a>;<a class="l" name="99">     99 </a>	<b>struct</b> <a href="/source/s?defs=dk_minfo">dk_minfo</a> <a href="/source/s?defs=mediainfo">mediainfo</a>;<a class="hl" name="100">    100 </a>	<b>int</b> <a href="/source/s?defs=use_cd_speed">use_cd_speed</a> = <span class="n">0</span>;<a class="l" name="101">    101 </a><a class="l" name="102">    102 </a>	<span class="c">/*<a class="l" name="103">    103 </a>	 * we need to resolve any link paths to avoid fake files<a class="l" name="104">    104 </a>	 * such as /<a href="/source/s?path=/dev/">dev</a>/<a href="/source/s?path=/dev/rdsk">rdsk</a>/../../<a href="/source/s?path=/export/">export</a>/<a href="/source/s?path=/export/file">file</a>.<a class="l" name="105">    105 </a>	 */</span><a class="l" name="106">    106 </a><a class="l" name="107">    107 </a>	<a href="/source/s?defs=TRACE">TRACE</a>(<a href="/source/s?defs=traceall_msg">traceall_msg</a>(<span class="s">"get_device(%s, %s)\n"</span>, <a href="/source/s?defs=user_supplied">user_supplied</a> ?<a class="l" name="108">    108 </a>	    <a href="/source/s?defs=user_supplied">user_supplied</a> : <span class="s">"&lt;nil&gt;"</span>, <a href="/source/s?defs=node">node</a> ? <a href="/source/s?defs=node">node</a> : <span class="s">"&lt;nil&gt;"</span>));<a class="l" name="109">    109 </a><a class="hl" name="110">    110 </a>	<a href="/source/s?defs=size">size</a> = <a href="/source/s?defs=resolvepath">resolvepath</a>(<a href="/source/s?defs=node">node</a>, <a href="/source/s?defs=devnode">devnode</a>, <a href="/source/s?defs=PATH_MAX">PATH_MAX</a>);<a class="l" name="111">    111 </a>	<b>if</b> ((<a href="/source/s?defs=size">size</a> &lt;= <span class="n">0</span>) || (<a href="/source/s?defs=size">size</a> &gt;= (<a href="/source/s?defs=PATH_MAX">PATH_MAX</a> - <span class="n">1</span>)))<a class="l" name="112">    112 </a>		<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="113">    113 </a><a class="l" name="114">    114 </a>	<span class="c">/* resolvepath may not return a null terminated string */</span><a class="l" name="115">    115 </a>	<a href="/source/s?defs=devnode">devnode</a>[<a href="/source/s?defs=size">size</a>] = <span class="s">'\0'</span>;<a class="l" name="116">    116 </a><a class="l" name="117">    117 </a><a class="l" name="118">    118 </a>	<span class="c">/* the device node must be in /devices/ or /<a href="/source/s?path=/vol/">vol</a>/<a href="/source/s?path=/vol/dev/">dev</a>/<a href="/source/s?path=/vol/dev/rdsk">rdsk</a> */</span><a class="l" name="119">    119 </a><a class="hl" name="120">    120 </a>	<b>if</b> ((<a href="/source/s?defs=strncmp">strncmp</a>(<a href="/source/s?defs=devnode">devnode</a>, <span class="s">"/devices/"</span>, <span class="n">9</span>) != <span class="n">0</span>) &amp;&amp;<a class="l" name="121">    121 </a>	    (<a href="/source/s?defs=strncmp">strncmp</a>(<a href="/source/s?defs=devnode">devnode</a>, <span class="s">"/<a href="/source/s?path=/vol/">vol</a>/<a href="/source/s?path=/vol/dev/">dev</a>/<a href="/source/s?path=/vol/dev/rdsk">rdsk</a>"</span>, <span class="n">13</span>) != <span class="n">0</span>))<a class="l" name="122">    122 </a>		<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="123">    123 </a>	<span class="c">/*<a class="l" name="124">    124 </a>	 * Since we are currently running with the user euid it is<a class="l" name="125">    125 </a>	 * safe to try to open the file without checking access.<a class="l" name="126">    126 </a>	 */</span><a class="l" name="127">    127 </a><a class="l" name="128">    128 </a>	<a href="/source/s?defs=fd">fd</a> = <a href="/source/s?defs=open">open</a>(<a href="/source/s?defs=devnode">devnode</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="129">    129 </a><a class="hl" name="130">    130 </a>	<b>if</b> (<a href="/source/s?defs=fd">fd</a> &lt; <span class="n">0</span>) {<a class="l" name="131">    131 </a>		<a href="/source/s?defs=TRACE">TRACE</a>(<a href="/source/s?defs=traceall_msg">traceall_msg</a>(<span class="s">"Cannot open %s: %s\n"</span>, <a href="/source/s?defs=node">node</a>,<a class="l" name="132">    132 </a>		    <a href="/source/s?defs=strerror">strerror</a>(<a href="/source/s?defs=errno">errno</a>)));<a class="l" name="133">    133 </a>		<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="134">    134 </a>	}<a class="l" name="135">    135 </a><a class="l" name="136">    136 </a>	<a href="/source/s?defs=dev">dev</a> = (<a href="/source/s?defs=cd_device">cd_device</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<b>sizeof</b> (<a href="/source/s?defs=cd_device">cd_device</a>));<a class="l" name="137">    137 </a><a class="l" name="138">    138 </a>	<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_node">d_node</a> = (<b>char</b> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<a href="/source/s?defs=strlen">strlen</a>(<a href="/source/s?defs=devnode">devnode</a>) + <span class="n">1</span>);<a class="l" name="139">    139 </a>	(<b>void</b>) <a href="/source/s?defs=strcpy">strcpy</a>(<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_node">d_node</a>, <a href="/source/s?defs=devnode">devnode</a>);<a class="hl" name="140">    140 </a><a class="l" name="141">    141 </a>	<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_fd">d_fd</a> = <a href="/source/s?defs=fd">fd</a>;<a class="l" name="142">    142 </a><a class="l" name="143">    143 </a>	<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<a href="/source/s?defs=INQUIRY_DATA_LENGTH">INQUIRY_DATA_LENGTH</a>);<a class="l" name="144">    144 </a><a class="l" name="145">    145 </a>	<b>if</b> (!<a href="/source/s?defs=inquiry">inquiry</a>(<a href="/source/s?defs=fd">fd</a>, <a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>)) {<a class="l" name="146">    146 </a>		<a href="/source/s?defs=TRACE">TRACE</a>(<a href="/source/s?defs=traceall_msg">traceall_msg</a>(<span class="s">"Inquiry failed on device %s\n"</span>, <a href="/source/s?defs=node">node</a>));<a class="l" name="147">    147 </a>		<b>if</b> (<a href="/source/s?defs=debug">debug</a>) {<a class="l" name="148">    148 </a>			(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"USCSI ioctl failed %d\n"</span>,<a class="l" name="149">    149 </a>			    <a href="/source/s?defs=uscsi_error">uscsi_error</a>);<a class="hl" name="150">    150 </a>		}<a class="l" name="151">    151 </a>		<a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=dev">dev</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>);<a class="l" name="152">    152 </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="153">    153 </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="154">    154 </a>		<a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=dev">dev</a>);<a class="l" name="155">    155 </a>		<b>return</b> (<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="156">    156 </a>	}<a class="l" name="157">    157 </a><a class="l" name="158">    158 </a>	<b>if</b> (<a href="/source/s?defs=debug">debug</a>) {<a class="l" name="159">    159 </a>		<a href="/source/s?defs=cap">cap</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<span class="n">18</span>);<a class="hl" name="160">    160 </a>		(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"Checking device type\n"</span>);<a class="l" name="161">    161 </a>		<b>if</b> (<a href="/source/s?defs=get_mode_page">get_mode_page</a>(<a href="/source/s?defs=fd">fd</a>, <span class="n">0x2A</span>, <span class="n">0</span>, <span class="n">8</span>, <a href="/source/s?defs=cap">cap</a>)) {<a class="l" name="162">    162 </a>			<b>if</b> (<a href="/source/s?defs=cap">cap</a>[<span class="n">2</span>] &amp; <span class="n">0x10</span>)<a class="l" name="163">    163 </a>				(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"DVD-R read support\n"</span>);<a class="l" name="164">    164 </a>			<b>if</b> (<a href="/source/s?defs=cap">cap</a>[<span class="n">3</span>] &amp; <span class="n">0x10</span>)<a class="l" name="165">    165 </a>				(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"DVD-R write support\n"</span>);<a class="l" name="166">    166 </a>			<b>if</b> (<a href="/source/s?defs=cap">cap</a>[<span class="n">5</span>] &amp; <span class="n">0x4</span>)<a class="l" name="167">    167 </a>				(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"R-W supported\n"</span>);<a class="l" name="168">    168 </a>			<b>if</b> (<a href="/source/s?defs=cap">cap</a>[<span class="n">2</span>] &amp; <span class="n">0x20</span>)<a class="l" name="169">    169 </a>				(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"DVD-RAM read supported\n"</span>);<a class="hl" name="170">    170 </a>			<b>if</b> (<a href="/source/s?defs=cap">cap</a>[<span class="n">3</span>] &amp; <span class="n">0x20</span>)<a class="l" name="171">    171 </a>				(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"DVD-RAM write supported\n"</span>);<a class="l" name="172">    172 </a>		} <b>else</b> {<a class="l" name="173">    173 </a>			(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"Could not read mode page 2A! \n"</span>);<a class="l" name="174">    174 </a>		}

⌨️ 快捷键说明

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