From patchwork Mon Nov 10 20:17:53 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Suriyan Ramasami X-Patchwork-Id: 409070 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id 23AFF140079 for ; Tue, 11 Nov 2014 07:19:02 +1100 (AEDT) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id C78364B612; Mon, 10 Nov 2014 21:18:51 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id TSH9sc78HWji; Mon, 10 Nov 2014 21:18:51 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id D095C4B617; Mon, 10 Nov 2014 21:18:46 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 1BEEE4B65A for ; Mon, 10 Nov 2014 21:18:43 +0100 (CET) Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id bc-+RbUpIvmI for ; Mon, 10 Nov 2014 21:18:43 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-oi0-f44.google.com (mail-oi0-f44.google.com [209.85.218.44]) by theia.denx.de (Postfix) with ESMTPS id 5C6564B63A for ; Mon, 10 Nov 2014 21:18:37 +0100 (CET) Received: by mail-oi0-f44.google.com with SMTP id h136so6030938oig.3 for ; Mon, 10 Nov 2014 12:18:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=esGaohuvvVqZcPxl2v8lH4llLmWGuZahFh79CrkYOm0=; b=tSSilYi2qxXaLeqvJ73jfFHjOa2udv2k3PohdZ35WLts7HQNWok9woh6JlzHZUilWm fB7deZT567MHamNG9rwiEfjRY98QVYg+AAgB1gJPgxmVx7RT3YSis5RqP/Ifpa3JsiZu Sbs33fDG0RWMa5E3El2JtY+i0Ulcu4CpfEFdL50RDsrE8WUIMfqAql1PIEOfWJVZvGgS y83+ubHsZAXnlreKOLUy/O06uMgfH32u8NEOrCtLZ16WaQRi2ETqYMz1KJS6TLqFUWO/ 2574Yz03hb7ZTUKdDxBsgKiFyg8k6RYU7HtjC3sqiLL8THAKh0JTrvPYw1kEjNUjTBFW DuYg== X-Received: by 10.202.94.215 with SMTP id s206mr6240697oib.41.1415650716004; Mon, 10 Nov 2014 12:18:36 -0800 (PST) Received: from suriyanT430.us.oracle.com ([148.87.13.7]) by mx.google.com with ESMTPSA id gw8sm6477585obc.8.2014.11.10.12.18.33 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 10 Nov 2014 12:18:35 -0800 (PST) From: Suriyan Ramasami To: Simon Glass Date: Mon, 10 Nov 2014 12:17:53 -0800 Message-Id: <1415650681-6546-5-git-send-email-suriyan.r@gmail.com> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1415650681-6546-1-git-send-email-suriyan.r@gmail.com> References: <1415650681-6546-1-git-send-email-suriyan.r@gmail.com> Cc: David Feng , Stephen Warren , Suriyan Ramasami , Jeroen Hofstee , Gabriel Huau , u-boot@lists.denx.de, Sonic Zhang , York Sun Subject: [U-Boot] [PATCH v7 4/6] sandbox: prepare for API change for files greater than 2GB X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.13 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de Change the internal ext4 functions to use loff_t for offsets. Signed-off-by: Suriyan Ramasami Acked-by: Simon Glass --- Changes in v7: * Split it so that its bisectable. arch/sandbox/cpu/os.c | 13 ++++---- arch/sandbox/cpu/state.c | 8 ++--- common/board_f.c | 8 ++--- fs/sandbox/sandboxfs.c | 78 ++++++++++++++++++++++++++++++++++-------------- include/os.h | 5 ++-- include/sandboxfs.h | 6 ++-- 6 files changed, 77 insertions(+), 41 deletions(-) diff --git a/arch/sandbox/cpu/os.c b/arch/sandbox/cpu/os.c index 1c4aa3f..31c9344 100644 --- a/arch/sandbox/cpu/os.c +++ b/arch/sandbox/cpu/os.c @@ -385,7 +385,7 @@ const char *os_dirent_get_typename(enum os_dirent_t type) return os_dirent_typename[OS_FILET_UNKNOWN]; } -ssize_t os_get_filesize(const char *fname) +int os_get_filesize(const char *fname, loff_t *size) { struct stat buf; int ret; @@ -393,7 +393,8 @@ ssize_t os_get_filesize(const char *fname) ret = stat(fname, &buf); if (ret) return ret; - return buf.st_size; + *size = buf.st_size; + return 0; } void os_putc(int ch) @@ -427,11 +428,11 @@ int os_read_ram_buf(const char *fname) { struct sandbox_state *state = state_get_current(); int fd, ret; - int size; + loff_t size; - size = os_get_filesize(fname); - if (size < 0) - return -ENOENT; + ret = os_get_filesize(fname, &size); + if (ret < 0) + return ret; if (size != state->ram_size) return -ENOSPC; fd = open(fname, O_RDONLY); diff --git a/arch/sandbox/cpu/state.c b/arch/sandbox/cpu/state.c index 59adad6..ba73b7e 100644 --- a/arch/sandbox/cpu/state.c +++ b/arch/sandbox/cpu/state.c @@ -49,14 +49,14 @@ static int state_ensure_space(int extra_size) static int state_read_file(struct sandbox_state *state, const char *fname) { - int size; + loff_t size; int ret; int fd; - size = os_get_filesize(fname); - if (size < 0) { + ret = os_get_filesize(fname, &size); + if (ret < 0) { printf("Cannot find sandbox state file '%s'\n", fname); - return -ENOENT; + return ret; } state->state_fdt = os_malloc(size); if (!state->state_fdt) { diff --git a/common/board_f.c b/common/board_f.c index e6aa298..a89e455 100644 --- a/common/board_f.c +++ b/common/board_f.c @@ -291,7 +291,7 @@ static int read_fdt_from_file(void) struct sandbox_state *state = state_get_current(); const char *fname = state->fdt_fname; void *blob; - ssize_t size; + loff_t size; int err; int fd; @@ -304,10 +304,10 @@ static int read_fdt_from_file(void) return -EINVAL; } - size = os_get_filesize(fname); - if (size < 0) { + err = os_get_filesize(fname, &size); + if (err < 0) { printf("Failed to file FDT file '%s'\n", fname); - return -ENOENT; + return err; } fd = os_open(fname, OS_O_RDONLY); if (fd < 0) { diff --git a/fs/sandbox/sandboxfs.c b/fs/sandbox/sandboxfs.c index ba6402c..312caec 100644 --- a/fs/sandbox/sandboxfs.c +++ b/fs/sandbox/sandboxfs.c @@ -13,10 +13,10 @@ int sandbox_fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info) return 0; } -long sandbox_fs_read_at(const char *filename, unsigned long pos, - void *buffer, unsigned long maxsize) +int sandbox_fs_read_at(const char *filename, loff_t pos, void *buffer, + loff_t maxsize, loff_t *actread) { - ssize_t size; + loff_t size; int fd, ret; fd = os_open(filename, OS_O_RDONLY); @@ -27,16 +27,31 @@ long sandbox_fs_read_at(const char *filename, unsigned long pos, os_close(fd); return ret; } - if (!maxsize) - maxsize = os_get_filesize(filename); + if (!maxsize) { + ret = os_get_filesize(filename, &size); + if (ret) { + os_close(fd); + return ret; + } + + maxsize = size; + } + size = os_read(fd, buffer, maxsize); os_close(fd); - return size; + if (size < 0) { + ret = -1; + } else { + ret = 0; + *actread = size; + } + + return ret; } -long sandbox_fs_write_at(const char *filename, unsigned long pos, - void *buffer, unsigned long towrite) +int sandbox_fs_write_at(const char *filename, loff_t pos, void *buffer, + loff_t towrite, loff_t *actwrite) { ssize_t size; int fd, ret; @@ -52,7 +67,14 @@ long sandbox_fs_write_at(const char *filename, unsigned long pos, size = os_write(fd, buffer, towrite); os_close(fd); - return size; + if (size == -1) { + ret = -1; + } else { + ret = 0; + *actwrite = size; + } + + return ret; } int sandbox_fs_ls(const char *dirname) @@ -74,15 +96,23 @@ int sandbox_fs_ls(const char *dirname) int sandbox_fs_exists(const char *filename) { - ssize_t sz; + loff_t sz; + int ret; - sz = os_get_filesize(filename); - return sz >= 0; + ret = os_get_filesize(filename, &sz); + return ret == 0; } int sandbox_fs_size(const char *filename) { - return os_get_filesize(filename); + loff_t size; + int ret; + + ret = os_get_filesize(filename, &size); + if (ret) + return ret; + else + return size; } void sandbox_fs_close(void) @@ -91,26 +121,28 @@ void sandbox_fs_close(void) int fs_read_sandbox(const char *filename, void *buf, int offset, int len) { - int len_read; + int ret; + loff_t actread; - len_read = sandbox_fs_read_at(filename, offset, buf, len); - if (len_read == -1) { + ret = sandbox_fs_read_at(filename, offset, buf, len, &actread); + if (ret) { printf("** Unable to read file %s **\n", filename); - return -1; + return ret; } - return len_read; + return actread; } int fs_write_sandbox(const char *filename, void *buf, int offset, int len) { - int len_written; + int ret; + loff_t actwrite; - len_written = sandbox_fs_write_at(filename, offset, buf, len); - if (len_written == -1) { + ret = sandbox_fs_write_at(filename, offset, buf, len, &actwrite); + if (ret) { printf("** Unable to write file %s **\n", filename); - return -1; + return ret; } - return len_written; + return actwrite; } diff --git a/include/os.h b/include/os.h index 0230a7f..e3645e0 100644 --- a/include/os.h +++ b/include/os.h @@ -217,9 +217,10 @@ const char *os_dirent_get_typename(enum os_dirent_t type); * Get the size of a file * * @param fname Filename to check - * @return size of file, or -1 if an error ocurred + * @param size size of file is returned if no error + * @return 0 on success or -1 if an error ocurred */ -ssize_t os_get_filesize(const char *fname); +int os_get_filesize(const char *fname, loff_t *size); /** * Write a character to the controlling OS terminal diff --git a/include/sandboxfs.h b/include/sandboxfs.h index e7c3262..8e5da6b 100644 --- a/include/sandboxfs.h +++ b/include/sandboxfs.h @@ -20,8 +20,10 @@ int sandbox_fs_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info); -long sandbox_fs_read_at(const char *filename, unsigned long pos, - void *buffer, unsigned long maxsize); +int sandbox_fs_read_at(const char *filename, loff_t pos, void *buffer, + loff_t maxsize, loff_t *actread); +int sandbox_fs_write_at(const char *filename, loff_t pos, void *buffer, + loff_t maxsize, loff_t *actwrite); void sandbox_fs_close(void); int sandbox_fs_ls(const char *dirname);