1
0
mirror of https://github.com/Ylianst/MeshAgent synced 2025-12-11 22:03:48 +00:00

Updated to support UTF8 encoded argv parameters on windows

This commit is contained in:
Bryan Roe
2019-08-08 16:54:22 -07:00
parent b34eee2dca
commit b77a2f9687
2 changed files with 53 additions and 2 deletions

View File

@@ -101,7 +101,12 @@ ILibTransport_DoneState kvm_serviceWriteSink(char *buffer, int bufferLen, void *
} }
#endif #endif
#ifdef WIN32
#define wmain_free(argv) for(argvi=0;argvi<(ILibMemory_Size(argv)/sizeof(void*));++argvi){ILibMemory_Free(argv[argvi]);}ILibMemory_Free(argv);
int wmain(int argc, char **wargv)
#else
int main(int argc, char **argv) int main(int argc, char **argv)
#endif
{ {
// Check if .JS file is integrated with executable // Check if .JS file is integrated with executable
char *integratedJavaScript = NULL; char *integratedJavaScript = NULL;
@@ -109,6 +114,17 @@ int main(int argc, char **argv)
int retCode = 0; int retCode = 0;
int capabilities = 0; int capabilities = 0;
#ifdef WIN32
int argvi, argvsz;
char **argv = (char**)ILibMemory_SmartAllocate(argc * sizeof(void*));
for (argvi = 0; argvi < argc; ++argvi)
{
argvsz = WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)wargv[argvi], -1, NULL, 0, NULL, NULL);
argv[argvi] = (char*)ILibMemory_SmartAllocate(argvsz);
WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)wargv[argvi], -1, argv[argvi], argvsz, NULL, NULL);
}
#endif
#if defined (_POSIX) #if defined (_POSIX)
#ifndef _NOILIBSTACKDEBUG #ifndef _NOILIBSTACKDEBUG
char* crashMemory = ILib_POSIX_InstallCrashHandler(argv[0]); char* crashMemory = ILib_POSIX_InstallCrashHandler(argv[0]);
@@ -139,6 +155,9 @@ char* crashMemory = ILib_POSIX_InstallCrashHandler(argv[0]);
} }
#ifndef MICROSTACK_NOTLS #ifndef MICROSTACK_NOTLS
printf("Using %s\n", SSLeay_version(SSLEAY_VERSION)); printf("Using %s\n", SSLeay_version(SSLEAY_VERSION));
#endif
#ifdef WIN32
wmain_free(argv);
#endif #endif
return(0); return(0);
} }
@@ -171,6 +190,9 @@ char* crashMemory = ILib_POSIX_InstallCrashHandler(argv[0]);
ILibChain_DebugOffset(ILibScratchPad, sizeof(ILibScratchPad), (uint64_t)addrOffset); ILibChain_DebugOffset(ILibScratchPad, sizeof(ILibScratchPad), (uint64_t)addrOffset);
printf("%s", ILibScratchPad); printf("%s", ILibScratchPad);
#ifdef WIN32
wmain_free(argv);
#endif
return(0); return(0);
} }
@@ -184,6 +206,9 @@ char* crashMemory = ILib_POSIX_InstallCrashHandler(argv[0]);
#endif #endif
ILibChain_DebugDelta(ILibScratchPad, sizeof(ILibScratchPad), delta); ILibChain_DebugDelta(ILibScratchPad, sizeof(ILibScratchPad), delta);
printf("%s", ILibScratchPad); printf("%s", ILibScratchPad);
#ifdef WIN32
wmain_free(argv);
#endif
return(0); return(0);
} }
@@ -195,6 +220,9 @@ char* crashMemory = ILib_POSIX_InstallCrashHandler(argv[0]);
{ {
// -update:"C:\Users\Public\Downloads\MeshManageability\Debug\MeshConsol2.exe" // -update:"C:\Users\Public\Downloads\MeshManageability\Debug\MeshConsol2.exe"
MeshAgent_PerformSelfUpdate(argv[0], argv[1] + 8, argc, argv); MeshAgent_PerformSelfUpdate(argv[0], argv[1] + 8, argc, argv);
#ifdef WIN32
wmain_free(argv);
#endif
return 0; return 0;
} }
} }
@@ -229,6 +257,7 @@ char* crashMemory = ILib_POSIX_InstallCrashHandler(argv[0]);
{ {
ILib_WindowsExceptionDebug(&winExceptionContext); ILib_WindowsExceptionDebug(&winExceptionContext);
} }
wmain_free(argv);
_CrtDumpMemoryLeaks(); _CrtDumpMemoryLeaks();
#else #else
agentHost = MeshAgent_Create(capabilities); agentHost = MeshAgent_Create(capabilities);

View File

@@ -913,7 +913,9 @@ BOOL CtrlHandler(DWORD fdwCtrlType)
return FALSE; return FALSE;
} }
} }
int main(int argc, char* argv[])
#define wmain_free(argv) for(argvi=0;argvi<(ILibMemory_Size(argv)/sizeof(void*));++argvi){ILibMemory_Free(argv[argvi]);}ILibMemory_Free(argv);
int wmain(int argc, char* wargv[])
{ {
int i; int i;
size_t str2len = 0;// , proxylen = 0, taglen = 0; size_t str2len = 0;// , proxylen = 0, taglen = 0;
@@ -924,6 +926,15 @@ int main(int argc, char* argv[])
CONTEXT winException; CONTEXT winException;
int retCode = 0; int retCode = 0;
int argvi, argvsz;
char **argv = (char**)ILibMemory_SmartAllocate(argc * sizeof(void*));
for (argvi = 0; argvi < argc; ++argvi)
{
argvsz = WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)wargv[argvi], -1, NULL, 0, NULL, NULL);
argv[argvi] = (char*)ILibMemory_SmartAllocate(argvsz);
WideCharToMultiByte(CP_UTF8, 0, (LPCWCH)wargv[argvi], -1, argv[argvi], argvsz, NULL, NULL);
}
/* /*
#ifndef NOMESHCMD #ifndef NOMESHCMD
// Check if this is a Mesh command operation // Check if this is a Mesh command operation
@@ -945,6 +956,7 @@ int main(int argc, char* argv[])
#ifndef MICROSTACK_NOTLS #ifndef MICROSTACK_NOTLS
printf("Using %s\n", SSLeay_version(SSLEAY_VERSION)); printf("Using %s\n", SSLeay_version(SSLEAY_VERSION));
#endif #endif
wmain_free(argv);
return(0); return(0);
} }
@@ -959,6 +971,7 @@ int main(int argc, char* argv[])
#endif #endif
ILibChain_DebugOffset(ILibScratchPad, sizeof(ILibScratchPad), (uint64_t)addrOffset); ILibChain_DebugOffset(ILibScratchPad, sizeof(ILibScratchPad), (uint64_t)addrOffset);
printf("%s", ILibScratchPad); printf("%s", ILibScratchPad);
wmain_free(argv);
return(0); return(0);
} }
@@ -968,6 +981,7 @@ int main(int argc, char* argv[])
sscanf_s(argv[2], "%lld", &delta); sscanf_s(argv[2], "%lld", &delta);
ILibChain_DebugDelta(ILibScratchPad, sizeof(ILibScratchPad), delta); ILibChain_DebugDelta(ILibScratchPad, sizeof(ILibScratchPad), delta);
printf("%s", ILibScratchPad); printf("%s", ILibScratchPad);
wmain_free(argv);
return(0); return(0);
} }
@@ -1042,6 +1056,7 @@ int main(int argc, char* argv[])
} }
kvm_server_mainloop((void*)parm); kvm_server_mainloop((void*)parm);
wmain_free(argv);
return 0; return 0;
} }
else if (argc > 1 && strcasecmp(argv[1], "-kvm1") == 0) else if (argc > 1 && strcasecmp(argv[1], "-kvm1") == 0)
@@ -1073,6 +1088,7 @@ int main(int argc, char* argv[])
kvm_server_mainloop((void*)parm); kvm_server_mainloop((void*)parm);
wmain_free(argv);
return 0; return 0;
} }
#endif #endif
@@ -1110,6 +1126,7 @@ int main(int argc, char* argv[])
{ {
ILib_WindowsExceptionDebug(&winException); ILib_WindowsExceptionDebug(&winException);
} }
wmain_free(argv);
return(retCode); return(retCode);
} }
else if (argc > 1 && (strcasecmp(argv[1], "state") == 0)) else if (argc > 1 && (strcasecmp(argv[1], "state") == 0))
@@ -1131,6 +1148,7 @@ int main(int argc, char* argv[])
else if (serviceState == 6) { printf("Pause Pending"); } else if (serviceState == 6) { printf("Pause Pending"); }
else if (serviceState == 7) { printf("Paused"); } else if (serviceState == 7) { printf("Paused"); }
else if (serviceState == 100) { printf("Not installed"); } else if (serviceState == 100) { printf("Not installed"); }
wmain_free(argv);
return serviceState; return serviceState;
} }
else if (argc > 1 && strcasecmp(argv[1], "-signcheck") == 0 && GetModuleFileNameA(NULL, str2, _MAX_PATH) > 5) else if (argc > 1 && strcasecmp(argv[1], "-signcheck") == 0 && GetModuleFileNameA(NULL, str2, _MAX_PATH) > 5)
@@ -1143,6 +1161,7 @@ int main(int argc, char* argv[])
#else #else
printf("Cannot verify without OpenSSL support"); printf("Cannot verify without OpenSSL support");
#endif #endif
wmain_free(argv);
return 0; return 0;
} }
#endif #endif
@@ -1299,6 +1318,7 @@ int main(int argc, char* argv[])
RegCloseKey(hKey); RegCloseKey(hKey);
} }
if (strEx != NULL) printf(strEx); else printf("Not defined, start the mesh service to create a nodeid."); if (strEx != NULL) printf(strEx); else printf("Not defined, start the mesh service to create a nodeid.");
wmain_free(argv);
return 0; return 0;
} }
else if (argc == 2 && (strcasecmp(argv[1], "-info") == 0)) else if (argc == 2 && (strcasecmp(argv[1], "-info") == 0))
@@ -1350,6 +1370,7 @@ int main(int argc, char* argv[])
RegCloseKey(hKey); RegCloseKey(hKey);
} }
wmain_free(argv);
return 0; return 0;
} }
else if (argc == 2 && (strcasecmp(argv[1], "-resetnodeid") == 0)) else if (argc == 2 && (strcasecmp(argv[1], "-resetnodeid") == 0))
@@ -1371,6 +1392,7 @@ int main(int argc, char* argv[])
{ {
printf("Error writing to registry, try running as administrator."); printf("Error writing to registry, try running as administrator.");
} }
wmain_free(argv);
return 0; return 0;
} }
else else
@@ -1431,7 +1453,7 @@ int main(int argc, char* argv[])
} }
CoUninitialize(); CoUninitialize();
wmain_free(argv);
return 0; return 0;
} }