libustcomm: create default socket directory if it does not exist
[ust.git] / libustcomm / ustcomm.c
index 6044c271fa7101d585261d44b1c24f401dfd2ef4..6ddd6d82a7421303b339e3ff0ed98b328fd25885 100644 (file)
@@ -31,7 +31,7 @@
 #include <execinfo.h>
 
 #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");
        }
 
This page took 0.056125 seconds and 4 git commands to generate.