Bug #73 » zone_get_zoneids.patch
| usr/src/head/zone.h | ||
|---|---|---|
|
extern int zone_setattr(zoneid_t, int, void *, size_t);
|
||
|
extern int zone_enter(zoneid_t);
|
||
|
extern int zone_list(zoneid_t *, uint_t *);
|
||
|
extern int zone_get_zoneids(zoneid_t **, uint_t *);
|
||
|
extern int zone_shutdown(zoneid_t);
|
||
|
extern int zone_version(int *);
|
||
|
extern int zone_add_datalink(zoneid_t, datalink_id_t);
|
||
| usr/src/lib/libc/port/mapfile-vers | ||
|---|---|---|
|
zone_enter;
|
||
|
zone_getattr;
|
||
|
zone_get_id;
|
||
|
zone_get_zoneids;
|
||
|
zone_list;
|
||
|
zone_list_datalink;
|
||
|
zonept;
|
||
| usr/src/lib/libc/port/sys/zone.c | ||
|---|---|---|
|
return (syscall(SYS_zone, ZONE_LIST, zonelist, numzones));
|
||
|
}
|
||
|
int
|
||
|
zone_get_zoneids(zoneid_t **zonelist, uint_t *numzones)
|
||
|
zoneid_t *zids = NULL;
|
||
|
uint_t nzids, nzids_saved;
|
||
|
if (zone_list(NULL, &nzids) != 0)
|
||
|
return (errno);
|
||
|
again:
|
||
|
nzids *= 2;
|
||
|
if ((zids = malloc(nzids * sizeof (zoneid_t))) == NULL)
|
||
|
return (errno);
|
||
|
nzids_saved = nzids;
|
||
|
if (zone_list(zids, &nzids) != 0) {
|
||
|
free(zids);
|
||
|
return (errno);
|
||
|
}
|
||
|
if (nzids > nzids_saved) {
|
||
|
free(zids);
|
||
|
goto again;
|
||
|
}
|
||
|
if(numzones)
|
||
|
*numzones = nzids;
|
||
|
if(zonelist)
|
||
|
*zonelist = zids;
|
||
|
else
|
||
|
free(zids);
|
||
|
return 0;
|
||
|
}
|
||
|
/*
|
||
|
* Underlying implementation for getzoneid and getzoneidbyname.
|
||
|
*/
|
||