Revision: 6746
Author: ek.kato
Date: Tue Sep  7 23:04:47 2010
Log: * Merge -r6740:6745 from trunk.

http://code.google.com/p/uim/source/detail?r=6746

Modified:
 /branches/1.6/scm/custom-rt.scm
 /branches/1.6/scm/dynlib.scm
 /branches/1.6/scm/plugin.scm
 /branches/1.6/uim/uim-helper.c
 /branches/1.6/uim/uim-posix.c

=======================================
--- /branches/1.6/scm/custom-rt.scm     Sun Apr  4 20:35:54 2010
+++ /branches/1.6/scm/custom-rt.scm     Tue Sep  7 23:04:47 2010
@@ -63,7 +63,10 @@
 (define custom-file-path
   (lambda (gsym)
     (let* ((group-name (symbol->string gsym))
-          (path (string-append (get-config-path! #f)
+           (config-path (get-config-path #f))
+           (path (string-append (if config-path
+                                  config-path
+                                  "")
                                "/customs/custom-"
                                group-name
                                ".scm")))
=======================================
--- /branches/1.6/scm/dynlib.scm        Tue Sep  7 07:44:36 2010
+++ /branches/1.6/scm/dynlib.scm        Tue Sep  7 23:04:47 2010
@@ -35,7 +35,7 @@
   (if (setugid?)
       (list (string-append (sys-pkglibdir) "/plugin"))
       (let* ((ld-library-path (getenv "LD_LIBRARY_PATH"))
-             (config-path (get-config-path! #f))
+             (config-path (get-config-path #f))
              (user-plugin-path (if config-path
                                  (string-append config-path "/plugin")
                                  '())))
=======================================
--- /branches/1.6/scm/plugin.scm        Tue Sep  7 07:44:36 2010
+++ /branches/1.6/scm/plugin.scm        Tue Sep  7 23:04:47 2010
@@ -39,7 +39,7 @@
 (define uim-plugin-scm-load-path
   (if (setugid?)
       (list (sys-pkgdatadir))
-      (let ((config-path (get-config-path! #f))
+      (let ((config-path (get-config-path #f))
             (scm-paths (string-split (load-path) ":")))
        (filter string?
                (append scm-paths
@@ -71,7 +71,7 @@
 ;; TODO: write test
 (define load-module-conf
   (lambda ()
-    (let* ((config-path (get-config-path! #f))
+    (let* ((config-path (get-config-path #f))
           (user-module-dir (if config-path
                                (string-append config-path "/plugin/")
                                #f))
@@ -100,7 +100,7 @@
 ;; TODO: write test
 (define load-enabled-modules
   (lambda ()
-    (let* ((config-path (get-config-path! #f))
+    (let* ((config-path (get-config-path #f))
           (user-module-dir (if config-path
                                (string-append config-path "/plugin/")
                                #f))
=======================================
--- /branches/1.6/uim/uim-helper.c      Sun Apr  4 20:35:54 2010
+++ /branches/1.6/uim/uim-helper.c      Tue Sep  7 23:04:47 2010
@@ -207,7 +207,11 @@
   return UIM_TRUE;

  path_error:
-  uim_fatal_error("uim_helper_get_pathname()");
+#if USE_UIM_NOTIFY && !UIM_NON_LIBUIM_PROG
+  uim_notify_fatal("uim_helper_get_pathname() failed");
+#else
+  fprintf(stderr, "uim_helper_get_pathname() failed\n");
+#endif
   helper_path[0] = '\0';

   UIM_CATCH_ERROR_END();
=======================================
--- /branches/1.6/uim/uim-posix.c       Sun Apr  4 20:35:54 2010
+++ /branches/1.6/uim/uim-posix.c       Tue Sep  7 23:04:47 2010
@@ -141,21 +141,33 @@
   return MAKE_STR(home);
 }

-uim_bool
-uim_check_dir(const char *dir)
+static uim_bool
+uim_check_dir_internal(const char *dir, int need_prepare)
 {
   struct stat st;

   if (stat(dir, &st) < 0)
-    return (mkdir(dir, 0700) < 0) ? UIM_FALSE : UIM_TRUE;
+    if (need_prepare)
+      return (mkdir(dir, 0700) < 0) ? UIM_FALSE : UIM_TRUE;
+    else
+      return UIM_FALSE;
   else {
     mode_t mode = S_IFDIR | S_IRUSR | S_IWUSR | S_IXUSR;
     return ((st.st_mode & mode) == mode) ? UIM_TRUE : UIM_FALSE;
   }
 }
+
+/* FIXME: use appropriate name for this API */
+uim_bool
+uim_check_dir(const char *dir)
+{
+  int need_prepare = UIM_TRUE;
+
+  return uim_check_dir_internal(dir, need_prepare);
+}

 static uim_lisp
-c_check_dir(uim_lisp dir_)
+c_prepare_dir(uim_lisp dir_)
 {
   if (!uim_check_dir(REFER_C_STR(dir_))) {
     return uim_scm_f();
@@ -163,8 +175,8 @@
   return uim_scm_t();
 }

-uim_bool
-uim_get_config_path(char *path, int len, int is_getenv)
+static uim_bool
+uim_get_config_path_internal(char *path, int len, int is_getenv, int need_prepare)
 {
   char home[MAXPATHLEN];

@@ -174,32 +186,61 @@
   if (!uim_get_home_directory(home, sizeof(home), getuid()) && is_getenv) {
     char *home_env = getenv("HOME");

-    if (!home_env)
+    if (!home_env) {
+      path[0] = '\0';
       return UIM_FALSE;
-
-    if (strlcpy(home, home_env, sizeof(home)) >= sizeof(home))
+    }
+
+    if (strlcpy(home, home_env, sizeof(home)) >= sizeof(home)) {
+      path[0] = '\0';
       return UIM_FALSE;
+    }
   }

-  if (snprintf(path, len, "%s/.uim.d", home) == -1)
+  if (snprintf(path, len, "%s/.uim.d", home) < 0) {
+    path[0] = '\0';
     return UIM_FALSE;
-
-  if (!uim_check_dir(path)) {
+  }
+
+  if (!uim_check_dir_internal(path, need_prepare)) {
     return UIM_FALSE;
   }

   return UIM_TRUE;
 }
+
+/* FIXME: use appropriate name for this API */
+uim_bool
+uim_get_config_path(char *path, int len, int is_getenv)
+{
+  int need_prepare = UIM_TRUE;
+
+  return uim_get_config_path_internal(path, len, is_getenv, need_prepare);
+}

 static uim_lisp
-c_get_config_path(uim_lisp is_getenv_)
+c_prepare_config_path(uim_lisp is_getenv_)
 {
   char path[MAXPATHLEN];
-
-  if (!uim_get_config_path(path, sizeof(path), C_BOOL(is_getenv_)))
+  int need_prepare = UIM_TRUE;
+
+ if (!uim_get_config_path_internal(path, sizeof(path), C_BOOL(is_getenv_), need_prepare))
     return uim_scm_f();
   return MAKE_STR(path);
 }
+
+static uim_lisp
+c_get_config_path(uim_lisp is_getenv_)
+{
+  char path[MAXPATHLEN];
+  int need_prepare = UIM_FALSE;
+  int exist;
+
+  /* No need to check the existence of path in this function */
+ exist = uim_get_config_path_internal(path, sizeof(path), C_BOOL(is_getenv_), need_prepare);
+
+  return MAKE_STR(path);
+}

 static uim_lisp
 file_stat_mode(uim_lisp filename, mode_t mode)
@@ -391,8 +432,9 @@
   uim_scm_init_proc0("user-name", user_name);
   uim_scm_init_proc1("home-directory", home_directory);

-  uim_scm_init_proc1("create/check-directory!", c_check_dir);
-  uim_scm_init_proc1("get-config-path!", c_get_config_path);
+  uim_scm_init_proc1("create/check-directory!", c_prepare_dir);
+  uim_scm_init_proc1("get-config-path!", c_prepare_config_path);
+  uim_scm_init_proc1("get-config-path", c_get_config_path);

   uim_scm_init_proc1("file-readable?", file_readablep);
   uim_scm_init_proc1("file-writable?", file_writablep);

Reply via email to