ukazkove zdrojaky

Dalibor Straka dast na panelnet.cz
Pátek Březen 3 22:40:13 CET 2006


On Fri, Mar 03, 2006 at 10:06:46PM +0100, Jan Kasprzak wrote:
> int mydev_probe(...)
> {
> 	if (!(mydev_priv = kmalloc(...))
> 		goto out1;
> 	....
> 	if (!register_interrupt(...))
> 		goto out2;
> 	....
> 	if (!register_chrdev(...))
> 		goto out3;
> 	....
> 
> 	return 0;
> out3:
> 	unregister_interrupt(...);
> out2:
> 	kfree(...);
> out1:
> 	return -ENODEV;
> }
> 
> Pokud byste tohle psal bez goto, utopil byste se ve vnorenych
> blocich. A presne proto je v tomto miste goto rozumne a zvysujici citelnost.
Nic proti kernelu, ale neutopil

{
	if (!out && !mydev_priv = kmalloc(...))
		out = out1;
	...	
	if (!out && !register_interrupt(...))
		out = out2;
	...	
	if (!out && !register_chrdev(...))
		out = out3;
	...
	return SUCCESS;

	switch(out){
		case out3: unregister_interrupt(...); /* no break! */
		case out2: kfree(...);
		case out1: return -ENODEV;
	}
}	

Docela bych se vsadil, ze vysledny kod bude identicky,
-- Dalibor Straka


Další informace o konferenci Linux