diff options
author | H. Peter Anvin <hpa@zytor.com> | 2011-05-01 18:11:40 -0700 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2011-05-01 18:11:40 -0700 |
commit | 6ed325a3c881565cc2473d1fbfa69d806b4b7bbf (patch) | |
tree | fccf7b5c5035386928dec4d08e9008c2a9b672b8 /core/fs/fs.c | |
parent | 1b30df94470464ac17c75b07d5062e03af1ef68a (diff) | |
download | syslinux-6ed325a3c881565cc2473d1fbfa69d806b4b7bbf.tar.gz |
core: pass the file flags down through the stack
Pass the file flags down through the stack. This allows us to
distinguish between open for read, open for write, or opendir in the
low-level filesystem functions; this will matter for the PXE methods.
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'core/fs/fs.c')
-rw-r--r-- | core/fs/fs.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/core/fs/fs.c b/core/fs/fs.c index 54099860..81dafe9d 100644 --- a/core/fs/fs.c +++ b/core/fs/fs.c @@ -1,6 +1,7 @@ #include <stdio.h> #include <stdbool.h> #include <string.h> +#include <fcntl.h> #include <dprintf.h> #include "fs.h" #include "cache.h" @@ -186,7 +187,7 @@ void pm_searchdir(com32sys_t *regs) char *name = MK_PTR(regs->ds, regs->edi.w[0]); int rv; - rv = searchdir(name); + rv = searchdir(name, O_RDONLY); if (rv < 0) { regs->esi.w[0] = 0; regs->eax.l = 0; @@ -198,7 +199,7 @@ void pm_searchdir(com32sys_t *regs) } } -int searchdir(const char *name) +int searchdir(const char *name, int flags) { struct inode *inode = NULL; struct inode *parent = NULL; @@ -213,7 +214,7 @@ int searchdir(const char *name) /* if we have ->searchdir method, call it */ if (file->fs->fs_ops->searchdir) { - file->fs->fs_ops->searchdir(name, file); + file->fs->fs_ops->searchdir(name, flags, file); if (file->inode) return file_to_handle(file); @@ -343,14 +344,14 @@ err_no_close: return -1; } -int open_file(const char *name, struct com32_filedata *filedata) +int open_file(const char *name, int flags, struct com32_filedata *filedata) { int rv; struct file *file; char mangled_name[FILENAME_MAX]; mangle_name(mangled_name, name); - rv = searchdir(mangled_name); + rv = searchdir(mangled_name, flags); if (rv < 0) return rv; @@ -377,7 +378,7 @@ void pm_open_file(com32sys_t *regs) char mangled_name[FILENAME_MAX]; mangle_name(mangled_name, name); - rv = searchdir(mangled_name); + rv = searchdir(mangled_name, O_RDONLY); if (rv < 0) { regs->eflags.l |= EFLAGS_CF; } else { |