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;
|
|
}
|