summaryrefslogtreecommitdiff
path: root/minix/fs/isofs/link.c
blob: c6f7e37c525142b5c1f166c2de8f9e110fba506c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#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 = 0;
	int r;

	/* Try to get inode according to its index */
	if ((i_node = get_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_name);
	if (len > bytes)
		len = bytes;

	if ((r = fsdriver_copyout(data, 0, i_node->s_name, len)) != OK)
		return r;

	return len;
}