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

allow instance service

parent e5decce5
No related branches found
No related tags found
No related merge requests found
......@@ -15,6 +15,7 @@
#include <stddef.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>
#include <oblibs/error2.h>
#include <oblibs/files.h>
......@@ -60,26 +61,34 @@ static void setname(char *name,char const *sv)
name[svnamelen] = 0 ;
}
static void check_dir(char const *dir,int force)
static void setsrc(char *src,char const *dir)
{
int r ;
size_t dirlen = strlen(dir) ;
char name[dirlen+1] ;
setname(name,dir) ;
size_t namelen = strlen(name) ;
memcpy(src,dir,dirlen-namelen-1) ;
src[dirlen-namelen-1] = 0 ;
}
static void check_dir(char const *dir,int force,int main)
{
int r ;
size_t dirlen = strlen(dir) ;
char tmp[dirlen+1] ;
memcpy(tmp,dir,dirlen-namelen-1) ;//-1 remove last '/'
tmp[dirlen-namelen-1] = 0 ;
setsrc(tmp,dir) ;
char name[dirlen+1] ;
setname(name,dir) ;
r = scan_mode(dir,S_IFDIR) ;
if (r < 0) strerr_dief2sys(111,"conflicting format of: ",dir) ;
if (r < 0){ errno = ENOTDIR ; strerr_dief2sys(111,"conflicting format of: ",dir) ; }
if (r && force)
if (r && force && main)
{
if ((rm_rf(dir) < 0) || !r ) strerr_diefu2sys(111,"sanitize directory: ",dir) ;
r = 0 ;
}
else if (r && !force) strerr_dief3x(111,"destination: ",dir," already exist") ;
else if (r && !force && main) strerr_dief3x(111,"destination: ",dir," already exist") ;
if (!r)
if (!dir_create_under(tmp,name, 0755)) strerr_diefu2sys(111,"create: ",dir) ;
}
......@@ -87,13 +96,14 @@ static void check_dir(char const *dir,int force)
int main(int argc, char const *const *argv,char const *const *envp)
{
int r ;
size_t filesize ;
stralloc src = STRALLOC_ZERO ;
stralloc dst = STRALLOC_ZERO ;
stralloc insta = STRALLOC_ZERO ;
sv_alltype service = SV_ALLTYPE_ZERO ;
char const *dir ;
char const *sv ;
char name[4095+1] ;
char srcdir[4095+1] ;
int type, force = 0 ;
PROG = "66-parser" ;
{
......@@ -121,18 +131,30 @@ int main(int argc, char const *const *argv,char const *const *envp)
dir = argv[1] ;
if (dir[0] != '/') strerr_dief3x(110, "directory: ",dir," must be an absolute path") ;
if (sv[0] != '/') strerr_dief3x(110, "service: ",sv," must be an absolute path") ;
setname(name,sv) ;
check_dir(dir,force) ;
filesize=file_get_size(sv) ;
r = openreadfileclose(sv,&src,filesize) ;
if (!r) strerr_dief2sys(111,"open: ",sv) ;
if (!stralloc_cats(&src,"\n") || !stralloc_0(&src)) retstralloc(111,"main") ;
setname(name,sv) ;
setsrc(srcdir,sv) ;
check_dir(dir,force,0) ;
if (!stralloc_cats(&insta,name) ||
!stralloc_0(&insta)) retstralloc(111,"main") ;
r = insta_check(insta.s) ;
if (!r) strerr_dief2x(111,"invalid instance name: ",insta.s) ;
if (r > 0)
{
if (!insta_create(&src,&insta,srcdir,r))
strerr_diefu2x(111,"create instance service: ",name) ;
memcpy(name,insta.s,insta.len) ;
name[insta.len] = 0 ;
}
else if (!read_svfile(&src,name,srcdir)) strerr_dief2sys(111,"open: ",sv) ;
VERBO1 strerr_warni2x("Parsing service file: ", sv) ;
if (!parser(&service,&src,sv)) strerr_diefu2x(111,"parse service file: ",sv) ;
if (!stralloc_cats(&dst,dir) ||
!stralloc_cats(&dst,"/") ||
!stralloc_cats(&dst,name)) retstralloc(111,"main") ;
check_dir(dst.s,force) ;
!stralloc_cats(&dst,name) ||
!stralloc_0(&dst)) retstralloc(111,"main") ;
check_dir(dst.s,force,1) ;
VERBO1 strerr_warni4x("Write service file: ", name," at: ",dst.s) ;
type = service.cname.itype ;
switch(type)
......
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