Project

General

Profile

Actions

Bug #1719

closed

patch: fix apache-ant in linux emulation

Added by Johannes.Hofmann over 14 years ago. Updated over 14 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
Start date:
Due date:
% Done:

0%

Estimated time:

Description

ant does not compile any .java files when run under linux emulation.
The reason is missing support for the O_DIRECTORY flag in open(2).
The patch below adds this and makes ant work.
However it would probabely better - though more invasive to add
O_DIRECTORY to native open(2) and simply pass the flag.

Cheers,
Johannes

diff --git a/sys/emulation/linux/i386/linux.h b/sys/emulation/linux/i386/linux.h
index 2e9a238..a0ba8ef 100644
--- a/sys/emulation/linux/i386/linux.h
++ b/sys/emulation/linux/i386/linux.h
@ -494,6 +494,7 @ extern struct ioctl_map linux_ioctl_map;
#define LINUX_O_NDELAY LINUX_O_NONBLOCK
#define LINUX_O_SYNC 010000
#define LINUX_FASYNC 020000
#define LINUX_O_DIRECTORY 00200000

#define    LINUX_F_DUPFD        0
#define LINUX_F_GETFD 1
diff --git a/sys/emulation/linux/linux_file.c b/sys/emulation/linux/linux_file.c
index bb0ba0a..3d6f39e 100644
--- a/sys/emulation/linux/linux_file.c
++ b/sys/emulation/linux/linux_file.c
@ -160,6 +160,20 @ sys_linux_open(struct linux_open_args *args)
fdrop(fp);
}
}

+ if (error == 0 && args->flags & LINUX_O_DIRECTORY) {
+ struct file *fp;
+ struct vnode *vp;

fp = holdfp(p->p_fd, args->sysmsg_iresult, 1);
+ if (fp) {
+ vp = (struct vnode *) fp
>f_data;
+ if (vp->v_type != VDIR)
+ error = ENOTDIR;
+ fdrop(fp);
+ }
+ }
+
rel_mplock();
#ifdef DEBUG
if (ldebug(open))
Actions

Also available in: Atom PDF