diff options
Diffstat (limited to 'coreutils/dd.c')
-rw-r--r-- | coreutils/dd.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/coreutils/dd.c b/coreutils/dd.c index 9468cddfc..39c6a6263 100644 --- a/coreutils/dd.c +++ b/coreutils/dd.c @@ -162,8 +162,13 @@ extern int dd_main (int argc, char **argv) intotal = 0; outTotal = 0; - if (inFile == NULL) - inFd = STDIN; + if (inFile == NULL) { + struct stat statBuf; + inFd = fileno(stdin); + if (fstat(inFd, &statBuf) < 0) + exit( FALSE); + count = statBuf.st_size; + } else inFd = open (inFile, 0); @@ -174,7 +179,7 @@ extern int dd_main (int argc, char **argv) } if (outFile == NULL) - outFd = STDOUT; + outFd = fileno(stdout); else outFd = creat (outFile, 0666); @@ -191,6 +196,8 @@ extern int dd_main (int argc, char **argv) if (inCc < 0) { perror (inFile); goto cleanup; + } else if (inCc == 0) { + goto cleanup; } intotal += inCc; cp = buf; @@ -202,6 +209,8 @@ extern int dd_main (int argc, char **argv) if (outCc < 0) { perror (outFile); goto cleanup; + } else if (outCc == 0) { + goto cleanup; } inCc -= outCc; |