svn commit: r306282 - head/sys/compat/cloudabi
Mateusz Guzik
mjg at FreeBSD.org
Fri Sep 23 23:08:25 UTC 2016
Author: mjg
Date: Fri Sep 23 23:08:23 2016
New Revision: 306282
URL: https://svnweb.freebsd.org/changeset/base/306282
Log:
cloudabi: use fget_cap instead of hand-rolling capability read
This has a side effect of unbreaking the build after r306272.
Discussed with: ed
Modified:
head/sys/compat/cloudabi/cloudabi_fd.c
Modified: head/sys/compat/cloudabi/cloudabi_fd.c
==============================================================================
--- head/sys/compat/cloudabi/cloudabi_fd.c Fri Sep 23 22:46:19 2016 (r306281)
+++ head/sys/compat/cloudabi/cloudabi_fd.c Fri Sep 23 23:08:23 2016 (r306282)
@@ -456,32 +456,19 @@ cloudabi_sys_fd_stat_get(struct thread *
struct cloudabi_sys_fd_stat_get_args *uap)
{
cloudabi_fdstat_t fsb = {};
- struct filedesc *fdp;
struct file *fp;
- seq_t seq;
cap_rights_t rights;
+ struct filecaps fcaps;
int error, oflags;
- bool modified;
/* Obtain file descriptor properties. */
- fdp = td->td_proc->p_fd;
- do {
- error = fget_unlocked(fdp, uap->fd, cap_rights_init(&rights),
- &fp, &seq);
- if (error != 0)
- return (error);
- if (fp->f_ops == &badfileops) {
- fdrop(fp, td);
- return (EBADF);
- }
-
- rights = *cap_rights(fdp, uap->fd);
- oflags = OFLAGS(fp->f_flag);
- fsb.fs_filetype = cloudabi_convert_filetype(fp);
-
- modified = fd_modified(fdp, uap->fd, seq);
- fdrop(fp, td);
- } while (modified);
+ error = fget_cap(td, uap->fd, cap_rights_init(&rights), &fp,
+ &fcaps);
+ if (error != 0)
+ return (error);
+ oflags = OFLAGS(fp->f_flag);
+ fsb.fs_filetype = cloudabi_convert_filetype(fp);
+ fdrop(fp, td);
/* Convert file descriptor flags. */
if (oflags & O_APPEND)
@@ -492,8 +479,9 @@ cloudabi_sys_fd_stat_get(struct thread *
fsb.fs_flags |= CLOUDABI_FDFLAG_SYNC;
/* Convert capabilities to CloudABI rights. */
- convert_capabilities(&rights, fsb.fs_filetype,
+ convert_capabilities(&fcaps.fc_rights, fsb.fs_filetype,
&fsb.fs_rights_base, &fsb.fs_rights_inheriting);
+ filecaps_free(&fcaps);
return (copyout(&fsb, (void *)uap->buf, sizeof(fsb)));
}
More information about the svn-src-head
mailing list