Thank you for taking care of this. However: - you broke the C# bindings. (efl_csharp_application.cs:108) - You forgot to annotate that the array has the ownership of the array (array<const(stringshare)> @owned; != (array<const(stringshare) @owned> @owned;
Greetings, bu5hm4n On 2/15/19 11:27 AM, Carsten Haitzler wrote: > raster pushed a commit to branch master. > > http://git.enlightenment.org/core/efl.git/commit/?id=8e98c7eef9cdc6b337841fdd11d5b2c8a3079067 > > commit 8e98c7eef9cdc6b337841fdd11d5b2c8a3079067 > Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com> > Date: Thu Feb 14 11:28:23 2019 +0000 > > cmdline iface - fix to consume input array AND strings totally > > strings often enough are generated e.g. via "%s/%s" or "%i" or similar > etc. ... i have poitned to examples, so move to make all strings > consistently stringshared, fix a bug added to the efl thread code > where it accessed and freed array even tho array was consumed (but not > strings) in the set, and the code used free to consume not > stringshare_del. fix other code and tests to match > > EXCTLY the kind of bugs and mistakes with this kind of design that i > said would happen more often just happened... > --- > src/lib/ecore/efl_core_command_line.c | 3 +++ > src/lib/ecore/efl_core_command_line.eo | 2 +- > src/lib/ecore/efl_loop.c | 5 ++++- > src/lib/ecore/efl_thread.c | 4 +--- > src/tests/ecore/efl_app_test_cml.c | 14 +++++++------- > 5 files changed, 16 insertions(+), 12 deletions(-) > > diff --git a/src/lib/ecore/efl_core_command_line.c > b/src/lib/ecore/efl_core_command_line.c > index 24cab90b0e..bd6d21f2d4 100644 > --- a/src/lib/ecore/efl_core_command_line.c > +++ b/src/lib/ecore/efl_core_command_line.c > @@ -223,6 +223,8 @@ _efl_core_command_line_command_array_set(Eo *obj > EINA_UNUSED, Efl_Core_Command_L > eina_stringshare_del(eina_array_pop(pd->command)); > eina_array_free(pd->command); > pd->command = NULL; > + for (;i < (array ? eina_array_count(array) : 0); ++i) > + eina_stringshare_del(content); > eina_array_free(array); > return EINA_FALSE; > } > @@ -236,6 +238,7 @@ _efl_core_command_line_command_array_set(Eo *obj > EINA_UNUSED, Efl_Core_Command_L > _remove_invalid_chars(param); > eina_array_push(pd->command, eina_stringshare_add(param)); > free(param); > + eina_stringshare_del(content); > } > pd->string_command = eina_strbuf_release(command); > pd->filled = EINA_TRUE; > diff --git a/src/lib/ecore/efl_core_command_line.eo > b/src/lib/ecore/efl_core_command_line.eo > index 436720d9bd..25b7c88b6e 100644 > --- a/src/lib/ecore/efl_core_command_line.eo > +++ b/src/lib/ecore/efl_core_command_line.eo > @@ -60,7 +60,7 @@ mixin @beta Efl.Core.Command_Line { > return : bool; [[On success $true, $false otherwise]] > } > values { > - array : array<string> @owned; [[An array where every array field is > an argument]] > + array : array<const(stringshare)> @owned; [[An array where every > array field is an argument]] > } > } > @property command_string { > diff --git a/src/lib/ecore/efl_loop.c b/src/lib/ecore/efl_loop.c > index 342a6f7725..1096c62bdb 100644 > --- a/src/lib/ecore/efl_loop.c > +++ b/src/lib/ecore/efl_loop.c > @@ -390,8 +390,11 @@ ecore_loop_arguments_send(int argc, const char **argv) > cml = eina_array_new(argc); > for (i = 0; i < argc; i++) > { > - Eina_Stringshare *arg = eina_stringshare_add(argv[i]); > + Eina_Stringshare *arg; > + > + arg = eina_stringshare_add(argv[i]); > eina_array_push(arga, arg); > + arg = eina_stringshare_add(argv[i]); > eina_array_push(cml, arg); > } > > diff --git a/src/lib/ecore/efl_thread.c b/src/lib/ecore/efl_thread.c > index a324af4f58..421c92dba7 100644 > --- a/src/lib/ecore/efl_thread.c > +++ b/src/lib/ecore/efl_thread.c > @@ -277,11 +277,9 @@ _efl_thread_main(void *data, Eina_Thread t) > it->func, it->user_data); > } > efl_core_command_line_command_array_set(obj, thdat->argv); > + thdat->argv = NULL; > efl_future_then(obj, efl_loop_job(obj), > .success = _efl_loop_arguments_send); > - > - while (thdat->argv && eina_array_count(thdat->argv)) > free(eina_array_pop(thdat->argv)); > - eina_array_free(thdat->argv); > free(thdat->event_cb); > thdat->event_cb = NULL; > > diff --git a/src/tests/ecore/efl_app_test_cml.c > b/src/tests/ecore/efl_app_test_cml.c > index 1b7cebf552..33024dabb8 100644 > --- a/src/tests/ecore/efl_app_test_cml.c > +++ b/src/tests/ecore/efl_app_test_cml.c > @@ -23,13 +23,13 @@ _construct_array(void) > { > Eina_Array *array = eina_array_new(16); > > - eina_array_push(array, "/bin/sh"); > - eina_array_push(array, "-C"); > - eina_array_push(array, "foo"); > - eina_array_push(array, "--test"); > - eina_array_push(array, "--option=done"); > - eina_array_push(array, "--"); > - eina_array_push(array, "asdf --test"); > + eina_array_push(array, eina_stringshare_add("/bin/sh")); > + eina_array_push(array, eina_stringshare_add("-C")); > + eina_array_push(array, eina_stringshare_add("foo")); > + eina_array_push(array, eina_stringshare_add("--test")); > + eina_array_push(array, eina_stringshare_add("--option=done")); > + eina_array_push(array, eina_stringshare_add("--")); > + eina_array_push(array, eina_stringshare_add("asdf --test")); > return array; > } > >
pEpkey.asc
Description: application/pgp-keys
_______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel