svn commit: r190058 - head/sys/geom/part

Ivan Voras ivoras at FreeBSD.org
Thu Mar 19 07:23:18 PDT 2009


Author: ivoras
Date: Thu Mar 19 14:23:17 2009
New Revision: 190058
URL: http://svn.freebsd.org/changeset/base/190058

Log:
  Make GEOM provider names starting with "/dev/" acceptable as well as their
  "raw" names. While there, change the formatting of extended MSDOS partitions
  so that the dot (".") is not used to separate two numbers (which kind of
  looks like the whole is a decimal number). Use "+" instead, which also
  hints that the second part of the name is the offset from the start of
  the partition in the first part of the name. Also change the offset from
  decimal to hexadecimal notation, simply for aesthetic reasons and future
  compatibility.
  
  GEOM_PART is the default in 8-CURRENT but not yet in 7-STABLE so this
  changeset can be MFC-ed without causing major problems from the second
  part.
  
  Reviewed by:	marcel
  Approved by:	gnn (mentor)
  MFC after:	2 weeks

Modified:
  head/sys/geom/part/g_part.c
  head/sys/geom/part/g_part_ebr.c

Modified: head/sys/geom/part/g_part.c
==============================================================================
--- head/sys/geom/part/g_part.c	Thu Mar 19 14:20:00 2009	(r190057)
+++ head/sys/geom/part/g_part.c	Thu Mar 19 14:23:17 2009	(r190058)
@@ -49,6 +49,10 @@ __FBSDID("$FreeBSD$");
 
 #include "g_part_if.h"
 
+#ifndef _PATH_DEV
+#define _PATH_DEV "/dev/"
+#endif
+
 static kobj_method_t g_part_null_methods[] = {
 	{ 0, 0 }
 };
@@ -273,12 +277,17 @@ g_part_new_provider(struct g_geom *gp, s
 }
 
 static int
-g_part_parm_geom(const char *p, struct g_geom **v)
+g_part_parm_geom(const char *rawname, struct g_geom **v)
 {
 	struct g_geom *gp;
+	const char *pname;
 
+	if (strncmp(rawname, _PATH_DEV, strlen(_PATH_DEV)) == 0)
+		pname = rawname + strlen(_PATH_DEV);
+	else
+		pname = rawname;
 	LIST_FOREACH(gp, &g_part_class.geom, geom) {
-		if (!strcmp(p, gp->name))
+		if (!strcmp(pname, gp->name))
 			break;
 	}
 	if (gp == NULL)
@@ -288,11 +297,14 @@ g_part_parm_geom(const char *p, struct g
 }
 
 static int
-g_part_parm_provider(const char *p, struct g_provider **v)
+g_part_parm_provider(const char *pname, struct g_provider **v)
 {
 	struct g_provider *pp;
 
-	pp = g_provider_by_name(p);
+	if (strncmp(pname, _PATH_DEV, strlen(_PATH_DEV)) == 0)
+		pp = g_provider_by_name(pname + strlen(_PATH_DEV));
+	else
+		pp = g_provider_by_name(pname);
 	if (pp == NULL)
 		return (EINVAL);
 	*v = pp;

Modified: head/sys/geom/part/g_part_ebr.c
==============================================================================
--- head/sys/geom/part/g_part_ebr.c	Thu Mar 19 14:20:00 2009	(r190057)
+++ head/sys/geom/part/g_part_ebr.c	Thu Mar 19 14:23:17 2009	(r190058)
@@ -343,7 +343,7 @@ g_part_ebr_name(struct g_part_table *tab
     char *buf, size_t bufsz)
 {
 
-	snprintf(buf, bufsz, ".%08u", entry->gpe_index);
+	snprintf(buf, bufsz, "+%08x", entry->gpe_index);
 	return (buf);
 }
 


More information about the svn-src-head mailing list