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