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

use tree master resolve file as checker

parent 73fdae45
No related branches found
No related tags found
No related merge requests found
......@@ -15,26 +15,61 @@
#include <string.h>
#include <oblibs/log.h>
#include <oblibs/string.h>
#include <oblibs/types.h>
#include <oblibs/sastr.h>
#include <66/constants.h>
#include <skalibs/stralloc.h>
#include <66/tree.h>
#include <66/resolve.h>
#include <66/constants.h>
int tree_isvalid(char const *base, char const *treename)
{
log_flow() ;
int r ;
size_t baselen = strlen(base), treelen = strlen(treename) ;
char t[baselen + SS_SYSTEM_LEN + SS_RESOLVE_LEN + 1 + treelen + 1] ;
auto_strings(t, base, SS_SYSTEM, SS_RESOLVE, "/", treename) ;
int e = -1 ;
size_t pos = 0 ;
stralloc sa = STRALLOC_ZERO ;
resolve_tree_master_t mres = RESOLVE_TREE_MASTER_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE_MASTER, &mres) ;
/** make distinction between system error
* and unexisting tree */
{
resolve_tree_t tres = RESOLVE_TREE_ZERO ;
resolve_wrapper_t_ref twres = resolve_set_struct(DATA_TREE, &tres) ;
if (!resolve_check_g(twres, base, treename)) {
e = 0 ;
goto freed ;
}
resolve_free(twres) ;
}
if (!resolve_read_g(wres, base, SS_MASTER + 1))
goto freed ;
if (!tree_resolve_master_get_field_tosa(&sa, &mres, E_RESOLVE_TREE_MASTER_CONTENTS))
goto freed ;
if (mres.ncontents) {
if (!sastr_clean_string_flush_sa(&sa, sa.s))
goto freed ;
FOREACH_SASTR(&sa, pos) {
if (!strcmp(treename, sa.s + pos)) {
e = 1 ;
goto freed ;
}
}
} else e = 0 ;
r = scan_mode(t, S_IFREG) ;
if (r < 0)
return -1 ;
else if (!r)
return 0 ;
freed:
stralloc_free(&sa) ;
resolve_free(wres) ;
return e ;
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