Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
6
66
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Eric Vidal
66
Commits
df589808
Commit
df589808
authored
3 years ago
by
Eric Vidal
Browse files
Options
Downloads
Patches
Plain Diff
implement resolve API for a tree
parent
a4589e29
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
src/include/66/tree.h
+46
-5
46 additions, 5 deletions
src/include/66/tree.h
src/lib66/tree_resolve.c
+159
-0
159 additions, 0 deletions
src/lib66/tree_resolve.c
with
205 additions
and
5 deletions
src/include/66/tree.h
+
46
−
5
View file @
df589808
...
...
@@ -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
This diff is collapsed.
Click to expand it.
src/lib66/tree_resolve.c
0 → 100644
+
159
−
0
View file @
df589808
/*
* 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
;
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment