264 ctxt_execname);
265 err |= sw_add_optl_string(ctxt, FM_FMRI_SW_CTXT_ZONE, ctxt_zone);
266 if (ctxt_pid != -1)
267 err |= nvlist_add_int64(ctxt, FM_FMRI_SW_CTXT_PID, ctxt_pid);
268 if (ctxt_ctid != -1)
269 err |= nvlist_add_int64(ctxt, FM_FMRI_SW_CTXT_CTID, ctxt_ctid);
270 if (ctxt_stack != NULL)
271 err |= nvlist_add_string_array(ctxt, FM_FMRI_SW_CTXT_STACK,
272 ctxt_stack, ctxt_stackdepth);
273
274 /*
275 * Add 'context' to the fmri.
276 */
277 if (err == 0)
278 err |= nvlist_add_nvlist(fmri, FM_FMRI_SW_CTXT, ctxt);
279
280 moderr = err ? EMOD_NOMEM : 0;
281 out:
282 if (moderr == 0)
283 *out = fmri;
284
285 if (moderr != 0 && fmri)
286 nvlist_free(fmri);
287
288 if (obj)
289 nvlist_free(obj);
290
291 if (site)
292 nvlist_free(site);
293
294 if (ctxt)
295 nvlist_free(ctxt);
296
297 return (moderr == 0 ? 0 : topo_mod_seterrno(mod, moderr));
298 }
299
300
301 /*ARGSUSED*/
302 static int
303 sw_enum(topo_mod_t *mod, tnode_t *pnode, const char *name,
304 topo_instance_t min, topo_instance_t max, void *notused1, void *notused2)
305 {
306 (void) topo_method_register(mod, pnode, sw_methods);
307 return (0);
308 }
309
310 static void
311 sw_release(topo_mod_t *mod, tnode_t *node)
312 {
313 topo_method_unregister_all(mod, node);
314 }
|
264 ctxt_execname);
265 err |= sw_add_optl_string(ctxt, FM_FMRI_SW_CTXT_ZONE, ctxt_zone);
266 if (ctxt_pid != -1)
267 err |= nvlist_add_int64(ctxt, FM_FMRI_SW_CTXT_PID, ctxt_pid);
268 if (ctxt_ctid != -1)
269 err |= nvlist_add_int64(ctxt, FM_FMRI_SW_CTXT_CTID, ctxt_ctid);
270 if (ctxt_stack != NULL)
271 err |= nvlist_add_string_array(ctxt, FM_FMRI_SW_CTXT_STACK,
272 ctxt_stack, ctxt_stackdepth);
273
274 /*
275 * Add 'context' to the fmri.
276 */
277 if (err == 0)
278 err |= nvlist_add_nvlist(fmri, FM_FMRI_SW_CTXT, ctxt);
279
280 moderr = err ? EMOD_NOMEM : 0;
281 out:
282 if (moderr == 0)
283 *out = fmri;
284 else
285 nvlist_free(fmri);
286
287 nvlist_free(obj);
288 nvlist_free(site);
289 nvlist_free(ctxt);
290
291 return (moderr == 0 ? 0 : topo_mod_seterrno(mod, moderr));
292 }
293
294
295 /*ARGSUSED*/
296 static int
297 sw_enum(topo_mod_t *mod, tnode_t *pnode, const char *name,
298 topo_instance_t min, topo_instance_t max, void *notused1, void *notused2)
299 {
300 (void) topo_method_register(mod, pnode, sw_methods);
301 return (0);
302 }
303
304 static void
305 sw_release(topo_mod_t *mod, tnode_t *node)
306 {
307 topo_method_unregister_all(mod, node);
308 }
|