[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