int _citrus_db_lookup8_by_string(struct _citrus_db *db, const char *key, uint8_t *rval, struct _citrus_db_locator *dl) { struct _region r; int ret; ret = _citrus_db_lookup_by_string(db, key, &r, dl); if (ret) return (ret); if (_region_size(&r) != 1) return (EFTYPE); if (rval) memcpy(rval, _region_head(&r), 1); return (0); }
int _citrus_db_lookup_string_by_string(struct _citrus_db *db, const char *key, const char **rdata, struct _citrus_db_locator *dl) { struct _region r; int ret; ret = _citrus_db_lookup_by_string(db, key, &r, dl); if (ret) return (ret); /* check whether the string is null terminated */ if (_region_size(&r) == 0) return (EFTYPE); if (*((const char*)_region_head(&r)+_region_size(&r)-1) != '\0') return (EFTYPE); if (rdata) *rdata = _region_head(&r); return (0); }
int _citrus_db_lookup32_by_string(struct _citrus_db *db, const char *key, uint32_t *rval, struct _citrus_db_locator *dl) { struct _region r; uint32_t val; int ret; ret = _citrus_db_lookup_by_string(db, key, &r, dl); if (ret) return (ret); if (_region_size(&r) != 4) return (EFTYPE); if (rval) { memcpy(&val, _region_head(&r), 4); *rval = be32toh(val); } return (0); }
int _citrus_db_lookup16_by_string(struct _citrus_db *db, const char *key, uint16_t *rval, struct _citrus_db_locator *dl) { int ret; struct _region r; uint16_t val; ret = _citrus_db_lookup_by_string(db, key, &r, dl); if (ret) return ret; if (_region_size(&r) != 2) return EFTYPE; if (rval) { memcpy(&val, _region_head(&r), 2); *rval = be16toh(val); } return 0; }