On Wed, Jul 28, 2010 at 8:23 PM, Stephen Houston <unixti...@gmail.com>wrote:

>
>
> On Wed, Jul 28, 2010 at 8:18 PM, Gustavo Sverzut Barbieri <
> barbi...@profusion.mobi> wrote:
>
>> On Wed, Jul 28, 2010 at 10:05 PM, Stephen Houston <unixti...@gmail.com>
>> wrote:
>> > On Wed, Jul 28, 2010 at 6:33 PM, Gustavo Sverzut Barbieri
>> > <barbi...@profusion.mobi> wrote:
>> >>
>> >> On Wed, Jul 28, 2010 at 7:12 PM, Enlightenment SVN
>> >> <no-re...@enlightenment.org> wrote:
>> >> > Log:
>> >> >  Add the ability to perform standard IO operations on a file in a
>> >> > thread.
>> >> > +#define EIO_FILE_MOD_TIME    1
>> >> > +#define EIO_FILE_SIZE        2
>> >> > +#define EIO_FILE_EXISTS      4
>> >> > +#define EIO_FILE_IS_DIR      8
>> >> > +#define EIO_FILE_CAN_READ    16
>> >> > +#define EIO_FILE_CAN_WRITE   32
>> >> > +#define EIO_FILE_CAN_EXECUTE 64
>> >>
>> >> You should provide some EIO_FILE_STAT, to return the whole stat
>> >> result, maybe that is more useful than doing it separated for size,
>> >> exists... you can leave what you did, but also provide the generic
>> >> function as people will consult more than one property at time.
>> >
>> > I left that out because you can specify as many of the operations as you
>> > want anyway.
>>
>> You force people to define many callbacks, or one with a big switch
>> that is called multiple times. Still you don't provide other stat
>> information that may be useful, like owner, mode...
>>
>> Right.  What I put in now just covers what was in ecore_file.  With it
> being the flag style, it is obviously intended to grow in capabilities  :)
>  I think a full stat flag is reasonable and I will add it.
>
>>
>> >> Also, why not make it an enum?
>> >
>> > It was an enum originally, but cedric thought bit flags would be better.
>>
>> BAD cedric ;-)
>>
>
> I tend to agree with Cedric though.  Enums are intended to be used as
> states or single options.  Bit flags are better for specifying multiple
> flags.
>
>>
>> In fact after talking with several people in #edevelop, bit flags seem to
be the consensus.

>
>>
>> >> > +static void
>> >> > +_eio_file_op_end(void *data)
>> >> > +{
>> >> > +   Eio_File_Op *async;
>> >> > +
>> >> > +   async = data;
>> >>
>> >> Just do Eio_File_Op *async = data, it is smaller and makes sense as
>> >> you're just converting the parameter.
>> >>
>> > Ahhh the E formatting... :(
>>
>> strictly it is not e formatting, raster uses what you did, but it just
>> adds lines to code, and leads to easier "unused variable" errors for
>> no good.
>>
>>
>>
>> >> > +   if (!async->exists)
>> >> > +     {
>> >> > +        if (async->flags & EIO_FILE_EXISTS == EIO_FILE_EXISTS)
>> >> > +          async->main_cb((void *)EINA_FALSE, EIO_FILE_EXISTS, data);
>> >> > +        ecore_thread_cancel(async->common.thread);
>> >> > +        return;
>> >> > +     }
>> >>
>> >> I don't like this, you don't return anything for CAN_READ, CAN_WRITE
>> >> and others in the case it does not exists? Not even an error?   IMO
>> >> the user should always get called back, with an error whenever
>> >> appropriate. Or call error_cb if there were requirement not fulfilled.
>> >>
>> >> also a bug there: the last parameter is USER data, not the one you got
>> >> from the callback ("async"), you really want: async->common.data
>> >> instead!
>> >>
>> > Actually CAN_READ CAN_WRITE and CAN_EXECUTE will return error if the
>> file
>> > doesn't exist (see if (!async->exists)). Otherwise is EINA_TRUE or
>> > EINA_FALSE as to whether it can do those.  Good catch on the bug.
>>
>> I fail to see how they will return error, if the file did not exist,
>> then it will report for EIO_FILE_EXISTS and return :-/
>>
>>
>>
>>
>> >> > +   if (async->flags & EIO_FILE_EXISTS == EIO_FILE_EXISTS)
>> >> > +     async->main_cb((void *)EINA_TRUE, EIO_FILE_EXISTS, data);
>> >>
>> >> this is ugly and took me a while to notice why you did the EINA_TRUE
>> >> constant here... it was because of the other test before. And really,
>> >> why not call this one first?
>> >>
>> > I'm not sure what you are getting at here? It returns FALSE if it
>> doesn't
>> > exists, and TRUE if it does.  The reason the FALSE is called first is
>> > because the app will seg if any other operations are done on a file that
>> > doesn't exists.
>>
>> I did notice that, but it took some time as at first it looked like a
>> bug "he should use the variable and not a constant!", then I noticed
>> the other case was handled before.
>>
>> what I meant to call this one first, is that we should dispatch the
>> EIO_FILE_EXISTS before dispatching CAN_READ, CAN_WRITE...
>>
>>
>>
>> --
>> Gustavo Sverzut Barbieri
>> http://profusion.mobi embedded systems
>> --------------------------------------
>> MSN: barbi...@gmail.com
>> Skype: gsbarbieri
>> Mobile: +55 (19) 9225-2202
>>
>
>
------------------------------------------------------------------------------
The Palm PDK Hot Apps Program offers developers who use the
Plug-In Development Kit to bring their C/C++ apps to Palm for a share
of $1 Million in cash or HP Products. Visit us here for more details:
http://p.sf.net/sfu/dev2dev-palm
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to