Skip to content

Commit

Permalink
pty: polish args join code
Browse files Browse the repository at this point in the history
  • Loading branch information
tsl0922 committed Oct 30, 2023
1 parent ae4a7c4 commit 6bce1a1
Showing 1 changed file with 16 additions and 28 deletions.
44 changes: 16 additions & 28 deletions src/pty.c
Original file line number Diff line number Diff line change
Expand Up @@ -187,45 +187,33 @@ bool conpty_init() {
return true;
}

static WCHAR *to_utf16(char *str) {
int len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
if (len <= 0) return NULL;
WCHAR *wstr = xmalloc((len + 1) * sizeof(WCHAR));
if (len != MultiByteToWideChar(CP_UTF8, 0, str, -1, wstr, len)) {
free(wstr);
return NULL;
}
wstr[len] = L'\0';
return wstr;
}

// convert argv to cmdline for CreateProcessW
static WCHAR *join_args(char **argv) {
char *args = NULL;
char args[256] = {0};
char **ptr = argv;
for (; *ptr; ptr++) {
char *quoted = (char *) quote_arg(*ptr);
size_t arg_len = args == NULL ? 1 : strlen(args) + 1;
size_t arg_len = strlen(args) + 1;
size_t quoted_len = strlen(quoted);
args = xrealloc(args, arg_len + quoted_len);
if (arg_len == 1) memset(args, 0, 2);
if (arg_len != 1) strcat(args, " ");
strncat(args, quoted, quoted_len);
if (quoted != *ptr) free(quoted);
}

int len = MultiByteToWideChar(CP_UTF8, 0, args, -1, NULL, 0);
if (len <= 0) goto failed;
WCHAR *ws = (WCHAR *) xmalloc(len * sizeof(WCHAR));
if (len != MultiByteToWideChar(CP_UTF8, 0, args, -1, ws, len)) {
free(ws);
goto failed;
}
return ws;

failed:
if (args != NULL) free(args);
return NULL;
}

static WCHAR *to_utf16(char *str) {
int len = MultiByteToWideChar(CP_UTF8, 0, str, -1, NULL, 0);
if (len <= 0) return NULL;
WCHAR *wstr = xmalloc((len + 1) * sizeof(WCHAR));
if (len != MultiByteToWideChar(CP_UTF8, 0, str, -1, wstr, len)) {
free(wstr);
return NULL;
}
wstr[len] = L'\0';
return wstr;
if (args[255] != '\0') args[255] = '\0'; // truncate
return to_utf16(args);
}

static bool conpty_setup(HPCON *hnd, COORD size, STARTUPINFOEXW *si_ex, char **in_name, char **out_name) {
Expand Down

0 comments on commit 6bce1a1

Please sign in to comment.