📄 util.c.htm
字号:
<a class="l" name="189"> 189 </a> <a href="/source/s?defs=progress_pos">progress_pos</a> = <span class="n">0</span>;<a class="hl" name="190"> 190 </a> <a href="/source/s?defs=last_total">last_total</a> = <span class="n">0</span>;<a class="l" name="191"> 191 </a> <a href="/source/s?defs=tm">tm</a> = <a href="/source/s?defs=time">time</a>(<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="192"> 192 </a>}<a class="l" name="193"> 193 </a><a class="l" name="194"> 194 </a><b>int</b><a class="l" name="195"> 195 </a><a href="/source/s?defs=progress">progress</a>(<a href="/source/s?defs=int64_t">int64_t</a> <a href="/source/s?defs=arg">arg</a>, <a href="/source/s?defs=int64_t">int64_t</a> <a href="/source/s?defs=completed">completed</a>)<a class="l" name="196"> 196 </a>{<a class="l" name="197"> 197 </a> <b>char</b> s[<a href="/source/s?defs=BUFSIZE">BUFSIZE</a>];<a class="l" name="198"> 198 </a> <a href="/source/s?defs=uint64_t">uint64_t</a> <a href="/source/s?defs=total">total</a> = (<a href="/source/s?defs=uint64_t">uint64_t</a>)<a href="/source/s?defs=arg">arg</a>;<a class="l" name="199"> 199 </a><a class="hl" name="200"> 200 </a> <b>if</b> (<a href="/source/s?defs=completed">completed</a> == -<span class="n">1</span>) {<a class="l" name="201"> 201 </a> <span class="c">/* Got ^C. Add 2 to progress pos to compensate for ^ and C */</span><a class="l" name="202"> 202 </a> <a href="/source/s?defs=progress_pos">progress_pos</a> = <a href="/source/s?defs=str_print">str_print</a>(<span class="s">"(flushing ...)"</span>, <a href="/source/s?defs=progress_pos">progress_pos</a>+<span class="n">2</span>);<a class="l" name="203"> 203 </a> <b>return</b> (<span class="n">0</span>);<a class="l" name="204"> 204 </a> }<a class="l" name="205"> 205 </a> <b>if</b> (<a href="/source/s?defs=total">total</a> == <span class="n">0</span>) {<a class="l" name="206"> 206 </a> <b>if</b> (<a href="/source/s?defs=tm">tm</a> != <a href="/source/s?defs=time">time</a>(<a href="/source/s?defs=NULL">NULL</a>)) {<a class="l" name="207"> 207 </a> <a href="/source/s?defs=tm">tm</a> = <a href="/source/s?defs=time">time</a>(<a href="/source/s?defs=NULL">NULL</a>);<a class="l" name="208"> 208 </a> (<b>void</b>) <a href="/source/s?defs=snprintf">snprintf</a>(s, <a href="/source/s?defs=BUFSIZE">BUFSIZE</a>,<a class="l" name="209"> 209 </a> <a href="/source/s?defs=gettext">gettext</a>(<span class="s">"%d bytes written"</span>), <a href="/source/s?defs=completed">completed</a>);<a class="hl" name="210"> 210 </a><a class="l" name="211"> 211 </a> <a href="/source/s?defs=progress_pos">progress_pos</a> = <a href="/source/s?defs=str_print">str_print</a>(s, <a href="/source/s?defs=progress_pos">progress_pos</a>);<a class="l" name="212"> 212 </a> }<a class="l" name="213"> 213 </a> } <b>else</b> {<a class="l" name="214"> 214 </a> <a href="/source/s?defs=total">total</a> = (((<a href="/source/s?defs=uint64_t">uint64_t</a>)<a href="/source/s?defs=completed">completed</a>) * <span class="n">100</span>)/<a href="/source/s?defs=total">total</a>;<a class="l" name="215"> 215 </a> <b>if</b> (<a href="/source/s?defs=total">total</a> == <a href="/source/s?defs=last_total">last_total</a>)<a class="l" name="216"> 216 </a> <b>return</b> (<span class="n">0</span>);<a class="l" name="217"> 217 </a> <a href="/source/s?defs=last_total">last_total</a> = <a href="/source/s?defs=total">total</a>;<a class="l" name="218"> 218 </a> <b>if</b> (<a href="/source/s?defs=total">total</a> > <span class="n">100</span>) {<a class="l" name="219"> 219 </a> <span class="c">/* There is clearly a miscalculation somewhere */</span><a class="hl" name="220"> 220 </a> <b>if</b> (<a href="/source/s?defs=debug">debug</a>)<a class="l" name="221"> 221 </a> (<b>void</b>) <a href="/source/s?defs=printf">printf</a>(<span class="s">"\nWrote more than 100 %% !!\n"</span>);<a class="l" name="222"> 222 </a> <b>return</b> (<span class="n">0</span>);<a class="l" name="223"> 223 </a> }<a class="l" name="224"> 224 </a> <b>if</b> (<a href="/source/s?defs=total">total</a> == <span class="n">100</span>) {<a class="l" name="225"> 225 </a> <span class="c">/* l10n_NOTE : 'done' as in "Writing track 1...done" */</span><a class="l" name="226"> 226 </a> (<b>void</b>) <a href="/source/s?defs=snprintf">snprintf</a>(s, <a href="/source/s?defs=BUFSIZE">BUFSIZE</a>, <a href="/source/s?defs=gettext">gettext</a>(<span class="s">"done.\n"</span>));<a class="l" name="227"> 227 </a> } <b>else</b> {<a class="l" name="228"> 228 </a> (<b>void</b>) <a href="/source/s?defs=snprintf">snprintf</a>(s, <a href="/source/s?defs=BUFSIZE">BUFSIZE</a>, <span class="s">"%d %%"</span>, (<a href="/source/s?defs=uint_t">uint_t</a>)<a href="/source/s?defs=total">total</a>);<a class="l" name="229"> 229 </a> }<a class="hl" name="230"> 230 </a> <a href="/source/s?defs=progress_pos">progress_pos</a> = <a href="/source/s?defs=str_print">str_print</a>(s, <a href="/source/s?defs=progress_pos">progress_pos</a>);<a class="l" name="231"> 231 </a> }<a class="l" name="232"> 232 </a> <b>return</b> (<span class="n">0</span>);<a class="l" name="233"> 233 </a>}<a class="l" name="234"> 234 </a><a class="l" name="235"> 235 </a><b>void</b><a class="l" name="236"> 236 </a><a href="/source/s?defs=raise_priv">raise_priv</a>(<b>void</b>)<a class="l" name="237"> 237 </a>{<a class="l" name="238"> 238 </a> <b>if</b> (<a href="/source/s?defs=priv_change_needed">priv_change_needed</a> && (<a href="/source/s?defs=cur_uid">cur_uid</a> != <span class="n">0</span>)) {<a class="l" name="239"> 239 </a> <b>if</b> (<a href="/source/s?defs=seteuid">seteuid</a>(<span class="n">0</span>) == <span class="n">0</span>)<a class="hl" name="240"> 240 </a> <a href="/source/s?defs=cur_uid">cur_uid</a> = <span class="n">0</span>;<a class="l" name="241"> 241 </a> }<a class="l" name="242"> 242 </a>}<a class="l" name="243"> 243 </a><a class="l" name="244"> 244 </a><b>void</b><a class="l" name="245"> 245 </a><a href="/source/s?defs=lower_priv">lower_priv</a>(<b>void</b>)<a class="l" name="246"> 246 </a>{<a class="l" name="247"> 247 </a> <b>if</b> (<a href="/source/s?defs=priv_change_needed">priv_change_needed</a> && (<a href="/source/s?defs=cur_uid">cur_uid</a> == <span class="n">0</span>)) {<a class="l" name="248"> 248 </a> <b>if</b> (<a href="/source/s?defs=seteuid">seteuid</a>(<a href="/source/s?defs=ruid">ruid</a>) == <span class="n">0</span>)<a class="l" name="249"> 249 </a> <a href="/source/s?defs=cur_uid">cur_uid</a> = <a href="/source/s?defs=ruid">ruid</a>;<a class="hl" name="250"> 250 </a> }<a class="l" name="251"> 251 </a>}<a class="l" name="252"> 252 </a><a class="l" name="253"> 253 </a><b>int</b><a class="l" name="254"> 254 </a><a href="/source/s?defs=check_auth">check_auth</a>(<a href="/source/s?defs=uid_t">uid_t</a> <a href="/source/s?defs=uid">uid</a>)<a class="l" name="255"> 255 </a>{<a class="l" name="256"> 256 </a> <b>struct</b> <a href="/source/s?defs=passwd">passwd</a> *<a href="/source/s?defs=pw">pw</a>;<a class="l" name="257"> 257 </a><a class="l" name="258"> 258 </a><a class="l" name="259"> 259 </a> <a href="/source/s?defs=pw">pw</a> = <a href="/source/s?defs=getpwuid">getpwuid</a>(<a href="/source/s?defs=uid">uid</a>);<a class="hl" name="260"> 260 </a><a class="l" name="261"> 261 </a> <b>if</b> (<a href="/source/s?defs=pw">pw</a> == <a href="/source/s?defs=NULL">NULL</a>) {<a class="l" name="262"> 262 </a> <span class="c">/* fail if we cannot get password entry */</span><a class="l" name="263"> 263 </a> <b>return</b> (<span class="n">0</span>);<a class="l" name="264"> 264 </a> }<a class="l" name="265"> 265 </a><a class="l" name="266"> 266 </a> <span class="c">/*<a class="l" name="267"> 267 </a> * check in the RBAC authority files to see if<a class="l" name="268"> 268 </a> * the user has permission to use CDRW<a class="l" name="269"> 269 </a> */</span><a class="hl" name="270"> 270 </a> <b>if</b> (<a href="/source/s?defs=chkauthattr">chkauthattr</a>(<a href="/source/s?defs=CDRW_AUTH">CDRW_AUTH</a>, <a href="/source/s?defs=pw">pw</a>-><a href="/source/s?defs=pw_name">pw_name</a>) != <span class="n">1</span>) {<a class="l" name="271"> 271 </a> <span class="c">/* user is not in database, return failure */</span><a class="l" name="272"> 272 </a> <b>return</b> (<span class="n">0</span>);<a class="l" name="273"> 273 </a> } <b>else</b> {<a class="l" name="274"> 274 </a> <b>return</b> (<span class="n">1</span>);<a class="l" name="275"> 275 </a> }<a class="l" name="276"> 276 </a>}<a class="l" name="277"> 277 </a><a class="l" name="278"> 278 </a><span class="c">/*<a class="l" name="279"> 279 </a> * This will busy delay in ms milliseconds. Needed for cases<a class="hl" name="280"> 280 </a> * where 1 sec wait is too long. This is needed for some newer<a class="l" name="281"> 281 </a> * drives which can empty the drive cache very quickly.<a class="l" name="282"> 282 </a> */</span><a class="l" name="283"> 283 </a><b>void</b><a class="l" name="284"> 284 </a><a href="/source/s?defs=ms_delay">ms_delay</a>(<a href="/source/s?defs=uint_t">uint_t</a> <a href="/source/s?defs=ms">ms</a>)<a class="l" name="285"> 285 </a>{<a class="l" name="286"> 286 </a><a class="l" name="287"> 287 </a> <a href="/source/s?defs=hrtime_t">hrtime_t</a> <a href="/source/s?defs=start">start</a>, <a href="/source/s?defs=req">req</a>;<a class="l" name="288"> 288 </a><a class="l" name="289"> 289 </a> <a href="/source/s?defs=start">start</a> = <a href="/source/s?defs=gethrtime">gethrtime</a>();<a class="hl" name="290"> 290 </a> <a href="/source/s?defs=req">req</a> = <a href="/source/s?defs=start">start</a> + ((<a href="/source/s?defs=hrtime_t">hrtime_t</a>)<a href="/source/s?defs=ms">ms</a> * <span class="n">1000000</span>);<a class="l" name="291"> 291 </a><a class="l" name="292"> 292 </a> <b>while</b> (<a href="/source/s?defs=gethrtime">gethrtime</a>() < <a href="/source/s?defs=req">req</a>)<a class="l" name="293"> 293 </a> <a href="/source/s?defs=yield">yield</a>();<a class="l" name="294"> 294 </a>}<a class="l" name="295"> 295 </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 + -