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

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

 



On Mon, 25 Feb 2008, Shawn O. Pearce wrote:

> > 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".

Actually, the reason for OBJ_BAD is possibly even more subtle than that.  
It is "documented" in commit fef742c4ed though.

The idea is for some function returning an object type to also be able 
to return an error condition without the overhead and/or hassle of a 
separate argument.  So the object space is returned as a positive value, 
and error space is negative.  The only purpose of OBJ_BAD was to make 
sure object_type is a signed type in order to avoid issues with 
compilers which might interpret the C standard in a way that would 
reduce the enum to its minimal expression such as some "signedlessness".


Nicolas
-
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