mirror of
https://github.com/stedolan/jq.git
synced 2024-05-11 05:55:39 +00:00
Fix #811: use CommandLineToArgvW() and _wfopen()
This commit is contained in:
23
main.c
23
main.c
@@ -6,6 +6,15 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#include <processenv.h>
|
||||
#include <shellapi.h>
|
||||
#include <wchar.h>
|
||||
#include <wtypes.h>
|
||||
#endif
|
||||
|
||||
#include "compile.h"
|
||||
#include "jv.h"
|
||||
#include "jq.h"
|
||||
@@ -165,6 +174,20 @@ int main(int argc, char* argv[]) {
|
||||
int badwrite;
|
||||
jv program_arguments = jv_array();
|
||||
|
||||
#ifdef WIN32
|
||||
int wargc;
|
||||
wchar_t **wargv = CommandLineToArgvW(GetCommandLineW(), &wargc);
|
||||
assert(wargc == argc);
|
||||
size_t arg_sz;
|
||||
for (int i = 0; i < argc; i++) {
|
||||
argv[i] = alloca((arg_sz = WideCharToMultiByte(CP_UTF8,
|
||||
0,
|
||||
wargv[i],
|
||||
-1, 0, 0, 0, 0)));
|
||||
WideCharToMultiByte(CP_UTF8, 0, wargv[i], -1, argv[i], arg_sz, 0, 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (argc) progname = argv[0];
|
||||
|
||||
jq = jq_init();
|
||||
|
21
util.c
21
util.c
@@ -32,11 +32,32 @@ void *alloca (size_t);
|
||||
#include <pwd.h>
|
||||
#endif
|
||||
|
||||
#ifdef WIN32
|
||||
#include <windows.h>
|
||||
#include <processenv.h>
|
||||
#include <shellapi.h>
|
||||
#include <wchar.h>
|
||||
#include <wtypes.h>
|
||||
#endif
|
||||
|
||||
|
||||
#include "util.h"
|
||||
#include "jq.h"
|
||||
#include "jv_alloc.h"
|
||||
|
||||
#ifdef WIN32
|
||||
FILE *fopen(const char *fname, const char *mode) {
|
||||
size_t sz = MultiByteToWideChar(CP_UTF8, 0, fname, -1, NULL, 0);
|
||||
wchar_t *wfname = alloca(sz);
|
||||
MultiByteToWideChar(CP_UTF8, 0, fname, -1, wfname, sz);
|
||||
|
||||
sz = MultiByteToWideChar(CP_UTF8, 0, mode, -1, NULL, 0);
|
||||
wchar_t *wmode = alloca(sz);
|
||||
MultiByteToWideChar(CP_UTF8, 0, mode, -1, wmode, sz);
|
||||
return _wfopen(wfname, wmode);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MKSTEMP
|
||||
int mkstemp(char *template) {
|
||||
size_t len = strlen(template);
|
||||
|
Reference in New Issue
Block a user