* Makefile.in (DLL_OFILES): Add ntea.o.

* cygwin.din (getxattr, listxattr, removexattr, setxattr, lgetxattr,
	llistxattr, lremovexattr, lsetxattr, fgetxattr, flistxattr,
	fremovexattr, fsetxattr): Export Linux extended attribute functions.
	Sort.
	* errno.cc (errmap): Add mappings for ERROR_EAS_DIDNT_FIT,
	ERROR_EAS_NOT_SUPPORTED, ERROR_EA_LIST_INCONSISTENT,
	ERROR_EA_TABLE_FULL, ERROR_FILE_CORRUPT, ERROR_INVALID_EA_NAME.
	* fhandler.h (class fhandler_base): Declare new fgetxattr and
	fsetxattr methods.
	(class fhandler_disk_file): Ditto.
	* fhandler.cc (fhandler_base::fgetxattr): New method.
	(fhandler_base::fsetxattr): New method.
	* fhandler_disk_file.cc (fhandler_disk_file::fgetxattr): New method.
	(fhandler_disk_file::fsetxattr): New method.
	* ntdll.h (STATUS_EA_TOO_LARGE): Define.
	(STATUS_NONEXISTENT_EA_ENTRY): Define.
	(STATUS_NO_EAS_ON_FILE): Define.
	* ntea.cc (read_ea): Rewrite for long pathnames and for using with
	Linux extended attribute functions.
	(write_ea): Ditto.
	(getxattr_worker): New static function.
	(getxattr): New function.
	(lgetxattr): New function.
	(fgetxattr): New function.
	(listxattr): New function.
	(llistxattr): New function.
	(flistxattr): New function.
	(setxattr_worker): New static function.
	(setxattr): New function.
	(lsetxattr): New function.
	(fsetxattr): New function.
	(removexattr): New function.
	(lsetxattr): New function.
	(fsetxattr): New function.
	* security.h (read_ea): Change declaration according to above changes.
	(write_ea): Ditto.
	* include/cygwin/version.h: Bump API minor version.
This commit is contained in:
Corinna Vinschen
2008-02-10 15:43:04 +00:00
parent bebb25961c
commit 50450dcc5f
11 changed files with 578 additions and 146 deletions

View File

@@ -946,6 +946,33 @@ cant_access_acl:
return res;
}
ssize_t
fhandler_disk_file::fgetxattr (const char *name, void *value, size_t size)
{
OBJECT_ATTRIBUTES attr;
if (pc.is_fs_special ())
{
set_errno (ENOTSUP);
return -1;
}
return read_ea (get_handle (), pc, name, (char *) value, size);
}
int
fhandler_disk_file::fsetxattr (const char *name, const void *value, size_t size,
int flags)
{
OBJECT_ATTRIBUTES attr;
if (pc.is_fs_special ())
{
set_errno (ENOTSUP);
return -1;
}
return write_ea (get_handle (), pc, name, (const char *) value, size, flags);
}
int
fhandler_disk_file::fadvise (_off64_t offset, _off64_t length, int advice)
{