mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-10-13 08:50:16 +00:00
system/dd: emit status messages to stderr (not stdout)
Previously `dd` clobbered its output by writing status messages (e.g. transfer statistics) to stdout. Now all status messages are written to stderr. Signed-off-by: Lars Kruse <devel@sumpfralle.de>
This commit is contained in:
parent
93060aa59d
commit
db36c8c617
1 changed files with 33 additions and 23 deletions
|
|
@ -110,7 +110,8 @@ static int dd_write(FAR struct dd_s *dd)
|
|||
nbytes = write(dd->outfd, buffer, dd->nbytes - written);
|
||||
if (nbytes < 0)
|
||||
{
|
||||
printf("%s: failed to write: %s\n", g_dd, strerror(errno));
|
||||
fprintf(stderr, "%s: failed to write: %s\n", g_dd,
|
||||
strerror(errno));
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
|
@ -142,7 +143,7 @@ static int dd_read(FAR struct dd_s *dd)
|
|||
continue;
|
||||
}
|
||||
|
||||
printf("%s: failed to read: %s\n", g_dd, strerror(errno));
|
||||
fprintf(stderr, "%s: failed to read: %s\n", g_dd, strerror(errno));
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
|
@ -174,7 +175,8 @@ static inline int dd_infopen(FAR const char *name, FAR struct dd_s *dd)
|
|||
dd->infd = open(name, O_RDONLY);
|
||||
if (dd->infd < 0)
|
||||
{
|
||||
printf("%s: failed to open '%s': %s\n", g_dd, name, strerror(errno));
|
||||
fprintf(stderr, "%s: failed to open '%s': %s\n", g_dd, name,
|
||||
strerror(errno));
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
|
@ -196,7 +198,8 @@ static inline int dd_outfopen(FAR const char *name, FAR struct dd_s *dd)
|
|||
dd->outfd = open(name, dd->oflags, 0644);
|
||||
if (dd->outfd < 0)
|
||||
{
|
||||
printf("%s: failed to open '%s': %s\n", g_dd, name, strerror(errno));
|
||||
fprintf(stderr, "%s: failed to open '%s': %s\n", g_dd, name,
|
||||
strerror(errno));
|
||||
return ERROR;
|
||||
}
|
||||
|
||||
|
|
@ -212,7 +215,8 @@ static int dd_verify(FAR struct dd_s *dd)
|
|||
ret = lseek(dd->infd, dd->skip ? dd->skip * dd->sectsize : 0, SEEK_SET);
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("%s: failed to infd lseek: %s\n", g_dd, strerror(errno));
|
||||
fprintf(stderr, "%s: failed to infd lseek: %s\n", g_dd,
|
||||
strerror(errno));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -220,7 +224,8 @@ static int dd_verify(FAR struct dd_s *dd)
|
|||
ret = lseek(dd->outfd, 0, SEEK_SET);
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("%s: failed to outfd lseek: %s\n", g_dd, strerror(errno));
|
||||
fprintf(stderr, "%s: failed to outfd lseek: %s\n", g_dd,
|
||||
strerror(errno));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
@ -241,7 +246,7 @@ static int dd_verify(FAR struct dd_s *dd)
|
|||
ret = read(dd->outfd, buffer, dd->nbytes);
|
||||
if (ret != dd->nbytes)
|
||||
{
|
||||
printf("%s: failed to outfd read: %d\n",
|
||||
fprintf(stderr, "%s: failed to outfd read: %d\n",
|
||||
g_dd, ret < 0 ? errno : ret);
|
||||
break;
|
||||
}
|
||||
|
|
@ -255,7 +260,8 @@ static int dd_verify(FAR struct dd_s *dd)
|
|||
snprintf(msg, sizeof(msg), "\noutfile sector %d", sector);
|
||||
lib_dumpbuffer(msg, buffer, dd->nbytes);
|
||||
#else
|
||||
printf("%s: sector %d differs unexpectedly\n", g_dd, sector);
|
||||
fprintf(stderr, "%s: sector %d differs unexpectedly\n", g_dd,
|
||||
sector);
|
||||
#endif
|
||||
ret = ERROR;
|
||||
break;
|
||||
|
|
@ -266,7 +272,7 @@ static int dd_verify(FAR struct dd_s *dd)
|
|||
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("%s: failed to dd verify: %d\n", g_dd, ret);
|
||||
fprintf(stderr, "%s: failed to dd verify: %d\n", g_dd, ret);
|
||||
}
|
||||
|
||||
free(buffer);
|
||||
|
|
@ -277,10 +283,10 @@ static int dd_verify(FAR struct dd_s *dd)
|
|||
* Name: print_usage
|
||||
****************************************************************************/
|
||||
|
||||
static void print_usage(void)
|
||||
static void print_usage(FAR FILE *stream)
|
||||
{
|
||||
printf("usage:\n");
|
||||
printf(" %s [if=<infile>] [of=<outfile>] [bs=<sectsize>] "
|
||||
fprintf(stream, "usage:\n");
|
||||
fprintf(stream, " %s [if=<infile>] [of=<outfile>] [bs=<sectsize>] "
|
||||
"[count=<sectors>] [skip=<sectors>] [seek=<sectors>] [verify] "
|
||||
"[conv=<nocreat,notrunc>]\n", g_dd);
|
||||
}
|
||||
|
|
@ -360,7 +366,7 @@ int main(int argc, FAR char **argv)
|
|||
}
|
||||
else
|
||||
{
|
||||
printf("%s: unknown conversion '%.*s'\n", g_dd,
|
||||
fprintf(stderr, "%s: unknown conversion '%.*s'\n", g_dd,
|
||||
(int)len, cur);
|
||||
goto errout_with_paths;
|
||||
}
|
||||
|
|
@ -375,7 +381,7 @@ int main(int argc, FAR char **argv)
|
|||
}
|
||||
else
|
||||
{
|
||||
print_usage();
|
||||
print_usage(stderr);
|
||||
goto errout_with_paths;
|
||||
}
|
||||
}
|
||||
|
|
@ -384,8 +390,9 @@ int main(int argc, FAR char **argv)
|
|||
|
||||
if ((dd.oflags & O_RDONLY) && (infile == NULL || outfile == NULL))
|
||||
{
|
||||
printf("%s: invalid parameters: %s\n", g_dd, strerror(EINVAL));
|
||||
print_usage();
|
||||
fprintf(stderr, "%s: invalid parameters: %s\n", g_dd,
|
||||
strerror(EINVAL));
|
||||
print_usage(stderr);
|
||||
goto errout_with_paths;
|
||||
}
|
||||
|
||||
|
|
@ -394,7 +401,7 @@ int main(int argc, FAR char **argv)
|
|||
dd.buffer = malloc(dd.sectsize);
|
||||
if (!dd.buffer)
|
||||
{
|
||||
printf("%s: failed to malloc: %s\n", g_dd, strerror(errno));
|
||||
fprintf(stderr, "%s: failed to malloc: %s\n", g_dd, strerror(errno));
|
||||
goto errout_with_paths;
|
||||
}
|
||||
|
||||
|
|
@ -419,7 +426,8 @@ int main(int argc, FAR char **argv)
|
|||
ret = lseek(dd.infd, dd.skip * dd.sectsize, SEEK_SET);
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("%s: failed to lseek: %s\n", g_dd, strerror(errno));
|
||||
fprintf(stderr, "%s: failed to lseek: %s\n", g_dd,
|
||||
strerror(errno));
|
||||
ret = ERROR;
|
||||
goto errout_with_outf;
|
||||
}
|
||||
|
|
@ -430,7 +438,7 @@ int main(int argc, FAR char **argv)
|
|||
ret = lseek(dd.outfd, dd.seek * dd.sectsize, SEEK_SET);
|
||||
if (ret < 0)
|
||||
{
|
||||
printf("%s: failed to lseek on output: %s\n",
|
||||
fprintf(stderr, "%s: failed to lseek on output: %s\n",
|
||||
g_dd, strerror(errno));
|
||||
ret = ERROR;
|
||||
goto errout_with_outf;
|
||||
|
|
@ -483,9 +491,9 @@ int main(int argc, FAR char **argv)
|
|||
elapsed -= (((uint64_t)ts0.tv_sec * NSEC_PER_SEC) + ts0.tv_nsec);
|
||||
elapsed /= NSEC_PER_USEC; /* usec */
|
||||
|
||||
printf("%" PRIu64 " bytes (%" PRIu32 " blocks) copied, %u usec, ",
|
||||
fprintf(stderr, "%" PRIu64 " bytes (%" PRIu32 " blocks) copied, %u usec, ",
|
||||
total, sector, (unsigned int)elapsed);
|
||||
printf("%u KB/s\n" ,
|
||||
fprintf(stderr, "%u KB/s\n" ,
|
||||
(unsigned int)(((double)total / 1024)
|
||||
/ ((double)elapsed / USEC_PER_SEC)));
|
||||
#endif
|
||||
|
|
@ -501,7 +509,8 @@ errout_with_outf:
|
|||
dd.outfd = close(dd.outfd);
|
||||
if (dd.outfd < 0)
|
||||
{
|
||||
printf("%s failed to close outfd:%s\n", g_dd, strerror(errno));
|
||||
fprintf(stderr, "%s failed to close outfd:%s\n", g_dd,
|
||||
strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -511,7 +520,8 @@ errout_with_inf:
|
|||
dd.infd = close(dd.infd);
|
||||
if (dd.infd < 0)
|
||||
{
|
||||
printf("%s failed to close infd:%s\n", g_dd, strerror(errno));
|
||||
fprintf(stderr, "%s failed to close infd:%s\n", g_dd,
|
||||
strerror(errno));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue