From: Han Boetes Subject: Re: replace 2 last instances of strncpy with strlcpy To: Omar Polo Cc: tech@openbsd.org Date: Wed, 25 Feb 2026 17:48:21 +0100 Thanks for your reply. It took quite a bit of pondering about the subtle difference, but now it makes sense. BR Han On 2/24/26 11:36 PM, Omar Polo wrote: > Hello, > > Han Boetes wrote: >> I would also like to propose this minor diff. > On this one instead I'm a little bit on the fence. > > I think that strncpy in this case is a bit better than strlcpy because > we're copying a string NOT until the NUL terminator at the end. There > is also the needed bounds checking on the destination buffer. > > strlcpy instead is *generally* used to copy the whole string into a > different buffer. > > Now, the way you're using strlcpy() would produce the same effect, but I > think that using strncpy here is slightly more clear. > >> BR >> Han >> > (i'm reattaching the diff, as it was mangled, just for the archive) > > diff /home/op/w/mg > path + /home/op/w/mg > commit - bb4e7911d276b83dbf547938ad8bc12ff94c2d0e > blob - e4a539de6caf5bcea204637f6d994b043726ef1a > file + extend.c > --- extend.c > +++ extend.c > @@ -600,10 +600,8 @@ evalbuffer(int f, int n) > llen = llength(lp); > if (llen >= BUFSIZE) > return (FALSE); > - (void)strncpy(excbuf, ltext(lp), llen); > + (void)strlcpy(excbuf, ltext(lp), llen + 1); > > - /* make sure the line is terminated */ > - excbuf[llen] = '\0'; > if ((s = excline(excbuf, llen, lnum)) != TRUE) { > cleanup(); > return (s); > commit - bb4e7911d276b83dbf547938ad8bc12ff94c2d0e > blob - 8c9d797334d728c729efb261637974c9f66f9a60 > file + tags.c > --- tags.c > +++ tags.c > @@ -466,8 +466,7 @@ curtoken(int f, int n, char *token) > r = FALSE; > goto cleanup; > } > - strncpy(token, ltext(curwp->w_dotp) + tdoto, size); > - token[size] = '\0'; > + strlcpy(token, ltext(curwp->w_dotp) + tdoto, size + 1); > r = TRUE; > > cleanup: