OSDN Git Service

Using seek=? used to cause part of the original file to be zero'ed, i
authorGlenn L McGrath <bug1@ihug.co.nz>
Sun, 10 Sep 2000 04:39:37 +0000 (04:39 -0000)
committerGlenn L McGrath <bug1@ihug.co.nz>
Sun, 10 Sep 2000 04:39:37 +0000 (04:39 -0000)
think this was caused by opening the file in truncate mode.

coreutils/dd.c
dd.c

index 395f8c1..a7c8a22 100644 (file)
@@ -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),
diff --git a/dd.c b/dd.c
index 395f8c1..a7c8a22 100644 (file)
--- a/dd.c
+++ b/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),