Added support for wide characters when creating named resources in operating systems with wide-char APIs (at this time, Windows).

Fixes #93 and fixes #134.
This commit is contained in:
Ion Gaztañaga
2021-01-31 00:27:15 +01:00
parent 8f63c6054c
commit 140b50efb3
59 changed files with 2591 additions and 405 deletions

View File

@@ -25,10 +25,11 @@
#include <memory>
#include <iostream>
#include <vector>
#include <stdexcept>
#include <exception>
#include <limits>
#include "get_process_id_name.hpp"
#include "named_creation_template.hpp"
////////////////////////////////////////////////////////////////////////////////
// //
@@ -350,25 +351,86 @@ bool test_multi_sender_receiver()
return ret;
}
class msg_queue_named_test_wrapper
: public test::named_sync_deleter<message_queue>, public message_queue
{
public:
msg_queue_named_test_wrapper(create_only_t)
: message_queue(create_only, test::get_process_id_name(), 10, 10)
{}
msg_queue_named_test_wrapper(open_only_t)
: message_queue(open_only, test::get_process_id_name())
{}
msg_queue_named_test_wrapper(open_or_create_t)
: message_queue(open_or_create, test::get_process_id_name(), 10, 10)
{}
~msg_queue_named_test_wrapper()
{}
};
#if defined(BOOST_INTERPROCESS_WCHAR_NAMED_RESOURCES)
class msg_queue_named_test_wrapper_w
: public test::named_sync_deleter_w<message_queue>, public message_queue
{
public:
template <class CharT>
msg_queue_named_test_wrapper_w(create_only_t)
: message_queue(create_only, test::get_process_id_wname(), 10, 10)
{}
msg_queue_named_test_wrapper_w(open_only_t)
: message_queue(open_only, test::get_process_id_wname())
{}
msg_queue_named_test_wrapper_w(open_or_create_t)
: message_queue(open_or_create, test::get_process_id_wname(), 10, 10)
{}
~msg_queue_named_test_wrapper_w()
{}
};
#endif //defined(BOOST_INTERPROCESS_WCHAR_NAMED_RESOURCES)
int main ()
{
if(!test_priority_order()){
return 1;
}
int ret = 0;
try{
message_queue::remove(test::get_process_id_name());
test::test_named_creation<msg_queue_named_test_wrapper>();
#if defined(BOOST_INTERPROCESS_WCHAR_NAMED_RESOURCES)
test::test_named_creation<msg_queue_named_test_wrapper>();
#endif
if(!test_serialize_db()){
return 1;
}
if(!test_priority_order()){
return 1;
}
if(!test_buffer_overflow()){
return 1;
}
if(!test_serialize_db()){
return 1;
}
if(!test_multi_sender_receiver()){
return 1;
}
if(!test_buffer_overflow()){
return 1;
}
return 0;
if(!test_multi_sender_receiver()){
return 1;
}
}
catch (std::exception &ex) {
std::cout << ex.what() << std::endl;
ret = 1;
}
message_queue::remove(test::get_process_id_name());
return ret;
}