From 71bcc91b70c9451fee203afef2b1889cd9c151d6 Mon Sep 17 00:00:00 2001 From: obarun <eric@obarun.org> Date: Sat, 26 Mar 2022 22:27:57 +1100 Subject: [PATCH] add resolve_read_g() function --- src/include/66/resolve.h | 4 ++- src/lib66/resolve/resolve_read_g.c | 40 ++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) create mode 100644 src/lib66/resolve/resolve_read_g.c diff --git a/src/include/66/resolve.h b/src/include/66/resolve.h index d34dbb82..cfab72ea 100644 --- a/src/include/66/resolve.h +++ b/src/include/66/resolve.h @@ -64,9 +64,11 @@ struct resolve_field_table_s extern resolve_wrapper_t *resolve_set_struct(uint8_t type, void *s) ; extern int resolve_init(resolve_wrapper_t *wres) ; +extern int resolve_check(char const *src, char const *name) ; extern int resolve_read(resolve_wrapper_t *wres, char const *src, char const *name) ; +/* convenient API: do a resolve_check then a resolve_read */ +extern int resolve_read_g(resolve_wrapper_t *wres, char const *src, char const *name) ; extern int resolve_write(resolve_wrapper_t *wres, char const *dst, char const *name) ; -extern int resolve_check(char const *src, char const *name) ; extern int resolve_append(genalloc *ga, resolve_wrapper_t *wres) ; extern int resolve_search(genalloc *ga, char const *name, uint8_t type) ; extern int resolve_cmp(genalloc *ga, char const *name, uint8_t type) ; diff --git a/src/lib66/resolve/resolve_read_g.c b/src/lib66/resolve/resolve_read_g.c new file mode 100644 index 00000000..7999d4a3 --- /dev/null +++ b/src/lib66/resolve/resolve_read_g.c @@ -0,0 +1,40 @@ +/* + * resolve_read_g.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 <string.h> + +#include <oblibs/log.h> +#include <oblibs/string.h> + +#include <66/resolve.h> + +int resolve_read_g(resolve_wrapper_t *wres, char const *src, char const *name) +{ + log_flow() ; + + size_t srclen = strlen(src) ; + size_t namelen = strlen(name) ; + + char tmp[srclen + SS_RESOLVE_LEN + 1 + namelen + 1] ; + auto_strings(tmp,src,SS_RESOLVE,"/",name) ; + + r = scan_mode(tmp,S_IFREG) ; + if (r <= 0) + log_warnusys_return(LOG_EXIT_ZERO,"found resolve file: ", tmp) ; + + if (!resolve_read_cdb(wres,tmp)) + return 0 ; + + return 1 ; +} -- GitLab