📄 write_image.c.htm
字号:
<a class="l" name="84"> 84 </a> <a href="/source/s?defs=image_file">image_file</a> ? <a href="/source/s?defs=image_file">image_file</a> : <span class="s">"stdin"</span>, <a href="/source/s?defs=get_err_str">get_err_str</a>());<a class="l" name="85"> 85 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="86"> 86 </a> }<a class="l" name="87"> 87 </a> <a href="/source/s?defs=no_size">no_size</a> = <span class="n">0</span>;<a class="l" name="88"> 88 </a> <a href="/source/s?defs=ret">ret</a> = h-><a href="/source/s?defs=bstr_size">bstr_size</a>(h, &<a href="/source/s?defs=size">size</a>);<a class="l" name="89"> 89 </a> <b>if</b> (<a href="/source/s?defs=ret">ret</a> == <span class="n">0</span>) {<a class="hl" name="90"> 90 </a> <b>if</b> ((<a href="/source/s?defs=str_errno">str_errno</a> == <a href="/source/s?defs=STR_ERR_NO_REG_FILE">STR_ERR_NO_REG_FILE</a>)) {<a class="l" name="91"> 91 </a> <a href="/source/s?defs=no_size">no_size</a> = <span class="n">1</span>;<a class="l" name="92"> 92 </a> } <b>else</b> {<a class="l" name="93"> 93 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Cannot stat input file: %s\n"</span>),<a class="l" name="94"> 94 </a> <a href="/source/s?defs=get_err_str">get_err_str</a>());<a class="l" name="95"> 95 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="96"> 96 </a> }<a class="l" name="97"> 97 </a> }<a class="l" name="98"> 98 </a> <b>if</b> ((<a href="/source/s?defs=no_size">no_size</a> == <span class="n">0</span>) && (<a href="/source/s?defs=size">size</a> == <span class="n">0</span>)) {<a class="l" name="99"> 99 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Input size(0) not valid\n"</span>));<a class="hl" name="100"> 100 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="101"> 101 </a> }<a class="l" name="102"> 102 </a> <b>if</b> (<a href="/source/s?defs=no_size">no_size</a> == <span class="n">0</span>) {<a class="l" name="103"> 103 </a> <a href="/source/s?defs=off_t">off_t</a> <a href="/source/s?defs=cap">cap</a>;<a class="l" name="104"> 104 </a> <b>struct</b> <a href="/source/s?defs=track_info">track_info</a> *<a href="/source/s?defs=ti">ti</a>;<a class="l" name="105"> 105 </a> <a href="/source/s?defs=uint_t">uint_t</a> <a href="/source/s?defs=bsize">bsize</a>;<a class="l" name="106"> 106 </a><a class="l" name="107"> 107 </a> <a href="/source/s?defs=ti">ti</a> = (<b>struct</b> <a href="/source/s?defs=track_info">track_info</a> *)<a href="/source/s?defs=my_zalloc">my_zalloc</a>(<b>sizeof</b> (*<a href="/source/s?defs=ti">ti</a>));<a class="l" name="108"> 108 </a> <b>if</b> (<a href="/source/s?defs=write_mode">write_mode</a> == <a href="/source/s?defs=TAO_MODE">TAO_MODE</a>)<a class="l" name="109"> 109 </a> <b>if</b> (!<a href="/source/s?defs=build_track_info">build_track_info</a>(<a href="/source/s?defs=target">target</a>, -<span class="n">1</span>, <a href="/source/s?defs=ti">ti</a>)) {<a class="hl" name="110"> 110 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a class="l" name="111"> 111 </a> <a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Unable to find out writable "</span><a class="l" name="112"> 112 </a> <span class="s">"address\n"</span>));<a class="l" name="113"> 113 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="114"> 114 </a> }<a class="l" name="115"> 115 </a> <b>if</b> (<a href="/source/s?defs=device_type">device_type</a> == <a href="/source/s?defs=CD_RW">CD_RW</a>) {<a class="l" name="116"> 116 </a> <b>if</b> ((<a href="/source/s?defs=cap">cap</a> = <a href="/source/s?defs=get_last_possible_lba">get_last_possible_lba</a>(<a href="/source/s?defs=target">target</a>)) <= <span class="n">0</span>) {<a class="l" name="117"> 117 </a> <b>if</b> ((<a href="/source/s?defs=cap">cap</a> = <a href="/source/s?defs=read_format_capacity">read_format_capacity</a>(<a href="/source/s?defs=target">target</a>-><a href="/source/s?defs=d_fd">d_fd</a>,<a class="l" name="118"> 118 </a> &<a href="/source/s?defs=bsize">bsize</a>)) <= <span class="n">0</span>) {<a class="l" name="119"> 119 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Unable to determine "</span><a class="hl" name="120"> 120 </a> <span class="s">"media capacity. Defaulting to "</span><a class="l" name="121"> 121 </a> <span class="s">"650 MB (74 minute) disc.\n"</span>));<a class="l" name="122"> 122 </a> <a href="/source/s?defs=cap">cap</a> = <a href="/source/s?defs=MAX_CD_BLKS">MAX_CD_BLKS</a>;<a class="l" name="123"> 123 </a> }<a class="l" name="124"> 124 </a> }<a class="l" name="125"> 125 </a> } <b>else</b> {<a class="l" name="126"> 126 </a> <span class="c">/*<a class="l" name="127"> 127 </a> * For DVD drives use read_format_capacity to<a class="l" name="128"> 128 </a> * find media size, it can be 3.6, 3.9, 4.2,<a class="l" name="129"> 129 </a> * 4.7, 9.2<a class="hl" name="130"> 130 </a> */</span><a class="l" name="131"> 131 </a> <a href="/source/s?defs=cap">cap</a> = <a href="/source/s?defs=read_format_capacity">read_format_capacity</a>(<a href="/source/s?defs=target">target</a>-><a href="/source/s?defs=d_fd">d_fd</a>,<a class="l" name="132"> 132 </a> &<a href="/source/s?defs=bsize">bsize</a>);<a class="l" name="133"> 133 </a> <span class="c">/*<a class="l" name="134"> 134 </a> * Sanity check; Default to 4.7 GB if cap unreasonable<a class="l" name="135"> 135 </a> */</span><a class="l" name="136"> 136 </a> <b>if</b> (<a href="/source/s?defs=cap">cap</a> < <a href="/source/s?defs=MAX_CD_BLKS">MAX_CD_BLKS</a>)<a class="l" name="137"> 137 </a> <a href="/source/s?defs=cap">cap</a> = <a href="/source/s?defs=MAX_DVD_BLKS">MAX_DVD_BLKS</a>;<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=device_type">device_type</a> == <a href="/source/s?defs=CD_RW">CD_RW</a>)<a class="l" name="141"> 141 </a> <a href="/source/s?defs=cap">cap</a> = (<a href="/source/s?defs=cap">cap</a> + <span class="n">1</span> - <a href="/source/s?defs=ti">ti</a>-><a href="/source/s?defs=ti_start_address">ti_start_address</a>) * <span class="n">2048</span>;<a class="l" name="142"> 142 </a> <b>else</b><a class="l" name="143"> 143 </a> <a href="/source/s?defs=cap">cap</a> *= <span class="n">2048</span> + <span class="n">1</span>;<a class="l" name="144"> 144 </a><a class="l" name="145"> 145 </a> <b>if</b> (<a href="/source/s?defs=size">size</a> > <a href="/source/s?defs=cap">cap</a>) {<a class="l" name="146"> 146 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Size required (%lld bytes) is greater "</span><a class="l" name="147"> 147 </a> <span class="s">"than available space (%lld bytes).\n"</span>), <a href="/source/s?defs=size">size</a>, <a href="/source/s?defs=cap">cap</a>);<a class="l" name="148"> 148 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="149"> 149 </a> }<a class="hl" name="150"> 150 </a><a class="l" name="151"> 151 </a> <b>if</b> (<a href="/source/s?defs=device_type">device_type</a> == <a href="/source/s?defs=DVD_MINUS">DVD_MINUS</a>) {<a class="l" name="152"> 152 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Preparing to write DVD\n"</span>));<a class="l" name="153"> 153 </a><a class="l" name="154"> 154 </a> <span class="c">/* streamed file, we dont know the size to reserve */</span><a class="l" name="155"> 155 </a> <b>if</b> (<a href="/source/s?defs=no_size">no_size</a> == <span class="n">1</span>) {<a class="l" name="156"> 156 </a> <a href="/source/s?defs=size">size</a> = <a href="/source/s?defs=cap">cap</a> - <span class="n">1</span>;<a class="l" name="157"> 157 </a> }<a class="l" name="158"> 158 </a><a class="l" name="159"> 159 </a> <span class="c">/* DAO requires that we reserve the size to write */</span><a class="hl" name="160"> 160 </a> <b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="l" name="161"> 161 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a class="l" name="162"> 162 </a> <span class="s">"DAO_MODE:reserving track size of = 0x%x\n"</span>,<a class="l" name="163"> 163 </a> (<a href="/source/s?defs=uint32_t">uint32_t</a>)(<a href="/source/s?defs=size">size</a>/<span class="n">2048</span>));<a class="l" name="164"> 164 </a><a class="l" name="165"> 165 </a> <b>if</b> (!<a href="/source/s?defs=set_reservation">set_reservation</a>(<a href="/source/s?defs=target">target</a>-><a href="/source/s?defs=d_fd">d_fd</a>, <a href="/source/s?defs=size">size</a>/<span class="n">2048</span>)) {<a class="l" name="166"> 166 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="l" name="167"> 167 </a> <span class="s">"Setting reservation failed\n"</span>));<a class="l" name="168"> 168 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="169"> 169 </a> }<a class="hl" name="170"> 170 </a> } <b>else</b> <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="171"> 171 </a> <span class="c">/*<a class="l" name="172"> 172 </a> * DVD+RW requires that we format the media before<a class="l" name="173"> 173 </a> * writing.<a class="l" name="174"> 174 </a> */</span><a class="l" name="175"> 175 </a> (<b>void</b>) <a href="/source/s?defs=print_n_flush">print_n_flush</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Formatting media..."</span>));<a class="l" name="176"> 176 </a> <b>if</b> (!<a href="/source/s?defs=format_media">format_media</a>(<a href="/source/s?defs=target">target</a>-><a href="/source/s?defs=d_fd">d_fd</a>)) {<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>(<a class="l" name="178"> 178 </a> <span class="s">"Could not format media\n"</span>));<a class="l" name="179"> 179 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="hl" name="180"> 180 </a> } <b>else</b> {<a class="l" name="181"> 181 </a> <b>int</b> <a href="/source/s?defs=counter">counter</a>;<a class="l" name="182"> 182 </a> <a href="/source/s?defs=uchar_t">uchar_t</a> *<a href="/source/s?defs=di">di</a>;<a class="l" name="183"> 183 </a><a class="l" name="184"> 184 </a> <span class="c">/* poll until format is done */</span><a class="l" name="185"> 185 </a> <a href="/source/s?defs=di">di</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=DISC_INFO_BLOCK_SIZE">DISC_INFO_BLOCK_SIZE</a>);<a class="l" name="186"> 186 </a> (<b>void</b>) <a href="/source/s?defs=sleep">sleep</a>(<span class="n">10</span>);<a class="l" name="187"> 187 </a> <b>for</b> (<a href="/source/s?defs=counter">counter</a> = <span class="n">0</span>; <a href="/source/s?defs=counter">counter</a> < <span class="n">200</span>; <a href="/source/s?defs=counter">counter</a>++) {<a class="l" name="188"> 188 </a><a class="l" name="189"> 189 </a> <a href="/source/s?defs=ret">ret</a> = <a href="/source/s?defs=read_disc_info">read_disc_info</a>(<a href="/source/s?defs=target">target</a>-><a href="/source/s?defs=d_fd">d_fd</a>, <a href="/source/s?defs=di">di</a>);<a class="hl" name="190"> 190 </a><a class="l" name="191"> 191 </a> <b>if</b> ((<a href="/source/s?defs=SENSE_KEY">SENSE_KEY</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>) == <span class="n">2</span>) &&<a class="l" name="192"> 192 </a> (<a href="/source/s?defs=ASC">ASC</a>(<a href="/source/s?defs=rqbuf">rqbuf</a>) == <span class="n">4</span>)) {<a class="l" name="193"> 193 </a> (<b>void</b>) <a href="/source/s?defs=print_n_flush">print_n_flush</a>(<span class="s">"."</span>);<a class="l" name="194"> 194 </a> (<b>void</b>) <a href="/source/s?defs=sleep">sleep</a>(<span class="n">5</span>);<a class="l" name="195"> 195 </a> } <b>else</b> {<a class="l" name="196"> 196 </a> <b>break</b>;<a class="l" name="197"> 197 </a> }<a class="l" name="198"> 198 </a> }<a class="l" name="199"> 199 </a> }<a class="hl" name="200"> 200 </a><a class="l" name="201"> 201 </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="202"> 202 </a> }<a class="l" name="203"> 203 </a><a class="l" name="204"> 204 </a><a class="l" name="205"> 205 </a> <a href="/source/s?defs=free">free</a>(<a href="/source/s?defs=ti">ti</a>);<a class="l" name="206"> 206 </a> }<a class="l" name="207"> 207 </a><a class="l" name="208"> 208 </a> <a href="/source/s?defs=write_next_track">write_next_track</a>(<a href="/source/s?defs=TRACK_MODE_DATA">TRACK_MODE_DATA</a>, h);<a class="l" name="209"> 209 </a><a class="hl" name="210"> 210 </a> h-><a href="/source/s?defs=bstr_close">bstr_close</a>(h);<a class="l" name="211"> 211 </a> <a href="/source/s?defs=write_fini">write_fini</a>();<a class="l" name="212"> 212 </a> <a href="/source/s?defs=fini_device">fini_device</a>(<a href="/source/s?defs=target">target</a>);<a class="l" name="213"> 213 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">0</span>);<a class="l" name="214"> 214 </a>}<a class="l" name="215"> 215 </a></pre></div><div id="Footer"><p class="Center"><a href="http://www.opensolaris.org/os/project/opengrok/"><img src="/source/default/img/servedby.png" alt="Served by OpenGrok" title="Served by OpenGrok"/></a></p><p class="Center"><a href="http://www.opensolaris.org/os/tou/">Terms of Use</a> |<a href="http://www.sun.com/privacy/">Privacy</a> |<a href="http://www.opensolaris.org/os/trademark/">Trademarks</a> |<a href="http://www.opensolaris.org/os/copyrights/">Copyright Policy</a> |<a href="http://www.opensolaris.org/os/site_guidelines/">Site Guidelines</a> |<a href="http://www.opensolaris.org/os/about/help/">Help</a><br />Your use of this web site or any of its content or software indicates your agreement to be bound by these Terms of Use.<br />Copyright © 1995-2008 Sun Microsystems, Inc.<br /></p><script type="text/javascript" src="http://www.opensolaris.org/js/s_code_remote.js"></script></div></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -