else if (is_absolute_path(trace)) {
int fd = open(trace, O_WRONLY | O_APPEND | O_CREAT, 0666);
if (fd == -1) {
- warning("could not open '%s' for tracing: %s\n"
- " Defaulting to tracing on stderr...",
+ warning("could not open '%s' for tracing: %s",
trace, strerror(errno));
- key->fd = STDERR_FILENO;
+ trace_disable(key);
} else {
key->fd = fd;
key->need_close = 1;
} else {
warning("unknown trace value for '%s': %s\n"
" If you want to trace into a file, then please set %s\n"
- " to an absolute pathname (starting with /)\n"
- " Defaulting to tracing on stderr...",
+ " to an absolute pathname (starting with /)",
key->key, trace, key->key);
- key->fd = STDERR_FILENO;
+ trace_disable(key);
}
key->initialized = 1;
key->need_close = 0;
}
-static const char err_msg[] = "could not trace into fd given by "
- "GIT_TRACE environment variable";
-
static int prepare_trace_line(const char *file, int line,
struct trace_key *key, struct strbuf *buf)
{
static void trace_write(struct trace_key *key, const void *buf, unsigned len)
{
- if (write_in_full(get_trace_fd(key), buf, len) < 0)
- warning("%s: write error (%s)", err_msg, strerror(errno));
+ if (write_in_full(get_trace_fd(key), buf, len) < 0) {
+ normalize_trace_key(&key);
+ warning("unable to write trace for %s: %s",
+ key->key, strerror(errno));
+ trace_disable(key);
+ }
}
void trace_verbatim(struct trace_key *key, const void *buf, unsigned len)