Set struct default initialization values

Modified uniproc_create_process signature to take a command and a list of arguments
Updated uniproc_win64.c to terminate the process before closing the handles
Updated uniproc_win64.c to convert the command and list of arguments into a command-line string
This commit is contained in:
2025-03-04 13:26:30 +11:00
parent d47f6be401
commit 01602578fd
2 changed files with 22 additions and 10 deletions

View File

@@ -4,7 +4,7 @@
#include <fcntl.h>
#include <io.h>
uniproc_process uniproc_create_process(const char* cmd)
uniproc_process uniproc_create_process(const char* cmd, const size_t num_args, const char** argv)
{
// Create pipes
HANDLE child_in;
@@ -38,9 +38,21 @@ uniproc_process uniproc_create_process(const char* cmd)
// Create child process
uniproc_process p;
size_t cmd_len = strlen(cmd);
// Create p_cmd by appending all argv's to cmd
size_t x = strlen(cmd);
size_t cmd_len = x + 1;
for (size_t i = 0; i < num_args; ++i)
cmd_len += strlen(argv[i]) + 1;
char* p_cmd = malloc((cmd_len+1) * sizeof(char));
memcpy(p_cmd, cmd, cmd_len * sizeof(char));
memcpy(p_cmd, cmd, x * sizeof(char));
x += 1; // Account for space after cmd
for (size_t i = 0; i < num_args; ++i)
{
size_t arglen = strlen(argv[i]);
memcpy(p_cmd + x, argv[i], arglen);
p_cmd[x + arglen] = ' ';
x += arglen + 1
}
p_cmd[cmd_len] = '\0';
PROCESS_INFORMATION p_info;
@@ -100,11 +112,11 @@ void uniproc_await_processes(uniproc_process* p, int* return_codes, size_t num_p
void uniproc_close_process(uniproc_process* p)
{
TerminateProcess((HANDLE)p->_proc_hdl, 2);
CloseHandle((HANDLE)p->_proc_hdl);
fclose(p->in);
fclose(p->out);
fclose(p->err);
CloseHandle((HANDLE)p->_proc_hdl);
}
#endif