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.