[systemd-devel] initializing _cleanup_* variables [was: [PATCH 01/12] fsckd daemon for inter-fsckd communication]

Martin Pitt martin.pitt at ubuntu.com
Wed Jan 28 07:47:47 PST 2015


Hey Zbyszek,

Zbigniew Jędrzejewski-Szmek [2015-01-28 15:37 +0100]:
> > +static int handle_requests(int socket_fd) {
> > +        Clients *first = NULL;
> > +        usec_t last_activity = 0;
> > +        int numdevices = 0, clear = 0;
> > +        double percent = 100;
> > +        _cleanup_fclose_ FILE *console = NULL;
> NULL not necessary (and you don't have it in similar circumstances above ;))

How is that not necessary? Just because the very next line initializes
it, and there is no exit path before? Because in the general case it
certainly is necessary, otherwise the _cleanup_ handler will try to
free/close/clean up a random pointer value and crash.

So IMHO it's a good defensive habit to always init _cleanup_* vars
with NULL. In the future someone might put some code with "return"
before the fopen() below, and then get a crash.

Or is there some gcc magic that I missed? (I thought only global
variables were guaranteed to be NULL, not stack vars).

> 
> > +
> > +        console = fopen("/dev/console", "we");

Thanks for clarifying,

Martin
-- 
Martin Pitt                        | http://www.piware.de
Ubuntu Developer (www.ubuntu.com)  | Debian Developer  (www.debian.org)
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.freedesktop.org/archives/systemd-devel/attachments/20150128/f7c6668d/attachment.sig>


More information about the systemd-devel mailing list