raster pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=aabbb211eab1022b39805fa45af581b41c6bea56

commit aabbb211eab1022b39805fa45af581b41c6bea56
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date:   Sat Mar 3 18:01:05 2018 +0900

    efl.task - add an api to clear environment
---
 src/lib/ecore/efl_loop.c  | 15 +++++++++++++++
 src/lib/ecore/efl_loop.eo |  1 +
 src/lib/ecore/efl_task.c  |  7 +++++++
 src/lib/ecore/efl_task.eo |  3 +++
 4 files changed, 26 insertions(+)

diff --git a/src/lib/ecore/efl_loop.c b/src/lib/ecore/efl_loop.c
index b3a58f9ae9..f4dd2bf246 100644
--- a/src/lib/ecore/efl_loop.c
+++ b/src/lib/ecore/efl_loop.c
@@ -901,6 +901,21 @@ _efl_loop_efl_task_env_get(Eo *obj, Efl_Loop_Data *pd, 
const char *var)
    return efl_task_env_get(efl_super(obj, EFL_LOOP_CLASS), var);
 }
 
+EOLIAN static void
+_efl_loop_efl_task_env_reset(Eo *obj EINA_UNUSED, Efl_Loop_Data *pd)
+{
+   Efl_Task_Data *td = efl_data_scope_get(obj, EFL_TASK_CLASS);
+   if (!td) return;
+   eina_lock_take(&_environ_lock);
+#ifdef HAVE_CLEARENV
+   clearenv();
+#else
+   environ = NULL;
+#endif
+   _env_sync(pd, td);
+   eina_lock_release(&_environ_lock);
+}
+
 EOLIAN static Eina_Bool
 _efl_loop_efl_task_run(Eo *obj, Efl_Loop_Data *pd EINA_UNUSED)
 {
diff --git a/src/lib/ecore/efl_loop.eo b/src/lib/ecore/efl_loop.eo
index 1ecdd68538..6531086fd8 100644
--- a/src/lib/ecore/efl_loop.eo
+++ b/src/lib/ecore/efl_loop.eo
@@ -127,6 +127,7 @@ class Efl.Loop (Efl.Task)
       Efl.Object.destructor;
       Efl.Object.provider_find;
       Efl.Task.env { set; get; }
+      Efl.Task.env_reset;
       Efl.Task.run;
       Efl.Task.end;
    }
diff --git a/src/lib/ecore/efl_task.c b/src/lib/ecore/efl_task.c
index 9a727743ed..d269773117 100644
--- a/src/lib/ecore/efl_task.c
+++ b/src/lib/ecore/efl_task.c
@@ -344,6 +344,13 @@ _efl_task_env_get(Eo *obj EINA_UNUSED, Efl_Task_Data *pd, 
const char *var)
 }
 
 EOLIAN static void
+_efl_task_env_reset(Eo *obj EINA_UNUSED, Efl_Task_Data *pd)
+{
+   if (pd->env) eina_hash_free(pd->env);
+   pd->env = NULL;
+}
+
+EOLIAN static void
 _efl_task_priority_set(Eo *obj EINA_UNUSED, Efl_Task_Data *pd, 
Efl_Task_Priority priority)
 {
    pd->priority = priority;
diff --git a/src/lib/ecore/efl_task.eo b/src/lib/ecore/efl_task.eo
index e44f929590..26ecb4b5a5 100644
--- a/src/lib/ecore/efl_task.eo
+++ b/src/lib/ecore/efl_task.eo
@@ -108,6 +108,9 @@ class Efl.Task (Efl.Object, Efl.Io.Reader, Efl.Io.Writer, 
Efl.Io.Closer)
                               is $NULL or if it is an empty string ]]
          }
       }
+      env_reset {
+         [[ Clear all environment variables. ]]
+      }
       @property priority {
          [[ The priority of this task. ]]
          get { }

-- 


Reply via email to