tool: use our own stderr variable

Earlier this year we changed our own stderr variable to use the standard
name `stderr` (to avoid bugs where someone is using `stderr` instead of
the curl-tool specific variable). This solution needed to override the
standard `stderr` symbol via the preprocessor. This in turn didn't play
well with unity builds and caused curl tool to crash or stay silent due
to an uninitialized stderr. This was a hard to find issue, fixed by
manually breaking out one file from the unity sources.

To avoid two these two tricks, this patch implements a different
solution: Restore using our own local variable for our stderr output and
leave `stderr` as-is. To avoid using `stderr` by mistake, add a
`checksrc` rule (based on logic we already used in lib for `strerror`)
that detects any `stderr` use in `src` and points to using our own
variable instead: `tool_stderr`.

Follow-up to 06133d3e9b
Follow-up to 2f17a9b654

Closes #11958
This commit is contained in:
Viktor Szakats 2023-09-28 10:50:07 +00:00
parent b5bb84cbef
commit e5bb88b8f8
No known key found for this signature in database
GPG key ID: B5ABD165E2AEF201
19 changed files with 58 additions and 53 deletions

View file

@ -2777,9 +2777,9 @@ ParameterError parse_args(struct GlobalConfig *global, int argc,
const char *reason = param2text(result);
if(orig_opt && strcmp(":", orig_opt))
helpf(stderr, "option %s: %s", orig_opt, reason);
helpf(tool_stderr, "option %s: %s", orig_opt, reason);
else
helpf(stderr, "%s", reason);
helpf(tool_stderr, "%s", reason);
}
curlx_unicodefree(orig_opt);