readlink() fuse

Purpose:

Read the target of a symbolic link

The buffer should be filled with a null terminated string. The buffer size argument includes the space for the terminating null character. If the linkname is too long to fit in the buffer, it should be truncated. The return value should be 0 for success.
Function:

int (*readlink) (const char *path, char *buf, size_t bufsize);

Эта функция должна реализовать считываение символьной ссылки на файл path (пути ) в область *buf ,причём *buf должен завершаться null-символом.

В ходе реализации может использоваться системная функция readlink()

/* ВНИМАНИЕ = системная функция  readlink() не добавляет null символ к передаваемой строке ,
который должен завершать строку, содержащую имя,
потому путь передаваемый передаваемый в readlink()
должен быть на один символ меньше пути для bb_readlink() - так
как  */
int bb_readlink(const char *path, char *link, size_t size)
{
    int retstat = 0;
    char fpath[PATH_MAX];
    
    log_msg("bb_readlink(path=\"%s\", link=\"%s\", size=%d)\n",
      path, link, size);
    bb_fullpath(fpath, path);
    
    retstat = readlink(fpath, link, size - 1); // передаём на сивол меньше
    if (retstat < 0)
    retstat = bb_error("bb_readlink readlink");
    else  {
    link[retstat] = '\0'; // завершаем строку спец-символом
    retstat = 0;
    }
    
    return retstat;
}