summaryrefslogtreecommitdiff
path: root/lib/libgeom/geom_getxml.c
diff options
context:
space:
mode:
authorUlf Lilleengen <lulf@FreeBSD.org>2008-07-08 17:34:50 +0000
committerUlf Lilleengen <lulf@FreeBSD.org>2008-07-08 17:34:50 +0000
commit7b6942a110f1c489c295ac85be8737c2955a737a (patch)
tree5b3be73bdbe84255bd046a32bc817c208bfefb52 /lib/libgeom/geom_getxml.c
parent7b709f8ad4600dcc27d591c86d6bf094ef800f74 (diff)
Notes
Diffstat (limited to 'lib/libgeom/geom_getxml.c')
-rw-r--r--lib/libgeom/geom_getxml.c32
1 files changed, 13 insertions, 19 deletions
diff --git a/lib/libgeom/geom_getxml.c b/lib/libgeom/geom_getxml.c
index 68ff91bcf14f..b27696d21657 100644
--- a/lib/libgeom/geom_getxml.c
+++ b/lib/libgeom/geom_getxml.c
@@ -39,28 +39,22 @@ char *
geom_getxml()
{
char *p;
- size_t l;
- int i;
+ size_t l = 0;
+ int mib[3];
+ size_t sizep;
- l = 1024 * 1024; /* Start big, realloc back */
+ sizep = sizeof(mib) / sizeof(*mib);
+ if (sysctlnametomib("kern.geom.confxml", mib, &sizep) != 0)
+ return (NULL);
+ if (sysctl(mib, sizep, NULL, &l, NULL, 0) != 0)
+ return (NULL);
+ l += 4096;
p = malloc(l);
- if (p) {
- i = sysctlbyname("kern.geom.confxml", p, &l, NULL, 0);
- if (i == 0) {
- p = realloc(p, strlen(p) + 1);
- return (p);
- }
+ if (p == NULL)
+ return (NULL);
+ if (sysctl(mib, sizep, p, &l, NULL, 0) != 0) {
free(p);
- }
- l = 0;
- i = sysctlbyname("kern.geom.confxml", NULL, &l, NULL, 0);
- if (i != 0)
return (NULL);
- p = malloc(l + 4096);
- i = sysctlbyname("kern.geom.confxml", p, &l, NULL, 0);
- if (i == 0) {
- p = realloc(p, strlen(p) + 1);
- return (p);
}
- return (NULL);
+ return (reallocf(p, strlen(p) + 1));
}