mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	Gcc doesn't know that "len" is guaranteed to be >=1 by dcache and generates standard while-loop prologue duplicating loop condition. add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-27 (-27) function old new delta name_to_int 104 77 -27 Link: http://lkml.kernel.org/r/20170912195213.GB17730@avx2 Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
		
			
				
	
	
		
			23 lines
		
	
	
	
		
			361 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			23 lines
		
	
	
	
		
			361 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include <linux/dcache.h>
 | 
						|
 | 
						|
unsigned name_to_int(const struct qstr *qstr)
 | 
						|
{
 | 
						|
	const char *name = qstr->name;
 | 
						|
	int len = qstr->len;
 | 
						|
	unsigned n = 0;
 | 
						|
 | 
						|
	if (len > 1 && *name == '0')
 | 
						|
		goto out;
 | 
						|
	do {
 | 
						|
		unsigned c = *name++ - '0';
 | 
						|
		if (c > 9)
 | 
						|
			goto out;
 | 
						|
		if (n >= (~0U-9)/10)
 | 
						|
			goto out;
 | 
						|
		n *= 10;
 | 
						|
		n += c;
 | 
						|
	} while (--len > 0);
 | 
						|
	return n;
 | 
						|
out:
 | 
						|
	return ~0U;
 | 
						|
}
 |