xref: /rk3399_rockchip-uboot/fs/sandbox/sandboxfs.c (revision 7eb2c8d573ad932bf67095f11c6b3beba41064f2)
192ccc96bSSimon Glass /*
292ccc96bSSimon Glass  * Copyright (c) 2012, Google Inc.
392ccc96bSSimon Glass  *
492ccc96bSSimon Glass  * This program is free software; you can redistribute it and/or
592ccc96bSSimon Glass  * modify it under the terms of the GNU General Public License as
692ccc96bSSimon Glass  * published by the Free Software Foundation; either version 2 of
792ccc96bSSimon Glass  * the License, or (at your option) any later version.
892ccc96bSSimon Glass  *
992ccc96bSSimon Glass  * This program is distributed in the hope that it will be useful,
1092ccc96bSSimon Glass  * but WITHOUT ANY WARRANTY; without even the implied warranty of
1192ccc96bSSimon Glass  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
1292ccc96bSSimon Glass  * GNU General Public License for more details.
1392ccc96bSSimon Glass  *
1492ccc96bSSimon Glass  * You should have received a copy of the GNU General Public License
1592ccc96bSSimon Glass  * along with this program; if not, write to the Free Software
1692ccc96bSSimon Glass  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
1792ccc96bSSimon Glass  * MA 02111-1307 USA
1892ccc96bSSimon Glass  */
1992ccc96bSSimon Glass 
2092ccc96bSSimon Glass #include <common.h>
2192ccc96bSSimon Glass #include <fs.h>
2292ccc96bSSimon Glass #include <os.h>
2392ccc96bSSimon Glass 
2492ccc96bSSimon Glass int sandbox_fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info)
2592ccc96bSSimon Glass {
2692ccc96bSSimon Glass 	return 0;
2792ccc96bSSimon Glass }
2892ccc96bSSimon Glass 
2992ccc96bSSimon Glass long sandbox_fs_read_at(const char *filename, unsigned long pos,
3092ccc96bSSimon Glass 			     void *buffer, unsigned long maxsize)
3192ccc96bSSimon Glass {
3292ccc96bSSimon Glass 	ssize_t size;
3392ccc96bSSimon Glass 	int fd, ret;
3492ccc96bSSimon Glass 
3592ccc96bSSimon Glass 	fd = os_open(filename, OS_O_RDONLY);
3692ccc96bSSimon Glass 	if (fd < 0)
3792ccc96bSSimon Glass 		return fd;
3892ccc96bSSimon Glass 	ret = os_lseek(fd, pos, OS_SEEK_SET);
3992ccc96bSSimon Glass 	if (ret == -1) {
4092ccc96bSSimon Glass 		os_close(fd);
4192ccc96bSSimon Glass 		return ret;
4292ccc96bSSimon Glass 	}
4392ccc96bSSimon Glass 	if (!maxsize)
4492ccc96bSSimon Glass 		maxsize = os_get_filesize(filename);
4592ccc96bSSimon Glass 	size = os_read(fd, buffer, maxsize);
4692ccc96bSSimon Glass 	os_close(fd);
4792ccc96bSSimon Glass 
4892ccc96bSSimon Glass 	return size;
4992ccc96bSSimon Glass }
5092ccc96bSSimon Glass 
51*7eb2c8d5SSimon Glass long sandbox_fs_write_at(const char *filename, unsigned long pos,
52*7eb2c8d5SSimon Glass 			 void *buffer, unsigned long towrite)
53*7eb2c8d5SSimon Glass {
54*7eb2c8d5SSimon Glass 	ssize_t size;
55*7eb2c8d5SSimon Glass 	int fd, ret;
56*7eb2c8d5SSimon Glass 
57*7eb2c8d5SSimon Glass 	fd = os_open(filename, OS_O_RDWR | OS_O_CREAT);
58*7eb2c8d5SSimon Glass 	if (fd < 0)
59*7eb2c8d5SSimon Glass 		return fd;
60*7eb2c8d5SSimon Glass 	ret = os_lseek(fd, pos, OS_SEEK_SET);
61*7eb2c8d5SSimon Glass 	if (ret == -1) {
62*7eb2c8d5SSimon Glass 		os_close(fd);
63*7eb2c8d5SSimon Glass 		return ret;
64*7eb2c8d5SSimon Glass 	}
65*7eb2c8d5SSimon Glass 	size = os_write(fd, buffer, towrite);
66*7eb2c8d5SSimon Glass 	os_close(fd);
67*7eb2c8d5SSimon Glass 
68*7eb2c8d5SSimon Glass 	return size;
69*7eb2c8d5SSimon Glass }
70*7eb2c8d5SSimon Glass 
7192ccc96bSSimon Glass int sandbox_fs_ls(const char *dirname)
7292ccc96bSSimon Glass {
7392ccc96bSSimon Glass 	struct os_dirent_node *head, *node;
7492ccc96bSSimon Glass 	int ret;
7592ccc96bSSimon Glass 
7692ccc96bSSimon Glass 	ret = os_dirent_ls(dirname, &head);
7792ccc96bSSimon Glass 	if (ret)
7892ccc96bSSimon Glass 		return ret;
7992ccc96bSSimon Glass 
8092ccc96bSSimon Glass 	for (node = head; node; node = node->next) {
8192ccc96bSSimon Glass 		printf("%s %10lu %s\n", os_dirent_get_typename(node->type),
8292ccc96bSSimon Glass 		       node->size, node->name);
8392ccc96bSSimon Glass 	}
8492ccc96bSSimon Glass 
8592ccc96bSSimon Glass 	return 0;
8692ccc96bSSimon Glass }
8792ccc96bSSimon Glass 
8892ccc96bSSimon Glass void sandbox_fs_close(void)
8992ccc96bSSimon Glass {
9092ccc96bSSimon Glass }
9192ccc96bSSimon Glass 
9292ccc96bSSimon Glass int fs_read_sandbox(const char *filename, void *buf, int offset, int len)
9392ccc96bSSimon Glass {
9492ccc96bSSimon Glass 	int len_read;
9592ccc96bSSimon Glass 
9692ccc96bSSimon Glass 	len_read = sandbox_fs_read_at(filename, offset, buf, len);
9792ccc96bSSimon Glass 	if (len_read == -1) {
9892ccc96bSSimon Glass 		printf("** Unable to read file %s **\n", filename);
9992ccc96bSSimon Glass 		return -1;
10092ccc96bSSimon Glass 	}
10192ccc96bSSimon Glass 
10292ccc96bSSimon Glass 	return len_read;
10392ccc96bSSimon Glass }
104*7eb2c8d5SSimon Glass 
105*7eb2c8d5SSimon Glass int fs_write_sandbox(const char *filename, void *buf, int offset, int len)
106*7eb2c8d5SSimon Glass {
107*7eb2c8d5SSimon Glass 	int len_written;
108*7eb2c8d5SSimon Glass 
109*7eb2c8d5SSimon Glass 	len_written = sandbox_fs_write_at(filename, offset, buf, len);
110*7eb2c8d5SSimon Glass 	if (len_written == -1) {
111*7eb2c8d5SSimon Glass 		printf("** Unable to write file %s **\n", filename);
112*7eb2c8d5SSimon Glass 		return -1;
113*7eb2c8d5SSimon Glass 	}
114*7eb2c8d5SSimon Glass 
115*7eb2c8d5SSimon Glass 	return len_written;
116*7eb2c8d5SSimon Glass }
117