# Full response file \(\*\.rsp\) support · gitcafe/zig

[View on GitCafe](https://git.cafe/gitcafe/zig/commit/8a97807d6812f62db4c3088fecd04a98a84b9943)

Repository: [gitcafe/zig](https://git.cafe/gitcafe/zig)

Visibility: public

Requested revision: 8a97807d6812f62db4c3088fecd04a98a84b9943

Requested commit: 8a97807d6812f62db4c3088fecd04a98a84b9943

Commit: 8a97807d6812f62db4c3088fecd04a98a84b9943

Tree: a7658f7e1d412aa5bcede21c21b455b939074174

Author: PhaseMage

Committer: GitHub

## Message

```
Full response file (*.rsp) support

I hit the "quotes in an RSP file" issue when trying to compile gRPC using
"zig cc". As a fun exercise, I decided to see if I could fix it myself.
I'm fully open to this code being flat-out rejected. Or I can take feedback
to fix it up.

This modifies (and renames) _ArgIteratorWindows_ in process.zig such that
it works with arbitrary strings (or the contents of an RSP file).

In main.zig, this new _ArgIteratorGeneral_ is used to address the "TODO"
listed in _ClangArgIterator_.

This change closes #4833.

**Pros:**

- It has the nice attribute of handling "RSP file" arguments in the same way it
  handles "cmd_line" arguments.
- High Performance, minimal allocations
- Fixed bug in previous _ArgIteratorWindows_, where final trailing backslashes
  in a command line were entirely dropped
- Added a test case for the above bug
- Harmonized the _ArgIteratorXxxx._initWithAllocator()_ and _next()_ interface
  across Windows/Posix/Wasi (Moved Windows errors to _initWithAllocator()_
  rather than _next()_)
- Likely perf benefit on Windows by doing _utf16leToUtf8AllocZ()_ only once
  for the entire cmd_line

**Cons:**

- Breaking Change in std library on Windows: Call
  _ArgIterator.initWithAllocator()_ instead of _ArgIterator.init()_
- PhaseMage is new with contributions to Zig, might need a lot of hand-holding
- PhaseMage is a Windows person, non-Windows stuff will need to be double-checked

**Testing Done:**

- Wrote a few new test cases in process.zig
- zig.exe build test -Dskip-release (no new failures seen)
- zig cc now builds gRPC without error
```

## Parents

- [336aa3c332067ad7109a60a1276ce7a8f193ed0e](https://git.cafe/gitcafe/zig/commit/336aa3c332067ad7109a60a1276ce7a8f193ed0e?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zig/tree/8a97807d6812f62db4c3088fecd04a98a84b9943?format=markdown)
