summaryrefslogtreecommitdiffstats
path: root/lib/libdisk/create_chunk.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libdisk/create_chunk.c')
-rw-r--r--lib/libdisk/create_chunk.c53
1 files changed, 34 insertions, 19 deletions
diff --git a/lib/libdisk/create_chunk.c b/lib/libdisk/create_chunk.c
index a2027e2..9e3a079 100644
--- a/lib/libdisk/create_chunk.c
+++ b/lib/libdisk/create_chunk.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: create_chunk.c,v 1.5 1995/04/30 11:04:12 phk Exp $
+ * $Id: create_chunk.c,v 1.6 1995/05/01 04:05:24 phk Exp $
*
*/
@@ -26,31 +26,48 @@ Fixup_FreeBSD_Names(struct disk *d, struct chunk *c)
{
struct chunk *c1, *c3;
int j;
- char *p=0;
if (!strcmp(c->name, "X")) return;
+
+ /* reset all names to "X" */
+ for (c1 = c->part; c1 ; c1 = c1->next)
+ strcpy(c1->name,"X");
+
+ /* Allocate the first swap-partition we find */
+ for (c1 = c->part; c1 ; c1 = c1->next) {
+ if (c1->type == unused) continue;
+ if (c1->type == reserved) continue;
+ if (c1->subtype != FS_SWAP) continue;
+ sprintf(c1->name,"%s%c",c->name,SWAP_PART+'a');
+ break;
+ }
+
+ /* Allocate the first root-partition we find */
+ for (c1 = c->part; c1 ; c1 = c1->next) {
+ if (c1->type == unused) continue;
+ if (c1->type == reserved) continue;
+ if (!(c1->flags & CHUNK_IS_ROOT)) continue;
+ sprintf(c1->name,"%s%c",c->name,0+'a');
+ break;
+ }
+
+ /* Allocate the rest sequentially */
for (c1 = c->part; c1 ; c1 = c1->next) {
+ const char order[] = "defghab";
if (c1->type == unused) continue;
if (c1->type == reserved) continue;
- if (strcmp(c1->name, "X")) continue;
- for(j=0;j<8;j++) {
- if (j == 2)
- continue;
- p = malloc(12);
- if(!p) err(1,"malloc failed");
- sprintf(p,"%s%c",c->name,j+'a');
+ if (strcmp("X",c1->name)) continue;
+
+ for(j=0;j<strlen(order);j++) {
+ sprintf(c1->name,"%s%c",c->name,order[j]);
for(c3 = c->part; c3 ; c3 = c3->next)
- if (c3 != c1 && !strcmp(c3->name, p))
+ if (c1 != c3 && !strcmp(c3->name, c1->name))
goto match;
- free(c1->name);
- c1->name = p;
- p = 0;
break;
- match:
- continue;
+ match:
+ strcpy(c1->name,"X");
+ continue;
}
- if(p)
- free(p);
}
}
@@ -103,8 +120,6 @@ Fixup_Names(struct disk *d)
continue;
if (c2->type == reserved)
continue;
- if (strcmp(c2->name,"X"))
- continue;
p = malloc(12);
if(!p) err(1,"malloc failed");
for(j=1;j<=NDOSPART;j++) {
OpenPOWER on IntegriCloud