mirror of
https://github.com/TomHarte/CLK.git
synced 2025-01-11 08:30:55 +00:00
Ensure that the output of xdg-user-dir
is properly filtered.
This commit is contained in:
parent
34aa78b7ce
commit
99c770eab4
@ -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<FILE, decltype((pclose))> pipe(popen(command, "r"), pclose);
|
||||
std::unique_ptr<FILE, decltype((pclose))> 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<Configurable::ListOption *>(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-<number>.bmp.
|
||||
|
Loading…
x
Reference in New Issue
Block a user