| 252 | } |
| 253 | |
| 254 | nvpair_t * |
| 255 | nvpair_clone(const nvpair_t *nvp) |
| 256 | { |
| 257 | nvpair_t *newnvp; |
| 258 | const char *name; |
| 259 | const void *data; |
| 260 | size_t datasize; |
| 261 | |
| 262 | NVPAIR_ASSERT(nvp); |
| 263 | |
| 264 | name = nvpair_name(nvp); |
| 265 | |
| 266 | switch (nvpair_type(nvp)) { |
| 267 | case NV_TYPE_NULL: |
| 268 | newnvp = nvpair_create_null(name); |
| 269 | break; |
| 270 | case NV_TYPE_BOOL: |
| 271 | newnvp = nvpair_create_bool(name, nvpair_get_bool(nvp)); |
| 272 | break; |
| 273 | case NV_TYPE_NUMBER: |
| 274 | newnvp = nvpair_create_number(name, nvpair_get_number(nvp)); |
| 275 | break; |
| 276 | case NV_TYPE_STRING: |
| 277 | newnvp = nvpair_create_string(name, nvpair_get_string(nvp)); |
| 278 | break; |
| 279 | case NV_TYPE_NVLIST: |
| 280 | newnvp = nvpair_create_nvlist(name, nvpair_get_nvlist(nvp)); |
| 281 | break; |
| 282 | case NV_TYPE_BINARY: |
| 283 | data = nvpair_get_binary(nvp, &datasize); |
| 284 | newnvp = nvpair_create_binary(name, data, datasize); |
| 285 | break; |
| 286 | case NV_TYPE_BOOL_ARRAY: |
| 287 | data = nvpair_get_bool_array(nvp, &datasize); |
| 288 | newnvp = nvpair_create_bool_array(name, data, datasize); |
| 289 | break; |
| 290 | case NV_TYPE_NUMBER_ARRAY: |
| 291 | data = nvpair_get_number_array(nvp, &datasize); |
| 292 | newnvp = nvpair_create_number_array(name, data, datasize); |
| 293 | break; |
| 294 | case NV_TYPE_STRING_ARRAY: |
| 295 | data = nvpair_get_string_array(nvp, &datasize); |
| 296 | newnvp = nvpair_create_string_array(name, data, datasize); |
| 297 | break; |
| 298 | case NV_TYPE_NVLIST_ARRAY: |
| 299 | data = nvpair_get_nvlist_array(nvp, &datasize); |
| 300 | newnvp = nvpair_create_nvlist_array(name, data, datasize); |
| 301 | break; |
| 302 | #ifndef _KERNEL |
| 303 | case NV_TYPE_DESCRIPTOR: |
| 304 | newnvp = nvpair_create_descriptor(name, |
| 305 | nvpair_get_descriptor(nvp)); |
| 306 | break; |
| 307 | case NV_TYPE_DESCRIPTOR_ARRAY: |
| 308 | data = nvpair_get_descriptor_array(nvp, &datasize); |
| 309 | newnvp = nvpair_create_descriptor_array(name, data, datasize); |
| 310 | break; |
| 311 | #endif |
no test coverage detected