X-Git-Url: https://git.lttng.org/?a=blobdiff_plain;f=libustcomm%2Fustcomm.c;h=fd5e360e343a7e495330115d060396bdf4179365;hb=7e92827db5195a5b6afc110d0152eb2deef75638;hp=2bd86eb728442c2713f74cd24a30766706d731c8;hpb=aa08b4413291fabcbd1b1144377d37034ad361de;p=ust.git diff --git a/libustcomm/ustcomm.c b/libustcomm/ustcomm.c index 2bd86eb..fd5e360 100644 --- a/libustcomm/ustcomm.c +++ b/libustcomm/ustcomm.c @@ -478,6 +478,38 @@ int ustcomm_connect_app(pid_t pid, struct ustcomm_connection *conn) return ustcomm_connect_path(path, conn, pid); } +static int ensure_dir_exists(const char *dir) +{ + struct stat st; + int result; + + if(!strcmp(dir, "")) + return -1; + + result = stat(dir, &st); + if(result == -1 && errno != ENOENT) { + return -1; + } + else if(result == -1) { + /* ENOENT */ + char buf[200]; + int result; + + result = snprintf(buf, sizeof(buf), "mkdir -p \"%s\"", dir); + if(result >= sizeof(buf)) { + ERR("snprintf buffer overflow"); + return -1; + } + result = system(buf); + if(result != 0) { + ERR("executing command %s", buf); + return -1; + } + } + + return 0; +} + /* Called by an application to initialize its server so daemons can * connect to it. */ @@ -493,6 +525,12 @@ int ustcomm_init_app(pid_t pid, struct ustcomm_app *handle) return -1; } + result = ensure_dir_exists(SOCK_DIR); + if(result == -1) { + ERR("Unable to create socket directory %s", SOCK_DIR); + return -1; + } + handle->server.listen_fd = init_named_socket(name, &(handle->server.socketpath)); if(handle->server.listen_fd < 0) { ERR("Error initializing named socket (%s). Check that directory exists and that it is writable.", name); @@ -522,6 +560,15 @@ int ustcomm_init_ustd(struct ustcomm_ustd *handle, const char *sock_path) asprintf(&name, "%s", sock_path); } else { + int result; + + /* Only check if socket dir exists if we are using the default directory */ + result = ensure_dir_exists(SOCK_DIR); + if(result == -1) { + ERR("Unable to create socket directory %s", SOCK_DIR); + return -1; + } + asprintf(&name, "%s/%s", SOCK_DIR, "ustd"); } @@ -565,7 +612,7 @@ void ustcomm_fini_app(struct ustcomm_app *handle) } } -static char *find_tok(char *str) +static const char *find_tok(const char *str) { while(*str == ' ') { str++; @@ -577,7 +624,7 @@ static char *find_tok(char *str) return str; } -static char *find_sep(char *str) +static const char *find_sep(const char *str) { while(*str != ' ') { str++; @@ -589,11 +636,11 @@ static char *find_sep(char *str) return str; } -int nth_token_is(char *str, char *token, int tok_no) +int nth_token_is(const char *str, const char *token, int tok_no) { int i; - char *start; - char *end; + const char *start; + const char *end; for(i=0; i<=tok_no; i++) { str = find_tok(str); @@ -618,12 +665,12 @@ int nth_token_is(char *str, char *token, int tok_no) return 1; } -char *nth_token(char *str, int tok_no) +char *nth_token(const char *str, int tok_no) { static char *retval = NULL; int i; - char *start; - char *end; + const char *start; + const char *end; for(i=0; i<=tok_no; i++) { str = find_tok(str);