Skip to content
Snippets Groups Projects
Commit df589808 authored by Eric Vidal's avatar Eric Vidal :speech_balloon:
Browse files

implement resolve API for a tree

parent a4589e29
No related branches found
No related tags found
No related merge requests found
......@@ -18,12 +18,38 @@
#include <sys/types.h>
#include <skalibs/stralloc.h>
#include <skalibs/cdb.h>
#include <skalibs/cdbmake.h>
#include <66/ssexec.h>
#define TREE_STRUCT 1
typedef struct resolve_tree_s resolve_tree_t, *resolve_tree_t_ref ;
struct resolve_tree_s
{
uint32_t salen ;
stralloc sa ;
uint32_t name ;
uint32_t depends ;
uint32_t requiredby ;
uint32_t allow ;
uint32_t contents ;
uint32_t ndepends ;
uint32_t nrequiredby ;
uint32_t ncontents ;
uint32_t current ;//no->0, yes->1
uint32_t init ;//not initialized->0, initialized->1
uint32_t disen ;//disable->0, enable->1
} ;
#define RESOLVE_TREE_ZERO { 0,STRALLOC_ZERO,0,0,0,0,0,0,0,0,0,0,0 }
extern stralloc saseed ;
typedef struct ss_tree_seed_s ss_tree_seed_t, ss_tree_seed_t_ref ;
struct ss_tree_seed_s
typedef struct tree_seed_s tree_seed_t, tree_seed_t_ref ;
struct tree_seed_s
{
int name ;
int depends ;
......@@ -37,7 +63,6 @@ struct ss_tree_seed_s
uint8_t nopts ;
} ;
#define TREE_SEED_ZERO { -1, -1, -1, 0, -1, -1, 0, -1, -1, 0 }
extern int tree_cmd_state(unsigned int verbosity,char const *cmd,char const *tree) ;
......@@ -65,8 +90,24 @@ extern int tree_switch_current(char const *base, char const *tree) ;
extern int tree_isvalid(ssexec_t *info) ;
// seed
/**
*
* Resolve API
*
* */
extern int tree_read_cdb(cdb *c, resolve_tree_t *tres) ;
extern int tree_write_cdb(cdbmaker *c, resolve_tree_t *tres) ;
extern int tree_resolve_copy(resolve_tree_t *dst, resolve_tree_t *tres) ;
/**
*
* Seed API
*
* */
extern void tree_seed_free(void) ;
extern int tree_seed_setseed(ss_tree_seed_t *seed, char const *treename, uint8_t check_service) ;
extern int tree_seed_setseed(tree_seed_t *seed, char const *treename, uint8_t check_service) ;
extern int tree_seed_isvalid(char const *seed) ;
#endif
/*
* tree_resolve.c
*
* Copyright (c) 2018-2021 Eric Vidal <eric@obarun.org>
*
* All rights reserved.
*
* This file is part of Obarun. It is subject to the license terms in
* the LICENSE file found in the top-level directory of this
* distribution.
* This file may not be copied, modified, propagated, or distributed
* except according to the terms contained in the LICENSE file./
*/
#include <stdint.h>
#include <stddef.h>
#include <stdlib.h>//free
#include <oblibs/log.h>
#include <skalibs/stralloc.h>
#include <skalibs/cdbmake.h>
#include <skalibs/cdb.h>
#include <66/tree.h>
#include <66/resolve.h>
int tree_read_cdb(cdb *c, resolve_tree_t *tres)
{
log_flow() ;
stralloc tmp = STRALLOC_ZERO ;
resolve_wrapper_t_ref wres ;
uint32_t x ;
wres = resolve_set_struct(SERVICE_STRUCT, tres) ;
resolve_init(wres) ;
/* name */
resolve_find_cdb(&tmp,c,"name") ;
tres->name = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
/* depends */
resolve_find_cdb(&tmp,c,"depends") ;
tres->depends = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
/* requiredby */
resolve_find_cdb(&tmp,c,"requiredby") ;
tres->requiredby = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
/* allow */
resolve_find_cdb(&tmp,c,"allow") ;
tres->allow = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
/* contents */
resolve_find_cdb(&tmp,c,"contents") ;
tres->contents = tmp.len ? resolve_add_string(wres,tmp.s) : 0 ;
/* ndepends */
x = resolve_find_cdb(&tmp,c,"ndepends") ;
tres->ndepends = x ;
/* nrequiredby */
x = resolve_find_cdb(&tmp,c,"nrequiredby") ;
tres->nrequiredby = x ;
/* ncontents */
x = resolve_find_cdb(&tmp,c,"ncontents") ;
tres->ncontents = x ;
/* current */
x = resolve_find_cdb(&tmp,c,"current") ;
tres->current = x ;
/* init */
x = resolve_find_cdb(&tmp,c,"init") ;
tres->init = x ;
/* disen */
x = resolve_find_cdb(&tmp,c,"disen") ;
tres->disen = x ;
free(wres) ;
stralloc_free(&tmp) ;
return 1 ;
}
int tree_write_cdb(cdbmaker *c, resolve_tree_t *tres)
{
log_flow() ;
char *str = tres->sa.s ;
/* name */
if (!resolve_add_cdb(c,"name",str + tres->name) ||
/* depends */
!resolve_add_cdb(c,"depends",str + tres->depends) ||
/* requiredby */
!resolve_add_cdb(c,"requiredby",str + tres->requiredby) ||
/* allow */
!resolve_add_cdb(c,"allow",str + tres->allow) ||
/* contents */
!resolve_add_cdb(c,"contents",str + tres->contents) ||
/* ndepends */
!resolve_add_cdb_uint(c,"ndepends",tres->ndepends) ||
/* nrequiredby */
!resolve_add_cdb_uint(c,"nrequiredby",tres->nrequiredby) ||
/* ncontents */
!resolve_add_cdb_uint(c,"ncontents",tres->ncontents) ||
/* current */
!resolve_add_cdb_uint(c,"current",tres->current) ||
/* init */
!resolve_add_cdb_uint(c,"init",tres->init) ||
/* disen */
!resolve_add_cdb_uint(c,"disen",tres->disen)) return 0 ;
return 1 ;
}
int tree_resolve_copy(resolve_tree_t *dst, resolve_tree_t *tres)
{
log_flow() ;
stralloc_free(&dst->sa) ;
size_t len = tres->sa.len - 1 ;
dst->salen = tres->salen ;
if (!stralloc_catb(&dst->sa,tres->sa.s,len) ||
!stralloc_0(&dst->sa))
return 0 ;
dst->name = tres->name ;
dst->depends = tres->depends ;
dst->requiredby = tres->requiredby ;
dst->allow = tres->allow ;
dst->contents = tres->contents ;
dst->ndepends = tres->ndepends ;
dst->nrequiredby = tres->nrequiredby ;
dst->ncontents = tres->ncontents ;
dst->current = tres->current ;
dst->init = tres->init ;
dst->disen = tres->disen ;
return 1 ;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment