Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F156687347
D17388.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D17388.diff
View Options
Index: sys/compat/freebsd32/freebsd32_ioctl.h
===================================================================
--- sys/compat/freebsd32/freebsd32_ioctl.h
+++ sys/compat/freebsd32/freebsd32_ioctl.h
@@ -38,11 +38,6 @@
typedef __uint32_t caddr_t32;
-struct fiodgname_arg32 {
- int len;
- caddr_t32 buf;
-};
-
struct mem_range_op32
{
caddr_t32 mo_desc;
@@ -60,7 +55,6 @@
int pbm_memattr;
};
-#define FIODGNAME_32 _IOW('f', 120, struct fiodgname_arg32)
#define MEMRANGE_GET32 _IOWR('m', 50, struct mem_range_op32)
#define MEMRANGE_SET32 _IOW('m', 51, struct mem_range_op32)
#define SG_IO_32 _IOWR(SGIOC, 0x85, struct sg_io_hdr32)
Index: sys/compat/freebsd32/freebsd32_ioctl.c
===================================================================
--- sys/compat/freebsd32/freebsd32_ioctl.c
+++ sys/compat/freebsd32/freebsd32_ioctl.c
@@ -58,22 +58,6 @@
CTASSERT(sizeof(struct mem_range_op32) == 12);
-static int
-freebsd32_ioctl_fiodgname(struct thread *td,
- struct freebsd32_ioctl_args *uap, struct file *fp)
-{
- struct fiodgname_arg fgn;
- struct fiodgname_arg32 fgn32;
- int error;
-
- if ((error = copyin(uap->data, &fgn32, sizeof fgn32)) != 0)
- return (error);
- CP(fgn32, fgn, len);
- PTRIN_CP(fgn32, fgn, buf);
- error = fo_ioctl(fp, FIODGNAME, (caddr_t)&fgn, td->td_ucred, td);
- return (error);
-}
-
static int
freebsd32_ioctl_memrange(struct thread *td,
struct freebsd32_ioctl_args *uap, struct file *fp)
@@ -237,10 +221,6 @@
}
switch (uap->com) {
- case FIODGNAME_32:
- error = freebsd32_ioctl_fiodgname(td, uap, fp);
- break;
-
case MEMRANGE_GET32: /* FALLTHROUGH */
case MEMRANGE_SET32:
error = freebsd32_ioctl_memrange(td, uap, fp);
Index: sys/fs/devfs/devfs_vnops.c
===================================================================
--- sys/fs/devfs/devfs_vnops.c
+++ sys/fs/devfs/devfs_vnops.c
@@ -79,6 +79,14 @@
#include <vm/vm_extern.h>
#include <vm/vm_object.h>
+#ifdef COMPAT_FREEBSD32
+struct fiodgname_arg32 {
+ int len;
+ uint32_t buf; /* (void *) */
+};
+#define FIODGNAME_32 _IOC_NEWTYPE(FIODGNAME, struct fiodgname_arg32)
+#endif
+
static MALLOC_DEFINE(M_CDEVPDATA, "DEVFSP", "Metainfo for cdev-fp data");
struct mtx devfs_de_interlock;
@@ -767,6 +775,29 @@
return (error);
}
+static void *
+fiodgname_buf_get_ptr(void *fgnp, u_long com)
+{
+ union {
+ struct fiodgname_arg fgn;
+#ifdef COMPAT_FREEBSD32
+ struct fiodgname_arg32 fgn32;
+#endif
+ } *fgnup;
+
+ fgnup = fgnp;
+ switch (com) {
+ case FIODGNAME:
+ return (fgnup->fgn.buf);
+#ifdef COMPAT_FREEBSD32
+ case FIODGNAME_32:
+ return ((void *)(uintptr_t)fgnup->fgn32.buf);
+#endif
+ default:
+ panic("Unhandled ioctl command %ld", com);
+ }
+}
+
static int
devfs_ioctl(struct vop_ioctl_args *ap)
{
@@ -789,24 +820,27 @@
KASSERT(dev->si_refcount > 0,
("devfs: un-referenced struct cdev *(%s)", devtoname(dev)));
- if (com == FIODTYPE) {
+ switch (com) {
+ case FIODTYPE:
*(int *)ap->a_data = dsw->d_flags & D_TYPEMASK;
error = 0;
- goto out;
- } else if (com == FIODGNAME) {
+ break;
+ case FIODGNAME:
+#ifdef COMPAT_FREEBSD32
+ case FIODGNAME_32:
+#endif
fgn = ap->a_data;
p = devtoname(dev);
i = strlen(p) + 1;
if (i > fgn->len)
error = EINVAL;
else
- error = copyout(p, fgn->buf, i);
- goto out;
+ error = copyout(p, fiodgname_buf_get_ptr(fgn, com), i);
+ break;
+ default:
+ error = dsw->d_ioctl(dev, com, ap->a_data, ap->a_fflag, td);
}
- error = dsw->d_ioctl(dev, com, ap->a_data, ap->a_fflag, td);
-
-out:
dev_relthread(dev, ref);
if (error == ENOIOCTL)
error = ENOTTY;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sat, May 16, 5:01 PM (9 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33139098
Default Alt Text
D17388.diff (3 KB)
Attached To
Mode
D17388: Move 32-bit compat support for FIODGNAME to the right place.
Attached
Detach File
Event Timeline
Log In to Comment