diff options
| author | Ulf Lilleengen <lulf@FreeBSD.org> | 2008-07-08 17:34:50 +0000 |
|---|---|---|
| committer | Ulf Lilleengen <lulf@FreeBSD.org> | 2008-07-08 17:34:50 +0000 |
| commit | 7b6942a110f1c489c295ac85be8737c2955a737a (patch) | |
| tree | 5b3be73bdbe84255bd046a32bc817c208bfefb52 /lib/libgeom/geom_getxml.c | |
| parent | 7b709f8ad4600dcc27d591c86d6bf094ef800f74 (diff) | |
Notes
Diffstat (limited to 'lib/libgeom/geom_getxml.c')
| -rw-r--r-- | lib/libgeom/geom_getxml.c | 32 |
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)); } |
