]> git.saurik.com Git - wxWidgets.git/blobdiff - src/common/tarstrm.cpp
fix wrong clear selection (modified patch 1763916)
[wxWidgets.git] / src / common / tarstrm.cpp
index cf149f638a898045f04dbaeb0dccefd5420621ce..65a4099d41f59149b176167466a8248025dc4040 100644 (file)
@@ -247,7 +247,7 @@ bool wxTarHeaderBlock::Write(wxOutputStream& out)
     return ok;
 }
 
-bool wxTarHeaderBlock::WriteField(wxOutputStream& out, int id)
+inline bool wxTarHeaderBlock::WriteField(wxOutputStream& out, int id)
 {
     return out.Write(Get(id), Len(id)).LastWrite() == Len(id);
 }
@@ -289,7 +289,10 @@ bool wxTarHeaderBlock::SetPath(const wxString& name, wxMBConv& conv)
         size_t len = name.length();
         wxCharBuffer approx(len);
         for (size_t i = 0; i < len; i++)
-            approx.data()[i] = name[i] & ~0x7F ? '_' : name[i];
+        {
+            wxChar c = name[i];
+            approx.data()[i] = c & ~0x7F ? '_' : c;
+        }
         nameBuf = approx;
     }
 
@@ -824,10 +827,10 @@ wxTarNumber wxTarInputStream::GetHeaderNumber(int id) const
 {
     wxString value;
 
-    if ((value = GetExtendedHeader(wxTarHeaderBlock::Name(id))) != wxEmptyString) {
+    if ((value = GetExtendedHeader(m_hdr->Name(id))) != wxEmptyString) {
         wxTarNumber n = 0;
-        const wxChar *p = value;
-        while (*p == ' ')
+        wxString::const_iterator p = value.begin();
+        while (*p == ' ' && p != value.end())
             p++;
         while (isdigit(*p))
             n = n * 10 + (*p++ - '0');
@@ -841,7 +844,7 @@ wxString wxTarInputStream::GetHeaderString(int id) const
 {
     wxString value;
 
-    if ((value = GetExtendedHeader(wxTarHeaderBlock::Name(id))) != wxEmptyString)
+    if ((value = GetExtendedHeader(m_hdr->Name(id))) != wxEmptyString)
         return value;
 
     return wxString(m_hdr->Get(id), GetConv());
@@ -1265,7 +1268,7 @@ wxString wxTarOutputStream::PaxHeaderPath(const wxString& format,
         if (end == wxString::npos || end + 1 >= format.length())
             break;
         ret << format.substr(begin, end - begin);
-        switch (format[end + 1]) {
+        switch ( format[end + 1].GetValue() ) {
             case 'd': ret << d; break;
             case 'f': ret << f; break;
             case 'p': ret << wxGetProcessId(); break;
@@ -1291,7 +1294,7 @@ bool wxTarOutputStream::ModifyHeader()
         originalPos = m_parent_o_stream->TellO();
         if (originalPos != wxInvalidOffset)
             sizePos =
-                m_parent_o_stream->SeekO(m_headpos + wxTarHeaderBlock::Offset(TAR_SIZE));
+                m_parent_o_stream->SeekO(m_headpos + m_hdr->Offset(TAR_SIZE));
     }
 
     if (sizePos == wxInvalidOffset || !m_hdr->SetOctal(TAR_SIZE, m_pos)) {
@@ -1302,7 +1305,7 @@ bool wxTarOutputStream::ModifyHeader()
 
     m_chksum += m_hdr->SumField(TAR_SIZE);
     m_hdr->SetOctal(TAR_CHKSUM, m_chksum);
-    wxFileOffset sumPos = m_headpos + wxTarHeaderBlock::Offset(TAR_CHKSUM);
+    wxFileOffset sumPos = m_headpos + m_hdr->Offset(TAR_CHKSUM);
 
     return
         m_hdr->WriteField(*m_parent_o_stream, TAR_SIZE) &&
@@ -1322,16 +1325,16 @@ bool wxTarOutputStream::SetHeaderNumber(int id, wxTarNumber n)
     if (m_hdr->SetOctal(id, n)) {
         return true;
     } else {
-        SetExtendedHeader(wxTarHeaderBlock::Name(id), wxLongLong(n).ToString());
+        SetExtendedHeader(m_hdr->Name(id), wxLongLong(n).ToString());
         return false;
     }
 }
 
 void wxTarOutputStream::SetHeaderString(int id, const wxString& str)
 {
-    strncpy(m_hdr->Get(id), str.mb_str(GetConv()), wxTarHeaderBlock::Len(id));
-    if (str.length() > wxTarHeaderBlock::Len(id))
-        SetExtendedHeader(wxTarHeaderBlock::Name(id), str);
+    strncpy(m_hdr->Get(id), str.mb_str(GetConv()), m_hdr->Len(id));
+    if (str.length() > m_hdr->Len(id))
+        SetExtendedHeader(m_hdr->Name(id), str);
 }
 
 void wxTarOutputStream::SetHeaderDate(const wxString& key,
@@ -1359,11 +1362,16 @@ void wxTarOutputStream::SetExtendedHeader(const wxString& key,
                                           const wxString& value)
 {
     if (m_pax) {
+#if wxUSE_UNICODE
+        const wxCharBuffer utf_key = key.utf8_str();
+        const wxCharBuffer utf_value = value.utf8_str();
+#else
         const wxWX2WCbuf wide_key = key.wc_str(GetConv());
         const wxCharBuffer utf_key = wxConvUTF8.cWC2MB(wide_key);
 
         const wxWX2WCbuf wide_value = value.wc_str(GetConv());
         const wxCharBuffer utf_value = wxConvUTF8.cWC2MB(wide_value);
+#endif // wxUSE_UNICODE/!wxUSE_UNICODE
 
         // a small buffer to format the length field in
         char buf[32];