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

pass through auto_strings function

parent d4c18616
No related branches found
No related tags found
No related merge requests found
......@@ -80,28 +80,20 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info)
//base.len-- ;
size_t psymlen ;
char *psym = NULL ;
if (type == TYPE_CLASSIC)
{
if (type == TYPE_CLASSIC) {
psym = SS_SYM_SVC ;
psymlen = SS_SYM_SVC_LEN ;
}
else
{
} else {
psym = SS_SYM_DB ;
psymlen = SS_SYM_DB_LEN ;
}
char sym[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + 1 + psymlen + 1] ;
memcpy(sym,info->base.s,info->base.len) ;
memcpy(sym + info->base.len, SS_SYSTEM,SS_SYSTEM_LEN) ;
sym[info->base.len + SS_SYSTEM_LEN] = '/' ;
memcpy(sym + info->base.len + SS_SYSTEM_LEN + 1, tree, treelen) ;
memcpy(sym + info->base.len + SS_SYSTEM_LEN + 1 + treelen, SS_SVDIRS, SS_SVDIRS_LEN) ;
sym[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN] = '/' ;
memcpy(sym + info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + 1 ,psym,psymlen) ;
sym[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + 1 + psymlen] = 0 ;
if (back)
{
auto_strings(sym, info->base.s, SS_SYSTEM, "/", tree, SS_SVDIRS, "/", psym) ;
if (back) {
if(lstat(sym,&st) < 0) return -1 ;
if(!(S_ISLNK(st.st_mode)))
log_warnusys_return(LOG_EXIT_LESSONE,"find symlink: ",sym) ;
......@@ -122,23 +114,22 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info)
return SS_SWBACK ;
}
if (change)
{
if (change) {
size_t psrclen ;
size_t pbacklen ;
char *psrc = NULL ;
char *pback = NULL ;
if (type == TYPE_CLASSIC)
{
if (type == TYPE_CLASSIC) {
psrc = SS_SVC ;
psrclen = SS_SVC_LEN ;
pback = SS_SVC ;
pbacklen = SS_SVC_LEN ;
}
else
{
} else {
psrc = SS_DB ;
psrclen = SS_DB_LEN ;
......@@ -149,29 +140,18 @@ int backup_switcher(int argc, char const *const *argv,ssexec_t *info)
char dstsrc[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + psrclen + 1] ;
char dstback[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + treelen + pbacklen + 1] ;
memcpy(dstsrc, info->base.s, info->base.len) ;
memcpy(dstsrc + info->base.len, SS_SYSTEM, SS_SYSTEM_LEN) ;
dstsrc[info->base.len + SS_SYSTEM_LEN] = '/' ;
memcpy(dstsrc + info->base.len + SS_SYSTEM_LEN + 1, tree, treelen) ;
memcpy(dstsrc + info->base.len + SS_SYSTEM_LEN + 1 + treelen, SS_SVDIRS,SS_SVDIRS_LEN) ;
memcpy(dstsrc + info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN,psrc,psrclen) ;
dstsrc[info->base.len + SS_SYSTEM_LEN + 1 + treelen + SS_SVDIRS_LEN + psrclen] = 0 ;
memcpy(dstback, info->base.s, info->base.len) ;
memcpy(dstback + info->base.len, SS_SYSTEM, SS_SYSTEM_LEN) ;
memcpy(dstback + info->base.len + SS_SYSTEM_LEN, SS_BACKUP, strlen(SS_BACKUP)) ;
dstback[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN] = '/' ;
memcpy(dstback + info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1, tree, treelen) ;
memcpy(dstback + info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + treelen, pback,pbacklen) ;
dstback[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + treelen + pbacklen] = 0 ;
if (what)
{
auto_strings(dstsrc, info->base.s, SS_SYSTEM, "/", tree, SS_SVDIRS, psrc) ;
auto_strings(dstback, info->base.s, SS_SYSTEM, SS_BACKUP, "/", tree, pback) ;
if (what) {
if (!atomic_symlink(dstback, sym,"backup_switcher"))
log_warnusys_return(LOG_EXIT_LESSONE,"symlink: ", dstback) ;
}
if (!what)
{
if (!what) {
if (!atomic_symlink(dstsrc, sym,"backup_switcher"))
log_warnusys_return(LOG_EXIT_LESSONE,"symlink: ", dstsrc) ;
}
......@@ -201,7 +181,7 @@ int backup_cmd_switcher(unsigned int verbosity,char const *cmd,ssexec_t *info)
newargv[m++] = "-v" ;
newargv[m++] = fmt ;
for (;pos < opts.len; pos += strlen(opts.s + pos) + 1)
FOREACH_SASTR(&opts, pos)
newargv[m++] = opts.s + pos ;
newargv[m++] = info->treename.s ;
......
......@@ -35,57 +35,45 @@ int backup_make_new(ssexec_t *info, unsigned int type)
int r ;
size_t newsrc ;
size_t newback ;
size_t typelen ;
size_t newsrc, newback, typelen ;
char *ptype = NULL ;
if (type == TYPE_CLASSIC)
{
if (type == TYPE_CLASSIC) {
ptype = SS_SVC ;
typelen = SS_SVC_LEN ;
}
else
{
} else {
ptype = SS_DB ;
typelen = SS_DB_LEN ;
}
char src[info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len + SS_SVDIRS_LEN + SS_RESOLVE_LEN + 1] ;
memcpy(src,info->base.s,info->base.len) ;
memcpy(src + info->base.len, SS_SYSTEM, SS_SYSTEM_LEN) ;
src[info->base.len + SS_SYSTEM_LEN] = '/' ;
memcpy(src + info->base.len + SS_SYSTEM_LEN + 1,info->treename.s,info->treename.len) ;
memcpy(src+ info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len,SS_SVDIRS, SS_SVDIRS_LEN) ;
auto_strings(src, info->base.s, SS_SYSTEM, "/", info->treename.s, SS_SVDIRS, ptype)
newsrc = info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len + SS_SVDIRS_LEN ;
memcpy(src+ info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len + SS_SVDIRS_LEN, ptype,typelen) ;
src[info->base.len + SS_SYSTEM_LEN + 1 + info->treename.len + SS_SVDIRS_LEN + typelen] = 0 ;
char back[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + info->treename.len + SS_RESOLVE_LEN + 1] ;
memcpy(back, info->base.s, info->base.len) ;
memcpy(back + info->base.len, SS_SYSTEM, SS_SYSTEM_LEN) ;
memcpy(back + info->base.len + SS_SYSTEM_LEN, SS_BACKUP, SS_BACKUP_LEN) ;
back[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN] = '/' ;
memcpy(back + info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1, info->treename.s, info->treename.len) ;
auto_strings(back, info->base.s, SS_SYSTEM, SS_BACKUP, "/", info->treename.s, ptype) ;
newback = info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + info->treename.len ;
memcpy(back + info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + info->treename.len, ptype,typelen) ;
back[info->base.len + SS_SYSTEM_LEN + SS_BACKUP_LEN + 1 + info->treename.len + typelen] = 0 ;
r = scan_mode(back,S_IFDIR) ;
if (r || (r < 0))
{
if (r || (r < 0)) {
log_trace("rm directory: ", back) ;
if (rm_rf(back) < 0)
log_warnusys_return(LOG_EXIT_ZERO,"remove: ",back) ;
r = 0 ;
}
if (!r)
{
if (!r) {
log_trace("create directory: ", back) ;
if (!dir_create(back,0755))
log_warnusys_return(LOG_EXIT_ZERO,"create directory: ",back) ;
}
log_trace("copy: ",src," to: ", back) ;
if (!hiercopy(src, back))
log_warnusys_return(LOG_EXIT_ZERO,"copy: ",src," to ",back) ;
......@@ -97,20 +85,22 @@ int backup_make_new(ssexec_t *info, unsigned int type)
back[newback + SS_RESOLVE_LEN] = 0 ;
r = scan_mode(back,S_IFDIR) ;
if (r || (r < 0))
{
if (r || (r < 0)) {
log_trace("rm directory: ", back) ;
if (rm_rf(back) < 0)
log_warnusys_return(LOG_EXIT_ZERO,"remove: ",back) ;
r = 0 ;
}
if (!r)
{
if (!r) {
log_trace("create directory: ", back) ;
if (!dir_create(back,0755))
log_warnusys_return(LOG_EXIT_ZERO,"create directory: ",back) ;
}
log_trace("copy: ",src," to: ", back) ;
if (!hiercopy(src, back))
log_warnusys_return(LOG_EXIT_ZERO,"copy: ",src," to ",back) ;
......
......@@ -35,31 +35,30 @@ int backup_realpath_sym(stralloc *sa, ssexec_t *info,unsigned int type)
size_t typelen ;
char *ptype = 0 ;
if (type == TYPE_CLASSIC)
{
if (type == TYPE_CLASSIC) {
ptype = SS_SYM_SVC ;
typelen = SS_SYM_SVC_LEN;
}
else
{
} else {
ptype = SS_SYM_DB ;
typelen = SS_SYM_DB_LEN;
}
char sym[info->tree.len + SS_SVDIRS_LEN + 1 + typelen + 1] ;
memcpy(sym,info->tree.s,info->tree.len) ;
memcpy(sym + info->tree.len, SS_SVDIRS, SS_SVDIRS_LEN) ;
sym[info->tree.len + SS_SVDIRS_LEN] = '/' ;
memcpy(sym + info->tree.len + SS_SVDIRS_LEN + 1, ptype,typelen) ;
sym[info->tree.len + SS_SVDIRS_LEN + 1 + typelen] = '/' ;
sym[info->tree.len + SS_SVDIRS_LEN + 1 + typelen + 1] = 0 ;
auto_strings(sym, info->tree.s, SS_SVDIRS, "/", ptype, "/") ;
r = scan_mode(sym,S_IFDIR) ;
if(r <= 0) return 0 ;
if(r <= 0)
return 0 ;
sa->len = 0 ;
r = sarealpath(sa,sym) ;
if (r == -1 ) return 0 ;
if (!stralloc_0(sa)) log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
if (r == -1 )
return 0 ;
if (!stralloc_0(sa))
log_warnsys_return(LOG_EXIT_ZERO,"stralloc") ;
return 1 ;
}
......@@ -39,21 +39,14 @@ int db_compile(char const *workdir, char const *tree, char const *treename, char
size_t wlen = strlen(workdir), treelen = strlen(treename) ;
char dest[wlen + SS_DB_LEN + 1 + treelen + 1] ;
memcpy(dest,workdir,wlen) ;
memcpy(dest + wlen,SS_DB,SS_DB_LEN) ;
dest[wlen + SS_DB_LEN] = '/' ;
memcpy(dest + wlen + SS_DB_LEN + 1,treename,treelen) ;
dest[wlen + SS_DB_LEN + 1 + treelen] = 0 ;
auto_strings(dest, workdir, SS_DB, "/", treename) ;
char src[wlen + SS_DB_LEN + SS_SRC_LEN + 1] ;
memcpy(src,workdir,wlen) ;
memcpy(src + wlen,SS_DB,SS_DB_LEN) ;
memcpy(src + wlen + SS_DB_LEN,SS_SRC,SS_SRC_LEN) ;
src[wlen + SS_DB_LEN + SS_SRC_LEN] = 0 ;
auto_strings(src, workdir, SS_DB, SS_SRC)
r = scan_mode(dest,S_IFDIR) ;
if (r)
{
if (r) {
if (rm_rf(dest) < 0)
log_warnusys_return(LOG_EXIT_ZERO,"remove: ", dest) ;
}
......
......@@ -31,17 +31,12 @@ int db_find_compiled_state(char const *livetree, char const *treename)
log_flow() ;
int r ;
size_t treelen = strlen(livetree) ;
size_t namelen = strlen(treename) ;
size_t treelen = strlen(livetree), namelen = strlen(treename) ;
struct stat st ;
char current[treelen + 1 + namelen + 9 + 1] ;
memcpy(current, livetree, treelen) ;
current[treelen] = '/' ;
memcpy(current + treelen + 1, treename,namelen) ;
memcpy(current + treelen + 1 + namelen, "/compiled", 9) ;
current[treelen + 1 + namelen + 9] = 0 ;
auto_strings(current, livetree, "/", treename, "/compiled") ;
if(lstat(current,&st) < 0) return -1 ;
if(!(S_ISLNK(st.st_mode)))
......@@ -50,11 +45,12 @@ int db_find_compiled_state(char const *livetree, char const *treename)
stralloc symreal = STRALLOC_ZERO ;
r = sarealpath(&symreal,current) ;
if (r < 0 )
{
if (r < 0 ) {
stralloc_free(&symreal) ;
log_warnu_return(LOG_EXIT_LESSONE,"find real path: ",current) ;
}
char *b = NULL ;
b = memmem(symreal.s,symreal.len,SS_BACKUP,SS_BACKUP_LEN) ;
......
......@@ -24,18 +24,16 @@ int db_ok(char const *livetree, char const *treename)
{
log_flow() ;
size_t treelen = strlen(livetree) ;
size_t namelen = strlen(treename) ;
size_t treelen = strlen(livetree), namelen = strlen(treename) ;
struct stat st ;
char sym[treelen + 1 + namelen + 1] ;
memcpy(sym, livetree, treelen) ;
sym[treelen] = '/' ;
memcpy(sym + treelen + 1, treename,namelen) ;
sym[treelen + 1 + namelen] = 0 ;
auto_strings(sym, livetree, "/", treename) ;
if(lstat(sym,&st) < 0)
return 0 ;
if(lstat(sym,&st) < 0) return 0 ;
if(!(S_ISLNK(st.st_mode)))
return 0 ;
......
......@@ -33,7 +33,7 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where)
{
log_flow() ;
int r ;
int r, e = 0 ;
stralloc db = STRALLOC_ZERO ;
char type[UINT_FMT] ;
......@@ -135,10 +135,9 @@ int db_switch_to(ssexec_t *info, char const *const *envp,unsigned int where)
}
}
stralloc_free(&db) ;
return 1 ;
e = 1 ;
err:
stralloc_free(&db) ;
return 0 ;
return e ;
}
......@@ -35,18 +35,11 @@ int db_update(char const *newdb, ssexec_t *info,char const *const *envp)
int wstat ;
size_t newdblen = strlen(newdb) ;
char db[newdblen + 1 + info->treename.len + 1] ;
memcpy(db, newdb, newdblen) ;
memcpy(db + newdblen, "/", 1) ;
memcpy(db + newdblen + 1, info->treename.s, info->treename.len) ;
db[newdblen + 1 + info->treename.len] = 0 ;
auto_strings(db, newdb, "/", info->treename.s) ;
char newlive[info->livetree.len + 1 + info->treename.len + 1] ;
memcpy(newlive, info->livetree.s,info->livetree.len) ;
memcpy(newlive + info->livetree.len , "/", 1) ;
memcpy(newlive + info->livetree.len + 1, info->treename.s,info->treename.len) ;
newlive[info->livetree.len + 1 + info->treename.len] = 0 ;
auto_strings(newlive, info->livetree.s, "/", info->treename.s) ;
char const *newargv[10] ;
unsigned int m = 0 ;
......
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