Пример #1
0
xbee_err xbee_rxFree(struct xbee_rxInfo *info) {
	if (!info) return XBEE_EMISSINGPARAM;
	
	xbee_ll_free(info->bufList, (void(*)(void*))xbee_pktFree);
	xsys_sem_destroy(&info->sem);
	free(info);
	
	return XBEE_ENONE;
}
Пример #2
0
static xbee_err _xbee_pktFree(struct xbee_pkt *pkt) {
	xbee_ll_ext_item(pktList, pkt);
	
	xbee_ll_free(pkt->dataItems, (void(*)(void *))_xbee_pktDataKeyDestroy);
	
	free(pkt);
	
	return XBEE_ENONE;
}
Пример #3
0
EXPORT FINI void xbee_fini(void) {
#ifndef XBEE_NO_FINI
    /* clean up threads, so that they can't depend on anything we are about to free! */
    if (threadList) {
        xbee_ll_free(threadList, (void(*)(void*))xbee_threadKillThis);
        threadList = NULL;
    }
    if (xbeeList) {
        xbee_ll_free(xbeeList, (void(*)(void*))xbee_shutdown);
        xbeeList = NULL;
    }
    if (conList) {
        xbee_ll_free(conList, (void(*)(void*))xbee_conEnd);
        conList = NULL;
    }
    if (pktList) {
        xbee_ll_free(pktList, (void(*)(void*))xbee_pktFree);
        pktList = NULL;
    }
    if (netDeadClientList) {
        xbee_ll_free(netDeadClientList, (void(*)(void*))xbee_netClientShutdown);
        netDeadClientList = NULL;
    }
    if (needsFree) {
        xbee_ll_free(needsFree, (void(*)(void*))free);
        needsFree = NULL;
    }
#endif /* XBEE_NO_FINI */
}
Пример #4
0
xbee_err xbee_modeCleanup(struct xbee_modeConType *conTypes) {
	int i;
	if (!conTypes) return XBEE_EMISSINGPARAM;
	
	for (i = 0; conTypes[i].name; i++) {
		xbee_ll_free(conTypes[i].conList, (void(*)(void*))xbee_conFree);
		/* i know, casting to void* to avoid the const keyword is naughty... */
		if (conTypes[i].nameNeedsFree) free((void*)conTypes[i].name);
		if (conTypes[i].rxHandler && conTypes[i].rxHandler->needsFree) free((void*)conTypes[i].rxHandler);
		if (conTypes[i].txHandler && conTypes[i].txHandler->needsFree) free((void*)conTypes[i].txHandler);
	}
	
	free(conTypes);
	return XBEE_ENONE;
}
Пример #5
0
xbee_err xbee_pktDataKeyAdd(struct xbee_pkt *pkt, const char *key, int id, struct pkt_dataKey **retKey, void (*freeCallback)(void*)) {
	struct pkt_dataKey *k;
	xbee_err ret;
	
	if (!pkt || !key) return XBEE_EMISSINGPARAM;
#ifndef XBEE_DISABLE_STRICT_OBJECTS
	if (xbee_pktValidate(pkt) != XBEE_ENONE) return XBEE_EINVAL;
#endif /* XBEE_DISABLE_STRICT_OBJECTS */
	
	if (xbee_pktDataKeyGet(pkt, key, id, &k) == XBEE_ENONE) {
		if (retKey) *retKey = k;
		return XBEE_EEXISTS;
	}
	
	if ((k = calloc(1, sizeof(*k))) == NULL) {
		return XBEE_ENOMEM;
	}
	
	ret = XBEE_ENONE;
	snprintf(k->name, PKT_DATAKEY_MAXLEN, "%s", key);
	k->id = id;
	k->freeCallback = freeCallback;
	if ((k->items = xbee_ll_alloc()) == NULL) {
		ret = XBEE_ENOMEM;
		goto die1;
	}
	
	if (xbee_ll_add_tail(pkt->dataItems, k) != XBEE_ENONE) {
		ret = XBEE_ELINKEDLIST;
		goto die2;
	}
	
	if (retKey) *retKey = k;
	
	goto done;
die2:
	xbee_ll_free(k->items, NULL);
die1:
	free(k);
done:
	return ret;
}
Пример #6
0
static xbee_err _xbee_pktDataKeyDestroy(struct pkt_dataKey *key) {
	xbee_ll_free(key->items, key->freeCallback);
	free(key);
	return XBEE_ENONE;
}