aboutsummaryrefslogtreecommitdiff
path: root/coreutils/dd.c
diff options
context:
space:
mode:
Diffstat (limited to 'coreutils/dd.c')
-rw-r--r--coreutils/dd.c15
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;