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

fix HEAP memory

parent dca8616d
No related branches found
No related tags found
No related merge requests found
...@@ -36,8 +36,11 @@ ...@@ -36,8 +36,11 @@
int tree_state(int argc, char const *const *argv) int tree_state(int argc, char const *const *argv)
{ {
int r, fd ; int r, fd, err ;
unsigned int add, del, sch, verbosity ; unsigned int add, del, sch, verbosity ;
size_t statesize ;
size_t treelen ;
size_t statelen ;
char const *tree = NULL ; char const *tree = NULL ;
...@@ -45,7 +48,7 @@ int tree_state(int argc, char const *const *argv) ...@@ -45,7 +48,7 @@ int tree_state(int argc, char const *const *argv)
stralloc contents = STRALLOC_ZERO ; stralloc contents = STRALLOC_ZERO ;
genalloc in = GENALLOC_ZERO ; //type stralist genalloc in = GENALLOC_ZERO ; //type stralist
verbosity = 1 ; verbosity = err = 1 ;
uid_t owner = MYUID ; uid_t owner = MYUID ;
...@@ -73,17 +76,17 @@ int tree_state(int argc, char const *const *argv) ...@@ -73,17 +76,17 @@ int tree_state(int argc, char const *const *argv)
if (argc < 1) return -1 ; if (argc < 1) return -1 ;
tree = *argv ; tree = *argv ;
size_t treelen = strlen(tree) ; treelen = strlen(tree) ;
if (!set_ownersysdir(&base,owner)) if (!set_ownersysdir(&base,owner))
{ {
VERBO3 strerr_warnwu1sys("set owner directory") ; VERBO3 strerr_warnwu1sys("set owner directory") ;
return -1 ; return -1 ;
} }
size_t statesize ;
/** /system/state */ /** /system/state */
//base.len-- ; //base.len-- ;
size_t statelen ;
char state[base.len + SS_SYSTEM_LEN + SS_STATE_LEN + 1] ; char state[base.len + SS_SYSTEM_LEN + SS_STATE_LEN + 1] ;
memcpy(state,base.s,base.len) ; memcpy(state,base.s,base.len) ;
memcpy(state + base.len,SS_SYSTEM,SS_SYSTEM_LEN) ; memcpy(state + base.len,SS_SYSTEM,SS_SYSTEM_LEN) ;
...@@ -92,11 +95,11 @@ int tree_state(int argc, char const *const *argv) ...@@ -92,11 +95,11 @@ int tree_state(int argc, char const *const *argv)
state[statelen] = 0 ; state[statelen] = 0 ;
r = scan_mode(state,S_IFREG) ; r = scan_mode(state,S_IFREG) ;
if (r < 0) { errno = EEXIST ; return -1 ; } if (r < 0) { errno = EEXIST ; err = -1 ; goto out ; }
if (!r) if (!r)
{ {
VERBO3 strerr_warnwu2sys("find: ",state) ; VERBO3 strerr_warnwu2sys("find: ",state) ;
return -1 ; { err = -1 ; goto out ; }
} }
statesize = file_get_size(state) ; statesize = file_get_size(state) ;
...@@ -105,7 +108,7 @@ int tree_state(int argc, char const *const *argv) ...@@ -105,7 +108,7 @@ int tree_state(int argc, char const *const *argv)
if(!r) if(!r)
{ {
VERBO3 strerr_warnwu2sys("open: ", state) ; VERBO3 strerr_warnwu2sys("open: ", state) ;
return -1 ; { err = -1 ; goto out ; }
} }
/** ensure that we have an empty line at the end of the string*/ /** ensure that we have an empty line at the end of the string*/
if (!stralloc_cats(&contents,"\n")) retstralloc(-1,"tree_registrer") ; if (!stralloc_cats(&contents,"\n")) retstralloc(-1,"tree_registrer") ;
...@@ -114,7 +117,7 @@ int tree_state(int argc, char const *const *argv) ...@@ -114,7 +117,7 @@ int tree_state(int argc, char const *const *argv)
if (!clean_val(&in,contents.s)) if (!clean_val(&in,contents.s))
{ {
VERBO3 strerr_warnwu2x("clean: ",contents.s) ; VERBO3 strerr_warnwu2x("clean: ",contents.s) ;
return -1 ; { err = -1 ; goto out ; }
} }
...@@ -126,7 +129,7 @@ int tree_state(int argc, char const *const *argv) ...@@ -126,7 +129,7 @@ int tree_state(int argc, char const *const *argv)
if (fd < 0) if (fd < 0)
{ {
VERBO3 strerr_warnwu2sys("open: ",state) ; VERBO3 strerr_warnwu2sys("open: ",state) ;
return -1 ; { err = -1 ; goto out ; }
} }
r = write(fd, tree,treelen); r = write(fd, tree,treelen);
r = write(fd, "\n",1); r = write(fd, "\n",1);
...@@ -134,7 +137,7 @@ int tree_state(int argc, char const *const *argv) ...@@ -134,7 +137,7 @@ int tree_state(int argc, char const *const *argv)
{ {
VERBO3 strerr_warnwu5sys("write: ",state," with ", tree," as content") ; VERBO3 strerr_warnwu5sys("write: ",state," with ", tree," as content") ;
fd_close(fd) ; fd_close(fd) ;
return -1 ; { err = -1 ; goto out ; }
} }
fd_close(fd) ; fd_close(fd) ;
} }
...@@ -148,20 +151,20 @@ int tree_state(int argc, char const *const *argv) ...@@ -148,20 +151,20 @@ int tree_state(int argc, char const *const *argv)
if (!stra_remove(&in,tree)) if (!stra_remove(&in,tree))
{ {
VERBO3 strerr_warnwu4x("to remove: ",tree," in: ",state) ; VERBO3 strerr_warnwu4x("to remove: ",tree," in: ",state) ;
return -1 ; { err = -1 ; goto out ; }
} }
fd = open_trunc(state) ; fd = open_trunc(state) ;
if (fd < 0) if (fd < 0)
{ {
VERBO3 strerr_warnwu2sys("open_trunc ", state) ; VERBO3 strerr_warnwu2sys("open_trunc ", state) ;
return -1 ; { err = -1 ; goto out ; }
} }/*
fd = open_append(state) ; fd = open_append(state) ;
if (fd < 0) if (fd < 0)
{ {
VERBO3 strerr_warnwu2sys("open: ",state) ; VERBO3 strerr_warnwu2sys("open: ",state) ;
return -1 ; { err = -1 ; goto out ; }
} }*/
/*** replace it by write_file_unsafe*/ /*** replace it by write_file_unsafe*/
for (unsigned int i = 0 ; i < genalloc_len(stralist,&in) ; i++) for (unsigned int i = 0 ; i < genalloc_len(stralist,&in) ; i++)
...@@ -171,14 +174,14 @@ int tree_state(int argc, char const *const *argv) ...@@ -171,14 +174,14 @@ int tree_state(int argc, char const *const *argv)
{ {
VERBO3 strerr_warnwu5sys("write: ",state," with ", gaistr(&in,i)," as content") ; VERBO3 strerr_warnwu5sys("write: ",state," with ", gaistr(&in,i)," as content") ;
fd_close(fd) ; fd_close(fd) ;
return -1 ; { err = -1 ; goto out ; }
} }
r = write(fd, "\n",1); r = write(fd, "\n",1);
if (r < 0) if (r < 0)
{ {
VERBO3 strerr_warnwu5sys("write: ",state," with ", gaistr(&in,i)," as content") ; VERBO3 strerr_warnwu5sys("write: ",state," with ", gaistr(&in,i)," as content") ;
fd_close(fd) ; fd_close(fd) ;
return -1 ; { err = -1 ; goto out ; }
} }
} }
fd_close(fd) ; fd_close(fd) ;
...@@ -188,16 +191,23 @@ int tree_state(int argc, char const *const *argv) ...@@ -188,16 +191,23 @@ int tree_state(int argc, char const *const *argv)
{ {
if (stra_cmp(&in,tree)) if (stra_cmp(&in,tree))
{ {
return 1 ; err = 1 ;
goto out ;
}
else
{
err = 0 ;
goto out ;
} }
else return 0 ;
} }
out:
stralloc_free(&base) ; stralloc_free(&base) ;
stralloc_free(&contents) ; stralloc_free(&contents) ;
genalloc_deepfree(stralist,&in,stra_free) ; genalloc_deepfree(stralist,&in,stra_free) ;
return 1 ; return err ;
} }
int tree_cmd_state(unsigned int verbosity,char const *cmd, char const *tree) int tree_cmd_state(unsigned int verbosity,char const *cmd, char const *tree)
......
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