summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/cmd/disk/9660/write.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/sys/src/cmd/disk/9660/write.c b/sys/src/cmd/disk/9660/write.c
index e45f21c19..263e803c9 100644
--- a/sys/src/cmd/disk/9660/write.c
+++ b/sys/src/cmd/disk/9660/write.c
@@ -53,6 +53,16 @@ rewritedotdot(Cdimg *cd, Direc *d, Direc *dparent)
Cwrite(cd, buf, Blocksize);
}
+static int
+alphacmp(void *va, void *vb)
+{
+ Direc *a, *b;
+
+ a = va;
+ b = vb;
+ return strcmp(a->name, b->name);
+}
+
/*
* Write each non-directory file. We copy the file to
* the cd image, and then if it turns out that we've
@@ -72,6 +82,9 @@ writefiles(Dump *d, Cdimg *cd, Direc *direc)
Dumpdir *dd;
if(direc->mode & DMDIR) {
+ /* write data in alphabetical order avoiding seeks */
+ qsort(direc->child, direc->nchild, sizeof(direc->child[0]), alphacmp);
+
for(i=0; i<direc->nchild; i++)
writefiles(d, cd, &direc->child[i]);
return;