25 lines
		
	
	
		
			484 B
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			25 lines
		
	
	
		
			484 B
		
	
	
	
		
			C
		
	
	
	
	
	
#include "inc.h"
 | 
						|
 | 
						|
ssize_t fs_rdlink(ino_t ino_nr, struct fsdriver_data *data, size_t bytes)
 | 
						|
{
 | 
						|
	struct inode *i_node;
 | 
						|
	size_t len;
 | 
						|
	int r;
 | 
						|
 | 
						|
	/* Try to get inode according to its index */
 | 
						|
	if ((i_node = find_inode(ino_nr)) == NULL)
 | 
						|
		return EINVAL; /* no inode found */
 | 
						|
 | 
						|
	if (!S_ISLNK(i_node->i_stat.st_mode))
 | 
						|
		return EACCES;
 | 
						|
 | 
						|
	len = strlen(i_node->s_link);
 | 
						|
	if (len > bytes)
 | 
						|
		len = bytes;
 | 
						|
 | 
						|
	if ((r = fsdriver_copyout(data, 0, i_node->s_link, len)) != OK)
 | 
						|
		return r;
 | 
						|
 | 
						|
	return len;
 | 
						|
}
 |