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

remove HEAP memory usage

parent 7fa95f07
No related branches found
No related tags found
No related merge requests found
...@@ -13,9 +13,7 @@ ...@@ -13,9 +13,7 @@
*/ */
#include <oblibs/log.h> #include <oblibs/log.h>
#include <oblibs/sastr.h> #include <oblibs/stack.h>
#include <skalibs/stralloc.h>
#include <66/resolve.h> #include <66/resolve.h>
#include <66/tree.h> #include <66/tree.h>
...@@ -24,43 +22,53 @@ void tree_service_add(char const *base, char const *treename, char const *servic ...@@ -24,43 +22,53 @@ void tree_service_add(char const *base, char const *treename, char const *servic
{ {
log_flow() ; log_flow() ;
int r ;
size_t len = strlen(service) ;
resolve_tree_t tres = RESOLVE_TREE_ZERO ; resolve_tree_t tres = RESOLVE_TREE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ;
stralloc sa = STRALLOC_ZERO ; stack_ref pstk = 0 ;
_init_stack_(stk, SS_MAX_SERVICE * SS_MAX_SERVICE_NAME + 1 + len + 1) ;
if (resolve_read_g(wres, base, treename) <= 0) if (resolve_read_g(wres, base, treename) <= 0)
log_dieusys(LOG_EXIT_SYS, "read resolve file of tree: ", treename) ; log_dieusys(LOG_EXIT_SYS, "read resolve file of tree: ", treename) ;
if (tres.ncontents) { if (tres.ncontents) {
if (!sastr_clean_string(&sa, tres.sa.s + tres.contents)) if (!stack_convert_string(&stk, tres.sa.s + tres.contents, strlen(tres.sa.s + tres.contents)))
log_dieu(LOG_EXIT_SYS, "clean string") ; log_dieusys(LOG_EXIT_SYS, "convert string to stack") ;
if (stack_retrieve_element(&stk, service) < 0) {
if (!sastr_add_string(&sa, service)) if (!stack_add_g(&stk, service))
log_dieu(LOG_EXIT_SYS, "clean string") ; log_dieusys(LOG_EXIT_SYS, "add service: ", service, " to tree: ", treename) ;
if (!sastr_sortndrop_element(&sa)) tres.ncontents++ ;
log_dieu(LOG_EXIT_SYS, "sort string") ; }
tres.ncontents = sastr_nelement(&sa) ; if (!stack_close(&stk))
log_dieusys(LOG_EXIT_SYS, "close stack") ;
} else { } else {
if (!sastr_add_string(&sa, service)) if (!stack_add_g(&stk, service))
log_dieu(LOG_EXIT_SYS, "add string") ; log_dieu(LOG_EXIT_SYS, "add string to stack") ;
tres.ncontents++ ; tres.ncontents++ ;
if (!stack_close(&stk))
log_dieusys(LOG_EXIT_SYS, "close stack") ;
} }
if (!sastr_rebuild_in_oneline(&sa)) if (!stack_convert_tostring(&stk))
log_dieu(LOG_EXIT_SYS, "rebuild stralloc list") ; log_dieu(LOG_EXIT_SYS, "convert stack to string") ;
if (!resolve_modify_field(wres, E_RESOLVE_TREE_CONTENTS, sa.s)) if (!resolve_modify_field(wres, E_RESOLVE_TREE_CONTENTS, stk.s))
log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ; log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ;
if (!resolve_write_g(wres, base, treename)) if (!resolve_write_g(wres, base, treename))
log_dieusys(LOG_EXIT_SYS, "write resolve file of tree: ", treename) ; log_dieusys(LOG_EXIT_SYS, "write resolve file of tree: ", treename) ;
stralloc_free(&sa) ;
resolve_free(wres) ; resolve_free(wres) ;
} }
...@@ -13,9 +13,7 @@ ...@@ -13,9 +13,7 @@
*/ */
#include <oblibs/log.h> #include <oblibs/log.h>
#include <oblibs/sastr.h> #include <oblibs/stack.h>
#include <skalibs/stralloc.h>
#include <66/resolve.h> #include <66/resolve.h>
#include <66/tree.h> #include <66/tree.h>
...@@ -26,7 +24,6 @@ void tree_service_remove(char const *base, char const *treename, char const *ser ...@@ -26,7 +24,6 @@ void tree_service_remove(char const *base, char const *treename, char const *ser
resolve_tree_t tres = RESOLVE_TREE_ZERO ; resolve_tree_t tres = RESOLVE_TREE_ZERO ;
resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ; resolve_wrapper_t_ref wres = resolve_set_struct(DATA_TREE, &tres) ;
stralloc sa = STRALLOC_ZERO ;
char *str = 0 ; char *str = 0 ;
log_trace("modify field contents of resolve tree file: ", treename) ; log_trace("modify field contents of resolve tree file: ", treename) ;
...@@ -36,29 +33,32 @@ void tree_service_remove(char const *base, char const *treename, char const *ser ...@@ -36,29 +33,32 @@ void tree_service_remove(char const *base, char const *treename, char const *ser
if (tres.ncontents) { if (tres.ncontents) {
if (!sastr_clean_string(&sa, tres.sa.s + tres.contents)) size_t clen = strlen(tres.sa.s + tres.contents) ;
log_dieu(LOG_EXIT_SYS, "clean string") ; _init_stack_(stk, clen + 1) ;
if (!stack_convert_string(&stk, tres.sa.s + tres.contents, clen))
log_dieusys(LOG_EXIT_SYS, "convert string to stack") ;
if (!sastr_remove_element(&sa, service)) if (!stack_remove_element_g(&stk, service))
log_dieu(LOG_EXIT_SYS, "remove service: ", service, " from selection") ; log_dieu(LOG_EXIT_SYS, "remove service: ", service, " from selection") ;
if (sa.len) { if (stk.len) {
if (!sastr_rebuild_in_oneline(&sa))
log_dieu(LOG_EXIT_SYS, "rebuild stralloc list") ; if (!stack_convert_tostring(&stk))
str = sa.s ; log_dieu(LOG_EXIT_SYS, "convert stack to string") ;
str = stk.s ;
} else str = "" ; } else str = "" ;
if (!resolve_modify_field(wres, E_RESOLVE_TREE_CONTENTS, str)) if (!resolve_modify_field(wres, E_RESOLVE_TREE_CONTENTS, str))
log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ; log_dieusys(LOG_EXIT_SYS, "modify resolve file of: ", treename) ;
}
if (tres.ncontents)
tres.ncontents-- ; tres.ncontents-- ;
if (!resolve_write_g(wres, base, treename)) if (!resolve_write_g(wres, base, treename))
log_dieusys(LOG_EXIT_SYS, "write resolve file of tree: ", treename) ; log_dieusys(LOG_EXIT_SYS, "write resolve file of tree: ", treename) ;
}
stralloc_free(&sa) ;
resolve_free(wres) ; resolve_free(wres) ;
} }
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