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

📄 blank.c.htm

📁 光驱cdrom读写源代码,scsi命令解析
💻 HTM
📖 第 1 页 / 共 3 页
字号:
<a class="l" name="57">     57 </a>	 * silent_pass is set to 1 whenever we do not want to print<a class="l" name="58">     58 </a>	 * information messages. This is the case where blank() function<a class="l" name="59">     59 </a>	 * is called within the blank() function or the blank() function<a class="hl" name="60">     60 </a>	 * is called from other functions within cdrw to blank the media<a class="l" name="61">     61 </a>	 * as part of other operations (clearing ghost TOC, closing the media<a class="l" name="62">     62 </a>	 * after a write operation, etc). In all those cases we need not print<a class="l" name="63">     63 </a>	 * or duplicate information messages. We should also return from the<a class="l" name="64">     64 </a>	 * blank() function to the calling function in those cases.<a class="l" name="65">     65 </a>	 */</span><a class="l" name="66">     66 </a>	<b>int</b> <a href="/source/s?defs=ignore_error">ignore_error</a> = <span class="n">0</span>;<a class="l" name="67">     67 </a>	<span class="c">/*<a class="l" name="68">     68 </a>	 * ignore_error is set to 1 whenever we do not want to report any<a class="l" name="69">     69 </a>	 * error messages to the user and make things transparent to the<a class="hl" name="70">     70 </a>	 * user (For eg: Clearing ghost TOC during write simulation).<a class="l" name="71">     71 </a>	 */</span><a class="l" name="72">     72 </a><a class="l" name="73">     73 </a>	<a href="/source/s?defs=invalid">invalid</a> = <span class="n">0</span>;<a class="l" name="74">     74 </a>	<a href="/source/s?defs=err">err</a> = <span class="n">0</span>;<a class="l" name="75">     75 </a><a class="l" name="76">     76 </a>	(<b>void</b>) <a href="/source/s?defs=check_device">check_device</a>(<a href="/source/s?defs=target">target</a>, <a href="/source/s?defs=CHECK_TYPE_NOT_CDROM">CHECK_TYPE_NOT_CDROM</a> | <a href="/source/s?defs=CHECK_NO_MEDIA">CHECK_NO_MEDIA</a> |<a class="l" name="77">     77 </a>	    <a href="/source/s?defs=EXIT_IF_CHECK_FAILED">EXIT_IF_CHECK_FAILED</a>);<a class="l" name="78">     78 </a>	(<b>void</b>) <a href="/source/s?defs=check_device">check_device</a>(<a href="/source/s?defs=target">target</a>, <a href="/source/s?defs=CHECK_DEVICE_NOT_READY">CHECK_DEVICE_NOT_READY</a> |<a class="l" name="79">     79 </a>	    <a href="/source/s?defs=CHECK_DEVICE_NOT_WRITABLE">CHECK_DEVICE_NOT_WRITABLE</a> | <a href="/source/s?defs=EXIT_IF_CHECK_FAILED">EXIT_IF_CHECK_FAILED</a>);<a class="hl" name="80">     80 </a><a class="l" name="81">     81 </a>	<b>if</b> (<a href="/source/s?defs=blanking_type">blanking_type</a> == <a href="/source/s?defs=NULL">NULL</a>) {<a class="l" name="82">     82 </a>		<a href="/source/s?defs=invalid">invalid</a> = <span class="n">1</span>;<a class="l" name="83">     83 </a>	}<a class="l" name="84">     84 </a><a class="l" name="85">     85 </a>	<a href="/source/s?defs=get_media_type">get_media_type</a>(<a href="/source/s?defs=target">target</a>-&gt;<a href="/source/s?defs=d_fd">d_fd</a>);<a class="l" name="86">     86 </a><a class="l" name="87">     87 </a>	<b>if</b> (<a href="/source/s?defs=strcmp">strcmp</a>(<a href="/source/s?defs=blanking_type">blanking_type</a>, <span class="s">"all"</span>) == <span class="n">0</span>) {<a class="l" name="88">     88 </a>		<span class="c">/* erase the whole disk */</span><a class="l" name="89">     89 </a>		<a href="/source/s?defs=type">type</a> = <a href="/source/s?defs=ALL">ALL</a>;<a class="hl" name="90">     90 </a>	} <b>else</b> <b>if</b> (<a href="/source/s?defs=strcmp">strcmp</a>(<a href="/source/s?defs=blanking_type">blanking_type</a>, <span class="s">"session"</span>) == <span class="n">0</span>) {<a class="l" name="91">     91 </a>		<span class="c">/* only erase the last session */</span><a class="l" name="92">     92 </a>		<a href="/source/s?defs=type">type</a> = <a href="/source/s?defs=SESSION">SESSION</a>;<a class="l" name="93">     93 </a>	} <b>else</b> <b>if</b> (<a href="/source/s?defs=strcmp">strcmp</a>(<a href="/source/s?defs=blanking_type">blanking_type</a>, <span class="s">"fast"</span>) == <span class="n">0</span>) {<a class="l" name="94">     94 </a>		<span class="c">/* quick blank the TOC on the media */</span><a class="l" name="95">     95 </a>		<a href="/source/s?defs=type">type</a> = <a href="/source/s?defs=FAST">FAST</a>;<a class="l" name="96">     96 </a>	} <b>else</b> <b>if</b> (<a href="/source/s?defs=strcmp">strcmp</a>(<a href="/source/s?defs=blanking_type">blanking_type</a>, <span class="s">"leadout"</span>) == <span class="n">0</span>) {<a class="l" name="97">     97 </a>		<span class="c">/* erase the track tail to unclose the media */</span><a class="l" name="98">     98 </a>		<a href="/source/s?defs=type">type</a> = <a href="/source/s?defs=LEADOUT">LEADOUT</a>;<a class="l" name="99">     99 </a>		<a href="/source/s?defs=silent_pass">silent_pass</a> = <span class="n">1</span>;<a class="hl" name="100">    100 </a>	} <b>else</b> <b>if</b> (<a href="/source/s?defs=strcmp">strcmp</a>(<a href="/source/s?defs=blanking_type">blanking_type</a>, <span class="s">"clear"</span>) == <span class="n">0</span>) {<a class="l" name="101">    101 </a>		<span class="c">/*<a class="l" name="102">    102 </a>		 * used for drives where "all" blanking fails,<a class="l" name="103">    103 </a>		 * if it fails we follow up with a quick erase of TOC.<a class="l" name="104">    104 </a>		 * This is only called from within this function to do<a class="l" name="105">    105 </a>		 * a second blanking pass.<a class="l" name="106">    106 </a>		 */</span><a class="l" name="107">    107 </a>		<a href="/source/s?defs=type">type</a> = <a href="/source/s?defs=CLEAR">CLEAR</a>;<a class="l" name="108">    108 </a>		<a href="/source/s?defs=silent_pass">silent_pass</a> = <span class="n">1</span>;<a class="l" name="109">    109 </a>	} <b>else</b> <b>if</b> (<a href="/source/s?defs=strcmp">strcmp</a>(<a href="/source/s?defs=blanking_type">blanking_type</a>, <span class="s">"clear_ghost"</span>) == <span class="n">0</span>) {<a class="hl" name="110">    110 </a>		<span class="c">/*<a class="l" name="111">    111 </a>		 * used for drives in simulation mode to blank ghost<a class="l" name="112">    112 </a>		 * TOC after simulation write is complete.<a class="l" name="113">    113 </a>		 */</span><a class="l" name="114">    114 </a>		<a href="/source/s?defs=type">type</a> = <a href="/source/s?defs=CLEAR">CLEAR</a>;<a class="l" name="115">    115 </a>		<a href="/source/s?defs=silent_pass">silent_pass</a> = <span class="n">1</span>;<a class="l" name="116">    116 </a>		<a href="/source/s?defs=ignore_error">ignore_error</a> = <span class="n">1</span>;<a class="l" name="117">    117 </a>	} <b>else</b> {<a class="l" name="118">    118 </a>		<span class="c">/* invalid blank type was passed on the command line */</span><a class="l" name="119">    119 </a>		<a href="/source/s?defs=invalid">invalid</a> = <span class="n">1</span>;<a class="hl" name="120">    120 </a>	}<a class="l" name="121">    121 </a><a class="l" name="122">    122 </a>	<b>if</b> (<a href="/source/s?defs=invalid">invalid</a>) {<a class="l" name="123">    123 </a>		<a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Invalid blanking type specified\n"</span>));<a class="l" name="124">    124 </a>		<a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="125">    125 </a>	}<a class="l" name="126">    126 </a><a class="l" name="127">    127 </a>	<span class="c">/*<a class="l" name="128">    128 </a>	 * many DVD+RW drives do not allow blanking the media, it is also<a class="l" name="129">    129 </a>	 * not included in the spec, we would just reformat the media prior<a class="hl" name="130">    130 </a>	 * to writing. This is not the equivelent to blanking as the media<a class="l" name="131">    131 </a>	 * contains a TOC when formatted.<a class="l" name="132">    132 </a>	 */</span><a class="l" name="133">    133 </a>	<b>if</b> (<a href="/source/s?defs=device_type">device_type</a> == <a href="/source/s?defs=DVD_PLUS_W">DVD_PLUS_W</a>) {<a class="l" name="134">    134 </a>		<b>if</b> (<a href="/source/s?defs=ignore_error">ignore_error</a>)<a class="l" name="135">    135 </a>			<b>return</b>;<a class="l" name="136">    136 </a>		<a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Blanking cannot be done on DVD+RW media\n"</span>));<a class="l" name="137">    137 </a>		<a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="138">    138 </a>	}<a class="l" name="139">    139 </a><a class="hl" name="140">    140 </a>	<b>if</b> ((<a href="/source/s?defs=target">target</a>-&gt;<a href="/source/s?defs=d_inq">d_inq</a>[<span class="n">2</span>] &amp; <span class="n">7</span>) != <span class="n">0</span>) {<a class="l" name="141">    141 </a>		<span class="c">/* SCSI device */</span><a class="l" name="142">    142 </a>		<a href="/source/s?defs=immediate">immediate</a> = <span class="n">0</span>;<a class="l" name="143">    143 </a>	} <b>else</b> {<a class="l" name="144">    144 </a>		<span class="c">/* non-SCSI (e.g ATAPI) device */</span><a class="l" name="145">    145 </a>		<a href="/source/s?defs=immediate">immediate</a> = <span class="n">1</span>;<a class="l" name="146">    146 </a>	}<a class="l" name="147">    147 </a><a class="l" name="148">    148 </a>	<span class="c">/* we are doing a second pass. We don't want to re-print messsages */</span><a class="l" name="149">    149 </a>	<b>if</b> (!<a href="/source/s?defs=silent_pass">silent_pass</a>)<a class="hl" name="150">    150 </a>		<a href="/source/s?defs=print_n_flush">print_n_flush</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Initializing device..."</span>));<a class="l" name="151">    151 </a><a class="l" name="152">    152 </a>	<span class="c">/* Make sure that test write is off */</span><a class="l" name="153">    153 </a>	<a href="/source/s?defs=buf">buf</a> = (<a href="/source/s?defs=uchar_t">uchar_t</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<span class="n">64</span>);<a class="l" name="154">    154 </a><a class="l" name="155">    155 </a>	<span class="c">/* get mode page for test writing if it fails we cannot turn it off */</span><a class="l" name="156">    156 </a>	<b>if</b> (!<a href="/source/s?defs=get_mode_page">get_mode_page</a>(<a href="/source/s?defs=target">target</a>-&gt;<a href="/source/s?defs=d_fd">d_fd</a>, <span class="n">5</span>, <span class="n">0</span>, <span class="n">64</span>, <a href="/source/s?defs=buf">buf</a>)) {<a class="l" name="157">    157 </a>		<b>if</b> (<a href="/source/s?defs=ignore_error">ignore_error</a>)<a class="l" name="158">    158 </a>			<b>return</b>;<a class="l" name="159">    159 </a>		<a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Device not supported\n"</span>));<a class="hl" name="160">    160 </a>		<a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="161">    161 </a>	}<a class="l" name="162">    162 </a><a class="l" name="163">    163 </a>	<a href="/source/s?defs=buf">buf</a>[<span class="n">2</span>] &amp;= <span class="n">0xef</span>;<a class="l" name="164">    164 </a><a class="l" name="165">    165 </a>	<span class="c">/* turn laser on */</span><a class="l" name="166">    166 </a>	<b>if</b> (!<a href="/source/s?defs=set_mode_page">set_mode_page</a>(<a href="/source/s?defs=target">target</a>-&gt;<a href="/source/s?defs=d_fd">d_fd</a>, <a href="/source/s?defs=buf">buf</a>)) {<a class="l" name="167">    167 </a>		<b>if</b> (<a href="/source/s?defs=ignore_error">ignore_error</a>)<a class="l" name="168">    168 </a>			<b>return</b>;<a class="l" name="169">    169 </a>		<a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Unable to configure device\n"</span>));<a class="hl" name="170">    170 </a>		<a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="171">    171 </a>	}<a class="l" name="172">    172 </a>	<a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=buf">buf</a>);<a class="l" name="173">    173 </a><a class="l" name="174">    174 </a>	<span class="c">/* we are doing a second pass. We don't want to re-print messsages */</span><a class="l" name="175">    175 </a>	<b>if</b> (!<a href="/source/s?defs=silent_pass">silent_pass</a>) {<a class="l" name="176">    176 </a>		<span class="c">/* l10n_NOTE : 'done' as in "Initializing device...done"  */</span><a class="l" name="177">    177 </a>		(<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"done.\n"</span>));<a class="l" name="178">    178 </a><a class="l" name="179">    179 </a>		<a href="/source/s?defs=print_n_flush">print_n_flush</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="hl" name="180">    180 </a>		    <span class="s">"Blanking the media (Can take several minutes)..."</span>));

⌨️ 快捷键说明

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