diff --git a/OSBindings/SDL/main.cpp b/OSBindings/SDL/main.cpp index c8092230b..e1a608e97 100644 --- a/OSBindings/SDL/main.cpp +++ b/OSBindings/SDL/main.cpp @@ -236,7 +236,7 @@ ParsedArguments parse_arguments(int argc, char *argv[]) { // --flag sets a Boolean option to true. // --flag=value sets the value for a list option. // name sets the file name to load. - + // Anything starting with a dash always makes a selection; otherwise it's a file name. if(arg[0] == '-') { while(*arg == '-') arg++; @@ -268,7 +268,7 @@ std::string final_path_component(const std::string &path) { // Find the last slash... auto final_slash = path.find_last_of("/\\"); - + // If no slash was found at all, return the whole path. if(final_slash == std::string::npos) { return path; @@ -287,7 +287,7 @@ std::string final_path_component(const std::string &path) { Executes @c command and returns its STDOUT. */ std::string system_get(const char *command) { - std::unique_ptr pipe(popen(command, "r"), pclose); + std::unique_ptr pipe(popen(command, "r"), pclose); if(!pipe) return ""; std::string result; @@ -321,7 +321,7 @@ int main(int argc, char *argv[]) { std::cout << machine_options.first << ":" << std::endl; for(const auto &option: machine_options.second) { std::cout << '\t' << "--" << option->short_name; - + Configurable::ListOption *list_option = dynamic_cast(option.get()); if(list_option) { std::cout << "={"; @@ -500,7 +500,7 @@ int main(int argc, char *argv[]) { if(configurable_device) { // Establish user-friendly options by default. configurable_device->set_selections(configurable_device->get_user_friendly_selections()); - + // Consider transcoding any list selections that map to Boolean options. for(const auto &option: configurable_device->get_options()) { // Check for a corresponding selection. @@ -635,9 +635,14 @@ int main(int argc, char *argv[]) { memcpy(&pixels[(window_height - 1 - y)*proportional_width*4], swap_buffer.data(), swap_buffer.size()); } - // Pick the directory for images. Try `xdg-user-dir PICTURES` first; failing that - // fall back on the HOME directory. + // Pick the directory for images. Try `xdg-user-dir PICTURES` first. std::string target_directory = system_get("xdg-user-dir PICTURES"); + + // Make sure there are no newlines. + target_directory.erase(std::remove(target_directory.begin(), target_directory.end(), '\n'), target_directory.end()); + target_directory.erase(std::remove(target_directory.begin(), target_directory.end(), '\r'), target_directory.end()); + + // Fall back on the HOME directory if necessary. if(target_directory.empty()) target_directory = getenv("HOME"); // Find the first available name of the form ~/clk-screenshot-.bmp.