コード例 #1
0
ファイル: atom.c プロジェクト: udbxtd2008/lldpd
const char*
lldpctl_atom_get_str(lldpctl_atom_t *atom, lldpctl_key_t key)
{
    char *strresult = NULL;
    const uint8_t *bufresult = NULL;
    long int intresult = -1;
    int n1;
    size_t n2;

    if (atom == NULL) return NULL;
    RESET_ERROR(atom->conn);

    if (atom->get_str != NULL) {
        strresult = (char *)atom->get_str(atom, key);
        if (strresult) return strresult;
        if (lldpctl_last_error(atom->conn) != LLDPCTL_ERR_NOT_EXIST)
            return NULL;
    }

    RESET_ERROR(atom->conn);
    if (atom->get_int != NULL) {
        intresult = atom->get_int(atom, key);
        if (lldpctl_last_error(atom->conn) != LLDPCTL_ERR_NOT_EXIST) {
            strresult = _lldpctl_alloc_in_atom(atom, 21);
            if (!strresult) return NULL;
            n1 = snprintf(strresult, 21, "%ld", intresult);
            if (n1 > -1 && n1 < 21)
                return strresult;
            SET_ERROR(atom->conn, LLDPCTL_ERR_NOMEM); /* Not really true... */
            return NULL;
        }
    }

    RESET_ERROR(atom->conn);
    if (atom->get_buffer != NULL) {
        bufresult = atom->get_buffer(atom, key, &n2);
        if (bufresult)
            return _lldpctl_dump_in_atom(atom, bufresult, n2, ' ', 0);
        if (lldpctl_last_error(atom->conn) != LLDPCTL_ERR_NOT_EXIST)
            return NULL;
    }

    SET_ERROR(atom->conn, LLDPCTL_ERR_NOT_EXIST);
    return NULL;
}
コード例 #2
0
ファイル: atom.c プロジェクト: deviker/lldpd
lldpctl_atom_t*
lldpctl_atom_set_str(lldpctl_atom_t *atom, lldpctl_key_t key,
	const char *value)
{
	lldpctl_atom_t *result = NULL;
	char *end;
	long int converted = 0;
	int isint = 0;
	int bad = 0;

	if (atom == NULL) return NULL;
	RESET_ERROR(atom->conn);

	if (atom->set_str != NULL) {
		result = atom->set_str(atom, key, value);
		if (result) return result;
		if (lldpctl_last_error(atom->conn) != LLDPCTL_ERR_NOT_EXIST &&
		    lldpctl_last_error(atom->conn) != LLDPCTL_ERR_BAD_VALUE)
			return NULL;
		bad = bad || (lldpctl_last_error(atom->conn) == LLDPCTL_ERR_BAD_VALUE);
	}

	if (value) {
		converted = strtol(value, &end, 0);
		isint = (end != value && *end == '\0');
	}

	RESET_ERROR(atom->conn);
	if (atom->set_int != NULL && isint) {
		result = atom->set_int(atom, key, converted);
		if (result) return result;
		if (lldpctl_last_error(atom->conn) != LLDPCTL_ERR_NOT_EXIST &&
		    lldpctl_last_error(atom->conn) != LLDPCTL_ERR_BAD_VALUE)
			return NULL;
		bad = bad || (lldpctl_last_error(atom->conn) == LLDPCTL_ERR_BAD_VALUE);
	}

	RESET_ERROR(atom->conn);
	if (atom->set_buffer != NULL) {
		result = atom->set_buffer(atom, key, (u_int8_t*)value, value?strlen(value):0);
		if (result) return result;
		if (lldpctl_last_error(atom->conn) != LLDPCTL_ERR_NOT_EXIST &&
		    lldpctl_last_error(atom->conn) != LLDPCTL_ERR_BAD_VALUE)
			return NULL;
		bad = bad || (lldpctl_last_error(atom->conn) == LLDPCTL_ERR_BAD_VALUE);
	}

	SET_ERROR(atom->conn, bad?LLDPCTL_ERR_BAD_VALUE:LLDPCTL_ERR_NOT_EXIST);
	return NULL;
}