Re: [PATCH 1/4] add generic, type aware object chain walker

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Martin Koegler <mkoegler@xxxxxxxxxxxxxxxxx> wrote:
> 
> What about
> #define OBJ_BAD -2

All of the other OBJ_* constants are declared in the enum
object_type, not as #defines.

See below for why this should not be <0.
 
> > After all, if the walker callback was told with
> > OBJ_ANY that any type of object is Ok, it should still say
> > "oops" if the given object said it actually is of type OBJ_BAD.
> > E.g. in your [2/4] patch:
> > 
> >         +static int mark_object(struct object *obj, int type, void *data)
> >         +{
> >         + ...
> >         +	if (type != OBJ_ANY && obj->type != type) {
> >         +		objerror(parent, "wrong object type in link");
> >         +	}
> > 
> > if you use the above #define, a tagged object that has a bad
> > type will pass this check unnoticed, won't it?
> 
> No, it wouldn't, as object->type is never initialized to OBJ_BAD:
> $ grep "OBJ_BAD" *.c *.h
> cache.h:        OBJ_BAD = -1,

Today that may be true.  OBJ_BAD was created for cases where the
internal object header parsing code in say sha1_file.c finds a type
code it doesn't recognize and wants to return it back to the caller.
This grew out of some of the early pack v4 work.

It actually happens today when a function that returns an object
type enum returns failure.  sha1_object_info() is one such function.
It returns "int" but that int is also really an enum object_type.
When that function fails it returns -1, which has it happens
is OBJ_BAD.

Subtle, yes.  But OBJ_BAD has meaning and is in use today.  Please do
not use it for "we don't care what it is".

-- 
Shawn.
-
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux