static void sr_scheme_saveload(void) { srscheme cmp; sr_schemeinit(&cmp); srkey *part = sr_schemeadd(&cmp, &st_r.a); t( sr_keysetname(part, &st_r.a, "key") == 0 ); t( sr_keyset(part, &st_r.a, "u32") == 0 ); ssbuf buf; ss_bufinit(&buf); t( sr_schemesave(&cmp, &st_r.a, &buf) == 0 ); sr_schemefree(&cmp, &st_r.a); sr_schemeinit(&cmp); t( sr_schemeload(&cmp, &st_r.a, buf.s, ss_bufused(&buf)) == 0 ); t( cmp.count == 1 ); t( strcmp(cmp.parts[0].name, "key") == 0 ); t( cmp.parts[0].type == SS_U32 ); sr_schemefree(&cmp, &st_r.a); ss_buffree(&buf, &st_r.a); }
int si_schemedeploy(sischeme *s, sr *r) { sdscheme c; sd_schemeinit(&c); int rc; rc = sd_schemebegin(&c, r); if (ssunlikely(rc == -1)) return -1; ssbuf buf; ss_bufinit(&buf); rc = sd_schemeadd(&c, r, SI_SCHEME_NAME, SS_STRING, s->name, strlen(s->name) + 1); if (ssunlikely(rc == -1)) goto error; rc = sr_schemesave(&s->scheme, r->a, &buf); if (ssunlikely(rc == -1)) goto error; rc = sd_schemeadd(&c, r, SI_SCHEME_SCHEME, SS_STRING, buf.s, ss_bufused(&buf)); if (ssunlikely(rc == -1)) goto error; ss_buffree(&buf, r->a); uint32_t v = s->fmt; rc = sd_schemeadd(&c, r, SI_SCHEME_FORMAT, SS_U32, &v, sizeof(v)); if (ssunlikely(rc == -1)) goto error; v = s->fmt_storage; rc = sd_schemeadd(&c, r, SI_SCHEME_FORMAT_STORAGE, SS_U32, &v, sizeof(v)); if (ssunlikely(rc == -1)) goto error; rc = sd_schemeadd(&c, r, SI_SCHEME_NODE_SIZE, SS_U64, &s->node_size, sizeof(s->node_size)); if (ssunlikely(rc == -1)) goto error; rc = sd_schemeadd(&c, r, SI_SCHEME_NODE_PAGE_SIZE, SS_U32, &s->node_page_size, sizeof(s->node_page_size)); if (ssunlikely(rc == -1)) goto error; rc = sd_schemeadd(&c, r, SI_SCHEME_NODE_PAGE_CHECKSUM, SS_U32, &s->node_page_checksum, sizeof(s->node_page_checksum)); if (ssunlikely(rc == -1)) goto error; rc = sd_schemeadd(&c, r, SI_SCHEME_SYNC, SS_U32, &s->sync, sizeof(s->sync)); if (ssunlikely(rc == -1)) goto error; rc = sd_schemeadd(&c, r, SI_SCHEME_COMPRESSION, SS_STRING, s->compression_if->name, strlen(s->compression_if->name) + 1); if (ssunlikely(rc == -1)) goto error; rc = sd_schemeadd(&c, r, SI_SCHEME_COMPRESSION_BRANCH, SS_STRING, s->compression_branch_if->name, strlen(s->compression_branch_if->name) + 1); if (ssunlikely(rc == -1)) goto error; rc = sd_schemeadd(&c, r, SI_SCHEME_COMPRESSION_KEY, SS_U32, &s->compression_key, sizeof(s->compression_key)); if (ssunlikely(rc == -1)) goto error; rc = sd_schemeadd(&c, r, SI_SCHEME_AMQF, SS_U32, &s->amqf, sizeof(s->amqf)); if (ssunlikely(rc == -1)) goto error; rc = sd_schemeadd(&c, r, SI_SCHEME_CACHE_MODE, SS_U32, &s->cache_mode, sizeof(s->cache_mode)); if (ssunlikely(rc == -1)) goto error; rc = sd_schemeadd(&c, r, SI_SCHEME_EXPIRE, SS_U32, &s->expire, sizeof(s->expire)); if (ssunlikely(rc == -1)) goto error; rc = sd_schemecommit(&c, r); if (ssunlikely(rc == -1)) return -1; char path[PATH_MAX]; snprintf(path, sizeof(path), "%s/scheme", s->path); rc = sd_schemewrite(&c, r, path, 0); sd_schemefree(&c, r); return rc; error: ss_buffree(&buf, r->a); sd_schemefree(&c, r); return -1; }