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