avoid objc_skip_offset()

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@29814 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Richard Frith-MacDonald 2010-03-01 10:34:35 +00:00
parent f710cb72e9
commit 7b12d4cc8e
4 changed files with 29 additions and 13 deletions

View file

@ -804,13 +804,13 @@ gs_protocol_selector(const char *types)
} }
while (*types != '\0') while (*types != '\0')
{ {
if (*types == '-') if (*types == '+' || *types == '-')
{ {
types++; types++;
} }
if (*types == '+' || isdigit(*types)) while(isdigit(*types))
{ {
types = objc_skip_offset(types); types++;
} }
while (*types == _C_CONST || *types == _C_GCINVISIBLE) while (*types == _C_CONST || *types == _C_GCINVISIBLE)
{ {

View file

@ -496,13 +496,13 @@ gs_protocol_selector(const char *types)
} }
while (*types != '\0') while (*types != '\0')
{ {
if (*types == '-') if (*types == '+' || *types == '-')
{ {
types++; types++;
} }
if (*types == '+' || isdigit(*types)) while(isdigit(*types))
{ {
types = objc_skip_offset(types); types++;
} }
while (*types == _C_CONST || *types == _C_GCINVISIBLE) while (*types == _C_CONST || *types == _C_GCINVISIBLE)
{ {

View file

@ -137,12 +137,28 @@ const char *
NSGetSizeAndAlignment(const char *typePtr, NSGetSizeAndAlignment(const char *typePtr,
NSUInteger *sizep, NSUInteger *alignp) NSUInteger *sizep, NSUInteger *alignp)
{ {
typePtr = objc_skip_offset (typePtr); if (typePtr != NULL)
{
/* Skip any offset, but don't call objc_skip_offset() as that's buggy.
*/
if (*typePtr == '+' || *typePtr == '-')
{
typePtr++;
}
while (isdigit(*typePtr))
{
typePtr++;
}
typePtr = objc_skip_type_qualifiers (typePtr); typePtr = objc_skip_type_qualifiers (typePtr);
if (sizep) if (sizep)
{
*sizep = objc_sizeof_type (typePtr); *sizep = objc_sizeof_type (typePtr);
}
if (alignp) if (alignp)
{
*alignp = objc_alignof_type (typePtr); *alignp = objc_alignof_type (typePtr);
}
}
return typePtr; return typePtr;
} }