svn commit: r273576 - head/sys/dev/uart

Mateusz Guzik mjguzik at gmail.com
Fri Oct 24 05:58:26 UTC 2014


On Fri, Oct 24, 2014 at 05:39:32AM +0000, Marcelo Araujo wrote:
> Author: araujo (ports committer)
> Date: Fri Oct 24 05:39:32 2014
> New Revision: 273576
> URL: https://svnweb.freebsd.org/changeset/base/273576
> 
> Log:
>   Fix a leaked Storage Variable.
>   
>  int
>  uart_getenv(int devtype, struct uart_devinfo *di, struct uart_class *class)
>  {
> -	const char *spec;
> +	const char *cp, *spec;
>  	bus_addr_t addr = ~0U;
>  	int error;
>  
> @@ -214,12 +214,12 @@ uart_getenv(int devtype, struct uart_dev
>  	 * port (resp).
>  	 */
>  	if (devtype == UART_DEV_CONSOLE)
> -		spec = kern_getenv("hw.uart.console");
> +		cp = kern_getenv("hw.uart.console");
>  	else if (devtype == UART_DEV_DBGPORT)
> -		spec = kern_getenv("hw.uart.dbgport");
> +		cp = kern_getenv("hw.uart.dbgport");
>  	else
> -		spec = NULL;
> -	if (spec == NULL)
> +		cp = NULL;
> +	if (cp == NULL)
>  		return (ENXIO);
[..]
>  		default:
> +			freeenv(__DECONST(char *, cp));
>  			return (EINVAL);
>  		}
>  		if (*spec == '\0')
>  			break;
> -		if (*spec != ',')
> +		if (*spec != ',') {
> +			freeenv(__DECONST(char *, cp));
>  			return (EINVAL);
> +		}
>  		spec++;
>  	}
> +	freeenv(__DECONST(char *, cp));
>  

Why not 'char *cp;'? That would avoid __DECONST entirely and would not
require spec to change type.

There are some cosmetics around that may be worth fixing (e.g. if,
else-if instead of switch, while (1) instead of for (;;)).

-- 
Mateusz Guzik <mjguzik gmail.com>


More information about the svn-src-all mailing list