Project

General

Profile

Bug #73 » zone_get_zoneids.patch

Igor Pashev, 2012-11-22 04:13 PM

View differences:

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.
*/
(1-1/2)