diff options
author | Andreas Fankhauser hiddenalpha.ch | 2024-01-17 11:39:23 +0100 |
---|---|---|
committer | Andreas Fankhauser hiddenalpha.ch | 2024-01-17 11:39:23 +0100 |
commit | a54b05e20f4cdd9515a4b34108fc39a8ca090767 (patch) | |
tree | f9330b0ad23ccf8c1fa9e43170f24eb1c07aa481 /src | |
parent | b94f8a85487db2fbdc694fb38f8c025ba39e430c (diff) | |
download | UnspecifiedGarbage-a54b05e20f4cdd9515a4b34108fc39a8ca090767.zip UnspecifiedGarbage-a54b05e20f4cdd9515a4b34108fc39a8ca090767.tar.gz |
mvn-launchr.c: Cleanup
Diffstat (limited to 'src')
-rw-r--r-- | src/main/c/postshit/launch/mvn/launchr.c | 5 | ||||
-rw-r--r-- | src/main/c/postshit/launch/mvn/mvn-launch.c | 113 | ||||
-rw-r--r-- | src/main/c/postshit/launch/mvn/windoof.h | 79 |
3 files changed, 46 insertions, 151 deletions
diff --git a/src/main/c/postshit/launch/mvn/launchr.c b/src/main/c/postshit/launch/mvn/launchr.c deleted file mode 100644 index 0c7db07..0000000 --- a/src/main/c/postshit/launch/mvn/launchr.c +++ /dev/null @@ -1,5 +0,0 @@ -/* - - TODO move shared launcher stuff here. - -*/ diff --git a/src/main/c/postshit/launch/mvn/mvn-launch.c b/src/main/c/postshit/launch/mvn/mvn-launch.c index 7c7796d..5187b10 100644 --- a/src/main/c/postshit/launch/mvn/mvn-launch.c +++ b/src/main/c/postshit/launch/mvn/mvn-launch.c @@ -13,7 +13,6 @@ */ #include <windows.h> - #include <assert.h> #include <stdio.h> @@ -21,41 +20,40 @@ #define LOGDBG(...) fprintf(stderr, __VA_ARGS__) -static int appendRaw( char*dst, int*dst_off, int dst_cap, const char*src, int src_len ){ - #define dst_off (*dst_off) +static int appendRaw( char*dst, int*dst_len, int dst_cap, const char*src, int src_len ){ + #define dst_len (*dst_len) register int err; - if( dst_cap < dst_off + src_len ){ - LOGDBG("ENOBUFS: %s Cannot add: %.*s\n", strrchr(__FILE__,'/')+1, src_len, src); + if( dst_cap < dst_len + src_len ){ + LOGERR("ENOBUFS: %s Cannot add: %.*s\n", strrchr(__FILE__,'/')+1, src_len, src); err = -ENOBUFS; goto endFn; } - memcpy(dst + dst_off, src, src_len); - dst_off += src_len; + memcpy(dst + dst_len, src, src_len); + dst_len += src_len; err = 0; endFn: return err; - #undef dst_off + #undef dst_len } -static int appendQuotEscaped( char*dst, int*dst_off, int dst_cap, const char*src, int src_len ){ - #define dst_off (*dst_off) +static int appendQuotEscaped( char*dst, int*dst_len, int dst_cap, const char*src, int src_len ){ + #define dst_len (*dst_len) register int err; - if( dst_cap < dst_off + src_len ){ + if( dst_cap < dst_len + src_len ){ LOGDBG("ENOBUFS: %s: cannot append \"%.*s\"\n", strrchr(__FILE__,'/')+1, src_len, src); err = -ENOBUFS; goto endFn; } - for(; src[0] != '\0' ; ++src ){ - if( src[0] == '"' ){ - LOGDBG("ENOTSUP: %s not impl to handle quotes inside args (TODO_a9o8uz4rga98orui)\n", - strrchr(__FILE__,'/')); + for( err = 0 ; err < src_len ; ++err ){ + if( src[err] == '"' ){ + LOGERR("ENOTSUP: Quotes in args not impl. %s:%d\n", __FILE__, __LINE__); err = -ENOTSUP; goto endFn; } - dst[dst_off++] = src[0]; + dst[dst_len++] = src[err]; } err = 0; endFn: return err; - #undef dst_off + #undef dst_len } @@ -63,18 +61,17 @@ static int appendArg( char*cmdline, int*cmdline_len, int cmdline_cap, const char #define cmdline_len (*cmdline_len) register int err; if( cmdline_cap < cmdline_len + newArg_len + sizeof" \"\"" ){ - LOGDBG("ENOBUFS: %s cmdline too long\n", strrchr(__FILE__,'/')+1); + LOGERR("ENOBUFS: Cmdline too long. %s:%d\n", strrchr(__FILE__,'/')+1, __LINE__); err = -ENOBUFS; goto endFn; } cmdline[cmdline_len++] = ' '; cmdline[cmdline_len++] = '"'; - for(; newArg[0] != '\0' ; ++newArg ){ - if( newArg[0] == '"' ){ - LOGDBG("ENOTSUP: %s not impl to handle quotes inside args (TODO_H0cCAJtBAg)\n", - strrchr(__FILE__,'/')); + for( err = 0 ; err < newArg_len ; ++err ){ + if( newArg[err] == '"' ){ + LOGERR("ENOTSUP: Quotes in args not impl. %s:%d\n", strrchr(__FILE__,'/')+1, __LINE__); err = -ENOTSUP; goto endFn; } - cmdline[cmdline_len++] = newArg[0]; + cmdline[cmdline_len++] = newArg[err]; } cmdline[cmdline_len++] = '"'; err = 0; @@ -84,28 +81,6 @@ endFn: } -static int appendFromEnvironEvenIfEmpty( char*cmdline, int*cmdline_len, int cmdline_cap, const char*envKey ){ - #define cmdline_len (*cmdline_len) - assert(envKey != NULL); - register int err; - char envval[0x7FFF]; - const int envval_cap = sizeof envval; - err = GetEnvironmentVariable(envKey, envval, envval_cap-1); - if( err >= envval_cap-1 ){ - LOGDBG("ENOBUFS: %s: environ.%s too long\n", strrchr(__FILE__,'/'), envKey); - err = -ENOBUFS; goto endFn; - } - err = appendArg(cmdline, &cmdline_len, cmdline_cap, envval, err); - if( err < 0 ) goto endFn; - cmdline_len += err; - err = 0; -endFn: - return err; - #undef cmdline_len - -} - - static int appendFromEnvironIfNotEmpty( char*cmdline, int*cmdline_len, int cmdline_cap, const char*envKey ){ #define cmdline_len (*cmdline_len) assert(envKey != NULL); @@ -114,12 +89,12 @@ static int appendFromEnvironIfNotEmpty( char*cmdline, int*cmdline_len, int cmdli const int envval_cap = sizeof envval; err = GetEnvironmentVariable(envKey, envval, envval_cap-1); if( err >= envval_cap-1 ){ - LOGDBG("ENOBUFS: %s: environ.%s too long\n", strrchr(__FILE__,'/'), envKey); + LOGERR("ENOBUFS: environ.%s too long. %s:%d\n", envKey, strrchr(__FILE__,'/')+1, __LINE__); err = -ENOBUFS; goto endFn; } if( err > 0 ){ err = appendArg(cmdline, &cmdline_len, cmdline_cap, envval, err); - if( err < 0 ) goto endFn; + if( err < 0 ){ LOGDBG("[TRACE] at %s:%d\n", __FILE__, __LINE__); goto endFn; } cmdline_len += err; } err = 0; @@ -131,14 +106,15 @@ endFn: int main( int argc, char**argv ){ register int err; - char envval[0x7FFF]; - const int envval_cap = sizeof envval; char username[16]; const int username_cap = sizeof username; err = GetEnvironmentVariable("USERNAME", username, username_cap); - if( err == 0 ){ LOGERR("ERROR: GetEnvironmentVariable(USERNAME) -> 0x%lX\n", GetLastError()); err = -1; goto endFn; } - if( err > username_cap ){ LOGERR("ENOBUFS: environ.USERNAME too long\n"); err = -1; goto endFn; } + if( err == 0 ){ LOGERR("ERROR: GetEnvironmentVariable(USERNAME) -> 0x%lX\n", GetLastError()); + err = -1; goto endFn; } + if( err > username_cap ){ + LOGERR("ENOBUFS: environ.USERNAME too long. %s:%d\n", strrchr(__FILE__,'/')+1, __LINE__); + err = -1; goto endFn; } assert(err > 0); const int username_len = err; @@ -155,20 +131,26 @@ int main( int argc, char**argv ){ || appendFromEnvironIfNotEmpty(cmdline, &cmdline_len, cmdline_cap, "MAVEN_OPTS") < 0 || appendFromEnvironIfNotEmpty(cmdline, &cmdline_len, cmdline_cap, "MAVEN_DEBUG_OPTS") < 0 || appendRaw(cmdline, &cmdline_len, cmdline_cap, " -classpath", 11) < 0 - || appendRaw(cmdline, &cmdline_len, cmdline_cap, " C:/Users/fankhauseand/.opt/maven/boot/plexus-classworlds-2.5.2.jar", 67) < 0 - || appendRaw(cmdline, &cmdline_len, cmdline_cap, " -Dclassworlds.conf=C:/Users/fankhauseand/.opt/maven/bin/m2.conf", 64) < 0 - || appendRaw(cmdline, &cmdline_len, cmdline_cap, " -Dmaven.home=C:/Users/fankhauseand/.opt/maven", 46) < 0 + || appendRaw(cmdline, &cmdline_len, cmdline_cap, " C:/Users/", 9) < 0 + || appendRaw(cmdline, &cmdline_len, cmdline_cap, username, username_len) < 0 + || appendRaw(cmdline, &cmdline_len, cmdline_cap, "/.opt/maven/boot/plexus-classworlds-2.5.2.jar", 45) < 0 + || appendRaw(cmdline, &cmdline_len, cmdline_cap, " -Dclassworlds.conf=C:/Users/", 29) < 0 + || appendRaw(cmdline, &cmdline_len, cmdline_cap, username, username_len) < 0 + || appendRaw(cmdline, &cmdline_len, cmdline_cap, "/.opt/maven/bin/m2.conf", 23) < 0 + || appendRaw(cmdline, &cmdline_len, cmdline_cap, " -Dmaven.home=C:/Users/", 23) < 0 + || appendRaw(cmdline, &cmdline_len, cmdline_cap, username, username_len) < 0 + || appendRaw(cmdline, &cmdline_len, cmdline_cap, "/.opt/maven", 11) < 0 ; - if( err ){ LOGDBG("[TRACE] %s:%d\n", __FILE__, __LINE__); goto endFn; } + if( err ){ LOGDBG("[TRACE] at %s:%d\n", __FILE__, __LINE__); goto endFn; } char tmpBuf[0x7FFF]; const int tmpBuf_cap = sizeof tmpBuf; err = GetCurrentDirectory(tmpBuf_cap, tmpBuf); if( err == 0 ){ - LOGDBG("%s: GetCurrentDirectory() -> 0x%lX\n", strrchr(__FILE__,'/')+1, GetLastError()); + LOGERR("ERROR: GetCurrentDirectory() -> 0x%lX. %s:%d\n", GetLastError(), strrchr(__FILE__,'/')+1, __LINE__); err = -1; goto endFn; } if( err >= tmpBuf_cap ){ - LOGDBG("ENOBUFS: %s: working dir too long\n", strrchr(__FILE__,'/')+1); + LOGERR("ENOBUFS: Working dir too long. %s:%d\n", strrchr(__FILE__,'/')+1, __LINE__); err = -ENOBUFS; goto endFn; } assert(err > 0); const int tmpBuf_len = err; @@ -185,23 +167,20 @@ int main( int argc, char**argv ){ for( int iA=1 ; iA < argc ; ++iA ){ char *arg = argv[iA]; err = appendArg(cmdline, &cmdline_len, cmdline_cap, arg, strlen(arg)); - if( err < 0 ){ LOGDBG("[TRACE] %s:%d\n", __FILE__, __LINE__); goto endFn; } + if( err < 0 ){ LOGDBG("[TRACE] at %s:%d\n", __FILE__, __LINE__); goto endFn; } } - //LOGDBG("[DEBUG] cmdline is:\n%.*s\n", cmdline_len, cmdline); - - STARTUPINFOA lpsui = { .lpDesktop = NULL, .lpTitle = NULL, .dwFlags = 0, }; - lpsui.cb = sizeof(lpsui); + STARTUPINFOA startInfo = { .lpDesktop = NULL, .lpTitle = NULL, .dwFlags = 0, }; + startInfo.cb = sizeof(startInfo); PROCESS_INFORMATION proc; - /*TODO try BELOW_NORMAL_PRIORITY_CLASS */ - err = CreateProcessA(NULL, cmdline, NULL, NULL, !0, 0, NULL, NULL, &lpsui, &proc); + err = CreateProcessA(NULL, cmdline, NULL, NULL, !0, 0, NULL, NULL, &startInfo, &proc); if( err == 0 ){ - LOGDBG("[DEBUG] CMDLINE: %.*s\n", cmdline_len, cmdline); - LOGERR("%s, CreateProcess(): 0x%0lX\n", strrchr(__FILE__,'/')+1, GetLastError()); + LOGERR("[DEBUG] CMDLINE: %.*s\n", cmdline_len, cmdline); + LOGERR("ERROR: CreateProcess(): 0x%0lX. %s:%d\n", GetLastError(), strrchr(__FILE__,'/')+1, __LINE__); err = -1; goto endFn; } err = WaitForSingleObject(proc.hProcess, INFINITE); - if( err != WAIT_OBJECT_0 ){ LOGERR("ERROR: %s: WaitForSingleObject() -> %d %s:%d\n", strrchr(__FILE__,'/')+1, err, __FILE__, __LINE__); + if( err != WAIT_OBJECT_0 ){ LOGERR("ERROR: WaitForSingleObject() -> %d. %s:%d\n", err, strrchr(__FILE__,'/')+1, __LINE__); err = -1; goto endFn; } err = 0; endFn: diff --git a/src/main/c/postshit/launch/mvn/windoof.h b/src/main/c/postshit/launch/mvn/windoof.h deleted file mode 100644 index b5b93fa..0000000 --- a/src/main/c/postshit/launch/mvn/windoof.h +++ /dev/null @@ -1,79 +0,0 @@ -#ifndef INCGUARD_8WICAEpuAgDVeQIAui8CAEFpAgBSJQIA -#define INCGUARD_8WICAEpuAgDVeQIAui8CAEFpAgBSJQIA - - -#define assert(expr) do{if(!(expr)){fprintf(stderr,"assert(%s) %s:%d\n", #expr, __FILE__, __LINE__);}}while(0) - -#define NULL ((void*)0) - -#define INT_MAX ((int)0x7FFFFFFF) - -#define ENOBUFS 119 -#define ENOTSUP 129 - -#define CREATE_NO_WINDOW 0x08000000 - -#define BELOW_NORMAL_PRIORITY_CLASS 0x00004000 - - -typedef struct { - int cb; - char* lpReserved; - char* lpDesktop; - char* lpTitle; - int dwX; - int dwY; - int dwXSize; - int dwYSize; - int dwXCountChars; - int dwYCountChars; - int dwFillAttribute; - int dwFlags; - short wShowWindow; - short cbReserved2; - void* lpReserved2; - void* hStdInput; - void* hStdOutput; - void* hStdError; -} STARTUPINFOA; - - -typedef struct { - void* hProcess; - void* hThread; - int dwProcessId; - int dwThreadId; -} PROCESS_INFORMATION; - - -typedef struct { - int nLength; - void* lpSecurityDescriptor; - int bInheritHandle; -} SECURITY_ATTRIBUTES; - - -long unsigned GetLastError(void); - -int fprintf(struct _iobuf*, const char *, ...); - -long long unsigned strlen(const char*); - -char *strrchr(const char *s, int c); - -int CreateProcessA( - const char* lpApplicationName, - char* lpCommandLine, - SECURITY_ATTRIBUTES* lpProcessAttributes, - SECURITY_ATTRIBUTES* lpThreadAttributes, - int bInheritHandles, - int dwCreationFlags, - void* lpEnvironment, - const char* lpCurrentDirectory, - STARTUPINFOA* lpStartupInfo, - PROCESS_INFORMATION* lpProcessInformation -); - - - -#endif /* INCGUARD_8WICAEpuAgDVeQIAui8CAEFpAgBSJQIA */ |