- const char *inFile = NULL;
- const char *outFile = NULL;
- char *cp;
- int inFd;
- int outFd;
- int inCc = 0;
- int outCc;
- size_t blockSize = 512;
- //uintmax_t skipBlocks = 0;
- uintmax_t count = (uintmax_t)-1;
- uintmax_t intotal;
- uintmax_t outTotal;
- unsigned char *buf;
-
- argc--;
- argv++;
-
- /* Parse any options */
- while (argc) {
- if (inFile == NULL && (strncmp(*argv, "if", 2) == 0))
- inFile=((strchr(*argv, '='))+1);
- else if (outFile == NULL && (strncmp(*argv, "of", 2) == 0))
- outFile=((strchr(*argv, '='))+1);
- else if (strncmp("count", *argv, 5) == 0) {
- count = getNum ((strchr(*argv, '='))+1);
- if (count <= 0) {
- fprintf (stderr, "Bad count value %s\n", *argv);
- goto usage;
- }
+ int i, ifd, ofd, oflag, sync_flag = FALSE, trunc = TRUE;
+ size_t in_full = 0, in_part = 0, out_full = 0, out_part = 0;
+ size_t bs = 512, count = -1;
+ ssize_t n;
+ off_t seek = 0, skip = 0;
+ FILE *statusfp;
+ char *infile = NULL, *outfile = NULL, *buf;
+
+ for (i = 1; i < argc; i++) {
+ if (strncmp("bs=", argv[i], 3) == 0)
+ bs = parse_number(argv[i]+3, dd_suffixes);
+ else if (strncmp("count=", argv[i], 6) == 0)
+ count = parse_number(argv[i]+6, dd_suffixes);
+ else if (strncmp("seek=", argv[i], 5) == 0)
+ seek = parse_number(argv[i]+5, dd_suffixes);
+ else if (strncmp("skip=", argv[i], 5) == 0)
+ skip = parse_number(argv[i]+5, dd_suffixes);
+ else if (strncmp("if=", argv[i], 3) == 0)
+ infile = argv[i]+3;
+ else if (strncmp("of=", argv[i], 3) == 0)
+ outfile = argv[i]+3;
+ else if (strncmp("conv=", argv[i], 5) == 0) {
+ buf = argv[i]+5;
+ while (1) {
+ if (strncmp("notrunc", buf, 7) == 0) {
+ trunc = FALSE;
+ buf += 7;
+ } else if (strncmp("sync", buf, 4) == 0) {
+ sync_flag = TRUE;
+ buf += 4;
+ } else {
+ error_msg_and_die("invalid conversion `%s'", argv[i]+5);
+ }
+ if (buf[0] == '\0')
+ break;
+ if (buf[0] == ',')
+ buf++;
+ }
+ } else
+ show_usage();