/** * Deserialization routine for keydata. */ static void deserialize_keydata(bstr_t *bs, void *valptr, size_t len) { struct keydata *kd = valptr; int i; uint8 version; g_assert(sizeof *kd == len); /* * Early returns will cause DBMW to complain that the value could not * be deserialized properly. We do not log anything here. */ if (!bstr_read_u8(bs, &version)) return; if (!bstr_read_u8(bs, &kd->values)) return; if (kd->values > G_N_ELEMENTS(kd->creators)) return; STATIC_ASSERT(G_N_ELEMENTS(kd->creators) == G_N_ELEMENTS(kd->dbkeys)); STATIC_ASSERT(G_N_ELEMENTS(kd->creators) == G_N_ELEMENTS(kd->expire)); for (i = 0; i < kd->values; i++) { bstr_read(bs, &kd->creators[i], sizeof(kd->creators[i])); bstr_read(bs, &kd->dbkeys[i], sizeof(kd->dbkeys[i])); bstr_read_time(bs, &kd->expire[i]); } }
/** * Deserialization routine for tokdata. */ static void deserialize_tokdata(bstr_t *bs, void *valptr, size_t len) { struct tokdata *td = valptr; g_assert(sizeof *td == len); bstr_read_time(bs, &td->last_update); bstr_read_u8(bs, &td->length); if (td->length != 0) { td->token = walloc(td->length); bstr_read(bs, td->token, td->length); } else { td->token = NULL; } }