]> git.ipfire.org Git - thirdparty/u-boot.git/blame - fs/sandbox/sandboxfs.c
Merge https://gitlab.denx.de/u-boot/custodians/u-boot-fsl-qoriq
[thirdparty/u-boot.git] / fs / sandbox / sandboxfs.c
CommitLineData
83d290c5 1// SPDX-License-Identifier: GPL-2.0+
92ccc96b
SG
2/*
3 * Copyright (c) 2012, Google Inc.
92ccc96b
SG
4 */
5
6#include <common.h>
7#include <fs.h>
336d4615 8#include <malloc.h>
92ccc96b 9#include <os.h>
e6f6f9e6 10#include <sandboxfs.h>
92ccc96b 11
0528979f 12int sandbox_fs_set_blk_dev(struct blk_desc *rbdd, struct disk_partition *info)
92ccc96b 13{
85300a9a 14 /*
4101f687 15 * Only accept a NULL struct blk_desc for the sandbox, which is when
85300a9a
SS
16 * hostfs interface is used
17 */
18 return rbdd != NULL;
92ccc96b
SG
19}
20
96b1046d
SR
21int sandbox_fs_read_at(const char *filename, loff_t pos, void *buffer,
22 loff_t maxsize, loff_t *actread)
92ccc96b 23{
96b1046d 24 loff_t size;
92ccc96b
SG
25 int fd, ret;
26
27 fd = os_open(filename, OS_O_RDONLY);
28 if (fd < 0)
29 return fd;
30 ret = os_lseek(fd, pos, OS_SEEK_SET);
31 if (ret == -1) {
32 os_close(fd);
33 return ret;
34 }
96b1046d
SR
35 if (!maxsize) {
36 ret = os_get_filesize(filename, &size);
37 if (ret) {
38 os_close(fd);
39 return ret;
40 }
41
42 maxsize = size;
43 }
44
92ccc96b
SG
45 size = os_read(fd, buffer, maxsize);
46 os_close(fd);
47
96b1046d
SR
48 if (size < 0) {
49 ret = -1;
50 } else {
51 ret = 0;
52 *actread = size;
53 }
54
55 return ret;
92ccc96b
SG
56}
57
96b1046d
SR
58int sandbox_fs_write_at(const char *filename, loff_t pos, void *buffer,
59 loff_t towrite, loff_t *actwrite)
7eb2c8d5
SG
60{
61 ssize_t size;
62 int fd, ret;
63
64 fd = os_open(filename, OS_O_RDWR | OS_O_CREAT);
65 if (fd < 0)
66 return fd;
67 ret = os_lseek(fd, pos, OS_SEEK_SET);
68 if (ret == -1) {
69 os_close(fd);
70 return ret;
71 }
72 size = os_write(fd, buffer, towrite);
73 os_close(fd);
74
96b1046d
SR
75 if (size == -1) {
76 ret = -1;
77 } else {
78 ret = 0;
79 *actwrite = size;
80 }
81
82 return ret;
7eb2c8d5
SG
83}
84
92ccc96b
SG
85int sandbox_fs_ls(const char *dirname)
86{
87 struct os_dirent_node *head, *node;
88 int ret;
89
90 ret = os_dirent_ls(dirname, &head);
91 if (ret)
0317724e 92 goto out;
92ccc96b
SG
93
94 for (node = head; node; node = node->next) {
95 printf("%s %10lu %s\n", os_dirent_get_typename(node->type),
96 node->size, node->name);
97 }
0317724e 98out:
86167089 99 os_dirent_free(head);
92ccc96b 100
0317724e 101 return ret;
92ccc96b
SG
102}
103
0a30aa1e
SW
104int sandbox_fs_exists(const char *filename)
105{
96b1046d
SR
106 loff_t size;
107 int ret;
0a30aa1e 108
96b1046d
SR
109 ret = os_get_filesize(filename, &size);
110 return ret == 0;
0a30aa1e
SW
111}
112
d455d878 113int sandbox_fs_size(const char *filename, loff_t *size)
cf659819 114{
d455d878 115 return os_get_filesize(filename, size);
cf659819
SW
116}
117
92ccc96b
SG
118void sandbox_fs_close(void)
119{
120}
121
d455d878
SR
122int fs_read_sandbox(const char *filename, void *buf, loff_t offset, loff_t len,
123 loff_t *actread)
92ccc96b 124{
96b1046d 125 int ret;
92ccc96b 126
d455d878
SR
127 ret = sandbox_fs_read_at(filename, offset, buf, len, actread);
128 if (ret)
92ccc96b 129 printf("** Unable to read file %s **\n", filename);
92ccc96b 130
d455d878 131 return ret;
92ccc96b 132}
7eb2c8d5 133
d455d878
SR
134int fs_write_sandbox(const char *filename, void *buf, loff_t offset,
135 loff_t len, loff_t *actwrite)
7eb2c8d5 136{
96b1046d 137 int ret;
7eb2c8d5 138
d455d878
SR
139 ret = sandbox_fs_write_at(filename, offset, buf, len, actwrite);
140 if (ret)
7eb2c8d5 141 printf("** Unable to write file %s **\n", filename);
7eb2c8d5 142
d455d878 143 return ret;
7eb2c8d5 144}