Re: [PATCH 7/8] Psmouse - add packet size

Dmitry Torokhov
2004-09-29T13:26:40Z

On Wednesday 29 September 2004 04:31 am, Vojtech Pavlik wrote:
> On Wed, Sep 29, 2004 at 02:29:28AM -0500, Dmitry Torokhov wrote:
> > On Wednesday 29 September 2004 02:15 am, Vojtech Pavlik wrote:
> > > On Wed, Sep 29, 2004 at 01:47:34AM -0500, Dmitry Torokhov wrote:
> > >
> > > > -int alps_detect(struct psmouse *psmouse)
> > > > +int alps_detect(struct psmouse *psmouse, int set_properties)
> > > > {
> > > > - return alps_get_model(psmouse) < 0 ? 0 : 1;
> > > > + if (alps_get_model(psmouse) < 0)
> > > > + return 0;
> > > > +
> > > > + if (set_properties) {
> > > > + psmouse->vendor = "ALPS";
> > > > + psmouse->name = "TouchPad";
> > > > + }
> > > > + return 1;
> > > > }
> > >
> > > I think we should return -1 (or -errno) on failure and 0 on success,
> > > like everybody else does.
> > >
> >
> > All *detect functions return boolean value - either the device was detected or
> > not. I think it makes most sense. Negative error is convenient when function
> > normally returns some other meaningful value, like length. *detect is a simple
> > yes/no question, it is not really an error at all.
>
> psmouse_probe() is very similar in its use, as are a lot of other
> functions in the serio framework - and they return 0 on success, and -1
> on failure.
>
> I see it as "detected/initialized" = success (0) and "not detected / failed
> to initialize" = fail (-1).
>
> I agree that your view also makes sense, however I'd like to keep the
> driver return values consistent to make it easier to read.
>

I have been battling with myself about whether to keep them consistent
with probe/init or make them as they are today... My issue with
*detect returning -1 on failure is that the caller's code will look
like:

if (max_proto >= PSMOUSE_IMPS && !intellimouse_detect(psmouse, set_properties))
return PSMOUSE_IMPS;

or

if (max_proto >= PSMOUSE_IMPS && intellimouse_detect(psmouse, set_properties) == 0)
return PSMOUSE_IMPS;

which does not flow for me when I read the code. With pretty much every
other function caller checks for negative and exits in case of error, it
reads naturally as well. Here with multiple btanches I go "... and
intellimouse is NOT detected... oh, wait, it IS detected..."

Oh, well. I guess I will convert them... unless I managed to presuade you
to keep them as is ;).

--
Dmitry