diff options
Diffstat (limited to 'dd.c')
-rw-r--r-- | dd.c | 37 |
1 files changed, 13 insertions, 24 deletions
@@ -32,6 +32,7 @@ #include <stdio.h> #include <fcntl.h> #include <errno.h> +#include <inttypes.h> static const char dd_usage[] = "dd [if=name] [of=name] [bs=n] [count=n]\n\n" @@ -92,27 +93,20 @@ static long getNum (const char *cp) extern int dd_main (int argc, char **argv) { - const char *inFile; - const char *outFile; + const char *inFile = NULL; + const char *outFile = NULL; char *cp; int inFd; int outFd; int inCc = 0; int outCc; - int skipBlocks; - int blockSize; - long count; - long intotal; - long outTotal; + size_t blockSize = 512; + //uintmax_t skipBlocks = 0; + uintmax_t count = (uintmax_t)-1; + uintmax_t intotal; + uintmax_t outTotal; unsigned char *buf; - inFile = NULL; - outFile = NULL; - blockSize = 512; - skipBlocks = 0; - count = 1; - - argc--; argv++; @@ -125,14 +119,14 @@ extern int dd_main (int argc, char **argv) else if (strncmp("count", *argv, 5) == 0) { count = getNum ((strchr(*argv, '='))+1); if (count <= 0) { - fprintf (stderr, "Bad count value %ld\n", count); + fprintf (stderr, "Bad count value %s\n", *argv); goto usage; } } else if (strncmp(*argv, "bs", 2) == 0) { blockSize = getNum ((strchr(*argv, '='))+1); if (blockSize <= 0) { - fprintf (stderr, "Bad block size value %d\n", blockSize); + fprintf (stderr, "Bad block size value %s\n", *argv); goto usage; } } @@ -162,13 +156,8 @@ extern int dd_main (int argc, char **argv) intotal = 0; outTotal = 0; - if (inFile == NULL) { - struct stat statBuf; + if (inFile == NULL) inFd = fileno(stdin); - if (fstat(inFd, &statBuf) < 0) - exit( FALSE); - count = statBuf.st_size; - } else inFd = open (inFile, 0); @@ -227,9 +216,9 @@ extern int dd_main (int argc, char **argv) close (outFd); free (buf); - printf ("%ld+%d records in\n", intotal / blockSize, + printf ("%ld+%d records in\n", (long)(intotal / blockSize), (intotal % blockSize) != 0); - printf ("%ld+%d records out\n", outTotal / blockSize, + printf ("%ld+%d records out\n", (long)(outTotal / blockSize), (outTotal % blockSize) != 0); exit( TRUE); usage: |