Re: git: 7b35b4d19630 - main - sockstat: add libxo support
Date: Fri, 01 Aug 2025 17:10:55 UTC
This looks good. Some issues below:
On 30 Jul 2025, at 16:27, Alan Somers wrote:
> @@ -1345,65 +1380,104 @@ display_sock(struct sock *s, struct col_widths *cw, char *buf, size_t bufsize)
> ...
>> + } else if (laddr->address.ss_len == 0 &&
> + faddr->conn == 0 && is_text_style) {
> + xo_emit(" {:/%-*.*s}", cw->local_addr,
> + cw->local_addr, "(not connected)");
> + } else if (is_text_style) {
> + xo_emit(" {:/%-*.*s}", cw->local_addr,
> + cw->local_addr, "??");
> + }
These calls are missing a field name; you should have seen warning for this, something like:
foo: missing field name: %-*.*s
<missing-field-name>?? </missing-field-name>
You'll need something like "{:local-address/%*.*s}".
Please be sure to test with "--libxo:W", which will report many issues. Also there's "xolint" for checking source code.
Longer term, I'd like to make some sort of clang plugin to report formatting issues at build time.
> @@ -1436,47 +1510,52 @@ display_sock(struct sock *s, struct col_widths *cw, char *buf, size_t bufsize)
> s->proto == IPPROTO_TCP) {
> switch (s->proto) {
> case IPPROTO_SCTP:
> - printf(" %-*s", cw->conn_state,
> - sctp_conn_state(s->state));
> + xo_emit(" {:path-state/%-*s}",
> + cw->path_state,
> + sctp_path_state(
> + faddr->state));
> break;
Is the change from conn_state to path_state intentional?
> + if (xo_get_style(NULL) == XO_STYLE_TEXT) {
> + cw = (struct col_widths) {
> ...
Here and elsewhere: when you check for XO_STYLE_TEXT for formatting, you'll also care about XO_STYLE_HTML and other future styles. I have a function in libxo that's currently private/static:
/*
* Indicate if the style is an "encoding" one as opposed to a "display" one.
*/
static int
xo_style_is_encoding (xo_handle_t *xop)
{
if (xo_style(xop) == XO_STYLE_JSON
|| xo_style(xop) == XO_STYLE_XML
|| xo_style(xop) == XO_STYLE_SDPARAMS
|| xo_style(xop) == XO_STYLE_ENCODER)
return TRUE;
return FALSE;
}
I can make that public, allowing you to say "if (!xo_style_is_encoding(NULL)) { ... }", but for now, you'll need to explicitly test for XO_STYLE_HTML.
> + xo_error(
> +"usage: sockstat [--libxo] [-46ACcfIiLlnqSsUuvw] [-j jid] [-p ports]\n"
> +" [-P protocols]\n");
> + exit(1);
I don't have a real convention for this, but maybe "[--libxo ...]" would convey that there's content with the option?
Thanks,
Phil