summaryrefslogtreecommitdiff
path: root/core/fs/fs.c
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2011-05-01 18:11:40 -0700
committerH. Peter Anvin <hpa@zytor.com>2011-05-01 18:11:40 -0700
commit6ed325a3c881565cc2473d1fbfa69d806b4b7bbf (patch)
treefccf7b5c5035386928dec4d08e9008c2a9b672b8 /core/fs/fs.c
parent1b30df94470464ac17c75b07d5062e03af1ef68a (diff)
downloadsyslinux-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.c13
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 {