summaryrefslogtreecommitdiff
path: root/sys/src/cmd/disk
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@gmx.de>2012-05-06 13:51:53 +0200
committercinap_lenrek <cinap_lenrek@gmx.de>2012-05-06 13:51:53 +0200
commit7fff1f8dbafde3b4c4de7bc176800577c45a32dc (patch)
tree085b1133a7e85b7eff2683168ff16e6f187de987 /sys/src/cmd/disk
parent68c77bf4a6aa932a7f31d8d84a378656542c80c2 (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.c25
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;