proposed bsdlabel patch
Luigi Rizzo
rizzo at icir.org
Mon Mar 29 16:39:27 PST 2004
if there are no strong objections, I'd like to commit
the following minor patch to bsdlabel (and associated bsdlabel.8
changes) to implement a '-f' option which enables bsdlabel to
work on an image file too.
With this, and ports/sysutils/makefs, we will be able to
build a bootable image entirely without root privileges,
which should be of some interests for a number of applications
cheers
luigi
--- bsdlabel.c Mon Mar 15 23:10:34 2004
+++ /usr/src/sbin/bsdlabel/bsdlabel.c Tue Mar 30 00:18:18 2004
@@ -139,7 +139,7 @@
static int disable_write; /* set to disable writing to disk label */
-
+static int is_file; /* work on a file (abs. pathname), "-f" opt. */
int
main(int argc, char *argv[])
{
@@ -147,7 +147,7 @@
int ch, error = 0;
char const *name = 0;
- while ((ch = getopt(argc, argv, "ABb:em:nRrs:w")) != -1)
+ while ((ch = getopt(argc, argv, "ABb:efm:nRrs:w")) != -1)
switch (ch) {
case 'A':
allfields = 1;
@@ -158,6 +158,9 @@
case 'b':
xxboot = optarg;
break;
+ case 'f':
+ is_file=1;
+ break;
case 'm':
if (!strcmp(optarg, "i386") ||
!strcmp(optarg, "amd64") ||
@@ -214,6 +217,8 @@
/* Figure out the names of the thing we're working on */
if (argv[0][0] != '/') {
+ if (is_file)
+ errx(1, "-f requires an absolute pathname");
dkname = argv[0];
asprintf(&specname, "%s%s", _PATH_DEV, argv[0]);
} else {
@@ -446,6 +441,10 @@
f = open(specname, O_RDONLY);
if (f < 0)
err(1, specname);
+ if (is_file) {
+ secsize = DEV_BSIZE;
+ mediasize = lseek(f, (off_t)0, SEEK_END);
+ } else
/* New world order */
if ((ioctl(f, DIOCGMEDIASIZE, &mediasize) != 0) ||
(ioctl(f, DIOCGSECTORSIZE, &secsize) != 0)) {
@@ -1329,6 +1328,10 @@
return (NULL);
}
+ if (is_file) {
+ secsize = DEV_BSIZE;
+ mediasize = lseek(f, (off_t)0, SEEK_END);
+ } else
/* New world order */
if ((ioctl(f, DIOCGMEDIASIZE, &mediasize) != 0) ||
(ioctl(f, DIOCGSECTORSIZE, &secsize) != 0)) {
More information about the freebsd-current
mailing list