svn commit: r263382 - user/marcel/mkimg
Marcel Moolenaar
marcel at FreeBSD.org
Wed Mar 19 21:44:53 UTC 2014
Author: marcel
Date: Wed Mar 19 21:44:51 2014
New Revision: 263382
URL: http://svnweb.freebsd.org/changeset/base/263382
Log:
Add mkimg.h. It contains the 'part' structure definition and the linked
list (STAILQ) so that it can be shared and re-used in all source files.
Replace the now unneeded scheme_add_part() with scheme_check_part() for
posterity.
Also (should have been a separate commit), remove the enforcement of
creating a GPT table with at least 128 entries. While this is generally
advised as the default or minimum, it's not actually a hard requirement.
We now recreate a table that's precisely enough (rounded of course).
WHile
Added:
user/marcel/mkimg/mkimg.h (contents, props changed)
Modified:
user/marcel/mkimg/mkimg.c
user/marcel/mkimg/scheme.c
user/marcel/mkimg/scheme.h
Modified: user/marcel/mkimg/mkimg.c
==============================================================================
--- user/marcel/mkimg/mkimg.c Wed Mar 19 21:37:44 2014 (r263381)
+++ user/marcel/mkimg/mkimg.c Wed Mar 19 21:44:51 2014 (r263382)
@@ -40,26 +40,13 @@ __FBSDID("$FreeBSD$");
#include <sysexits.h>
#include <unistd.h>
+#include "mkimg.h"
#include "scheme.h"
#define BUFFER_SIZE (1024*1024)
-struct part {
- STAILQ_ENTRY(part) link;
- char *type; /* Partition type. */
- char *contents; /* Contents/size specification. */
- u_int kind; /* Content kind. */
-#define PART_UNDEF 0
-#define PART_KIND_FILE 1
-#define PART_KIND_PIPE 2
-#define PART_KIND_SIZE 3
- u_int index; /* Partition index (0-based). */
- off_t offset; /* Byte-offset of partition in image. */
- off_t size; /* Size in bytes of partition. */
-};
-
-static STAILQ_HEAD(, part) parts = STAILQ_HEAD_INITIALIZER(parts);
-static u_int nparts = 0;
+struct partlisthead partlist = STAILQ_HEAD_INITIALIZER(partlist);
+u_int nparts = 0;
static int bcfd = 0;
static int outfd = 0;
@@ -155,7 +142,7 @@ parse_part(const char *spec)
}
part->index = nparts;
- STAILQ_INSERT_TAIL(&parts, part, link);
+ STAILQ_INSERT_TAIL(&partlist, part, link);
nparts++;
return (0);
@@ -208,7 +195,7 @@ mkimg(void)
scheme_max_parts());
offset = scheme_first_offset(nparts);
- STAILQ_FOREACH(part, &parts, link) {
+ STAILQ_FOREACH(part, &partlist, link) {
part->offset = offset;
lseek(tmpfd, offset, SEEK_SET);
/* XXX check error */
@@ -237,8 +224,7 @@ mkimg(void)
break;
}
part->size = size;
- scheme_add_part(part->index, part->type, part->offset,
- part->size);
+ scheme_check_part(part);
offset = scheme_next_offset(offset, size);
}
Added: user/marcel/mkimg/mkimg.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ user/marcel/mkimg/mkimg.h Wed Mar 19 21:44:51 2014 (r263382)
@@ -0,0 +1,49 @@
+/*-
+ * Copyright (c) 2014 Juniper Networks, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _MKIMG_MKIMG_H_
+#define _MKIMG_MKIMG_H_
+
+struct part {
+ STAILQ_ENTRY(part) link;
+ char *type; /* Partition type. */
+ char *contents; /* Contents/size specification. */
+ u_int kind; /* Content kind. */
+#define PART_UNDEF 0
+#define PART_KIND_FILE 1
+#define PART_KIND_PIPE 2
+#define PART_KIND_SIZE 3
+ u_int index; /* Partition index (0-based). */
+ off_t offset; /* Byte-offset of partition in image. */
+ off_t size; /* Size in bytes of partition. */
+};
+
+extern STAILQ_HEAD(partlisthead, part) partlist;
+extern u_int nparts;
+
+#endif /* _MKIMG_MKIMG_H_ */
Modified: user/marcel/mkimg/scheme.c
==============================================================================
--- user/marcel/mkimg/scheme.c Wed Mar 19 21:37:44 2014 (r263381)
+++ user/marcel/mkimg/scheme.c Wed Mar 19 21:44:51 2014 (r263382)
@@ -30,6 +30,7 @@ __FBSDID("$FreeBSD$");
#include <sys/types.h>
#include <sys/diskmbr.h>
#include <sys/diskpc98.h>
+#include <sys/queue.h>
#include <sys/vtoc.h>
#include <err.h>
#include <errno.h>
@@ -37,10 +38,9 @@ __FBSDID("$FreeBSD$");
#include <strings.h>
#include <unistd.h>
+#include "mkimg.h"
#include "scheme.h"
-#define MAX(a, b) ((a < b) ? b : a)
-
static struct scheme {
const char *lexeme;
u_int token;
@@ -57,7 +57,6 @@ static struct scheme {
static u_int scheme = SCHEME_UNDEF;
static u_int secsz = 512;
-static u_int nparts = 0;
int
scheme_select(const char *spec)
@@ -83,27 +82,12 @@ scheme_selected(void)
}
int
-scheme_add_part(u_int idx, const char *type, off_t offset, off_t size)
+scheme_check_part(struct part *p __unused)
{
- warnx("part: index=%u, type=`%s', offset=%ju, size=%ju", idx,
- type, (uintmax_t)offset, (uintmax_t)size);
- switch (scheme) {
- case SCHEME_APM:
- break;
- case SCHEME_BSD:
- break;
- case SCHEME_EBR:
- break;
- case SCHEME_GPT:
- break;
- case SCHEME_MBR:
- break;
- case SCHEME_PC98:
- break;
- case SCHEME_VTOC8:
- break;
- }
+ warnx("part: index=%u, type=`%s', offset=%ju, size=%ju", p->index,
+ p->type, (uintmax_t)p->offset, (uintmax_t)p->size);
+
return (0);
}
@@ -146,7 +130,6 @@ scheme_first_offset(u_int parts)
{
off_t off;
- nparts = parts; /* Save nparts for later. */
switch (scheme) {
case SCHEME_APM:
off = parts + 1;
@@ -158,13 +141,13 @@ scheme_first_offset(u_int parts)
off = 1;
break;
case SCHEME_GPT:
- off = 2 + (MAX(128, parts) + 3) / 4;
+ off = 2 + (parts + 3) / 4;
break;
case SCHEME_MBR:
off = 1;
break;
case SCHEME_PC98:
- off = 16;
+ off = 2;
break;
case SCHEME_VTOC8:
off = 1;
@@ -194,7 +177,7 @@ scheme_write(int fd, off_t off)
switch (scheme) {
case SCHEME_GPT:
- lim = off + secsz * (1 + (MAX(128, nparts) + 3) / 4);
+ lim = off + secsz * (1 + (nparts + 3) / 4);
break;
case SCHEME_EBR:
off -= secsz;
Modified: user/marcel/mkimg/scheme.h
==============================================================================
--- user/marcel/mkimg/scheme.h Wed Mar 19 21:37:44 2014 (r263381)
+++ user/marcel/mkimg/scheme.h Wed Mar 19 21:44:51 2014 (r263382)
@@ -41,7 +41,7 @@
int scheme_select(const char *);
u_int scheme_selected(void);
-int scheme_add_part(u_int, const char *, off_t, off_t);
+int scheme_check_part(struct part *);
u_int scheme_max_parts(void);
off_t scheme_first_offset(u_int);
off_t scheme_next_offset(off_t, uint64_t);
More information about the svn-src-user
mailing list