X-Git-Url: http://git.lttng.org/?p=ust.git;a=blobdiff_plain;f=libustcomm%2Fustcomm.c;h=6ddd6d82a7421303b339e3ff0ed98b328fd25885;hp=2bd86eb728442c2713f74cd24a30766706d731c8;hb=dce0b474515fd2d9f74882c7b59ab6c00da51388;hpb=155887202b20bc1c5e9b4c6054a80135c3273d32 diff --git a/libustcomm/ustcomm.c b/libustcomm/ustcomm.c index 2bd86eb..6ddd6d8 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"); }