[lttng-dev] [PATCH] Rewrites lttng-ctl's set_session_daemon_path(), fix snprintf() return value tests so the code works with both GNU C < 2.1 and >= 2.1

David Goulet david.goulet at polymtl.ca
Mon Jan 30 16:35:16 EST 2012


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Merged thanks!

We did indeed validate the function and it's seems ok and test passes.

If you are changing good portion of code, you can run "make check" to start the
tests and you'll see if you break something. It's not very complete tests but
it's a start.

Cheers
David

On 12-01-30 04:26 PM, Thibault, Daniel wrote:
>    This fifth patch rewrites lttng-ctl's set_session_daemon_path() to avoid duplicating snippets of code.  It also fixes the snprintf return value test so the code works with both GNU C < 2.1 and >= 2.1.  With GNU C < 2.1, snprintf returns -1 if the target buffer is too small; with GNU C >= 2.1, snprintf returns the required size (excluding the closing null) under the same conditions.
> 
>    I do believe it is functionally identical to the version it replaces, but someone should check to make sure.   :-)
> 
> ------------------------------
> From 3d90c8707c362c9ecf0836c25d500c818ba2e2f0 Mon, 30 Jan 2012 16:25:29 -0500
> From: Daniel U. Thibault <daniel.thibault at drdc-rddc.gc.ca>
> Date: Mon, 30 Jan 2012 16:25:15 -0500
> Subject: [PATCH] Rewrites lttng-ctl's set_session_daemon_path(), fix snprintf() return value tests so the code works with both GNU C < 2.1 and >= 2.1
> 
> Signed-off-by: Daniel U. Thibault <daniel.thibault at drdc-rddc.gc.ca>
> 
> diff --git a/lttng2-lttng-tools-2.0-pre18+-5c73c59/src/lib/lttng-ctl/lttng-ctl.c b/lttng2-lttng-tools-2.0-pre18+-5c73c59/src/lib/lttng-ctl/lttng-ctl.c
> index 537934f..65aa3e3 100644
> --- a/lttng2-lttng-tools-2.0-pre18+-5c73c59/src/lib/lttng-ctl/lttng-ctl.c
> +++ b/lttng2-lttng-tools-2.0-pre18+-5c73c59/src/lib/lttng-ctl/lttng-ctl.c
> @@ -228,35 +228,31 @@
>  		in_tgroup = check_tracing_group(tracing_group);
>  	}
>  
> -	if (uid == 0) {
> -		/* Root */
> +	if ((uid == 0) || in_tgroup) {
>  		copy_string(sessiond_sock_path,
>  				DEFAULT_GLOBAL_CLIENT_UNIX_SOCK,
>  				sizeof(sessiond_sock_path));
> -	} else if (in_tgroup) {
> -		/* Tracing group */
> -		copy_string(sessiond_sock_path,
> -				DEFAULT_GLOBAL_CLIENT_UNIX_SOCK,
> -				sizeof(sessiond_sock_path));
> -
> -		ret = try_connect_sessiond(sessiond_sock_path);
> -		if (ret < 0) {
> -			/* Global session daemon not available */
> -			if (snprintf(sessiond_sock_path, sizeof(sessiond_sock_path),
> -						DEFAULT_HOME_CLIENT_UNIX_SOCK,
> -						getenv("HOME")) < 0) {
> -				return -ENOMEM;
> -			}
>  		}
> -	} else {
> -		/* Not in tracing group and not root, default */
> -		if (snprintf(sessiond_sock_path, PATH_MAX,
> -					DEFAULT_HOME_CLIENT_UNIX_SOCK,
> -					getenv("HOME")) < 0) {
> +	if (uid != 0) {
> +		if (in_tgroup) {
> +			/* Tracing group */
> +			ret = try_connect_sessiond(sessiond_sock_path);
> +			if (ret >= 0) goto end;
> +			/* Global session daemon not available... */
> +		}
> +		/* ...or not in tracing group (and not root), default */
> +		/*
> +		 * With GNU C <  2.1, snprintf returns -1 if the target buffer is too small;
> +		 * With GNU C >= 2.1, snprintf returns the required size (excluding closing null)
> +		 */
> +		ret = snprintf(sessiond_sock_path, sizeof(sessiond_sock_path),
> +				DEFAULT_HOME_CLIENT_UNIX_SOCK,
> +				getenv("HOME"));
> +		if ((ret < 0) || (ret >= sizeof(sessiond_sock_path))) {
>  			return -ENOMEM;
>  		}
>  	}
> -
> +end:
>  	return 0;
>  }
> 
> ------------------------------
> 
> Daniel U. Thibault
> R & D pour la défense Canada - Valcartier (RDDC Valcartier) / Defence R&D Canada - Valcartier (DRDC Valcartier)
> Système de systèmes (SdS) / System of Systems (SoS)
> Solutions informatiques et expérimentations (SIE) / Computing Solutions and Experimentations (CSE)
> 2459 Boul. Pie XI Nord
> Québec, QC  G3J 1X5
> CANADA
> Vox : (418) 844-4000 x4245
> Fax : (418) 844-4538
> NAC: 918V QSDJ
> Gouvernement du Canada / Government of Canada
> <http://www.valcartier.drdc-rddc.gc.ca/>
> 
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)

iQEcBAEBAgAGBQJPJw0UAAoJEELoaioR9I02eSsIAMjz/mUaOmPnK4pt187VIDin
ibA80F8irkILJfZMa1Vx2E4KsvDpAsmeVBlsf72A8otUsMNf72V0T+Vm2sRsXxK4
Xy4Y79QMaMplk1XgYcRZqTEIQear02SxG+rQMIo4R+gZxXWpyy+vC63mQoib67wE
v70w6t8nJ0q9cZasxUKu1iibu5GSGul7aQZi0naPJ2ODiFG6cXVUe0IBqhcF4RYe
7nXOauNLeUAMGuBHRetEzaXy3dr/F6ff1WctP2Smq0pRjKg5FGPg9T09uK2dVJAm
/ZLkcsF0dfK6fwppUG3Lof0M/p+ala/C9R62o0hwkdsPdckTnkfTYsE5J2ClxZw=
=89FN
-----END PGP SIGNATURE-----



More information about the lttng-dev mailing list