On Fri, 27 Nov 2015 15:35:22 +0100 Bernhard Nortmann <[email protected]> wrote:
> This patch moves some code out of the "write" handler with the > intention to reuse it later for similar commands. > > At the same time, it also discards the previous transfer rate output > when using "-v", as that has become redundant with the 'progress bar' > display available by "-p". > > Signed-off-by: Bernhard Nortmann <[email protected]> > --- > fel.c | 45 +++++++++++++++++++++++++++++---------------- > 1 file changed, 29 insertions(+), 16 deletions(-) > > diff --git a/fel.c b/fel.c > index 595b682..c9081b6 100644 > --- a/fel.c > +++ b/fel.c > @@ -32,6 +32,7 @@ > #include <stdarg.h> > #include <errno.h> > #include <unistd.h> > +#include <sys/stat.h> > > #include "endian_compat.h" > #include "progress.h" > @@ -333,6 +334,14 @@ void hexdump(void *data, uint32_t offset, size_t size) > } > } > > +off_t file_size(const char *name) > +{ > + struct stat st; > + if (stat(name, &st) == 0) > + return st.st_size; > + return 0; > +} What if "name" is, for example, a directory instead of a file? > + > int save_file(const char *name, void *data, size_t size) > { > FILE *out = fopen(name, "wb"); > @@ -1218,6 +1227,21 @@ static int aw_fel_get_endpoint(libusb_device_handle > *usb) > return 0; > } > > +/* private helper function, gets used for "write*" and "multi*" transfers */ > +static void file_upload(libusb_device_handle *handle, > + const char *filename, uint32_t offset) > +{ > + size_t size; > + void *buf = load_file(filename, &size); > + aw_write_buffer(handle, buf, offset, size, true); > + > + // If we transferred a script, try to inform U-Boot about its address. > + if (get_image_type(buf, size) == IH_TYPE_SCRIPT) > + pass_fel_information(handle, offset); > + > + free(buf); > +} > + > int main(int argc, char **argv) > { > bool pflag_active = false; /* -p switch, causing "write" to output > progress */ > @@ -1308,22 +1332,11 @@ int main(int argc, char **argv) > aw_fel_print_version(handle); > skip=1; > } else if (strcmp(argv[1], "write") == 0 && argc > 3) { > - size_t size; > - void *buf = load_file(argv[3], &size); > - uint32_t offset = strtoul(argv[2], NULL, 0); > - progress_start(pflag_active ? progress_bar : NULL, > size); > - double elapsed = aw_write_buffer(handle, buf, offset, > size, true); > - if (elapsed > 0) > - pr_info("%.1f kB written in %.1f sec (speed: > %.1f kB/s)\n", > - kilo(size), elapsed, kilo(size) / > elapsed); > - /* > - * If we have transferred a script, try to inform U-Boot > - * about its address. > - */ > - if (get_image_type(buf, size) == IH_TYPE_SCRIPT) > - pass_fel_information(handle, offset); > - > - free(buf); > + size_t size = file_size(argv[3]); > + if (size > 0) { > + progress_start(pflag_active ? progress_bar : > NULL, size); > + file_upload(handle, argv[3], strtoul(argv[2], > NULL, 0)); > + } If the file does not exist, what is the "sunxi-fel" tool supposed to do? Do we want to silently ignore this? > skip=3; > } else if (strcmp(argv[1], "read") == 0 && argc > 4) { > size_t size = strtoul(argv[3], NULL, 0); -- Best regards, Siarhei Siamashka -- You received this message because you are subscribed to the Google Groups "linux-sunxi" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
