# HG changeset patch # User Aleksej Bobylev # Date 1508689908 -10800 # Node ID f4530a23116ce3050ea672105cf76d4bec458d55 # Parent 0b1827e0934dc3aaa428ecab4f68a68a364d954f Fix truecrypt. Although cryptography is not easy. Use it at your own risk. diff -r 0b1827e0934d -r f4530a23116c truecrypt/receipt --- a/truecrypt/receipt Sun Oct 22 19:26:43 2017 +0300 +++ b/truecrypt/receipt Sun Oct 22 19:31:48 2017 +0300 @@ -1,4 +1,4 @@ -# SliTaz package receipt. +# SliTaz package receipt v2. PACKAGE="truecrypt" VERSION="7.1a" @@ -6,33 +6,38 @@ SHORT_DESC="Free open-source cross-platform disk encryption software" MAINTAINER="slaxemulator@gmail.com" LICENSE="other" +WEB_SITE="http://www.truecrypt.org/" + TARBALL="$PACKAGE-$VERSION.tar.gz" -WEB_SITE="http://www.truecrypt.org" -WGET_URL="ftp://ftp.archlinux.org/other/tc/$TARBALL" +WGET_URL="https://sources.archlinux.org/other/tc/$TARBALL" +TARBALL_SHA512="b5e766023168015cb91bfd85c9e2621055dd98408215e02704775861b5070c5a0234a00c64c1bf7faa34e6d0b51ac71cd36169dd7a6f84d7a34ad0cfa304796a" -DEPENDS="fuse wxWidgets28 xorg-libSM dmsetup linux-md" BUILD_DEPENDS="pkcs nasm fuse-dev wxWidgets28-dev xorg-libSM-dev" # Rules to configure and make the package. compile_rules() { - export CXXFLAGS="-Wno-narrowing" - sed -i 's/^export LFLAGS :=$/& -Wl,--copy-dt-needed-entries -ldl/' Makefile - export PKCS11_INC="/usr/include/pkcs" - cd $src - make + make \ + PKCS11_INC="/usr/include/pkcs" \ + WX_CONFIG=/usr/bin/wx-config \ + TC_EXTRA_LFLAGS+="-ldl $LDFLAGS" \ + TC_EXTRA_CXXFLAGS="$CXXFLAGS" \ + TC_EXTRA_CFLAGS="$CFLAGS" || return 1 + + install -Dm 755 Main/truecrypt $install/usr/bin/truecrypt + install -Dm 644 $stuff/16.png $install/usr/share/icons/hicolor/16x16/apps/truecrypt.png + install -Dm 644 $stuff/48.png $install/usr/share/icons/hicolor/48x48/apps/truecrypt.png + install -Dm 644 License.txt $install/usr/share/licenses/truecrypt/License.txt + + # function `cook_pick_docs` and web interface can't cope with spaces + mv Release/Setup\ Files/ Release/Setup_Files/ + mv Release/Setup_Files/TrueCrypt\ User\ Guide.pdf Release/Setup_Files/TrueCrypt_User_Guide.pdf + cook_pick_docs Release/Setup_Files/* } # Rules to gen a SliTaz package suitable for Tazpkg. genpkg_rules() { - mkdir -p $fs/usr/bin \ - $fs/usr/share/applications \ - $fs/usr/share/pixmaps \ - $fs/usr/share/licenses/$PACKAGE - cp -a $src/Main/$PACKAGE $fs/usr/bin - cp -a $stuff/$PACKAGE.desktop $fs/usr/share/applications - cp -a $src/Resources/Icons/TrueCrypt-48x48.xpm $fs/usr/share/pixmaps/truecrypt.xpm - - cp -a $src/License.txt $fs/usr/share/licenses/$PACKAGE/License.txt + copy @std + DEPENDS="fuse wxWidgets28 xorg-libSM dmsetup linux-md" } diff -r 0b1827e0934d -r f4530a23116c truecrypt/stuff/16.png Binary file truecrypt/stuff/16.png has changed diff -r 0b1827e0934d -r f4530a23116c truecrypt/stuff/48.png Binary file truecrypt/stuff/48.png has changed diff -r 0b1827e0934d -r f4530a23116c truecrypt/stuff/patches/fix-invalid-characters.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/truecrypt/stuff/patches/fix-invalid-characters.patch Sun Oct 22 19:31:48 2017 +0300 @@ -0,0 +1,54 @@ +From 646679da4d79bf7f8af22c44c7ae8498086a88a6 Mon Sep 17 00:00:00 2001 +From: Mounir IDRASSI +Date: Fri, 18 Mar 2016 16:25:48 +0100 +Subject: [PATCH] Linux: Completely fix gcc-5 "Invalid characters encountered" + issue on mount. It was caused by an issue of gcc-5 STL implementation that is + causing char* pointers retrieved from std::string using c_str method to + become invalid in the child of a child process (after two fork calls). The + workaround is to first copy the std:string values in the child before calling + the second fork. + +--- + src/Platform/Unix/Process.cpp | 24 ++++++++++++++++++++++-- + 1 file changed, 22 insertions(+), 2 deletions(-) + +diff --git a/src/Platform/Unix/Process.cpp b/src/Platform/Unix/Process.cpp +index 388bda6..0770364 100644 +--- a/src/Platform/Unix/Process.cpp ++++ b/src/Platform/Unix/Process.cpp +@@ -53,13 +53,33 @@ namespace VeraCrypt + try + { + int argIndex = 0; ++ /* Workaround for gcc 5.X issue related to the use of STL (string and list) with muliple fork calls. ++ * ++ * The char* pointers retrieved from the elements of parameter "arguments" are no longer valid after ++ * a second fork is called. "arguments" was created in the parent of the current child process. ++ * ++ * The only solution is to copy the elements of "arguments" parameter in a local string array on this ++ * child process and then use char* pointers retrieved from this local copies before calling fork. ++ * ++ * gcc 4.x doesn't suffer from this issue. ++ * ++ */ ++ string argsCopy[array_capacity (args)]; + if (!execFunctor) +- args[argIndex++] = const_cast (processName.c_str()); ++ { ++ argsCopy[argIndex++] = processName; ++ } + + foreach (const string &arg, arguments) + { +- args[argIndex++] = const_cast (arg.c_str()); ++ argsCopy[argIndex++] = arg; + } ++ ++ for (int i = 0; i < argIndex; i++) ++ { ++ args[i] = const_cast (argsCopy[i].c_str()); ++ } ++ + args[argIndex] = nullptr; + + if (inputData) diff -r 0b1827e0934d -r f4530a23116c truecrypt/stuff/patches/gcc6.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/truecrypt/stuff/patches/gcc6.patch Sun Oct 22 19:31:48 2017 +0300 @@ -0,0 +1,61 @@ +--- Main/Resources.cpp 2016-05-16 16:47:35.846462041 +0200 ++++ Main/Resources.cpp 2016-05-16 17:12:21.838202520 +0200 +@@ -45,13 +45,13 @@ + strBuf.CopyFrom (res); + return string (reinterpret_cast (strBuf.Ptr())); + #else +- static const char LanguageXml[] = ++ static byte LanguageXml[] = + { + # include "Common/Language.xml.h" + , 0 + }; + +- return string (LanguageXml); ++ return string ((const char*) LanguageXml); + #endif + } + +@@ -64,13 +64,13 @@ + strBuf.CopyFrom (res); + return string (reinterpret_cast (strBuf.Ptr())); + #else +- static const char License[] = ++ static byte License[] = + { + # include "License.txt.h" + , 0 + }; + +- return string (License); ++ return string ((const char*) License); + #endif + } + +--- Main/Forms/PreferencesDialog.cpp 2016-05-16 17:14:47.704707908 +0200 ++++ Main/Forms/PreferencesDialog.cpp 2016-05-16 17:15:56.927964437 +0200 +@@ -414,11 +414,11 @@ + libExtension = wxDynamicLibrary::CanonicalizeName (L"x"); + + #ifdef TC_MACOSX +- extensions.push_back (make_pair (L"dylib", LangString["DLL_FILES"])); ++ extensions.push_back (make_pair (L"dylib", static_cast(LangString["DLL_FILES"].wc_str()))); + #endif + if (!libExtension.empty()) + { +- extensions.push_back (make_pair (libExtension.Mid (libExtension.find (L'.') + 1), LangString["DLL_FILES"])); ++ extensions.push_back (make_pair (static_cast(libExtension.Mid (libExtension.find (L'.') + 1).wc_str()), static_cast(LangString["DLL_FILES"].wc_str()))); + extensions.push_back (make_pair (L"*", L"")); + } + +--- Main/GraphicUserInterface.cpp 2016-05-16 17:16:38.724591342 +0200 ++++ Main/GraphicUserInterface.cpp 2016-05-16 17:17:09.854562653 +0200 +@@ -1445,7 +1445,7 @@ + FilePath GraphicUserInterface::SelectVolumeFile (wxWindow *parent, bool saveMode, const DirectoryPath &directory) const + { + list < pair > extensions; +- extensions.push_back (make_pair (L"tc", LangString["TC_VOLUMES"])); ++ extensions.push_back (make_pair (L"tc", static_cast(LangString["TC_VOLUMES"].wc_str()))); + + FilePathList selFiles = Gui->SelectFiles (parent, LangString[saveMode ? "OPEN_NEW_VOLUME" : "OPEN_VOL_TITLE"], saveMode, false, extensions, directory); + diff -r 0b1827e0934d -r f4530a23116c truecrypt/stuff/patches/no-exec-stack.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/truecrypt/stuff/patches/no-exec-stack.patch Sun Oct 22 19:31:48 2017 +0300 @@ -0,0 +1,60 @@ +--- Crypto/Aes_hw_cpu.asm.old 2011-06-01 17:12:53.078000001 -0400 ++++ Crypto/Aes_hw_cpu.asm 2011-06-01 17:12:53.080000002 -0400 +@@ -328,3 +328,12 @@ + + + %endif ; __BITS__ != 16 ++ %ifidn __OUTPUT_FORMAT__,elf ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif ++ %ifidn __OUTPUT_FORMAT__,elf32 ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif ++ %ifidn __OUTPUT_FORMAT__,elf64 ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif +--- Crypto/AesSmall_x86.asm.old 2011-06-01 17:12:53.084000002 -0400 ++++ Crypto/AesSmall_x86.asm 2011-06-01 17:12:53.086000002 -0400 +@@ -1442,3 +1442,12 @@ + db v8(0xe1),v8(0x69),v8(0x14),v8(0x63),v8(0x55),v8(0x21),v8(0x0c),v8(0x7d) + + %endif ++ %ifidn __OUTPUT_FORMAT__,elf ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif ++ %ifidn __OUTPUT_FORMAT__,elf32 ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif ++ %ifidn __OUTPUT_FORMAT__,elf64 ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif +--- Crypto/Aes_x64.asm.old 2011-06-01 17:12:53.090000002 -0400 ++++ Crypto/Aes_x64.asm 2011-06-01 17:12:53.092000002 -0400 +@@ -905,3 +905,12 @@ + %endif + + %endif ++ %ifidn __OUTPUT_FORMAT__,elf ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif ++ %ifidn __OUTPUT_FORMAT__,elf32 ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif ++ %ifidn __OUTPUT_FORMAT__,elf64 ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif +--- Crypto/Aes_x86.asm.old 2011-06-01 17:12:53.096000002 -0400 ++++ Crypto/Aes_x86.asm 2011-06-01 17:12:53.097000002 -0400 +@@ -644,3 +644,12 @@ + do_exit + + %endif ++ %ifidn __OUTPUT_FORMAT__,elf ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif ++ %ifidn __OUTPUT_FORMAT__,elf32 ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif ++ %ifidn __OUTPUT_FORMAT__,elf64 ++ section .note.GNU-stack noalloc noexec nowrite progbits ++ %endif diff -r 0b1827e0934d -r f4530a23116c truecrypt/stuff/patches/series --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/truecrypt/stuff/patches/series Sun Oct 22 19:31:48 2017 +0300 @@ -0,0 +1,7 @@ +# from https://www.archlinux.org/packages/extra/i686/truecrypt/ +-p1|truecrypt-arch-detection.patch +-p0|gcc6.patch +-p2|fix-invalid-characters.patch +-p0|no-exec-stack.patch +#-p2|wxwidgets3.patch +-p2|xdg-open.patch diff -r 0b1827e0934d -r f4530a23116c truecrypt/stuff/patches/truecrypt-arch-detection.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/truecrypt/stuff/patches/truecrypt-arch-detection.patch Sun Oct 22 19:31:48 2017 +0300 @@ -0,0 +1,15 @@ +diff -urN truecrypt-7.0a-source/Makefile truecrypt-7.0a-source.fixed/Makefile +--- truecrypt-7.0a-source/Makefile 2010-09-05 10:32:10.000000000 -0400 ++++ truecrypt-7.0a-source.fixed/Makefile 2011-07-05 21:41:50.296437879 -0400 +@@ -120,10 +120,7 @@ + + export CPU_ARCH ?= unknown + +-ARCH = $(shell uname -p) +-ifeq "$(ARCH)" "unknown" +- ARCH = $(shell uname -m) +-endif ++ARCH = $(shell uname -m) + + ifneq (,$(filter i386 i486 i586 i686 x86,$(ARCH))) + CPU_ARCH = x86 diff -r 0b1827e0934d -r f4530a23116c truecrypt/stuff/patches/wxwidgets3.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/truecrypt/stuff/patches/wxwidgets3.patch Sun Oct 22 19:31:48 2017 +0300 @@ -0,0 +1,249 @@ +From 084a8ee85c24fbc7077d6c789c97aacdb31b4e39 Mon Sep 17 00:00:00 2001 +From: Mounir IDRASSI +Date: Sun, 8 Jun 2014 00:45:49 +0200 +Subject: [PATCH] wxWidgets 3.0 compatibility modifications + +--- + src/Main/Application.cpp | 6 +++--- + src/Main/CommandLineInterface.cpp | 12 ++++++------ + src/Main/Forms/MainFrame.cpp | 2 +- + src/Main/Forms/SelectDirectoryWizardPage.cpp | 2 +- + src/Main/Forms/SelectDirectoryWizardPage.h | 2 +- + src/Main/GraphicUserInterface.cpp | 6 +++--- + src/Main/TextUserInterface.cpp | 2 +- + src/Main/UserPreferences.cpp | 2 +- + 8 files changed, 17 insertions(+), 17 deletions(-) + +diff --git a/src/Main/Application.cpp b/src/Main/Application.cpp +index 8c6dea1..2d49169 100644 +--- a/src/Main/Application.cpp ++++ b/src/Main/Application.cpp +@@ -36,7 +36,7 @@ namespace TrueCrypt + + FilePath Application::GetConfigFilePath (const wxString &configFileName, bool createConfigDir) + { +- wxStandardPaths stdPaths; ++ wxStandardPaths& stdPaths = wxStandardPaths::Get(); + DirectoryPath configDir; + + if (!Core->IsInPortableMode()) +@@ -61,12 +61,12 @@ namespace TrueCrypt + + DirectoryPath Application::GetExecutableDirectory () + { +- return wstring (wxFileName (wxStandardPaths().GetExecutablePath()).GetPath()); ++ return wstring (wxFileName (wxStandardPaths::Get().GetExecutablePath()).GetPath()); + } + + FilePath Application::GetExecutablePath () + { +- return wstring (wxStandardPaths().GetExecutablePath()); ++ return wstring (wxStandardPaths::Get().GetExecutablePath()); + } + + void Application::Initialize (UserInterfaceType::Enum type) +diff --git a/src/Main/CommandLineInterface.cpp b/src/Main/CommandLineInterface.cpp +index ccb0317..61cbd31 100644 +--- a/src/Main/CommandLineInterface.cpp ++++ b/src/Main/CommandLineInterface.cpp +@@ -380,7 +380,7 @@ namespace TrueCrypt + ArgQuick = parser.Found (L"quick"); + + if (parser.Found (L"random-source", &str)) +- ArgRandomSourcePath = FilesystemPath (str); ++ ArgRandomSourcePath = FilesystemPath (str.wc_str()); + + if (parser.Found (L"restore-headers")) + { +@@ -471,7 +471,7 @@ namespace TrueCrypt + + if (param1IsFile) + { +- ArgFilePath.reset (new FilePath (parser.GetParam (0))); ++ ArgFilePath.reset (new FilePath (parser.GetParam (0).wc_str())); + } + } + +@@ -524,7 +524,7 @@ namespace TrueCrypt + arr.Add (L""); + continue; + } +- arr.Last() += token.empty() ? L',' : token; ++ arr.Last() += token.empty() ? L"," : token.wc_str(); + } + else + arr.Add (token); +@@ -562,12 +562,12 @@ namespace TrueCrypt + { + filteredVolumes.push_back (volume); + } +- else if (wxString (volume->Path) == pathFilter.GetFullPath()) ++ else if (wxString (wstring(volume->Path)) == pathFilter.GetFullPath()) + { + filteredVolumes.push_back (volume); + } +- else if (wxString (volume->MountPoint) == pathFilter.GetFullPath() +- || (wxString (volume->MountPoint) + wxFileName::GetPathSeparator()) == pathFilter.GetFullPath()) ++ else if (wxString (wstring(volume->MountPoint)) == pathFilter.GetFullPath() ++ || (wxString (wstring(volume->MountPoint)) + wxFileName::GetPathSeparator()) == pathFilter.GetFullPath()) + { + filteredVolumes.push_back (volume); + } +diff --git a/src/Main/Forms/MainFrame.cpp b/src/Main/Forms/MainFrame.cpp +index 6100a7a..3443ea3 100644 +--- a/src/Main/Forms/MainFrame.cpp ++++ b/src/Main/Forms/MainFrame.cpp +@@ -828,7 +828,7 @@ namespace TrueCrypt + // File-hosted volumes + if (!volume->Path.IsDevice() && !mountPoint.IsEmpty()) + { +- if (wxString (volume->Path).Upper().StartsWith (wstring (mountPoint).c_str())) ++ if (wxString (wstring(volume->Path)).Upper().StartsWith (wstring (mountPoint).c_str())) + { + removedVolumes.push_back (volume); + continue; +diff --git a/src/Main/Forms/SelectDirectoryWizardPage.cpp b/src/Main/Forms/SelectDirectoryWizardPage.cpp +index a6a3ab0..1299e22 100644 +--- a/src/Main/Forms/SelectDirectoryWizardPage.cpp ++++ b/src/Main/Forms/SelectDirectoryWizardPage.cpp +@@ -16,7 +16,7 @@ namespace TrueCrypt + { + if (!DirectoryTextCtrl->IsEmpty()) + { +- return FilesystemPath (DirectoryTextCtrl->GetValue()).IsDirectory(); ++ return FilesystemPath (DirectoryTextCtrl->GetValue().wc_str()).IsDirectory(); + } + + return false; +diff --git a/src/Main/Forms/SelectDirectoryWizardPage.h b/src/Main/Forms/SelectDirectoryWizardPage.h +index 52335fc..2ea8b0d 100644 +--- a/src/Main/Forms/SelectDirectoryWizardPage.h ++++ b/src/Main/Forms/SelectDirectoryWizardPage.h +@@ -18,7 +18,7 @@ namespace TrueCrypt + public: + SelectDirectoryWizardPage (wxPanel* parent) : SelectDirectoryWizardPageBase (parent) { } + +- DirectoryPath GetDirectory () const { return DirectoryPath (DirectoryTextCtrl->GetValue()); } ++ DirectoryPath GetDirectory () const { return DirectoryPath (DirectoryTextCtrl->GetValue().wc_str()); } + bool IsValid (); + void SetDirectory (const DirectoryPath &path) { DirectoryTextCtrl->SetValue (wstring (path)); } + void SetMaxStaticTextWidth (int width) { InfoStaticText->Wrap (width); } +diff --git a/src/Main/GraphicUserInterface.cpp b/src/Main/GraphicUserInterface.cpp +index 41eb780..64e9e4b 100644 +--- a/src/Main/GraphicUserInterface.cpp ++++ b/src/Main/GraphicUserInterface.cpp +@@ -1384,7 +1384,7 @@ namespace TrueCrypt + #else + L"", + #endif +- L"", wxDD_DEFAULT_STYLE | (existingOnly ? wxDD_DIR_MUST_EXIST : 0), wxDefaultPosition, parent)); ++ L"", wxDD_DEFAULT_STYLE | (existingOnly ? wxDD_DIR_MUST_EXIST : 0), wxDefaultPosition, parent).wc_str()); + } + + FilePathList GraphicUserInterface::SelectFiles (wxWindow *parent, const wxString &caption, bool saveMode, bool allowMultiple, const list < pair > &fileExtensions, const DirectoryPath &directory) const +@@ -1428,14 +1428,14 @@ namespace TrueCrypt + if (dialog.ShowModal() == wxID_OK) + { + if (!allowMultiple) +- files.push_back (make_shared (dialog.GetPath())); ++ files.push_back (make_shared (dialog.GetPath().wc_str())); + else + { + wxArrayString paths; + dialog.GetPaths (paths); + + foreach (const wxString &path, paths) +- files.push_back (make_shared (path)); ++ files.push_back (make_shared (path.wc_str())); + } + } + +diff --git a/src/Main/TextUserInterface.cpp b/src/Main/TextUserInterface.cpp +index d9e93e6..c7af099 100644 +--- a/src/Main/TextUserInterface.cpp ++++ b/src/Main/TextUserInterface.cpp +@@ -116,7 +116,7 @@ namespace TrueCrypt + for (size_t i = 0; i < length && i < VolumePassword::MaxSize; ++i) + { + passwordBuf[i] = (wchar_t) passwordStr[i]; +- const_cast (passwordStr.c_str())[i] = L'X'; ++ const_cast (passwordStr.wc_str())[i] = L'X'; + } + + if (verify && verPhase) +diff --git a/src/Main/UserPreferences.cpp b/src/Main/UserPreferences.cpp +index e0e8233..6608f79 100644 +--- a/src/Main/UserPreferences.cpp ++++ b/src/Main/UserPreferences.cpp +@@ -219,7 +219,7 @@ namespace TrueCrypt + + foreach_ref (const Keyfile &keyfile, DefaultKeyfiles) + { +- keyfilesXml.InnerNodes.push_back (XmlNode (L"keyfile", wxString (FilesystemPath (keyfile)))); ++ keyfilesXml.InnerNodes.push_back (XmlNode (L"keyfile", wxString (wstring(FilesystemPath (keyfile))))); + } + + XmlWriter keyfileWriter (keyfilesCfgPath); +--- a/src/Main/Forms/Forms.cpp ++++ b/src/Main/Forms/Forms.cpp +@@ -263,8 +263,6 @@ + VolumeStaticBoxSizer = new wxStaticBoxSizer( new wxStaticBox( MainPanel, wxID_ANY, _("Volume") ), wxVERTICAL ); + + VolumeGridBagSizer = new wxGridBagSizer( 0, 0 ); +- VolumeGridBagSizer->AddGrowableCol( 1 ); +- VolumeGridBagSizer->AddGrowableRow( 0 ); + VolumeGridBagSizer->SetFlexibleDirection( wxBOTH ); + VolumeGridBagSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + +@@ -307,6 +305,8 @@ + + VolumeGridBagSizer->Add( bSizer21, wxGBPosition( 1, 3 ), wxGBSpan( 1, 1 ), wxEXPAND, 5 ); + ++ VolumeGridBagSizer->AddGrowableCol( 1 ); ++ VolumeGridBagSizer->AddGrowableRow( 0 ); + VolumeStaticBoxSizer->Add( VolumeGridBagSizer, 1, wxEXPAND|wxALL, 4 ); + + LowStaticBoxSizer->Add( VolumeStaticBoxSizer, 1, wxEXPAND, 5 ); +@@ -1442,7 +1442,6 @@ + bSizer54->Add( bSizer55, 1, wxEXPAND, 5 ); + + FilesystemOptionsSizer = new wxGridBagSizer( 0, 0 ); +- FilesystemOptionsSizer->AddGrowableCol( 1 ); + FilesystemOptionsSizer->SetFlexibleDirection( wxBOTH ); + FilesystemOptionsSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + FilesystemOptionsSizer->SetEmptyCellSize( wxSize( 0,0 ) ); +@@ -1468,6 +1467,7 @@ + FilesystemOptionsTextCtrl = new wxTextCtrl( m_panel8, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); + FilesystemOptionsSizer->Add( FilesystemOptionsTextCtrl, wxGBPosition( 2, 1 ), wxGBSpan( 1, 2 ), wxALIGN_CENTER_VERTICAL|wxEXPAND|wxTOP|wxRIGHT|wxLEFT, 5 ); + ++ FilesystemOptionsSizer->AddGrowableCol( 1 ); + bSizer54->Add( FilesystemOptionsSizer, 0, wxEXPAND, 5 ); + + sbSizer28->Add( bSizer54, 0, wxEXPAND|wxBOTTOM, 5 ); +@@ -2892,7 +2892,6 @@ + bSizer7 = new wxBoxSizer( wxVERTICAL ); + + GridBagSizer = new wxGridBagSizer( 0, 0 ); +- GridBagSizer->AddGrowableCol( 1 ); + GridBagSizer->SetFlexibleDirection( wxBOTH ); + GridBagSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); + GridBagSizer->SetEmptyCellSize( wxSize( 0,0 ) ); +@@ -2950,6 +2949,7 @@ + + GridBagSizer->Add( PasswordPlaceholderSizer, wxGBPosition( 8, 1 ), wxGBSpan( 1, 2 ), wxTOP|wxEXPAND, 5 ); + ++ GridBagSizer->AddGrowableCol( 1 ); + bSizer7->Add( GridBagSizer, 1, wxALL|wxEXPAND, 5 ); + + this->SetSizer( bSizer7 ); +--- a/src/Main/Forms/PreferencesDialog.h ++++ b/src/Main/Forms/PreferencesDialog.h +@@ -26,7 +26,7 @@ namespace VeraCrypt + protected: + void OnAssignHotkeyButtonClick (wxCommandEvent& event); + void OnBackgroundTaskEnabledCheckBoxClick (wxCommandEvent& event); +- void OnCancelButtonClick (wxCommandEvent& event) { Close(); } ++ void OnCancelButtonClick (wxCommandEvent& event) { EndModal (wxID_CANCEL); } + void OnClose (wxCloseEvent& event); + void OnDismountOnPowerSavingCheckBoxClick (wxCommandEvent& event); + void OnDismountOnScreenSaverCheckBoxClick (wxCommandEvent& event); diff -r 0b1827e0934d -r f4530a23116c truecrypt/stuff/patches/xdg-open.patch --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/truecrypt/stuff/patches/xdg-open.patch Sun Oct 22 19:31:48 2017 +0300 @@ -0,0 +1,81 @@ +From ad4af09d884e1727750571f7679e8679b8027a1c Mon Sep 17 00:00:00 2001 +From: Mounir IDRASSI +Date: Sun, 8 Feb 2015 13:45:15 +0100 +Subject: [PATCH] Linux: When not under Gnome/KDE, use xdg-open to open the + mounted volume if it is available. + +--- + src/Main/UserInterface.cpp | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/src/Main/UserInterface.cpp b/src/Main/UserInterface.cpp +index 177a4e9..39c4274 100644 +--- a/src/Main/UserInterface.cpp ++++ b/src/Main/UserInterface.cpp +@@ -832,7 +832,7 @@ namespace VeraCrypt + // MIME handler for directory seems to be unavailable through wxWidgets + wxString desktop = GetTraits()->GetDesktopEnvironment(); + +- if (desktop == L"GNOME" || desktop.empty()) ++ if (desktop == L"GNOME") + { + args.push_back ("--no-default-window"); + args.push_back ("--no-desktop"); +@@ -865,6 +865,22 @@ namespace VeraCrypt + catch (exception &e) { ShowError (e); } + } + } ++ else if (wxFileName::IsFileExecutable (wxT("/usr/bin/xdg-open"))) ++ { ++ // Fallback on the standard xdg-open command ++ // which is not always available by default ++ args.push_back (string (path)); ++ try ++ { ++ Process::Execute ("xdg-open", args, 2000); ++ } ++ catch (TimeOut&) { } ++ catch (exception &e) { ShowError (e); } ++ } ++ else ++ { ++ ShowWarning (wxT("Unable to find a file manager to open the mounted volume")); ++ } + #endif + } + +From 3a9db8d98c1301726bdf26af9698e7cc61a46f71 Mon Sep 17 00:00:00 2001 +From: Mounir IDRASSI +Date: Wed, 2 Dec 2015 11:10:30 +0100 +Subject: [PATCH] Linux: fix Nautilus not detected as file manager on some + Gnome based destributions. + +--- + src/Main/UserInterface.cpp | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/Main/UserInterface.cpp b/src/Main/UserInterface.cpp +index 73c9914..2be5bc7 100644 +--- a/src/Main/UserInterface.cpp ++++ b/src/Main/UserInterface.cpp +@@ -834,8 +834,10 @@ namespace VeraCrypt + #else + // MIME handler for directory seems to be unavailable through wxWidgets + wxString desktop = GetTraits()->GetDesktopEnvironment(); ++ bool xdgOpenPresent = wxFileName::IsFileExecutable (wxT("/usr/bin/xdg-open")); ++ bool nautilusPresent = wxFileName::IsFileExecutable (wxT("/usr/bin/nautilus")); + +- if (desktop == L"GNOME") ++ if (desktop == L"GNOME" || (desktop.empty() && !xdgOpenPresent && nautilusPresent)) + { + args.push_back ("--no-default-window"); + args.push_back ("--no-desktop"); +@@ -868,7 +870,7 @@ namespace VeraCrypt + catch (exception &e) { ShowError (e); } + } + } +- else if (wxFileName::IsFileExecutable (wxT("/usr/bin/xdg-open"))) ++ else if (xdgOpenPresent) + { + // Fallback on the standard xdg-open command + // which is not always available by default diff -r 0b1827e0934d -r f4530a23116c truecrypt/stuff/truecrypt.desktop --- a/truecrypt/stuff/truecrypt.desktop Sun Oct 22 19:26:43 2017 +0300 +++ b/truecrypt/stuff/truecrypt.desktop Sun Oct 22 19:31:48 2017 +0300 @@ -1,9 +1,9 @@ [Desktop Entry] Type=Application +Name=TrueCrypt +Comment=On-the-fly encryption +StartupNotify=true Exec=truecrypt Icon=truecrypt -Comment=On-the-fly encryption Terminal=false -Name=TrueCrypt -StartupNotify=true Categories=System;