diff options
author | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-05-06 13:51:53 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@gmx.de> | 2012-05-06 13:51:53 +0200 |
commit | 7fff1f8dbafde3b4c4de7bc176800577c45a32dc (patch) | |
tree | 085b1133a7e85b7eff2683168ff16e6f187de987 /sys/src/cmd/disk | |
parent | 68c77bf4a6aa932a7f31d8d84a378656542c80c2 (diff) |
disk/format: choose default cluster size if not given
Diffstat (limited to 'sys/src/cmd/disk')
-rw-r--r-- | sys/src/cmd/disk/format.c | 25 |
1 files changed, 23 insertions, 2 deletions
diff --git a/sys/src/cmd/disk/format.c b/sys/src/cmd/disk/format.c index 0410bd423..7cd00e318 100644 --- a/sys/src/cmd/disk/format.c +++ b/sys/src/cmd/disk/format.c @@ -364,6 +364,23 @@ writen(int fd, void *buf, long n) return tot; } +int +defcluster(vlong n) +{ + int i; + + i = n / 32768; + if(i <= 1) + return 1; + if(i >= 128) + return 128; + i--; + i |= i >> 1; + i |= i >> 2; + i |= i >> 4; + return i+1; +} + void dosfs(int dofat, int dopbs, Disk *disk, char *label, int argc, char *argv[], int commit) { @@ -388,6 +405,7 @@ dosfs(int dofat, int dopbs, Disk *disk, char *label, int argc, char *argv[], int t->sectors = disk->s; t->heads = disk->h; t->tracks = disk->c; + t->cluster = defcluster(disk->secs); } if(t->sectors == 0 && dofat) @@ -490,6 +508,8 @@ dosfs(int dofat, int dopbs, Disk *disk, char *label, int argc, char *argv[], int if(clustersize == 0) clustersize = t->cluster; +if(chatty) print("clustersize %d\n", clustersize); + /* * the number of fat bits depends on how much disk is left * over after you subtract out the space taken up by the fat tables. @@ -519,7 +539,8 @@ Tryagain: break; clusters = newclusters; if(i > 10) - fatal("can't decide how many clusters to use (%d? %d?)", clusters, newclusters); + fatal("can't decide how many clusters to use (%d? %d?)", + clusters, newclusters); if(chatty) print("clusters %d\n", clusters); } @@ -786,7 +807,7 @@ addrname(uchar *entry, Dir *dir, char *name, ulong start) d = (Dosdir*)entry; putname(s, d); - if(strcmp(s, "9load") == 0) + if(cistrcmp(s, "9load") == 0 || cistrncmp(s, "9boot", 5) == 0) d->attr = DSYSTEM; else d->attr = 0; |