Eio: enable eio_file_chown if chown is available on the platform
authorVincent Torri <vincent.torri@gmail.com>
Sun, 28 Jul 2019 08:38:26 +0000 (09:38 +0100)
committerWooHyun Jung <wh0705.jung@samsung.com>
Mon, 5 Aug 2019 01:48:28 +0000 (10:48 +0900)
Test Plan: compilation on Windows

Reviewers: zmike, raster, cedric

Reviewed By: raster

Subscribers: #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D9393

header_checks/meson.build
src/lib/eio/Eio_Legacy.h
src/lib/eio/eio_single.c

index a0cb122..b8005cc 100644 (file)
@@ -78,6 +78,7 @@ function_checks = [
   ['alloca', ['alloca.h']],
   ['backtrace', ['execinfo.h']],
   ['backtrace_symbols', ['execinfo.h']],
+  ['chown', ['unistd.h']],
   ['clock_gettime', ['time.h']],
   ['dirfd', ['dirent.h sys/types.h']],
   ['fchmod', ['sys/stat.h']],
index ac7a814..50140ed 100644 (file)
@@ -394,6 +394,9 @@ EAPI Eio_File *eio_file_chmod(const char *path,
  *
  * This function will change the owner of a path, setting it to the user and
  * group passed as argument. It's equivalent to the chown shell command.
+ *
+ * @note Some platforms (including Windows) do not support chown(). In that
+ * case, this function returns @c NULL.
  */
 EAPI Eio_File *eio_file_chown(const char *path,
                               const char *user,
index 1701f10..3fd11a5 100644 (file)
@@ -204,16 +204,10 @@ _eio_file_chmod(void *data, Ecore_Thread *thread)
      eio_file_thread_error(&ch->common, thread);
 }
 
+#if defined(HAVE_CHOWN) && defined(HAVE_GETPWENT)
 static void
 _eio_file_chown(void *data, Ecore_Thread *thread)
 {
-#ifdef _WIN32
-  /* FIXME:
-   * look at http://wwwthep.physik.uni-mainz.de/~frink/chown/readme.html
-   */
-  (void)data;
-  (void)thread;
-#else
    Eio_File_Chown *own = data;
    char *tmp;
    uid_t owner = -1;
@@ -266,7 +260,6 @@ _eio_file_chown(void *data, Ecore_Thread *thread)
  on_error:
    ecore_thread_cancel(thread);
    return;
-#endif
 }
 
 static void
@@ -297,6 +290,7 @@ _eio_file_chown_error(void *data, Ecore_Thread *thread EINA_UNUSED)
    eio_file_error(&ch->common);
    _eio_chown_free(ch);
 }
+#endif
 
 /**
  * @endcond
@@ -585,6 +579,7 @@ eio_file_chown(const char *path,
               Eio_Error_Cb error_cb,
               const void *data)
 {
+#if defined(HAVE_CHOWN) && defined(HAVE_GETPWENT)
    Eio_File_Chown *c = NULL;
 
    EINA_SAFETY_ON_NULL_RETURN_VAL(path, NULL);
@@ -601,11 +596,20 @@ eio_file_chown(const char *path,
    if (!eio_file_set(&c->common,
                     done_cb,
                     error_cb,
-                     data,
+                    data,
                     _eio_file_chown,
                     _eio_file_chown_done,
                     _eio_file_chown_error))
      return NULL;
 
    return &c->common;
+#else
+   EINA_SAFETY_ON_NULL_RETURN_VAL(error_cb, NULL);
+   error_cb(data, NULL, EINVAL);
+   return NULL;
+   (void)path;
+   (void)user;
+   (void)group;
+   (void)done_cb;
+#endif
 }