Skip to content
Snippets Groups Projects
Select Git revision
  • 459a76452bf547242b742a541eccd43e6a69afe1
  • master default protected
  • polkadart-stuff
  • dev
  • provider-to-riverpod
  • implementLightnode
  • subscribesSplit
  • hugo_RML16
  • refactorOnboardingSlideshow
  • duniterV1Latest
  • scanNetwork
  • dubp_rs
  • v0.2.0+112
  • v0.1.29+111
  • v0.1.28+109
  • v0.1.27+108
  • v0.1.26+107
  • v0.1.25+106
  • v0.1.25+105
  • v0.1.24+102
  • v0.1.23+101
  • v0.1.22+100
  • v0.1.22+99
  • v0.1.21+98
  • v0.1.21+97
  • v0.1.21+96
  • v0.1.21+95
  • v0.1.21+94
  • v0.1.21+93
  • v0.1.20+92
  • v0.1.19+91
  • v0.1.18+90
32 results

utils.cpp

Blame
  • utils.cpp 1.61 KiB
    #include "utils.h"
    
    #include <flutter_windows.h>
    #include <io.h>
    #include <stdio.h>
    #include <windows.h>
    
    #include <iostream>
    
    void CreateAndAttachConsole() {
      if (::AllocConsole()) {
        FILE *unused;
        if (freopen_s(&unused, "CONOUT$", "w", stdout)) {
          _dup2(_fileno(stdout), 1);
        }
        if (freopen_s(&unused, "CONOUT$", "w", stderr)) {
          _dup2(_fileno(stdout), 2);
        }
        std::ios::sync_with_stdio();
        FlutterDesktopResyncOutputStreams();
      }
    }
    
    std::vector<std::string> GetCommandLineArguments() {
      // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use.
      int argc;
      wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc);
      if (argv == nullptr) {
        return std::vector<std::string>();
      }
    
      std::vector<std::string> command_line_arguments;
    
      // Skip the first argument as it's the binary name.
      for (int i = 1; i < argc; i++) {
        command_line_arguments.push_back(Utf8FromUtf16(argv[i]));
      }
    
      ::LocalFree(argv);
    
      return command_line_arguments;
    }
    
    std::string Utf8FromUtf16(const wchar_t* utf16_string) {
      if (utf16_string == nullptr) {
        return std::string();
      }
      int target_length = ::WideCharToMultiByte(
          CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
          -1, nullptr, 0, nullptr, nullptr);
      if (target_length == 0) {
        return std::string();
      }
      std::string utf8_string;
      utf8_string.resize(target_length);
      int converted_length = ::WideCharToMultiByte(
          CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string,
          -1, utf8_string.data(),
          target_length, nullptr, nullptr);
      if (converted_length == 0) {
        return std::string();
      }
      return utf8_string;
    }