diff options
author | Glenn L McGrath <bug1@ihug.co.nz> | 2000-09-10 04:39:37 +0000 |
---|---|---|
committer | Glenn L McGrath <bug1@ihug.co.nz> | 2000-09-10 04:39:37 +0000 |
commit | 18310f1ce3fd2e2fd4ddce6da8ee6867f4196157 (patch) | |
tree | 8659d7094c5d62df6e1f40643855ff7f050f1e05 | |
parent | 0ae8e5a645d9fba1623a370ec51b9008c6d1bc7c (diff) | |
download | busybox-18310f1ce3fd2e2fd4ddce6da8ee6867f4196157.tar.gz |
Using seek=? used to cause part of the original file to be zero'ed, i
think this was caused by opening the file in truncate mode.
-rw-r--r-- | coreutils/dd.c | 9 | ||||
-rw-r--r-- | dd.c | 9 |
2 files changed, 8 insertions, 10 deletions
diff --git a/coreutils/dd.c b/coreutils/dd.c index 395f8c1e3..a7c8a2266 100644 --- a/coreutils/dd.c +++ b/coreutils/dd.c @@ -57,6 +57,7 @@ extern int dd_main(int argc, char **argv) uintmax_t totalSize; uintmax_t readSize; unsigned char buf[BUFSIZ]; + off_t jumped; argc--; argv++; @@ -117,7 +118,7 @@ extern int dd_main(int argc, char **argv) if (outFile == NULL) outFd = fileno(stdout); else - outFd = open(outFile, O_WRONLY | O_CREAT | O_TRUNC, 0666); + outFd = open(outFile, O_WRONLY | O_CREAT, 0666); if (outFd < 0) { /* Note that we are not freeing buf or closing @@ -129,10 +130,9 @@ extern int dd_main(int argc, char **argv) fatalError( outFile); } - lseek(inFd, skipBlocks * blockSize, SEEK_SET); - lseek(outFd, seekBlocks * blockSize, SEEK_SET); + lseek(inFd, (off_t) (skipBlocks * blockSize), SEEK_SET); + jumped = lseek(outFd, (off_t) (seekBlocks * blockSize), SEEK_SET); totalSize=count*blockSize; - printf("totalsize is %d\n",(int) totalSize); while ((readSize = totalSize - inTotal) > 0) { if (readSize > BUFSIZ) readSize=BUFSIZ; @@ -148,7 +148,6 @@ extern int dd_main(int argc, char **argv) #ifdef BB_FEATURE_CLEAN_UP close(inFd); close(outFd); - free(buf); #endif printf("%ld+%d records in\n", (long) (inTotal / blockSize), @@ -57,6 +57,7 @@ extern int dd_main(int argc, char **argv) uintmax_t totalSize; uintmax_t readSize; unsigned char buf[BUFSIZ]; + off_t jumped; argc--; argv++; @@ -117,7 +118,7 @@ extern int dd_main(int argc, char **argv) if (outFile == NULL) outFd = fileno(stdout); else - outFd = open(outFile, O_WRONLY | O_CREAT | O_TRUNC, 0666); + outFd = open(outFile, O_WRONLY | O_CREAT, 0666); if (outFd < 0) { /* Note that we are not freeing buf or closing @@ -129,10 +130,9 @@ extern int dd_main(int argc, char **argv) fatalError( outFile); } - lseek(inFd, skipBlocks * blockSize, SEEK_SET); - lseek(outFd, seekBlocks * blockSize, SEEK_SET); + lseek(inFd, (off_t) (skipBlocks * blockSize), SEEK_SET); + jumped = lseek(outFd, (off_t) (seekBlocks * blockSize), SEEK_SET); totalSize=count*blockSize; - printf("totalsize is %d\n",(int) totalSize); while ((readSize = totalSize - inTotal) > 0) { if (readSize > BUFSIZ) readSize=BUFSIZ; @@ -148,7 +148,6 @@ extern int dd_main(int argc, char **argv) #ifdef BB_FEATURE_CLEAN_UP close(inFd); close(outFd); - free(buf); #endif printf("%ld+%d records in\n", (long) (inTotal / blockSize), |