From Newsgroup: muc.lists.freebsd.stable
--000000000000d6140b06490e3599
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
On Fri, Jan 23, 2026 at 2:21=E2=80=AFAM Tomoaki AOKI <
junchoon@dec.sakura.n= e.jp>
wrote:
On Fri, 23 Jan 2026 09:40:17 +0100
Andre Albsmeier <mail@fbsd2.e4m.org> wrote:
On Thu, 22-Jan-2026 at 08:31:15 -0700, Warner Losh wrote:
On Thu, Jan 22, 2026 at 1:46=E2=80=AFAM Andre Albsmeier <mail@fbsd2.e=
4m.org>
wrote:
On Fri, 19-Dec-2025 at 20:37:41 +0000, Jamie Landeg-Jones wrote:
void <void@f-m.fm> wrote:
...
and so dmsg has things like
[1353919] swp_pager_getswapspace(32): failed
the [1353919] I guess being the timestamp.
...
Yes! You can get the value from sysctl kern.boottime.
Here is a small program I wrote a while back, just call it
as a dmesg substitute.
...
Cheers, Jamie
#!/bin/sh -efu
set -efu
boottime=3D"$(/sbin/sysctl -n kern.boottime | /usr/local/bin/gawk
'{printf
"%d", gensub ("^.* sec =3D ([1-9][0-9]*), .*$", "\\1", 1)}')"
[ -z "$(printf '%s' "$boottime" | /usr/bin/egrep
'^0$|^[1-9][0-9]*$')" ]
&& { printf 'Invalid boottime retrieved.\n' >& 2; exit 1; }
/sbin/dmesg "$@" | /usr/local/bin/gawk -v boottime=3D"$boottime" =
'
{
uptime =3D gensub ("^\\[([1-9][0-9]*)\\] .*$", "\\1", 1)
if (uptime =3D=3D $0) realtime =3D "??? ?? ??:??;??"
else realtime =3D strftime ("%b %d %T", uptime + boottime)
print realtime " " $0
}'
FWIW, this is a patch for dmesg(1) I use. You can enable timestamp conversion using -t and optionally specify a different output forma=
t
using -f "fmt".
If interested for inclusion in base, I could try to re-format it
and come up with a manpage diff...
Yes. I've done a quick review inline.
Thanks...
--- sbin/dmesg/dmesg.c 2023-12-27 17:49:57.000000000 +0100
+++ sbin/dmesg/dmesg.c 2026-01-22 09:20:28.987020000 +0100
@@ -60,6 +60,7 @@
#include <unistd.h>
#include <vis.h>
#include <sys/syslog.h>
+#include <time.h>
static struct nlist nl[] =3D {
#define X_MSGBUF 0
@@ -76,18 +77,23 @@
main(int argc, char *argv[])
{
struct msgbuf *bufp, cur;
+ struct timeval boottime;
+ char timebuf[64];
Why 64?
Well, any recommendation? Is the a _MAX define somewhere?
I always use 64 but if there is something better I'll use it.
char *bp, *ep, *memf, *nextp, *nlistf, *p, *q, *visbp;
+ const char *timefmt =3D "%d %b %T";
kvm_t *kd;
+ time_t time;
size_t buflen, bufpos;
long pri;
- int ch, clear;
+ int ch, clear, timeconv;
timeconv should be a bool.
OK...
bool all;
all =3D false;
clear =3D false;
+ timeconv =3D false;
(void) setlocale(LC_CTYPE, "");
memf =3D nlistf =3D NULL;
- while ((ch =3D getopt(argc, argv, "acM:N:")) !=3D -1)
+ while ((ch =3D getopt(argc, argv, "actf:M:N:")) !=3D -1)
switch(ch) {
case 'a':
all =3D true;
@@ -95,6 +101,12 @@
case 'c':
clear =3D true;
break;
+ case 't':
+ timeconv =3D true;
+ break;
+ case 'f':
+ timefmt =3D optarg;
+ break;
case 'M':
memf =3D optarg;
break;
@@ -109,6 +121,13 @@
if (argc !=3D 0)
usage();
+ if( timeconv ) {
So the spacing doesn't meet style(9). "if (timeconv) {" is the
preferred
spacing.
Yes, that's why I offered to re-format it...
+ int mib[6] =3D { CTL_KERN, KERN_BOOTTIME };
+ size_t l =3D sizeof boottime;
sizeof(boottime) is the preferred spelling here.
+ if (sysctl(mib, 2, &boottime, &l, 0, 0) < 0)
+ err(1, "sysctl kern.boottime");
+ }
+
if (memf =3D=3D NULL) {
/*
* Running kernel. Use sysctl. This gives an
unwrapped
buffer
@@ -200,7 +219,22 @@
}
(void)strvisx(visbp, p, nextp - p, 0);
- (void)printf("%s", visbp);
+ bufpos =3D strspn( visbp+1, "0123456789" ) + 1;
No check for overflow here. *bufpos may point to a NUL and +1 will
point
it past that NULL.
bufpos is no pointer but size_t. visbp[ bufpos ] will never point past
'\0' as I start at visbp + 1 for the strspn().
But the test of visbp[ bufpos+1 ] below is not OK. I'll fix that...
It shouldn't, but it might. And you should do something more like
if (!timeconv) {
<the existing printf>;
} else {
decode the buffer
}
I din't want to duplicate <the existing printf> too often in case
timeconv is desired but fails later for whatever reasons. So would
is the recommendation here?
1. Whenever it fails, do <the existing printf> and continue?
2. Place <the existing printf> at the end and "goto" it?
3. ??
But you should check things in the right order so you can't overflow.
Your
code already has a fallback for printing things...
*ALSO* The parsing is wrong. When show_timestamp=3D2 it will have a fractional part (so .xxxx) that should be parsed as well. This also
throws
off the math that just adds to the second of time timeval.
Right, the conversion gets aborted in this case (I never used show_timestamp=3D2 ;-)). I'll have a look at it...
+ if( timeconv !=3D true
+ || bufpos < 2
+ || visbp[0] !=3D '['
+ || visbp[bufpos] !=3D ']'
+ || visbp[bufpos+1] !=3D ' ' ) {
+ (void)printf("%s", visbp);
+ continue;
+ }
+
+ visbp[bufpos] =3D '\0';
+ time =3D boottime.tv_sec + strtoull( visbp+1, NULL,=
10
);
+ if( strftime( timebuf, sizeof timebuf, timefmt,
localtime(
&time ) ) !=3D 0 )
Same spacing. comment about parens. And note that we're strongly encouraging {} even for single line statements.
OK...
...
So that's my feedback on the first round of patches. You should do a
github
pull request
or a Phabricator review. Do not put this in a bugzilla bug. Bugzilla
is not
a code review tool
and I suspect that feedback on the revision will be needed (if nothin=
g
else
than for the man
page that we've not seen yet). github is likely easiest for you, and
I'll
keep an eye out there.
Phabricator is a lot more work to get started. If you are going to do=
a
bunch of reviews, it
may make sense to climb the hill (or for other parts of the code whos=
e
maintainers don't do
github). If it's just this one, and you have a github account, I'd recommend that as the path
I used Phabricator once (https://reviews.freebsd.org/D46313) but I thin=
k
I'll follow your advice and try the github way...
-Andre
I think opening review on Phabricator alone is easily missed.
So I basically file a PR on Bugzilla, open review and introduce
the D number of the review on Bugzilla PR.
Phabricator at this point has no oversight (though there's some work
to change that) and thousands of open PRs. It's impossible to find useful things to land or review for huge swaths of the tree.
And pull request on GitHub alone is also easily missed for anyone
without GitHub account like me.
True, but they are easily found in comparison to Phabricator.
Upcoming (hopefully) moving from GitHub to Forgejo managed by
FreeBSD project could change the situation, but it's still
not official. I'm thinking about how my workflow should be
non the switch.
So it's not a move from github. Github is there to allow us to accept more submissions in a way that has less friction and a higher likelihood of
success
than phabricator or bugzilla patches for new contributors to the src tree.
It
doesn't matter at all to the other workflows the project has setup that
tend to
be the main work flows. Those workflows are very hard for non-committers to use, hence the adding of github as an additional submission method.
Moving from cgit to Forgejo is more fundamental. It moves the primary
workflow
of the project from a weird, bespoke, hodge-podge of tools and isolated use case
solutions to an integrated workflow that committer and non-committer alike
can
access with an acceptable amount of friction.
Warner
--000000000000d6140b06490e3599
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><div dir=3D"ltr"><br></div><br><div class=3D"gmail_quote g= mail_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Fri, Jan 23,=
2026 at 2:21=E2=80=AFAM Tomoaki AOKI <<a href=3D"mailto:
junchoon@dec.sa= kura.ne.jp">
junchoon@dec.sakura.ne.jp</a>> wrote:<br></div><blockquote c= lass=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px soli=
d rgb(204,204,204);padding-left:1ex">On Fri, 23 Jan 2026 09:40:17 +0100<br> Andre Albsmeier <<a href=3D"mailto:
mail@fbsd2.e4m.org" target=3D"_blank"= >
mail@fbsd2.e4m.org</a>> wrote:<br>
> On Thu, 22-Jan-2026 at 08:31:15 -0700, Warner Losh wrote:<br>
> > On Thu, Jan 22, 2026 at 1:46=E2=80=AFAM Andre Albsmeier <<a hr= ef=3D"mailto:
mail@fbsd2.e4m.org" target=3D"_blank">
mail@fbsd2.e4m.org</a>&g=
t; wrote:<br>
> > <br>
> > > On Fri, 19-Dec-2025 at 20:37:41 +0000, Jamie Landeg-Jones wr= ote:<br>
> > > > void <<a href=3D"mailto:
void@f-m.fm" target=3D"_blan= k">
void@f-m.fm</a>> wrote:<br>
> > > ><br>
> > > > >...<br>
> > > > > and so dmsg has things like<br>
> > > > ><br>
> > > > > [1353919] swp_pager_getswapspace(32): failed<br>
> > > > ><br>
> > > > > the [1353919] I guess being the timestamp.<br>
> > > > ><br>
> > > > > ...<br>
> > > > ><br>
> > > > Yes! You can get the value from sysctl kern.boottime.<b=
> > > ><br>
> > > > Here is a small program I wrote a while back, just call=
it<br>
> > > > as a dmesg substitute.<br>
> > > > ...<br>
> > > > Cheers, Jamie<br>
> > > ><br>
> > > > #!/bin/sh -efu<br>
> > > > set -efu<br>
> > > ><br>
> > > > boottime=3D"$(/sbin/sysctl -n kern.boottime | /usr= /local/bin/gawk '{printf<br>
> > > "%d", gensub ("^.* sec =3D ([1-9][0-9]*), .*$= ", "\\1", 1)}')"<br>
> > > ><br>
> > > > [ -z "$(printf '%s' "$boottime" =
| /usr/bin/egrep '^0$|^[1-9][0-9]*$')" ]<br>
> > > && { printf 'Invalid boottime retrieved.\n' = >& 2; exit 1; }<br>
> > > ><br>
> > > > /sbin/dmesg "$@" | /usr/local/bin/gawk -v boo= ttime=3D"$boottime" '<br>
> > > ><br>
> > > >=C2=A0 =C2=A0 =C2=A0{<br>
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0uptime =3D gensub ("^\\[= ([1-9][0-9]*)\\] .*$", "\\1", 1)<br>
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0if (uptime =3D=3D $0) realtim=
e =3D "??? ?? ??:??;??"<br>
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 else realtime =3D strftime (= "%b %d %T", uptime + boottime)<br>
> > > ><br>
> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0print realtime " " = $0<br>
> > > >=C2=A0 =C2=A0 =C2=A0}'<br>
> > ><br>
> > > FWIW, this is a patch for dmesg(1) I use. You can enable tim= estamp<br>
> > > conversion using -t and optionally specify a different outpu=
t format<br>
> > > using -f "fmt".<br>
> > ><br>
> > > If interested for inclusion in base, I could try to re-forma=
t it<br>
> > > and come up with a manpage diff...<br>
> > ><br>
> > <br>
> > Yes. I've done a quick review inline.<br>
> <br>
> Thanks...<br>
> <br>
> > > --- sbin/dmesg/dmesg.c=C2=A0 2023-12-27 17:49:57.000000000 += 0100<br>
> > > +++ sbin/dmesg/dmesg.c=C2=A0 2026-01-22 09:20:28.987020000 += 0100<br>
> > > @@ -60,6 +60,7 @@<br>
> > >=C2=A0 #include <unistd.h><br>
> > >=C2=A0 #include <vis.h><br>
> > >=C2=A0 #include <sys/syslog.h><br>
> > > +#include <time.h><br>
> > ><br>
> > >=C2=A0 static struct nlist nl[] =3D {<br>
> > >=C2=A0 #define=C2=A0 =C2=A0 =C2=A0 =C2=A0 X_MSGBUF=C2=A0 =C2=
=A0 =C2=A0 =C2=A0 0<br>
> > > @@ -76,18 +77,23 @@<br>
> > >=C2=A0 main(int argc, char *argv[])<br>
> > >=C2=A0 {<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0struct msgbuf *bufp, cur;<b=
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0struct timeval boottime;<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0char timebuf[64];<br>
> > ><br>
> > <br>
> > Why 64?<br>
> <br>
> Well, any recommendation? Is the a _MAX define somewhere?<br>
> I always use 64 but if there is something better I'll use it.<br>
> <br>
> > <br>
> > <br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0char *bp, *ep, *memf, *next=
p, *nlistf, *p, *q, *visbp;<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0const char *timefmt =3D "%d=
%b %T";<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0kvm_t *kd;<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0time_t time;<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0size_t buflen, bufpos;<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0long pri;<br>
> > > -=C2=A0 =C2=A0 =C2=A0 =C2=A0int ch, clear;<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0int ch, clear, timeconv;<br>
> > ><br>
> > <br>
> > timeconv should be a bool.<br>
> <br>
> OK...<br>
> <br>
> > <br>
> > <br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0bool all;<br>
> > ><br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0all =3D false;<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0clear =3D false;<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0timeconv =3D false;<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(void) setlocale(LC_CTYPE, = "");<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0memf =3D nlistf =3D NULL;<b=
> > > -=C2=A0 =C2=A0 =C2=A0 =C2=A0while ((ch =3D getopt(argc, argv=
, "acM:N:")) !=3D -1)<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0while ((ch =3D getopt(argc, argv=
, "actf:M:N:")) !=3D -1)<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0switch(ch) {<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0case 'a':<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0all =3D true;<br>
> > > @@ -95,6 +101,12 @@<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0case 'c':<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0clear =3D true;<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0case=
't':<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0timeconv =3D true;<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0break;<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0case=
'f':<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0timefmt =3D optarg;<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0break;<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0case 'M':<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0memf =3D optarg;<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0break;<br>
> > > @@ -109,6 +121,13 @@<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (argc !=3D 0)<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0usage();<br>
> > ><br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0if( timeconv ) {<br>
> > ><br>
> > <br>
> > So the spacing doesn't meet style(9). "if (timeconv) {&q= uot; is the preferred<br>
> > spacing.<br>
> <br>
> Yes, that's why I offered to re-format it...<br>
> <br>
> > <br>
> > <br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0int = mib[6] =3D { CTL_KERN, KERN_BOOTTIME };<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0size=
_t l =3D sizeof boottime;<br>
> > ><br>
> > <br>
> > sizeof(boottime) is the preferred spelling here.<br>
> > <br>
> > <br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (= sysctl(mib, 2, &boottime, &l, 0, 0) < 0)<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0err(1, "sysctl kern.boottime");<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 }<br>
> > > +<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if (memf =3D=3D NULL) {<br> > > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0/*<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 * Running kernel.=C2=A0 Use sysctl.=C2=A0 This gives an unwrapped<br>
> > > buffer<br>
> > > @@ -200,7 +219,22 @@<br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0}<br>
> > ><br>
> > >=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0(void)strvisx(visbp, p, nextp - p, 0);<br>
> > > -=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(voi= d)printf("%s", visbp);<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0bufp=
os =3D strspn( visbp+1, "0123456789" ) + 1;<br>
> > ><br>
> > <br>
> > No check for overflow here.=C2=A0 *bufpos may point to a NUL and =
+1 will point<br>
> > it past that NULL.<br>
> <br>
> bufpos is no pointer but size_t. visbp[ bufpos ] will never point past=
> '\0' as I start at visbp + 1 for the strspn().<br>
> <br>
> But the test of visbp[ bufpos+1 ] below is not OK. I'll fix that..= .<br>
> <br>
> > It shouldn't, but it might. And you should do something more = like<br>
> > <br>
> > if (!timeconv) {<br>
> > <the existing printf>;<br>
> > } else {<br>
> > decode the buffer<br>
> > }<br>
> <br>
> I din't want to duplicate <the existing printf> too often in=
case<br>
> timeconv is desired but fails later for whatever reasons. So would<br> > is the recommendation here?<br>
> <br>
> 1. Whenever it fails, do <the existing printf> and continue?<br> > <br>
> 2. Place <the existing printf> at the end and "goto" i= t?<br>
> <br>
> 3. ??<br>
> <br>
> > <br>
> > But you should check things in the right order so you can't o= verflow. Your<br>
> > code already has a fallback for printing things...<br>
> > <br>
> > *ALSO* The parsing is wrong. When show_timestamp=3D2 it will have=
a<br>
> > fractional part (so .xxxx) that should be parsed as well. This al=
so throws<br>
> > off the math that just adds to the second of time timeval.<br>
> <br>
> Right, the conversion gets aborted in this case (I never used<br>
> show_timestamp=3D2 ;-)). I'll have a look at it...<br>
> <br>
> > <br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if( = timeconv !=3D true<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 || = bufpos < 2<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 || = visbp[0] !=3D '['<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 || = visbp[bufpos] !=3D ']'<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 || = visbp[bufpos+1] !=3D ' ' ) {<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0(void)printf("%s", visbp);<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0continue;<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0}<br=
> > > +<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0visb= p[bufpos] =3D '\0';<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0time=
=3D boottime.tv_sec + strtoull( visbp+1, NULL, 10 );<br>
> > > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0if( = strftime( timebuf, sizeof timebuf, timefmt, localtime(<br>
> > > &time ) ) !=3D 0 )<br>
> > ><br>
> > <br>
> > Same spacing. comment about parens. And note that we're stron= gly<br>
> > encouraging {} even for single line statements.<br>
> <br>
> OK...<br>
> <br>
> > ...<br>
> > So that's my feedback on the first round of patches. You shou=
ld do a github<br>
> > pull request<br>
> > or a Phabricator review. Do not put this in a bugzilla bug. Bugzi= lla is not<br>
> > a code review tool<br>
> > and I suspect that feedback on the revision will be needed (if no= thing else<br>
> > than for the man<br>
> > page that we've not seen yet). github is likely easiest for y= ou, and I'll<br>
> > keep an eye out there.<br>
> > Phabricator is a lot more work to get started. If you are going t=
o do a<br>
> > bunch of reviews, it<br>
> > may make sense to climb the hill (or for other parts of the code = whose<br>
> > maintainers don't do<br>
> > github). If it's just this one, and you have a github account=
, I'd<br>
> > recommend that as the path<br>
> <br>
> I used Phabricator once (<a href=3D"
https://reviews.freebsd.org/D46313=
" rel=3D"noreferrer" target=3D"_blank">
https://reviews.freebsd.org/D46313</= a>) but I think<br>
> I'll follow your advice and try the github way...<br>
> <br>
>=C2=A0 =C2=A0 =C2=A0 =C2=A0-Andre<br>
I think opening review on Phabricator alone is easily missed.<br>
So I basically file a PR on Bugzilla, open review and introduce<br>
the D number of the review on Bugzilla PR.<br></blockquote><div><br></div><= div>Phabricator at this point has no oversight (though there's some wor= k</div><div>to change that) and thousands of open PRs. It's impossible =
to find useful</div><div>things to land or review for huge swaths of the tr= ee.</div><div>=C2=A0</div><blockquote class=3D"gmail_quote" style=3D"margin= :0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"=
And pull request on GitHub alone is also easily missed for anyone<br>
without GitHub account like me.<br></blockquote><div><br></div><div>True, b=
ut they are easily found in comparison to Phabricator.</div><div>=C2=A0</di= v><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;borde= r-left:1px solid rgb(204,204,204);padding-left:1ex">
Upcoming (hopefully) moving from GitHub to Forgejo managed by<br>
FreeBSD project could change the situation, but it's still<br>
not official. I'm thinking about how my workflow should be<br>non the s= witch.<br></blockquote><div><br></div><div>So it's not a move from gith= ub. Github is there to allow us to accept more</div><div>submissions in a w=
ay that has less friction and a higher likelihood of success</div><div>than=
phabricator or bugzilla patches for new contributors=C2=A0to the src tree.=
It</div><div>doesn't matter at all to the other workflows the project = has setup that tend to</div><div>be the main work flows. Those workflows ar=
e very hard for non-committers to</div><div>use, hence the adding of github=
as an additional submission method.</div><div><br></div><div>Moving from c= git to Forgejo is more fundamental. It moves the primary workflow</div><div= >of the project from a weird, bespoke, hodge-podge of tools and isolated us=
e case</div><div>solutions to an integrated workflow that committer and non= -committer alike can</div><div>access with an acceptable amount of friction= .</div><div><br></div><div>Warner</div><div><br></div></div></div>
--000000000000d6140b06490e3599--
--
Posted automagically by a mail2news gateway at muc.de e.V.
Please direct questions, flames, donations, etc. to
news-admin@muc.de
--- Synchronet 3.21a-Linux NewsLink 1.2