Use a net fs struct to handle open, reand and close in file.

This commit is contained in:
Manoel R. Abranches 2011-05-27 00:22:35 -03:00
parent f42313bdb0
commit 7dd64f1236
5 changed files with 27 additions and 41 deletions

View file

@ -25,9 +25,6 @@
#include <grub/fs.h>
#include <grub/device.h>
grub_ssize_t (*grub_file_net_read) (grub_file_t file, void *buf, grub_size_t len) = NULL;
grub_err_t (*grub_file_net_open) (struct grub_file *file, const char *name) = NULL;
grub_err_t (*grub_file_net_close) (grub_file_t file) = NULL;
grub_err_t (*grub_file_net_seek) (struct grub_file *file, grub_off_t offset) = NULL;
grub_file_filter_t grub_file_filters_all[GRUB_FILE_FILTER_MAX];
@ -91,13 +88,6 @@ grub_file_open (const char *name)
file->device = device;
if (device->net && grub_file_net_open)
{
if (grub_file_net_open (file, file_name))
goto fail;
return file;
}
if (device->disk && file_name[0] != '/')
/* This is a block list. */
file->fs = &grub_fs_blocklist;
@ -143,7 +133,7 @@ grub_file_open (const char *name)
grub_ssize_t
grub_file_read (grub_file_t file, void *buf, grub_size_t len)
{
grub_ssize_t res = 0;
grub_ssize_t res;
if (file->offset > file->size)
{
@ -161,12 +151,7 @@ grub_file_read (grub_file_t file, void *buf, grub_size_t len)
if (len == 0)
return 0;
if (file->device->disk)
res = (file->fs->read) (file, buf, len);
else
if (grub_file_net_read && file->device->net)
res = grub_file_net_read (file, buf, len);
res = (file->fs->read) (file, buf, len);
if (res > 0)
file->offset += res;
@ -176,12 +161,6 @@ grub_file_read (grub_file_t file, void *buf, grub_size_t len)
grub_err_t
grub_file_close (grub_file_t file)
{
if (file->device->net)
{
grub_file_net_close (file);
return grub_errno;
}
if (file->fs->close)
(file->fs->close) (file);

View file

@ -94,8 +94,8 @@ grub_fs_probe (grub_device_t device)
count--;
}
}
else if (device->net)
return NULL;
else if (device->net && device->net->fs)
return device->net->fs;
grub_error (GRUB_ERR_UNKNOWN_FS, "unknown filesystem");
return 0;

View file

@ -23,7 +23,6 @@
#include <grub/mm.h>
#include <grub/ieee1275/ieee1275.h>
#include <grub/ieee1275/ofnet.h>
#include <grub/net/ieee1275/interface.h>
#include <grub/net.h>
#include <grub/net/tftp.h>