@@ -285,6 +285,35 @@ ssize_t ErofsFile::pread(void *buf, size_t count, off_t offset)
285285 return read;
286286}
287287
288+ ssize_t ErofsFile::fgetxattr (const char *name, void *value, size_t size)
289+ {
290+ ssize_t value_size = 0 ;
291+
292+ value_size = erofs_getxattr (&file_private->inode , name, NULL , 0 );
293+ if (value_size < 0 )
294+ LOG_ERROR_RETURN (-1 , size, " [erofs] fail to get xattr `" , name);
295+ if ((size_t )value_size > size)
296+ LOG_ERROR_RETURN (-1 , -1 , " [erofs] buffer is too small to put xattr value of `" , name);
297+ return erofs_getxattr (&file_private->inode , name, (char *)value, value_size);
298+ }
299+
300+ ssize_t ErofsFile::flistxattr (char *list, size_t size)
301+ {
302+ ssize_t kllen;
303+
304+ kllen = erofs_listxattr (&file_private->inode , NULL , 0 );
305+ if (kllen < 0 )
306+ LOG_ERROR_RETURN (-1 , kllen, " [erofs] fail to list xattr" );
307+ if ((size_t )kllen > size)
308+ LOG_ERROR_RETURN (-1 , -1 , " [erofs buffer size is too small to put xattrs" );
309+ if (erofs_listxattr (&file_private->inode , list, kllen) != kllen)
310+ LOG_ERROR_RETURN (-1 , -1 , " [erofs] fail to list xattr" );
311+ return kllen;
312+ }
313+
314+ EROFS_UNIMPLEMENTED_FUNC (int , ErofsFile, fsetxattr(const char *name, const void *value, size_t size, int flags), -EROFS_UNIMPLEMENTED)
315+ EROFS_UNIMPLEMENTED_FUNC(int , ErofsFile, fremovexattr(const char *name), -EROFS_UNIMPLEMENTED)
316+
288317// ErofsFileSystem
289318EROFS_UNIMPLEMENTED_FUNC(photon::fs::IFile*, ErofsFileSystem, open(const char *pathname, int flags, mode_t mode), NULL)
290319EROFS_UNIMPLEMENTED_FUNC(photon::fs::IFile*, ErofsFileSystem, creat(const char *pathname, mode_t mode), NULL)
0 commit comments