drop support for windows compilers without std::string and wchar_t (believed to be old cygwin)

This commit is contained in:
arvidn 2017-07-01 13:12:55 -04:00 committed by Arvid Norberg
parent 7af38ba05a
commit 5c37eb174f
27 changed files with 38 additions and 193 deletions

View File

@ -1,3 +1,4 @@
* drop support for windows compilers without std::wstring
* implemented support for DHT infohash indexing, BEP51 * implemented support for DHT infohash indexing, BEP51
* removed deprecated support for file_base in file_storage * removed deprecated support for file_base in file_storage
* added support for running separate DHT nodes on each network interface * added support for running separate DHT nodes on each network interface

View File

@ -465,9 +465,6 @@ feature.compose <crypto>libgcrypt : <define>TORRENT_USE_LIBGCRYPT ;
feature ssl : off openssl : composite propagated ; feature ssl : off openssl : composite propagated ;
feature.compose <ssl>openssl : <define>TORRENT_USE_OPENSSL <define>OPENSSL_NO_SSL2 ; feature.compose <ssl>openssl : <define>TORRENT_USE_OPENSSL <define>OPENSSL_NO_SSL2 ;
feature character-set : unicode ansi : composite propagated link-incompatible ;
feature.compose <character-set>unicode : <define>_UNICODE <define>UNICODE ;
feature deprecated-functions : on off : composite propagated link-incompatible ; feature deprecated-functions : on off : composite propagated link-incompatible ;
feature.compose <deprecated-functions>off : <define>TORRENT_NO_DEPRECATE ; feature.compose <deprecated-functions>off : <define>TORRENT_NO_DEPRECATE ;
@ -751,6 +748,8 @@ lib torrent
<link>shared:<define>TORRENT_BUILDING_SHARED <link>shared:<define>TORRENT_BUILDING_SHARED
<define>BOOST_NO_DEPRECATED <define>BOOST_NO_DEPRECATED
<link>shared:<define>BOOST_SYSTEM_SOURCE <link>shared:<define>BOOST_SYSTEM_SOURCE
<target-os>windows:<define>UNICODE
<target-os>windows:<define>_UNICODE
<dht>on:<source>src/kademlia/$(KADEMLIA_SOURCES).cpp <dht>on:<source>src/kademlia/$(KADEMLIA_SOURCES).cpp
<dht>on:<source>ed25519/src/$(ED25519_SOURCES).cpp <dht>on:<source>ed25519/src/$(ED25519_SOURCES).cpp

View File

@ -101,13 +101,11 @@ namespace
FileIter end_files(file_storage const& self) FileIter end_files(file_storage const& self)
{ return FileIter(self, self.end_file()); } { return FileIter(self, self.end_file()); }
#if TORRENT_USE_WSTRING
void add_file_wstring(file_storage& fs, std::wstring const& file, std::int64_t size void add_file_wstring(file_storage& fs, std::wstring const& file, std::int64_t size
, int flags, std::time_t md, std::string link) , int flags, std::time_t md, std::string link)
{ {
fs.add_file(file, size, flags, md, link); fs.add_file(file, size, flags, md, link);
} }
#endif // TORRENT_USE_WSTRING
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
void add_files_callback(file_storage& fs, std::string const& file void add_files_callback(file_storage& fs, std::string const& file
@ -132,7 +130,7 @@ void bind_create_torrent()
{ {
void (file_storage::*set_name0)(std::string const&) = &file_storage::set_name; void (file_storage::*set_name0)(std::string const&) = &file_storage::set_name;
void (file_storage::*rename_file0)(file_index_t, std::string const&) = &file_storage::rename_file; void (file_storage::*rename_file0)(file_index_t, std::string const&) = &file_storage::rename_file;
#if TORRENT_USE_WSTRING && !defined TORRENT_NO_DEPRECATE #if !defined TORRENT_NO_DEPRECATE
void (file_storage::*set_name1)(std::wstring const&) = &file_storage::set_name; void (file_storage::*set_name1)(std::wstring const&) = &file_storage::set_name;
void (file_storage::*rename_file1)(file_index_t, std::wstring const&) = &file_storage::rename_file; void (file_storage::*rename_file1)(file_index_t, std::wstring const&) = &file_storage::rename_file;
#endif #endif
@ -163,9 +161,7 @@ void bind_create_torrent()
.def("add_file", add_file_deprecated, arg("entry")) .def("add_file", add_file_deprecated, arg("entry"))
.def("__iter__", boost::python::range(&begin_files, &end_files)) .def("__iter__", boost::python::range(&begin_files, &end_files))
.def("__len__", &file_storage::num_files) .def("__len__", &file_storage::num_files)
#if TORRENT_USE_WSTRING
.def("add_file", add_file_wstring, (arg("path"), arg("size"), arg("flags") = 0, arg("mtime") = 0, arg("linkpath") = "")) .def("add_file", add_file_wstring, (arg("path"), arg("size"), arg("flags") = 0, arg("mtime") = 0, arg("linkpath") = ""))
#endif
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
.def("hash", file_storage_hash) .def("hash", file_storage_hash)
.def("symlink", file_storage_symlink, return_value_policy<copy_const_reference>()) .def("symlink", file_storage_symlink, return_value_policy<copy_const_reference>())
@ -182,7 +178,7 @@ void bind_create_torrent()
.def("piece_size", &file_storage::piece_size) .def("piece_size", &file_storage::piece_size)
.def("set_name", set_name0) .def("set_name", set_name0)
.def("rename_file", rename_file0) .def("rename_file", rename_file0)
#if TORRENT_USE_WSTRING && !defined TORRENT_NO_DEPRECATE #if !defined TORRENT_NO_DEPRECATE
.def("set_name", set_name1) .def("set_name", set_name1)
.def("rename_file", rename_file1) .def("rename_file", rename_file1)
#endif #endif

View File

@ -444,7 +444,7 @@ void bind_torrent_handle()
void (torrent_handle::*move_storage0)(std::string const&, lt::move_flags_t) const = &torrent_handle::move_storage; void (torrent_handle::*move_storage0)(std::string const&, lt::move_flags_t) const = &torrent_handle::move_storage;
void (torrent_handle::*rename_file0)(file_index_t, std::string const&) const = &torrent_handle::rename_file; void (torrent_handle::*rename_file0)(file_index_t, std::string const&) const = &torrent_handle::rename_file;
#if TORRENT_USE_WSTRING && !defined TORRENT_NO_DEPRECATE #if !defined TORRENT_NO_DEPRECATE
void (torrent_handle::*move_storage1)(std::wstring const&, int) const = &torrent_handle::move_storage; void (torrent_handle::*move_storage1)(std::wstring const&, int) const = &torrent_handle::move_storage;
void (torrent_handle::*rename_file1)(file_index_t, std::wstring const&) const = &torrent_handle::rename_file; void (torrent_handle::*rename_file1)(file_index_t, std::wstring const&) const = &torrent_handle::rename_file;
#endif #endif
@ -567,7 +567,7 @@ void bind_torrent_handle()
.def("force_recheck", _(&torrent_handle::force_recheck)) .def("force_recheck", _(&torrent_handle::force_recheck))
.def("rename_file", _(rename_file0)) .def("rename_file", _(rename_file0))
.def("set_ssl_certificate", &torrent_handle::set_ssl_certificate, (arg("cert"), arg("private_key"), arg("dh_params"), arg("passphrase")="")) .def("set_ssl_certificate", &torrent_handle::set_ssl_certificate, (arg("cert"), arg("private_key"), arg("dh_params"), arg("passphrase")=""))
#if TORRENT_USE_WSTRING && !defined TORRENT_NO_DEPRECATE #if !defined TORRENT_NO_DEPRECATE
.def("move_storage", _(move_storage1), (arg("path"), arg("flags") = always_replace_files)) .def("move_storage", _(move_storage1), (arg("path"), arg("flags") = always_replace_files))
.def("rename_file", _(rename_file1)) .def("rename_file", _(rename_file1))
#endif #endif

View File

@ -241,7 +241,7 @@ void bind_torrent_info()
return_value_policy<copy_const_reference> copy; return_value_policy<copy_const_reference> copy;
void (torrent_info::*rename_file0)(file_index_t, std::string const&) = &torrent_info::rename_file; void (torrent_info::*rename_file0)(file_index_t, std::string const&) = &torrent_info::rename_file;
#if TORRENT_USE_WSTRING && !defined TORRENT_NO_DEPRECATE #if !defined TORRENT_NO_DEPRECATE
void (torrent_info::*rename_file1)(file_index_t, std::wstring const&) = &torrent_info::rename_file; void (torrent_info::*rename_file1)(file_index_t, std::wstring const&) = &torrent_info::rename_file;
#endif #endif
@ -261,7 +261,7 @@ void bind_torrent_info()
.def("__init__", make_constructor(&file_constructor1)) .def("__init__", make_constructor(&file_constructor1))
.def(init<torrent_info const&>((arg("ti")))) .def(init<torrent_info const&>((arg("ti"))))
#if TORRENT_USE_WSTRING && !defined TORRENT_NO_DEPRECATE #if !defined TORRENT_NO_DEPRECATE
.def(init<std::wstring, int>((arg("file"), arg("flags") = 0))) .def(init<std::wstring, int>((arg("file"), arg("flags") = 0)))
#endif #endif
@ -294,9 +294,7 @@ void bind_torrent_info()
#ifndef TORRENT_NO_DEPRECATE #ifndef TORRENT_NO_DEPRECATE
.def("file_at", &torrent_info::file_at) .def("file_at", &torrent_info::file_at)
.def("file_at_offset", &torrent_info::file_at_offset) .def("file_at_offset", &torrent_info::file_at_offset)
#if TORRENT_USE_WSTRING
.def("rename_file", rename_file1) .def("rename_file", rename_file1)
#endif // TORRENT_USE_WSTRING
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
.def("is_valid", &torrent_info::is_valid) .def("is_valid", &torrent_info::is_valid)

View File

@ -316,14 +316,6 @@ Build features:
| | * ``profile`` - builds libtorrent with profile | | | * ``profile`` - builds libtorrent with profile |
| | information. | | | information. |
+--------------------------+----------------------------------------------------+ +--------------------------+----------------------------------------------------+
| ``character-set`` | This setting will only have an affect on windows. |
| | Other platforms are expected to support UTF-8. |
| | |
| | * ``unicode`` - The unicode version of the win32 |
| | API is used. This is default. |
| | * ``ansi`` - The ansi version of the win32 API is |
| | used. |
+--------------------------+----------------------------------------------------+
| ``invariant-checks`` | This setting only affects debug builds (where | | ``invariant-checks`` | This setting only affects debug builds (where |
| | ``NDEBUG`` is not defined). It defaults to ``on``. | | | ``NDEBUG`` is not defined). It defaults to ``on``. |
| | | | | |
@ -534,11 +526,6 @@ defines you can use to control the build.
| | checks in the storage, including logging of | | | checks in the storage, including logging of |
| | piece sorting. | | | piece sorting. |
+----------------------------------------+-------------------------------------------------+ +----------------------------------------+-------------------------------------------------+
| ``UNICODE`` | If building on windows this will make sure the |
| | UTF-8 strings in pathnames are converted into |
| | UTF-16 before they are passed to the file |
| | operations. |
+----------------------------------------+-------------------------------------------------+
| ``TORRENT_DISABLE_POOL_ALLOCATOR`` | Disables use of ``boost::pool<>``. | | ``TORRENT_DISABLE_POOL_ALLOCATOR`` | Disables use of ``boost::pool<>``. |
+----------------------------------------+-------------------------------------------------+ +----------------------------------------+-------------------------------------------------+
| ``TORRENT_DISABLE_MUTABLE_TORRENTS`` | Disables mutable torrent support (`BEP 38`_) | | ``TORRENT_DISABLE_MUTABLE_TORRENTS`` | Disables mutable torrent support (`BEP 38`_) |
@ -576,10 +563,6 @@ defines you can use to control the build.
| | disabled along with support for the extension | | | disabled along with support for the extension |
| | handskake (BEP 10). | | | handskake (BEP 10). |
+----------------------------------------+-------------------------------------------------+ +----------------------------------------+-------------------------------------------------+
| ``_UNICODE`` | On windows, this will cause the file IO |
| | use wide character API, to properly support |
| | non-ansi characters. |
+----------------------------------------+-------------------------------------------------+
| ``TORRENT_USE_INVARIANT_CHECKS`` | If defined to non-zero, this will enable | | ``TORRENT_USE_INVARIANT_CHECKS`` | If defined to non-zero, this will enable |
| | internal invariant checks in libtorrent. | | | internal invariant checks in libtorrent. |
| | The invariant checks can sometimes | | | The invariant checks can sometimes |

View File

@ -96,7 +96,7 @@ namespace libtorrent {
TORRENT_EXTRA_EXPORT std::string read_until(char const*& str, char delim TORRENT_EXTRA_EXPORT std::string read_until(char const*& str, char delim
, char const* end); , char const* end);
#if defined TORRENT_WINDOWS && TORRENT_USE_WSTRING #if defined TORRENT_WINDOWS
TORRENT_EXTRA_EXPORT std::wstring convert_to_wstring(std::string const& s); TORRENT_EXTRA_EXPORT std::wstring convert_to_wstring(std::string const& s);
TORRENT_EXTRA_EXPORT std::string convert_from_wstring(std::wstring const& s); TORRENT_EXTRA_EXPORT std::string convert_from_wstring(std::wstring const& s);
#endif #endif

View File

@ -172,7 +172,7 @@ namespace libtorrent {
// internal type alias export should be used at unit tests only // internal type alias export should be used at unit tests only
using native_path_string = using native_path_string =
#if TORRENT_USE_WSTRING && defined TORRENT_WINDOWS #if defined TORRENT_WINDOWS
std::wstring; std::wstring;
#else #else
std::string; std::string;
@ -181,12 +181,12 @@ namespace libtorrent {
// internal export should be used at unit tests only // internal export should be used at unit tests only
TORRENT_EXTRA_EXPORT native_path_string convert_to_native_path_string(std::string const& path); TORRENT_EXTRA_EXPORT native_path_string convert_to_native_path_string(std::string const& path);
// internal export should be used at unit tests only #if defined TORRENT_WINDOWS
TORRENT_EXTRA_EXPORT std::string convert_from_native_path(char const* s);
#if defined TORRENT_WINDOWS && TORRENT_USE_WSTRING
// internal export should be used at unit tests only // internal export should be used at unit tests only
TORRENT_EXTRA_EXPORT std::string convert_from_native_path(wchar_t const* s); TORRENT_EXTRA_EXPORT std::string convert_from_native_path(wchar_t const* s);
#else
// internal export should be used at unit tests only
TORRENT_EXTRA_EXPORT std::string convert_from_native_path(char const* s);
#endif #endif
TORRENT_EXTRA_EXPORT int bufs_size(span<iovec_t const> bufs); TORRENT_EXTRA_EXPORT int bufs_size(span<iovec_t const> bufs);

View File

@ -414,13 +414,9 @@ POSSIBILITY OF SUCH DAMAGE.
#define TORRENT_USE_LOCALE 0 #define TORRENT_USE_LOCALE 0
#endif #endif
#ifndef TORRENT_USE_WSTRING #if defined BOOST_NO_STD_WSTRING
#if !defined BOOST_NO_STD_WSTRING #error your C++ standard library appears to be missing std::wstring. This type is required on windows
#define TORRENT_USE_WSTRING 1 #endif
#else
#define TORRENT_USE_WSTRING 0
#endif // BOOST_NO_STD_WSTRING
#endif // TORRENT_USE_WSTRING
#ifndef TORRENT_HAS_FALLOCATE #ifndef TORRENT_HAS_FALLOCATE
#define TORRENT_HAS_FALLOCATE 1 #define TORRENT_HAS_FALLOCATE 1

View File

@ -423,9 +423,6 @@ namespace detail {
} }
#endif #endif
#if TORRENT_USE_WSTRING
// wstring versions
// all wstring APIs are deprecated since 0.16.11 // all wstring APIs are deprecated since 0.16.11
// instead, use the wchar -> utf8 conversion functions // instead, use the wchar -> utf8 conversion functions
// and pass in utf8 strings // and pass in utf8 strings
@ -473,7 +470,6 @@ namespace detail {
set_piece_hashes_deprecated(t, p, detail::nop, ec); set_piece_hashes_deprecated(t, p, detail::nop, ec);
} }
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
#endif // TORRENT_USE_WSTRING
} }

View File

@ -106,11 +106,7 @@ namespace libtorrent {
#ifdef TORRENT_WINDOWS #ifdef TORRENT_WINDOWS
HANDLE m_handle; HANDLE m_handle;
int m_inode; int m_inode;
#if TORRENT_USE_WSTRING
WIN32_FIND_DATAW m_fd; WIN32_FIND_DATAW m_fd;
#else
WIN32_FIND_DATAA m_fd;
#endif
#else #else
DIR* m_handle; DIR* m_handle;
// the dirent struct contains a zero-sized // the dirent struct contains a zero-sized

View File

@ -291,7 +291,6 @@ namespace libtorrent {
TORRENT_DEPRECATED TORRENT_DEPRECATED
void add_file(file_entry const& fe, char const* filehash = nullptr); void add_file(file_entry const& fe, char const* filehash = nullptr);
#if TORRENT_USE_WSTRING
// all wstring APIs are deprecated since 0.16.11 // all wstring APIs are deprecated since 0.16.11
// instead, use the wchar -> utf8 conversion functions // instead, use the wchar -> utf8 conversion functions
// and pass in utf8 strings // and pass in utf8 strings
@ -304,7 +303,6 @@ namespace libtorrent {
void set_name(std::wstring const& n); void set_name(std::wstring const& n);
void rename_file_deprecated(file_index_t index, std::wstring const& new_filename); void rename_file_deprecated(file_index_t index, std::wstring const& new_filename);
#endif // TORRENT_USE_WSTRING
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
// returns a list of file_slice objects representing the portions of // returns a list of file_slice objects representing the portions of

View File

@ -539,7 +539,6 @@ namespace libtorrent {
void load_country_db(char const* file); void load_country_db(char const* file);
TORRENT_DEPRECATED TORRENT_DEPRECATED
int as_for_ip(address const& addr); int as_for_ip(address const& addr);
#if TORRENT_USE_WSTRING
// all wstring APIs are deprecated since 0.16.11 // all wstring APIs are deprecated since 0.16.11
// instead, use the wchar -> utf8 conversion functions // instead, use the wchar -> utf8 conversion functions
// and pass in utf8 strings // and pass in utf8 strings
@ -547,7 +546,6 @@ namespace libtorrent {
void load_country_db(wchar_t const* file); void load_country_db(wchar_t const* file);
TORRENT_DEPRECATED TORRENT_DEPRECATED
void load_asnum_db(wchar_t const* file); void load_asnum_db(wchar_t const* file);
#endif // TORRENT_USE_WSTRING
// deprecated in 0.15 // deprecated in 0.15
// use load_state and save_state instead // use load_state and save_state instead

View File

@ -1254,7 +1254,6 @@ namespace libtorrent { namespace aux {
void rename_file(file_index_t index, std::string const& new_name) const; void rename_file(file_index_t index, std::string const& new_name) const;
#ifndef TORRENT_NO_DEPRECATE #ifndef TORRENT_NO_DEPRECATE
#if TORRENT_USE_WSTRING
// all wstring APIs are deprecated since 0.16.11 // all wstring APIs are deprecated since 0.16.11
// instead, use the wchar -> utf8 conversion functions // instead, use the wchar -> utf8 conversion functions
// and pass in utf8 strings // and pass in utf8 strings
@ -1262,7 +1261,6 @@ namespace libtorrent { namespace aux {
void move_storage(std::wstring const& save_path, int flags = 0) const; void move_storage(std::wstring const& save_path, int flags = 0) const;
TORRENT_DEPRECATED TORRENT_DEPRECATED
void rename_file(file_index_t index, std::wstring const& new_name) const; void rename_file(file_index_t index, std::wstring const& new_name) const;
#endif // TORRENT_USE_WSTRING
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
// Enables or disabled super seeding/initial seeding for this torrent. // Enables or disabled super seeding/initial seeding for this torrent.

View File

@ -163,7 +163,6 @@ namespace libtorrent {
TORRENT_DEPRECATED TORRENT_DEPRECATED
torrent_info(lazy_entry const& torrent_file, error_code& ec torrent_info(lazy_entry const& torrent_file, error_code& ec
, int flags = 0); , int flags = 0);
#if TORRENT_USE_WSTRING
// all wstring APIs are deprecated since 0.16.11 instead, use the wchar // all wstring APIs are deprecated since 0.16.11 instead, use the wchar
// -> utf8 conversion functions and pass in utf8 strings // -> utf8 conversion functions and pass in utf8 strings
TORRENT_DEPRECATED TORRENT_DEPRECATED
@ -171,7 +170,6 @@ namespace libtorrent {
, int flags = 0); , int flags = 0);
TORRENT_DEPRECATED TORRENT_DEPRECATED
explicit torrent_info(std::wstring const& filename, int flags = 0); explicit torrent_info(std::wstring const& filename, int flags = 0);
#endif // TORRENT_USE_WSTRING
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
// frees all storage associated with this torrent_info object // frees all storage associated with this torrent_info object
@ -220,13 +218,11 @@ namespace libtorrent {
m_files.rename_file(index, new_filename); m_files.rename_file(index, new_filename);
} }
#ifndef TORRENT_NO_DEPRECATE #ifndef TORRENT_NO_DEPRECATE
#if TORRENT_USE_WSTRING
// all wstring APIs are deprecated since 0.16.11 // all wstring APIs are deprecated since 0.16.11
// instead, use the wchar -> utf8 conversion functions // instead, use the wchar -> utf8 conversion functions
// and pass in utf8 strings // and pass in utf8 strings
TORRENT_DEPRECATED TORRENT_DEPRECATED
void rename_file(file_index_t index, std::wstring const& new_filename); void rename_file(file_index_t index, std::wstring const& new_filename);
#endif // TORRENT_USE_WSTRING
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
// Remaps the file storage to a new file layout. This can be used to, for // Remaps the file storage to a new file layout. This can be used to, for

View File

@ -35,10 +35,6 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/export.hpp" #include "libtorrent/export.hpp"
// on windows we need these functions for
// convert_to_native and convert_from_native
#if TORRENT_USE_WSTRING || defined TORRENT_WINDOWS
#include <cstdint> #include <cstdint>
#include <string> #include <string>
#include <cwchar> #include <cwchar>
@ -84,6 +80,5 @@ namespace libtorrent {
TORRENT_EXTRA_EXPORT std::pair<std::int32_t, int> TORRENT_EXTRA_EXPORT std::pair<std::int32_t, int>
parse_utf8_codepoint(char const* str, int len); parse_utf8_codepoint(char const* str, int len);
} }
#endif // !BOOST_NO_STD_WSTRING
#endif #endif

View File

@ -62,13 +62,8 @@ namespace libtorrent {
{ {
#ifdef TORRENT_WINDOWS #ifdef TORRENT_WINDOWS
WIN32_FILE_ATTRIBUTE_DATA attr; WIN32_FILE_ATTRIBUTE_DATA attr;
#if TORRENT_USE_WSTRING
std::wstring path = convert_to_wstring(p); std::wstring path = convert_to_wstring(p);
GetFileAttributesExW(path.c_str(), GetFileExInfoStandard, &attr); GetFileAttributesExW(path.c_str(), GetFileExInfoStandard, &attr);
#else
std::string path = convert_to_native(p);
GetFileAttributesExA(path.c_str(), GetFileExInfoStandard, &attr);
#endif // TORRENT_USE_WSTRING
if (attr.dwFileAttributes == INVALID_FILE_ATTRIBUTES) return 0; if (attr.dwFileAttributes == INVALID_FILE_ATTRIBUTES) return 0;
if (attr.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) return file_storage::attribute_hidden; if (attr.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) return file_storage::attribute_hidden;
return 0; return 0;
@ -198,7 +193,6 @@ namespace libtorrent {
} // anonymous namespace } // anonymous namespace
#if TORRENT_USE_WSTRING
#ifndef TORRENT_NO_DEPRECATE #ifndef TORRENT_NO_DEPRECATE
void add_files(file_storage& fs, std::wstring const& wfile void add_files(file_storage& fs, std::wstring const& wfile
@ -231,7 +225,6 @@ namespace libtorrent {
set_piece_hashes(t, utf8, f, ec); set_piece_hashes(t, utf8, f, ec);
} }
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
#endif // TORRENT_USE_WSTRING
void add_files(file_storage& fs, std::string const& file void add_files(file_storage& fs, std::string const& file
, std::function<bool(std::string)> p, std::uint32_t flags) , std::function<bool(std::string)> p, std::uint32_t flags)

View File

@ -499,7 +499,7 @@ namespace libtorrent {
return url.substr(pos, find(url, "&", pos) - pos); return url.substr(pos, find(url, "&", pos) - pos);
} }
#if defined TORRENT_WINDOWS && TORRENT_USE_WSTRING #if defined TORRENT_WINDOWS
std::wstring convert_to_wstring(std::string const& s) std::wstring convert_to_wstring(std::string const& s)
{ {
error_code ec; error_code ec;

View File

@ -326,16 +326,6 @@ done:
# endif # endif
#endif #endif
#if defined TORRENT_WINDOWS && defined UNICODE && !TORRENT_USE_WSTRING
#ifdef _MSC_VER
#pragma message ( "wide character support not available. Files will be saved using narrow string names" )
#else
#warning "wide character support not available. Files will be saved using narrow string names"
#endif
#endif // TORRENT_WINDOWS
namespace libtorrent { namespace libtorrent {
static_assert((open_mode_t::rw_mask & open_mode_t::sparse) == open_mode_t::none, "internal flags error"); static_assert((open_mode_t::rw_mask & open_mode_t::sparse) == open_mode_t::none, "internal flags error");
@ -364,19 +354,13 @@ static_assert((open_mode_t::sparse & open_mode_t::attribute_mask) == open_mode_t
#ifdef TORRENT_WINDOWS #ifdef TORRENT_WINDOWS
m_inode = 0; m_inode = 0;
#if TORRENT_USE_WSTRING m_handle = FindFirstFileW(f.c_str(), &m_fd);
#define FindFirstFile_ FindFirstFileW
#else
#define FindFirstFile_ FindFirstFileA
#endif
m_handle = FindFirstFile_(f.c_str(), &m_fd);
if (m_handle == INVALID_HANDLE_VALUE) if (m_handle == INVALID_HANDLE_VALUE)
{ {
ec.assign(GetLastError(), system_category()); ec.assign(GetLastError(), system_category());
m_done = true; m_done = true;
return; return;
} }
#undef FindFirstFile_
#else #else
std::memset(&m_dirent, 0, sizeof(dirent)); std::memset(&m_dirent, 0, sizeof(dirent));
@ -426,19 +410,13 @@ static_assert((open_mode_t::sparse & open_mode_t::attribute_mask) == open_mode_t
{ {
ec.clear(); ec.clear();
#ifdef TORRENT_WINDOWS #ifdef TORRENT_WINDOWS
#if TORRENT_USE_WSTRING if (FindNextFileW(m_handle, &m_fd) == 0)
#define FindNextFile_ FindNextFileW
#else
#define FindNextFile_ FindNextFileA
#endif
if (FindNextFile_(m_handle, &m_fd) == 0)
{ {
m_done = true; m_done = true;
int err = GetLastError(); int err = GetLastError();
if (err != ERROR_NO_MORE_FILES) if (err != ERROR_NO_MORE_FILES)
ec.assign(err, system_category()); ec.assign(err, system_category());
} }
#undef FindNextFile_
++m_inode; ++m_inode;
#else #else
dirent* dummy; dirent* dummy;
@ -552,12 +530,6 @@ static_assert((open_mode_t::sparse & open_mode_t::attribute_mask) == open_mode_t
FILE_ATTRIBUTE_HIDDEN, // hidden + executable FILE_ATTRIBUTE_HIDDEN, // hidden + executable
}}; }};
#if TORRENT_USE_WSTRING
#define CreateFile_ CreateFileW
#else
#define CreateFile_ CreateFileA
#endif
TORRENT_ASSERT(static_cast<std::size_t>(mode & open_mode_t::rw_mask) < mode_array.size()); TORRENT_ASSERT(static_cast<std::size_t>(mode & open_mode_t::rw_mask) < mode_array.size());
win_open_mode_t const& m = mode_array[static_cast<std::size_t>(mode & open_mode_t::rw_mask)]; win_open_mode_t const& m = mode_array[static_cast<std::size_t>(mode & open_mode_t::rw_mask)];
DWORD a = attrib_array[static_cast<std::size_t>(mode & open_mode_t::attribute_mask) >> 12]; DWORD a = attrib_array[static_cast<std::size_t>(mode & open_mode_t::attribute_mask) >> 12];
@ -571,12 +543,10 @@ static_assert((open_mode_t::sparse & open_mode_t::attribute_mask) == open_mode_t
| FILE_FLAG_OVERLAPPED | FILE_FLAG_OVERLAPPED
| (test(mode & open_mode_t::no_cache) ? FILE_FLAG_WRITE_THROUGH : 0); | (test(mode & open_mode_t::no_cache) ? FILE_FLAG_WRITE_THROUGH : 0);
handle_type handle = CreateFile_(file_path.c_str(), m.rw_mode handle_type handle = CreateFileW(file_path.c_str(), m.rw_mode
, test(mode & open_mode_t::lock_file) ? FILE_SHARE_READ : FILE_SHARE_READ | FILE_SHARE_WRITE , test(mode & open_mode_t::lock_file) ? FILE_SHARE_READ : FILE_SHARE_READ | FILE_SHARE_WRITE
, 0, m.create_mode, flags, 0); , 0, m.create_mode, flags, 0);
#undef CreateFile_
if (handle == INVALID_HANDLE_VALUE) if (handle == INVALID_HANDLE_VALUE)
{ {
ec.assign(GetLastError(), system_category()); ec.assign(GetLastError(), system_category());

View File

@ -347,7 +347,6 @@ namespace {
, fe.symlink_path); , fe.symlink_path);
} }
#if TORRENT_USE_WSTRING
void file_storage::set_name(std::wstring const& n) void file_storage::set_name(std::wstring const& n)
{ {
m_name = wchar_utf8(n); m_name = wchar_utf8(n);
@ -369,7 +368,6 @@ namespace {
{ {
rename_file_deprecated(index, new_filename); rename_file_deprecated(index, new_filename);
} }
#endif // TORRENT_USE_WSTRING
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
void file_storage::rename_file(file_index_t const index void file_storage::rename_file(file_index_t const index

View File

@ -134,10 +134,10 @@ namespace libtorrent {
return int(size); return int(size);
} }
std::string convert_from_native_path(char const* s) { return convert_from_native(s); } #if defined TORRENT_WINDOWS
#if defined TORRENT_WINDOWS && TORRENT_USE_WSTRING
std::string convert_from_native_path(wchar_t const* s) { return convert_from_wstring(s); } std::string convert_from_native_path(wchar_t const* s) { return convert_from_wstring(s); }
#else
std::string convert_from_native_path(char const* s) { return convert_from_native(s); }
#endif #endif
template <typename T> template <typename T>
@ -170,20 +170,16 @@ namespace libtorrent {
prepared_path = path; prepared_path = path;
else else
{ {
std::string sep_path { path }; std::string sep_path = path;
std::replace(sep_path.begin(), sep_path.end(), '/', '\\'); std::replace(sep_path.begin(), sep_path.end(), '/', '\\');
prepared_path = "\\\\?\\" + (is_complete(sep_path) ? sep_path : combine_path(current_working_directory(), sep_path)); prepared_path = "\\\\?\\" + (is_complete(sep_path) ? sep_path : complete(sep_path));
} }
#else #else
std::string prepared_path { path }; std::string prepared_path = path;
std::replace(prepared_path.begin(), prepared_path.end(), '/', '\\'); std::replace(prepared_path.begin(), prepared_path.end(), '/', '\\');
#endif #endif
#if TORRENT_USE_WSTRING
return convert_to_wstring(prepared_path); return convert_to_wstring(prepared_path);
#else
return convert_to_native(prepared_path);
#endif
#else // TORRENT_WINDOWS #else // TORRENT_WINDOWS
return convert_to_native(path); return convert_to_native(path);
#endif #endif
@ -198,16 +194,9 @@ namespace libtorrent {
TORRENT_UNUSED(flags); TORRENT_UNUSED(flags);
#if TORRENT_USE_WSTRING
#define CreateFile_ CreateFileW
#else
#define CreateFile_ CreateFileA
#endif
// in order to open a directory, we need the FILE_FLAG_BACKUP_SEMANTICS // in order to open a directory, we need the FILE_FLAG_BACKUP_SEMANTICS
HANDLE h = CreateFile_(f.c_str(), 0, FILE_SHARE_DELETE | FILE_SHARE_READ HANDLE h = CreateFileW(f.c_str(), 0, FILE_SHARE_DELETE | FILE_SHARE_READ
| FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nullptr); | FILE_SHARE_WRITE, nullptr, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, nullptr);
#undef CreateFile_
if (h == INVALID_HANDLE_VALUE) if (h == INVALID_HANDLE_VALUE)
{ {
ec.assign(GetLastError(), system_category()); ec.assign(GetLastError(), system_category());
@ -273,8 +262,8 @@ namespace libtorrent {
native_path_string f1 = convert_to_native_path_string(inf); native_path_string f1 = convert_to_native_path_string(inf);
native_path_string f2 = convert_to_native_path_string(newf); native_path_string f2 = convert_to_native_path_string(newf);
#if TORRENT_USE_WSTRING && defined TORRENT_WINDOWS #if defined TORRENT_WINDOWS
#define RenameFunction_ _wrename #define RenameFunction_ ::_wrename
#else #else
#define RenameFunction_ ::rename #define RenameFunction_ ::rename
#endif #endif
@ -308,16 +297,9 @@ namespace libtorrent {
native_path_string n = convert_to_native_path_string(f); native_path_string n = convert_to_native_path_string(f);
#ifdef TORRENT_WINDOWS #ifdef TORRENT_WINDOWS
#if TORRENT_USE_WSTRING if (CreateDirectoryW(n.c_str(), 0) == 0
#define CreateDirectory_ CreateDirectoryW
#else
#define CreateDirectory_ CreateDirectoryA
#endif // TORRENT_USE_WSTRING
if (CreateDirectory_(n.c_str(), 0) == 0
&& GetLastError() != ERROR_ALREADY_EXISTS) && GetLastError() != ERROR_ALREADY_EXISTS)
ec.assign(GetLastError(), system_category()); ec.assign(GetLastError(), system_category());
#undef CreateDirectory_
#else #else
int ret = ::mkdir(n.c_str(), 0777); int ret = ::mkdir(n.c_str(), 0777);
if (ret < 0 && errno != EEXIST) if (ret < 0 && errno != EEXIST)
@ -332,18 +314,12 @@ namespace libtorrent {
native_path_string n_link = convert_to_native_path_string(link); native_path_string n_link = convert_to_native_path_string(link);
#ifdef TORRENT_WINDOWS #ifdef TORRENT_WINDOWS
#if TORRENT_USE_WSTRING BOOL ret = CreateHardLinkW(n_link.c_str(), n_exist.c_str(), nullptr);
#define CreateHardLink_ CreateHardLinkW
#else
#define CreateHardLink_ CreateHardLinkA
#endif
BOOL ret = CreateHardLink_(n_link.c_str(), n_exist.c_str(), nullptr);
if (ret) if (ret)
{ {
ec.clear(); ec.clear();
return; return;
} }
#undef CreateHardLink_
// something failed. Does the filesystem not support hard links? // something failed. Does the filesystem not support hard links?
// TODO: 3 find out what error code is reported when the filesystem // TODO: 3 find out what error code is reported when the filesystem
// does not support hard links. // does not support hard links.
@ -425,15 +401,9 @@ namespace libtorrent {
native_path_string f2 = convert_to_native_path_string(newf); native_path_string f2 = convert_to_native_path_string(newf);
#ifdef TORRENT_WINDOWS #ifdef TORRENT_WINDOWS
#if TORRENT_USE_WSTRING
#define CopyFile_ CopyFileW
#else
#define CopyFile_ CopyFileA
#endif
if (CopyFile_(f1.c_str(), f2.c_str(), false) == 0) if (CopyFileW(f1.c_str(), f2.c_str(), false) == 0)
ec.assign(GetLastError(), system_category()); ec.assign(GetLastError(), system_category());
#undef CopyFile_
#elif defined __APPLE__ && defined __MACH__ && MAC_OS_X_VERSION_MIN_REQUIRED >= 1050 #elif defined __APPLE__ && defined __MACH__ && MAC_OS_X_VERSION_MIN_REQUIRED >= 1050
// this only works on 10.5 // this only works on 10.5
@ -756,12 +726,8 @@ namespace libtorrent {
std::string current_working_directory() std::string current_working_directory()
{ {
#if defined TORRENT_WINDOWS #if defined TORRENT_WINDOWS
#if TORRENT_USE_WSTRING
#define GetCurrentDir_ ::_wgetcwd #define GetCurrentDir_ ::_wgetcwd
#else #else
#define GetCurrentDir_ ::_getcwd
#endif // TORRENT_USE_WSTRING
#else
#define GetCurrentDir_ ::getcwd #define GetCurrentDir_ ::getcwd
#endif #endif
auto cwd = GetCurrentDir_(nullptr, 0); auto cwd = GetCurrentDir_(nullptr, 0);
@ -875,25 +841,17 @@ namespace libtorrent {
f.back() == '/' || f.back() == '/' ||
f.back() == '\\' f.back() == '\\'
)) f.pop_back(); )) f.pop_back();
#if TORRENT_USE_WSTRING
#define DeleteFile_ DeleteFileW if (DeleteFileW(f.c_str()) == 0)
#define RemoveDirectory_ RemoveDirectoryW
#else
#define DeleteFile_ DeleteFileA
#define RemoveDirectory_ RemoveDirectoryA
#endif
if (DeleteFile_(f.c_str()) == 0)
{ {
if (GetLastError() == ERROR_ACCESS_DENIED) if (GetLastError() == ERROR_ACCESS_DENIED)
{ {
if (RemoveDirectory_(f.c_str()) != 0) if (RemoveDirectoryW(f.c_str()) != 0)
return; return;
} }
ec.assign(GetLastError(), system_category()); ec.assign(GetLastError(), system_category());
return; return;
} }
#undef DeleteFile_
#undef RemoveDirectory_
#else // TORRENT_WINDOWS #else // TORRENT_WINDOWS
if (::remove(f.c_str()) < 0) if (::remove(f.c_str()) < 0)
{ {

View File

@ -697,10 +697,8 @@ namespace {
int session_handle::as_for_ip(address const&) int session_handle::as_for_ip(address const&)
{ return 0; } { return 0; }
#if TORRENT_USE_WSTRING
void session_handle::load_asnum_db(wchar_t const*) {} void session_handle::load_asnum_db(wchar_t const*) {}
void session_handle::load_country_db(wchar_t const*) {} void session_handle::load_country_db(wchar_t const*) {}
#endif // TORRENT_USE_WSTRING
void session_handle::load_state(entry const& ses_state void session_handle::load_state(entry const& ses_state
, std::uint32_t const flags) , std::uint32_t const flags)

View File

@ -199,12 +199,8 @@ namespace libtorrent {
#ifdef TORRENT_WINDOWS #ifdef TORRENT_WINDOWS
// don't do full file allocations on network drives // don't do full file allocations on network drives
#if TORRENT_USE_WSTRING
std::wstring file_name = convert_to_wstring(m_save_path); std::wstring file_name = convert_to_wstring(m_save_path);
int const drive_type = GetDriveTypeW(file_name.c_str()); int const drive_type = GetDriveTypeW(file_name.c_str());
#else
int const drive_type = GetDriveTypeA(m_save_path.c_str());
#endif
if (drive_type == DRIVE_REMOTE) if (drive_type == DRIVE_REMOTE)
m_allocate_files = false; m_allocate_files = false;

View File

@ -225,7 +225,6 @@ namespace libtorrent {
} }
#endif #endif
#if TORRENT_USE_WSTRING
#ifndef TORRENT_NO_DEPRECATE #ifndef TORRENT_NO_DEPRECATE
void torrent_handle::move_storage( void torrent_handle::move_storage(
std::wstring const& save_path, int flags) const std::wstring const& save_path, int flags) const
@ -238,7 +237,6 @@ namespace libtorrent {
async_call(&torrent::rename_file, index, wchar_utf8(new_name)); async_call(&torrent::rename_file, index, wchar_utf8(new_name));
} }
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
#endif // TORRENT_USE_WSTRING
void torrent_handle::rename_file(file_index_t index, std::string const& new_name) const void torrent_handle::rename_file(file_index_t index, std::string const& new_name) const
{ {

View File

@ -822,7 +822,6 @@ namespace libtorrent {
INVARIANT_CHECK; INVARIANT_CHECK;
} }
#if TORRENT_USE_WSTRING
#ifndef TORRENT_NO_DEPRECATE #ifndef TORRENT_NO_DEPRECATE
torrent_info::torrent_info(std::wstring const& filename torrent_info::torrent_info(std::wstring const& filename
, int const flags) , int const flags)
@ -849,7 +848,6 @@ namespace libtorrent {
m_files.rename_file_deprecated(index, new_filename); m_files.rename_file_deprecated(index, new_filename);
} }
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
#endif // TORRENT_USE_WSTRING
#endif #endif
torrent_info::torrent_info(bdecode_node const& torrent_file torrent_info::torrent_info(bdecode_node const& torrent_file
@ -889,7 +887,6 @@ namespace libtorrent {
INVARIANT_CHECK; INVARIANT_CHECK;
} }
#if TORRENT_USE_WSTRING
#ifndef TORRENT_NO_DEPRECATE #ifndef TORRENT_NO_DEPRECATE
torrent_info::torrent_info(std::wstring const& filename torrent_info::torrent_info(std::wstring const& filename
, error_code& ec , error_code& ec
@ -907,7 +904,6 @@ namespace libtorrent {
INVARIANT_CHECK; INVARIANT_CHECK;
} }
#endif // TORRENT_NO_DEPRECATE #endif // TORRENT_NO_DEPRECATE
#endif // TORRENT_USE_WSTRING
// constructor used for creating new torrents // constructor used for creating new torrents
// will not contain any hashes, comments, creation date // will not contain any hashes, comments, creation date

View File

@ -32,10 +32,6 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/config.hpp" #include "libtorrent/config.hpp"
// on windows we need these functions for
// convert_to_native and convert_from_native
#if TORRENT_USE_WSTRING || defined TORRENT_WINDOWS
#include <iterator> #include <iterator>
#include "libtorrent/utf8.hpp" #include "libtorrent/utf8.hpp"
#include "libtorrent/assert.hpp" #include "libtorrent/assert.hpp"
@ -307,4 +303,3 @@ namespace {
#pragma clang diagnostic pop #pragma clang diagnostic pop
#endif #endif
#endif

View File

@ -223,16 +223,9 @@ void change_directory(std::string const& f, error_code& ec)
ec.clear(); ec.clear();
#ifdef TORRENT_WINDOWS #ifdef TORRENT_WINDOWS
#if TORRENT_USE_WSTRING
#define SetCurrentDirectory_ SetCurrentDirectoryW
native_path_string const n = convert_to_wstring(f); native_path_string const n = convert_to_wstring(f);
#else if (SetCurrentDirectoryW(n.c_str()) == 0)
#define SetCurrentDirectory_ SetCurrentDirectoryA
native_path_string const n = convert_to_native(f);
#endif // TORRENT_USE_WSTRING
if (SetCurrentDirectory_(n.c_str()) == 0)
ec.assign(GetLastError(), system_category()); ec.assign(GetLastError(), system_category());
#undef SetCurrentDirectory_
#else #else
native_path_string const n = convert_to_native_path_string(f); native_path_string const n = convert_to_native_path_string(f);
int ret = ::chdir(n.c_str()); int ret = ::chdir(n.c_str());