[EGIT] [core/efl] master 01/01: C#: Add error checking for Eina.Success_Flag return type

2020-02-18 Thread Felipe Magno de Almeida
felipealmeida pushed a commit to branch master.

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

commit df0715a9aa27903dd549c2b4516ab2cba0274413
Author: Felipe Magno de Almeida 
Date:   Tue Feb 11 17:48:26 2020 +

C#: Add error checking for Eina.Success_Flag return type

When a get and/or set from property is defined to return, explicitly,
a Eina.Success_Flag, the mono generator will check the return value
and generate an exception if the call fails.
Resolves T8383.

Reviewed-by: João Paulo Taylor Ienczak Zanette 

Differential Revision: https://phab.enlightenment.org/D11281
---
 .../eolian_mono/eolian/mono/function_definition.hh | 147 +
 .../eolian_mono/eolian/mono/property_definition.hh |   7 +-
 src/lib/eina/eina_error.h  |   9 ++
 src/lib/eo/eina_types.eot  |   4 +
 src/lib/eolian_cxx/grammar/eps.hpp |   8 +-
 src/tests/efl_mono/Eo.cs   |  21 +++
 src/tests/efl_mono/dummy_test_object.c |  58 
 src/tests/efl_mono/dummy_test_object.eo|  58 +++-
 8 files changed, 250 insertions(+), 62 deletions(-)

diff --git a/src/bin/eolian_mono/eolian/mono/function_definition.hh 
b/src/bin/eolian_mono/eolian/mono/function_definition.hh
index 6aeaadcedb..5fc0e84fbf 100644
--- a/src/bin/eolian_mono/eolian/mono/function_definition.hh
+++ b/src/bin/eolian_mono/eolian/mono/function_definition.hh
@@ -39,6 +39,7 @@
 #include "using_decl.hh"
 #include "generation_contexts.hh"
 #include "blacklist.hh"
+#include "grammar/eps.hpp"
 
 namespace eolian_mono {
 
@@ -369,6 +370,7 @@ struct property_wrapper_definition_generator
{
   using efl::eolian::grammar::attribute_reorder;
   using efl::eolian::grammar::counter;
+  using efl::eolian::grammar::eps;
   using efl::eolian::grammar::attributes::parameter_direction;
   using efl::eolian::grammar::attributes::parameter_def;
 
@@ -457,6 +459,7 @@ struct property_wrapper_definition_generator
   bool is_get_public = get_scope == "public ";
   std::string set_scope = property.setter.is_engaged() ? 
eolian_mono::function_scope_get(*property.setter) : "";
   bool is_set_public = set_scope == "public ";
+  bool get_has_return_error = false, set_has_return_error = false;
 
   // No need to generate this wrapper as no accessor is public.
   if (is_interface && (!is_get_public && !is_set_public))
@@ -490,6 +493,12 @@ struct property_wrapper_definition_generator
set_scope = "";
 }
 
+  if (property.getter && property.getter->explicit_return_type.c_type == 
"Eina_Success_Flag")
+  get_has_return_error = true;
+
+  if (property.setter && property.setter->explicit_return_type.c_type == 
"Eina_Success_Flag")
+  set_has_return_error = true;
+  
   if (parameters.size() == 1)
   {
 if (!as_generator(
@@ -510,73 +519,95 @@ struct property_wrapper_definition_generator
   return false;
   }
 
-  if (property.getter.is_engaged() && is_interface)
+  if (property.getter)
   {
-if (is_get_public)
+auto managed_getter_name = 
name_helpers::managed_method_name(*property.getter);
+if (is_interface)
+{
+  if (is_get_public)
+  {
+if (!as_generator(scope_tab(2) << scope_tab << set_scope <<  
"get;\n"
+  ).generate(sink, attributes::unused, context))
+  return false;
+  }
+}
+else if (get_params == 0)
 {
-  if (!as_generator(scope_tab(2) << scope_tab << set_scope <<  "get;\n"
-).generate(sink, attributes::unused, context))
+  if (!as_generator
+  (scope_tab(2) << scope_tab << get_scope
+   << "get " << "{ return " + managed_getter_name + "(); }\n"
+  ).generate(sink, attributes::unused, context))
 return false;
 }
-  }
-  else if (property.getter.is_engaged() && get_params == 
0/*parameters.size() == 1 && property.getter.is_engaged()*/)
-  {
-if (!as_generator
-(scope_tab(2) << scope_tab << get_scope
- << "get " << "{ return " + 
name_helpers::managed_method_name(*property.getter) + "(); }\n"
-).generate(sink, attributes::unused, context))
-  return false;
-  }
-  else if (parameters.size() >= 1 && property.getter)
-  {
-if (!as_generator
- (scope_tab(2) << scope_tab << get_scope << "get "
-  << "{\n"
-  << *attribute_reorder<1, -1, 1>
-(scope_tab(4) << type(true) << " _out_"
- << argument(false) << " = default(" << type(true) << 
");\n"
-)
-  << scope_tab(4) << 
name_helpers::managed_method_name(*property.getter)
-

[EGIT] [core/efl] master 01/01: csharp: Add IntPtr to/from IEnumerable conversion for "accessor" types

2020-02-18 Thread João Paulo Taylor Ienczak Zanette
felipealmeida pushed a commit to branch master.

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

commit eba07471a0cb9baed2204856078f44cc2d31f7d9
Author: João Paulo Taylor Ienczak Zanette 
Date:   Tue Feb 18 19:17:56 2020 +

csharp: Add IntPtr to/from IEnumerable conversion for "accessor" types

Adds a special case for "accessor" complex types in `implicit operator` for
structs and `IntPtr`s, in which an IEnumerator must be converted to/from an
IntPtr.

Reviewed-by: YeongJong Lee 
Reviewed-by: Felipe Magno de Almeida 
Differential Revision: https://phab.enlightenment.org/D11210
---
 .../eolian_mono/eolian/mono/struct_definition.hh   | 15 
 src/bin/eolian_mono/eolian/mono/struct_fields.hh   |  7 
 src/tests/efl_mono/StructHelpers.cs| 16 ++--
 src/tests/efl_mono/Structs.cs  | 44 ++
 src/tests/efl_mono/dummy_test_object.eo|  1 +
 5 files changed, 80 insertions(+), 3 deletions(-)

diff --git a/src/bin/eolian_mono/eolian/mono/struct_definition.hh 
b/src/bin/eolian_mono/eolian/mono/struct_definition.hh
index 6f19088d52..038ab1d0fd 100644
--- a/src/bin/eolian_mono/eolian/mono/struct_definition.hh
+++ b/src/bin/eolian_mono/eolian/mono/struct_definition.hh
@@ -90,6 +90,13 @@ struct to_internal_field_convert_generator
.generate(sink, std::make_tuple(field_name, field_name), 
context))
  return false;
 }
+  else if ((complex && (complex->outer.base_type == "accessor")))
+{
+   if (!as_generator(
+ indent << scope_tab << scope_tab << "_internal_struct." << 
string << " = Efl.Eo.Globals.IEnumerableToAccessor(_external_struct." << string 
<< ", " << (field.type.has_own ? "true" : "false")  << ");\n")
+   .generate(sink, std::make_tuple(field_name, field_name), 
context))
+ return false;
+}
   else if ((complex && (complex->outer.base_type == "hash"))
 || field.type.c_type == "Eina_Binbuf *" || field.type.c_type == 
"const Eina_Binbuf *")
 {
@@ -172,6 +179,7 @@ struct to_internal_field_convert_generator
.generate(sink, std::make_tuple(field_name, field_name), 
context))
  return false;
 }
+
   return true;
}
 } const to_internal_field_convert {};
@@ -231,6 +239,13 @@ struct to_external_field_convert_generator
.generate(sink, std::make_tuple(field.type, field_name), 
context))
  return false;
 }
+  else if (complex && complex->outer.base_type == "accessor")
+{
+   if (!as_generator(
+ "Efl.Eo.Globals.AccessorTo" << type << "(" << string << ");")
+   .generate(sink, std::make_tuple(field.type, field_name), 
context))
+ return false;
+}
   else if (field.type.is_ptr && helpers::need_pointer_conversion(regular) 
&& !helpers::need_struct_conversion(regular))
 {
if (!as_generator(
diff --git a/src/bin/eolian_mono/eolian/mono/struct_fields.hh 
b/src/bin/eolian_mono/eolian/mono/struct_fields.hh
index a9f400bbc5..9d861a0b65 100644
--- a/src/bin/eolian_mono/eolian/mono/struct_fields.hh
+++ b/src/bin/eolian_mono/eolian/mono/struct_fields.hh
@@ -103,6 +103,13 @@ struct field_argument_assignment_generator
.generate(sink, std::make_tuple(field_name, field_name), 
context))
  return false;
 }
+  else if ((complex && (complex->outer.base_type == "accessor")))
+{
+   if (!as_generator(
+ "this." << string << " = 
Efl.Eo.Globals.IEnumerableToAccessor(" << string << ", " << (field.type.has_own 
? "true" : "false")  << ");\n")
+   .generate(sink, std::make_tuple(field_name, field_name), 
context))
+ return false;
+}
   else if ((complex && (complex->outer.base_type == "hash"))
 || field.type.c_type == "Eina_Binbuf *" || field.type.c_type == 
"const Eina_Binbuf *")
 {
diff --git a/src/tests/efl_mono/StructHelpers.cs 
b/src/tests/efl_mono/StructHelpers.cs
index 0ce836a332..b6ceac4bd8 100644
--- a/src/tests/efl_mono/StructHelpers.cs
+++ b/src/tests/efl_mono/StructHelpers.cs
@@ -151,6 +151,7 @@ internal class StructHelpers
 Fhash["cc"] = "ccc";
 
 var Fiterator = ((Eina.Array)Farray).GetIterator();
+var Faccessor = ((Eina.Array)Farray).GetAccessor();
 
 var Fany_value = new Eina.Value(Eina.ValueType.Double);
 Fany_value.Set(-9007199254740992.0);
@@ -167,9 +168,18 @@ internal class StructHelpers
 var Fobj = new Dummy.Numberwrapper();
 Fobj.Number = 42;
 
-return new Dummy.StructComplex(farray: Farray, flist: Flist, fhash: 
Fhash,
-fiterator: Fiterator, fanyValue:Fany_value, fanyValueRef: 
Fany_value_ref,
-fbinbuf: Fbinbuf, fslice:Fslice, fobj: Fobj);
+return new 

[EGIT] [core/efl] master 01/01: eolian-mono: Make Get/Set internal for generated properties

2020-02-18 Thread Felipe Magno de Almeida
felipealmeida pushed a commit to branch master.

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

commit 595cb754b3aa280cdbebcb5fa0c51f287099b713
Author: Felipe Magno de Almeida 
Date:   Thu Jan 30 16:49:04 2020 -0300

eolian-mono: Make Get/Set internal for generated properties

Make Get and Set methods internal for properties that get the
property syntax generated.

Reviewed-by: João Paulo Taylor Ienczak Zanette 

Differential Revision: https://phab.enlightenment.org/D11252
---
 .../eolian/mono/async_function_definition.hh   |   5 +-
 src/bin/eolian_mono/eolian/mono/documentation.hh   | 174 --
 .../eolian_mono/eolian/mono/function_definition.hh |  96 --
 src/bin/eolian_mono/eolian/mono/helpers.hh | 106 ++
 src/bin/eolian_mono/eolian/mono/klass.hh   |  45 ++-
 src/bin/eolian_mono/eolian/mono/parameter.hh   |  33 ++
 .../eolian_mono/eolian/mono/property_definition.hh | 383 +
 src/bindings/cxx/eina_cxx/eina_variant.hh  | 239 -
 src/bindings/mono/efl_mono/GenericModel.cs |  24 +-
 src/bindings/mono/eo_mono/EoWrapper.cs |   2 +-
 src/lib/eolian_cxx/grammar/context.hpp |  25 +-
 src/tests/efl_mono/Eina.cs | 258 +++---
 src/tests/efl_mono/EinaTestData.cs |  30 +-
 src/tests/efl_mono/Eo.cs   |  45 +--
 src/tests/efl_mono/Events.cs   |   8 +-
 src/tests/efl_mono/Model.cs|   2 +-
 src/tests/efl_mono/Parts.cs|   8 +-
 src/tests/efl_mono/StructHelpers.cs|   4 +-
 18 files changed, 1200 insertions(+), 287 deletions(-)

diff --git a/src/bin/eolian_mono/eolian/mono/async_function_definition.hh 
b/src/bin/eolian_mono/eolian/mono/async_function_definition.hh
index bc0bb6863a..3fddb03780 100644
--- a/src/bin/eolian_mono/eolian/mono/async_function_definition.hh
+++ b/src/bin/eolian_mono/eolian/mono/async_function_definition.hh
@@ -36,6 +36,7 @@
 #include "using_decl.hh"
 #include "generation_contexts.hh"
 #include "blacklist.hh"
+#include "documentation.hh"
 
 namespace eolian_mono {
 
@@ -71,8 +72,10 @@ struct async_function_declaration_generator
 if(f.scope != attributes::member_scope::scope_public)
   return true;
 
+auto ref = documentation_generator::function_conversion (f, context);
+
 if (!as_generator(
-scope_tab(2) << "/// Async wrapper for .\n"
+scope_tab(2) << "/// Async wrapper for .\n"
 ).generate(sink, attributes::unused, context))
   return false;
 
diff --git a/src/bin/eolian_mono/eolian/mono/documentation.hh 
b/src/bin/eolian_mono/eolian/mono/documentation.hh
index d15f91437d..eac5e1a179 100644
--- a/src/bin/eolian_mono/eolian/mono/documentation.hh
+++ b/src/bin/eolian_mono/eolian/mono/documentation.hh
@@ -23,6 +23,7 @@
 #include "name_helpers.hh"
 #include "generation_contexts.hh"
 #include "blacklist.hh"
+#include "property_definition.hh"
 
 #include 
 
@@ -76,7 +77,8 @@ struct documentation_generator
// The name_tail parameter is the last 4 chars of the original string, which
// could be ".set" or ".get" and in this case they are ignored by Eolian.
// We want them to know what the documentation intended to reference.
-   static std::string function_conversion(const ::Eolian_Object *klass, const 
::Eolian_Function *function, std::string name_tail)
+   template 
+   static std::string function_conversion(const ::Eolian_Object *klass, const 
::Eolian_Function *function, std::string name_tail, Context const& context)
{
   ::Eolian_Function_Type ftype = ::eolian_function_type_get(function);
   const char* eo_name = ::eolian_function_name_get(function);
@@ -113,26 +115,65 @@ struct documentation_generator
name += name_helpers::managed_method_name({function, ftype, NULL, 
eolian_object_unit_get(EOLIAN_OBJECT(function))});
break;
  case ::EOLIAN_PROP_SET:
-   name += ".Set";
-   name += name_helpers::property_managed_name(klass_d, eo_name);
-   break;
  case ::EOLIAN_PROP_GET:
-   name += ".Get";
-   name += name_helpers::property_managed_name(klass_d, eo_name);
-   break;
  case ::EOLIAN_PROPERTY:
+ {
+   efl::eina::optional getter_func;
+   efl::eina::optional setter_func;
+   auto unit = (const Eolian_Unit*) 
context_find_tag(context).state;
+   if (ftype == ::EOLIAN_PROPERTY || ftype == ::EOLIAN_PROP_GET)
+ getter_func = attributes::function_def{function, 
::EOLIAN_PROP_GET, nullptr, unit};
+   if (ftype == ::EOLIAN_PROPERTY || ftype == ::EOLIAN_PROP_SET)
+ setter_func = attributes::function_def{function, 
::EOLIAN_PROP_SET, nullptr, unit};  
+   attributes::property_def property{function, getter_func, 
setter_func, 

[EGIT] [core/efl] master 01/01: Revert "canvas mask: fix incorrect render surface size."

2020-02-18 Thread ChunEon Park
hermet pushed a commit to branch master.

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

commit d00dadb79ab1c216ecc0519716ca25a1f92c3632
Author: Hermet Park 
Date:   Tue Feb 18 20:07:08 2020 +0900

Revert "canvas mask: fix incorrect render surface size."

This reverts commit e3af5eb27f70edf531d5d8de3e3f2c940536d396.

Seems previous is correct. My misunderstanding.
---
 src/lib/evas/canvas/evas_render.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_render.c 
b/src/lib/evas/canvas/evas_render.c
index 1cc0232692..aba4103907 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -2622,7 +2622,7 @@ evas_render_mask_subrender(Evas_Public_Data *evas,
// Unreachable code until we implement support for smart masks
evas_render_mapped(evas, mask->object, mask, ctx,
   output, mdata->surface,
-  -x, -y, 2, 0, 0, w, h,
+  -x, -y, 2, 0, 0, evas->output.w, 
evas->output.h,
   NULL, level, do_async);
 }
   ENFN->context_free(ENC, ctx);

-- 




[EGIT] [core/enlightenment] master 02/02: personal app editor - force size up to be sanely sized for use

2020-02-18 Thread Carsten Haitzler
raster pushed a commit to branch master.

http://git.enlightenment.org/core/enlightenment.git/commit/?id=3a3257e7898d860dcedee8817fc8e0ddc08e3558

commit 3a3257e7898d860dcedee8817fc8e0ddc08e3558
Author: Carsten Haitzler (Rasterman) 
Date:   Tue Feb 18 10:55:45 2020 +

personal app editor - force size up to be sanely sized for use
---
 src/bin/e_desktop_editor.c| 15 ++-
 .../conf_applications/e_int_config_apps_personal.c| 11 ---
 2 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/src/bin/e_desktop_editor.c b/src/bin/e_desktop_editor.c
index d010b2c7e..7a42deb81 100644
--- a/src/bin/e_desktop_editor.c
+++ b/src/bin/e_desktop_editor.c
@@ -707,6 +707,13 @@ _e_desktop_edit_basic_create_widgets(E_Config_Dialog *cfd 
EINA_UNUSED, Evas *eva
 
ot = e_widget_table_add(e_win_evas_win_get(evas), 0);
 
+   o = evas_object_rectangle_add(evas);
+   evas_object_color_set(o, 0, 0, 0, 0);
+   evas_object_pass_events_set(o, EINA_TRUE);
+   mw = 200 * e_scale; mh = 80 * e_scale;
+   evas_object_size_hint_min_set(o, mw, mh);
+   e_widget_table_object_append(ot, o, 1, 4, 1, 1, 1, 1, 1, 1);
+
o = e_widget_label_add(evas, _("Name"));
e_widget_table_object_append(ot, o, 0, 0, 1, 1, 1, 1, 0, 0);
 
@@ -755,10 +762,16 @@ _e_desktop_edit_basic_create_widgets(E_Config_Dialog *cfd 
EINA_UNUSED, Evas *eva
 
ot = e_widget_table_add(e_win_evas_win_get(evas), 0);
 
+   o = evas_object_rectangle_add(evas);
+   evas_object_color_set(o, 0, 0, 0, 0);
+   evas_object_pass_events_set(o, EINA_TRUE);
+   mw = 160 * e_scale; mh = 160 * e_scale;
+   evas_object_size_hint_min_set(o, mw, mh);
+   e_widget_table_object_append(ot, o, 0, 0, 2, 1, 1, 1, 1, 1);
+
editor->img_widget = e_widget_button_add
(evas, "", NULL, _e_desktop_editor_cb_icon_select, cfdata, editor);
_e_desktop_editor_icon_update(cfdata);
-   e_widget_size_min_set(editor->img_widget, 192, 192);
 
e_widget_table_object_append(ot, editor->img_widget, 0, 0, 2, 1, 1, 1, 1, 
1);
 
diff --git a/src/modules/conf_applications/e_int_config_apps_personal.c 
b/src/modules/conf_applications/e_int_config_apps_personal.c
index 84b854c0c..30cda9525 100644
--- a/src/modules/conf_applications/e_int_config_apps_personal.c
+++ b/src/modules/conf_applications/e_int_config_apps_personal.c
@@ -74,15 +74,20 @@ _basic_create(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata)
Evas_Coord mw, mh;
 
e_dialog_resizable_set(cfd->dia, 1);
-   
+
of = e_widget_table_add(e_win_evas_win_get(evas), 0);
 
+   ob = evas_object_rectangle_add(evas);
+   evas_object_color_set(ob, 0, 0, 0, 0);
+   evas_object_pass_events_set(ob, EINA_TRUE);
+   mw = 260 * e_scale; mh = 200 * e_scale;
+   evas_object_size_hint_min_set(ob, mw, mh);
+   e_widget_table_object_append(of, ob, 0, 1, 2, 1, 1, 1, 1, 1);
+
li = e_widget_ilist_add(evas, 24, 24, NULL);
cfdata->obj.list = li;
e_widget_ilist_multi_select_set(li, EINA_TRUE);
e_widget_size_min_get(li, , );
-   if (mw < (200 * e_scale)) mw = 200 * e_scale;
-   if (mh < (160 * e_scale)) mh = 160 * e_scale;
e_widget_size_min_set(li, mw, mh);
e_widget_on_change_hook_set(li, _widget_list_selection_changed, cfdata);
e_widget_table_object_append(of, li, 0, 1, 2, 1, 1, 1, 1, 1);

-- 




[EGIT] [core/enlightenment] master 01/02: e auth - use our memclear and fill it out with modern zeroing methods

2020-02-18 Thread Carsten Haitzler
raster pushed a commit to branch master.

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

commit a3ae1b0ac2db92d869a9f414532cd425ac2e09a7
Author: Carsten Haitzler (Rasterman) 
Date:   Tue Feb 18 10:25:23 2020 +

e auth - use our memclear and fill it out with modern zeroing methods

so memset_s still doesn't get detected (add a check anyway), but there
are other alternatives, so detect and use them if found
(explicit_bzero, explicit_memset) in addition to the generally
"practically works" memset ptr method we had and.. just to be extra
safe add an asm memory barrier to this fallback. also.. mlock the
passwd memory in lokker (if it doesn't work - don't worry - there is
nothing we can do, so we did our best) to avoid this memory gettign
swapped etc.
---
 meson.build | 12 
 src/bin/e_auth.c|  6 ++
 src/bin/e_utils.c   | 30 +-
 src/modules/lokker/lokker.c |  7 +++
 4 files changed, 38 insertions(+), 17 deletions(-)

diff --git a/meson.build b/meson.build
index 3d53a720c..e62aa3cb2 100644
--- a/meson.build
+++ b/meson.build
@@ -186,6 +186,18 @@ if cc.has_header('execinfo.h') == true
 elif cc.has_function('backtrace_symbols_fd', dependencies: 'execinfo') == false
   execinfo_dep = dependency('execinfo', required: false)
 endif
+if cc.has_function('explicit_bzero') == true
+  config_h.set('HAVE_EXPLICIT_BZERO'   , '1')
+endif
+if cc.has_function('explicit_memset') == true
+  config_h.set('HAVE_EXPLICIT_MEMSET'  , '1')
+endif
+if cc.has_function('memset_s') == true
+  config_h.set('HAVE_MEMSET_S' , '1')
+endif
+if cc.has_function('mlock') == true
+  config_h.set('HAVE_MLOCK', '1')
+endif
 
 if cc.has_header('fnmatch.h') == false
   error('fnmatch.h not found')
diff --git a/src/bin/e_auth.c b/src/bin/e_auth.c
index 92670f5d3..3fdb2eec7 100644
--- a/src/bin/e_auth.c
+++ b/src/bin/e_auth.c
@@ -3,7 +3,7 @@
 E_API int
 e_auth_begin(char *passwd)
 {
-   char buf[PATH_MAX], *p;
+   char buf[PATH_MAX];
Ecore_Exe *exe = NULL;
int ret = 0;
size_t pwlen;
@@ -31,9 +31,7 @@ e_auth_begin(char *passwd)
 out:
if (exe) ecore_exe_free(exe);
 
-   /* security - null out passwd string once we are done with it */
-   for (p = passwd; *p; p++) *p = 0;
-   if (passwd[rand() % pwlen]) fprintf(stderr, "ACK!\n");
+   e_util_memclear(passwd, pwlen);
return ret;
 }
 
diff --git a/src/bin/e_utils.c b/src/bin/e_utils.c
index 8117e22f3..96c067989 100644
--- a/src/bin/e_utils.c
+++ b/src/bin/e_utils.c
@@ -1458,25 +1458,29 @@ e_util_evas_objects_above_print_smart(Evas_Object *o)
  }
 }
 
-/*
- * NOTICE: This function should not be used by external modules!!!
- *
- * This function is just a hack to allow us to "securely" clear sensitive
- * info until memset_s() is readily available, or at least we move this hack
- * to Eina.
- *
- * This is going to work until link time optimizations are good enough.
- * Hopefully by then, we'll be able to properly use memset_s().
- */
-static void *(* const volatile memset_ptr)(void *, int, size_t) = memset;
+#if   defined(HAVE_MEMSET_S)
+#elif defined(HAVE_EXPLICIT_BZERO)
+#elif defined(HAVE_EXPLICIT_MEMSET)
+#else
+void *(* const volatile __memset_ptr)(void *, int, size_t) = memset;
+#endif
 
 E_API void
 e_util_memclear(void *s, size_t n)
 {
-   memset_ptr(s, 0, n);
+   if (n == 0) return;
+#if   defined(HAVE_MEMSET_S)
+   memset_s(s, n, 0, n);
+#elif defined(HAVE_EXPLICIT_BZERO)
+   explicit_bzero(s, n);
+#elif defined(HAVE_EXPLICIT_MEMSET)
+   explicit_memset(s, 0, n);
+#else
+   __memset_ptr(s, 0, n);
+   __asm__ __volatile__("": :"r"(s) : "memory");
+#endif
 }
 
-
 E_API Ecore_Exe *
 e_util_open(const char *exe, void *data)
 {
diff --git a/src/modules/lokker/lokker.c b/src/modules/lokker/lokker.c
index aa0e7e482..f52ceae1c 100644
--- a/src/modules/lokker/lokker.c
+++ b/src/modules/lokker/lokker.c
@@ -1,4 +1,5 @@
 #include "e_mod_main.h"
+#include 
 
 #define PASSWD_LEN256
 
@@ -858,6 +859,9 @@ lokker_lock(void)
  }
edd = E_NEW(Lokker_Data, 1);
if (!edd) return EINA_FALSE;
+#ifdef HAVE_MLOCK
+   mlock(edd, sizeof(Lokker_Data));
+#endif
 
E_LIST_FOREACH(e_comp->zones, _lokker_popup_add);
total_zone_num = eina_list_count(e_comp->zones);
@@ -881,5 +885,8 @@ lokker_unlock(void)
E_FREE_LIST(edd->handlers, ecore_event_handler_del);
if (edd->move_handler) ecore_event_handler_del(edd->move_handler);
 
+#ifdef HAVE_MLOCK
+   munlock(edd, sizeof(Lokker_Data));
+#endif
E_FREE(edd);
 }

-- 




[EGIT] [core/efl] master 01/01: canvas mask: fix incorrect render surface size.

2020-02-18 Thread ChunEon Park
hermet pushed a commit to branch master.

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

commit e3af5eb27f70edf531d5d8de3e3f2c940536d396
Author: Hermet Park 
Date:   Tue Feb 18 19:09:16 2020 +0900

canvas mask: fix incorrect render surface size.

This render context works on a mask surface,
Size should be mask's own, not canvas output size.

@fix
---
 src/lib/evas/canvas/evas_render.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/lib/evas/canvas/evas_render.c 
b/src/lib/evas/canvas/evas_render.c
index aba4103907..1cc0232692 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -2622,7 +2622,7 @@ evas_render_mask_subrender(Evas_Public_Data *evas,
// Unreachable code until we implement support for smart masks
evas_render_mapped(evas, mask->object, mask, ctx,
   output, mdata->surface,
-  -x, -y, 2, 0, 0, evas->output.w, 
evas->output.h,
+  -x, -y, 2, 0, 0, w, h,
   NULL, level, do_async);
 }
   ENFN->context_free(ENC, ctx);

--