diff options
| -rw-r--r-- | sys/src/cmd/disk/prep/calc.y | 8 | ||||
| -rw-r--r-- | sys/src/cmd/disk/prep/edisk.c | 1 | ||||
| -rw-r--r-- | sys/src/cmd/disk/prep/edit.c | 6 | ||||
| -rw-r--r-- | sys/src/cmd/disk/prep/edit.h | 3 | ||||
| -rw-r--r-- | sys/src/cmd/disk/prep/fdisk.c | 4 | ||||
| -rw-r--r-- | sys/src/cmd/disk/prep/prep.c | 1 |
6 files changed, 14 insertions, 9 deletions
diff --git a/sys/src/cmd/disk/prep/calc.y b/sys/src/cmd/disk/prep/calc.y index 0829f09df..4cb81780e 100644 --- a/sys/src/cmd/disk/prep/calc.y +++ b/sys/src/cmd/disk/prep/calc.y @@ -79,7 +79,7 @@ mkOP(int ty, Exp *e1, Exp *e2) static char *inp; static jmp_buf jmp; -static vlong dot, size, dollar; +static vlong dot, size, dollar, unit; static char** errp; static int @@ -110,7 +110,8 @@ yylex(void) n *= 1024; /* fall through */ case 'k': - n *= 2; + n *= 1024; + n /= unit; /* convert to sectors */ break; default: --inp; @@ -164,7 +165,7 @@ eval(Exp *e) int yyparse(void); char* -parseexpr(char *s, vlong xdot, vlong xdollar, vlong xsize, vlong *result) +parseexpr(char *s, vlong xdot, vlong xdollar, vlong xsize, vlong xunit, vlong *result) { char *err; @@ -176,6 +177,7 @@ parseexpr(char *s, vlong xdot, vlong xdollar, vlong xsize, vlong *result) dot = xdot; size = xsize; dollar = xdollar; + unit = xunit; yyparse(); if(yyexp == nil) return "nil yylval?"; diff --git a/sys/src/cmd/disk/prep/edisk.c b/sys/src/cmd/disk/prep/edisk.c index 907e1f53f..eb7645914 100644 --- a/sys/src/cmd/disk/prep/edisk.c +++ b/sys/src/cmd/disk/prep/edisk.c @@ -294,6 +294,7 @@ main(int argc, char **argv) edit.disk->secsize = secsize; edit.disk->secs = edit.disk->size / secsize; } + edit.unitsz = edit.disk->secsize; edit.end = edit.disk->secs; if(blank) diff --git a/sys/src/cmd/disk/prep/edit.c b/sys/src/cmd/disk/prep/edit.c index 8a96116fa..6bca3ab1b 100644 --- a/sys/src/cmd/disk/prep/edit.c +++ b/sys/src/cmd/disk/prep/edit.c @@ -129,7 +129,7 @@ editdot(Edit *edit, int argc, char **argv) if(argc > 2) return "args"; - if(err = parseexpr(argv[1], edit->dot, edit->end, edit->end, &ndot)) + if(err = parseexpr(argv[1], edit->dot, edit->end, edit->end, edit->unitsz, &ndot)) return err; edit->dot = ndot; @@ -157,7 +157,7 @@ editadd(Edit *edit, int argc, char **argv) fprint(2, "start %s: ", edit->unit); q = getline(edit); } - if(err = parseexpr(q, edit->dot, edit->end, edit->end, &start)) + if(err = parseexpr(q, edit->dot, edit->end, edit->end, edit->unitsz, &start)) return err; if(start < 0 || start >= edit->end) @@ -181,7 +181,7 @@ editadd(Edit *edit, int argc, char **argv) fprint(2, "end [%lld..%lld] ", start, maxend); q = getline(edit); } - if(err = parseexpr(q, edit->dot, maxend, edit->end, &end)) + if(err = parseexpr(q, edit->dot, maxend, edit->end, edit->unitsz, &end)) return err; if(start == end) diff --git a/sys/src/cmd/disk/prep/edit.h b/sys/src/cmd/disk/prep/edit.h index 8751adc4f..29ef4e993 100644 --- a/sys/src/cmd/disk/prep/edit.h +++ b/sys/src/cmd/disk/prep/edit.h @@ -36,6 +36,7 @@ struct Edit { void *aux; vlong dot; vlong end; + vlong unitsz; /* do not use fields below this line */ int changed; @@ -48,7 +49,7 @@ void runcmd(Edit*, char*); Part *findpart(Edit*, char*); char *addpart(Edit*, Part*); char *delpart(Edit*, Part*); -char *parseexpr(char *s, vlong xdot, vlong xdollar, vlong xsize, vlong *result); +char *parseexpr(char *s, vlong xdot, vlong xdollar, vlong xsize, vlong xunit, vlong *result); int ctldiff(Edit *edit, int ctlfd); void *emalloc(ulong); char *estrdup(char*); diff --git a/sys/src/cmd/disk/prep/fdisk.c b/sys/src/cmd/disk/prep/fdisk.c index c06b6fffc..073034942 100644 --- a/sys/src/cmd/disk/prep/fdisk.c +++ b/sys/src/cmd/disk/prep/fdisk.c @@ -141,8 +141,8 @@ main(int argc, char **argv) edit.disk->secsize = secsize; edit.disk->secs = edit.disk->size / secsize; } - sec2cyl = edit.disk->h * edit.disk->s; + edit.unitsz = sec2cyl * edit.disk->secsize; edit.end = edit.disk->secs / sec2cyl; findmbr(&edit); @@ -164,7 +164,7 @@ main(int argc, char **argv) if(dowrite || printflag) exits(0); - fprint(2, "cylinder = %lld bytes\n", sec2cyl*edit.disk->secsize); + fprint(2, "%s = %lld bytes\n", edit.unit, edit.unitsz); runcmd(&edit, "p"); for(;;) { fprint(2, ">>> "); diff --git a/sys/src/cmd/disk/prep/prep.c b/sys/src/cmd/disk/prep/prep.c index 20ad62a1d..8bd60c021 100644 --- a/sys/src/cmd/disk/prep/prep.c +++ b/sys/src/cmd/disk/prep/prep.c @@ -160,6 +160,7 @@ main(int argc, char **argv) disk->secsize = secsize; disk->secs = disk->size / secsize; } + edit.unitsz = disk->secsize; edit.end = disk->secs; checkfat(disk); |
