summaryrefslogtreecommitdiffhomepage
path: root/coreutils/dd.c
diff options
context:
space:
mode:
authorGlenn L McGrath <bug1@ihug.co.nz>2000-09-10 04:39:37 +0000
committerGlenn L McGrath <bug1@ihug.co.nz>2000-09-10 04:39:37 +0000
commit18310f1ce3fd2e2fd4ddce6da8ee6867f4196157 (patch)
tree8659d7094c5d62df6e1f40643855ff7f050f1e05 /coreutils/dd.c
parent0ae8e5a645d9fba1623a370ec51b9008c6d1bc7c (diff)
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.
Diffstat (limited to 'coreutils/dd.c')
-rw-r--r--coreutils/dd.c9
1 files changed, 4 insertions, 5 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),