allow commands like: neponset# dd -count 1 -if data -iseek 8589934591 -of /dev/null 1+0 records in 1+0 records out prior behavior: neponset# dd -count 1 -if data -iseek 8589934591 -of /dev/null dd: argument 8589934591 out of range Notes: Wed Aug 8 19:26:33 EDT 2007 geoff thanks, that was long overdue. Reference: /n/sources/patch/applied/dd-bigfiles Date: Wed Aug 8 21:29:44 CES 2007 Signed-off-by: quanstro@quanstro.net Reviewed-by: geoff --- /sys/src/cmd/dd.c Wed Aug 8 21:28:00 2007 +++ /sys/src/cmd/dd.c Wed Aug 8 21:59:42 2007 @@ -2,6 +2,7 @@ #include #define BIG 2147483647 +#define VBIG (1LL<<62) #define LCASE (1<<0) #define UCASE (1<<1) #define SWAB (1<<2) @@ -44,7 +45,7 @@ void flsh(void); int match(char *s); -vlong number(long big); +vlong number(vlong big); void cnull(int cc); void null(int c); void ascii(int cc); @@ -106,19 +107,19 @@ continue; } if(iskey("skip")) { - skip = number(BIG); + skip = number(VBIG); continue; } if(iskey("seek") || iskey("oseek")) { - oseekn = number(BIG); + oseekn = number(VBIG); continue; } if(iskey("iseek")) { - iseekn = number(BIG); + iseekn = number(VBIG); continue; } if(iskey("count")) { - count = number(BIG); + count = number(VBIG); continue; } if(iskey("files")) { @@ -334,7 +335,7 @@ } vlong -number(long big) +number(vlong big) { char *cs; vlong n; @@ -362,11 +363,11 @@ /* case '*':*/ case 'x': string = cs; - n *= number(BIG); + n *= number(VBIG); case '\0': if(n>=big || n<0) { - fprint(2, "dd: argument %lld out of range\n", n); +/ fprint(2, "dd: argument %lld out of range\n", n); exits("range"); } return n;