245         nzids_saved = nzids;
 246         if (zone_list(zids, &nzids) != 0) {
 247                 free(zids);
 248                 return (errno);
 249         }
 250         if (nzids > nzids_saved) {
 251                 free(zids);
 252                 goto again;
 253         }
 254 
 255         for (i = 0; i < nzids; i++) {
 256                 int res;
 257                 zone_status_t status;
 258 
 259                 /*
 260                  * Skip over zones that have gone away or are going down
 261                  * since we got the list.  Process all zones in the list,
 262                  * logging errors for any that failed.
 263                  */
 264                 if (zone_getattr(zids[i], ZONE_ATTR_STATUS, &status,
 265                     sizeof (status)) < 0)
 266                         continue;
 267                 switch (status) {
 268                         case ZONE_IS_SHUTTING_DOWN:
 269                         case ZONE_IS_EMPTY:
 270                         case ZONE_IS_DOWN:
 271                         case ZONE_IS_DYING:
 272                         case ZONE_IS_DEAD:
 273                                 /* FALLTHRU */
 274                                 continue;
 275                         default:
 276                                 break;
 277                 }
 278                 if ((res = dlmgmt_zone_init(zids[i])) != 0) {
 279                         (void) fprintf(stderr, "zone (%ld) init error %s",
 280                             zids[i], strerror(res));
 281                         dlmgmt_log(LOG_ERR, "zone (%d) init error %s",
 282                             zids[i], strerror(res));
 283                 }
 284         }
 285         free(zids);
 286         return (0);
 287 }
 288 
 289 static int
 290 dlmgmt_init(void)
 291 {
 292         int     err;
 293         char    *fmri, *c;
 
 | 
 
 
 245         nzids_saved = nzids;
 246         if (zone_list(zids, &nzids) != 0) {
 247                 free(zids);
 248                 return (errno);
 249         }
 250         if (nzids > nzids_saved) {
 251                 free(zids);
 252                 goto again;
 253         }
 254 
 255         for (i = 0; i < nzids; i++) {
 256                 int res;
 257                 zone_status_t status;
 258 
 259                 /*
 260                  * Skip over zones that have gone away or are going down
 261                  * since we got the list.  Process all zones in the list,
 262                  * logging errors for any that failed.
 263                  */
 264                 if (zone_getattr(zids[i], ZONE_ATTR_STATUS, &status,
 265                     sizeof (status)) < 0) {
 266                         continue;
 267                 }
 268                 switch (status) {
 269                         case ZONE_IS_SHUTTING_DOWN:
 270                         case ZONE_IS_EMPTY:
 271                         case ZONE_IS_DOWN:
 272                         case ZONE_IS_DYING:
 273                         case ZONE_IS_DEAD:
 274                         case ZONE_IS_INITIALIZED:
 275                         case ZONE_IS_UNINITIALIZED:
 276                                 continue;
 277                         default:
 278                                 break;
 279                 }
 280                 if ((res = dlmgmt_zone_init(zids[i])) != 0) {
 281                         (void) fprintf(stderr, "zone (%ld) init error %s",
 282                             zids[i], strerror(res));
 283                         dlmgmt_log(LOG_ERR, "zone (%d) init error %s",
 284                             zids[i], strerror(res));
 285                 }
 286         }
 287         free(zids);
 288         return (0);
 289 }
 290 
 291 static int
 292 dlmgmt_init(void)
 293 {
 294         int     err;
 295         char    *fmri, *c;
 
 |