mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-17 02:08:38 +00:00
cf6598193a
These commands may be used to determine the size of a file without actually reading the whole file content into memory. This may be used to determine if the file will fit into the memory buffer that will contain it. In particular, the DFU code will use it for this purpose in the next commit. Signed-off-by: Stephen Warren <swarren@nvidia.com>
116 lines
2.1 KiB
C
116 lines
2.1 KiB
C
/*
|
|
* Copyright (c) 2012, Google Inc.
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0+
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <fs.h>
|
|
#include <os.h>
|
|
|
|
int sandbox_fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
long sandbox_fs_read_at(const char *filename, unsigned long pos,
|
|
void *buffer, unsigned long maxsize)
|
|
{
|
|
ssize_t size;
|
|
int fd, ret;
|
|
|
|
fd = os_open(filename, OS_O_RDONLY);
|
|
if (fd < 0)
|
|
return fd;
|
|
ret = os_lseek(fd, pos, OS_SEEK_SET);
|
|
if (ret == -1) {
|
|
os_close(fd);
|
|
return ret;
|
|
}
|
|
if (!maxsize)
|
|
maxsize = os_get_filesize(filename);
|
|
size = os_read(fd, buffer, maxsize);
|
|
os_close(fd);
|
|
|
|
return size;
|
|
}
|
|
|
|
long sandbox_fs_write_at(const char *filename, unsigned long pos,
|
|
void *buffer, unsigned long towrite)
|
|
{
|
|
ssize_t size;
|
|
int fd, ret;
|
|
|
|
fd = os_open(filename, OS_O_RDWR | OS_O_CREAT);
|
|
if (fd < 0)
|
|
return fd;
|
|
ret = os_lseek(fd, pos, OS_SEEK_SET);
|
|
if (ret == -1) {
|
|
os_close(fd);
|
|
return ret;
|
|
}
|
|
size = os_write(fd, buffer, towrite);
|
|
os_close(fd);
|
|
|
|
return size;
|
|
}
|
|
|
|
int sandbox_fs_ls(const char *dirname)
|
|
{
|
|
struct os_dirent_node *head, *node;
|
|
int ret;
|
|
|
|
ret = os_dirent_ls(dirname, &head);
|
|
if (ret)
|
|
return ret;
|
|
|
|
for (node = head; node; node = node->next) {
|
|
printf("%s %10lu %s\n", os_dirent_get_typename(node->type),
|
|
node->size, node->name);
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
int sandbox_fs_exists(const char *filename)
|
|
{
|
|
ssize_t sz;
|
|
|
|
sz = os_get_filesize(filename);
|
|
return sz >= 0;
|
|
}
|
|
|
|
int sandbox_fs_size(const char *filename)
|
|
{
|
|
return os_get_filesize(filename);
|
|
}
|
|
|
|
void sandbox_fs_close(void)
|
|
{
|
|
}
|
|
|
|
int fs_read_sandbox(const char *filename, void *buf, int offset, int len)
|
|
{
|
|
int len_read;
|
|
|
|
len_read = sandbox_fs_read_at(filename, offset, buf, len);
|
|
if (len_read == -1) {
|
|
printf("** Unable to read file %s **\n", filename);
|
|
return -1;
|
|
}
|
|
|
|
return len_read;
|
|
}
|
|
|
|
int fs_write_sandbox(const char *filename, void *buf, int offset, int len)
|
|
{
|
|
int len_written;
|
|
|
|
len_written = sandbox_fs_write_at(filename, offset, buf, len);
|
|
if (len_written == -1) {
|
|
printf("** Unable to write file %s **\n", filename);
|
|
return -1;
|
|
}
|
|
|
|
return len_written;
|
|
}
|