[U-Boot] [PATCH 3/3] arm: semihosting: get rid of forward declarations

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@broadcom.com Cc: AKASHI Takahiro takahiro.akashi@linaro.org Cc: Mark Hambleton mark.hambleton@arm.com Cc: Tom Rini trini@ti.com Signed-off-by: Linus Walleij linus.walleij@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)

Acked-by: Steve Rae srae@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@broadcom.com Cc: AKASHI Takahiro takahiro.akashi@linaro.org Cc: Mark Hambleton mark.hambleton@arm.com Cc: Tom Rini trini@ti.com Signed-off-by: Linus Walleij linus.walleij@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__,
return -1; }modestr);
- 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)
participants (2)
-
Linus Walleij
-
Steve Rae