static netsnmp_container * _ba_duplicate(netsnmp_container *c, void *ctx, u_int flags) { netsnmp_container *dup; binary_array_table *dupt, *t; if (flags) { snmp_log(LOG_ERR, "binary arry duplicate does not supprt flags yet\n"); return NULL; } dup = netsnmp_container_get_binary_array(); if (NULL == dup) { snmp_log(LOG_ERR," no memory for binary array duplicate\n"); return NULL; } /* * deal with container stuff */ if (netsnmp_container_data_dup(dup, c) != 0) { netsnmp_binary_array_release(dup); return NULL; } /* * deal with data */ dupt = (binary_array_table*)dup->container_data; t = (binary_array_table*)c->container_data; dupt->max_size = t->max_size; dupt->count = t->count; dupt->dirty = t->dirty; dupt->data_size = t->data_size; /* * shallow copy */ dupt->data = (void**) calloc(dupt->max_size, dupt->data_size); if (NULL == dupt->data) { snmp_log(LOG_ERR, "no memory for binary array duplicate\n"); netsnmp_binary_array_release(dup); return NULL; } memcpy(dupt->data, t->data, dupt->max_size * dupt->data_size); return dup; }
static int _ba_free(netsnmp_container *container) { netsnmp_binary_array_release(container); return 0; }