Sophie

Sophie

distrib > Fedora > 15 > i386 > by-pkgid > 1f9eb832ba1e4b88d9a5c2b384813bb4 > files > 5448

kdelibs3-apidocs-3.5.10-31.fc15.noarch.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en_US" xml:lang="en_US">

<head>
  <title>kio/kio: global.cpp Source File (kio/kio)</title>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

  <meta http-equiv="Content-Style-Type" content="text/css" />

  <meta http-equiv="pics-label" content='(pics-1.1 "http://www.icra.org/ratingsv02.html" comment "ICRAonline DE v2.0" l gen true for "http://www.kde.org"  r (nz 1 vz 1 lz 1 oz 1 cb 1) "http://www.rsac.org/ratingsv01.html" l gen true for "http://www.kde.org"  r (n 0 s 0 v 0 l 0))' />

  <meta name="trademark" content="KDE e.V." />
  <meta name="description" content="K Desktop Environment Homepage, KDE.org" />
  <meta name="MSSmartTagsPreventParsing" content="true" />
  <meta name="robots" content="all" />

  <link rel="shortcut icon" href="../../../favicon.ico" />

<link rel="stylesheet" media="screen" type="text/css" title="APIDOX" href="doxygen.css" />



</head>

<body>

<div id="nav_header_top" align="right">
  <a href="#content" class="doNotDisplay" accesskey="2">Skip to main content ::</a>

  <a href="../../.."><img id="nav_header_logo" alt="Home" align="left" src="../../../kde_gear_64.png" border="0" /></a>
  <span class="doNotDisplay">::</span>

  <div id="nav_header_title" align="left">KDE API Reference</div>


</div>

<div id="nav_header_bottom" align="right">
  <span class="doNotDisplay">:: <a href="#navigation" accesskey="5">Skip to Link Menu</a><br/></span>
  <div id="nav_header_bottom_right" style="text-align: left;">
/ <a href="../../..">API Reference</a>
 / <a href="../../html/index.html">kio</a> / <a href=".">kio</a>
  </div>
</div>


<table id="main" border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
      <td valign="top" class="menuheader" height="0"></td>

  <td id="contentcolumn" valign="top" rowspan="2" >
    <div id="content" style="padding-top: 0px;"><div style="width:100%; margin: 0px; padding: 0px;">
    <a name="content"></a>


<!-- Generated by Doxygen 1.7.4 -->
<div class="header">
  <div class="headertitle">
<div class="title">global.cpp</div>  </div>
</div>
<div class="contents">
<div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/* This file is part of the KDE libraries</span>
<a name="l00002"></a>00002 <span class="comment">   Copyright (C) 2000 David Faure &lt;faure@kde.org&gt;</span>
<a name="l00003"></a>00003 <span class="comment"></span>
<a name="l00004"></a>00004 <span class="comment">   This library is free software; you can redistribute it and/or</span>
<a name="l00005"></a>00005 <span class="comment">   modify it under the terms of the GNU Library General Public</span>
<a name="l00006"></a>00006 <span class="comment">   License version 2 as published by the Free Software Foundation.</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment">   This library is distributed in the hope that it will be useful,</span>
<a name="l00009"></a>00009 <span class="comment">   but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<a name="l00010"></a>00010 <span class="comment">   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU</span>
<a name="l00011"></a>00011 <span class="comment">   Library General Public License for more details.</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment">   You should have received a copy of the GNU Library General Public License</span>
<a name="l00014"></a>00014 <span class="comment">   along with this library; see the file COPYING.LIB.  If not, write to</span>
<a name="l00015"></a>00015 <span class="comment">   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,</span>
<a name="l00016"></a>00016 <span class="comment">   Boston, MA 02110-1301, USA.</span>
<a name="l00017"></a>00017 <span class="comment">*/</span>
<a name="l00018"></a>00018 
<a name="l00019"></a>00019 <span class="preprocessor">#include &lt;config.h&gt;</span>
<a name="l00020"></a>00020 
<a name="l00021"></a>00021 <span class="preprocessor">#include &lt;sys/types.h&gt;</span>
<a name="l00022"></a>00022 <span class="preprocessor">#include &lt;sys/wait.h&gt;</span>
<a name="l00023"></a>00023 <span class="preprocessor">#include &lt;sys/uio.h&gt;</span>
<a name="l00024"></a>00024 
<a name="l00025"></a>00025 <span class="preprocessor">#include &lt;assert.h&gt;</span>
<a name="l00026"></a>00026 <span class="preprocessor">#include &lt;signal.h&gt;</span>
<a name="l00027"></a>00027 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l00028"></a>00028 <span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00029"></a>00029 <span class="preprocessor">#include &lt;unistd.h&gt;</span>
<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l00031"></a>00031 
<a name="l00032"></a>00032 <span class="preprocessor">#include &quot;kio/global.h&quot;</span>
<a name="l00033"></a>00033 <span class="preprocessor">#include &quot;kio/job.h&quot;</span>
<a name="l00034"></a>00034 
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;kdebug.h&gt;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;klocale.h&gt;</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include &lt;kglobal.h&gt;</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include &lt;kprotocolmanager.h&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include &lt;kde_file.h&gt;</span>
<a name="l00040"></a>00040 
<a name="l00041"></a>00041 <span class="preprocessor">#ifdef HAVE_VOLMGT</span>
<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#include &lt;volmgt.h&gt;</span>
<a name="l00043"></a>00043 <span class="preprocessor">#endif</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span>
<a name="l00045"></a><a class="code" href="namespaceKIO.html#a91a01d5b66fbfb35ca7d207750d6483d">00045</a> KIO_EXPORT <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#a91a01d5b66fbfb35ca7d207750d6483d" title="Converts size from bytes to a string representation with includes the size in bytes.">KIO::convertSizeWithBytes</a>( <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> size )
<a name="l00046"></a>00046 {
<a name="l00047"></a>00047     <span class="keywordflow">if</span> ( size &gt;= 1024 )
<a name="l00048"></a>00048         <span class="keywordflow">return</span> <a class="code" href="namespaceKIO.html#a350bd897f2425789f4fbd250882700f9" title="Converts size from bytes to the string representation.">convertSize</a>( size ) + <span class="stringliteral">&quot; (&quot;</span> + i18n( <span class="stringliteral">&quot;%1 B&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( KGlobal::locale()-&gt;formatNumber(size, 0) ) + <span class="stringliteral">&quot;)&quot;</span>;
<a name="l00049"></a>00049     <span class="keywordflow">else</span>
<a name="l00050"></a>00050     <span class="keywordflow">return</span> <a class="code" href="namespaceKIO.html#a350bd897f2425789f4fbd250882700f9" title="Converts size from bytes to the string representation.">convertSize</a>( size );
<a name="l00051"></a>00051 }
<a name="l00052"></a>00052 
<a name="l00053"></a><a class="code" href="namespaceKIO.html#a350bd897f2425789f4fbd250882700f9">00053</a> KIO_EXPORT <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#a350bd897f2425789f4fbd250882700f9" title="Converts size from bytes to the string representation.">KIO::convertSize</a>( <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> size )
<a name="l00054"></a>00054 {
<a name="l00055"></a>00055     <span class="keywordtype">double</span> fsize = size;
<a name="l00056"></a>00056     <a class="codeRef" href="qstring.html">QString</a> s;
<a name="l00057"></a>00057     <span class="comment">// Giga-byte</span>
<a name="l00058"></a>00058     <span class="keywordflow">if</span> ( size &gt;= 1073741824 )
<a name="l00059"></a>00059     {
<a name="l00060"></a>00060         fsize /= 1073741824.0;
<a name="l00061"></a>00061         <span class="keywordflow">if</span> ( fsize &gt; 1024 ) <span class="comment">// Tera-byte</span>
<a name="l00062"></a>00062             s = i18n( <span class="stringliteral">&quot;%1 TB&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( KGlobal::locale()-&gt;formatNumber(fsize / 1024.0, 1));
<a name="l00063"></a>00063         <span class="keywordflow">else</span>
<a name="l00064"></a>00064             s = i18n( <span class="stringliteral">&quot;%1 GB&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( KGlobal::locale()-&gt;formatNumber(fsize, 1));
<a name="l00065"></a>00065     }
<a name="l00066"></a>00066     <span class="comment">// Mega-byte</span>
<a name="l00067"></a>00067     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( size &gt;= 1048576 )
<a name="l00068"></a>00068     {
<a name="l00069"></a>00069         fsize /= 1048576.0;
<a name="l00070"></a>00070         s = i18n( <span class="stringliteral">&quot;%1 MB&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( KGlobal::locale()-&gt;formatNumber(fsize, 1));
<a name="l00071"></a>00071     }
<a name="l00072"></a>00072     <span class="comment">// Kilo-byte</span>
<a name="l00073"></a>00073     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( size &gt;= 1024 )
<a name="l00074"></a>00074     {
<a name="l00075"></a>00075         fsize /= 1024.0;
<a name="l00076"></a>00076         s = i18n( <span class="stringliteral">&quot;%1 KB&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( KGlobal::locale()-&gt;formatNumber(fsize, 1));
<a name="l00077"></a>00077     }
<a name="l00078"></a>00078     <span class="comment">// Just byte</span>
<a name="l00079"></a>00079     <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( size &gt; 0 )
<a name="l00080"></a>00080     {
<a name="l00081"></a>00081         s = i18n( <span class="stringliteral">&quot;%1 B&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( KGlobal::locale()-&gt;formatNumber(fsize, 0));
<a name="l00082"></a>00082     }
<a name="l00083"></a>00083     <span class="comment">// Nothing</span>
<a name="l00084"></a>00084     <span class="keywordflow">else</span>
<a name="l00085"></a>00085     {
<a name="l00086"></a>00086         s = i18n( <span class="stringliteral">&quot;0 B&quot;</span> );
<a name="l00087"></a>00087     }
<a name="l00088"></a>00088     <span class="keywordflow">return</span> s;
<a name="l00089"></a>00089 }
<a name="l00090"></a>00090 
<a name="l00091"></a><a class="code" href="namespaceKIO.html#a2bd3a1c75f3bab5d0528aba34ed9f0f7">00091</a> KIO_EXPORT <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#a2bd3a1c75f3bab5d0528aba34ed9f0f7" title="Converts size from kilo-bytes to the string representation.">KIO::convertSizeFromKB</a>( <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> kbSize )
<a name="l00092"></a>00092 {
<a name="l00093"></a>00093     <span class="keywordflow">return</span> <a class="code" href="namespaceKIO.html#a350bd897f2425789f4fbd250882700f9" title="Converts size from bytes to the string representation.">convertSize</a>(kbSize * 1024);
<a name="l00094"></a>00094 }
<a name="l00095"></a>00095 
<a name="l00096"></a><a class="code" href="namespaceKIO.html#a61e1ebe49305dcd7418b4692d56079b0">00096</a> KIO_EXPORT <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#a61e1ebe49305dcd7418b4692d56079b0" title="Converts a size to a string representation Not unlike QString::number(...)">KIO::number</a>( <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> size )
<a name="l00097"></a>00097 {
<a name="l00098"></a>00098     <span class="keywordtype">char</span> charbuf[256];
<a name="l00099"></a>00099     sprintf(charbuf, <span class="stringliteral">&quot;%lld&quot;</span>, size);
<a name="l00100"></a>00100     <span class="keywordflow">return</span> <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(charbuf);
<a name="l00101"></a>00101 }
<a name="l00102"></a>00102 
<a name="l00103"></a><a class="code" href="namespaceKIO.html#afe6f790a8e6ee50dabe6cb11cc2b3023">00103</a> KIO_EXPORT <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespaceKIO.html#afe6f790a8e6ee50dabe6cb11cc2b3023" title="Calculates remaining time in seconds from total size, processed size and speed.">KIO::calculateRemainingSeconds</a>( <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> totalSize,
<a name="l00104"></a>00104                                                         <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> processedSize, <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> speed )
<a name="l00105"></a>00105 {
<a name="l00106"></a>00106   <span class="keywordflow">if</span> ( (speed != 0) &amp;&amp; (totalSize != 0) )
<a name="l00107"></a>00107     <span class="keywordflow">return</span> ( totalSize - processedSize ) / speed;
<a name="l00108"></a>00108   <span class="keywordflow">else</span>
<a name="l00109"></a>00109     <span class="keywordflow">return</span> 0;
<a name="l00110"></a>00110 }
<a name="l00111"></a>00111 
<a name="l00112"></a><a class="code" href="namespaceKIO.html#a3f4a1f39cdec3c9ba6a1e65044d09bc4">00112</a> KIO_EXPORT <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#a3f4a1f39cdec3c9ba6a1e65044d09bc4" title="Convert seconds to a string representing number of days, hours, minutes and seconds.">KIO::convertSeconds</a>( <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> seconds )
<a name="l00113"></a>00113 {
<a name="l00114"></a>00114   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> days  = seconds / 86400;
<a name="l00115"></a>00115   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hours = (seconds - (days * 86400)) / 3600;
<a name="l00116"></a>00116   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> mins  = (seconds - (days * 86400) - (hours * 3600)) / 60;
<a name="l00117"></a>00117   seconds            = (seconds - (days * 86400) - (hours * 3600) - (mins * 60));
<a name="l00118"></a>00118 
<a name="l00119"></a>00119   <span class="keyword">const</span> <a class="codeRef" href="qtime.html">QTime</a> time(hours, mins, seconds);
<a name="l00120"></a>00120   <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> timeStr( KGlobal::locale()-&gt;formatTime(time, <span class="keyword">true</span> <span class="comment">/*with seconds*/</span>, <span class="keyword">true</span> <span class="comment">/*duration*/</span>) );
<a name="l00121"></a>00121   <span class="keywordflow">if</span> ( days &gt; 0 )
<a name="l00122"></a>00122     <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;1 day %1&quot;</span>, <span class="stringliteral">&quot;%n days %1&quot;</span>, days).arg(timeStr);
<a name="l00123"></a>00123   <span class="keywordflow">else</span>
<a name="l00124"></a>00124     <span class="keywordflow">return</span> timeStr;
<a name="l00125"></a>00125 }
<a name="l00126"></a>00126 
<a name="l00127"></a><a class="code" href="namespaceKIO.html#a06dae97ddcb8a16ec87e0ecf1d527070">00127</a> KIO_EXPORT <a class="codeRef" href="qtime.html">QTime</a> <a class="code" href="namespaceKIO.html#a06dae97ddcb8a16ec87e0ecf1d527070" title="Calculates remaining time from total size, processed size and speed.">KIO::calculateRemaining</a>( <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> totalSize, <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> processedSize, <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> speed )
<a name="l00128"></a>00128 {
<a name="l00129"></a>00129   <a class="codeRef" href="qtime.html">QTime</a> remainingTime;
<a name="l00130"></a>00130 
<a name="l00131"></a>00131   <span class="keywordflow">if</span> ( speed != 0 ) {
<a name="l00132"></a>00132     <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> secs;
<a name="l00133"></a>00133     <span class="keywordflow">if</span> ( totalSize == 0 ) {
<a name="l00134"></a>00134       secs = 0;
<a name="l00135"></a>00135     } <span class="keywordflow">else</span> {
<a name="l00136"></a>00136       secs = ( totalSize - processedSize ) / speed;
<a name="l00137"></a>00137     }
<a name="l00138"></a>00138     <span class="keywordflow">if</span> (secs &gt;= (24*60*60)) <span class="comment">// Limit to 23:59:59</span>
<a name="l00139"></a>00139        secs = (24*60*60)-1;
<a name="l00140"></a>00140     <span class="keywordtype">int</span> hr = secs / ( 60 * 60 );
<a name="l00141"></a>00141     <span class="keywordtype">int</span> mn = ( secs - hr * 60 * 60 ) / 60;
<a name="l00142"></a>00142     <span class="keywordtype">int</span> sc = ( secs - hr * 60 * 60 - mn * 60 );
<a name="l00143"></a>00143 
<a name="l00144"></a>00144     remainingTime.<a class="codeRef" href="qtime.html#setHMS">setHMS</a>( hr, mn, sc );
<a name="l00145"></a>00145   }
<a name="l00146"></a>00146 
<a name="l00147"></a>00147   <span class="keywordflow">return</span> remainingTime;
<a name="l00148"></a>00148 }
<a name="l00149"></a>00149 
<a name="l00150"></a><a class="code" href="namespaceKIO.html#a7b2a0a462387518b478d6c031b80b739">00150</a> KIO_EXPORT <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#a7b2a0a462387518b478d6c031b80b739" title="Helper for showing information about a set of files and directories.">KIO::itemsSummaryString</a>(uint items, uint files, uint dirs, <a class="code" href="namespaceKIO.html#a90b418366ba9052c97d4dca845026f43" title="64-bit file size">KIO::filesize_t</a> size, <span class="keywordtype">bool</span> showSize)
<a name="l00151"></a>00151 {
<a name="l00152"></a>00152     <a class="codeRef" href="qstring.html">QString</a> text = items == 0 ? i18n( <span class="stringliteral">&quot;No Items&quot;</span> ) : i18n( <span class="stringliteral">&quot;One Item&quot;</span>, <span class="stringliteral">&quot;%n Items&quot;</span>, items );
<a name="l00153"></a>00153     text += <span class="stringliteral">&quot; - &quot;</span>;
<a name="l00154"></a>00154     text += files == 0 ? i18n( <span class="stringliteral">&quot;No Files&quot;</span> ) : i18n( <span class="stringliteral">&quot;One File&quot;</span>, <span class="stringliteral">&quot;%n Files&quot;</span>, files );
<a name="l00155"></a>00155     <span class="keywordflow">if</span> ( showSize &amp;&amp; files &gt; 0 )
<a name="l00156"></a>00156     {
<a name="l00157"></a>00157         text += <span class="stringliteral">&quot; &quot;</span>;
<a name="l00158"></a>00158         text += i18n(<span class="stringliteral">&quot;(%1 Total)&quot;</span>).<a class="codeRef" href="qstring.html#arg">arg</a>(<a class="code" href="namespaceKIO.html#a350bd897f2425789f4fbd250882700f9" title="Converts size from bytes to the string representation.">KIO::convertSize</a>( size ) );
<a name="l00159"></a>00159     }
<a name="l00160"></a>00160     text += <span class="stringliteral">&quot; - &quot;</span>;
<a name="l00161"></a>00161     text += dirs == 0 ? i18n( <span class="stringliteral">&quot;No Folders&quot;</span> ) : i18n(<span class="stringliteral">&quot;One Folder&quot;</span>, <span class="stringliteral">&quot;%n Folders&quot;</span>, dirs);
<a name="l00162"></a>00162     <span class="keywordflow">return</span> text;
<a name="l00163"></a>00163 }
<a name="l00164"></a>00164 
<a name="l00165"></a><a class="code" href="namespaceKIO.html#aecca4fce010b784fd87ed6a6538fa52b">00165</a> KIO_EXPORT <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#aecca4fce010b784fd87ed6a6538fa52b" title="Encodes (from the text displayed to the real filename) This translates % into %% and / into %2f Used ...">KIO::encodeFileName</a>( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; _str )
<a name="l00166"></a>00166 {
<a name="l00167"></a>00167   <a class="codeRef" href="qstring.html">QString</a> str( _str );
<a name="l00168"></a>00168 
<a name="l00169"></a>00169   <span class="keywordtype">int</span> i = 0;
<a name="l00170"></a>00170   <span class="keywordflow">while</span> ( ( i = str.<a class="codeRef" href="qstring.html#find">find</a>( <span class="stringliteral">&quot;%&quot;</span>, i ) ) != -1 )
<a name="l00171"></a>00171   {
<a name="l00172"></a>00172     str.<a class="codeRef" href="qstring.html#replace">replace</a>( i, 1, <span class="stringliteral">&quot;%%&quot;</span>);
<a name="l00173"></a>00173     i += 2;
<a name="l00174"></a>00174   }
<a name="l00175"></a>00175   <span class="keywordflow">while</span> ( ( i = str.<a class="codeRef" href="qstring.html#find">find</a>( <span class="stringliteral">&quot;/&quot;</span> ) ) != -1 )
<a name="l00176"></a>00176       str.<a class="codeRef" href="qstring.html#replace">replace</a>( i, 1, <span class="stringliteral">&quot;%2f&quot;</span>);
<a name="l00177"></a>00177   <span class="keywordflow">return</span> str;
<a name="l00178"></a>00178 }
<a name="l00179"></a>00179 
<a name="l00180"></a><a class="code" href="namespaceKIO.html#ae9b548badbdfb20fa0c40350bc58b8e0">00180</a> KIO_EXPORT <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#ae9b548badbdfb20fa0c40350bc58b8e0" title="Decodes (from the filename to the text displayed) This translates %2[fF] into / and %% into %...">KIO::decodeFileName</a>( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp; _str )
<a name="l00181"></a>00181 {
<a name="l00182"></a>00182   <a class="codeRef" href="qstring.html">QString</a> str;
<a name="l00183"></a>00183 
<a name="l00184"></a>00184   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i = 0;
<a name="l00185"></a>00185   <span class="keywordflow">for</span> ( ; i &lt; _str.<a class="codeRef" href="qstring.html#length">length</a>() ; ++i )
<a name="l00186"></a>00186   {
<a name="l00187"></a>00187     <span class="keywordflow">if</span> ( _str[i]==<span class="charliteral">&#39;%&#39;</span> )
<a name="l00188"></a>00188     {
<a name="l00189"></a>00189       <span class="keywordflow">if</span> ( _str[i+1]==<span class="charliteral">&#39;%&#39;</span> ) <span class="comment">// %% -&gt; %</span>
<a name="l00190"></a>00190       {
<a name="l00191"></a>00191         str.<a class="codeRef" href="qstring.html#append">append</a>(<span class="charliteral">&#39;%&#39;</span>);
<a name="l00192"></a>00192         ++i;
<a name="l00193"></a>00193       }
<a name="l00194"></a>00194       <span class="keywordflow">else</span> <span class="keywordflow">if</span> ( _str[i+1]==<span class="charliteral">&#39;2&#39;</span> &amp;&amp; (i+2&lt;_str.<a class="codeRef" href="qstring.html#length">length</a>()) &amp;&amp; _str[i+2].lower()==<span class="charliteral">&#39;f&#39;</span> ) <span class="comment">// %2f -&gt; /</span>
<a name="l00195"></a>00195       {
<a name="l00196"></a>00196         str.<a class="codeRef" href="qstring.html#append">append</a>(<span class="charliteral">&#39;/&#39;</span>);
<a name="l00197"></a>00197         i += 2;
<a name="l00198"></a>00198       }
<a name="l00199"></a>00199       <span class="keywordflow">else</span>
<a name="l00200"></a>00200         str.<a class="codeRef" href="qstring.html#append">append</a>(<span class="charliteral">&#39;%&#39;</span>);
<a name="l00201"></a>00201     } <span class="keywordflow">else</span>
<a name="l00202"></a>00202       str.<a class="codeRef" href="qstring.html#append">append</a>(_str[i]);
<a name="l00203"></a>00203   }
<a name="l00204"></a>00204 
<a name="l00205"></a>00205   <span class="keywordflow">return</span> str;
<a name="l00206"></a>00206 }
<a name="l00207"></a>00207 
<a name="l00208"></a><a class="code" href="classKIO_1_1Job.html#a3af63c39410f3b35eb91409970c3463b">00208</a> KIO_EXPORT <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="classKIO_1_1Job.html#a3af63c39410f3b35eb91409970c3463b" title="Converts an error code and a non-i18n error message into an error message in the current language...">KIO::Job::errorString</a>()<span class="keyword"> const</span>
<a name="l00209"></a>00209 <span class="keyword"></span>{
<a name="l00210"></a>00210   <span class="keywordflow">return</span> <a class="code" href="namespaceKIO.html#a46521cadccc2b2e81a7469c61e413e52" title="Returns a translated error message for errorCode using the additional error information provided by e...">KIO::buildErrorString</a>(m_error, m_errorText);
<a name="l00211"></a>00211 }
<a name="l00212"></a>00212 
<a name="l00213"></a><a class="code" href="namespaceKIO.html#a46521cadccc2b2e81a7469c61e413e52">00213</a> KIO_EXPORT <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#a46521cadccc2b2e81a7469c61e413e52" title="Returns a translated error message for errorCode using the additional error information provided by e...">KIO::buildErrorString</a>(<span class="keywordtype">int</span> errorCode, <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp;errorText)
<a name="l00214"></a>00214 {
<a name="l00215"></a>00215   <a class="codeRef" href="qstring.html">QString</a> result;
<a name="l00216"></a>00216 
<a name="l00217"></a>00217   <span class="keywordflow">switch</span>( errorCode )
<a name="l00218"></a>00218     {
<a name="l00219"></a>00219     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_OPEN_FOR_READING:
<a name="l00220"></a>00220       result = i18n( <span class="stringliteral">&quot;Could not read %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00221"></a>00221       <span class="keywordflow">break</span>;
<a name="l00222"></a>00222     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_OPEN_FOR_WRITING:
<a name="l00223"></a>00223       result = i18n( <span class="stringliteral">&quot;Could not write to %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00224"></a>00224       <span class="keywordflow">break</span>;
<a name="l00225"></a>00225     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_LAUNCH_PROCESS:
<a name="l00226"></a>00226       result = i18n( <span class="stringliteral">&quot;Could not start process %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00227"></a>00227       <span class="keywordflow">break</span>;
<a name="l00228"></a>00228     <span class="keywordflow">case</span>  KIO::ERR_INTERNAL:
<a name="l00229"></a>00229       result = i18n( <span class="stringliteral">&quot;Internal Error\nPlease send a full bug report at http://bugs.kde.org\n%1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00230"></a>00230       <span class="keywordflow">break</span>;
<a name="l00231"></a>00231     <span class="keywordflow">case</span>  KIO::ERR_MALFORMED_URL:
<a name="l00232"></a>00232       result = i18n( <span class="stringliteral">&quot;Malformed URL %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00233"></a>00233       <span class="keywordflow">break</span>;
<a name="l00234"></a>00234     <span class="keywordflow">case</span>  KIO::ERR_UNSUPPORTED_PROTOCOL:
<a name="l00235"></a>00235       result = i18n( <span class="stringliteral">&quot;The protocol %1 is not supported.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00236"></a>00236       <span class="keywordflow">break</span>;
<a name="l00237"></a>00237     <span class="keywordflow">case</span>  KIO::ERR_NO_SOURCE_PROTOCOL:
<a name="l00238"></a>00238       result = i18n( <span class="stringliteral">&quot;The protocol %1 is only a filter protocol.&quot;</span>).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00239"></a>00239       <span class="keywordflow">break</span>;
<a name="l00240"></a>00240     <span class="keywordflow">case</span>  KIO::ERR_UNSUPPORTED_ACTION:
<a name="l00241"></a>00241       result = errorText;
<a name="l00242"></a>00242 <span class="comment">//       result = i18n( &quot;Unsupported action %1&quot; ).arg( errorText );</span>
<a name="l00243"></a>00243       <span class="keywordflow">break</span>;
<a name="l00244"></a>00244     <span class="keywordflow">case</span>  KIO::ERR_IS_DIRECTORY:
<a name="l00245"></a>00245       result = i18n( <span class="stringliteral">&quot;%1 is a folder, but a file was expected.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00246"></a>00246       <span class="keywordflow">break</span>;
<a name="l00247"></a>00247     <span class="keywordflow">case</span>  KIO::ERR_IS_FILE:
<a name="l00248"></a>00248       result = i18n( <span class="stringliteral">&quot;%1 is a file, but a folder was expected.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00249"></a>00249       <span class="keywordflow">break</span>;
<a name="l00250"></a>00250     <span class="keywordflow">case</span>  KIO::ERR_DOES_NOT_EXIST:
<a name="l00251"></a>00251       result = i18n( <span class="stringliteral">&quot;The file or folder %1 does not exist.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00252"></a>00252       <span class="keywordflow">break</span>;
<a name="l00253"></a>00253     <span class="keywordflow">case</span>  KIO::ERR_FILE_ALREADY_EXIST:
<a name="l00254"></a>00254       result = i18n( <span class="stringliteral">&quot;A file named %1 already exists.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00255"></a>00255       <span class="keywordflow">break</span>;
<a name="l00256"></a>00256     <span class="keywordflow">case</span>  KIO::ERR_DIR_ALREADY_EXIST:
<a name="l00257"></a>00257       result = i18n( <span class="stringliteral">&quot;A folder named %1 already exists.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00258"></a>00258       <span class="keywordflow">break</span>;
<a name="l00259"></a>00259     <span class="keywordflow">case</span>  KIO::ERR_UNKNOWN_HOST:
<a name="l00260"></a>00260       result = errorText.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() ? i18n( <span class="stringliteral">&quot;No hostname specified.&quot;</span> ) : i18n( <span class="stringliteral">&quot;Unknown host %1&quot;</span> ).arg( errorText );
<a name="l00261"></a>00261       <span class="keywordflow">break</span>;
<a name="l00262"></a>00262     <span class="keywordflow">case</span>  KIO::ERR_ACCESS_DENIED:
<a name="l00263"></a>00263       result = i18n( <span class="stringliteral">&quot;Access denied to %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00264"></a>00264       <span class="keywordflow">break</span>;
<a name="l00265"></a>00265     <span class="keywordflow">case</span>  KIO::ERR_WRITE_ACCESS_DENIED:
<a name="l00266"></a>00266       result = i18n( <span class="stringliteral">&quot;Access denied.\nCould not write to %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00267"></a>00267       <span class="keywordflow">break</span>;
<a name="l00268"></a>00268     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_ENTER_DIRECTORY:
<a name="l00269"></a>00269       result = i18n( <span class="stringliteral">&quot;Could not enter folder %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00270"></a>00270       <span class="keywordflow">break</span>;
<a name="l00271"></a>00271     <span class="keywordflow">case</span>  KIO::ERR_PROTOCOL_IS_NOT_A_FILESYSTEM:
<a name="l00272"></a>00272       result = i18n( <span class="stringliteral">&quot;The protocol %1 does not implement a folder service.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00273"></a>00273       <span class="keywordflow">break</span>;
<a name="l00274"></a>00274     <span class="keywordflow">case</span>  KIO::ERR_CYCLIC_LINK:
<a name="l00275"></a>00275       result = i18n( <span class="stringliteral">&quot;Found a cyclic link in %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00276"></a>00276       <span class="keywordflow">break</span>;
<a name="l00277"></a>00277     <span class="keywordflow">case</span>  KIO::ERR_USER_CANCELED:
<a name="l00278"></a>00278       <span class="comment">// Do nothing in this case. The user doesn&#39;t need to be told what he just did.</span>
<a name="l00279"></a>00279       <span class="keywordflow">break</span>;
<a name="l00280"></a>00280     <span class="keywordflow">case</span>  KIO::ERR_CYCLIC_COPY:
<a name="l00281"></a>00281       result = i18n( <span class="stringliteral">&quot;Found a cyclic link while copying %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00282"></a>00282       <span class="keywordflow">break</span>;
<a name="l00283"></a>00283     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_CREATE_SOCKET:
<a name="l00284"></a>00284       result = i18n( <span class="stringliteral">&quot;Could not create socket for accessing %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00285"></a>00285       <span class="keywordflow">break</span>;
<a name="l00286"></a>00286     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_CONNECT:
<a name="l00287"></a>00287       result = i18n( <span class="stringliteral">&quot;Could not connect to host %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() ? <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(<span class="stringliteral">&quot;localhost&quot;</span>) : errorText );
<a name="l00288"></a>00288       <span class="keywordflow">break</span>;
<a name="l00289"></a>00289     <span class="keywordflow">case</span>  KIO::ERR_CONNECTION_BROKEN:
<a name="l00290"></a>00290       result = i18n( <span class="stringliteral">&quot;Connection to host %1 is broken.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00291"></a>00291       <span class="keywordflow">break</span>;
<a name="l00292"></a>00292     <span class="keywordflow">case</span>  KIO::ERR_NOT_FILTER_PROTOCOL:
<a name="l00293"></a>00293       result = i18n( <span class="stringliteral">&quot;The protocol %1 is not a filter protocol.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00294"></a>00294       <span class="keywordflow">break</span>;
<a name="l00295"></a>00295     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_MOUNT:
<a name="l00296"></a>00296       result = i18n( <span class="stringliteral">&quot;Could not mount device.\nThe reported error was:\n%1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00297"></a>00297       <span class="keywordflow">break</span>;
<a name="l00298"></a>00298     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_UNMOUNT:
<a name="l00299"></a>00299       result = i18n( <span class="stringliteral">&quot;Could not unmount device.\nThe reported error was:\n%1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00300"></a>00300       <span class="keywordflow">break</span>;
<a name="l00301"></a>00301     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_READ:
<a name="l00302"></a>00302       result = i18n( <span class="stringliteral">&quot;Could not read file %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00303"></a>00303       <span class="keywordflow">break</span>;
<a name="l00304"></a>00304     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_WRITE:
<a name="l00305"></a>00305       result = i18n( <span class="stringliteral">&quot;Could not write to file %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00306"></a>00306       <span class="keywordflow">break</span>;
<a name="l00307"></a>00307     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_BIND:
<a name="l00308"></a>00308       result = i18n( <span class="stringliteral">&quot;Could not bind %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00309"></a>00309       <span class="keywordflow">break</span>;
<a name="l00310"></a>00310     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_LISTEN:
<a name="l00311"></a>00311       result = i18n( <span class="stringliteral">&quot;Could not listen %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00312"></a>00312       <span class="keywordflow">break</span>;
<a name="l00313"></a>00313     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_ACCEPT:
<a name="l00314"></a>00314       result = i18n( <span class="stringliteral">&quot;Could not accept %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00315"></a>00315       <span class="keywordflow">break</span>;
<a name="l00316"></a>00316     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_LOGIN:
<a name="l00317"></a>00317       result = errorText;
<a name="l00318"></a>00318       <span class="keywordflow">break</span>;
<a name="l00319"></a>00319     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_STAT:
<a name="l00320"></a>00320       result = i18n( <span class="stringliteral">&quot;Could not access %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00321"></a>00321       <span class="keywordflow">break</span>;
<a name="l00322"></a>00322     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_CLOSEDIR:
<a name="l00323"></a>00323       result = i18n( <span class="stringliteral">&quot;Could not terminate listing %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00324"></a>00324       <span class="keywordflow">break</span>;
<a name="l00325"></a>00325     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_MKDIR:
<a name="l00326"></a>00326       result = i18n( <span class="stringliteral">&quot;Could not make folder %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00327"></a>00327       <span class="keywordflow">break</span>;
<a name="l00328"></a>00328     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_RMDIR:
<a name="l00329"></a>00329       result = i18n( <span class="stringliteral">&quot;Could not remove folder %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00330"></a>00330       <span class="keywordflow">break</span>;
<a name="l00331"></a>00331     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_RESUME:
<a name="l00332"></a>00332       result = i18n( <span class="stringliteral">&quot;Could not resume file %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00333"></a>00333       <span class="keywordflow">break</span>;
<a name="l00334"></a>00334     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_RENAME:
<a name="l00335"></a>00335       result = i18n( <span class="stringliteral">&quot;Could not rename file %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00336"></a>00336       <span class="keywordflow">break</span>;
<a name="l00337"></a>00337     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_CHMOD:
<a name="l00338"></a>00338       result = i18n( <span class="stringliteral">&quot;Could not change permissions for %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00339"></a>00339       <span class="keywordflow">break</span>;
<a name="l00340"></a>00340     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_DELETE:
<a name="l00341"></a>00341       result = i18n( <span class="stringliteral">&quot;Could not delete file %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00342"></a>00342       <span class="keywordflow">break</span>;
<a name="l00343"></a>00343     <span class="keywordflow">case</span>  KIO::ERR_SLAVE_DIED:
<a name="l00344"></a>00344       result = i18n( <span class="stringliteral">&quot;The process for the %1 protocol died unexpectedly.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00345"></a>00345       <span class="keywordflow">break</span>;
<a name="l00346"></a>00346     <span class="keywordflow">case</span>  KIO::ERR_OUT_OF_MEMORY:
<a name="l00347"></a>00347       result = i18n( <span class="stringliteral">&quot;Error. Out of memory.\n%1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00348"></a>00348       <span class="keywordflow">break</span>;
<a name="l00349"></a>00349     <span class="keywordflow">case</span>  KIO::ERR_UNKNOWN_PROXY_HOST:
<a name="l00350"></a>00350       result = i18n( <span class="stringliteral">&quot;Unknown proxy host\n%1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00351"></a>00351       <span class="keywordflow">break</span>;
<a name="l00352"></a>00352     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_AUTHENTICATE:
<a name="l00353"></a>00353       result = i18n( <span class="stringliteral">&quot;Authorization failed, %1 authentication not supported&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00354"></a>00354       <span class="keywordflow">break</span>;
<a name="l00355"></a>00355     <span class="keywordflow">case</span>  KIO::ERR_ABORTED:
<a name="l00356"></a>00356       result = i18n( <span class="stringliteral">&quot;User canceled action\n%1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00357"></a>00357       <span class="keywordflow">break</span>;
<a name="l00358"></a>00358     <span class="keywordflow">case</span>  KIO::ERR_INTERNAL_SERVER:
<a name="l00359"></a>00359       result = i18n( <span class="stringliteral">&quot;Internal error in server\n%1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00360"></a>00360       <span class="keywordflow">break</span>;
<a name="l00361"></a>00361     <span class="keywordflow">case</span>  KIO::ERR_SERVER_TIMEOUT:
<a name="l00362"></a>00362       result = i18n( <span class="stringliteral">&quot;Timeout on server\n%1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00363"></a>00363       <span class="keywordflow">break</span>;
<a name="l00364"></a>00364     <span class="keywordflow">case</span>  KIO::ERR_UNKNOWN:
<a name="l00365"></a>00365       result = i18n( <span class="stringliteral">&quot;Unknown error\n%1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00366"></a>00366       <span class="keywordflow">break</span>;
<a name="l00367"></a>00367     <span class="keywordflow">case</span>  KIO::ERR_UNKNOWN_INTERRUPT:
<a name="l00368"></a>00368       result = i18n( <span class="stringliteral">&quot;Unknown interrupt\n%1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00369"></a>00369       <span class="keywordflow">break</span>;
<a name="l00370"></a>00370 <span class="comment">/*</span>
<a name="l00371"></a>00371 <span class="comment">    case  KIO::ERR_CHECKSUM_MISMATCH:</span>
<a name="l00372"></a>00372 <span class="comment">      if (errorText)</span>
<a name="l00373"></a>00373 <span class="comment">        result = i18n( &quot;Warning: MD5 Checksum for %1 does not match checksum returned from server&quot; ).arg(errorText);</span>
<a name="l00374"></a>00374 <span class="comment">      else</span>
<a name="l00375"></a>00375 <span class="comment">        result = i18n( &quot;Warning: MD5 Checksum for %1 does not match checksum returned from server&quot; ).arg(&quot;document&quot;);</span>
<a name="l00376"></a>00376 <span class="comment">      break;</span>
<a name="l00377"></a>00377 <span class="comment">*/</span>
<a name="l00378"></a>00378     <span class="keywordflow">case</span> KIO::ERR_CANNOT_DELETE_ORIGINAL:
<a name="l00379"></a>00379       result = i18n( <span class="stringliteral">&quot;Could not delete original file %1.\nPlease check permissions.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00380"></a>00380       <span class="keywordflow">break</span>;
<a name="l00381"></a>00381     <span class="keywordflow">case</span> KIO::ERR_CANNOT_DELETE_PARTIAL:
<a name="l00382"></a>00382       result = i18n( <span class="stringliteral">&quot;Could not delete partial file %1.\nPlease check permissions.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00383"></a>00383       <span class="keywordflow">break</span>;
<a name="l00384"></a>00384     <span class="keywordflow">case</span> KIO::ERR_CANNOT_RENAME_ORIGINAL:
<a name="l00385"></a>00385       result = i18n( <span class="stringliteral">&quot;Could not rename original file %1.\nPlease check permissions.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00386"></a>00386       <span class="keywordflow">break</span>;
<a name="l00387"></a>00387     <span class="keywordflow">case</span> KIO::ERR_CANNOT_RENAME_PARTIAL:
<a name="l00388"></a>00388       result = i18n( <span class="stringliteral">&quot;Could not rename partial file %1.\nPlease check permissions.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00389"></a>00389       <span class="keywordflow">break</span>;
<a name="l00390"></a>00390     <span class="keywordflow">case</span> KIO::ERR_CANNOT_SYMLINK:
<a name="l00391"></a>00391       result = i18n( <span class="stringliteral">&quot;Could not create symlink %1.\nPlease check permissions.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00392"></a>00392       <span class="keywordflow">break</span>;
<a name="l00393"></a>00393     <span class="keywordflow">case</span> KIO::ERR_NO_CONTENT:
<a name="l00394"></a>00394       result = errorText;
<a name="l00395"></a>00395       <span class="keywordflow">break</span>;
<a name="l00396"></a>00396     <span class="keywordflow">case</span> KIO::ERR_DISK_FULL:
<a name="l00397"></a>00397       result = i18n( <span class="stringliteral">&quot;Could not write file %1.\nDisk full.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00398"></a>00398       <span class="keywordflow">break</span>;
<a name="l00399"></a>00399     <span class="keywordflow">case</span> KIO::ERR_IDENTICAL_FILES:
<a name="l00400"></a>00400       result = i18n( <span class="stringliteral">&quot;The source and destination are the same file.\n%1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00401"></a>00401       <span class="keywordflow">break</span>;
<a name="l00402"></a>00402     <span class="keywordflow">case</span> KIO::ERR_SLAVE_DEFINED:
<a name="l00403"></a>00403       result = errorText;
<a name="l00404"></a>00404       <span class="keywordflow">break</span>;
<a name="l00405"></a>00405     <span class="keywordflow">case</span> KIO::ERR_UPGRADE_REQUIRED:
<a name="l00406"></a>00406       result = i18n( <span class="stringliteral">&quot;%1 is required by the server, but is not available.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>(errorText);
<a name="l00407"></a>00407       <span class="keywordflow">break</span>;
<a name="l00408"></a>00408     <span class="keywordflow">case</span> KIO::ERR_POST_DENIED:
<a name="l00409"></a>00409       result = i18n( <span class="stringliteral">&quot;Access to restricted port in POST denied.&quot;</span>);
<a name="l00410"></a>00410       <span class="keywordflow">break</span>;
<a name="l00411"></a>00411     <span class="keywordflow">default</span>:
<a name="l00412"></a>00412       result = i18n( <span class="stringliteral">&quot;Unknown error code %1\n%2\nPlease send a full bug report at http://bugs.kde.org.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorCode ).arg( errorText );
<a name="l00413"></a>00413       <span class="keywordflow">break</span>;
<a name="l00414"></a>00414     }
<a name="l00415"></a>00415 
<a name="l00416"></a>00416   <span class="keywordflow">return</span> result;
<a name="l00417"></a>00417 }
<a name="l00418"></a>00418 
<a name="l00419"></a><a class="code" href="namespaceKIO.html#a1757c6533ace2e8bad19d3b636d61065">00419</a> KIO_EXPORT <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#a1757c6533ace2e8bad19d3b636d61065" title="Returns an appropriate error message if the given command cmd is an unsupported action (ERR_UNSUPPORT...">KIO::unsupportedActionErrorString</a>(<span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp;protocol, <span class="keywordtype">int</span> cmd) {
<a name="l00420"></a>00420   <span class="keywordflow">switch</span> (cmd) {
<a name="l00421"></a>00421     <span class="keywordflow">case</span> CMD_CONNECT:
<a name="l00422"></a>00422       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Opening connections is not supported with the protocol %1.&quot;</span> ).arg(protocol);
<a name="l00423"></a>00423     <span class="keywordflow">case</span> CMD_DISCONNECT:
<a name="l00424"></a>00424       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Closing connections is not supported with the protocol %1.&quot;</span> ).arg(protocol);
<a name="l00425"></a>00425     <span class="keywordflow">case</span> CMD_STAT:
<a name="l00426"></a>00426       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Accessing files is not supported with the protocol %1.&quot;</span>).arg(protocol);
<a name="l00427"></a>00427     <span class="keywordflow">case</span> CMD_PUT:
<a name="l00428"></a>00428       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Writing to %1 is not supported.&quot;</span>).arg(protocol);
<a name="l00429"></a>00429     <span class="keywordflow">case</span> CMD_SPECIAL:
<a name="l00430"></a>00430       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;There are no special actions available for protocol %1.&quot;</span>).arg(protocol);
<a name="l00431"></a>00431     <span class="keywordflow">case</span> CMD_LISTDIR:
<a name="l00432"></a>00432       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Listing folders is not supported for protocol %1.&quot;</span>).arg(protocol);
<a name="l00433"></a>00433     <span class="keywordflow">case</span> CMD_GET:
<a name="l00434"></a>00434       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Retrieving data from %1 is not supported.&quot;</span>).arg(protocol);
<a name="l00435"></a>00435     <span class="keywordflow">case</span> CMD_MIMETYPE:
<a name="l00436"></a>00436       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Retrieving mime type information from %1 is not supported.&quot;</span>).arg(protocol);
<a name="l00437"></a>00437     <span class="keywordflow">case</span> CMD_RENAME:
<a name="l00438"></a>00438       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Renaming or moving files within %1 is not supported.&quot;</span>).arg(protocol);
<a name="l00439"></a>00439     <span class="keywordflow">case</span> CMD_SYMLINK:
<a name="l00440"></a>00440       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Creating symlinks is not supported with protocol %1.&quot;</span>).arg(protocol);
<a name="l00441"></a>00441     <span class="keywordflow">case</span> CMD_COPY:
<a name="l00442"></a>00442       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Copying files within %1 is not supported.&quot;</span>).arg(protocol);
<a name="l00443"></a>00443     <span class="keywordflow">case</span> CMD_DEL:
<a name="l00444"></a>00444       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Deleting files from %1 is not supported.&quot;</span>).arg(protocol);
<a name="l00445"></a>00445     <span class="keywordflow">case</span> CMD_MKDIR:
<a name="l00446"></a>00446       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Creating folders is not supported with protocol %1.&quot;</span>).arg(protocol);
<a name="l00447"></a>00447     <span class="keywordflow">case</span> CMD_CHMOD:
<a name="l00448"></a>00448       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Changing the attributes of files is not supported with protocol %1.&quot;</span>).arg(protocol);
<a name="l00449"></a>00449     <span class="keywordflow">case</span> CMD_SUBURL:
<a name="l00450"></a>00450       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Using sub-URLs with %1 is not supported.&quot;</span>).arg(protocol);
<a name="l00451"></a>00451     <span class="keywordflow">case</span> CMD_MULTI_GET:
<a name="l00452"></a>00452       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Multiple get is not supported with protocol %1.&quot;</span>).arg(protocol);
<a name="l00453"></a>00453     <span class="keywordflow">default</span>:
<a name="l00454"></a>00454       <span class="keywordflow">return</span> i18n(<span class="stringliteral">&quot;Protocol %1 does not support action %2.&quot;</span>).arg(protocol).arg(cmd);
<a name="l00455"></a>00455   }<span class="comment">/*end switch*/</span>
<a name="l00456"></a>00456 }
<a name="l00457"></a>00457 
<a name="l00458"></a><a class="code" href="classKIO_1_1Job.html#afba4f49189ff671fef9fa923ef136ea8">00458</a> KIO_EXPORT <a class="codeRef" href="qstringlist.html">QStringList</a> <a class="code" href="classKIO_1_1Job.html#afba4f49189ff671fef9fa923ef136ea8" title="Converts an error code and a non-i18n error message into i18n strings suitable for presentation in a ...">KIO::Job::detailedErrorStrings</a>( <span class="keyword">const</span> KURL *reqUrl <span class="comment">/*= 0L*/</span>,
<a name="l00459"></a>00459                                             <span class="keywordtype">int</span> method <span class="comment">/*= -1*/</span> )<span class="keyword"> const</span>
<a name="l00460"></a>00460 <span class="keyword"></span>{
<a name="l00461"></a>00461   <a class="codeRef" href="qstring.html">QString</a> errorName, techName, description, ret2;
<a name="l00462"></a>00462   <a class="codeRef" href="qstringlist.html">QStringList</a> causes, solutions, ret;
<a name="l00463"></a>00463 
<a name="l00464"></a>00464   <a class="codeRef" href="qbytearray.html">QByteArray</a> raw = <a class="code" href="namespaceKIO.html#a06f9820cadf1f8d80bbc5b72c7138221" title="Returns translated error details for errorCode using the additional error information provided by err...">rawErrorDetail</a>( m_error, m_errorText, reqUrl, method );
<a name="l00465"></a>00465   <a class="codeRef" href="qdatastream.html">QDataStream</a> stream(raw, IO_ReadOnly);
<a name="l00466"></a>00466 
<a name="l00467"></a>00467   stream &gt;&gt; errorName &gt;&gt; techName &gt;&gt; description &gt;&gt; causes &gt;&gt; solutions;
<a name="l00468"></a>00468 
<a name="l00469"></a>00469   <a class="codeRef" href="qstring.html">QString</a> url, protocol, datetime;
<a name="l00470"></a>00470   <span class="keywordflow">if</span> ( reqUrl ) {
<a name="l00471"></a>00471     url = reqUrl-&gt;htmlURL();
<a name="l00472"></a>00472     protocol = reqUrl-&gt;protocol();
<a name="l00473"></a>00473   } <span class="keywordflow">else</span> {
<a name="l00474"></a>00474     url = i18n( <span class="stringliteral">&quot;(unknown)&quot;</span> );
<a name="l00475"></a>00475   }
<a name="l00476"></a>00476 
<a name="l00477"></a>00477   datetime = KGlobal::locale()-&gt;formatDateTime( <a class="codeRef" href="qdatetime.html#currentDateTime-2">QDateTime::currentDateTime</a>(),
<a name="l00478"></a>00478                                                 <span class="keyword">false</span> );
<a name="l00479"></a>00479 
<a name="l00480"></a>00480   ret &lt;&lt; errorName;
<a name="l00481"></a>00481   ret &lt;&lt; <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>( <span class="stringliteral">&quot;&lt;qt&gt;&lt;p&gt;&lt;b&gt;&quot;</span> ) + errorName +
<a name="l00482"></a>00482          <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>( <span class="stringliteral">&quot;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&quot;</span> ) + description +
<a name="l00483"></a>00483          <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>( <span class="stringliteral">&quot;&lt;/p&gt;&quot;</span> );
<a name="l00484"></a>00484   ret2 = QString::fromLatin1( <span class="stringliteral">&quot;&lt;qt&gt;&lt;p&gt;&quot;</span> );
<a name="l00485"></a>00485   <span class="keywordflow">if</span> ( !techName.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() )
<a name="l00486"></a>00486     ret2 += i18n( <span class="stringliteral">&quot;&lt;b&gt;Technical reason&lt;/b&gt;: &quot;</span> ) + techName + QString::fromLatin1( <span class="stringliteral">&quot;&lt;/p&gt;&quot;</span> );
<a name="l00487"></a>00487   ret2 += i18n( <span class="stringliteral">&quot;&lt;/p&gt;&lt;p&gt;&lt;b&gt;Details of the request&lt;/b&gt;:&quot;</span> );
<a name="l00488"></a>00488   ret2 += i18n( <span class="stringliteral">&quot;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;URL: %1&lt;/li&gt;&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( url );
<a name="l00489"></a>00489   <span class="keywordflow">if</span> ( !protocol.<a class="codeRef" href="qstring.html#isEmpty">isEmpty</a>() ) {
<a name="l00490"></a>00490     ret2 += i18n( <span class="stringliteral">&quot;&lt;li&gt;Protocol: %1&lt;/li&gt;&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l00491"></a>00491   }
<a name="l00492"></a>00492   ret2 += i18n( <span class="stringliteral">&quot;&lt;li&gt;Date and time: %1&lt;/li&gt;&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( datetime );
<a name="l00493"></a>00493   ret2 += i18n( <span class="stringliteral">&quot;&lt;li&gt;Additional information: %1&lt;/li&gt;&lt;/ul&gt;&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( m_errorText );
<a name="l00494"></a>00494   <span class="keywordflow">if</span> ( !causes.isEmpty() ) {
<a name="l00495"></a>00495     ret2 += i18n( <span class="stringliteral">&quot;&lt;p&gt;&lt;b&gt;Possible causes&lt;/b&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&quot;</span> );
<a name="l00496"></a>00496     ret2 += causes.<a class="codeRef" href="qstringlist.html#join">join</a>( <span class="stringliteral">&quot;&lt;/li&gt;&lt;li&gt;&quot;</span> );
<a name="l00497"></a>00497     ret2 += QString::fromLatin1( <span class="stringliteral">&quot;&lt;/li&gt;&lt;/ul&gt;&quot;</span> );
<a name="l00498"></a>00498   }
<a name="l00499"></a>00499   <span class="keywordflow">if</span> ( !solutions.isEmpty() ) {
<a name="l00500"></a>00500     ret2 += i18n( <span class="stringliteral">&quot;&lt;p&gt;&lt;b&gt;Possible solutions&lt;/b&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&quot;</span> );
<a name="l00501"></a>00501     ret2 += solutions.join( <span class="stringliteral">&quot;&lt;/li&gt;&lt;li&gt;&quot;</span> );
<a name="l00502"></a>00502     ret2 += QString::fromLatin1( <span class="stringliteral">&quot;&lt;/li&gt;&lt;/ul&gt;&quot;</span> );
<a name="l00503"></a>00503   }
<a name="l00504"></a>00504   ret &lt;&lt; ret2;
<a name="l00505"></a>00505   <span class="keywordflow">return</span> ret;
<a name="l00506"></a>00506 }
<a name="l00507"></a>00507 
<a name="l00508"></a><a class="code" href="namespaceKIO.html#a06f9820cadf1f8d80bbc5b72c7138221">00508</a> KIO_EXPORT <a class="codeRef" href="qbytearray.html">QByteArray</a> <a class="code" href="namespaceKIO.html#a06f9820cadf1f8d80bbc5b72c7138221" title="Returns translated error details for errorCode using the additional error information provided by err...">KIO::rawErrorDetail</a>(<span class="keywordtype">int</span> errorCode, <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp;errorText,
<a name="l00509"></a>00509                                <span class="keyword">const</span> KURL *reqUrl <span class="comment">/*= 0L*/</span>, <span class="keywordtype">int</span> <span class="comment">/*method = -1*/</span> )
<a name="l00510"></a>00510 {
<a name="l00511"></a>00511   <a class="codeRef" href="qstring.html">QString</a> url, host, protocol, datetime, domain, path, dir, filename;
<a name="l00512"></a>00512   <span class="keywordtype">bool</span> isSlaveNetwork = <span class="keyword">false</span>;
<a name="l00513"></a>00513   <span class="keywordflow">if</span> ( reqUrl ) {
<a name="l00514"></a>00514     url = reqUrl-&gt;prettyURL();
<a name="l00515"></a>00515     host = reqUrl-&gt;host();
<a name="l00516"></a>00516     protocol = reqUrl-&gt;protocol();
<a name="l00517"></a>00517 
<a name="l00518"></a>00518     <span class="keywordflow">if</span> ( host.<a class="codeRef" href="qstring.html#left">left</a>(4) == <span class="stringliteral">&quot;www.&quot;</span> )
<a name="l00519"></a>00519       domain = host.<a class="codeRef" href="qstring.html#mid">mid</a>(4);
<a name="l00520"></a>00520     <span class="keywordflow">else</span>
<a name="l00521"></a>00521       domain = host;
<a name="l00522"></a>00522 
<a name="l00523"></a>00523     path = reqUrl-&gt;path(1);
<a name="l00524"></a>00524     filename = reqUrl-&gt;fileName();
<a name="l00525"></a>00525     dir =  path + filename;
<a name="l00526"></a>00526 
<a name="l00527"></a>00527     <span class="comment">// detect if protocol is a network protocol...</span>
<a name="l00528"></a>00528     <span class="comment">// add your hacks here...</span>
<a name="l00529"></a>00529     <span class="keywordflow">if</span> ( protocol == <span class="stringliteral">&quot;http&quot;</span> ||
<a name="l00530"></a>00530          protocol == <span class="stringliteral">&quot;https&quot;</span> ||
<a name="l00531"></a>00531          protocol == <span class="stringliteral">&quot;ftp&quot;</span> ||
<a name="l00532"></a>00532          protocol == <span class="stringliteral">&quot;sftp&quot;</span> ||
<a name="l00533"></a>00533          protocol == <span class="stringliteral">&quot;webdav&quot;</span> ||
<a name="l00534"></a>00534          protocol == <span class="stringliteral">&quot;webdavs&quot;</span> ||
<a name="l00535"></a>00535          protocol == <span class="stringliteral">&quot;finger&quot;</span> ||
<a name="l00536"></a>00536          protocol == <span class="stringliteral">&quot;fish&quot;</span> ||
<a name="l00537"></a>00537          protocol == <span class="stringliteral">&quot;gopher&quot;</span> ||
<a name="l00538"></a>00538          protocol == <span class="stringliteral">&quot;imap&quot;</span> ||
<a name="l00539"></a>00539          protocol == <span class="stringliteral">&quot;imaps&quot;</span> ||
<a name="l00540"></a>00540          protocol == <span class="stringliteral">&quot;lan&quot;</span> ||
<a name="l00541"></a>00541          protocol == <span class="stringliteral">&quot;ldap&quot;</span> ||
<a name="l00542"></a>00542          protocol == <span class="stringliteral">&quot;mailto&quot;</span> ||
<a name="l00543"></a>00543          protocol == <span class="stringliteral">&quot;news&quot;</span> ||
<a name="l00544"></a>00544          protocol == <span class="stringliteral">&quot;nntp&quot;</span> ||
<a name="l00545"></a>00545          protocol == <span class="stringliteral">&quot;pop3&quot;</span> ||
<a name="l00546"></a>00546          protocol == <span class="stringliteral">&quot;pop3s&quot;</span> ||
<a name="l00547"></a>00547          protocol == <span class="stringliteral">&quot;smtp&quot;</span> ||
<a name="l00548"></a>00548          protocol == <span class="stringliteral">&quot;smtps&quot;</span> ||
<a name="l00549"></a>00549          protocol == <span class="stringliteral">&quot;telnet&quot;</span>
<a name="l00550"></a>00550         ) {
<a name="l00551"></a>00551       isSlaveNetwork = <span class="keyword">false</span>;
<a name="l00552"></a>00552     }
<a name="l00553"></a>00553   } <span class="keywordflow">else</span> {
<a name="l00554"></a>00554     <span class="comment">// assume that the errorText has the location we are interested in</span>
<a name="l00555"></a>00555     url = host = domain = path = filename = dir = errorText;
<a name="l00556"></a>00556     protocol = i18n( <span class="stringliteral">&quot;(unknown)&quot;</span> );
<a name="l00557"></a>00557   }
<a name="l00558"></a>00558 
<a name="l00559"></a>00559   datetime = KGlobal::locale()-&gt;formatDateTime( <a class="codeRef" href="qdatetime.html#currentDateTime-2">QDateTime::currentDateTime</a>(),
<a name="l00560"></a>00560                                                 <span class="keyword">false</span> );
<a name="l00561"></a>00561 
<a name="l00562"></a>00562   <a class="codeRef" href="qstring.html">QString</a> errorName, techName, description;
<a name="l00563"></a>00563   <a class="codeRef" href="qstringlist.html">QStringList</a> causes, solutions;
<a name="l00564"></a>00564 
<a name="l00565"></a>00565   <span class="comment">// c == cause, s == solution</span>
<a name="l00566"></a>00566   <a class="codeRef" href="qstring.html">QString</a> sSysadmin = i18n( <span class="stringliteral">&quot;Contact your appropriate computer support system, &quot;</span>
<a name="l00567"></a>00567     <span class="stringliteral">&quot;whether the system administrator, or technical support group for further &quot;</span>
<a name="l00568"></a>00568     <span class="stringliteral">&quot;assistance.&quot;</span> );
<a name="l00569"></a>00569   <a class="codeRef" href="qstring.html">QString</a> sServeradmin = i18n( <span class="stringliteral">&quot;Contact the administrator of the server &quot;</span>
<a name="l00570"></a>00570     <span class="stringliteral">&quot;for further assistance.&quot;</span> );
<a name="l00571"></a>00571   <span class="comment">// FIXME active link to permissions dialog</span>
<a name="l00572"></a>00572   <a class="codeRef" href="qstring.html">QString</a> sAccess = i18n( <span class="stringliteral">&quot;Check your access permissions on this resource.&quot;</span> );
<a name="l00573"></a>00573   <a class="codeRef" href="qstring.html">QString</a> cAccess = i18n( <span class="stringliteral">&quot;Your access permissions may be inadequate to &quot;</span>
<a name="l00574"></a>00574     <span class="stringliteral">&quot;perform the requested operation on this resource.&quot;</span> );
<a name="l00575"></a>00575   <a class="codeRef" href="qstring.html">QString</a> cLocked = i18n( <span class="stringliteral">&quot;The file may be in use (and thus locked) by &quot;</span>
<a name="l00576"></a>00576     <span class="stringliteral">&quot;another user or application.&quot;</span> );
<a name="l00577"></a>00577   <a class="codeRef" href="qstring.html">QString</a> sQuerylock = i18n( <span class="stringliteral">&quot;Check to make sure that no other &quot;</span>
<a name="l00578"></a>00578     <span class="stringliteral">&quot;application or user is using the file or has locked the file.&quot;</span> );
<a name="l00579"></a>00579   <a class="codeRef" href="qstring.html">QString</a> cHardware = i18n( <span class="stringliteral">&quot;Although unlikely, a hardware error may have &quot;</span>
<a name="l00580"></a>00580     <span class="stringliteral">&quot;occurred.&quot;</span> );
<a name="l00581"></a>00581   <a class="codeRef" href="qstring.html">QString</a> cBug = i18n( <span class="stringliteral">&quot;You may have encountered a bug in the program.&quot;</span> );
<a name="l00582"></a>00582   <a class="codeRef" href="qstring.html">QString</a> cBuglikely = i18n( <span class="stringliteral">&quot;This is most likely to be caused by a bug in the &quot;</span>
<a name="l00583"></a>00583     <span class="stringliteral">&quot;program. Please consider submitting a full bug report as detailed below.&quot;</span> );
<a name="l00584"></a>00584   <a class="codeRef" href="qstring.html">QString</a> sUpdate = i18n( <span class="stringliteral">&quot;Update your software to the latest version. &quot;</span>
<a name="l00585"></a>00585     <span class="stringliteral">&quot;Your distribution should provide tools to update your software.&quot;</span> );
<a name="l00586"></a>00586   <a class="codeRef" href="qstring.html">QString</a> sBugreport = i18n( <span class="stringliteral">&quot;When all else fails, please consider helping the &quot;</span>
<a name="l00587"></a>00587     <span class="stringliteral">&quot;KDE team or the third party maintainer of this software by submitting a &quot;</span>
<a name="l00588"></a>00588     <span class="stringliteral">&quot;high quality bug report. If the software is provided by a third party, &quot;</span>
<a name="l00589"></a>00589     <span class="stringliteral">&quot;please contact them directly. Otherwise, first look to see if &quot;</span>
<a name="l00590"></a>00590     <span class="stringliteral">&quot;the same bug has been submitted by someone else by searching at the &quot;</span>
<a name="l00591"></a>00591     <span class="stringliteral">&quot;&lt;a href=\&quot;http://bugs.kde.org/\&quot;&gt;KDE bug reporting website&lt;/a&gt;. If not, take &quot;</span>
<a name="l00592"></a>00592     <span class="stringliteral">&quot;note of the details given above, and include them in your bug report, along &quot;</span>
<a name="l00593"></a>00593     <span class="stringliteral">&quot;with as many other details as you think might help.&quot;</span> );
<a name="l00594"></a>00594   <a class="codeRef" href="qstring.html">QString</a> cNetwork = i18n( <span class="stringliteral">&quot;There may have been a problem with your network &quot;</span>
<a name="l00595"></a>00595     <span class="stringliteral">&quot;connection.&quot;</span> );
<a name="l00596"></a>00596   <span class="comment">// FIXME netconf kcontrol link</span>
<a name="l00597"></a>00597   <a class="codeRef" href="qstring.html">QString</a> cNetconf = i18n( <span class="stringliteral">&quot;There may have been a problem with your network &quot;</span>
<a name="l00598"></a>00598     <span class="stringliteral">&quot;configuration. If you have been accessing the Internet with no problems &quot;</span>
<a name="l00599"></a>00599     <span class="stringliteral">&quot;recently, this is unlikely.&quot;</span> );
<a name="l00600"></a>00600   <a class="codeRef" href="qstring.html">QString</a> cNetpath = i18n( <span class="stringliteral">&quot;There may have been a problem at some point along &quot;</span>
<a name="l00601"></a>00601     <span class="stringliteral">&quot;the network path between the server and this computer.&quot;</span> );
<a name="l00602"></a>00602   <a class="codeRef" href="qstring.html">QString</a> sTryagain = i18n( <span class="stringliteral">&quot;Try again, either now or at a later time.&quot;</span> );
<a name="l00603"></a>00603   <a class="codeRef" href="qstring.html">QString</a> cProtocol = i18n( <span class="stringliteral">&quot;A protocol error or incompatibility may have occurred.&quot;</span> );
<a name="l00604"></a>00604   <a class="codeRef" href="qstring.html">QString</a> sExists = i18n( <span class="stringliteral">&quot;Ensure that the resource exists, and try again.&quot;</span> );
<a name="l00605"></a>00605   <a class="codeRef" href="qstring.html">QString</a> cExists = i18n( <span class="stringliteral">&quot;The specified resource may not exist.&quot;</span> );
<a name="l00606"></a>00606   <a class="codeRef" href="qstring.html">QString</a> cTypo = i18n( <span class="stringliteral">&quot;You may have incorrectly typed the location.&quot;</span> );
<a name="l00607"></a>00607   <a class="codeRef" href="qstring.html">QString</a> sTypo = i18n( <span class="stringliteral">&quot;Double-check that you have entered the correct location &quot;</span>
<a name="l00608"></a>00608     <span class="stringliteral">&quot;and try again.&quot;</span> );
<a name="l00609"></a>00609   <a class="codeRef" href="qstring.html">QString</a> sNetwork = i18n( <span class="stringliteral">&quot;Check your network connection status.&quot;</span> );
<a name="l00610"></a>00610 
<a name="l00611"></a>00611   <span class="keywordflow">switch</span>( errorCode ) {
<a name="l00612"></a>00612     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_OPEN_FOR_READING:
<a name="l00613"></a>00613       errorName = i18n( <span class="stringliteral">&quot;Cannot Open Resource For Reading&quot;</span> );
<a name="l00614"></a>00614       description = i18n( <span class="stringliteral">&quot;This means that the contents of the requested file &quot;</span>
<a name="l00615"></a>00615         <span class="stringliteral">&quot;or folder &lt;strong&gt;%1&lt;/strong&gt; could not be retrieved, as read &quot;</span>
<a name="l00616"></a>00616         <span class="stringliteral">&quot;access could not be obtained.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( dir );
<a name="l00617"></a>00617       causes &lt;&lt; i18n( <span class="stringliteral">&quot;You may not have permissions to read the file or open &quot;</span>
<a name="l00618"></a>00618         <span class="stringliteral">&quot;the folder.&quot;</span>) &lt;&lt; cLocked &lt;&lt; cHardware;
<a name="l00619"></a>00619       solutions &lt;&lt; sAccess &lt;&lt; sQuerylock &lt;&lt; sSysadmin;
<a name="l00620"></a>00620       <span class="keywordflow">break</span>;
<a name="l00621"></a>00621 
<a name="l00622"></a>00622     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_OPEN_FOR_WRITING:
<a name="l00623"></a>00623       errorName = i18n( <span class="stringliteral">&quot;Cannot Open Resource For Writing&quot;</span> );
<a name="l00624"></a>00624       description = i18n( <span class="stringliteral">&quot;This means that the file, &lt;strong&gt;%1&lt;/strong&gt;, could &quot;</span>
<a name="l00625"></a>00625         <span class="stringliteral">&quot;not be written to as requested, because access with permission to &quot;</span>
<a name="l00626"></a>00626         <span class="stringliteral">&quot;write could not be obtained.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( filename );
<a name="l00627"></a>00627       causes &lt;&lt; cAccess &lt;&lt; cLocked &lt;&lt; cHardware;
<a name="l00628"></a>00628       solutions &lt;&lt; sAccess &lt;&lt; sQuerylock &lt;&lt; sSysadmin;
<a name="l00629"></a>00629       <span class="keywordflow">break</span>;
<a name="l00630"></a>00630 
<a name="l00631"></a>00631     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_LAUNCH_PROCESS:
<a name="l00632"></a>00632       errorName = i18n( <span class="stringliteral">&quot;Cannot Initiate the %1 Protocol&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l00633"></a>00633       techName = i18n( <span class="stringliteral">&quot;Unable to Launch Process&quot;</span> );
<a name="l00634"></a>00634       description = i18n( <span class="stringliteral">&quot;The program on your computer which provides access &quot;</span>
<a name="l00635"></a>00635         <span class="stringliteral">&quot;to the &lt;strong&gt;%1&lt;/strong&gt; protocol could not be started. This is &quot;</span>
<a name="l00636"></a>00636         <span class="stringliteral">&quot;usually due to technical reasons.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l00637"></a>00637       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The program which provides compatibility with this &quot;</span>
<a name="l00638"></a>00638         <span class="stringliteral">&quot;protocol may not have been updated with your last update of KDE. &quot;</span>
<a name="l00639"></a>00639         <span class="stringliteral">&quot;This can cause the program to be incompatible with the current version &quot;</span>
<a name="l00640"></a>00640         <span class="stringliteral">&quot;and thus not start.&quot;</span> ) &lt;&lt; cBug;
<a name="l00641"></a>00641       solutions &lt;&lt; sUpdate &lt;&lt; sSysadmin;
<a name="l00642"></a>00642       <span class="keywordflow">break</span>;
<a name="l00643"></a>00643 
<a name="l00644"></a>00644     <span class="keywordflow">case</span>  KIO::ERR_INTERNAL:
<a name="l00645"></a>00645       errorName = i18n( <span class="stringliteral">&quot;Internal Error&quot;</span> );
<a name="l00646"></a>00646       description = i18n( <span class="stringliteral">&quot;The program on your computer which provides access &quot;</span>
<a name="l00647"></a>00647         <span class="stringliteral">&quot;to the &lt;strong&gt;%1&lt;/strong&gt; protocol has reported an internal error.&quot;</span> )
<a name="l00648"></a>00648         .<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l00649"></a>00649       causes &lt;&lt; cBuglikely;
<a name="l00650"></a>00650       solutions &lt;&lt; sUpdate &lt;&lt; sBugreport;
<a name="l00651"></a>00651       <span class="keywordflow">break</span>;
<a name="l00652"></a>00652 
<a name="l00653"></a>00653     <span class="keywordflow">case</span>  KIO::ERR_MALFORMED_URL:
<a name="l00654"></a>00654       errorName = i18n( <span class="stringliteral">&quot;Improperly Formatted URL&quot;</span> );
<a name="l00655"></a>00655       description = i18n( <span class="stringliteral">&quot;The &lt;strong&gt;U&lt;/strong&gt;niform &lt;strong&gt;R&lt;/strong&gt;esource &quot;</span>
<a name="l00656"></a>00656         <span class="stringliteral">&quot;&lt;strong&gt;L&lt;/strong&gt;ocator (URL) that you entered was not properly &quot;</span>
<a name="l00657"></a>00657         <span class="stringliteral">&quot;formatted. The format of a URL is generally as follows:&quot;</span>
<a name="l00658"></a>00658         <span class="stringliteral">&quot;&lt;blockquote&gt;&lt;strong&gt;protocol://user:password@www.example.org:port/folder/&quot;</span>
<a name="l00659"></a>00659         <span class="stringliteral">&quot;filename.extension?query=value&lt;/strong&gt;&lt;/blockquote&gt;&quot;</span> );
<a name="l00660"></a>00660       solutions &lt;&lt; sTypo;
<a name="l00661"></a>00661       <span class="keywordflow">break</span>;
<a name="l00662"></a>00662 
<a name="l00663"></a>00663     <span class="keywordflow">case</span>  KIO::ERR_UNSUPPORTED_PROTOCOL:
<a name="l00664"></a>00664       errorName = i18n( <span class="stringliteral">&quot;Unsupported Protocol %1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l00665"></a>00665       description = i18n( <span class="stringliteral">&quot;The protocol &lt;strong&gt;%1&lt;/strong&gt; is not supported &quot;</span>
<a name="l00666"></a>00666         <span class="stringliteral">&quot;by the KDE programs currently installed on this computer.&quot;</span> )
<a name="l00667"></a>00667         .<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l00668"></a>00668       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The requested protocol may not be supported.&quot;</span> )
<a name="l00669"></a>00669         &lt;&lt; i18n( <span class="stringliteral">&quot;The versions of the %1 protocol supported by this computer and &quot;</span>
<a name="l00670"></a>00670         <span class="stringliteral">&quot;the server may be incompatible.&quot;</span> ).arg( protocol );
<a name="l00671"></a>00671       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;You may perform a search on the Internet for a KDE &quot;</span>
<a name="l00672"></a>00672         <span class="stringliteral">&quot;program (called a kioslave or ioslave) which supports this protocol. &quot;</span>
<a name="l00673"></a>00673         <span class="stringliteral">&quot;Places to search include &lt;a href=\&quot;http://kde-apps.org/\&quot;&gt;&quot;</span>
<a name="l00674"></a>00674         <span class="stringliteral">&quot;http://kde-apps.org/&lt;/a&gt; and &lt;a href=\&quot;http://freshmeat.net/\&quot;&gt;&quot;</span>
<a name="l00675"></a>00675         <span class="stringliteral">&quot;http://freshmeat.net/&lt;/a&gt;.&quot;</span> )
<a name="l00676"></a>00676         &lt;&lt; sUpdate &lt;&lt; sSysadmin;
<a name="l00677"></a>00677       <span class="keywordflow">break</span>;
<a name="l00678"></a>00678 
<a name="l00679"></a>00679     <span class="keywordflow">case</span>  KIO::ERR_NO_SOURCE_PROTOCOL:
<a name="l00680"></a>00680       errorName = i18n( <span class="stringliteral">&quot;URL Does Not Refer to a Resource.&quot;</span> );
<a name="l00681"></a>00681       techName = i18n( <span class="stringliteral">&quot;Protocol is a Filter Protocol&quot;</span> );
<a name="l00682"></a>00682       description = i18n( <span class="stringliteral">&quot;The &lt;strong&gt;U&lt;/strong&gt;niform &lt;strong&gt;R&lt;/strong&gt;esource &quot;</span>
<a name="l00683"></a>00683         <span class="stringliteral">&quot;&lt;strong&gt;L&lt;/strong&gt;ocator (URL) that you entered did not refer to a &quot;</span>
<a name="l00684"></a>00684         <span class="stringliteral">&quot;specific resource.&quot;</span> );
<a name="l00685"></a>00685       causes &lt;&lt; i18n( <span class="stringliteral">&quot;KDE is able to communicate through a protocol within a &quot;</span>
<a name="l00686"></a>00686         <span class="stringliteral">&quot;protocol; the protocol specified is only for use in such situations, &quot;</span>
<a name="l00687"></a>00687         <span class="stringliteral">&quot;however this is not one of these situations. This is a rare event, and &quot;</span>
<a name="l00688"></a>00688         <span class="stringliteral">&quot;is likely to indicate a programming error.&quot;</span> );
<a name="l00689"></a>00689       solutions &lt;&lt; sTypo;
<a name="l00690"></a>00690       <span class="keywordflow">break</span>;
<a name="l00691"></a>00691 
<a name="l00692"></a>00692     <span class="keywordflow">case</span>  KIO::ERR_UNSUPPORTED_ACTION:
<a name="l00693"></a>00693       errorName = i18n( <span class="stringliteral">&quot;Unsupported Action: %1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00694"></a>00694       description = i18n( <span class="stringliteral">&quot;The requested action is not supported by the KDE &quot;</span>
<a name="l00695"></a>00695         <span class="stringliteral">&quot;program which is implementing the &lt;strong&gt;%1&lt;/strong&gt; protocol.&quot;</span> )
<a name="l00696"></a>00696         .<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l00697"></a>00697       causes &lt;&lt; i18n( <span class="stringliteral">&quot;This error is very much dependent on the KDE program. The &quot;</span>
<a name="l00698"></a>00698         <span class="stringliteral">&quot;additional information should give you more information than is available &quot;</span>
<a name="l00699"></a>00699         <span class="stringliteral">&quot;to the KDE input/output architecture.&quot;</span> );
<a name="l00700"></a>00700       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Attempt to find another way to accomplish the same &quot;</span>
<a name="l00701"></a>00701         <span class="stringliteral">&quot;outcome.&quot;</span> );
<a name="l00702"></a>00702       <span class="keywordflow">break</span>;
<a name="l00703"></a>00703 
<a name="l00704"></a>00704     <span class="keywordflow">case</span>  KIO::ERR_IS_DIRECTORY:
<a name="l00705"></a>00705       errorName = i18n( <span class="stringliteral">&quot;File Expected&quot;</span> );
<a name="l00706"></a>00706       description = i18n( <span class="stringliteral">&quot;The request expected a file, however the &quot;</span>
<a name="l00707"></a>00707         <span class="stringliteral">&quot;folder &lt;strong&gt;%1&lt;/strong&gt; was found instead.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( dir );
<a name="l00708"></a>00708       causes &lt;&lt; i18n( <span class="stringliteral">&quot;This may be an error on the server side.&quot;</span> ) &lt;&lt; cBug;
<a name="l00709"></a>00709       solutions &lt;&lt; sUpdate &lt;&lt; sSysadmin;
<a name="l00710"></a>00710       <span class="keywordflow">break</span>;
<a name="l00711"></a>00711 
<a name="l00712"></a>00712     <span class="keywordflow">case</span>  KIO::ERR_IS_FILE:
<a name="l00713"></a>00713       errorName = i18n( <span class="stringliteral">&quot;Folder Expected&quot;</span> );
<a name="l00714"></a>00714       description = i18n( <span class="stringliteral">&quot;The request expected a folder, however &quot;</span>
<a name="l00715"></a>00715         <span class="stringliteral">&quot;the file &lt;strong&gt;%1&lt;/strong&gt; was found instead.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( filename );
<a name="l00716"></a>00716       causes &lt;&lt; cBug;
<a name="l00717"></a>00717       solutions &lt;&lt; sUpdate &lt;&lt; sSysadmin;
<a name="l00718"></a>00718       <span class="keywordflow">break</span>;
<a name="l00719"></a>00719 
<a name="l00720"></a>00720     <span class="keywordflow">case</span>  KIO::ERR_DOES_NOT_EXIST:
<a name="l00721"></a>00721       errorName = i18n( <span class="stringliteral">&quot;File or Folder Does Not Exist&quot;</span> );
<a name="l00722"></a>00722       description = i18n( <span class="stringliteral">&quot;The specified file or folder &lt;strong&gt;%1&lt;/strong&gt; &quot;</span>
<a name="l00723"></a>00723         <span class="stringliteral">&quot;does not exist.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( dir );
<a name="l00724"></a>00724       causes &lt;&lt; cBug;
<a name="l00725"></a>00725       solutions &lt;&lt; sUpdate &lt;&lt; sSysadmin;
<a name="l00726"></a>00726       <span class="keywordflow">break</span>;
<a name="l00727"></a>00727 
<a name="l00728"></a>00728     <span class="keywordflow">case</span>  KIO::ERR_FILE_ALREADY_EXIST:
<a name="l00729"></a>00729       errorName = i18n( <span class="stringliteral">&quot;File Already Exists&quot;</span> );
<a name="l00730"></a>00730       description = i18n( <span class="stringliteral">&quot;The requested file could not be created because a &quot;</span>
<a name="l00731"></a>00731         <span class="stringliteral">&quot;file with the same name already exists.&quot;</span> );
<a name="l00732"></a>00732       solutions &lt;&lt; i18n ( <span class="stringliteral">&quot;Try moving the current file out of the way first, &quot;</span>
<a name="l00733"></a>00733         <span class="stringliteral">&quot;and then try again.&quot;</span> )
<a name="l00734"></a>00734         &lt;&lt; i18n ( <span class="stringliteral">&quot;Delete the current file and try again.&quot;</span> )
<a name="l00735"></a>00735         &lt;&lt; i18n( <span class="stringliteral">&quot;Choose an alternate filename for the new file.&quot;</span> );
<a name="l00736"></a>00736       <span class="keywordflow">break</span>;
<a name="l00737"></a>00737 
<a name="l00738"></a>00738     <span class="keywordflow">case</span>  KIO::ERR_DIR_ALREADY_EXIST:
<a name="l00739"></a>00739       errorName = i18n( <span class="stringliteral">&quot;Folder Already Exists&quot;</span> );
<a name="l00740"></a>00740       description = i18n( <span class="stringliteral">&quot;The requested folder could not be created because &quot;</span>
<a name="l00741"></a>00741         <span class="stringliteral">&quot;a folder with the same name already exists.&quot;</span> );
<a name="l00742"></a>00742       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Try moving the current folder out of the way first, &quot;</span>
<a name="l00743"></a>00743         <span class="stringliteral">&quot;and then try again.&quot;</span> )
<a name="l00744"></a>00744         &lt;&lt; i18n( <span class="stringliteral">&quot;Delete the current folder and try again.&quot;</span> )
<a name="l00745"></a>00745         &lt;&lt; i18n( <span class="stringliteral">&quot;Choose an alternate name for the new folder.&quot;</span> );
<a name="l00746"></a>00746       <span class="keywordflow">break</span>;
<a name="l00747"></a>00747 
<a name="l00748"></a>00748     <span class="keywordflow">case</span>  KIO::ERR_UNKNOWN_HOST:
<a name="l00749"></a>00749       errorName = i18n( <span class="stringliteral">&quot;Unknown Host&quot;</span> );
<a name="l00750"></a>00750       description = i18n( <span class="stringliteral">&quot;An unknown host error indicates that the server with &quot;</span>
<a name="l00751"></a>00751         <span class="stringliteral">&quot;the requested name, &lt;strong&gt;%1&lt;/strong&gt;, could not be &quot;</span>
<a name="l00752"></a>00752         <span class="stringliteral">&quot;located on the Internet.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( host );
<a name="l00753"></a>00753       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The name that you typed, %1, may not exist: it may be &quot;</span>
<a name="l00754"></a>00754         <span class="stringliteral">&quot;incorrectly typed.&quot;</span> ).arg( host )
<a name="l00755"></a>00755         &lt;&lt; cNetwork &lt;&lt; cNetconf;
<a name="l00756"></a>00756       solutions &lt;&lt; sNetwork &lt;&lt; sSysadmin;
<a name="l00757"></a>00757       <span class="keywordflow">break</span>;
<a name="l00758"></a>00758 
<a name="l00759"></a>00759     <span class="keywordflow">case</span>  KIO::ERR_ACCESS_DENIED:
<a name="l00760"></a>00760       errorName = i18n( <span class="stringliteral">&quot;Access Denied&quot;</span> );
<a name="l00761"></a>00761       description = i18n( <span class="stringliteral">&quot;Access was denied to the specified resource, &quot;</span>
<a name="l00762"></a>00762         <span class="stringliteral">&quot;&lt;strong&gt;%1&lt;/strong&gt;.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( url );
<a name="l00763"></a>00763       causes &lt;&lt; i18n( <span class="stringliteral">&quot;You may have supplied incorrect authentication details or &quot;</span>
<a name="l00764"></a>00764         <span class="stringliteral">&quot;none at all.&quot;</span> )
<a name="l00765"></a>00765         &lt;&lt; i18n( <span class="stringliteral">&quot;Your account may not have permission to access the &quot;</span>
<a name="l00766"></a>00766         <span class="stringliteral">&quot;specified resource.&quot;</span> );
<a name="l00767"></a>00767       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Retry the request and ensure your authentication details &quot;</span>
<a name="l00768"></a>00768         <span class="stringliteral">&quot;are entered correctly.&quot;</span> ) &lt;&lt; sSysadmin;
<a name="l00769"></a>00769       <span class="keywordflow">if</span> ( !isSlaveNetwork ) solutions &lt;&lt; sServeradmin;
<a name="l00770"></a>00770       <span class="keywordflow">break</span>;
<a name="l00771"></a>00771 
<a name="l00772"></a>00772     <span class="keywordflow">case</span>  KIO::ERR_WRITE_ACCESS_DENIED:
<a name="l00773"></a>00773       errorName = i18n( <span class="stringliteral">&quot;Write Access Denied&quot;</span> );
<a name="l00774"></a>00774       description = i18n( <span class="stringliteral">&quot;This means that an attempt to write to the file &quot;</span>
<a name="l00775"></a>00775         <span class="stringliteral">&quot;&lt;strong&gt;%1&lt;/strong&gt; was rejected.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( filename );
<a name="l00776"></a>00776       causes &lt;&lt; cAccess &lt;&lt; cLocked &lt;&lt; cHardware;
<a name="l00777"></a>00777       solutions &lt;&lt; sAccess &lt;&lt; sQuerylock &lt;&lt; sSysadmin;
<a name="l00778"></a>00778       <span class="keywordflow">break</span>;
<a name="l00779"></a>00779 
<a name="l00780"></a>00780     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_ENTER_DIRECTORY:
<a name="l00781"></a>00781       errorName = i18n( <span class="stringliteral">&quot;Unable to Enter Folder&quot;</span> );
<a name="l00782"></a>00782       description = i18n( <span class="stringliteral">&quot;This means that an attempt to enter (in other words, &quot;</span>
<a name="l00783"></a>00783         <span class="stringliteral">&quot;to open) the requested folder &lt;strong&gt;%1&lt;/strong&gt; was rejected.&quot;</span> )
<a name="l00784"></a>00784         .<a class="codeRef" href="qstring.html#arg">arg</a>( dir );
<a name="l00785"></a>00785       causes &lt;&lt; cAccess &lt;&lt; cLocked;
<a name="l00786"></a>00786       solutions &lt;&lt; sAccess &lt;&lt; sQuerylock &lt;&lt; sSysadmin;
<a name="l00787"></a>00787       <span class="keywordflow">break</span>;
<a name="l00788"></a>00788 
<a name="l00789"></a>00789     <span class="keywordflow">case</span>  KIO::ERR_PROTOCOL_IS_NOT_A_FILESYSTEM:
<a name="l00790"></a>00790       errorName = i18n( <span class="stringliteral">&quot;Folder Listing Unavailable&quot;</span> );
<a name="l00791"></a>00791       techName = i18n( <span class="stringliteral">&quot;Protocol %1 is not a Filesystem&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l00792"></a>00792       description = i18n( <span class="stringliteral">&quot;This means that a request was made which requires &quot;</span>
<a name="l00793"></a>00793         <span class="stringliteral">&quot;determining the contents of the folder, and the KDE program supporting &quot;</span>
<a name="l00794"></a>00794         <span class="stringliteral">&quot;this protocol is unable to do so.&quot;</span> );
<a name="l00795"></a>00795       causes &lt;&lt; cBug;
<a name="l00796"></a>00796       solutions &lt;&lt; sUpdate &lt;&lt; sBugreport;
<a name="l00797"></a>00797       <span class="keywordflow">break</span>;
<a name="l00798"></a>00798 
<a name="l00799"></a>00799     <span class="keywordflow">case</span>  KIO::ERR_CYCLIC_LINK:
<a name="l00800"></a>00800       errorName = i18n( <span class="stringliteral">&quot;Cyclic Link Detected&quot;</span> );
<a name="l00801"></a>00801       description = i18n( <span class="stringliteral">&quot;UNIX environments are commonly able to link a file or &quot;</span>
<a name="l00802"></a>00802         <span class="stringliteral">&quot;folder to a separate name and/or location. KDE detected a link or &quot;</span>
<a name="l00803"></a>00803         <span class="stringliteral">&quot;series of links that results in an infinite loop - i.e. the file was &quot;</span>
<a name="l00804"></a>00804         <span class="stringliteral">&quot;(perhaps in a roundabout way) linked to itself.&quot;</span> );
<a name="l00805"></a>00805       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Delete one part of the loop in order that it does not &quot;</span>
<a name="l00806"></a>00806         <span class="stringliteral">&quot;cause an infinite loop, and try again.&quot;</span> ) &lt;&lt; sSysadmin;
<a name="l00807"></a>00807       <span class="keywordflow">break</span>;
<a name="l00808"></a>00808 
<a name="l00809"></a>00809     <span class="keywordflow">case</span>  KIO::ERR_USER_CANCELED:
<a name="l00810"></a>00810       <span class="comment">// Do nothing in this case. The user doesn&#39;t need to be told what he just did.</span>
<a name="l00811"></a>00811       <span class="comment">// rodda: However, if we have been called, an application is about to display</span>
<a name="l00812"></a>00812       <span class="comment">// this information anyway. If we don&#39;t return sensible information, the</span>
<a name="l00813"></a>00813       <span class="comment">// user sees a blank dialog (I have seen this myself)</span>
<a name="l00814"></a>00814       errorName = i18n( <span class="stringliteral">&quot;Request Aborted By User&quot;</span> );
<a name="l00815"></a>00815       description = i18n( <span class="stringliteral">&quot;The request was not completed because it was &quot;</span>
<a name="l00816"></a>00816         <span class="stringliteral">&quot;aborted.&quot;</span> );
<a name="l00817"></a>00817       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Retry the request.&quot;</span> );
<a name="l00818"></a>00818       <span class="keywordflow">break</span>;
<a name="l00819"></a>00819 
<a name="l00820"></a>00820     <span class="keywordflow">case</span>  KIO::ERR_CYCLIC_COPY:
<a name="l00821"></a>00821       errorName = i18n( <span class="stringliteral">&quot;Cyclic Link Detected During Copy&quot;</span> );
<a name="l00822"></a>00822       description = i18n( <span class="stringliteral">&quot;UNIX environments are commonly able to link a file or &quot;</span>
<a name="l00823"></a>00823         <span class="stringliteral">&quot;folder to a separate name and/or location. During the requested copy &quot;</span>
<a name="l00824"></a>00824         <span class="stringliteral">&quot;operation, KDE detected a link or series of links that results in an &quot;</span>
<a name="l00825"></a>00825         <span class="stringliteral">&quot;infinite loop - i.e. the file was (perhaps in a roundabout way) linked &quot;</span>
<a name="l00826"></a>00826         <span class="stringliteral">&quot;to itself.&quot;</span> );
<a name="l00827"></a>00827       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Delete one part of the loop in order that it does not &quot;</span>
<a name="l00828"></a>00828         <span class="stringliteral">&quot;cause an infinite loop, and try again.&quot;</span> ) &lt;&lt; sSysadmin;
<a name="l00829"></a>00829       <span class="keywordflow">break</span>;
<a name="l00830"></a>00830 
<a name="l00831"></a>00831     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_CREATE_SOCKET:
<a name="l00832"></a>00832       errorName = i18n( <span class="stringliteral">&quot;Could Not Create Network Connection&quot;</span> );
<a name="l00833"></a>00833       techName = i18n( <span class="stringliteral">&quot;Could Not Create Socket&quot;</span> );
<a name="l00834"></a>00834       description = i18n( <span class="stringliteral">&quot;This is a fairly technical error in which a required &quot;</span>
<a name="l00835"></a>00835         <span class="stringliteral">&quot;device for network communications (a socket) could not be created.&quot;</span> );
<a name="l00836"></a>00836       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The network connection may be incorrectly configured, or &quot;</span>
<a name="l00837"></a>00837         <span class="stringliteral">&quot;the network interface may not be enabled.&quot;</span> );
<a name="l00838"></a>00838       solutions &lt;&lt; sNetwork &lt;&lt; sSysadmin;
<a name="l00839"></a>00839       <span class="keywordflow">break</span>;
<a name="l00840"></a>00840 
<a name="l00841"></a>00841     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_CONNECT:
<a name="l00842"></a>00842       errorName = i18n( <span class="stringliteral">&quot;Connection to Server Refused&quot;</span> );
<a name="l00843"></a>00843       description = i18n( <span class="stringliteral">&quot;The server &lt;strong&gt;%1&lt;/strong&gt; refused to allow this &quot;</span>
<a name="l00844"></a>00844         <span class="stringliteral">&quot;computer to make a connection.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( host );
<a name="l00845"></a>00845       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The server, while currently connected to the Internet, &quot;</span>
<a name="l00846"></a>00846         <span class="stringliteral">&quot;may not be configured to allow requests.&quot;</span> )
<a name="l00847"></a>00847         &lt;&lt; i18n( <span class="stringliteral">&quot;The server, while currently connected to the Internet, &quot;</span>
<a name="l00848"></a>00848         <span class="stringliteral">&quot;may not be running the requested service (%1).&quot;</span> ).arg( protocol )
<a name="l00849"></a>00849         &lt;&lt; i18n( <span class="stringliteral">&quot;A network firewall (a device which restricts Internet &quot;</span>
<a name="l00850"></a>00850         <span class="stringliteral">&quot;requests), either protecting your network or the network of the server, &quot;</span>
<a name="l00851"></a>00851         <span class="stringliteral">&quot;may have intervened, preventing this request.&quot;</span> );
<a name="l00852"></a>00852       solutions &lt;&lt; sTryagain &lt;&lt; sServeradmin &lt;&lt; sSysadmin;
<a name="l00853"></a>00853       <span class="keywordflow">break</span>;
<a name="l00854"></a>00854 
<a name="l00855"></a>00855     <span class="keywordflow">case</span>  KIO::ERR_CONNECTION_BROKEN:
<a name="l00856"></a>00856       errorName = i18n( <span class="stringliteral">&quot;Connection to Server Closed Unexpectedly&quot;</span> );
<a name="l00857"></a>00857       description = i18n( <span class="stringliteral">&quot;Although a connection was established to &quot;</span>
<a name="l00858"></a>00858         <span class="stringliteral">&quot;&lt;strong&gt;%1&lt;/strong&gt;, the connection was closed at an unexpected point &quot;</span>
<a name="l00859"></a>00859         <span class="stringliteral">&quot;in the communication.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( host );
<a name="l00860"></a>00860       causes &lt;&lt; cNetwork &lt;&lt; cNetpath &lt;&lt; i18n( <span class="stringliteral">&quot;A protocol error may have occurred, &quot;</span>
<a name="l00861"></a>00861         <span class="stringliteral">&quot;causing the server to close the connection as a response to the error.&quot;</span> );
<a name="l00862"></a>00862       solutions &lt;&lt; sTryagain &lt;&lt; sServeradmin &lt;&lt; sSysadmin;
<a name="l00863"></a>00863       <span class="keywordflow">break</span>;
<a name="l00864"></a>00864 
<a name="l00865"></a>00865     <span class="keywordflow">case</span>  KIO::ERR_NOT_FILTER_PROTOCOL:
<a name="l00866"></a>00866       errorName = i18n( <span class="stringliteral">&quot;URL Resource Invalid&quot;</span> );
<a name="l00867"></a>00867       techName = i18n( <span class="stringliteral">&quot;Protocol %1 is not a Filter Protocol&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l00868"></a>00868       description = i18n( <span class="stringliteral">&quot;The &lt;strong&gt;U&lt;/strong&gt;niform &lt;strong&gt;R&lt;/strong&gt;esource &quot;</span>
<a name="l00869"></a>00869         <span class="stringliteral">&quot;&lt;strong&gt;L&lt;/strong&gt;ocator (URL) that you entered did not refer to &quot;</span>
<a name="l00870"></a>00870         <span class="stringliteral">&quot;a valid mechanism of accessing the specific resource, &quot;</span>
<a name="l00871"></a>00871         <span class="stringliteral">&quot;&lt;strong&gt;%1%2&lt;/strong&gt;.&quot;</span> )
<a name="l00872"></a>00872         .<a class="codeRef" href="qstring.html#arg">arg</a>( !host.<a class="codeRef" href="qstring.html#isNull">isNull</a>() ? host + <span class="charliteral">&#39;/&#39;</span> : QString::null ).arg( dir );
<a name="l00873"></a>00873       causes &lt;&lt; i18n( <span class="stringliteral">&quot;KDE is able to communicate through a protocol within a &quot;</span>
<a name="l00874"></a>00874         <span class="stringliteral">&quot;protocol. This request specified a protocol be used as such, however &quot;</span>
<a name="l00875"></a>00875         <span class="stringliteral">&quot;this protocol is not capable of such an action. This is a rare event, &quot;</span>
<a name="l00876"></a>00876         <span class="stringliteral">&quot;and is likely to indicate a programming error.&quot;</span> );
<a name="l00877"></a>00877       solutions &lt;&lt; sTypo &lt;&lt; sSysadmin;
<a name="l00878"></a>00878       <span class="keywordflow">break</span>;
<a name="l00879"></a>00879 
<a name="l00880"></a>00880     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_MOUNT:
<a name="l00881"></a>00881       errorName = i18n( <span class="stringliteral">&quot;Unable to Initialize Input/Output Device&quot;</span> );
<a name="l00882"></a>00882       techName = i18n( <span class="stringliteral">&quot;Could Not Mount Device&quot;</span> );
<a name="l00883"></a>00883       description = i18n( <span class="stringliteral">&quot;The requested device could not be initialized &quot;</span>
<a name="l00884"></a>00884         <span class="stringliteral">&quot;(\&quot;mounted\&quot;). The reported error was: &lt;strong&gt;%1&lt;/strong&gt;&quot;</span> )
<a name="l00885"></a>00885         .<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00886"></a>00886       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The device may not be ready, for example there may be &quot;</span>
<a name="l00887"></a>00887         <span class="stringliteral">&quot;no media in a removable media device (i.e. no CD-ROM in a CD drive), &quot;</span>
<a name="l00888"></a>00888         <span class="stringliteral">&quot;or in the case of a peripheral/portable device, the device may not &quot;</span>
<a name="l00889"></a>00889         <span class="stringliteral">&quot;be correctly connected.&quot;</span> )
<a name="l00890"></a>00890         &lt;&lt; i18n( <span class="stringliteral">&quot;You may not have permissions to initialize (\&quot;mount\&quot;) the &quot;</span>
<a name="l00891"></a>00891         <span class="stringliteral">&quot;device. On UNIX systems, often system administrator privileges are &quot;</span>
<a name="l00892"></a>00892         <span class="stringliteral">&quot;required to initialize a device.&quot;</span> )
<a name="l00893"></a>00893         &lt;&lt; cHardware;
<a name="l00894"></a>00894       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Check that the device is ready; removable drives &quot;</span>
<a name="l00895"></a>00895         <span class="stringliteral">&quot;must contain media, and portable devices must be connected and powered &quot;</span>
<a name="l00896"></a>00896         <span class="stringliteral">&quot;on.; and try again.&quot;</span> ) &lt;&lt; sAccess &lt;&lt; sSysadmin;
<a name="l00897"></a>00897       <span class="keywordflow">break</span>;
<a name="l00898"></a>00898 
<a name="l00899"></a>00899     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_UNMOUNT:
<a name="l00900"></a>00900       errorName = i18n( <span class="stringliteral">&quot;Unable to Uninitialize Input/Output Device&quot;</span> );
<a name="l00901"></a>00901       techName = i18n( <span class="stringliteral">&quot;Could Not Unmount Device&quot;</span> );
<a name="l00902"></a>00902       description = i18n( <span class="stringliteral">&quot;The requested device could not be uninitialized &quot;</span>
<a name="l00903"></a>00903         <span class="stringliteral">&quot;(\&quot;unmounted\&quot;). The reported error was: &lt;strong&gt;%1&lt;/strong&gt;&quot;</span> )
<a name="l00904"></a>00904         .<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00905"></a>00905       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The device may be busy, that is, still in use by &quot;</span>
<a name="l00906"></a>00906         <span class="stringliteral">&quot;another application or user. Even such things as having an open &quot;</span>
<a name="l00907"></a>00907         <span class="stringliteral">&quot;browser window on a location on this device may cause the device to &quot;</span>
<a name="l00908"></a>00908         <span class="stringliteral">&quot;remain in use.&quot;</span> )
<a name="l00909"></a>00909         &lt;&lt; i18n( <span class="stringliteral">&quot;You may not have permissions to uninitialize (\&quot;unmount\&quot;) &quot;</span>
<a name="l00910"></a>00910         <span class="stringliteral">&quot;the device. On UNIX systems, system administrator privileges are &quot;</span>
<a name="l00911"></a>00911         <span class="stringliteral">&quot;often required to uninitialize a device.&quot;</span> )
<a name="l00912"></a>00912         &lt;&lt; cHardware;
<a name="l00913"></a>00913       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Check that no applications are accessing the device, &quot;</span>
<a name="l00914"></a>00914         <span class="stringliteral">&quot;and try again.&quot;</span> ) &lt;&lt; sAccess &lt;&lt; sSysadmin;
<a name="l00915"></a>00915       <span class="keywordflow">break</span>;
<a name="l00916"></a>00916 
<a name="l00917"></a>00917     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_READ:
<a name="l00918"></a>00918       errorName = i18n( <span class="stringliteral">&quot;Cannot Read From Resource&quot;</span> );
<a name="l00919"></a>00919       description = i18n( <span class="stringliteral">&quot;This means that although the resource, &quot;</span>
<a name="l00920"></a>00920         <span class="stringliteral">&quot;&lt;strong&gt;%1&lt;/strong&gt;, was able to be opened, an error occurred while &quot;</span>
<a name="l00921"></a>00921         <span class="stringliteral">&quot;reading the contents of the resource.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( url );
<a name="l00922"></a>00922       causes &lt;&lt; i18n( <span class="stringliteral">&quot;You may not have permissions to read from the resource.&quot;</span> );
<a name="l00923"></a>00923       <span class="keywordflow">if</span> ( !isSlaveNetwork ) causes &lt;&lt; cNetwork;
<a name="l00924"></a>00924       causes &lt;&lt; cHardware;
<a name="l00925"></a>00925       solutions &lt;&lt; sAccess;
<a name="l00926"></a>00926       <span class="keywordflow">if</span> ( !isSlaveNetwork ) solutions &lt;&lt; sNetwork;
<a name="l00927"></a>00927       solutions &lt;&lt; sSysadmin;
<a name="l00928"></a>00928       <span class="keywordflow">break</span>;
<a name="l00929"></a>00929 
<a name="l00930"></a>00930     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_WRITE:
<a name="l00931"></a>00931       errorName = i18n( <span class="stringliteral">&quot;Cannot Write to Resource&quot;</span> );
<a name="l00932"></a>00932       description = i18n( <span class="stringliteral">&quot;This means that although the resource, &lt;strong&gt;%1&lt;/strong&gt;&quot;</span>
<a name="l00933"></a>00933         <span class="stringliteral">&quot;, was able to be opened, an error occurred while writing to the resource.&quot;</span> )
<a name="l00934"></a>00934         .<a class="codeRef" href="qstring.html#arg">arg</a>( url );
<a name="l00935"></a>00935       causes &lt;&lt; i18n( <span class="stringliteral">&quot;You may not have permissions to write to the resource.&quot;</span> );
<a name="l00936"></a>00936       <span class="keywordflow">if</span> ( !isSlaveNetwork ) causes &lt;&lt; cNetwork;
<a name="l00937"></a>00937       causes &lt;&lt; cHardware;
<a name="l00938"></a>00938       solutions &lt;&lt; sAccess;
<a name="l00939"></a>00939       <span class="keywordflow">if</span> ( !isSlaveNetwork ) solutions &lt;&lt; sNetwork;
<a name="l00940"></a>00940       solutions &lt;&lt; sSysadmin;
<a name="l00941"></a>00941       <span class="keywordflow">break</span>;
<a name="l00942"></a>00942 
<a name="l00943"></a>00943     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_BIND:
<a name="l00944"></a>00944       errorName = i18n( <span class="stringliteral">&quot;Could Not Listen for Network Connections&quot;</span> );
<a name="l00945"></a>00945       techName = i18n( <span class="stringliteral">&quot;Could Not Bind&quot;</span> );
<a name="l00946"></a>00946       description = i18n( <span class="stringliteral">&quot;This is a fairly technical error in which a required &quot;</span>
<a name="l00947"></a>00947         <span class="stringliteral">&quot;device for network communications (a socket) could not be established &quot;</span>
<a name="l00948"></a>00948         <span class="stringliteral">&quot;to listen for incoming network connections.&quot;</span> );
<a name="l00949"></a>00949       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The network connection may be incorrectly configured, or &quot;</span>
<a name="l00950"></a>00950         <span class="stringliteral">&quot;the network interface may not be enabled.&quot;</span> );
<a name="l00951"></a>00951       solutions &lt;&lt; sNetwork &lt;&lt; sSysadmin;
<a name="l00952"></a>00952       <span class="keywordflow">break</span>;
<a name="l00953"></a>00953 
<a name="l00954"></a>00954     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_LISTEN:
<a name="l00955"></a>00955       errorName = i18n( <span class="stringliteral">&quot;Could Not Listen for Network Connections&quot;</span> );
<a name="l00956"></a>00956       techName = i18n( <span class="stringliteral">&quot;Could Not Listen&quot;</span> );
<a name="l00957"></a>00957       description = i18n( <span class="stringliteral">&quot;This is a fairly technical error in which a required &quot;</span>
<a name="l00958"></a>00958         <span class="stringliteral">&quot;device for network communications (a socket) could not be established &quot;</span>
<a name="l00959"></a>00959         <span class="stringliteral">&quot;to listen for incoming network connections.&quot;</span> );
<a name="l00960"></a>00960       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The network connection may be incorrectly configured, or &quot;</span>
<a name="l00961"></a>00961         <span class="stringliteral">&quot;the network interface may not be enabled.&quot;</span> );
<a name="l00962"></a>00962       solutions &lt;&lt; sNetwork &lt;&lt; sSysadmin;
<a name="l00963"></a>00963       <span class="keywordflow">break</span>;
<a name="l00964"></a>00964 
<a name="l00965"></a>00965     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_ACCEPT:
<a name="l00966"></a>00966       errorName = i18n( <span class="stringliteral">&quot;Could Not Accept Network Connection&quot;</span> );
<a name="l00967"></a>00967       description = i18n( <span class="stringliteral">&quot;This is a fairly technical error in which an error &quot;</span>
<a name="l00968"></a>00968         <span class="stringliteral">&quot;occurred while attempting to accept an incoming network connection.&quot;</span> );
<a name="l00969"></a>00969       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The network connection may be incorrectly configured, or &quot;</span>
<a name="l00970"></a>00970         <span class="stringliteral">&quot;the network interface may not be enabled.&quot;</span> )
<a name="l00971"></a>00971         &lt;&lt; i18n( <span class="stringliteral">&quot;You may not have permissions to accept the connection.&quot;</span> );
<a name="l00972"></a>00972       solutions &lt;&lt; sNetwork &lt;&lt; sSysadmin;
<a name="l00973"></a>00973       <span class="keywordflow">break</span>;
<a name="l00974"></a>00974 
<a name="l00975"></a>00975     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_LOGIN:
<a name="l00976"></a>00976       errorName = i18n( <span class="stringliteral">&quot;Could Not Login: %1&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l00977"></a>00977       description = i18n( <span class="stringliteral">&quot;An attempt to login to perform the requested &quot;</span>
<a name="l00978"></a>00978         <span class="stringliteral">&quot;operation was unsuccessful.&quot;</span> );
<a name="l00979"></a>00979       causes &lt;&lt; i18n( <span class="stringliteral">&quot;You may have supplied incorrect authentication details or &quot;</span>
<a name="l00980"></a>00980         <span class="stringliteral">&quot;none at all.&quot;</span> )
<a name="l00981"></a>00981         &lt;&lt; i18n( <span class="stringliteral">&quot;Your account may not have permission to access the &quot;</span>
<a name="l00982"></a>00982         <span class="stringliteral">&quot;specified resource.&quot;</span> ) &lt;&lt; cProtocol;
<a name="l00983"></a>00983       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Retry the request and ensure your authentication details &quot;</span>
<a name="l00984"></a>00984         <span class="stringliteral">&quot;are entered correctly.&quot;</span> ) &lt;&lt; sServeradmin &lt;&lt; sSysadmin;
<a name="l00985"></a>00985       <span class="keywordflow">break</span>;
<a name="l00986"></a>00986 
<a name="l00987"></a>00987     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_STAT:
<a name="l00988"></a>00988       errorName = i18n( <span class="stringliteral">&quot;Could Not Determine Resource Status&quot;</span> );
<a name="l00989"></a>00989       techName = i18n( <span class="stringliteral">&quot;Could Not Stat Resource&quot;</span> );
<a name="l00990"></a>00990       description = i18n( <span class="stringliteral">&quot;An attempt to determine information about the status &quot;</span>
<a name="l00991"></a>00991         <span class="stringliteral">&quot;of the resource &lt;strong&gt;%1&lt;/strong&gt;, such as the resource name, type, &quot;</span>
<a name="l00992"></a>00992         <span class="stringliteral">&quot;size, etc., was unsuccessful.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( url );
<a name="l00993"></a>00993       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The specified resource may not have existed or may &quot;</span>
<a name="l00994"></a>00994         <span class="stringliteral">&quot;not be accessible.&quot;</span> ) &lt;&lt; cProtocol &lt;&lt; cHardware;
<a name="l00995"></a>00995       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Retry the request and ensure your authentication details &quot;</span>
<a name="l00996"></a>00996         <span class="stringliteral">&quot;are entered correctly.&quot;</span> ) &lt;&lt; sSysadmin;
<a name="l00997"></a>00997       <span class="keywordflow">break</span>;
<a name="l00998"></a>00998 
<a name="l00999"></a>00999     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_CLOSEDIR:
<a name="l01000"></a>01000       <span class="comment">//result = i18n( &quot;Could not terminate listing %1&quot; ).arg( errorText );</span>
<a name="l01001"></a>01001       errorName = i18n( <span class="stringliteral">&quot;Could Not Cancel Listing&quot;</span> );
<a name="l01002"></a>01002       techName = i18n( <span class="stringliteral">&quot;FIXME: Document this&quot;</span> );
<a name="l01003"></a>01003       <span class="keywordflow">break</span>;
<a name="l01004"></a>01004 
<a name="l01005"></a>01005     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_MKDIR:
<a name="l01006"></a>01006       errorName = i18n( <span class="stringliteral">&quot;Could Not Create Folder&quot;</span> );
<a name="l01007"></a>01007       description = i18n( <span class="stringliteral">&quot;An attempt to create the requested folder failed.&quot;</span> );
<a name="l01008"></a>01008       causes &lt;&lt; cAccess &lt;&lt; i18n( <span class="stringliteral">&quot;The location where the folder was to be created &quot;</span>
<a name="l01009"></a>01009         <span class="stringliteral">&quot;may not exist.&quot;</span> );
<a name="l01010"></a>01010       <span class="keywordflow">if</span> ( !isSlaveNetwork ) causes &lt;&lt; cProtocol;
<a name="l01011"></a>01011       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Retry the request.&quot;</span> ) &lt;&lt; sAccess;
<a name="l01012"></a>01012       <span class="keywordflow">break</span>;
<a name="l01013"></a>01013 
<a name="l01014"></a>01014     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_RMDIR:
<a name="l01015"></a>01015       errorName = i18n( <span class="stringliteral">&quot;Could Not Remove Folder&quot;</span> );
<a name="l01016"></a>01016       description = i18n( <span class="stringliteral">&quot;An attempt to remove the specified folder, &quot;</span>
<a name="l01017"></a>01017         <span class="stringliteral">&quot;&lt;strong&gt;%1&lt;/strong&gt;, failed.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( dir );
<a name="l01018"></a>01018       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The specified folder may not exist.&quot;</span> )
<a name="l01019"></a>01019         &lt;&lt; i18n( <span class="stringliteral">&quot;The specified folder may not be empty.&quot;</span> )
<a name="l01020"></a>01020         &lt;&lt; cAccess;
<a name="l01021"></a>01021       <span class="keywordflow">if</span> ( !isSlaveNetwork ) causes &lt;&lt; cProtocol;
<a name="l01022"></a>01022       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Ensure that the folder exists and is empty, and try &quot;</span>
<a name="l01023"></a>01023         <span class="stringliteral">&quot;again.&quot;</span> ) &lt;&lt; sAccess;
<a name="l01024"></a>01024       <span class="keywordflow">break</span>;
<a name="l01025"></a>01025 
<a name="l01026"></a>01026     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_RESUME:
<a name="l01027"></a>01027       errorName = i18n( <span class="stringliteral">&quot;Could Not Resume File Transfer&quot;</span> );
<a name="l01028"></a>01028       description = i18n( <span class="stringliteral">&quot;The specified request asked that the transfer of &quot;</span>
<a name="l01029"></a>01029         <span class="stringliteral">&quot;file &lt;strong&gt;%1&lt;/strong&gt; be resumed at a certain point of the &quot;</span>
<a name="l01030"></a>01030         <span class="stringliteral">&quot;transfer. This was not possible.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( filename );
<a name="l01031"></a>01031       causes &lt;&lt; i18n( <span class="stringliteral">&quot;The protocol, or the server, may not support file &quot;</span>
<a name="l01032"></a>01032         <span class="stringliteral">&quot;resuming.&quot;</span> );
<a name="l01033"></a>01033       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Retry the request without attempting to resume &quot;</span>
<a name="l01034"></a>01034         <span class="stringliteral">&quot;transfer.&quot;</span> );
<a name="l01035"></a>01035       <span class="keywordflow">break</span>;
<a name="l01036"></a>01036 
<a name="l01037"></a>01037     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_RENAME:
<a name="l01038"></a>01038       errorName = i18n( <span class="stringliteral">&quot;Could Not Rename Resource&quot;</span> );
<a name="l01039"></a>01039       description = i18n( <span class="stringliteral">&quot;An attempt to rename the specified resource &quot;</span>
<a name="l01040"></a>01040         <span class="stringliteral">&quot;&lt;strong&gt;%1&lt;/strong&gt; failed.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( url );
<a name="l01041"></a>01041       causes &lt;&lt; cAccess &lt;&lt; cExists;
<a name="l01042"></a>01042       <span class="keywordflow">if</span> ( !isSlaveNetwork ) causes &lt;&lt; cProtocol;
<a name="l01043"></a>01043       solutions &lt;&lt; sAccess &lt;&lt; sExists;
<a name="l01044"></a>01044       <span class="keywordflow">break</span>;
<a name="l01045"></a>01045 
<a name="l01046"></a>01046     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_CHMOD:
<a name="l01047"></a>01047       errorName = i18n( <span class="stringliteral">&quot;Could Not Alter Permissions of Resource&quot;</span> );
<a name="l01048"></a>01048       description = i18n( <span class="stringliteral">&quot;An attempt to alter the permissions on the specified &quot;</span>
<a name="l01049"></a>01049         <span class="stringliteral">&quot;resource &lt;strong&gt;%1&lt;/strong&gt; failed.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( url );
<a name="l01050"></a>01050       causes &lt;&lt; cAccess &lt;&lt; cExists;
<a name="l01051"></a>01051       solutions &lt;&lt; sAccess &lt;&lt; sExists;
<a name="l01052"></a>01052       <span class="keywordflow">break</span>;
<a name="l01053"></a>01053 
<a name="l01054"></a>01054     <span class="keywordflow">case</span>  KIO::ERR_CANNOT_DELETE:
<a name="l01055"></a>01055       errorName = i18n( <span class="stringliteral">&quot;Could Not Delete Resource&quot;</span> );
<a name="l01056"></a>01056       description = i18n( <span class="stringliteral">&quot;An attempt to delete the specified resource &quot;</span>
<a name="l01057"></a>01057         <span class="stringliteral">&quot;&lt;strong&gt;%1&lt;/strong&gt; failed.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( url );
<a name="l01058"></a>01058       causes &lt;&lt; cAccess &lt;&lt; cExists;
<a name="l01059"></a>01059       solutions &lt;&lt; sAccess &lt;&lt; sExists;
<a name="l01060"></a>01060       <span class="keywordflow">break</span>;
<a name="l01061"></a>01061 
<a name="l01062"></a>01062     <span class="keywordflow">case</span>  KIO::ERR_SLAVE_DIED:
<a name="l01063"></a>01063       errorName = i18n( <span class="stringliteral">&quot;Unexpected Program Termination&quot;</span> );
<a name="l01064"></a>01064       description = i18n( <span class="stringliteral">&quot;The program on your computer which provides access &quot;</span>
<a name="l01065"></a>01065         <span class="stringliteral">&quot;to the &lt;strong&gt;%1&lt;/strong&gt; protocol has unexpectedly terminated.&quot;</span> )
<a name="l01066"></a>01066         .<a class="codeRef" href="qstring.html#arg">arg</a>( url );
<a name="l01067"></a>01067       causes &lt;&lt; cBuglikely;
<a name="l01068"></a>01068       solutions &lt;&lt; sUpdate &lt;&lt; sBugreport;
<a name="l01069"></a>01069       <span class="keywordflow">break</span>;
<a name="l01070"></a>01070 
<a name="l01071"></a>01071     <span class="keywordflow">case</span>  KIO::ERR_OUT_OF_MEMORY:
<a name="l01072"></a>01072       errorName = i18n( <span class="stringliteral">&quot;Out of Memory&quot;</span> );
<a name="l01073"></a>01073       description = i18n( <span class="stringliteral">&quot;The program on your computer which provides access &quot;</span>
<a name="l01074"></a>01074         <span class="stringliteral">&quot;to the &lt;strong&gt;%1&lt;/strong&gt; protocol could not obtain the memory &quot;</span>
<a name="l01075"></a>01075         <span class="stringliteral">&quot;required to continue.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l01076"></a>01076       causes &lt;&lt; cBuglikely;
<a name="l01077"></a>01077       solutions &lt;&lt; sUpdate &lt;&lt; sBugreport;
<a name="l01078"></a>01078       <span class="keywordflow">break</span>;
<a name="l01079"></a>01079 
<a name="l01080"></a>01080     <span class="keywordflow">case</span>  KIO::ERR_UNKNOWN_PROXY_HOST:
<a name="l01081"></a>01081       errorName = i18n( <span class="stringliteral">&quot;Unknown Proxy Host&quot;</span> );
<a name="l01082"></a>01082       description = i18n( <span class="stringliteral">&quot;While retrieving information about the specified &quot;</span>
<a name="l01083"></a>01083         <span class="stringliteral">&quot;proxy host, &lt;strong&gt;%1&lt;/strong&gt;, an Unknown Host error was encountered. &quot;</span>
<a name="l01084"></a>01084         <span class="stringliteral">&quot;An unknown host error indicates that the requested name could not be &quot;</span>
<a name="l01085"></a>01085         <span class="stringliteral">&quot;located on the Internet.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l01086"></a>01086       causes &lt;&lt; i18n( <span class="stringliteral">&quot;There may have been a problem with your network &quot;</span>
<a name="l01087"></a>01087         <span class="stringliteral">&quot;configuration, specifically your proxy&#39;s hostname. If you have been &quot;</span>
<a name="l01088"></a>01088         <span class="stringliteral">&quot;accessing the Internet with no problems recently, this is unlikely.&quot;</span> )
<a name="l01089"></a>01089         &lt;&lt; cNetwork;
<a name="l01090"></a>01090       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Double-check your proxy settings and try again.&quot;</span> )
<a name="l01091"></a>01091         &lt;&lt; sSysadmin;
<a name="l01092"></a>01092       <span class="keywordflow">break</span>;
<a name="l01093"></a>01093 
<a name="l01094"></a>01094     <span class="keywordflow">case</span>  KIO::ERR_COULD_NOT_AUTHENTICATE:
<a name="l01095"></a>01095       errorName = i18n( <span class="stringliteral">&quot;Authentication Failed: Method %1 Not Supported&quot;</span> )
<a name="l01096"></a>01096          .<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l01097"></a>01097       description = i18n( <span class="stringliteral">&quot;Although you may have supplied the correct &quot;</span>
<a name="l01098"></a>01098         <span class="stringliteral">&quot;authentication details, the authentication failed because the &quot;</span>
<a name="l01099"></a>01099         <span class="stringliteral">&quot;method that the server is using is not supported by the KDE &quot;</span>
<a name="l01100"></a>01100         <span class="stringliteral">&quot;program implementing the protocol %1.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l01101"></a>01101       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Please file a bug at &lt;a href=\&quot;http://bugs.kde.org/\&quot;&gt;&quot;</span>
<a name="l01102"></a>01102         <span class="stringliteral">&quot;http://bugs.kde.org/&lt;/a&gt; to inform the KDE team of the unsupported &quot;</span>
<a name="l01103"></a>01103         <span class="stringliteral">&quot;authentication method.&quot;</span> ) &lt;&lt; sSysadmin;
<a name="l01104"></a>01104       <span class="keywordflow">break</span>;
<a name="l01105"></a>01105 
<a name="l01106"></a>01106     <span class="keywordflow">case</span>  KIO::ERR_ABORTED:
<a name="l01107"></a>01107       errorName = i18n( <span class="stringliteral">&quot;Request Aborted&quot;</span> );
<a name="l01108"></a>01108       description = i18n( <span class="stringliteral">&quot;The request was not completed because it was &quot;</span>
<a name="l01109"></a>01109         <span class="stringliteral">&quot;aborted.&quot;</span> );
<a name="l01110"></a>01110       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Retry the request.&quot;</span> );
<a name="l01111"></a>01111       <span class="keywordflow">break</span>;
<a name="l01112"></a>01112 
<a name="l01113"></a>01113     <span class="keywordflow">case</span>  KIO::ERR_INTERNAL_SERVER:
<a name="l01114"></a>01114       errorName = i18n( <span class="stringliteral">&quot;Internal Error in Server&quot;</span> );
<a name="l01115"></a>01115       description = i18n( <span class="stringliteral">&quot;The program on the server which provides access &quot;</span>
<a name="l01116"></a>01116         <span class="stringliteral">&quot;to the &lt;strong&gt;%1&lt;/strong&gt; protocol has reported an internal error: &quot;</span>
<a name="l01117"></a>01117         <span class="stringliteral">&quot;%0.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( protocol );
<a name="l01118"></a>01118       causes &lt;&lt; i18n( <span class="stringliteral">&quot;This is most likely to be caused by a bug in the &quot;</span>
<a name="l01119"></a>01119         <span class="stringliteral">&quot;server program. Please consider submitting a full bug report as &quot;</span>
<a name="l01120"></a>01120         <span class="stringliteral">&quot;detailed below.&quot;</span> );
<a name="l01121"></a>01121       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Contact the administrator of the server &quot;</span>
<a name="l01122"></a>01122         <span class="stringliteral">&quot;to advise them of the problem.&quot;</span> )
<a name="l01123"></a>01123         &lt;&lt; i18n( <span class="stringliteral">&quot;If you know who the authors of the server software are, &quot;</span>
<a name="l01124"></a>01124         <span class="stringliteral">&quot;submit the bug report directly to them.&quot;</span> );
<a name="l01125"></a>01125       <span class="keywordflow">break</span>;
<a name="l01126"></a>01126 
<a name="l01127"></a>01127     <span class="keywordflow">case</span>  KIO::ERR_SERVER_TIMEOUT:
<a name="l01128"></a>01128       errorName = i18n( <span class="stringliteral">&quot;Timeout Error&quot;</span> );
<a name="l01129"></a>01129       description = i18n( <span class="stringliteral">&quot;Although contact was made with the server, a &quot;</span>
<a name="l01130"></a>01130         <span class="stringliteral">&quot;response was not received within the amount of time allocated for &quot;</span>
<a name="l01131"></a>01131         <span class="stringliteral">&quot;the request as follows:&lt;ul&gt;&quot;</span>
<a name="l01132"></a>01132         <span class="stringliteral">&quot;&lt;li&gt;Timeout for establishing a connection: %1 seconds&lt;/li&gt;&quot;</span>
<a name="l01133"></a>01133         <span class="stringliteral">&quot;&lt;li&gt;Timeout for receiving a response: %2 seconds&lt;/li&gt;&quot;</span>
<a name="l01134"></a>01134         <span class="stringliteral">&quot;&lt;li&gt;Timeout for accessing proxy servers: %3 seconds&lt;/li&gt;&lt;/ul&gt;&quot;</span>
<a name="l01135"></a>01135         <span class="stringliteral">&quot;Please note that you can alter these timeout settings in the KDE &quot;</span>
<a name="l01136"></a>01136         <span class="stringliteral">&quot;Control Center, by selecting Network -&gt; Preferences.&quot;</span> )
<a name="l01137"></a>01137         .<a class="codeRef" href="qstring.html#arg">arg</a>( <a class="code" href="classKProtocolManager.html#aafd53cb1280a0dc542df3d3cabeaf5da" title="Returns the preferred timeout value for remote connections in seconds.">KProtocolManager::connectTimeout</a>() )
<a name="l01138"></a>01138         .arg( <a class="code" href="classKProtocolManager.html#aefcc7ad4545e1638b9cbf80b38d69dca" title="Returns the preferred response timeout value for remote connecting in seconds.">KProtocolManager::responseTimeout</a>() )
<a name="l01139"></a>01139         .arg( <a class="code" href="classKProtocolManager.html#a1cf37a12313f42451128f2b75b8d914b" title="Returns the preferred timeout value for proxy connections in seconds.">KProtocolManager::proxyConnectTimeout</a>() );
<a name="l01140"></a>01140       causes &lt;&lt; cNetpath &lt;&lt; i18n( <span class="stringliteral">&quot;The server was too busy responding to other &quot;</span>
<a name="l01141"></a>01141         <span class="stringliteral">&quot;requests to respond.&quot;</span> );
<a name="l01142"></a>01142       solutions &lt;&lt; sTryagain &lt;&lt; sServeradmin;
<a name="l01143"></a>01143       <span class="keywordflow">break</span>;
<a name="l01144"></a>01144 
<a name="l01145"></a>01145     <span class="keywordflow">case</span>  KIO::ERR_UNKNOWN:
<a name="l01146"></a>01146       errorName = i18n( <span class="stringliteral">&quot;Unknown Error&quot;</span> );
<a name="l01147"></a>01147       description = i18n( <span class="stringliteral">&quot;The program on your computer which provides access &quot;</span>
<a name="l01148"></a>01148         <span class="stringliteral">&quot;to the &lt;strong&gt;%1&lt;/strong&gt; protocol has reported an unknown error: &quot;</span>
<a name="l01149"></a>01149         <span class="stringliteral">&quot;%2.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( protocol ).arg( errorText );
<a name="l01150"></a>01150       causes &lt;&lt; cBug;
<a name="l01151"></a>01151       solutions &lt;&lt; sUpdate &lt;&lt; sBugreport;
<a name="l01152"></a>01152       <span class="keywordflow">break</span>;
<a name="l01153"></a>01153 
<a name="l01154"></a>01154     <span class="keywordflow">case</span>  KIO::ERR_UNKNOWN_INTERRUPT:
<a name="l01155"></a>01155       errorName = i18n( <span class="stringliteral">&quot;Unknown Interruption&quot;</span> );
<a name="l01156"></a>01156       description = i18n( <span class="stringliteral">&quot;The program on your computer which provides access &quot;</span>
<a name="l01157"></a>01157         <span class="stringliteral">&quot;to the &lt;strong&gt;%1&lt;/strong&gt; protocol has reported an interruption of &quot;</span>
<a name="l01158"></a>01158         <span class="stringliteral">&quot;an unknown type: %2.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( protocol ).arg( errorText );
<a name="l01159"></a>01159       causes &lt;&lt; cBug;
<a name="l01160"></a>01160       solutions &lt;&lt; sUpdate &lt;&lt; sBugreport;
<a name="l01161"></a>01161       <span class="keywordflow">break</span>;
<a name="l01162"></a>01162 
<a name="l01163"></a>01163     <span class="keywordflow">case</span> KIO::ERR_CANNOT_DELETE_ORIGINAL:
<a name="l01164"></a>01164       errorName = i18n( <span class="stringliteral">&quot;Could Not Delete Original File&quot;</span> );
<a name="l01165"></a>01165       description = i18n( <span class="stringliteral">&quot;The requested operation required the deleting of &quot;</span>
<a name="l01166"></a>01166         <span class="stringliteral">&quot;the original file, most likely at the end of a file move operation. &quot;</span>
<a name="l01167"></a>01167         <span class="stringliteral">&quot;The original file &lt;strong&gt;%1&lt;/strong&gt; could not be deleted.&quot;</span> )
<a name="l01168"></a>01168         .<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l01169"></a>01169       causes &lt;&lt; cAccess;
<a name="l01170"></a>01170       solutions &lt;&lt; sAccess;
<a name="l01171"></a>01171       <span class="keywordflow">break</span>;
<a name="l01172"></a>01172 
<a name="l01173"></a>01173     <span class="keywordflow">case</span> KIO::ERR_CANNOT_DELETE_PARTIAL:
<a name="l01174"></a>01174       errorName = i18n( <span class="stringliteral">&quot;Could Not Delete Temporary File&quot;</span> );
<a name="l01175"></a>01175       description = i18n( <span class="stringliteral">&quot;The requested operation required the creation of &quot;</span>
<a name="l01176"></a>01176         <span class="stringliteral">&quot;a temporary file in which to save the new file while being &quot;</span>
<a name="l01177"></a>01177         <span class="stringliteral">&quot;downloaded. This temporary file &lt;strong&gt;%1&lt;/strong&gt; could not be &quot;</span>
<a name="l01178"></a>01178         <span class="stringliteral">&quot;deleted.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l01179"></a>01179       causes &lt;&lt; cAccess;
<a name="l01180"></a>01180       solutions &lt;&lt; sAccess;
<a name="l01181"></a>01181       <span class="keywordflow">break</span>;
<a name="l01182"></a>01182 
<a name="l01183"></a>01183     <span class="keywordflow">case</span> KIO::ERR_CANNOT_RENAME_ORIGINAL:
<a name="l01184"></a>01184       errorName = i18n( <span class="stringliteral">&quot;Could Not Rename Original File&quot;</span> );
<a name="l01185"></a>01185       description = i18n( <span class="stringliteral">&quot;The requested operation required the renaming of &quot;</span>
<a name="l01186"></a>01186         <span class="stringliteral">&quot;the original file &lt;strong&gt;%1&lt;/strong&gt;, however it could not be &quot;</span>
<a name="l01187"></a>01187         <span class="stringliteral">&quot;renamed.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l01188"></a>01188       causes &lt;&lt; cAccess;
<a name="l01189"></a>01189       solutions &lt;&lt; sAccess;
<a name="l01190"></a>01190       <span class="keywordflow">break</span>;
<a name="l01191"></a>01191 
<a name="l01192"></a>01192     <span class="keywordflow">case</span> KIO::ERR_CANNOT_RENAME_PARTIAL:
<a name="l01193"></a>01193       errorName = i18n( <span class="stringliteral">&quot;Could Not Rename Temporary File&quot;</span> );
<a name="l01194"></a>01194       description = i18n( <span class="stringliteral">&quot;The requested operation required the creation of &quot;</span>
<a name="l01195"></a>01195         <span class="stringliteral">&quot;a temporary file &lt;strong&gt;%1&lt;/strong&gt;, however it could not be &quot;</span>
<a name="l01196"></a>01196         <span class="stringliteral">&quot;created.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l01197"></a>01197       causes &lt;&lt; cAccess;
<a name="l01198"></a>01198       solutions &lt;&lt; sAccess;
<a name="l01199"></a>01199       <span class="keywordflow">break</span>;
<a name="l01200"></a>01200 
<a name="l01201"></a>01201     <span class="keywordflow">case</span> KIO::ERR_CANNOT_SYMLINK:
<a name="l01202"></a>01202       errorName = i18n( <span class="stringliteral">&quot;Could Not Create Link&quot;</span> );
<a name="l01203"></a>01203       techName = i18n( <span class="stringliteral">&quot;Could Not Create Symbolic Link&quot;</span> );
<a name="l01204"></a>01204       description = i18n( <span class="stringliteral">&quot;The requested symbolic link %1 could not be created.&quot;</span> )
<a name="l01205"></a>01205         .<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l01206"></a>01206       causes &lt;&lt; cAccess;
<a name="l01207"></a>01207       solutions &lt;&lt; sAccess;
<a name="l01208"></a>01208       <span class="keywordflow">break</span>;
<a name="l01209"></a>01209 
<a name="l01210"></a>01210     <span class="keywordflow">case</span> KIO::ERR_NO_CONTENT:
<a name="l01211"></a>01211       errorName = i18n( <span class="stringliteral">&quot;No Content&quot;</span> );
<a name="l01212"></a>01212       description = errorText;
<a name="l01213"></a>01213       <span class="keywordflow">break</span>;
<a name="l01214"></a>01214 
<a name="l01215"></a>01215     <span class="keywordflow">case</span> KIO::ERR_DISK_FULL:
<a name="l01216"></a>01216       errorName = i18n( <span class="stringliteral">&quot;Disk Full&quot;</span> );
<a name="l01217"></a>01217       description = i18n( <span class="stringliteral">&quot;The requested file &lt;strong&gt;%1&lt;/strong&gt; could not be &quot;</span>
<a name="l01218"></a>01218         <span class="stringliteral">&quot;written to as there is inadequate disk space.&quot;</span> ).<a class="codeRef" href="qstring.html#arg">arg</a>( errorText );
<a name="l01219"></a>01219       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Free up enough disk space by 1) deleting unwanted and &quot;</span>
<a name="l01220"></a>01220         <span class="stringliteral">&quot;temporary files; 2) archiving files to removable media storage such as &quot;</span>
<a name="l01221"></a>01221         <span class="stringliteral">&quot;CD-Recordable discs; or 3) obtain more storage capacity.&quot;</span> )
<a name="l01222"></a>01222         &lt;&lt; sSysadmin;
<a name="l01223"></a>01223       <span class="keywordflow">break</span>;
<a name="l01224"></a>01224 
<a name="l01225"></a>01225     <span class="keywordflow">case</span> KIO::ERR_IDENTICAL_FILES:
<a name="l01226"></a>01226       errorName = i18n( <span class="stringliteral">&quot;Source and Destination Files Identical&quot;</span> );
<a name="l01227"></a>01227       description = i18n( <span class="stringliteral">&quot;The operation could not be completed because the &quot;</span>
<a name="l01228"></a>01228         <span class="stringliteral">&quot;source and destination files are the same file.&quot;</span> );
<a name="l01229"></a>01229       solutions &lt;&lt; i18n( <span class="stringliteral">&quot;Choose a different filename for the destination file.&quot;</span> );
<a name="l01230"></a>01230       <span class="keywordflow">break</span>;
<a name="l01231"></a>01231 
<a name="l01232"></a>01232     <span class="comment">// We assume that the slave has all the details</span>
<a name="l01233"></a>01233     <span class="keywordflow">case</span> KIO::ERR_SLAVE_DEFINED:
<a name="l01234"></a>01234       errorName = QString::null;
<a name="l01235"></a>01235       description = errorText;
<a name="l01236"></a>01236       <span class="keywordflow">break</span>;
<a name="l01237"></a>01237 
<a name="l01238"></a>01238     <span class="keywordflow">default</span>:
<a name="l01239"></a>01239       <span class="comment">// fall back to the plain error...</span>
<a name="l01240"></a>01240       errorName = i18n( <span class="stringliteral">&quot;Undocumented Error&quot;</span> );
<a name="l01241"></a>01241       description = <a class="code" href="namespaceKIO.html#a46521cadccc2b2e81a7469c61e413e52" title="Returns a translated error message for errorCode using the additional error information provided by e...">buildErrorString</a>( errorCode, errorText );
<a name="l01242"></a>01242   }
<a name="l01243"></a>01243 
<a name="l01244"></a>01244   <a class="codeRef" href="qbytearray.html">QByteArray</a> ret;
<a name="l01245"></a>01245   <a class="codeRef" href="qdatastream.html">QDataStream</a> stream(ret, IO_WriteOnly);
<a name="l01246"></a>01246   stream &lt;&lt; errorName &lt;&lt; techName &lt;&lt; description &lt;&lt; causes &lt;&lt; solutions;
<a name="l01247"></a>01247   <span class="keywordflow">return</span> ret;
<a name="l01248"></a>01248 }
<a name="l01249"></a>01249 
<a name="l01250"></a>01250 <span class="preprocessor">#ifdef Q_OS_UNIX</span>
<a name="l01251"></a>01251 <span class="preprocessor"></span>
<a name="l01252"></a>01252 <span class="preprocessor">#include &lt;limits.h&gt;</span>
<a name="l01253"></a>01253 <span class="preprocessor">#include &lt;stdlib.h&gt;</span>
<a name="l01254"></a>01254 <span class="preprocessor">#include &lt;stdio.h&gt;</span>
<a name="l01255"></a>01255 <span class="preprocessor">#include &lt;qfile.h&gt;</span>
<a name="l01256"></a>01256 
<a name="l01257"></a>01257 <span class="preprocessor">#include &lt;config.h&gt;</span>
<a name="l01258"></a>01258 
<a name="l01259"></a>01259 <span class="preprocessor">#ifdef HAVE_PATHS_H</span>
<a name="l01260"></a>01260 <span class="preprocessor"></span><span class="preprocessor">#include &lt;paths.h&gt;</span>
<a name="l01261"></a>01261 <span class="preprocessor">#endif</span>
<a name="l01262"></a>01262 <span class="preprocessor"></span><span class="preprocessor">#ifdef HAVE_SYS_STAT_H</span>
<a name="l01263"></a>01263 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/stat.h&gt;</span>
<a name="l01264"></a>01264 <span class="preprocessor">#endif</span>
<a name="l01265"></a>01265 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/param.h&gt;</span>
<a name="l01266"></a>01266 <span class="preprocessor">#ifdef HAVE_LIMITS_H</span>
<a name="l01267"></a>01267 <span class="preprocessor"></span><span class="preprocessor">#include &lt;limits.h&gt;</span>
<a name="l01268"></a>01268 <span class="preprocessor">#endif</span>
<a name="l01269"></a>01269 <span class="preprocessor"></span><span class="preprocessor">#ifdef HAVE_SYS_MNTTAB_H</span>
<a name="l01270"></a>01270 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/mnttab.h&gt;</span>
<a name="l01271"></a>01271 <span class="preprocessor">#endif</span>
<a name="l01272"></a>01272 <span class="preprocessor"></span><span class="preprocessor">#ifdef HAVE_MNTENT_H</span>
<a name="l01273"></a>01273 <span class="preprocessor"></span><span class="preprocessor">#include &lt;mntent.h&gt;</span>
<a name="l01274"></a>01274 <span class="preprocessor">#elif defined(HAVE_SYS_MNTENT_H)</span>
<a name="l01275"></a>01275 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/mntent.h&gt;</span>
<a name="l01276"></a>01276 <span class="preprocessor">#endif</span>
<a name="l01277"></a>01277 <span class="preprocessor"></span><span class="preprocessor">#ifdef HAVE_SYS_UCRED_H</span>
<a name="l01278"></a>01278 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/ucred.h&gt;</span>
<a name="l01279"></a>01279 <span class="preprocessor">#endif</span>
<a name="l01280"></a>01280 <span class="preprocessor"></span><span class="preprocessor">#ifdef HAVE_SYS_MOUNT_H</span>
<a name="l01281"></a>01281 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/mount.h&gt;</span>
<a name="l01282"></a>01282 <span class="preprocessor">#endif</span>
<a name="l01283"></a>01283 <span class="preprocessor"></span><span class="preprocessor">#ifdef HAVE_FSTAB_H</span>
<a name="l01284"></a>01284 <span class="preprocessor"></span><span class="preprocessor">#include &lt;fstab.h&gt;</span>
<a name="l01285"></a>01285 <span class="preprocessor">#endif</span>
<a name="l01286"></a>01286 <span class="preprocessor"></span><span class="preprocessor">#if defined(_AIX)</span>
<a name="l01287"></a>01287 <span class="preprocessor"></span><span class="preprocessor">#include &lt;sys/mntctl.h&gt;</span>
<a name="l01288"></a>01288 <span class="preprocessor">#include &lt;sys/vmount.h&gt;</span>
<a name="l01289"></a>01289 <span class="preprocessor">#include &lt;sys/vfs.h&gt;</span>
<a name="l01290"></a>01290 
<a name="l01291"></a>01291 <span class="comment">/* AIX does not prototype mntctl anywhere that I can find */</span>
<a name="l01292"></a>01292 <span class="preprocessor">#ifndef mntctl</span>
<a name="l01293"></a>01293 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> {
<a name="l01294"></a>01294 <span class="keywordtype">int</span> mntctl(<span class="keywordtype">int</span> command, <span class="keywordtype">int</span> size, <span class="keywordtype">void</span>* buffer);
<a name="l01295"></a>01295 }
<a name="l01296"></a>01296 <span class="preprocessor">#endif</span>
<a name="l01297"></a>01297 <span class="preprocessor"></span><span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> <span class="keyword">struct </span>vfs_ent *getvfsbytype(<span class="keywordtype">int</span> vfsType);
<a name="l01298"></a>01298 <span class="keyword">extern</span> <span class="stringliteral">&quot;C&quot;</span> <span class="keywordtype">void</span> endvfsent( );
<a name="l01299"></a>01299 <span class="preprocessor">#endif</span>
<a name="l01300"></a>01300 <span class="preprocessor"></span>
<a name="l01301"></a>01301 <span class="comment">/***************************************************************</span>
<a name="l01302"></a>01302 <span class="comment"> *</span>
<a name="l01303"></a>01303 <span class="comment"> * Utility functions</span>
<a name="l01304"></a>01304 <span class="comment"> *</span>
<a name="l01305"></a>01305 <span class="comment"> ***************************************************************/</span>
<a name="l01306"></a>01306 
<a name="l01307"></a>01307 <span class="preprocessor">#ifndef HAVE_GETMNTINFO</span>
<a name="l01308"></a>01308 <span class="preprocessor"></span>
<a name="l01309"></a>01309 <span class="preprocessor">#ifdef _PATH_MOUNTED</span>
<a name="l01310"></a>01310 <span class="preprocessor"></span><span class="comment">// On some Linux, MNTTAB points to /etc/fstab !</span>
<a name="l01311"></a>01311 <span class="preprocessor"># undef MNTTAB</span>
<a name="l01312"></a>01312 <span class="preprocessor"></span><span class="preprocessor"># define MNTTAB _PATH_MOUNTED</span>
<a name="l01313"></a>01313 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l01314"></a>01314 <span class="preprocessor"></span><span class="preprocessor"># ifndef MNTTAB</span>
<a name="l01315"></a>01315 <span class="preprocessor"></span><span class="preprocessor">#  ifdef MTAB_FILE</span>
<a name="l01316"></a>01316 <span class="preprocessor"></span><span class="preprocessor">#   define MNTTAB MTAB_FILE</span>
<a name="l01317"></a>01317 <span class="preprocessor"></span><span class="preprocessor">#  else</span>
<a name="l01318"></a>01318 <span class="preprocessor"></span><span class="preprocessor">#   define MNTTAB &quot;/etc/mnttab&quot;</span>
<a name="l01319"></a>01319 <span class="preprocessor"></span><span class="preprocessor">#  endif</span>
<a name="l01320"></a>01320 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
<a name="l01321"></a>01321 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l01322"></a>01322 <span class="preprocessor"></span>
<a name="l01323"></a>01323 <span class="preprocessor">#ifndef FSTAB</span>
<a name="l01324"></a>01324 <span class="preprocessor"></span><span class="preprocessor"># ifdef _PATH_FSTAB</span>
<a name="l01325"></a>01325 <span class="preprocessor"></span><span class="preprocessor">#  define FSTAB _PATH_FSTAB</span>
<a name="l01326"></a>01326 <span class="preprocessor"></span><span class="preprocessor"># else</span>
<a name="l01327"></a>01327 <span class="preprocessor"></span><span class="preprocessor">#  define FSTAB &quot;/etc/fstab&quot;</span>
<a name="l01328"></a>01328 <span class="preprocessor"></span><span class="preprocessor"># endif</span>
<a name="l01329"></a>01329 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l01330"></a>01330 <span class="preprocessor"></span>
<a name="l01331"></a>01331 <span class="preprocessor">#ifdef __CYGWIN__                </span>
<a name="l01332"></a>01332 <span class="preprocessor"></span><span class="preprocessor">#define hasmntopt(var,opt) (0)   </span>
<a name="l01333"></a>01333 <span class="preprocessor"></span><span class="preprocessor">#endif                           </span>
<a name="l01334"></a>01334 <span class="preprocessor"></span>                                 
<a name="l01335"></a>01335 <span class="comment">// There are (at least) four kind of APIs:</span>
<a name="l01336"></a>01336 <span class="comment">// setmntent + getmntent + struct mntent (linux...)</span>
<a name="l01337"></a>01337 <span class="comment">//             getmntent + struct mnttab</span>
<a name="l01338"></a>01338 <span class="comment">// mntctl                + struct vmount (AIX)</span>
<a name="l01339"></a>01339 <span class="comment">// getmntinfo + struct statfs&amp;flags (BSD 4.4 and friends)</span>
<a name="l01340"></a>01340 <span class="comment">// getfsent + char* (BSD 4.3 and friends)</span>
<a name="l01341"></a>01341 
<a name="l01342"></a>01342 <span class="preprocessor">#ifdef HAVE_SETMNTENT</span>
<a name="l01343"></a>01343 <span class="preprocessor"></span><span class="preprocessor">#define SETMNTENT setmntent</span>
<a name="l01344"></a>01344 <span class="preprocessor"></span><span class="preprocessor">#define ENDMNTENT endmntent</span>
<a name="l01345"></a>01345 <span class="preprocessor"></span><span class="preprocessor">#define STRUCT_MNTENT struct mntent *</span>
<a name="l01346"></a>01346 <span class="preprocessor"></span><span class="preprocessor">#define STRUCT_SETMNTENT FILE *</span>
<a name="l01347"></a>01347 <span class="preprocessor"></span><span class="preprocessor">#define GETMNTENT(file, var) ((var = getmntent(file)) != 0)</span>
<a name="l01348"></a>01348 <span class="preprocessor"></span><span class="preprocessor">#define MOUNTPOINT(var) var-&gt;mnt_dir</span>
<a name="l01349"></a>01349 <span class="preprocessor"></span><span class="preprocessor">#define MOUNTTYPE(var) var-&gt;mnt_type</span>
<a name="l01350"></a>01350 <span class="preprocessor"></span><span class="preprocessor">#define HASMNTOPT(var, opt) hasmntopt(var, opt)</span>
<a name="l01351"></a>01351 <span class="preprocessor"></span><span class="preprocessor">#define FSNAME(var) var-&gt;mnt_fsname</span>
<a name="l01352"></a>01352 <span class="preprocessor"></span><span class="preprocessor">#elif defined(_AIX)</span>
<a name="l01353"></a>01353 <span class="preprocessor"></span><span class="comment">/* we don&#39;t need this stuff */</span>
<a name="l01354"></a>01354 <span class="preprocessor">#else</span>
<a name="l01355"></a>01355 <span class="preprocessor"></span><span class="preprocessor">#define SETMNTENT fopen</span>
<a name="l01356"></a>01356 <span class="preprocessor"></span><span class="preprocessor">#define ENDMNTENT fclose</span>
<a name="l01357"></a>01357 <span class="preprocessor"></span><span class="preprocessor">#define STRUCT_MNTENT struct mnttab</span>
<a name="l01358"></a>01358 <span class="preprocessor"></span><span class="preprocessor">#define STRUCT_SETMNTENT FILE *</span>
<a name="l01359"></a>01359 <span class="preprocessor"></span><span class="preprocessor">#define GETMNTENT(file, var) (getmntent(file, &amp;var) == 0)</span>
<a name="l01360"></a>01360 <span class="preprocessor"></span><span class="preprocessor">#define MOUNTPOINT(var) var.mnt_mountp</span>
<a name="l01361"></a>01361 <span class="preprocessor"></span><span class="preprocessor">#define MOUNTTYPE(var) var.mnt_fstype</span>
<a name="l01362"></a>01362 <span class="preprocessor"></span><span class="preprocessor">#define HASMNTOPT(var, opt) hasmntopt(&amp;var, opt)</span>
<a name="l01363"></a>01363 <span class="preprocessor"></span><span class="preprocessor">#define FSNAME(var) var.mnt_special</span>
<a name="l01364"></a>01364 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l01365"></a>01365 <span class="preprocessor"></span>
<a name="l01366"></a>01366 <span class="preprocessor">#endif </span><span class="comment">/* HAVE_GETMNTINFO */</span>
<a name="l01367"></a>01367 
<a name="l01368"></a><a class="code" href="namespaceKIO.html#af425927b2894a7bd5c5b890d2508edd2">01368</a> <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#af425927b2894a7bd5c5b890d2508edd2" title="Returns the mount point where device is mounted right now.">KIO::findDeviceMountPoint</a>( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; filename )
<a name="l01369"></a>01369 {
<a name="l01370"></a>01370     <a class="codeRef" href="qstring.html">QString</a> result;
<a name="l01371"></a>01371 
<a name="l01372"></a>01372 <span class="preprocessor">#ifdef HAVE_VOLMGT</span>
<a name="l01373"></a>01373 <span class="preprocessor"></span>    <span class="comment">/*</span>
<a name="l01374"></a>01374 <span class="comment">     *  support for Solaris volume management</span>
<a name="l01375"></a>01375 <span class="comment">     */</span>
<a name="l01376"></a>01376     <span class="keyword">const</span> <span class="keywordtype">char</span> *volpath;
<a name="l01377"></a>01377     FILE *mnttab;
<a name="l01378"></a>01378     <span class="keyword">struct </span>mnttab mnt;
<a name="l01379"></a>01379     <span class="keywordtype">int</span> len;
<a name="l01380"></a>01380     <a class="codeRef" href="qcstring.html">QCString</a> devname;
<a name="l01381"></a>01381 
<a name="l01382"></a>01382     <span class="keywordflow">if</span>( (volpath = volmgt_root()) == NULL ) {
<a name="l01383"></a>01383         kdDebug( 7007 ) &lt;&lt; <span class="stringliteral">&quot;findDeviceMountPoint: &quot;</span>
<a name="l01384"></a>01384             &lt;&lt; <span class="stringliteral">&quot;VOLMGT: can&#39;t find volmgt root dir&quot;</span> &lt;&lt; endl;
<a name="l01385"></a>01385         <span class="keywordflow">return</span> QString::null;
<a name="l01386"></a>01386     }
<a name="l01387"></a>01387 
<a name="l01388"></a>01388     <span class="keywordflow">if</span>( (mnttab = fopen( MNTTAB, <span class="stringliteral">&quot;r&quot;</span> )) == NULL ) {
<a name="l01389"></a>01389         kdDebug( 7007 ) &lt;&lt; <span class="stringliteral">&quot;findDeviceMountPoint: &quot;</span>
<a name="l01390"></a>01390             &lt;&lt; <span class="stringliteral">&quot;VOLMGT: can&#39;t open mnttab&quot;</span> &lt;&lt; endl;
<a name="l01391"></a>01391         <span class="keywordflow">return</span> QString::null;
<a name="l01392"></a>01392     }
<a name="l01393"></a>01393 
<a name="l01394"></a>01394     devname = volpath;
<a name="l01395"></a>01395     devname += <a class="codeRef" href="qfile.html#encodeName">QFile::encodeName</a>( filename );
<a name="l01396"></a>01396     devname += <span class="charliteral">&#39;/&#39;</span>;
<a name="l01397"></a>01397     len = devname.<a class="codeRef" href="qcstring.html#length">length</a>();
<a name="l01398"></a>01398 <span class="comment">//  kdDebug( 7007 ) &lt;&lt; &quot;findDeviceMountPoint: &quot;</span>
<a name="l01399"></a>01399 <span class="comment">//      &lt;&lt; &quot;VOLMGT: searching mountpoint for \&quot;&quot; &lt;&lt; devname &lt;&lt; &quot;\&quot;&quot;</span>
<a name="l01400"></a>01400 <span class="comment">//      &lt;&lt; endl;</span>
<a name="l01401"></a>01401 
<a name="l01402"></a>01402     <span class="comment">/*</span>
<a name="l01403"></a>01403 <span class="comment">     *  find the mountpoint</span>
<a name="l01404"></a>01404 <span class="comment">     *  floppies:</span>
<a name="l01405"></a>01405 <span class="comment">     *  /dev/disketteN    =&gt; &lt;volpath&gt;/dev/disketteN</span>
<a name="l01406"></a>01406 <span class="comment">     *  CDROM, ZIP, and other media:</span>
<a name="l01407"></a>01407 <span class="comment">     *  /dev/dsk/cXtYdZs2 =&gt; &lt;volpath&gt;/dev/dsk/cXtYdZ  (without slice#)</span>
<a name="l01408"></a>01408 <span class="comment">     */</span>
<a name="l01409"></a>01409     rewind( mnttab );
<a name="l01410"></a>01410     result = QString::null;
<a name="l01411"></a>01411     <span class="keywordflow">while</span>( getmntent( mnttab, &amp;mnt ) == 0 ) {
<a name="l01412"></a>01412         <span class="comment">/*</span>
<a name="l01413"></a>01413 <span class="comment">         *  either match the exact device name (floppies),</span>
<a name="l01414"></a>01414 <span class="comment">         *  or the device name without the slice#</span>
<a name="l01415"></a>01415 <span class="comment">         */</span>
<a name="l01416"></a>01416         <span class="keywordflow">if</span>( strncmp( devname.data(), mnt.mnt_special, len ) == 0
<a name="l01417"></a>01417             || (strncmp( devname.data(), mnt.mnt_special, len - 3 ) == 0
<a name="l01418"></a>01418                 &amp;&amp; mnt.mnt_special[len - 3] == <span class="charliteral">&#39;/&#39;</span> )
<a name="l01419"></a>01419             || (strcmp(<a class="codeRef" href="qfile.html#encodeName">QFile::encodeName</a>(filename).data()
<a name="l01420"></a>01420                     , mnt.mnt_special)==0)) {
<a name="l01421"></a>01421             result = mnt.mnt_mountp;
<a name="l01422"></a>01422             <span class="keywordflow">break</span>;
<a name="l01423"></a>01423         }
<a name="l01424"></a>01424     }
<a name="l01425"></a>01425     fclose( mnttab );
<a name="l01426"></a>01426 <span class="preprocessor">#else</span>
<a name="l01427"></a>01427 <span class="preprocessor"></span>
<a name="l01428"></a>01428     <span class="keywordtype">char</span>    realpath_buffer[MAXPATHLEN];
<a name="l01429"></a>01429     <a class="codeRef" href="qcstring.html">QCString</a> realname;
<a name="l01430"></a>01430 
<a name="l01431"></a>01431     realname = <a class="codeRef" href="qfile.html#encodeName">QFile::encodeName</a>(filename);
<a name="l01432"></a>01432     <span class="comment">/* If the path contains symlinks, get the real name */</span>
<a name="l01433"></a>01433     <span class="keywordflow">if</span> (realpath(realname, realpath_buffer) != 0)
<a name="l01434"></a>01434       <span class="comment">// succes, use result from realpath</span>
<a name="l01435"></a>01435       realname = realpath_buffer;
<a name="l01436"></a>01436 
<a name="l01437"></a>01437     <span class="comment">//kdDebug(7007) &lt;&lt; &quot;findDeviceMountPoint realname=&quot; &lt;&lt; realname &lt;&lt; endl;</span>
<a name="l01438"></a>01438 
<a name="l01439"></a>01439 <span class="preprocessor">#ifdef HAVE_GETMNTINFO</span>
<a name="l01440"></a>01440 <span class="preprocessor"></span>
<a name="l01441"></a>01441 <span class="preprocessor">#ifdef GETMNTINFO_USES_STATVFS</span>
<a name="l01442"></a>01442 <span class="preprocessor"></span>    <span class="keyword">struct </span>statvfs *mounted;
<a name="l01443"></a>01443 <span class="preprocessor">#else</span>
<a name="l01444"></a>01444 <span class="preprocessor"></span>    <span class="keyword">struct </span>statfs *mounted;
<a name="l01445"></a>01445 <span class="preprocessor">#endif</span>
<a name="l01446"></a>01446 <span class="preprocessor"></span>
<a name="l01447"></a>01447     <span class="keywordtype">int</span> num_fs = getmntinfo(&amp;mounted, MNT_NOWAIT);
<a name="l01448"></a>01448 
<a name="l01449"></a>01449     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0;i&lt;num_fs;i++) {
<a name="l01450"></a>01450 
<a name="l01451"></a>01451         <a class="codeRef" href="qcstring.html">QCString</a> device_name = mounted[i].f_mntfromname;
<a name="l01452"></a>01452 
<a name="l01453"></a>01453         <span class="comment">// If the path contains symlinks, get</span>
<a name="l01454"></a>01454         <span class="comment">// the real name</span>
<a name="l01455"></a>01455         <span class="keywordflow">if</span> (realpath(device_name, realpath_buffer) != 0)
<a name="l01456"></a>01456             <span class="comment">// succes, use result from realpath</span>
<a name="l01457"></a>01457             device_name = realpath_buffer;
<a name="l01458"></a>01458 
<a name="l01459"></a>01459         <span class="keywordflow">if</span> (realname == device_name) {
<a name="l01460"></a>01460             result = mounted[i].f_mntonname;
<a name="l01461"></a>01461             <span class="keywordflow">break</span>;
<a name="l01462"></a>01462         }
<a name="l01463"></a>01463     }
<a name="l01464"></a>01464 
<a name="l01465"></a>01465 <span class="preprocessor">#elif defined(_AIX)</span>
<a name="l01466"></a>01466 <span class="preprocessor"></span>
<a name="l01467"></a>01467     <span class="keyword">struct </span>vmount *mntctl_buffer;
<a name="l01468"></a>01468     <span class="keyword">struct </span>vmount *vm;
<a name="l01469"></a>01469     <span class="keywordtype">char</span> *mountedfrom;
<a name="l01470"></a>01470     <span class="keywordtype">char</span> *mountedto;
<a name="l01471"></a>01471     <span class="keywordtype">int</span> fsname_len, num;
<a name="l01472"></a>01472     <span class="keywordtype">int</span> buf_sz = 4096;
<a name="l01473"></a>01473 
<a name="l01474"></a>01474     <span class="comment">/* mntctl can be used to query mounted file systems.</span>
<a name="l01475"></a>01475 <span class="comment">     * mntctl takes only the command MCTL_QUERY so far.</span>
<a name="l01476"></a>01476 <span class="comment">     * The buffer is filled with an array of vmount structures, but these</span>
<a name="l01477"></a>01477 <span class="comment">     * vmount structures have variable size.</span>
<a name="l01478"></a>01478 <span class="comment">     * mntctl return values:</span>
<a name="l01479"></a>01479 <span class="comment">     * -1 error</span>
<a name="l01480"></a>01480 <span class="comment">     *  0 look in first word of buffer for required bytes, 4096 may be</span>
<a name="l01481"></a>01481 <span class="comment">     *    a good starting size, but if tables grow too large, look here.</span>
<a name="l01482"></a>01482 <span class="comment">     * &gt;0 number of vmount structures</span>
<a name="l01483"></a>01483 <span class="comment">     */</span>
<a name="l01484"></a>01484     mntctl_buffer = (<span class="keyword">struct </span>vmount*)malloc(buf_sz);
<a name="l01485"></a>01485     num = mntctl(MCTL_QUERY, buf_sz, mntctl_buffer);
<a name="l01486"></a>01486     <span class="keywordflow">if</span> (num == 0)
<a name="l01487"></a>01487     {
<a name="l01488"></a>01488     buf_sz = *(<span class="keywordtype">int</span>*)mntctl_buffer;
<a name="l01489"></a>01489     free(mntctl_buffer);
<a name="l01490"></a>01490     mntctl_buffer = (<span class="keyword">struct </span>vmount*)malloc(buf_sz);
<a name="l01491"></a>01491     num = mntctl(MCTL_QUERY, buf_sz, mntctl_buffer);
<a name="l01492"></a>01492     }
<a name="l01493"></a>01493 
<a name="l01494"></a>01494     <span class="keywordflow">if</span> (num &gt; 0)
<a name="l01495"></a>01495     {
<a name="l01496"></a>01496         <span class="comment">/* iterate through items in the vmount structure: */</span>
<a name="l01497"></a>01497         vm = mntctl_buffer;
<a name="l01498"></a>01498         <span class="keywordflow">for</span> ( ; num &gt; 0; num-- )
<a name="l01499"></a>01499         {
<a name="l01500"></a>01500             <span class="comment">/* get the name of the mounted file systems: */</span>
<a name="l01501"></a>01501             fsname_len = vmt2datasize(vm, VMT_STUB);
<a name="l01502"></a>01502             mountedto     = (<span class="keywordtype">char</span>*)malloc(fsname_len + 1);
<a name="l01503"></a>01503         mountedto[fsname_len] = <span class="charliteral">&#39;\0&#39;</span>;
<a name="l01504"></a>01504             strncpy(mountedto, (<span class="keywordtype">char</span> *)vmt2dataptr(vm, VMT_STUB), fsname_len);
<a name="l01505"></a>01505 
<a name="l01506"></a>01506             <span class="comment">/* get the mount-from information: */</span>
<a name="l01507"></a>01507             fsname_len = vmt2datasize(vm, VMT_OBJECT);
<a name="l01508"></a>01508             mountedfrom     = (<span class="keywordtype">char</span>*)malloc(fsname_len + 1);
<a name="l01509"></a>01509         mountedfrom[fsname_len] = <span class="charliteral">&#39;\0&#39;</span>;
<a name="l01510"></a>01510             strncpy(mountedfrom, (<span class="keywordtype">char</span> *)vmt2dataptr(vm, VMT_OBJECT), fsname_len);
<a name="l01511"></a>01511 
<a name="l01512"></a>01512             <a class="codeRef" href="qcstring.html">QCString</a> device_name = mountedfrom;
<a name="l01513"></a>01513 
<a name="l01514"></a>01514             <span class="keywordflow">if</span> (realpath(device_name, realpath_buffer) != 0)
<a name="l01515"></a>01515                 <span class="comment">// success, use result from realpath</span>
<a name="l01516"></a>01516                 device_name = realpath_buffer;
<a name="l01517"></a>01517 
<a name="l01518"></a>01518             free(mountedfrom);
<a name="l01519"></a>01519 
<a name="l01520"></a>01520             <span class="keywordflow">if</span> (realname == device_name) {
<a name="l01521"></a>01521                 result = mountedto;
<a name="l01522"></a>01522                 free(mountedto);
<a name="l01523"></a>01523                 <span class="keywordflow">break</span>;
<a name="l01524"></a>01524             }
<a name="l01525"></a>01525 
<a name="l01526"></a>01526             free(mountedto);
<a name="l01527"></a>01527 
<a name="l01528"></a>01528             <span class="comment">/* goto the next vmount structure: */</span>
<a name="l01529"></a>01529             vm = (<span class="keyword">struct </span>vmount *)((<span class="keywordtype">char</span> *)vm + vm-&gt;vmt_length);
<a name="l01530"></a>01530         }
<a name="l01531"></a>01531     }
<a name="l01532"></a>01532 
<a name="l01533"></a>01533     free( mntctl_buffer );
<a name="l01534"></a>01534 
<a name="l01535"></a>01535 <span class="preprocessor">#else</span>
<a name="l01536"></a>01536 <span class="preprocessor"></span>
<a name="l01537"></a>01537     STRUCT_SETMNTENT mtab;
<a name="l01538"></a>01538 
<a name="l01539"></a>01539     <span class="comment">/* Get the list of mounted file systems */</span>
<a name="l01540"></a>01540 
<a name="l01541"></a>01541     <span class="keywordflow">if</span> ((mtab = SETMNTENT(MNTTAB, <span class="stringliteral">&quot;r&quot;</span>)) == 0) {
<a name="l01542"></a>01542         perror(<span class="stringliteral">&quot;setmntent&quot;</span>);
<a name="l01543"></a>01543         <span class="keywordflow">return</span> QString::null;
<a name="l01544"></a>01544     }
<a name="l01545"></a>01545 
<a name="l01546"></a>01546     <span class="comment">/* Loop over all file systems and see if we can find our</span>
<a name="l01547"></a>01547 <span class="comment">     * mount point.</span>
<a name="l01548"></a>01548 <span class="comment">     * Note that this is the mount point with the longest match.</span>
<a name="l01549"></a>01549 <span class="comment">     * XXX: Fails if me-&gt;mnt_dir is not a realpath but goes</span>
<a name="l01550"></a>01550 <span class="comment">     * through a symlink, e.g. /foo/bar where /foo is a symlink</span>
<a name="l01551"></a>01551 <span class="comment">     * pointing to /local/foo.</span>
<a name="l01552"></a>01552 <span class="comment">     *</span>
<a name="l01553"></a>01553 <span class="comment">     * How kinky can you get with a filesystem?</span>
<a name="l01554"></a>01554 <span class="comment">     */</span>
<a name="l01555"></a>01555 
<a name="l01556"></a>01556     STRUCT_MNTENT me;
<a name="l01557"></a>01557 
<a name="l01558"></a>01558     <span class="keywordflow">while</span> (GETMNTENT(mtab, me))
<a name="l01559"></a>01559     {
<a name="l01560"></a>01560       <span class="comment">// There may be symbolic links into the /etc/mnttab</span>
<a name="l01561"></a>01561       <span class="comment">// So we have to find the real device name here as well!</span>
<a name="l01562"></a>01562       <a class="codeRef" href="qcstring.html">QCString</a> device_name = FSNAME(me);
<a name="l01563"></a>01563       <span class="keywordflow">if</span> (device_name.<a class="codeRef" href="qcstring.html#isEmpty">isEmpty</a>() || (device_name == <span class="stringliteral">&quot;none&quot;</span>))
<a name="l01564"></a>01564          <span class="keywordflow">continue</span>;
<a name="l01565"></a>01565 
<a name="l01566"></a>01566       <span class="comment">//kdDebug( 7007 ) &lt;&lt; &quot;device_name=&quot; &lt;&lt; device_name &lt;&lt; endl;</span>
<a name="l01567"></a>01567 
<a name="l01568"></a>01568       <span class="comment">// If the path contains symlinks, get</span>
<a name="l01569"></a>01569       <span class="comment">// the real name</span>
<a name="l01570"></a>01570       <span class="keywordflow">if</span> (realpath(device_name, realpath_buffer) != 0)
<a name="l01571"></a>01571           <span class="comment">// succes, use result from realpath</span>
<a name="l01572"></a>01572          device_name = realpath_buffer;
<a name="l01573"></a>01573 
<a name="l01574"></a>01574       <span class="comment">//kdDebug( 7007 ) &lt;&lt; &quot;device_name after realpath =&quot; &lt;&lt; device_name &lt;&lt; endl;</span>
<a name="l01575"></a>01575 
<a name="l01576"></a>01576       <span class="keywordflow">if</span> (realname == device_name)
<a name="l01577"></a>01577       {
<a name="l01578"></a>01578           result = MOUNTPOINT(me);
<a name="l01579"></a>01579           <span class="keywordflow">break</span>;
<a name="l01580"></a>01580       }
<a name="l01581"></a>01581     }
<a name="l01582"></a>01582 
<a name="l01583"></a>01583     ENDMNTENT(mtab);
<a name="l01584"></a>01584 
<a name="l01585"></a>01585 <span class="preprocessor">#endif </span><span class="comment">/* GET_MNTINFO */</span>
<a name="l01586"></a>01586 <span class="preprocessor">#endif </span><span class="comment">/* HAVE_VOLMGT */</span>
<a name="l01587"></a>01587 
<a name="l01588"></a>01588     <span class="comment">//kdDebug( 7007 ) &lt;&lt; &quot;Returning result &quot; &lt;&lt; result &lt;&lt; endl;</span>
<a name="l01589"></a>01589     <span class="keywordflow">return</span> result;
<a name="l01590"></a>01590 }
<a name="l01591"></a>01591 
<a name="l01592"></a>01592 <span class="comment">// Don&#39;t just trust the return value, keep iterating to check for a better match (bigger max)</span>
<a name="l01593"></a>01593 <span class="keyword">static</span> <span class="keywordtype">bool</span> is_my_mountpoint( <span class="keyword">const</span> <span class="keywordtype">char</span> *mountpoint, <span class="keyword">const</span> <span class="keywordtype">char</span> *realname, <span class="keywordtype">int</span> &amp;max )
<a name="l01594"></a>01594 {
<a name="l01595"></a>01595     <span class="keywordtype">int</span> length = strlen(mountpoint);
<a name="l01596"></a>01596 
<a name="l01597"></a>01597     <span class="keywordflow">if</span> (!strncmp(mountpoint, realname, length)
<a name="l01598"></a>01598         &amp;&amp; length &gt; max) {
<a name="l01599"></a>01599         max = length;
<a name="l01600"></a>01600         <span class="keywordflow">if</span> (length == 1 || realname[length] == <span class="charliteral">&#39;/&#39;</span> || realname[length] == <span class="charliteral">&#39;\0&#39;</span>)
<a name="l01601"></a>01601             <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l01602"></a>01602     }
<a name="l01603"></a>01603     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01604"></a>01604 }
<a name="l01605"></a>01605 
<a name="l01606"></a>01606 <span class="keyword">typedef</span> <span class="keyword">enum</span> { Unseen, Right, Wrong } MountState;
<a name="l01607"></a>01607 
<a name="l01611"></a>01611 <span class="keyword">static</span> <span class="keywordtype">void</span> check_mount_point(<span class="keyword">const</span> <span class="keywordtype">char</span> *mounttype,
<a name="l01612"></a>01612                               <span class="keyword">const</span> <span class="keywordtype">char</span> *fsname,
<a name="l01613"></a>01613                               MountState &amp;isslow, MountState &amp;isautofs)
<a name="l01614"></a>01614 {
<a name="l01615"></a>01615     <span class="keywordtype">bool</span> nfs = !strcmp(mounttype, <span class="stringliteral">&quot;nfs&quot;</span>);
<a name="l01616"></a>01616     <span class="keywordtype">bool</span> autofs = !strcmp(mounttype, <span class="stringliteral">&quot;autofs&quot;</span>) || !strcmp(mounttype,<span class="stringliteral">&quot;subfs&quot;</span>);
<a name="l01617"></a>01617     <span class="keywordtype">bool</span> pid = (strstr(fsname, <span class="stringliteral">&quot;:(pid&quot;</span>) != 0);
<a name="l01618"></a>01618 
<a name="l01619"></a>01619     <span class="keywordflow">if</span> (nfs &amp;&amp; !pid)
<a name="l01620"></a>01620         isslow = Right;
<a name="l01621"></a>01621     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (isslow == Right)
<a name="l01622"></a>01622         isslow = Wrong;
<a name="l01623"></a>01623 
<a name="l01624"></a>01624     <span class="comment">/* Does this look like automounted? */</span>
<a name="l01625"></a>01625     <span class="keywordflow">if</span> (autofs || (nfs &amp;&amp; pid)) {
<a name="l01626"></a>01626         isautofs = Right;
<a name="l01627"></a>01627         isslow = Right;
<a name="l01628"></a>01628     }
<a name="l01629"></a>01629 }
<a name="l01630"></a>01630 
<a name="l01631"></a>01631 <span class="comment">// returns the mount point, checks the mount state.</span>
<a name="l01632"></a>01632 <span class="comment">// if ismanual == Wrong this function does not check the manual mount state</span>
<a name="l01633"></a>01633 <span class="keyword">static</span> <a class="codeRef" href="qstring.html">QString</a> get_mount_info(<span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; filename,
<a name="l01634"></a>01634     MountState&amp; isautofs, MountState&amp; isslow, MountState&amp; ismanual,
<a name="l01635"></a>01635     <a class="codeRef" href="qstring.html">QString</a>&amp; fstype)
<a name="l01636"></a>01636 {
<a name="l01637"></a>01637     <span class="keyword">static</span> <span class="keywordtype">bool</span> gotRoot = <span class="keyword">false</span>;
<a name="l01638"></a>01638     <span class="keyword">static</span> dev_t rootDevice;
<a name="l01639"></a>01639 
<a name="l01640"></a>01640     <span class="keyword">struct </span>cachedDevice_t
<a name="l01641"></a>01641     {
<a name="l01642"></a>01642        dev_t device;
<a name="l01643"></a>01643        <a class="codeRef" href="qstring.html">QString</a> mountPoint;
<a name="l01644"></a>01644        MountState isautofs;
<a name="l01645"></a>01645        MountState isslow;
<a name="l01646"></a>01646        MountState ismanual;
<a name="l01647"></a>01647        <a class="codeRef" href="qstring.html">QString</a> fstype;
<a name="l01648"></a>01648     };
<a name="l01649"></a>01649     <span class="keyword">static</span> <span class="keyword">struct </span>cachedDevice_t *cachedDevice = 0;
<a name="l01650"></a>01650 
<a name="l01651"></a>01651     <span class="keywordflow">if</span> (!gotRoot)
<a name="l01652"></a>01652     {
<a name="l01653"></a>01653        KDE_struct_stat stat_buf;
<a name="l01654"></a>01654        KDE_stat(<span class="stringliteral">&quot;/&quot;</span>, &amp;stat_buf);
<a name="l01655"></a>01655        gotRoot = <span class="keyword">true</span>;
<a name="l01656"></a>01656        rootDevice = stat_buf.st_dev;
<a name="l01657"></a>01657     }
<a name="l01658"></a>01658 
<a name="l01659"></a>01659     <span class="keywordtype">bool</span> gotDevice = <span class="keyword">false</span>;
<a name="l01660"></a>01660     KDE_struct_stat stat_buf;
<a name="l01661"></a>01661     <span class="keywordflow">if</span> (KDE_stat(<a class="codeRef" href="qfile.html#encodeName">QFile::encodeName</a>(filename), &amp;stat_buf) == 0)
<a name="l01662"></a>01662     {
<a name="l01663"></a>01663        gotDevice = <span class="keyword">true</span>;
<a name="l01664"></a>01664        <span class="keywordflow">if</span> (stat_buf.st_dev == rootDevice)
<a name="l01665"></a>01665        {
<a name="l01666"></a>01666           <span class="keyword">static</span> <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp;root = KGlobal::staticQString(<span class="stringliteral">&quot;/&quot;</span>);
<a name="l01667"></a>01667           isautofs = Wrong;
<a name="l01668"></a>01668           isslow = Wrong;
<a name="l01669"></a>01669           ismanual = Wrong;
<a name="l01670"></a>01670           fstype = QString::null; <span class="comment">// ### do we need it?</span>
<a name="l01671"></a>01671           <span class="keywordflow">return</span> root;
<a name="l01672"></a>01672        }
<a name="l01673"></a>01673        <span class="keywordflow">if</span> (cachedDevice &amp;&amp; (stat_buf.st_dev == cachedDevice-&gt;device))
<a name="l01674"></a>01674        {
<a name="l01675"></a>01675           <span class="keywordtype">bool</span> interestedInIsManual = ismanual != Wrong;
<a name="l01676"></a>01676           isautofs = cachedDevice-&gt;isautofs;
<a name="l01677"></a>01677           isslow = cachedDevice-&gt;isslow;
<a name="l01678"></a>01678           ismanual = cachedDevice-&gt;ismanual;
<a name="l01679"></a>01679           fstype = cachedDevice-&gt;fstype;
<a name="l01680"></a>01680           <span class="comment">// Don&#39;t use the cache if it doesn&#39;t have the information we&#39;re looking for</span>
<a name="l01681"></a>01681           <span class="keywordflow">if</span> ( !interestedInIsManual || ismanual != Unseen )
<a name="l01682"></a>01682               <span class="keywordflow">return</span> cachedDevice-&gt;mountPoint;
<a name="l01683"></a>01683        }
<a name="l01684"></a>01684     }
<a name="l01685"></a>01685 
<a name="l01686"></a>01686     <span class="keywordtype">char</span> realname[MAXPATHLEN];
<a name="l01687"></a>01687 
<a name="l01688"></a>01688     memset(realname, 0, MAXPATHLEN);
<a name="l01689"></a>01689 
<a name="l01690"></a>01690     <span class="comment">/* If the path contains symlinks, get the real name */</span>
<a name="l01691"></a>01691     <span class="keywordflow">if</span> (realpath(<a class="codeRef" href="qfile.html#encodeName">QFile::encodeName</a>(filename), realname) == 0) {
<a name="l01692"></a>01692         <span class="keywordflow">if</span>( strlcpy(realname, <a class="codeRef" href="qfile.html#encodeName">QFile::encodeName</a>(filename), MAXPATHLEN)&gt;=MAXPATHLEN)
<a name="l01693"></a>01693             <span class="keywordflow">return</span> QString::null;
<a name="l01694"></a>01694     }
<a name="l01695"></a>01695 
<a name="l01696"></a>01696     <span class="keywordtype">int</span> max = 0;
<a name="l01697"></a>01697     <a class="codeRef" href="qstring.html">QString</a> mountPoint;
<a name="l01698"></a>01698 
<a name="l01699"></a>01699     <span class="comment">/* Loop over all file systems and see if we can find our</span>
<a name="l01700"></a>01700 <span class="comment">     * mount point.</span>
<a name="l01701"></a>01701 <span class="comment">     * Note that this is the mount point with the longest match.</span>
<a name="l01702"></a>01702 <span class="comment">     * XXX: Fails if me-&gt;mnt_dir is not a realpath but goes</span>
<a name="l01703"></a>01703 <span class="comment">     * through a symlink, e.g. /foo/bar where /foo is a symlink</span>
<a name="l01704"></a>01704 <span class="comment">     * pointing to /local/foo.</span>
<a name="l01705"></a>01705 <span class="comment">     *</span>
<a name="l01706"></a>01706 <span class="comment">     * How kinky can you get with a filesystem?</span>
<a name="l01707"></a>01707 <span class="comment">     */</span>
<a name="l01708"></a>01708 
<a name="l01709"></a>01709 <span class="preprocessor">#ifdef HAVE_GETMNTINFO</span>
<a name="l01710"></a>01710 <span class="preprocessor"></span>
<a name="l01711"></a>01711 <span class="preprocessor">#ifdef GETMNTINFO_USES_STATVFS</span>
<a name="l01712"></a>01712 <span class="preprocessor"></span>    <span class="keyword">struct </span>statvfs *mounted;
<a name="l01713"></a>01713 <span class="preprocessor">#else</span>
<a name="l01714"></a>01714 <span class="preprocessor"></span>    <span class="keyword">struct </span>statfs *mounted;
<a name="l01715"></a>01715 <span class="preprocessor">#endif</span>
<a name="l01716"></a>01716 <span class="preprocessor"></span>
<a name="l01717"></a>01717     <span class="keywordtype">char</span>    realpath_buffer[MAXPATHLEN];
<a name="l01718"></a>01718 
<a name="l01719"></a>01719     <span class="keywordtype">int</span> num_fs = getmntinfo(&amp;mounted, MNT_NOWAIT);
<a name="l01720"></a>01720 
<a name="l01721"></a>01721     <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0;i&lt;num_fs;i++) {
<a name="l01722"></a>01722 
<a name="l01723"></a>01723         <a class="codeRef" href="qcstring.html">QCString</a> device_name = mounted[i].f_mntfromname;
<a name="l01724"></a>01724 
<a name="l01725"></a>01725         <span class="comment">// If the path contains symlinks, get</span>
<a name="l01726"></a>01726         <span class="comment">// the real name</span>
<a name="l01727"></a>01727         <span class="keywordflow">if</span> (realpath(device_name, realpath_buffer) != 0)
<a name="l01728"></a>01728             <span class="comment">// succes, use result from realpath</span>
<a name="l01729"></a>01729             device_name = realpath_buffer;
<a name="l01730"></a>01730 <span class="preprocessor">#ifdef __osf__</span>
<a name="l01731"></a>01731 <span class="preprocessor"></span>        <span class="keywordtype">char</span> * mounttype = mnt_names[mounted[i].f_type];
<a name="l01732"></a>01732 <span class="preprocessor">#else</span>
<a name="l01733"></a>01733 <span class="preprocessor"></span>        <span class="keywordtype">char</span> * mounttype = mounted[i].f_fstypename;
<a name="l01734"></a>01734 <span class="preprocessor">#endif</span>
<a name="l01735"></a>01735 <span class="preprocessor"></span>        <span class="keywordflow">if</span> ( is_my_mountpoint( mounted[i].f_mntonname, realname, max ) )
<a name="l01736"></a>01736         {
<a name="l01737"></a>01737             mountPoint = <a class="codeRef" href="qfile.html#decodeName">QFile::decodeName</a>(mounted[i].f_mntonname);
<a name="l01738"></a>01738             fstype = <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(mounttype);
<a name="l01739"></a>01739             check_mount_point( mounttype, mounted[i].f_mntfromname,
<a name="l01740"></a>01740                                isautofs, isslow );
<a name="l01741"></a>01741             <span class="comment">// keep going, looking for a potentially better one</span>
<a name="l01742"></a>01742 
<a name="l01743"></a>01743             <span class="keywordflow">if</span> (ismanual == Unseen)
<a name="l01744"></a>01744             {
<a name="l01745"></a>01745                 <span class="keyword">struct </span>fstab *ft = getfsfile(mounted[i].f_mntonname);
<a name="l01746"></a>01746                 <span class="keywordflow">if</span> (!ft || strstr(ft-&gt;fs_mntops, <span class="stringliteral">&quot;noauto&quot;</span>))
<a name="l01747"></a>01747                   ismanual = Right;
<a name="l01748"></a>01748             }
<a name="l01749"></a>01749         }
<a name="l01750"></a>01750     }
<a name="l01751"></a>01751 
<a name="l01752"></a>01752 <span class="preprocessor">#elif defined(_AIX)</span>
<a name="l01753"></a>01753 <span class="preprocessor"></span>
<a name="l01754"></a>01754     <span class="keyword">struct </span>vmount *mntctl_buffer;
<a name="l01755"></a>01755     <span class="keyword">struct </span>vmount *vm;
<a name="l01756"></a>01756     <span class="keywordtype">char</span> *mountedfrom;
<a name="l01757"></a>01757     <span class="keywordtype">char</span> *mountedto;
<a name="l01758"></a>01758     <span class="keywordtype">int</span> fsname_len, num;
<a name="l01759"></a>01759     <span class="keywordtype">char</span> realpath_buffer[MAXPATHLEN];
<a name="l01760"></a>01760     <span class="keywordtype">int</span> buf_sz = 4096;
<a name="l01761"></a>01761 
<a name="l01762"></a>01762     mntctl_buffer = (<span class="keyword">struct </span>vmount*)malloc(buf_sz);
<a name="l01763"></a>01763     num = mntctl(MCTL_QUERY, buf_sz, mntctl_buffer);
<a name="l01764"></a>01764     <span class="keywordflow">if</span> (num == 0)
<a name="l01765"></a>01765     {
<a name="l01766"></a>01766     buf_sz = *(<span class="keywordtype">int</span>*)mntctl_buffer;
<a name="l01767"></a>01767     free(mntctl_buffer);
<a name="l01768"></a>01768     mntctl_buffer = (<span class="keyword">struct </span>vmount*)malloc(buf_sz);
<a name="l01769"></a>01769     num = mntctl(MCTL_QUERY, buf_sz, mntctl_buffer);
<a name="l01770"></a>01770     }
<a name="l01771"></a>01771 
<a name="l01772"></a>01772     <span class="keywordflow">if</span> (num &gt; 0)
<a name="l01773"></a>01773     {
<a name="l01774"></a>01774         <span class="comment">/* iterate through items in the vmount structure: */</span>
<a name="l01775"></a>01775         vm = (<span class="keyword">struct </span>vmount *)mntctl_buffer;
<a name="l01776"></a>01776         <span class="keywordflow">for</span> ( ; num &gt; 0; num-- )
<a name="l01777"></a>01777         {
<a name="l01778"></a>01778             <span class="comment">/* get the name of the mounted file systems: */</span>
<a name="l01779"></a>01779             fsname_len = vmt2datasize(vm, VMT_STUB);
<a name="l01780"></a>01780             mountedto     = (<span class="keywordtype">char</span>*)malloc(fsname_len + 1);
<a name="l01781"></a>01781         mountedto[fsname_len] = <span class="charliteral">&#39;\0&#39;</span>;
<a name="l01782"></a>01782             strncpy(mountedto, (<span class="keywordtype">char</span> *)vmt2dataptr(vm, VMT_STUB), fsname_len);
<a name="l01783"></a>01783 
<a name="l01784"></a>01784             fsname_len = vmt2datasize(vm, VMT_OBJECT);
<a name="l01785"></a>01785             mountedfrom     = (<span class="keywordtype">char</span>*)malloc(fsname_len + 1);
<a name="l01786"></a>01786         mountedfrom[fsname_len] = <span class="charliteral">&#39;\0&#39;</span>;
<a name="l01787"></a>01787             strncpy(mountedfrom, (<span class="keywordtype">char</span> *)vmt2dataptr(vm, VMT_OBJECT), fsname_len);
<a name="l01788"></a>01788 
<a name="l01789"></a>01789             <span class="comment">/* get the mount-from information: */</span>
<a name="l01790"></a>01790             <a class="codeRef" href="qcstring.html">QCString</a> device_name = mountedfrom;
<a name="l01791"></a>01791 
<a name="l01792"></a>01792             <span class="keywordflow">if</span> (realpath(device_name, realpath_buffer) != 0)
<a name="l01793"></a>01793                 <span class="comment">// success, use result from realpath</span>
<a name="l01794"></a>01794                 device_name = realpath_buffer;
<a name="l01795"></a>01795 
<a name="l01796"></a>01796         <span class="comment">/* Look up the string for the file system type,</span>
<a name="l01797"></a>01797 <span class="comment">             * as listed in /etc/vfs.</span>
<a name="l01798"></a>01798 <span class="comment">             * ex.: nfs,jfs,afs,cdrfs,sfs,cachefs,nfs3,autofs</span>
<a name="l01799"></a>01799 <span class="comment">             */</span>
<a name="l01800"></a>01800             <span class="keyword">struct </span>vfs_ent* ent = getvfsbytype(vm-&gt;vmt_gfstype);
<a name="l01801"></a>01801 
<a name="l01802"></a>01802             <span class="keywordflow">if</span> ( is_my_mountpoint( mountedto, realname, max ) )
<a name="l01803"></a>01803             {
<a name="l01804"></a>01804                 mountPoint = <a class="codeRef" href="qfile.html#decodeName">QFile::decodeName</a>(mountedto);
<a name="l01805"></a>01805                 fstype = <a class="codeRef" href="qstring.html#fromLatin1">QString::fromLatin1</a>(ent-&gt;vfsent_name);
<a name="l01806"></a>01806                 check_mount_point(ent-&gt;vfsent_name, device_name, isautofs, isslow);
<a name="l01807"></a>01807 
<a name="l01808"></a>01808                 <span class="keywordflow">if</span> (ismanual == Unseen)
<a name="l01809"></a>01809                 {
<a name="l01810"></a>01810                     <span class="comment">// TODO: add check for ismanual, I couldn&#39;t find any way</span>
<a name="l01811"></a>01811                     <span class="comment">// how to get the mount attribute from /etc/filesystems</span>
<a name="l01812"></a>01812                     ismanual == Wrong;
<a name="l01813"></a>01813                 }
<a name="l01814"></a>01814             }
<a name="l01815"></a>01815 
<a name="l01816"></a>01816             free(mountedfrom);
<a name="l01817"></a>01817             free(mountedto);
<a name="l01818"></a>01818 
<a name="l01819"></a>01819             <span class="comment">/* goto the next vmount structure: */</span>
<a name="l01820"></a>01820             vm = (<span class="keyword">struct </span>vmount *)((<span class="keywordtype">char</span> *)vm + vm-&gt;vmt_length);
<a name="l01821"></a>01821         }
<a name="l01822"></a>01822 
<a name="l01823"></a>01823     endvfsent( );
<a name="l01824"></a>01824     }
<a name="l01825"></a>01825 
<a name="l01826"></a>01826     free( mntctl_buffer );
<a name="l01827"></a>01827 
<a name="l01828"></a>01828 <span class="preprocessor">#else</span>
<a name="l01829"></a>01829 <span class="preprocessor"></span>
<a name="l01830"></a>01830     STRUCT_SETMNTENT mtab;
<a name="l01831"></a>01831     <span class="comment">/* Get the list of mounted file systems */</span>
<a name="l01832"></a>01832 
<a name="l01833"></a>01833     <span class="keywordflow">if</span> ((mtab = SETMNTENT(MNTTAB, <span class="stringliteral">&quot;r&quot;</span>)) == 0) {
<a name="l01834"></a>01834         perror(<span class="stringliteral">&quot;setmntent&quot;</span>);
<a name="l01835"></a>01835         <span class="keywordflow">return</span> QString::null;
<a name="l01836"></a>01836     }
<a name="l01837"></a>01837 
<a name="l01838"></a>01838     STRUCT_MNTENT me;
<a name="l01839"></a>01839 
<a name="l01840"></a>01840     <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
<a name="l01841"></a>01841         <span class="keywordflow">if</span> (!GETMNTENT(mtab, me))
<a name="l01842"></a>01842             <span class="keywordflow">break</span>;
<a name="l01843"></a>01843 
<a name="l01844"></a>01844         <span class="keywordflow">if</span> ( is_my_mountpoint( MOUNTPOINT(me), realname, max ) )
<a name="l01845"></a>01845         {
<a name="l01846"></a>01846             mountPoint = <a class="codeRef" href="qfile.html#decodeName">QFile::decodeName</a>( MOUNTPOINT(me) );
<a name="l01847"></a>01847             fstype = MOUNTTYPE(me);
<a name="l01848"></a>01848             check_mount_point(MOUNTTYPE(me), FSNAME(me), isautofs, isslow);
<a name="l01849"></a>01849             <span class="comment">// we don&#39;t check if ismanual is Right, if /a/b is manually</span>
<a name="l01850"></a>01850             <span class="comment">// mounted /a/b/c can&#39;t be automounted. At least IMO.</span>
<a name="l01851"></a>01851             <span class="keywordflow">if</span> (ismanual == Unseen)
<a name="l01852"></a>01852             {
<a name="l01853"></a>01853                 <span class="comment">// The next GETMNTENT call may destroy &#39;me&#39;</span>
<a name="l01854"></a>01854                 <span class="comment">// Copy out the info that we need</span>
<a name="l01855"></a>01855                 <a class="codeRef" href="qcstring.html">QCString</a> fsname_me = FSNAME(me);
<a name="l01856"></a>01856                 <a class="codeRef" href="qcstring.html">QCString</a> mounttype_me = MOUNTTYPE(me);
<a name="l01857"></a>01857 
<a name="l01858"></a>01858                 STRUCT_SETMNTENT fstab;
<a name="l01859"></a>01859                 <span class="keywordflow">if</span> ((fstab = SETMNTENT(FSTAB, <span class="stringliteral">&quot;r&quot;</span>)) == 0) {
<a name="l01860"></a>01860                     <span class="keywordflow">continue</span>;
<a name="l01861"></a>01861                 }
<a name="l01862"></a>01862 
<a name="l01863"></a>01863                 <span class="keywordtype">bool</span> found = <span class="keyword">false</span>;
<a name="l01864"></a>01864                 STRUCT_MNTENT fe;
<a name="l01865"></a>01865                 <span class="keywordflow">while</span> (GETMNTENT(fstab, fe))
<a name="l01866"></a>01866                 {
<a name="l01867"></a>01867                     <span class="keywordflow">if</span> (fsname_me == FSNAME(fe))
<a name="l01868"></a>01868                     {
<a name="l01869"></a>01869                         found = <span class="keyword">true</span>;
<a name="l01870"></a>01870                         <span class="keywordflow">if</span> (HASMNTOPT(fe, <span class="stringliteral">&quot;noauto&quot;</span>) ||
<a name="l01871"></a>01871                             !strcmp(MOUNTTYPE(fe), <span class="stringliteral">&quot;supermount&quot;</span>))
<a name="l01872"></a>01872                             ismanual = Right;
<a name="l01873"></a>01873                         <span class="keywordflow">break</span>;
<a name="l01874"></a>01874                     }
<a name="l01875"></a>01875                 }
<a name="l01876"></a>01876                 <span class="keywordflow">if</span> (!found || (mounttype_me == <span class="stringliteral">&quot;supermount&quot;</span>))
<a name="l01877"></a>01877                   ismanual = Right;
<a name="l01878"></a>01878 
<a name="l01879"></a>01879                 ENDMNTENT(fstab);
<a name="l01880"></a>01880             }
<a name="l01881"></a>01881         }
<a name="l01882"></a>01882     }
<a name="l01883"></a>01883 
<a name="l01884"></a>01884     ENDMNTENT(mtab);
<a name="l01885"></a>01885 
<a name="l01886"></a>01886 <span class="preprocessor">#endif</span>
<a name="l01887"></a>01887 <span class="preprocessor"></span>
<a name="l01888"></a>01888     <span class="keywordflow">if</span> (isautofs == Right &amp;&amp; isslow == Unseen)
<a name="l01889"></a>01889         isslow = Right;
<a name="l01890"></a>01890 
<a name="l01891"></a>01891     <span class="keywordflow">if</span> (gotDevice)
<a name="l01892"></a>01892     {
<a name="l01893"></a>01893        <span class="keywordflow">if</span> (!cachedDevice)
<a name="l01894"></a>01894           cachedDevice = <span class="keyword">new</span> cachedDevice_t;
<a name="l01895"></a>01895 
<a name="l01896"></a>01896        cachedDevice-&gt;device = stat_buf.st_dev;
<a name="l01897"></a>01897        cachedDevice-&gt;mountPoint = mountPoint;
<a name="l01898"></a>01898        cachedDevice-&gt;isautofs = isautofs;
<a name="l01899"></a>01899        cachedDevice-&gt;isslow = isslow;
<a name="l01900"></a>01900        cachedDevice-&gt;ismanual = ismanual;
<a name="l01901"></a>01901        cachedDevice-&gt;fstype = fstype;
<a name="l01902"></a>01902     }
<a name="l01903"></a>01903 
<a name="l01904"></a>01904     <span class="keywordflow">return</span> mountPoint;
<a name="l01905"></a>01905 }
<a name="l01906"></a>01906 
<a name="l01907"></a>01907 <span class="preprocessor">#else //!Q_OS_UNIX</span>
<a name="l01908"></a>01908 <span class="preprocessor"></span><span class="comment">//dummy</span>
<a name="l01909"></a>01909 <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#af425927b2894a7bd5c5b890d2508edd2" title="Returns the mount point where device is mounted right now.">KIO::findDeviceMountPoint</a>( <span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; filename )
<a name="l01910"></a>01910 {
<a name="l01911"></a>01911     <span class="keywordflow">return</span> QString::null;
<a name="l01912"></a>01912 }
<a name="l01913"></a>01913 <span class="preprocessor">#endif</span>
<a name="l01914"></a>01914 <span class="preprocessor"></span>
<a name="l01915"></a><a class="code" href="namespaceKIO.html#a757e4b3d0ec58940564fc3f35e7f7940">01915</a> <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#a757e4b3d0ec58940564fc3f35e7f7940" title="Returns the mount point on which resides filename.">KIO::findPathMountPoint</a>(<span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; filename)
<a name="l01916"></a>01916 {
<a name="l01917"></a>01917 <span class="preprocessor">#ifdef Q_OS_UNIX</span>
<a name="l01918"></a>01918 <span class="preprocessor"></span>  MountState isautofs = Unseen, isslow = Unseen, ismanual = Wrong;
<a name="l01919"></a>01919   <a class="codeRef" href="qstring.html">QString</a> fstype;
<a name="l01920"></a>01920   <span class="keywordflow">return</span> get_mount_info(filename, isautofs, isslow, ismanual, fstype);
<a name="l01921"></a>01921 <span class="preprocessor">#else //!Q_OS_UNIX</span>
<a name="l01922"></a>01922 <span class="preprocessor"></span>  <span class="keywordflow">return</span> QString::null;
<a name="l01923"></a>01923 <span class="preprocessor">#endif </span>
<a name="l01924"></a>01924 <span class="preprocessor"></span>}
<a name="l01925"></a>01925 
<a name="l01926"></a><a class="code" href="namespaceKIO.html#a9311ebcd9c733a92cab7d62466bca0cf">01926</a> <span class="keywordtype">bool</span> <a class="code" href="namespaceKIO.html#a9311ebcd9c733a92cab7d62466bca0cf" title="Checks if the path belongs to a filesystem that is manually mounted.">KIO::manually_mounted</a>(<span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; filename)
<a name="l01927"></a>01927 {
<a name="l01928"></a>01928 <span class="preprocessor">#ifdef Q_OS_UNIX</span>
<a name="l01929"></a>01929 <span class="preprocessor"></span>  MountState isautofs = Unseen, isslow = Unseen, ismanual = Unseen;
<a name="l01930"></a>01930   <a class="codeRef" href="qstring.html">QString</a> fstype;
<a name="l01931"></a>01931   <a class="codeRef" href="qstring.html">QString</a> mountPoint = get_mount_info(filename, isautofs, isslow, ismanual, fstype);
<a name="l01932"></a>01932   <span class="keywordflow">return</span> !mountPoint.<a class="codeRef" href="qstring.html#isNull">isNull</a>() &amp;&amp; (ismanual == Right);
<a name="l01933"></a>01933 <span class="preprocessor">#else //!Q_OS_UNIX</span>
<a name="l01934"></a>01934 <span class="preprocessor"></span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01935"></a>01935 <span class="preprocessor">#endif </span>
<a name="l01936"></a>01936 <span class="preprocessor"></span>}
<a name="l01937"></a>01937 
<a name="l01938"></a><a class="code" href="namespaceKIO.html#a72e962147780f74e7c44f9c4ea533778">01938</a> <span class="keywordtype">bool</span> <a class="code" href="namespaceKIO.html#a72e962147780f74e7c44f9c4ea533778" title="Checks if the path belongs to a filesystem that is probably slow.">KIO::probably_slow_mounted</a>(<span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; filename)
<a name="l01939"></a>01939 {
<a name="l01940"></a>01940 <span class="preprocessor">#ifdef Q_OS_UNIX</span>
<a name="l01941"></a>01941 <span class="preprocessor"></span>  MountState isautofs = Unseen, isslow = Unseen, ismanual = Wrong;
<a name="l01942"></a>01942   <a class="codeRef" href="qstring.html">QString</a> fstype;
<a name="l01943"></a>01943   <a class="codeRef" href="qstring.html">QString</a> mountPoint = get_mount_info(filename, isautofs, isslow, ismanual, fstype);
<a name="l01944"></a>01944   <span class="keywordflow">return</span> !mountPoint.<a class="codeRef" href="qstring.html#isNull">isNull</a>() &amp;&amp; (isslow == Right);
<a name="l01945"></a>01945 <span class="preprocessor">#else //!Q_OS_UNIX</span>
<a name="l01946"></a>01946 <span class="preprocessor"></span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01947"></a>01947 <span class="preprocessor">#endif </span>
<a name="l01948"></a>01948 <span class="preprocessor"></span>}
<a name="l01949"></a>01949 
<a name="l01950"></a><a class="code" href="namespaceKIO.html#ac5244964e95bd83fc1000ec6f5a84306">01950</a> <span class="keywordtype">bool</span> <a class="code" href="namespaceKIO.html#ac5244964e95bd83fc1000ec6f5a84306" title="Checks the capabilities of the filesystem to which a given file belongs.">KIO::testFileSystemFlag</a>(<span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a>&amp; filename, FileSystemFlag flag)
<a name="l01951"></a>01951 {
<a name="l01952"></a>01952 <span class="preprocessor">#ifdef Q_OS_UNIX</span>
<a name="l01953"></a>01953 <span class="preprocessor"></span>  MountState isautofs = Unseen, isslow = Unseen, ismanual = Wrong;
<a name="l01954"></a>01954   <a class="codeRef" href="qstring.html">QString</a> fstype;
<a name="l01955"></a>01955   <a class="codeRef" href="qstring.html">QString</a> mountPoint = get_mount_info(filename, isautofs, isslow, ismanual, fstype);
<a name="l01956"></a>01956     kdDebug() &lt;&lt; <span class="stringliteral">&quot;testFileSystemFlag: fstype=&quot;</span> &lt;&lt; fstype &lt;&lt; endl;
<a name="l01957"></a>01957   <span class="keywordflow">if</span> (mountPoint.<a class="codeRef" href="qstring.html#isNull">isNull</a>())
<a name="l01958"></a>01958       <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01959"></a>01959   <span class="keywordtype">bool</span> isMsDos = ( fstype == <span class="stringliteral">&quot;msdos&quot;</span> || fstype == <span class="stringliteral">&quot;fat&quot;</span> || fstype == <span class="stringliteral">&quot;vfat&quot;</span> );
<a name="l01960"></a>01960   <span class="keywordflow">switch</span> (flag)  {
<a name="l01961"></a>01961   <span class="keywordflow">case</span> SupportsChmod:
<a name="l01962"></a>01962   <span class="keywordflow">case</span> SupportsChown:
<a name="l01963"></a>01963   <span class="keywordflow">case</span> SupportsUTime:
<a name="l01964"></a>01964   <span class="keywordflow">case</span> SupportsSymlinks:
<a name="l01965"></a>01965       <span class="keywordflow">return</span> !isMsDos; <span class="comment">// it&#39;s amazing the number of things FAT doesn&#39;t support :)</span>
<a name="l01966"></a>01966   <span class="keywordflow">case</span> CaseInsensitive:
<a name="l01967"></a>01967       <span class="keywordflow">return</span> isMsDos;
<a name="l01968"></a>01968   }
<a name="l01969"></a>01969 <span class="preprocessor">#endif </span>
<a name="l01970"></a>01970 <span class="preprocessor"></span>  <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l01971"></a>01971 }
<a name="l01972"></a>01972 
<a name="l01973"></a><a class="code" href="namespaceKIO.html#afb75a9dbf9762227d26af4c67356ec46">01973</a> <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfa" title="Specifies how to use the cache.">KIO::CacheControl</a> <a class="code" href="namespaceKIO.html#afb75a9dbf9762227d26af4c67356ec46" title="Parses the string representation of the cache control option.">KIO::parseCacheControl</a>(<span class="keyword">const</span> <a class="codeRef" href="qstring.html">QString</a> &amp;cacheControl)
<a name="l01974"></a>01974 {
<a name="l01975"></a>01975   <a class="codeRef" href="qstring.html">QString</a> tmp = cacheControl.<a class="codeRef" href="qstring.html#lower">lower</a>();
<a name="l01976"></a>01976 
<a name="l01977"></a>01977   <span class="keywordflow">if</span> (tmp == <span class="stringliteral">&quot;cacheonly&quot;</span>)
<a name="l01978"></a>01978      <span class="keywordflow">return</span> <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfaacab88b8216aff964794daca3dc772c30" title="Fail request if not in cache.">KIO::CC_CacheOnly</a>;
<a name="l01979"></a>01979   <span class="keywordflow">if</span> (tmp == <span class="stringliteral">&quot;cache&quot;</span>)
<a name="l01980"></a>01980      <span class="keywordflow">return</span> <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfaa6a79c42ad227352ab2c78ca1e4017a4d" title="Use cached entry if available.">KIO::CC_Cache</a>;
<a name="l01981"></a>01981   <span class="keywordflow">if</span> (tmp == <span class="stringliteral">&quot;verify&quot;</span>)
<a name="l01982"></a>01982      <span class="keywordflow">return</span> <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfaac299ce838226abed1ee825ccd502384b" title="Validate cached entry with remote site if expired.">KIO::CC_Verify</a>;
<a name="l01983"></a>01983   <span class="keywordflow">if</span> (tmp == <span class="stringliteral">&quot;refresh&quot;</span>)
<a name="l01984"></a>01984      <span class="keywordflow">return</span> <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfaae5c474eea2850f8f82753effb443179d" title="Always validate cached entry with remote site.">KIO::CC_Refresh</a>;
<a name="l01985"></a>01985   <span class="keywordflow">if</span> (tmp == <span class="stringliteral">&quot;reload&quot;</span>)
<a name="l01986"></a>01986      <span class="keywordflow">return</span> <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfaac9b9eefd414118d7af567b642a8ebf5e" title="Always fetch from remote site.">KIO::CC_Reload</a>;
<a name="l01987"></a>01987 
<a name="l01988"></a>01988   kdDebug() &lt;&lt; <span class="stringliteral">&quot;unrecognized Cache control option:&quot;</span>&lt;&lt;cacheControl&lt;&lt;endl;
<a name="l01989"></a>01989   <span class="keywordflow">return</span> <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfaac299ce838226abed1ee825ccd502384b" title="Validate cached entry with remote site if expired.">KIO::CC_Verify</a>;
<a name="l01990"></a>01990 }
<a name="l01991"></a>01991 
<a name="l01992"></a><a class="code" href="namespaceKIO.html#a62e4d73be11c5f2aefcdfffcdca859eb">01992</a> <a class="codeRef" href="qstring.html">QString</a> <a class="code" href="namespaceKIO.html#a62e4d73be11c5f2aefcdfffcdca859eb" title="Returns a string representation of the given cache control method.">KIO::getCacheControlString</a>(<a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfa" title="Specifies how to use the cache.">KIO::CacheControl</a> cacheControl)
<a name="l01993"></a>01993 {
<a name="l01994"></a>01994     <span class="keywordflow">if</span> (cacheControl == <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfaacab88b8216aff964794daca3dc772c30" title="Fail request if not in cache.">KIO::CC_CacheOnly</a>)
<a name="l01995"></a>01995     <span class="keywordflow">return</span> <span class="stringliteral">&quot;CacheOnly&quot;</span>;
<a name="l01996"></a>01996     <span class="keywordflow">if</span> (cacheControl == <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfaa6a79c42ad227352ab2c78ca1e4017a4d" title="Use cached entry if available.">KIO::CC_Cache</a>)
<a name="l01997"></a>01997     <span class="keywordflow">return</span> <span class="stringliteral">&quot;Cache&quot;</span>;
<a name="l01998"></a>01998     <span class="keywordflow">if</span> (cacheControl == <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfaac299ce838226abed1ee825ccd502384b" title="Validate cached entry with remote site if expired.">KIO::CC_Verify</a>)
<a name="l01999"></a>01999     <span class="keywordflow">return</span> <span class="stringliteral">&quot;Verify&quot;</span>;
<a name="l02000"></a>02000     <span class="keywordflow">if</span> (cacheControl == <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfaae5c474eea2850f8f82753effb443179d" title="Always validate cached entry with remote site.">KIO::CC_Refresh</a>)
<a name="l02001"></a>02001     <span class="keywordflow">return</span> <span class="stringliteral">&quot;Refresh&quot;</span>;
<a name="l02002"></a>02002     <span class="keywordflow">if</span> (cacheControl == <a class="code" href="namespaceKIO.html#ab5bfb111419deab71b65dce326c73dfaac9b9eefd414118d7af567b642a8ebf5e" title="Always fetch from remote site.">KIO::CC_Reload</a>)
<a name="l02003"></a>02003     <span class="keywordflow">return</span> <span class="stringliteral">&quot;Reload&quot;</span>;
<a name="l02004"></a>02004     kdDebug() &lt;&lt; <span class="stringliteral">&quot;unrecognized Cache control enum value:&quot;</span>&lt;&lt;cacheControl&lt;&lt;endl;
<a name="l02005"></a>02005     <span class="keywordflow">return</span> QString::null;
<a name="l02006"></a>02006 }
</pre></div></div>
</div>
    </div></div>


      </td>
  </tr>
  <tr>
    <td valign="top" id="leftmenu" width="25%">
      <a name="navigation"></a>
      <div class="menu_box"><h2>kio/kio</h2>
<div class="nav_list">
<ul><li><a href="index.html">Main Page</a></li><li><a href="modules.html">Modules</a></li><li><a href="namespaces.html">Namespace List</a></li><li><a href="hierarchy.html">Class Hierarchy</a></li><li><a href="classes.html">Alphabetical List</a></li><li><a href="annotated.html">Class List</a></li><li><a href="files.html">File List</a></li><li><a href="namespacemembers.html">Namespace Members</a></li><li><a href="functions.html">Class Members</a></li><li><a href="pages.html">Related Pages</a></li></ul>
<!--
<h2>Class Picker</h2>
<div style="text-align: center;">
<form name="guideform">
<select name="guidelinks" style="width:100%;" onChange="window.location=document.guideform.guidelinks.options[document.guideform.guidelinks.selectedIndex].value">
<option value="annotated.html">-- Choose --</option>
  <option value="classKACL.html">kacl</option>,  <option value="classKAr.html">kar</option>,  <option value="classKArchive.html">karchive</option>,  <option value="classKArchiveDirectory.html">karchivedirectory</option>,  <option value="classKArchiveEntry.html">karchiveentry</option>,  <option value="classKArchiveFile.html">karchivefile</option>,  <option value="classKAutoMount.html">kautomount</option>,  <option value="classKAutoUnmount.html">kautounmount</option>,  <option value="classKDataTool.html">kdatatool</option>,  <option value="classKDataToolAction.html">kdatatoolaction</option>,  <option value="classKDataToolInfo.html">kdatatoolinfo</option>,  <option value="classKDCOPServiceStarter.html">kdcopservicestarter</option>,  <option value="classKDEDesktopMimeType.html">kdedesktopmimetype</option>,  <option value="classKDirLister.html">kdirlister</option>,  <option value="classKDirNotify.html">kdirnotify</option>,  <option value="classKDirWatch.html">kdirwatch</option>,  <option value="classKEMailSettings.html">kemailsettings</option>,  <option value="classKExecMimeType.html">kexecmimetype</option>,  <option value="classKFileFilter.html">kfilefilter</option>,  <option value="classKFileItem.html">kfileitem</option>,  <option value="classKFileMetaInfo.html">kfilemetainfo</option>,  <option value="classKFileMetaInfoGroup.html">kfilemetainfogroup</option>,  <option value="classKFileMetaInfoItem.html">kfilemetainfoitem</option>,  <option value="classKFileMimeTypeInfo.html">kfilemimetypeinfo</option>,  <option value="classKFileMimeTypeInfo_1_1GroupInfo.html">kfilemimetypeinfo::groupinfo</option>,  <option value="classKFileMimeTypeInfo_1_1ItemInfo.html">kfilemimetypeinfo::iteminfo</option>,  <option value="classKFilePlugin.html">kfileplugin</option>,  <option value="classKFileShare.html">kfileshare</option>,  <option value="classKFilterBase.html">kfilterbase</option>,  <option value="classKFilterDev.html">kfilterdev</option>,  <option value="classKFolderType.html">kfoldertype</option>,  <option value="classKImageIO.html">kimageio</option>,  <option value="classKIO_1_1AuthInfo.html">kio::authinfo</option>,  <option value="classKIO_1_1ChmodJob.html">kio::chmodjob</option>,  <option value="classKIO_1_1Connection.html">kio::connection</option>,  <option value="classKIO_1_1CopyJob.html">kio::copyjob</option>,  <option value="classKIO_1_1DataProtocol.html">kio::dataprotocol</option>,  <option value="classKIO_1_1DataSlave.html">kio::dataslave</option>,  <option value="classKIO_1_1DavJob.html">kio::davjob</option>,  <option value="classKIO_1_1DeleteJob.html">kio::deletejob</option>,  <option value="classKIO_1_1FileCopyJob.html">kio::filecopyjob</option>,  <option value="classKIO_1_1ForwardingSlaveBase.html">kio::forwardingslavebase</option>,  <option value="classKIO_1_1Job.html">kio::job</option>,  <option value="classKIO_1_1ListJob.html">kio::listjob</option>,  <option value="classKIO_1_1MetaData.html">kio::metadata</option>,  <option value="classKIO_1_1MetaInfoJob.html">kio::metainfojob</option>,  <option value="classKIO_1_1MimetypeJob.html">kio::mimetypejob</option>,  <option value="classKIO_1_1MkdirJob.html">kio::mkdirjob</option>,  <option value="classKIO_1_1MultiGetJob.html">kio::multigetjob</option>,  <option value="classKIO_1_1NetAccess.html">kio::netaccess</option>,  <option value="classKIO_1_1NetRC.html">kio::netrc</option>,  <option value="classKIO_1_1PasswordDialog.html">kio::passworddialog</option>,  <option value="classKIO_1_1PreviewJob.html">kio::previewjob</option>,  <option value="classKIO_1_1ProgressBase.html">kio::progressbase</option>,  <option value="classKIO_1_1RenameDlg.html">kio::renamedlg</option>,  <option value="classKIO_1_1Scheduler.html">kio::scheduler</option>,  <option value="classKIO_1_1SimpleJob.html">kio::simplejob</option>,  <option value="classKIO_1_1Slave.html">kio::slave</option>,  <option value="classKIO_1_1SlaveBase.html">kio::slavebase</option>,  <option value="classKIO_1_1SlaveConfig.html">kio::slaveconfig</option>,  <option value="classKIO_1_1SlaveInterface.html">kio::slaveinterface</option>,  <option value="classKIO_1_1StatJob.html">kio::statjob</option>,  <option value="classKIO_1_1StatusbarProgress.html">kio::statusbarprogress</option>,  <option value="classKIO_1_1StoredTransferJob.html">kio::storedtransferjob</option>,  <option value="classKIO_1_1TCPSlaveBase.html">kio::tcpslavebase</option>,  <option value="classKIO_1_1TransferJob.html">kio::transferjob</option>,  <option value="classKLimitedIODevice.html">klimitediodevice</option>,  <option value="classKMimeMagic.html">kmimemagic</option>,  <option value="classKMimeMagicResult.html">kmimemagicresult</option>,  <option value="classKMimeType.html">kmimetype</option>,  <option value="classKMimeTypeChooser.html">kmimetypechooser</option>,  <option value="classKMimeTypeChooserDialog.html">kmimetypechooserdialog</option>,  <option value="classKMimeTypeResolver.html">kmimetyperesolver</option>,  <option value="classKNFSShare.html">knfsshare</option>,  <option value="classKOCRDialog.html">kocrdialog</option>,  <option value="classKOCRDialogFactory.html">kocrdialogfactory</option>,  <option value="classKOpenWithHandler.html">kopenwithhandler</option>,  <option value="classKProtocolInfo.html">kprotocolinfo</option>,  <option value="classKProtocolManager.html">kprotocolmanager</option>,  <option value="classKRemoteEncoding.html">kremoteencoding</option>,  <option value="classKRun.html">krun</option>,  <option value="classKSambaShare.html">ksambashare</option>,  <option value="classKScanDialog.html">kscandialog</option>,  <option value="classKScanDialogFactory.html">kscandialogfactory</option>,  <option value="classKService.html">kservice</option>,  <option value="classKServiceGroup.html">kservicegroup</option>,  <option value="classKServiceOffer.html">kserviceoffer</option>,  <option value="classKServiceType.html">kservicetype</option>,  <option value="classKServiceTypeProfile.html">kservicetypeprofile</option>,  <option value="classKShellCompletion.html">kshellcompletion</option>,  <option value="classKShred.html">kshred</option>,  <option value="classKSimpleFileFilter.html">ksimplefilefilter</option>,  <option value="classKTar.html">ktar</option>,  <option value="classKTrader.html">ktrader</option>,  <option value="classKURIFilter.html">kurifilter</option>,  <option value="classKURIFilterData.html">kurifilterdata</option>,  <option value="classKURIFilterPlugin.html">kurifilterplugin</option>,  <option value="classKURIFilterPluginList.html">kurifilterpluginlist</option>,  <option value="classKURLCompletion.html">kurlcompletion</option>,  <option value="classKURLPixmapProvider.html">kurlpixmapprovider</option>,  <option value="classKZip.html">kzip</option>,  <option value="classObserver.html">observer</option>,  <option value="classRenameDlgPlugin.html">renamedlgplugin</option>,  <option value="classThumbCreator.html">thumbcreator</option>,
</select>
</form>
</div>
-->
</div></div>
<div class="menu_box"><h2>API Dox</h2>
<div class="nav_list">
<ul>
<li><a href="../../../arts/html/index.html">arts</a></li><li><a href="../../../dcop/html/index.html">dcop</a></li><li><a href="../../../dnssd/html/index.html">dnssd</a></li><li><a href="../../../interfaces/html/index.html">interfaces</a></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<a href="../../../interfaces/kimproxy/interface/html/index.html">interface</a></li><li>&nbsp;&nbsp;&nbsp;&nbsp;<a href="../../../interfaces/kimproxy/library/html/index.html">library</a></li><li>&nbsp;&nbsp;<a href="../../../interfaces/kspeech/html/index.html">kspeech</a></li><li>&nbsp;&nbsp;<a href="../../../interfaces/ktexteditor/html/index.html">ktexteditor</a></li><li><a href="../../../kabc/html/index.html">kabc</a></li><li><a href="../../../kate/html/index.html">kate</a></li><li><a href="../../../kcmshell/html/index.html">kcmshell</a></li><li><a href="../../../kdecore/html/index.html">kdecore</a></li><li><a href="../../../kded/html/index.html">kded</a></li><li><a href="../../../kdefx/html/index.html">kdefx</a></li><li><a href="../../../kdeprint/html/index.html">kdeprint</a></li><li><a href="../../../kdesu/html/index.html">kdesu</a></li><li><a href="../../../kdeui/html/index.html">kdeui</a></li><li><a href="../../../kdoctools/html/index.html">kdoctools</a></li><li><a href="../../../khtml/html/index.html">khtml</a></li><li><a href="../../../kimgio/html/index.html">kimgio</a></li><li><a href="../../../kinit/html/index.html">kinit</a></li><li><a href="../../../kio/html/index.html">kio</a></li><li>&nbsp;&nbsp;<a href="../../../kio/bookmarks/html/index.html">bookmarks</a></li><li>&nbsp;&nbsp;<a href="../../../kio/httpfilter/html/index.html">httpfilter</a></li><li>&nbsp;&nbsp;<a href="../../../kio/kfile/html/index.html">kfile</a></li><li>&nbsp;&nbsp;<a href="../../../kio/kio/html/index.html">kio</a></li><li>&nbsp;&nbsp;<a href="../../../kio/kioexec/html/index.html">kioexec</a></li><li>&nbsp;&nbsp;<a href="../../../kio/kpasswdserver/html/index.html">kpasswdserver</a></li><li>&nbsp;&nbsp;<a href="../../../kio/kssl/html/index.html">kssl</a></li><li><a href="../../../kioslave/html/index.html">kioslave</a></li><li>&nbsp;&nbsp;<a href="../../../kioslave/http/html/index.html">http</a></li><li><a href="../../../kjs/html/index.html">kjs</a></li><li><a href="../../../kmdi/html/index.html">kmdi</a></li><li>&nbsp;&nbsp;<a href="../../../kmdi/kmdi/html/index.html">kmdi</a></li><li><a href="../../../knewstuff/html/index.html">knewstuff</a></li><li><a href="../../../kparts/html/index.html">kparts</a></li><li><a href="../../../kresources/html/index.html">kresources</a></li><li><a href="../../../kspell2/html/index.html">kspell2</a></li><li><a href="../../../kunittest/html/index.html">kunittest</a></li><li><a href="../../../kutils/html/index.html">kutils</a></li><li><a href="../../../kwallet/html/index.html">kwallet</a></li><li><a href="../../../libkmid/html/index.html">libkmid</a></li><li><a href="../../../libkscreensaver/html/index.html">libkscreensaver</a></li>
</ul></div></div>


        </td>
</tr>
</table>

<span class="doNotDisplay">
  <a href="http://www.kde.org/" accesskey="8">KDE Home</a> |
  <a href="http://accessibility.kde.org/" accesskey="9">KDE Accessibility Home</a> |
  <a href="http://www.kde.org/media/accesskeys.php" accesskey="0">Description of Access Keys</a>
</span>


<div style="height: 8px"></div>

<div id="footer">
  <div id="footer_left">
    Maintained by <a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;groo&#116;&#64;kde&#46;or&#x67;">Adriaan de Groot</a>
and
<a href="&#109;a&#105;&#108;&#116;&#111;&#58;w&#105;nter&#64;kde&#46;or&#x67">Allen Winter</a>.
<br/>
    KDE and K Desktop Environment are trademarks of <a href="http://www.kde.org/areas/kde-ev/" title="Homepage of the KDE non-profit Organization">KDE e.V.</a> |
    <a href="http://www.kde.org/contact/impressum.php">Legal</a>
  </div>
  <div id="footer_right"><img src="/media/images/footer_right.png" style="margin: 0px" alt="" /></div>
</div>

<!--
WARNING: DO NOT SEND MAIL TO THE FOLLOWING EMAIL ADDRESS! YOU WILL
BE BLOCKED INSTANTLY AND PERMANENTLY!
<a href="mailto:aaaatrap-425acc3b5374943f@kde.org">Block me</a>
WARNING END
-->

</body>
</html>