コード例 #1
0
ファイル: dnscache.c プロジェクト: huayl/rsyslog
addEntry(struct sockaddr_storage *const addr, dnscache_entry_t **const pEtry)
{
	int r;
	dnscache_entry_t *etry = NULL;
	DEFiRet;

	/* entry still does not exist, so add it */
	struct sockaddr_storage *const keybuf =  malloc(sizeof(struct sockaddr_storage));
	CHKmalloc(keybuf);
	CHKmalloc(etry = malloc(sizeof(dnscache_entry_t)));
	resolveAddr(addr, etry);
	assert(etry != NULL);
	memcpy(&etry->addr, addr, SALEN((struct sockaddr*) addr));
	etry->nUsed = 0;
	if(dnscacheEnableTTL) {
		etry->validUntil = time(NULL) + dnscacheDefaultTTL;
	}

	memcpy(keybuf, addr, sizeof(struct sockaddr_storage));

	r = hashtable_insert(dnsCache.ht, keybuf, etry);
	if(r == 0) {
		DBGPRINTF("dnscache: inserting element failed\n");
	}
	*pEtry = etry;

finalize_it:
	if(iRet != RS_RET_OK) {
		free(keybuf);
	}
	RETiRet;
}
コード例 #2
0
ファイル: dnscache.c プロジェクト: madedotcom/rsyslog
static inline rsRetVal
addEntry(struct sockaddr_storage *addr, dnscache_entry_t **pEtry)
{
    int r;
    struct sockaddr_storage *keybuf;
    dnscache_entry_t *etry = NULL;
    DEFiRet;

    CHKmalloc(etry = MALLOC(sizeof(dnscache_entry_t)));
    CHKiRet(resolveAddr(addr, etry));
    memcpy(&etry->addr, addr, SALEN((struct sockaddr*) addr));
    etry->nUsed = 0;
    *pEtry = etry;

    CHKmalloc(keybuf = malloc(sizeof(struct sockaddr_storage)));
    memcpy(keybuf, addr, sizeof(struct sockaddr_storage));

    pthread_rwlock_unlock(&dnsCache.rwlock); /* release read lock */
    pthread_rwlock_wrlock(&dnsCache.rwlock); /* and re-aquire for writing */
    r = hashtable_insert(dnsCache.ht, keybuf, *pEtry);
    if(r == 0) {
        DBGPRINTF("dnscache: inserting element failed\n");
    }
    pthread_rwlock_unlock(&dnsCache.rwlock);
    pthread_rwlock_rdlock(&dnsCache.rwlock); /* we need this again */

finalize_it:
    if(iRet != RS_RET_OK && etry != NULL) {
        /* Note: sub-fields cannot be populated in this case */
        free(etry);
    }
    RETiRet;
}
コード例 #3
0
ファイル: kernelerror.c プロジェクト: fincs/FeOS
static void printPartedAddr(const char* name, void* addr)
{
	iprintf("  %s: ", name);
	part_t oPart;
	if (resolveAddr(&oPart, addr))
		iprintf("%s%c0x%X\n", oPart.name, *oPart.name != '(' ? '+' : ' ', oPart.offset);
	else
		iprintf("--\n");
}
コード例 #4
0
ファイル: kernelerror.c プロジェクト: fincs/FeOS
int stCallback(void* address, int depth /* 0-based */, void* user_data)
{
	part_t oPart;

	if (depth == 19) return 0; // prevent screen overflow

	if (resolveAddr(&oPart, address) && *oPart.name != '(')
		iprintf("%d - %s+0x%X\n", depth, oPart.name, oPart.offset);
	else
		iprintf("%d - 0x%08X\n", depth, (word_t)address);
	return 1;
}
コード例 #5
0
    ScIterator3Ptr createIterator(ScTemplateConstr3 const & constr)
    {
        ScTemplateItemValue const * values = constr.getValues();

        ScTemplateItemValue const & value0 = values[0];
        ScTemplateItemValue const & value1 = values[1];
        ScTemplateItemValue const & value2 = values[2];

		ScAddr const addr0 = resolveAddr(value0);
		ScAddr const addr1 = resolveAddr(value1);
		ScAddr const addr2 = resolveAddr(value2);

		if (addr0.isValid())
		{
			if (addr2.isValid()) // F_A_F
			{
				return mContext.iterator3(addr0, *value1.mTypeValue.upConstType(), addr2);
			}
			else // F_A_A
			{
				return mContext.iterator3(addr0, *value1.mTypeValue.upConstType(), *value2.mTypeValue.upConstType());
			}
		}
		else if (addr2.isValid()) // A_A_F
		{
			return mContext.iterator3(*value0.mTypeValue.upConstType(), *value1.mTypeValue.upConstType(), addr2);
		}
		else if (addr1.isValid()) // A_F_A
		{
			return mContext.iterator3(*value0.mTypeValue.upConstType(), addr1, *value2.mTypeValue.upConstType());
		}
		else // unknown iterator type
		{
			error("Unknown iterator type");
		}

        return ScIterator3Ptr();
    }
コード例 #6
0
ファイル: dnscache.c プロジェクト: Whissi/rsyslog
addEntry(struct sockaddr_storage *const addr, dnscache_entry_t **const pEtry)
{
	int r;
	struct sockaddr_storage *keybuf = NULL;
	dnscache_entry_t *etry = NULL;
	DEFiRet;

	pthread_rwlock_wrlock(&dnsCache.rwlock);
	/* first check, if the entry was added in the mean time */
	etry = findEntry(addr);
	if(etry != NULL) {
		FINALIZE;
	}

	/* entry still does not exist, so add it */
	CHKmalloc(etry = malloc(sizeof(dnscache_entry_t)));
	CHKmalloc(keybuf = malloc(sizeof(struct sockaddr_storage)));
	CHKiRet(resolveAddr(addr, etry));
	memcpy(&etry->addr, addr, SALEN((struct sockaddr*) addr));
	etry->nUsed = 0;

	memcpy(keybuf, addr, sizeof(struct sockaddr_storage));

	r = hashtable_insert(dnsCache.ht, keybuf, etry);
	keybuf = NULL;
	if(r == 0) {
		DBGPRINTF("dnscache: inserting element failed\n");
	}

finalize_it:
	pthread_rwlock_unlock(&dnsCache.rwlock);
	if(iRet == RS_RET_OK) {
		*pEtry = etry;
	} else {
		free(keybuf);
		free(etry); /* Note: sub-fields cannot be populated in this case */
	}
	RETiRet;
}