diff --git a/src/command_local.cc b/src/command_local.cc index 9b043368..ecfe267b 100644 --- a/src/command_local.cc +++ b/src/command_local.cc @@ -237,9 +237,9 @@ initialize_command_local() { CMD2_VAR_VALUE ("system.file.split_size", -1); CMD2_VAR_STRING ("system.file.split_suffix", ".part"); - CMD2_ANY ("system.file_status_cache.size", tr1::bind(&utils::FileStatusCache::size, - (utils::FileStatusCache::base_type*)control->core()->file_status_cache())); - CMD2_ANY_V ("system.file_status_cache.prune", tr1::bind(&utils::FileStatusCache::prune, control->core()->file_status_cache())); + CMD2_ANY ("system.file_status_cache.size", std::bind(&utils::FileStatusCache::size, + (utils::FileStatusCache::base_type*)control->core()->file_status_cache())); + CMD2_ANY_V ("system.file_status_cache.prune", std::bind(&utils::FileStatusCache::prune, control->core()->file_status_cache())); CMD2_VAR_BOOL ("file.prioritize_toc", 0); CMD2_VAR_LIST ("file.prioritize_toc.first"); diff --git a/src/command_logging.cc b/src/command_logging.cc index b1896f2f..77648831 100644 --- a/src/command_logging.cc +++ b/src/command_logging.cc @@ -55,9 +55,16 @@ #include "command_helpers.h" static const int log_flag_use_gz = 0x1; +static const int log_flag_append_pid = 0x2; + +void +log_add_group_output_str(const char* group_name, const char* output_id) { + int log_group = torrent::option_find_string(torrent::OPTION_LOG_GROUP, group_name); + torrent::log_add_group_output(log_group, output_id); +} torrent::Object -apply_log_open_generic(int output_flags, const torrent::Object::list_type& args) { +apply_log_open(int output_flags, const torrent::Object::list_type& args) { if (args.size() < 2) throw torrent::input_error("Invalid number of arguments."); @@ -66,15 +73,20 @@ apply_log_open_generic(int output_flags, const torrent::Object::list_type& args) std::string output_id = (itr++)->as_string(); std::string file_name = rak::path_expand((itr++)->as_string()); + if ((output_flags & log_flag_append_pid)) { + char buffer[32]; + snprintf(buffer, 32, ".%li", (long)getpid()); + + file_name += buffer; + } + if ((output_flags & log_flag_use_gz)) torrent::log_open_gz_file_output(output_id.c_str(), file_name.c_str()); else torrent::log_open_file_output(output_id.c_str(), file_name.c_str()); - while (itr != args.end()) { - int log_group = torrent::option_find_string(torrent::OPTION_LOG_GROUP, (itr++)->as_string().c_str()); - torrent::log_add_group_output(log_group, output_id.c_str()); - } + while (itr != args.end()) + log_add_group_output_str((itr++)->as_string().c_str(), output_id.c_str()); return torrent::Object(); } @@ -84,10 +96,8 @@ apply_log_add_output(const torrent::Object::list_type& args) { if (args.size() != 2) throw torrent::input_error("Invalid number of arguments."); - int log_group = torrent::option_find_string(torrent::OPTION_LOG_GROUP, args.front().as_string().c_str()); - std::string output_id = args.back().as_string().c_str(); - - torrent::log_add_group_output(log_group, output_id.c_str()); + log_add_group_output_str(args.front().as_string().c_str(), + args.back().as_string().c_str()); return torrent::Object(); } @@ -152,8 +162,10 @@ log_vmmap_dump(const std::string& str) { void initialize_command_logging() { - CMD2_ANY_LIST ("log.open_file", std::bind(&apply_log_open_generic, 0, std::placeholders::_2)); - CMD2_ANY_LIST ("log.open_gz_file", std::bind(&apply_log_open_generic, log_flag_use_gz, std::placeholders::_2)); + CMD2_ANY_LIST ("log.open_file", std::bind(&apply_log_open, 0, std::placeholders::_2)); + CMD2_ANY_LIST ("log.open_gz_file", std::bind(&apply_log_open, log_flag_use_gz, std::placeholders::_2)); + CMD2_ANY_LIST ("log.open_file_pid", std::bind(&apply_log_open, log_flag_append_pid, std::placeholders::_2)); + CMD2_ANY_LIST ("log.open_gz_file_pid", std::bind(&apply_log_open, log_flag_append_pid | log_flag_use_gz, std::placeholders::_2)); CMD2_ANY_LIST ("log.add_output", std::bind(&apply_log_add_output, std::placeholders::_2));