0001-flashcp-Use-llu-to-print-filestat.st_size.patch
Fabien Proriol
Fabien.Proriol at jdsu.com
Thu Nov 6 07:13:08 PST 2014
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 at 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 at 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
More information about the linux-mtd
mailing list