--- a/dav/xattrtool.c Sun Nov 24 12:40:28 2019 +0100 +++ b/dav/xattrtool.c Mon Dec 02 13:29:36 2019 +0100 @@ -35,6 +35,10 @@ #include <string.h> #include <errno.h> +#ifdef _WIN32 +#include <Windows.h> +#endif + #include "libxattr.h" int attrtool_list(int argc, char **argv, int values); @@ -51,7 +55,47 @@ fprintf(stderr, " remove <file> <name>\n"); } +int xattr_tool_main(int argc, char **argv); + +#ifdef _WIN32 +static char* wchar2utf8(const wchar_t *wstr, size_t wlen) { + size_t maxlen = wlen * 4; + char *ret = malloc(maxlen + 1); + int ret_len = WideCharToMultiByte( + CP_UTF8, + 0, + wstr, + wlen, + ret, + maxlen, + NULL, + NULL); + ret[ret_len] = 0; + return ret; +} + +int wmain(int argc, wchar_t **argv) { + char **argv_utf8 = calloc(argc, sizeof(char*)); + for(int i=0;i<argc;i++) { + argv_utf8[i] = wchar2utf8(argv[i], wcslen(argv[i])); + } + + int ret = xattr_tool_main(argc, argv_utf8); + + for(int i=0;i<argc;i++) { + free(argv_utf8[i]); + } + free(argv_utf8); + + return ret; +} +#else int main(int argc, char **argv) { + return xattr_tool_main(argc, argv); +} +#endif + +int xattr_tool_main(int argc, char **argv) { if(argc < 3) { print_usage(argv[0]); return 1;