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; }
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; }