xref: /minix/minix/fs/isofs/link.c (revision ebfedea0)
1 #include "inc.h"
2 
3 ssize_t fs_rdlink(ino_t ino_nr, struct fsdriver_data *data, size_t bytes)
4 {
5 	struct inode *i_node;
6 	size_t len = 0;
7 	int r;
8 
9 	/* Try to get inode according to its index */
10 	if ((i_node = get_inode(ino_nr)) == NULL)
11 		return EINVAL; /* no inode found */
12 
13 	if (!S_ISLNK(i_node->i_stat.st_mode))
14 		return EACCES;
15 
16 	len = strlen(i_node->s_name);
17 	if (len > bytes)
18 		len = bytes;
19 
20 	if ((r = fsdriver_copyout(data, 0, i_node->s_name, len)) != OK)
21 		return r;
22 
23 	return len;
24 }
25