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