svn commit: r263466 - user/marcel/mkimg
Marcel Moolenaar
marcel at FreeBSD.org
Fri Mar 21 05:30:29 UTC 2014
Author: marcel
Date: Fri Mar 21 05:30:27 2014
New Revision: 263466
URL: http://svnweb.freebsd.org/changeset/base/263466
Log:
Add support for partition labels and write them for GPT.
Modified:
user/marcel/mkimg/gpt.c
user/marcel/mkimg/mkimg.c
user/marcel/mkimg/mkimg.h
user/marcel/mkimg/scheme.c
user/marcel/mkimg/scheme.h
Modified: user/marcel/mkimg/gpt.c
==============================================================================
--- user/marcel/mkimg/gpt.c Fri Mar 21 04:52:46 2014 (r263465)
+++ user/marcel/mkimg/gpt.c Fri Mar 21 05:30:27 2014 (r263466)
@@ -173,6 +173,7 @@ gpt_mktbl(u_int tblsz, u_int secsz)
struct gpt_ent *tbl, *ent;
struct part *part;
uint64_t limit;
+ int c, idx;
tbl = calloc(tblsz, secsz);
if (tbl == NULL)
@@ -186,7 +187,13 @@ gpt_mktbl(u_int tblsz, u_int secsz)
le64enc(&ent->ent_lba_start, part->offset / secsz);
limit = (part->offset + part->size) / secsz;
le64enc(&ent->ent_lba_end, limit - 1);
- /* TODO add support for labels */
+ if (part->label != NULL) {
+ idx = 0;
+ while ((c = part->label[idx]) != '\0') {
+ le16enc(ent->ent_name + idx, c);
+ idx++;
+ }
+ }
}
return (tbl);
}
@@ -272,7 +279,8 @@ static struct mkimg_scheme gpt_scheme =
.aliases = gpt_aliases,
.metadata = gpt_metadata,
.write = gpt_write,
- .nparts = 4096
+ .nparts = 4096,
+ .labellen = 36
};
SCHEME_DEFINE(gpt_scheme);
Modified: user/marcel/mkimg/mkimg.c
==============================================================================
--- user/marcel/mkimg/mkimg.c Fri Mar 21 04:52:46 2014 (r263465)
+++ user/marcel/mkimg/mkimg.c Fri Mar 21 05:30:27 2014 (r263466)
@@ -163,6 +163,21 @@ parse_part(const char *spec)
goto errout;
}
+ spec = part->alias;
+ sep = strchr(spec, '/');
+ if (sep != NULL) {
+ *sep++ = '\0';
+ if (strlen(part->alias) == 0 || strlen(sep) == 0) {
+ error = EINVAL;
+ goto errout;
+ }
+ part->label = strdup(sep);
+ if (part->label == NULL) {
+ error = ENOMEM;
+ goto errout;
+ }
+ }
+
part->index = nparts;
STAILQ_INSERT_TAIL(&partlist, part, link);
nparts++;
Modified: user/marcel/mkimg/mkimg.h
==============================================================================
--- user/marcel/mkimg/mkimg.h Fri Mar 21 04:52:46 2014 (r263465)
+++ user/marcel/mkimg/mkimg.h Fri Mar 21 05:30:27 2014 (r263466)
@@ -44,6 +44,7 @@ struct part {
uintptr_t type; /* Scheme-specific partition type. */
off_t offset; /* Byte-offset of partition in image. */
off_t size; /* Size in bytes of partition. */
+ char *label; /* Partition label. */
};
extern STAILQ_HEAD(partlisthead, part) partlist;
Modified: user/marcel/mkimg/scheme.c
==============================================================================
--- user/marcel/mkimg/scheme.c Fri Mar 21 04:52:46 2014 (r263465)
+++ user/marcel/mkimg/scheme.c Fri Mar 21 05:30:27 2014 (r263466)
@@ -33,7 +33,7 @@ __FBSDID("$FreeBSD$");
#include <err.h>
#include <errno.h>
#include <stdint.h>
-#include <strings.h>
+#include <string.h>
#include <unistd.h>
#include "mkimg.h"
@@ -86,6 +86,13 @@ scheme_check_part(struct part *p)
if (alias == NULL)
return (EINVAL);
p->type = iter->type;
+
+ /* Validate the optional label. */
+ if (p->label != NULL) {
+ if (strlen(p->label) > scheme->labellen)
+ return (EOPNOTSUPP);
+ }
+
return (0);
}
Modified: user/marcel/mkimg/scheme.h
==============================================================================
--- user/marcel/mkimg/scheme.h Fri Mar 21 04:52:46 2014 (r263465)
+++ user/marcel/mkimg/scheme.h Fri Mar 21 05:30:27 2014 (r263466)
@@ -50,7 +50,8 @@ struct mkimg_scheme {
#define SCHEME_META_PART_BEFORE 3
#define SCHEME_META_PART_AFTER 4
int (*write)(int, off_t, u_int, u_int);
- int nparts;
+ u_int nparts;
+ u_int labellen;
};
SET_DECLARE(schemes, struct mkimg_scheme);
More information about the svn-src-user
mailing list