X-Git-Url: https://git.liburcu.org/?a=blobdiff_plain;f=libustcomm%2Fustcomm.c;h=6ddd6d82a7421303b339e3ff0ed98b328fd25885;hb=dce0b474515fd2d9f74882c7b59ab6c00da51388;hp=6044c271fa7101d585261d44b1c24f401dfd2ef4;hpb=60e57148f47eb3a3116de47e23516fc5df8c968e;p=ust.git diff --git a/libustcomm/ustcomm.c b/libustcomm/ustcomm.c index 6044c27..6ddd6d8 100644 --- a/libustcomm/ustcomm.c +++ b/libustcomm/ustcomm.c @@ -31,7 +31,7 @@ #include #include "ustcomm.h" -#include "localerr.h" +#include "usterr.h" #define UNIX_PATH_MAX 108 @@ -67,22 +67,11 @@ char *strdup_malloc(const char *s) static int signal_process(pid_t pid) { - int result; - - result = kill(pid, UST_SIGNAL); - if(result == -1) { - PERROR("kill"); - return -1; - } - - /* FIXME: should wait in a better way */ - //sleep(1); - return 0; } int pid_is_online(pid_t pid) { - return kill(pid, UST_SIGNAL) != -1; + return 1; } static int send_message_fd(int fd, const char *msg) @@ -489,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. */ @@ -504,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); @@ -533,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"); }