]> git.sur5r.net Git - i3/i3/commitdiff
Changes for compiling on Illumos 1816/head
authorTim Creech <tcreech@users.noreply.github.com>
Tue, 28 Jul 2015 00:47:12 +0000 (20:47 -0400)
committerTim Creech <tcreech@umd.edu>
Thu, 30 Jul 2015 11:44:10 +0000 (07:44 -0400)
* common.mk: use -lsocket -liconv -lgen on Illumos/Solaris
* mkdirp: return int and accept a mode argument
* use i3's mkdirp on everything except Illumos

common.mk
i3-config-wizard/main.c
include/libi3.h
libi3/mkdirp.c
src/ipc.c
src/util.c

index c568fb60dba42d557e73ac33c167a46b7c6a2230..d28750426bd4864bf9830d7485dadbc3bed4e1b1 100644 (file)
--- a/common.mk
+++ b/common.mk
@@ -178,6 +178,10 @@ else ifneq ($(UNAME),OpenBSD)
 LIBS += -lrt
 endif
 
+ifeq ($(UNAME),SunOS)
+LIBS += -lsocket -liconv -lgen
+endif
+
 ifneq (,$(filter Linux GNU GNU/%, $(UNAME)))
 I3_CPPFLAGS += -D_GNU_SOURCE
 endif
index 4c1d96971ec0d5cc27978b0ed24c219ba82252d1..9b8a486d5183404cfe26d93e0d01ac63547af37c 100644 (file)
@@ -799,7 +799,7 @@ int main(int argc, char *argv[]) {
     struct stat stbuf;
     sasprintf(&config_dir, "%s/i3", xdg_config_home);
     if (stat(config_dir, &stbuf) != 0)
-        if (!mkdirp(config_dir))
+        if (mkdirp(config_dir, DEFAULT_DIR_MODE) != 0)
             err(EXIT_FAILURE, "mkdirp(%s) failed", config_dir);
     free(config_dir);
     free(xdg_config_home);
index 69c4452862a026b979e04d0796cb1aa18a0fb295..971e565e3f1209a3073a3cfc0092aed567298c5b 100644 (file)
@@ -21,6 +21,8 @@
 #include <pango/pango.h>
 #endif
 
+#define DEFAULT_DIR_MODE (S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH)
+
 /**
  * Opaque data structure for storing strings.
  *
@@ -471,8 +473,10 @@ char *resolve_tilde(const char *path);
  */
 char *get_config_path(const char *override_configpath, bool use_system_paths);
 
+#if !defined(__sun)
 /**
  * Emulates mkdir -p (creates any missing folders)
  *
  */
-bool mkdirp(const char *path);
+int mkdirp(const char *path, mode_t mode);
+#endif
index 95c31b59d5634bc6a1026195aaabad7d1b68942d..c64b80a3352b97de1ac5e1ec6f21558812e668b7 100644 (file)
@@ -8,24 +8,26 @@
  * Emulates mkdir -p (creates any missing folders)
  *
  */
-bool mkdirp(const char *path) {
-    if (mkdir(path, S_IRWXU | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH) == 0)
-        return true;
+
+#if !defined(__sun)
+int mkdirp(const char *path, mode_t mode) {
+    if (mkdir(path, mode) == 0)
+        return 0;
     if (errno == EEXIST) {
         struct stat st;
         /* Check that the named file actually is a directory. */
         if (stat(path, &st)) {
             ELOG("stat(%s) failed: %s\n", path, strerror(errno));
-            return false;
+            return -1;
         }
         if (!S_ISDIR(st.st_mode)) {
             ELOG("mkdir(%s) failed: %s\n", path, strerror(ENOTDIR));
-            return false;
+            return -1;
         }
-        return true;
+        return 0;
     } else if (errno != ENOENT) {
         ELOG("mkdir(%s) failed: %s\n", path, strerror(errno));
-        return false;
+        return -1;
     }
     char *copy = sstrdup(path);
     /* strip trailing slashes, if any */
@@ -38,13 +40,14 @@ bool mkdirp(const char *path) {
             free(copy);
             copy = NULL;
         }
-        return false;
+        return -1;
     }
     *sep = '\0';
-    bool result = false;
-    if (mkdirp(copy))
-        result = mkdirp(path);
+    int result = -1;
+    if (mkdirp(copy, mode) == 0)
+        result = mkdirp(path, mode);
     free(copy);
 
     return result;
 }
+#endif
index 51a3d22315e625945f0e2765a033cfb83ee6d20c..4af78ab2762a47cd22c75d58e919cf4eec16238e 100644 (file)
--- a/src/ipc.c
+++ b/src/ipc.c
@@ -1087,7 +1087,7 @@ int ipc_create_socket(const char *filename) {
     char *copy = sstrdup(resolved);
     const char *dir = dirname(copy);
     if (!path_exists(dir))
-        mkdirp(dir);
+        mkdirp(dir, DEFAULT_DIR_MODE);
     free(copy);
 
     /* Unlink the unix domain socket before */
index 0a8ba6e2785194b0453d27923d6833bd3387de46..5568fc714c619ba70663e29a377f8e3557b4e8fd 100644 (file)
@@ -222,7 +222,7 @@ char *store_restart_layout(void) {
     char *filenamecopy = sstrdup(filename);
     char *base = dirname(filenamecopy);
     DLOG("Creating \"%s\" for storing the restart layout\n", base);
-    if (!mkdirp(base))
+    if (mkdirp(base, DEFAULT_DIR_MODE) != 0)
         ELOG("Could not create \"%s\" for storing the restart layout, layout will be lost.\n", base);
     free(filenamecopy);