Skip to content
This repository was archived by the owner on Jun 9, 2020. It is now read-only.

Commit ae9e014

Browse files
authored
Merge pull request #61 from kazumi007/add-ioctl-cmd2
Support TCXONC, FIONREAD and FIONBIO commands in ioctl
2 parents a7905c0 + 1861bc4 commit ae9e014

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

src/fs/fs.c

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -267,6 +267,18 @@ darwinfs_ioctl(struct file *file, int cmd, uint64_t val0)
267267
linux_to_darwin_winsize(&ws, &lws);
268268
return syswrap(ioctl(fd, TIOCSWINSZ, &ws));
269269
}
270+
case LINUX_TCXONC: {
271+
int sel;
272+
switch(val0) {
273+
case LINUX_TCOOFF: sel = TCOOFF; break;
274+
case LINUX_TCOON: sel = TCOON; break;
275+
case LINUX_TCIOFF: sel = TCIOFF; break;
276+
case LINUX_TCION: sel = TCION; break;
277+
default:
278+
return -LINUX_EINVAL;
279+
}
280+
return syswrap(tcflow(fd, sel));
281+
}
270282
case LINUX_TCFLSH: {
271283
int sel;
272284
switch (val0) {
@@ -278,6 +290,24 @@ darwinfs_ioctl(struct file *file, int cmd, uint64_t val0)
278290
}
279291
return syswrap(tcflush(fd, sel));
280292
}
293+
case LINUX_FIONREAD: {
294+
int val;
295+
int r = syswrap(ioctl(fd, FIONREAD, &val));
296+
if (r < 0) {
297+
return r;
298+
}
299+
if (copy_to_user(val0, &val, sizeof val)) {
300+
return -LINUX_EFAULT;
301+
}
302+
return r;
303+
}
304+
case LINUX_FIONBIO: {
305+
int val;
306+
if (copy_from_user(&val, val0, sizeof val)) {
307+
return -LINUX_EFAULT;
308+
}
309+
return syswrap(ioctl(fd, FIONBIO, &val));
310+
}
281311
case LINUX_FIOCLEX: {
282312
pthread_rwlock_wrlock(&proc.fileinfo.fdtable_lock);
283313
int r = sys_fcntl(fd, LINUX_F_SETFD, 1);

0 commit comments

Comments
 (0)