[U-Boot] [PATCH 3/3] arm: semihosting: get rid of forward declarations
Steve Rae
srae at broadcom.com
Fri Dec 12 19:08:45 CET 2014
Acked-by: Steve Rae <srae at broadcom.com>
On 14-11-20 02:25 AM, Linus Walleij wrote:
> By rearranging the functions in the semihosting code we can
> avoid forward-declaration of the internal static functions.
> This puts the stuff in a logical order: read/open/close/len
> and then higher-order functions follow at the end.
>
> Cc: Darwin Rambo <drambo at broadcom.com>
> Cc: AKASHI Takahiro <takahiro.akashi at linaro.org>
> Cc: Mark Hambleton <mark.hambleton at arm.com>
> Cc: Tom Rini <trini at ti.com>
> Signed-off-by: Linus Walleij <linus.walleij at linaro.org>
> ---
> arch/arm/lib/semihosting.c | 173 ++++++++++++++++++++++-----------------------
> 1 file changed, 84 insertions(+), 89 deletions(-)
>
> diff --git a/arch/arm/lib/semihosting.c b/arch/arm/lib/semihosting.c
> index 6e1b2d182eca..2eacbacfde0f 100644
> --- a/arch/arm/lib/semihosting.c
> +++ b/arch/arm/lib/semihosting.c
> @@ -23,11 +23,6 @@
> #define MODE_READ 0x0
> #define MODE_READBIN 0x1
>
> -static long smh_read(long fd, void *memp, size_t len);
> -static long smh_open(const char *fname, char *modestr);
> -static long smh_close(long fd);
> -static long smh_len_fd(long fd);
> -
> /*
> * Call the handler
> */
> @@ -44,60 +39,43 @@ static long smh_trap(unsigned int sysnum, void *addr)
> }
>
> /*
> - * Open, load a file into memory, and close it. Check that the available space
> - * is sufficient to store the entire file. Return the bytes actually read from
> - * the file as seen by the read function. The verbose flag enables some extra
> - * printing of successful read status.
> + * Open a file on the host. Mode is "r" or "rb" currently. Returns a file
> + * descriptor or -1 on error.
> */
> -int smh_load(const char *fname, void *memp, int avail, int verbose)
> +static long smh_open(const char *fname, char *modestr)
> {
> - long ret;
> long fd;
> - size_t len;
> -
> - ret = -1;
> -
> - debug("%s: fname \'%s\', avail %u, memp %p\n", __func__, fname,
> - avail, memp);
> -
> - /* Open the file */
> - fd = smh_open(fname, "rb");
> - if (fd == -1)
> - return -1;
> + unsigned long mode;
> + struct smh_open_s {
> + const char *fname;
> + unsigned long mode;
> + size_t len;
> + } open;
>
> - /* Get the file length */
> - ret = smh_len_fd(fd);
> - if (ret == -1) {
> - smh_close(fd);
> - return -1;
> - }
> + debug("%s: file \'%s\', mode \'%s\'\n", __func__, fname, modestr);
>
> - /* Check that the file will fit in the supplied buffer */
> - if (ret > avail) {
> - printf("%s: ERROR ret %ld, avail %u\n", __func__, ret,
> - avail);
> - smh_close(fd);
> + /* Check the file mode */
> + if (!(strcmp(modestr, "r"))) {
> + mode = MODE_READ;
> + } else if (!(strcmp(modestr, "rb"))) {
> + mode = MODE_READBIN;
> + } else {
> + printf("%s: ERROR mode \'%s\' not supported\n", __func__,
> + modestr);
> return -1;
> }
>
> - len = ret;
> -
> - /* Read the file into the buffer */
> - ret = smh_read(fd, memp, len);
> - if (ret == 0) {
> - /* Print successful load information if requested */
> - if (verbose) {
> - printf("\n%s\n", fname);
> - printf(" 0x%8p dest\n", memp);
> - printf(" 0x%08lx size\n", len);
> - printf(" 0x%08x avail\n", avail);
> - }
> - }
> + open.fname = fname;
> + open.len = strlen(fname);
> + open.mode = mode;
>
> - /* Close the file */
> - smh_close(fd);
> + /* Open the file on the host */
> + fd = smh_trap(SYSOPEN, &open);
> + if (fd == -1)
> + printf("%s: ERROR fd %ld for file \'%s\'\n", __func__, fd,
> + fname);
>
> - return ret;
> + return fd;
> }
>
> /*
> @@ -135,46 +113,6 @@ static long smh_read(long fd, void *memp, size_t len)
> }
>
> /*
> - * Open a file on the host. Mode is "r" or "rb" currently. Returns a file
> - * descriptor or -1 on error.
> - */
> -static long smh_open(const char *fname, char *modestr)
> -{
> - long fd;
> - unsigned long mode;
> - struct smh_open_s {
> - const char *fname;
> - unsigned long mode;
> - size_t len;
> - } open;
> -
> - debug("%s: file \'%s\', mode \'%s\'\n", __func__, fname, modestr);
> -
> - /* Check the file mode */
> - if (!(strcmp(modestr, "r"))) {
> - mode = MODE_READ;
> - } else if (!(strcmp(modestr, "rb"))) {
> - mode = MODE_READBIN;
> - } else {
> - printf("%s: ERROR mode \'%s\' not supported\n", __func__,
> - modestr);
> - return -1;
> - }
> -
> - open.fname = fname;
> - open.len = strlen(fname);
> - open.mode = mode;
> -
> - /* Open the file on the host */
> - fd = smh_trap(SYSOPEN, &open);
> - if (fd == -1)
> - printf("%s: ERROR fd %ld for file \'%s\'\n", __func__, fd,
> - fname);
> -
> - return fd;
> -}
> -
> -/*
> * Close the file using the file descriptor
> */
> static long smh_close(long fd)
> @@ -207,6 +145,63 @@ static long smh_len_fd(long fd)
> }
>
> /*
> + * Open, load a file into memory, and close it. Check that the available space
> + * is sufficient to store the entire file. Return the bytes actually read from
> + * the file as seen by the read function. The verbose flag enables some extra
> + * printing of successful read status.
> + */
> +int smh_load(const char *fname, void *memp, int avail, int verbose)
> +{
> + long ret;
> + long fd;
> + size_t len;
> +
> + ret = -1;
> +
> + debug("%s: fname \'%s\', avail %u, memp %p\n", __func__, fname,
> + avail, memp);
> +
> + /* Open the file */
> + fd = smh_open(fname, "rb");
> + if (fd == -1)
> + return -1;
> +
> + /* Get the file length */
> + ret = smh_len_fd(fd);
> + if (ret == -1) {
> + smh_close(fd);
> + return -1;
> + }
> +
> + /* Check that the file will fit in the supplied buffer */
> + if (ret > avail) {
> + printf("%s: ERROR ret %ld, avail %u\n", __func__, ret,
> + avail);
> + smh_close(fd);
> + return -1;
> + }
> +
> + len = ret;
> +
> + /* Read the file into the buffer */
> + ret = smh_read(fd, memp, len);
> + if (ret == 0) {
> + /* Print successful load information if requested */
> + if (verbose) {
> + printf("\n%s\n", fname);
> + printf(" 0x%8p dest\n", memp);
> + printf(" 0x%08lx size\n", len);
> + printf(" 0x%08x avail\n", avail);
> + }
> + }
> +
> + /* Close the file */
> + smh_close(fd);
> +
> + return ret;
> +}
> +
> +/*
> * Get the file length from the filename
> */
> long smh_len(const char *fname)
>
More information about the U-Boot
mailing list