summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Torri <vincent.torri@gmail.com>2019-07-28 09:38:26 +0100
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>2019-07-28 09:38:26 +0100
commit5b51a6bb207dc8d5127fa9c6ad7d3c8c6e2659cf (patch)
treec38071eeb0e7c8e610de91796a39b64caf4fb270
parenta6ade14c5e65ab729b1013388ec1aea4be22afc7 (diff)
downloadefl-5b51a6bb207dc8d5127fa9c6ad7d3c8c6e2659cf.tar.gz
Eio: enable eio_file_chown if chown is available on the platform
Test Plan: compilation on Windows Reviewers: zmike, raster, cedric Reviewed By: raster Subscribers: #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D9393
-rw-r--r--header_checks/meson.build1
-rw-r--r--src/lib/eio/Eio_Legacy.h3
-rw-r--r--src/lib/eio/eio_single.c22
3 files changed, 17 insertions, 9 deletions
diff --git a/header_checks/meson.build b/header_checks/meson.build
index 35b5db9fdd..4f71dbde5c 100644
--- a/header_checks/meson.build
+++ b/header_checks/meson.build
@@ -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']],
diff --git a/src/lib/eio/Eio_Legacy.h b/src/lib/eio/Eio_Legacy.h
index ac7a814f5f..50140edd4e 100644
--- a/src/lib/eio/Eio_Legacy.h
+++ b/src/lib/eio/Eio_Legacy.h
@@ -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,
diff --git a/src/lib/eio/eio_single.c b/src/lib/eio/eio_single.c
index 1701f1006e..3fd11a59cb 100644
--- a/src/lib/eio/eio_single.c
+++ b/src/lib/eio/eio_single.c
@@ -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
}