xref: /rk3399_rockchip-uboot/fs/sandbox/sandboxfs.c (revision 0a30aa1e7e4e194ecc04c5970267bd6493db8eaf)
192ccc96bSSimon Glass /*
292ccc96bSSimon Glass  * Copyright (c) 2012, Google Inc.
392ccc96bSSimon Glass  *
41a459660SWolfgang Denk  * SPDX-License-Identifier:	GPL-2.0+
592ccc96bSSimon Glass  */
692ccc96bSSimon Glass 
792ccc96bSSimon Glass #include <common.h>
892ccc96bSSimon Glass #include <fs.h>
992ccc96bSSimon Glass #include <os.h>
1092ccc96bSSimon Glass 
1192ccc96bSSimon Glass int sandbox_fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info)
1292ccc96bSSimon Glass {
1392ccc96bSSimon Glass 	return 0;
1492ccc96bSSimon Glass }
1592ccc96bSSimon Glass 
1692ccc96bSSimon Glass long sandbox_fs_read_at(const char *filename, unsigned long pos,
1792ccc96bSSimon Glass 			     void *buffer, unsigned long maxsize)
1892ccc96bSSimon Glass {
1992ccc96bSSimon Glass 	ssize_t size;
2092ccc96bSSimon Glass 	int fd, ret;
2192ccc96bSSimon Glass 
2292ccc96bSSimon Glass 	fd = os_open(filename, OS_O_RDONLY);
2392ccc96bSSimon Glass 	if (fd < 0)
2492ccc96bSSimon Glass 		return fd;
2592ccc96bSSimon Glass 	ret = os_lseek(fd, pos, OS_SEEK_SET);
2692ccc96bSSimon Glass 	if (ret == -1) {
2792ccc96bSSimon Glass 		os_close(fd);
2892ccc96bSSimon Glass 		return ret;
2992ccc96bSSimon Glass 	}
3092ccc96bSSimon Glass 	if (!maxsize)
3192ccc96bSSimon Glass 		maxsize = os_get_filesize(filename);
3292ccc96bSSimon Glass 	size = os_read(fd, buffer, maxsize);
3392ccc96bSSimon Glass 	os_close(fd);
3492ccc96bSSimon Glass 
3592ccc96bSSimon Glass 	return size;
3692ccc96bSSimon Glass }
3792ccc96bSSimon Glass 
387eb2c8d5SSimon Glass long sandbox_fs_write_at(const char *filename, unsigned long pos,
397eb2c8d5SSimon Glass 			 void *buffer, unsigned long towrite)
407eb2c8d5SSimon Glass {
417eb2c8d5SSimon Glass 	ssize_t size;
427eb2c8d5SSimon Glass 	int fd, ret;
437eb2c8d5SSimon Glass 
447eb2c8d5SSimon Glass 	fd = os_open(filename, OS_O_RDWR | OS_O_CREAT);
457eb2c8d5SSimon Glass 	if (fd < 0)
467eb2c8d5SSimon Glass 		return fd;
477eb2c8d5SSimon Glass 	ret = os_lseek(fd, pos, OS_SEEK_SET);
487eb2c8d5SSimon Glass 	if (ret == -1) {
497eb2c8d5SSimon Glass 		os_close(fd);
507eb2c8d5SSimon Glass 		return ret;
517eb2c8d5SSimon Glass 	}
527eb2c8d5SSimon Glass 	size = os_write(fd, buffer, towrite);
537eb2c8d5SSimon Glass 	os_close(fd);
547eb2c8d5SSimon Glass 
557eb2c8d5SSimon Glass 	return size;
567eb2c8d5SSimon Glass }
577eb2c8d5SSimon Glass 
5892ccc96bSSimon Glass int sandbox_fs_ls(const char *dirname)
5992ccc96bSSimon Glass {
6092ccc96bSSimon Glass 	struct os_dirent_node *head, *node;
6192ccc96bSSimon Glass 	int ret;
6292ccc96bSSimon Glass 
6392ccc96bSSimon Glass 	ret = os_dirent_ls(dirname, &head);
6492ccc96bSSimon Glass 	if (ret)
6592ccc96bSSimon Glass 		return ret;
6692ccc96bSSimon Glass 
6792ccc96bSSimon Glass 	for (node = head; node; node = node->next) {
6892ccc96bSSimon Glass 		printf("%s %10lu %s\n", os_dirent_get_typename(node->type),
6992ccc96bSSimon Glass 		       node->size, node->name);
7092ccc96bSSimon Glass 	}
7192ccc96bSSimon Glass 
7292ccc96bSSimon Glass 	return 0;
7392ccc96bSSimon Glass }
7492ccc96bSSimon Glass 
75*0a30aa1eSStephen Warren int sandbox_fs_exists(const char *filename)
76*0a30aa1eSStephen Warren {
77*0a30aa1eSStephen Warren 	ssize_t sz;
78*0a30aa1eSStephen Warren 
79*0a30aa1eSStephen Warren 	sz = os_get_filesize(filename);
80*0a30aa1eSStephen Warren 	return sz >= 0;
81*0a30aa1eSStephen Warren }
82*0a30aa1eSStephen Warren 
8392ccc96bSSimon Glass void sandbox_fs_close(void)
8492ccc96bSSimon Glass {
8592ccc96bSSimon Glass }
8692ccc96bSSimon Glass 
8792ccc96bSSimon Glass int fs_read_sandbox(const char *filename, void *buf, int offset, int len)
8892ccc96bSSimon Glass {
8992ccc96bSSimon Glass 	int len_read;
9092ccc96bSSimon Glass 
9192ccc96bSSimon Glass 	len_read = sandbox_fs_read_at(filename, offset, buf, len);
9292ccc96bSSimon Glass 	if (len_read == -1) {
9392ccc96bSSimon Glass 		printf("** Unable to read file %s **\n", filename);
9492ccc96bSSimon Glass 		return -1;
9592ccc96bSSimon Glass 	}
9692ccc96bSSimon Glass 
9792ccc96bSSimon Glass 	return len_read;
9892ccc96bSSimon Glass }
997eb2c8d5SSimon Glass 
1007eb2c8d5SSimon Glass int fs_write_sandbox(const char *filename, void *buf, int offset, int len)
1017eb2c8d5SSimon Glass {
1027eb2c8d5SSimon Glass 	int len_written;
1037eb2c8d5SSimon Glass 
1047eb2c8d5SSimon Glass 	len_written = sandbox_fs_write_at(filename, offset, buf, len);
1057eb2c8d5SSimon Glass 	if (len_written == -1) {
1067eb2c8d5SSimon Glass 		printf("** Unable to write file %s **\n", filename);
1077eb2c8d5SSimon Glass 		return -1;
1087eb2c8d5SSimon Glass 	}
1097eb2c8d5SSimon Glass 
1107eb2c8d5SSimon Glass 	return len_written;
1117eb2c8d5SSimon Glass }
112