summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorphk <phk@FreeBSD.org>1995-05-10 05:57:04 +0000
committerphk <phk@FreeBSD.org>1995-05-10 05:57:04 +0000
commitb06a2da1188043774a21f325c65893b1dd1937ba (patch)
treea7a3e845ea2cb1759f8334a843c91f607580ff3b
parentf900359daa37c3aa08178cd6a7f487d8bdde66ac (diff)
downloadFreeBSD-src-b06a2da1188043774a21f325c65893b1dd1937ba.zip
FreeBSD-src-b06a2da1188043774a21f325c65893b1dd1937ba.tar.gz
Create_Chunk_DWIM() is here, though it doesn't quite do what the name implies.
-rw-r--r--lib/libdisk/Makefile2
-rw-r--r--lib/libdisk/create_chunk.c34
-rw-r--r--lib/libdisk/libdisk.h9
-rw-r--r--lib/libdisk/tst01.c12
-rw-r--r--release/libdisk/Makefile2
-rw-r--r--release/libdisk/create_chunk.c34
-rw-r--r--release/libdisk/libdisk.h9
-rw-r--r--release/libdisk/tst01.c12
8 files changed, 106 insertions, 8 deletions
diff --git a/lib/libdisk/Makefile b/lib/libdisk/Makefile
index 8fc56f0..3d58dfa 100644
--- a/lib/libdisk/Makefile
+++ b/lib/libdisk/Makefile
@@ -12,7 +12,7 @@ NOSHARED= yes
BOOTS=/usr/mdec
-data.c:
+data.c: libdisk.h ${BOOTS}/boot1 ${BOOTS}/boot2
file2c 'const unsigned char boot1[] = {' '};' \
< ${BOOTS}/boot1 > tmp.c
file2c 'const unsigned char boot2[] = {' '};' \
diff --git a/lib/libdisk/create_chunk.c b/lib/libdisk/create_chunk.c
index 2ce62e9..4d530f4 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.11 1995/05/08 00:44:46 phk Exp $
+ * $Id: create_chunk.c,v 1.12 1995/05/08 01:26:47 phk Exp $
*
*/
@@ -164,3 +164,35 @@ Create_Chunk(struct disk *d, u_long offset, u_long size, chunk_e type, int subty
Fixup_Names(d);
return i;
}
+
+struct chunk *
+Create_Chunk_DWIM(struct disk *d, struct chunk *parent , u_long size, chunk_e type, int subtype, u_long flags)
+{
+ int i;
+ struct chunk *c1;
+ u_long offset;
+
+ if (!parent)
+ parent = d->chunks;
+ if (type == freebsd)
+ subtype = 0xa5;
+ for (c1=parent->part; c1 ; c1 = c1->next) {
+ if (c1->type != unused) continue;
+ if (c1->size < size) continue;
+ offset = c1->offset;
+ goto found;
+ }
+ warn("Not enough unused space");
+ return 0;
+ found:
+ i = Add_Chunk(d,offset,size,"X",type,subtype,flags);
+ if (i) {
+ warn("Didn't cut it");
+ return 0;
+ }
+ Fixup_Names(d);
+ for (c1=parent->part; c1 ; c1 = c1->next)
+ if (c1->offset == offset)
+ return c1;
+ err(1,"Serious internal trouble");
+}
diff --git a/lib/libdisk/libdisk.h b/lib/libdisk/libdisk.h
index 728fc24..767bec0 100644
--- a/lib/libdisk/libdisk.h
+++ b/lib/libdisk/libdisk.h
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: libdisk.h,v 1.13 1995/05/06 03:28:30 phk Exp $
+ * $Id: libdisk.h,v 1.14 1995/05/08 02:08:30 phk Exp $
*
*/
@@ -199,6 +199,13 @@ Prev_Track_Aligned(struct disk *d, u_long offset);
* bios geometry
*/
+struct chunk *
+Create_Chunk_DWIM(struct disk *d, struct chunk *parent , u_long size, chunk_e type, int subtype, u_long flags);
+ /* This one creates a partition inside the given parent of the given
+ * size, and returns a pointer to it. The first unused chunk big
+ * enough is used.
+ */
+
/*
* Implementation details >>> DO NOT USE <<<
*/
diff --git a/lib/libdisk/tst01.c b/lib/libdisk/tst01.c
index 6670963..b32253a 100644
--- a/lib/libdisk/tst01.c
+++ b/lib/libdisk/tst01.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: tst01.c,v 1.9 1995/05/03 17:38:00 jkh Exp $
+ * $Id: tst01.c,v 1.10 1995/05/04 07:00:56 phk Exp $
*
*/
@@ -168,6 +168,16 @@ main(int argc, char **argv)
if (!strcasecmp(*cmds,"exit")) { break; }
if (!strcasecmp(*cmds,"q")) { break; }
if (!strcasecmp(*cmds,"x")) { break; }
+ if (!strcasecmp(*cmds,"dwim") && ncmd == 6) {
+ printf("dwim = %p\n",
+ Create_Chunk_DWIM(d,
+ (struct chunk *)strtol(cmds[1],0,0)),
+ strtol(cmds[2],0,0),
+ strtol(cmds[3],0,0),
+ strtol(cmds[4],0,0),
+ strtol(cmds[5],0,0) );
+ continue;
+ }
if (!strcasecmp(*cmds,"delete") && ncmd == 2) {
printf("delete = %d\n",
Delete_Chunk(d,
diff --git a/release/libdisk/Makefile b/release/libdisk/Makefile
index 8fc56f0..3d58dfa 100644
--- a/release/libdisk/Makefile
+++ b/release/libdisk/Makefile
@@ -12,7 +12,7 @@ NOSHARED= yes
BOOTS=/usr/mdec
-data.c:
+data.c: libdisk.h ${BOOTS}/boot1 ${BOOTS}/boot2
file2c 'const unsigned char boot1[] = {' '};' \
< ${BOOTS}/boot1 > tmp.c
file2c 'const unsigned char boot2[] = {' '};' \
diff --git a/release/libdisk/create_chunk.c b/release/libdisk/create_chunk.c
index 2ce62e9..4d530f4 100644
--- a/release/libdisk/create_chunk.c
+++ b/release/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.11 1995/05/08 00:44:46 phk Exp $
+ * $Id: create_chunk.c,v 1.12 1995/05/08 01:26:47 phk Exp $
*
*/
@@ -164,3 +164,35 @@ Create_Chunk(struct disk *d, u_long offset, u_long size, chunk_e type, int subty
Fixup_Names(d);
return i;
}
+
+struct chunk *
+Create_Chunk_DWIM(struct disk *d, struct chunk *parent , u_long size, chunk_e type, int subtype, u_long flags)
+{
+ int i;
+ struct chunk *c1;
+ u_long offset;
+
+ if (!parent)
+ parent = d->chunks;
+ if (type == freebsd)
+ subtype = 0xa5;
+ for (c1=parent->part; c1 ; c1 = c1->next) {
+ if (c1->type != unused) continue;
+ if (c1->size < size) continue;
+ offset = c1->offset;
+ goto found;
+ }
+ warn("Not enough unused space");
+ return 0;
+ found:
+ i = Add_Chunk(d,offset,size,"X",type,subtype,flags);
+ if (i) {
+ warn("Didn't cut it");
+ return 0;
+ }
+ Fixup_Names(d);
+ for (c1=parent->part; c1 ; c1 = c1->next)
+ if (c1->offset == offset)
+ return c1;
+ err(1,"Serious internal trouble");
+}
diff --git a/release/libdisk/libdisk.h b/release/libdisk/libdisk.h
index 728fc24..767bec0 100644
--- a/release/libdisk/libdisk.h
+++ b/release/libdisk/libdisk.h
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: libdisk.h,v 1.13 1995/05/06 03:28:30 phk Exp $
+ * $Id: libdisk.h,v 1.14 1995/05/08 02:08:30 phk Exp $
*
*/
@@ -199,6 +199,13 @@ Prev_Track_Aligned(struct disk *d, u_long offset);
* bios geometry
*/
+struct chunk *
+Create_Chunk_DWIM(struct disk *d, struct chunk *parent , u_long size, chunk_e type, int subtype, u_long flags);
+ /* This one creates a partition inside the given parent of the given
+ * size, and returns a pointer to it. The first unused chunk big
+ * enough is used.
+ */
+
/*
* Implementation details >>> DO NOT USE <<<
*/
diff --git a/release/libdisk/tst01.c b/release/libdisk/tst01.c
index 6670963..b32253a 100644
--- a/release/libdisk/tst01.c
+++ b/release/libdisk/tst01.c
@@ -6,7 +6,7 @@
* this stuff is worth it, you can buy me a beer in return. Poul-Henning Kamp
* ----------------------------------------------------------------------------
*
- * $Id: tst01.c,v 1.9 1995/05/03 17:38:00 jkh Exp $
+ * $Id: tst01.c,v 1.10 1995/05/04 07:00:56 phk Exp $
*
*/
@@ -168,6 +168,16 @@ main(int argc, char **argv)
if (!strcasecmp(*cmds,"exit")) { break; }
if (!strcasecmp(*cmds,"q")) { break; }
if (!strcasecmp(*cmds,"x")) { break; }
+ if (!strcasecmp(*cmds,"dwim") && ncmd == 6) {
+ printf("dwim = %p\n",
+ Create_Chunk_DWIM(d,
+ (struct chunk *)strtol(cmds[1],0,0)),
+ strtol(cmds[2],0,0),
+ strtol(cmds[3],0,0),
+ strtol(cmds[4],0,0),
+ strtol(cmds[5],0,0) );
+ continue;
+ }
if (!strcasecmp(*cmds,"delete") && ncmd == 2) {
printf("delete = %d\n",
Delete_Chunk(d,
OpenPOWER on IntegriCloud