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 <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.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 "compile.h"
|
||||||
#include "jv.h"
|
#include "jv.h"
|
||||||
#include "jq.h"
|
#include "jq.h"
|
||||||
@@ -165,6 +174,20 @@ int main(int argc, char* argv[]) {
|
|||||||
int badwrite;
|
int badwrite;
|
||||||
jv program_arguments = jv_array();
|
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];
|
if (argc) progname = argv[0];
|
||||||
|
|
||||||
jq = jq_init();
|
jq = jq_init();
|
||||||
|
|||||||
21
util.c
21
util.c
@@ -32,11 +32,32 @@ void *alloca (size_t);
|
|||||||
#include <pwd.h>
|
#include <pwd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef WIN32
|
||||||
|
#include <windows.h>
|
||||||
|
#include <processenv.h>
|
||||||
|
#include <shellapi.h>
|
||||||
|
#include <wchar.h>
|
||||||
|
#include <wtypes.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "jq.h"
|
#include "jq.h"
|
||||||
#include "jv_alloc.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
|
#ifndef HAVE_MKSTEMP
|
||||||
int mkstemp(char *template) {
|
int mkstemp(char *template) {
|
||||||
size_t len = strlen(template);
|
size_t len = strlen(template);
|
||||||
|
|||||||
Reference in New Issue
Block a user