Thread (3 messages) flat view 3 messages, 3 authors, 2021-11-29

Re: [PATCH v2 5/5] refs/debug: trim trailing LF from reflog message

From: Ævar Arnfjörð Bjarmason <hidden>
Date: 2021-11-29 22:48:37

On Mon, Nov 29 2021, Han-Wen Nienhuys wrote:
On Fri, Nov 26, 2021 at 9:16 AM Junio C Hamano [off-list ref] wrote:
quoted
The API promises to have only LF, not CRLF, at the end, so
strbuf_trim_trailing_newline() is a bit overkill (and if payload
happened to end with CR, we would lose it).
it would be best if there was a way to escape characters (ie. "\n" =>
"\\n"). Do we have a function for that?
quoted
quoted
+     trace_printf_key(&trace_refs,
+                      "reflog_ent %s (ret %d): %s -> %s, %s %ld \"%s\"\n",
+                      dbg->refname, ret, o, n, committer,
+                      (long int)timestamp, trimmed.buf);
+     strbuf_release(&trimmed);
      return ret;
 }
Can we use counted bytes in trace_printf()?  If we can, it would be
simpler to just scan "msg" for LF and then show only the span
between the beginning of the string and the found LF using "%.*s",
perhaps like this?
I beg to differ - despite this being fewer lines of code, I think
pointer arithmetic is best avoided if possible.
We usually do this with pointer arithmetic, but the %.*s format doesn't
require that, just code like:

    const char *str = "foobar";
    size_t len = strlen(str);
    len -= 1; /* give me less! */
    printf("%.*s", (int)len, str);

So you can also feed it (len - 1) or whatever if you know it to end with
a character you don't want.

It's (more simply done as) pointer arithmetic if you're finding that end
marker with strstr() or whatever, but you can also bend over backwards
and get a "len" instead through other means, and in either case I think
it beats reallocating the whole thing (more for readability than any
optimization reasons).
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help