util.c.htm
来自「光驱cdrom读写源代码,scsi命令解析」· HTM 代码 · 共 382 行 · 第 1/3 页
HTM
382 行
<a class="l" name="61"> 61 </a><a class="l" name="62"> 62 </a> <span class="c">/* Lets wait a sec. and try again */</span><a class="l" name="63"> 63 </a> <b>if</b> (<a href="/source/s?defs=errno">errno</a> == <a href="/source/s?defs=EAGAIN">EAGAIN</a>) {<a class="l" name="64"> 64 </a> (<b>void</b>) <a href="/source/s?defs=sleep">sleep</a>(<span class="n">1</span>);<a class="l" name="65"> 65 </a> <a href="/source/s?defs=ret">ret</a> = <a href="/source/s?defs=malloc">malloc</a>(<a href="/source/s?defs=size">size</a>);<a class="l" name="66"> 66 </a> }<a class="l" name="67"> 67 </a><a class="l" name="68"> 68 </a> <b>if</b> (<a href="/source/s?defs=ret">ret</a> == <a href="/source/s?defs=NULL">NULL</a>) {<a class="l" name="69"> 69 </a> (<b>void</b>) <a href="/source/s?defs=err_msg">err_msg</a>(<span class="s">"%s\n"</span>, <a href="/source/s?defs=gettext">gettext</a>(<a href="/source/s?defs=strerror">strerror</a>(<a href="/source/s?defs=errno">errno</a>)));<a class="hl" name="70"> 70 </a> (<b>void</b>) <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<a class="l" name="71"> 71 </a> <span class="s">"Memory allocation failure, Exiting...\n"</span>));<a class="l" name="72"> 72 </a> <a href="/source/s?defs=exit">exit</a>(<span class="n">1</span>);<a class="l" name="73"> 73 </a> }<a class="l" name="74"> 74 </a> }<a class="l" name="75"> 75 </a> (<b>void</b>) <a href="/source/s?defs=memset">memset</a>(<a href="/source/s?defs=ret">ret</a>, <span class="n">0</span>, <a href="/source/s?defs=size">size</a>);<a class="l" name="76"> 76 </a> <b>return</b> (<a href="/source/s?defs=ret">ret</a>);<a class="l" name="77"> 77 </a>}<a class="l" name="78"> 78 </a><a class="l" name="79"> 79 </a><span class="c">/*<a class="hl" name="80"> 80 </a> * Prints a string after going back pos number of steps.<a class="l" name="81"> 81 </a> * Mainly used to show %age complete.<a class="l" name="82"> 82 </a> */</span><a class="l" name="83"> 83 </a><b>int</b><a class="l" name="84"> 84 </a><a href="/source/s?defs=str_print">str_print</a>(<b>char</b> *<a href="/source/s?defs=str">str</a>, <b>int</b> <a href="/source/s?defs=pos">pos</a>)<a class="l" name="85"> 85 </a>{<a class="l" name="86"> 86 </a> <b>if</b> ((<a href="/source/s?defs=pos">pos</a> > <span class="n">0</span>) && (<a href="/source/s?defs=pos">pos</a> < <span class="n">80</span>)) {<a class="l" name="87"> 87 </a> (<b>void</b>) <a href="/source/s?defs=memset">memset</a>(<a href="/source/s?defs=strbuf">strbuf</a>, <span class="n">8</span>, <a href="/source/s?defs=pos">pos</a>);<a class="l" name="88"> 88 </a> <a href="/source/s?defs=strbuf">strbuf</a>[<a href="/source/s?defs=pos">pos</a>] = <span class="n">0</span>;<a class="l" name="89"> 89 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=strbuf">strbuf</a>);<a class="hl" name="90"> 90 </a> (<b>void</b>) <a href="/source/s?defs=memset">memset</a>(<a href="/source/s?defs=strbuf">strbuf</a>, <span class="s">' '</span>, <a href="/source/s?defs=pos">pos</a>);<a class="l" name="91"> 91 </a> <a href="/source/s?defs=strbuf">strbuf</a>[<a href="/source/s?defs=pos">pos</a>] = <span class="n">0</span>;<a class="l" name="92"> 92 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=strbuf">strbuf</a>);<a class="l" name="93"> 93 </a> (<b>void</b>) <a href="/source/s?defs=memset">memset</a>(<a href="/source/s?defs=strbuf">strbuf</a>, <span class="n">8</span>, <a href="/source/s?defs=pos">pos</a>);<a class="l" name="94"> 94 </a> <a href="/source/s?defs=strbuf">strbuf</a>[<a href="/source/s?defs=pos">pos</a>] = <span class="n">0</span>;<a class="l" name="95"> 95 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<a href="/source/s?defs=strbuf">strbuf</a>);<a class="l" name="96"> 96 </a> }<a class="l" name="97"> 97 </a><a class="l" name="98"> 98 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"%s"</span>, <a href="/source/s?defs=str">str</a>);<a class="l" name="99"> 99 </a> (<b>void</b>) <a href="/source/s?defs=fflush">fflush</a>(<a href="/source/s?defs=stdout">stdout</a>);<a class="hl" name="100"> 100 </a> <b>return</b> (<a href="/source/s?defs=strlen">strlen</a>(<a href="/source/s?defs=str">str</a>));<a class="l" name="101"> 101 </a>}<a class="l" name="102"> 102 </a><a class="l" name="103"> 103 </a><span class="c">/*<a class="l" name="104"> 104 </a> * dump the trackio_error struct.<a class="l" name="105"> 105 </a> */</span><a class="l" name="106"> 106 </a><b>void</b><a class="l" name="107"> 107 </a><a href="/source/s?defs=print_trackio_error">print_trackio_error</a>(<b>struct</b> <a href="/source/s?defs=trackio_error">trackio_error</a> *<a href="/source/s?defs=te">te</a>)<a class="l" name="108"> 108 </a>{<a class="l" name="109"> 109 </a> <b>char</b> *<a href="/source/s?defs=msg">msg</a>, *<a href="/source/s?defs=msg1">msg1</a>;<a class="hl" name="110"> 110 </a><a class="l" name="111"> 111 </a> <a href="/source/s?defs=msg">msg</a> = <a href="/source/s?defs=gettext">gettext</a>(<span class="s">"System could not supply data at the required rate.\n"</span>);<a class="l" name="112"> 112 </a> <a href="/source/s?defs=msg1">msg1</a> = <a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Try using a lower speed for write\n"</span>);<a class="l" name="113"> 113 </a><a class="l" name="114"> 114 </a> <b>switch</b> (<a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=err_type">err_type</a>) {<a class="l" name="115"> 115 </a> <b>case</b> <a href="/source/s?defs=TRACKIO_ERR_SYSTEM">TRACKIO_ERR_SYSTEM</a>:<a class="l" name="116"> 116 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"System error: %s\n"</span>), <a href="/source/s?defs=strerror">strerror</a>(<a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=te_errno">te_errno</a>));<a class="l" name="117"> 117 </a> <b>return</b>;<a class="l" name="118"> 118 </a> <b>case</b> <a href="/source/s?defs=TRACKIO_ERR_TRANSPORT">TRACKIO_ERR_TRANSPORT</a>:<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">"Transport mechanism error:\n"</span>));<a class="hl" name="120"> 120 </a> <b>if</b> (<a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=status">status</a> == <span class="n">2</span>) {<a class="l" name="121"> 121 </a> <b>if</b> ((<a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=key">key</a> == <span class="n">3</span>) && (<a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=asc">asc</a> == <span class="n">0x0c</span>) &&<a class="l" name="122"> 122 </a> (<a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=ascq">ascq</a> == <span class="n">9</span>)) {<a class="l" name="123"> 123 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=msg">msg</a>);<a class="l" name="124"> 124 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=msg1">msg1</a>);<a class="l" name="125"> 125 </a> <b>return</b>;<a class="l" name="126"> 126 </a> }<a class="l" name="127"> 127 </a> <b>if</b> (<a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=key">key</a> == <span class="n">3</span>) {<a class="l" name="128"> 128 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"Bad media.\n"</span>));<a class="l" name="129"> 129 </a> <b>return</b>;<a class="hl" name="130"> 130 </a> }<a class="l" name="131"> 131 </a> <b>if</b> (<a href="/source/s?defs=debug">debug</a>) {<a class="l" name="132"> 132 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<span class="s">"Sense key %x, <a href="/source/s?path=asc/">asc</a>/<a href="/source/s?path=asc/asq">asq</a> %x/%x\n"</span>,<a class="l" name="133"> 133 </a> <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=key">key</a>, <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=asc">asc</a>, <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=ascq">ascq</a>);<a class="l" name="134"> 134 </a> } <b>else</b> {<a class="l" name="135"> 135 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"I/O error\n"</span>));<a class="l" name="136"> 136 </a> }<a class="l" name="137"> 137 </a> <b>return</b>;<a class="l" name="138"> 138 </a> }<a class="l" name="139"> 139 </a> <b>if</b> (<a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=te_errno">te_errno</a> != <span class="n">0</span>)<a class="hl" name="140"> 140 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<span class="s">"%s\n"</span>, <a href="/source/s?defs=strerror">strerror</a>(<a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=te_errno">te_errno</a>));<a class="l" name="141"> 141 </a> <b>return</b>;<a class="l" name="142"> 142 </a> <b>case</b> <a href="/source/s?defs=TRACKIO_ERR_USER_ABORT">TRACKIO_ERR_USER_ABORT</a>:<a class="l" name="143"> 143 </a> <a href="/source/s?defs=err_msg">err_msg</a>(<a href="/source/s?defs=gettext">gettext</a>(<span class="s">"User abort.\n"</span>));<a class="l" name="144"> 144 </a> <b>return</b>;<a class="l" name="145"> 145 </a> <b>default</b>:<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">"Unknown error type.\n"</span>));<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> <a href="/source/s?defs=err_msg">err_msg</a>(<span class="s">"Trackio err type %d\n"</span>, <a href="/source/s?defs=te">te</a>-><a href="/source/s?defs=err_type">err_type</a>);<a class="l" name="149"> 149 </a> }<a class="hl" name="150"> 150 </a> }<a class="l" name="151"> 151 </a>}<a class="l" name="152"> 152 </a><a class="l" name="153"> 153 </a><b>char</b> *<a class="l" name="154"> 154 </a><a href="/source/s?defs=get_err_str">get_err_str</a>(<b>void</b>)<a class="l" name="155"> 155 </a>{<a class="l" name="156"> 156 </a> <b>if</b> (<a href="/source/s?defs=str_errno">str_errno</a> != <span class="n">0</span>)<a class="l" name="157"> 157 </a> <b>return</b> (<a href="/source/s?defs=str_errno_to_string">str_errno_to_string</a>(<a href="/source/s?defs=str_errno">str_errno</a>));<a class="l" name="158"> 158 </a> <b>return</b> (<a href="/source/s?defs=strerror">strerror</a>(<a href="/source/s?defs=errno">errno</a>));<a class="l" name="159"> 159 </a>}<a class="hl" name="160"> 160 </a><a class="l" name="161"> 161 </a><b>int</b><a class="l" name="162"> 162 </a><a href="/source/s?defs=get_audio_type">get_audio_type</a>(<b>char</b> *<a href="/source/s?defs=ext">ext</a>)<a class="l" name="163"> 163 </a>{<a class="l" name="164"> 164 </a> <b>if</b> ((<a href="/source/s?defs=strcasecmp">strcasecmp</a>(<a href="/source/s?defs=ext">ext</a>, <span class="s">"au"</span>) == <span class="n">0</span>) ||<a class="l" name="165"> 165 </a> (<a href="/source/s?defs=strcasecmp">strcasecmp</a>(<a href="/source/s?defs=ext">ext</a>, <span class="s">"sun"</span>) == <span class="n">0</span>))<a class="l" name="166"> 166 </a> <b>return</b> (<a href="/source/s?defs=AUDIO_TYPE_SUN">AUDIO_TYPE_SUN</a>);<a class="l" name="167"> 167 </a> <b>if</b> ((<a href="/source/s?defs=strcasecmp">strcasecmp</a>(<a href="/source/s?defs=ext">ext</a>, <span class="s">"wav"</span>) == <span class="n">0</span>) ||<a class="l" name="168"> 168 </a> (<a href="/source/s?defs=strcasecmp">strcasecmp</a>(<a href="/source/s?defs=ext">ext</a>, <span class="s">"riff"</span>) == <span class="n">0</span>))<a class="l" name="169"> 169 </a> <b>return</b> (<a href="/source/s?defs=AUDIO_TYPE_WAV">AUDIO_TYPE_WAV</a>);<a class="hl" name="170"> 170 </a> <b>if</b> (<a href="/source/s?defs=strcasecmp">strcasecmp</a>(<a href="/source/s?defs=ext">ext</a>, <span class="s">"cda"</span>) == <span class="n">0</span>)<a class="l" name="171"> 171 </a> <b>return</b> (<a href="/source/s?defs=AUDIO_TYPE_CDA">AUDIO_TYPE_CDA</a>);<a class="l" name="172"> 172 </a> <b>if</b> (<a href="/source/s?defs=strcasecmp">strcasecmp</a>(<a href="/source/s?defs=ext">ext</a>, <span class="s">"aur"</span>) == <span class="n">0</span>)<a class="l" name="173"> 173 </a> <b>return</b> (<a href="/source/s?defs=AUDIO_TYPE_AUR">AUDIO_TYPE_AUR</a>);<a class="l" name="174"> 174 </a><a class="l" name="175"> 175 </a> <b>return</b> (-<span class="n">1</span>);<a class="l" name="176"> 176 </a>}<a class="l" name="177"> 177 </a><a class="l" name="178"> 178 </a><span class="c">/*<a class="l" name="179"> 179 </a> * common routines for showing progress.<a class="hl" name="180"> 180 </a> */</span><a class="l" name="181"> 181 </a><a class="l" name="182"> 182 </a><b>int</b> <a href="/source/s?defs=progress_pos">progress_pos</a>;<a class="l" name="183"> 183 </a><b>static</b> <a href="/source/s?defs=uint64_t">uint64_t</a> <a href="/source/s?defs=last_total">last_total</a>;<a class="l" name="184"> 184 </a><a href="/source/s?defs=time_t">time_t</a> <a href="/source/s?defs=tm">tm</a>;<a class="l" name="185"> 185 </a><a class="l" name="186"> 186 </a><b>void</b><a class="l" name="187"> 187 </a><a href="/source/s?defs=init_progress">init_progress</a>(<b>void</b>)<a class="l" name="188"> 188 </a>{
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?