Skip to content

Commit

Permalink
Merge pull request #4437 from dpoetzschke/fix/windows-args-escaping
Browse files Browse the repository at this point in the history
fix windows args parser problem from issue #4393
  • Loading branch information
gingerBill authored Nov 6, 2024
2 parents 1419d0d + f1de480 commit e8f231e
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/string.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -412,6 +412,32 @@ gb_internal String concatenate4_strings(gbAllocator a, String const &x, String c
return make_string(data, len);
}

#if defined(GB_SYSTEM_WINDOWS)
gb_internal String escape_char(gbAllocator a, String s, char cte) {
isize buf_len = s.len;
isize cte_count = 0;
for (isize j = 0; j < s.len; j++) {
if (s.text[j] == cte) {
cte_count++;
}
}

u8 *buf = gb_alloc_array(a, u8, buf_len+cte_count);
isize i = 0;
for (isize j = 0; j < s.len; j++) {
u8 c = s.text[j];

if (c == cte) {
buf[i++] = '\\';
buf[i++] = c;
} else {
buf[i++] = c;
}
}
return make_string(buf, i);
}
#endif

gb_internal String string_join_and_quote(gbAllocator a, Array<String> strings) {
if (!strings.count) {
return make_string(nullptr, 0);
Expand All @@ -427,7 +453,11 @@ gb_internal String string_join_and_quote(gbAllocator a, Array<String> strings) {
if (i > 0) {
s = gb_string_append_fmt(s, " ");
}
#if defined(GB_SYSTEM_WINDOWS)
s = gb_string_append_fmt(s, "\"%.*s\" ", LIT(escape_char(a, strings[i], '\\')));
#else
s = gb_string_append_fmt(s, "\"%.*s\" ", LIT(strings[i]));
#endif
}

return make_string(cast(u8 *) s, gb_string_length(s));
Expand Down

0 comments on commit e8f231e

Please sign in to comment.