On Mon, 04.08.14 17:27, Zbigniew Jędrzejewski-Szmek ([email protected]) wrote:

> 
> On Mon, Aug 04, 2014 at 05:21:46PM +0200, Lennart Poettering wrote:
> > On Wed, 30.07.14 00:37, Zbigniew Jędrzejewski-Szmek ([email protected]) 
> > wrote:
> > 
> > > > +_public_ int sd_network_get_domainname(int ifindex, char **domainname) 
> > > > {
> > > > +        _cleanup_free_ char *s = NULL, *p = NULL;
> > > > +        int r;
> > > > +
> > > > +        assert_return(ifindex > 0, -EINVAL);
> > > > +        assert_return(domainname, -EINVAL);
> > > > +
> > > > +        if (asprintf(&p, "/run/systemd/netif/links/%d", ifindex) < 0)
> > > > +                return -ENOMEM;
> > > Not terribly important, but please spell that as:
> > > 
> > >            char p[sizeof("/run/systemd/netif/links/") + 
> > > DECIMAL_STRING_MAX(int)];
> > >      snprintf(p, sizeof(p), "/run/systemd/netif/links/%d",
> > >      ifindex);
> > 
> > Actually, I'd even use normal sprintf() here, not snprintf(), after all,
> > we carefully sized the string anyway, hence no need to enforce the size
> > limit here. Using sprintf() here makes is
> > clear to me that the buffer was carefully sized before, so I think would
> > be preferrable...
> On my TODO list is adding snprintf_check (or snprintf_assert, or 
> snprintf_sized,
> not sure about the name), which would wrap the snprintf in an assert
> to check that there was no truncation.
> 
> > In particular since snprintf() doesn't add a trailing NULL
> > if it truncates the string, which makes the whole excercise kinda
> > pointless... an snprintf() without something like char_array_0() invoked
> > right after it always raises my eyebrows. 
> Are you sure?
> 
> snprintf(3) implies that the terminating byte is always written. Testing
> confirms that fwiw.

Hmm, indeed. Apparently glibc always does that. Old solaris and windows
don't however, but we don't care about that...

So I figure we can drop char_array_0() invocations at most places,
possibly even get rid of the macro definition entirely...

Lennart

-- 
Lennart Poettering, Red Hat
_______________________________________________
systemd-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to