mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	vfs: de-crapify "cp_new_stat()" function
It's an unreadable mess of 32-bit vs 64-bit #ifdef's that mostly follow a rather simple pattern. Make a helper #define to handle that pattern, in the process making the code both shorter and more readable. Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									d48b97b403
								
							
						
					
					
						commit
						a52dd971f9
					
				
					 1 changed files with 14 additions and 18 deletions
				
			
		
							
								
								
									
										32
									
								
								fs/stat.c
									
									
									
									
									
								
							
							
						
						
									
										32
									
								
								fs/stat.c
									
									
									
									
									
								
							| 
						 | 
					@ -190,24 +190,28 @@ SYSCALL_DEFINE2(fstat, unsigned int, fd, struct __old_kernel_stat __user *, stat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif /* __ARCH_WANT_OLD_STAT */
 | 
					#endif /* __ARCH_WANT_OLD_STAT */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#if BITS_PER_LONG == 32
 | 
				
			||||||
 | 
					#  define choose_32_64(a,b) a
 | 
				
			||||||
 | 
					#else
 | 
				
			||||||
 | 
					#  define choose_32_64(a,b) b
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define valid_dev(x)  choose_32_64(old_valid_dev,new_valid_dev)(x)
 | 
				
			||||||
 | 
					#define encode_dev(x) choose_32_64(old_encode_dev,new_encode_dev)(x)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
 | 
					static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct stat tmp;
 | 
						struct stat tmp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if BITS_PER_LONG == 32
 | 
						if (!valid_dev(stat->dev) || !valid_dev(stat->rdev))
 | 
				
			||||||
	if (!old_valid_dev(stat->dev) || !old_valid_dev(stat->rdev))
 | 
					 | 
				
			||||||
		return -EOVERFLOW;
 | 
							return -EOVERFLOW;
 | 
				
			||||||
#else
 | 
					#if BITS_PER_LONG == 32
 | 
				
			||||||
	if (!new_valid_dev(stat->dev) || !new_valid_dev(stat->rdev))
 | 
						if (stat->size > MAX_NON_LFS)
 | 
				
			||||||
		return -EOVERFLOW;
 | 
							return -EOVERFLOW;
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memset(&tmp, 0, sizeof(tmp));
 | 
						memset(&tmp, 0, sizeof(tmp));
 | 
				
			||||||
#if BITS_PER_LONG == 32
 | 
						tmp.st_dev = encode_dev(stat->dev);
 | 
				
			||||||
	tmp.st_dev = old_encode_dev(stat->dev);
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
	tmp.st_dev = new_encode_dev(stat->dev);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
	tmp.st_ino = stat->ino;
 | 
						tmp.st_ino = stat->ino;
 | 
				
			||||||
	if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
 | 
						if (sizeof(tmp.st_ino) < sizeof(stat->ino) && tmp.st_ino != stat->ino)
 | 
				
			||||||
		return -EOVERFLOW;
 | 
							return -EOVERFLOW;
 | 
				
			||||||
| 
						 | 
					@ -217,15 +221,7 @@ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf)
 | 
				
			||||||
		return -EOVERFLOW;
 | 
							return -EOVERFLOW;
 | 
				
			||||||
	SET_UID(tmp.st_uid, stat->uid);
 | 
						SET_UID(tmp.st_uid, stat->uid);
 | 
				
			||||||
	SET_GID(tmp.st_gid, stat->gid);
 | 
						SET_GID(tmp.st_gid, stat->gid);
 | 
				
			||||||
#if BITS_PER_LONG == 32
 | 
						tmp.st_rdev = encode_dev(stat->rdev);
 | 
				
			||||||
	tmp.st_rdev = old_encode_dev(stat->rdev);
 | 
					 | 
				
			||||||
#else
 | 
					 | 
				
			||||||
	tmp.st_rdev = new_encode_dev(stat->rdev);
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
#if BITS_PER_LONG == 32
 | 
					 | 
				
			||||||
	if (stat->size > MAX_NON_LFS)
 | 
					 | 
				
			||||||
		return -EOVERFLOW;
 | 
					 | 
				
			||||||
#endif	
 | 
					 | 
				
			||||||
	tmp.st_size = stat->size;
 | 
						tmp.st_size = stat->size;
 | 
				
			||||||
	tmp.st_atime = stat->atime.tv_sec;
 | 
						tmp.st_atime = stat->atime.tv_sec;
 | 
				
			||||||
	tmp.st_mtime = stat->mtime.tv_sec;
 | 
						tmp.st_mtime = stat->mtime.tv_sec;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue