Fisrt, I must thank you for this review. It's really nice you took the necessary time to do it and so quickly. Thanks a lot !
On Sunday 16 September 2007 01:29:11 Gustavo Sverzut Barbieri wrote: > On 9/15/07, Cedric BAIL <[EMAIL PROTECTED]> wrote: > > During my testing of Ecore_Con, I found some little bug when you are > > doing multiple download simultaneously : > > > > - The data buffer we are receiving must be copied, or it could be > > reused by curl and we will receive garbage in the event handler. - > > Sometime the complete event show up before we receive the last chunk of > > data. I put all the complete event inside a list and the event are send > > inside an ecore_idler. > > > > I also added some functionnality : > > - Use ECORE_MAGIC. > > - The status code is no longer curl internal status, but ftp or > > http return code (I think it's more usefull than CURLE_OK). - You can now > > add a time condition on you requested url (see HTTP code 304). - Normally > > we must receive progress events also (I admit I didn't test if it worked > > fine, but it should). > > > > I used this modified ecore_con_url to developpe a library downloading > > file in a cache directory cleanly. I needed to include it inside Ecore as > > I wanted to use some ecore private facility like ECORE_MAGIC. I attached > > the patch if people are interested. > > + struct _Ecore_Con_Event_Url_Progress_Download > + { > + Ecore_Con_Url *url_con; > + double total; > + double now; > + }; > + > + struct _Ecore_Con_Event_Url_Progress_Upload > + { > + Ecore_Con_Url *url_con; > + double total; > + double now; > + }; > > You should made just one struct/typedef and IF required at later > point, you can "inherit" this structure and add more fields for one > specific case... but I don't think it will be required. You are right. > + char active : 1; > > it will cause bug with newer compilers, it should be "unsigned char" > otherwise the unique bit will be used for the signal, thus comparisons > would be "active == -1" not "active == 1". Didn't know that. Will fix. > +struct _litle_ecore_con_url_event_s > > typo: s/litle/little/g ? > +static int > +_url_complete_idler_cb(void *data) > +{ > + _litle_ecore_con_url_event_t *lev; > + > + ecore_list_first_goto(_url_complete_list); > > Why don't you remove this "_url_complete_list" altogether and use > "data" parameter to provide the "lev"? This way you use the idler's > list (implicit list usage) and remove 2 globals since you don't need > _url_complete_list or even _url_complete_idler. Good question :) Will fix. > + ecore_idler_del(_url_complete_idler); > + _url_complete_idler = NULL; > + > + return 1; > +} > it's deleted automatically if you return "0", so this should work more > nicely: > _url_complete_idler = NULL; > return 0; > } > Or just remove _url_complete_idler if you use the way I said. Yep. > + ecore_list_append(_url_complete_list, lev); > + > + if (_url_complete_idler == NULL) > + _url_complete_idler = ecore_idler_add(_url_complete_idler_cb, NULL); > > using the data approach would reduce this to: > > ecore_idler_add(_url_complete_idler_cb, lev); > > much simpler :-) > > +EAPI void* > +ecore_con_url_data_set(Ecore_Con_Url *url_con, const void *data) > > I don't like the setter returning the old value too much, > ecore_evas_data_set() don't do that (API consistency). I don't know where I saw this. Will fix for ecore_con and ecore_download. > +EAPI void > +ecore_con_url_time(Ecore_Con_Url *url_con, Ecore_Con_Url_Time > condition, time_t tm) > > add "set" to the name? -> ecore_con_url_time_set() > @@ -256,18 +422,46 @@ > size_t real_size = size * nmemb; > > url_con = (Ecore_Con_Url *)userp; > - e = calloc(1, sizeof(Ecore_Con_Event_Url_Data)); > + e = calloc(1, sizeof(Ecore_Con_Event_Url_Data) + sizeof(char) * > real_size); if (e) > { > e->url_con = url_con; > - e->data = buffer; > + e->data = (void*) ((Ecore_Con_Event_Url_Data*)(e + 1)); > e->size = real_size; > + memcpy(e->data, buffer, real_size); > ecore_event_add(ECORE_CON_EVENT_URL_DATA, e, > - _ecore_con_event_url_data_free, NULL); > + _ecore_con_event_url_free, NULL); > } > return real_size; > } > > No, if you want to do that, modify Ecore_Con_Event_Url_Data to be: > > struct _Ecore_Con_Event_Url_Data { > Ecore_Con_Url *url_con; > int size; > unsigned char data[1]; > }; > > And allocation code (i don't see need for calloc()): > e = malloc(sizeof(Ecore_Con_Event_Url_Data) + sizeof(char) * > (real_size - 1)); > That's it, minor things but will look much better with them :-) Thanks for the review, I will fix them all and propose a new patch. Cedric ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel