All of lore.kernel.org
 help / color / mirror / Atom feed
From: Fabien Proriol <Fabien.Proriol@jdsu.com>
To: "linux-mtd@lists.infradead.org" <linux-mtd@lists.infradead.org>
Subject: 0001-flashcp-Use-llu-to-print-filestat.st_size.patch
Date: Thu, 6 Nov 2014 15:13:08 +0000	[thread overview]
Message-ID: <545B8FA4.5040801@jdsu.com> (raw)

Hello,

There is a display bug in flashcp.
In fact the problem is filestat.st_size can be 64 bits (in my case, Zynq 
ARM platform).

With command:
flashcp -v IMG.img /dev/mtd0

Results lines are:

Erasing blocks: 40/40 (100%)
Writing data: 1670k/0k (2544%)

......
and at the end:

Erasing blocks: 40/40 (100%)
Writing data: 2544k/0k (100%))   <----- double parenthesis
Verifying data: 2544k/0k (100%))


I wrote a patch to solve this problem...
But I have another question about "written" and "size" variables...
The size_t type is potentially not the good type to store 
filestat.st_size, off_t should be better...


Fabien Proriol

_______________________________________________________________________________

 From e65a012df12fa39ed0a6c5a71b5dc952b4c982fc Mon Sep 17 00:00:00 2001
From: Fabien Proriol <fabien.proriol@jdsu.com>
Date: Thu, 6 Nov 2014 15:54:20 +0100
Subject: [PATCH] flashcp: Use %llu to print filestat.st_size

filestat.st_size type is off_t.
For some paltforms, off_t can be 32 or 64bit but there is no C99 format 
specifier for off_t.
The best way to print it with printf is to cast it to long long and 
print with %llu

Signed-off-by: Fabien Proriol <fabien.proriol@jdsu.com>
---
  flashcp.c | 32 ++++++++++++++++----------------
  1 file changed, 16 insertions(+), 16 deletions(-)

diff --git a/flashcp.c b/flashcp.c
index d58c81b..04495bd 100644
--- a/flashcp.c
+++ b/flashcp.c
@@ -296,7 +296,7 @@ int main (int argc,char *argv[])
          * write the entire file to flash *
          **********************************/

-       if (flags & FLAG_VERBOSE) log_printf (LOG_NORMAL,"Writing data: 
0k/%luk (0%%)",KB (filestat.st_size));
+       if (flags & FLAG_VERBOSE) log_printf (LOG_NORMAL,"Writing data: 
0k/%lluk (0%%)",KB ((unsigned long long)filestat.st_size));
         size = filestat.st_size;
         i = BUFSIZE;
         written = 0;
@@ -304,10 +304,10 @@ int main (int argc,char *argv[])
         {
                 if (size < BUFSIZE) i = size;
                 if (flags & FLAG_VERBOSE)
-                       log_printf (LOG_NORMAL,"\rWriting data: %dk/%luk 
(%lu%%)",
+                       log_printf (LOG_NORMAL,"\rWriting data: 
%dk/%lluk (%llu%%)",
                                         KB (written + i),
-                                       KB (filestat.st_size),
-                                       PERCENTAGE (written + 
i,filestat.st_size));
+                                       KB ((unsigned long 
long)filestat.st_size),
+                                       PERCENTAGE (written + 
i,(unsigned long long)filestat.st_size));

                 /* read from filename */
                 safe_read (fil_fd,filename,src,i,flags & FLAG_VERBOSE);
@@ -325,8 +325,8 @@ int main (int argc,char *argv[])
                                 exit (EXIT_FAILURE);
                         }
                         log_printf (LOG_ERROR,
-                                       "Short write count returned 
while writing to x%.8x-0x%.8x on %s: %d/%lu bytes written to flash\n",
-                                       written,written + 
i,device,written + result,filestat.st_size);
+                                       "Short write count returned 
while writing to x%.8x-0x%.8x on %s: %d/%llu bytes written to flash\n",
+                                       written,written + 
i,device,written + result,(unsigned long long)filestat.st_size);
                         exit (EXIT_FAILURE);
                 }

@@ -335,10 +335,10 @@ int main (int argc,char *argv[])
         }
         if (flags & FLAG_VERBOSE)
                 log_printf (LOG_NORMAL,
-                               "\rWriting data: %luk/%luk (100%%)\n",
-                               KB (filestat.st_size),
-                               KB (filestat.st_size));
-       DEBUG("Wrote %d / %luk bytes\n",written,filestat.st_size);
+                               "\rWriting data: %lluk/%lluk (100%%)\n",
+                               KB ((unsigned long long)filestat.st_size),
+                               KB ((unsigned long long)filestat.st_size));
+       DEBUG("Wrote %d / %lluk bytes\n",written,(unsigned long 
long)filestat.st_size);

         /**********************************
          * verify that flash == file data *
@@ -349,16 +349,16 @@ int main (int argc,char *argv[])
         size = filestat.st_size;
         i = BUFSIZE;
         written = 0;
-       if (flags & FLAG_VERBOSE) log_printf (LOG_NORMAL,"Verifying 
data: 0k/%luk (0%%)",KB (filestat.st_size));
+       if (flags & FLAG_VERBOSE) log_printf (LOG_NORMAL,"Verifying 
data: 0k/%lluk (0%%)",KB ((unsigned long long)filestat.st_size));
         while (size)
         {
                 if (size < BUFSIZE) i = size;
                 if (flags & FLAG_VERBOSE)
                         log_printf (LOG_NORMAL,
-                                       "\rVerifying data: %dk/%luk 
(%lu%%)",
+                                       "\rVerifying data: %dk/%lluk 
(%lu%%)",
                                         KB (written + i),
-                                       KB (filestat.st_size),
-                                       PERCENTAGE (written + 
i,filestat.st_size));
+                                       KB ((unsigned long 
long)filestat.st_size),
+                                       PERCENTAGE (written + 
i,(unsigned long long)filestat.st_size));

                 /* read from filename */
                 safe_read (fil_fd,filename,src,i,flags & FLAG_VERBOSE);
@@ -380,10 +380,10 @@ int main (int argc,char *argv[])
         }
         if (flags & FLAG_VERBOSE)
                 log_printf (LOG_NORMAL,
-                               "\rVerifying data: %luk/%luk (100%%)\n",
+                               "\rVerifying data: %lluk/%lluk (100%%)\n",
                                 KB (filestat.st_size),
                                 KB (filestat.st_size));
-       DEBUG("Verified %d / %luk bytes\n",written,filestat.st_size);
+       DEBUG("Verified %d / %lluk bytes\n",written,(unsigned long 
long)filestat.st_size);

         exit (EXIT_SUCCESS);
  }
-- 
2.0.4

                 reply	other threads:[~2014-11-06 15:23 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=545B8FA4.5040801@jdsu.com \
    --to=fabien.proriol@jdsu.com \
    --cc=linux-mtd@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.