示例#1
0
文件: tst-cmp.c 项目: bminor/glibc
static int
strncasecmp_terminator (const char *left, const char *right)
{
  size_t left_len = strlen (left);
  size_t right_len = strlen (right);
  return strncasecmp (left, right, max_size_t (left_len, right_len));
}
示例#2
0
size_t Types_GetSizeOf(const tType *Type)
{
	// TODO: machine sizes
	switch(Type->Class)
	{
	case TYPECLASS_VOID:
		return 0;
	case TYPECLASS_INTEGER:
		switch(Type->Integer.Size)
		{
		case INTSIZE_BOOL:	return 1;
		case INTSIZE_CHAR:	return 1;
		case INTSIZE_SHORT:	return 2;
		case INTSIZE_INT:	return 4;
		case INTSIZE_LONG:	return 4;
		case INTSIZE_LONGLONG:	return 8;
		}
		break;
	case TYPECLASS_REAL:
		switch(Type->Real.Size)
		{
		case FLOATSIZE_FLOAT:
			return 4;
		case FLOATSIZE_DOUBLE:
			return 8;
		case FLOATSIZE_LONGDOUBLE:
			return 10;
		}
		break;
	case TYPECLASS_POINTER:
		return 4;
	case TYPECLASS_ARRAY:
		return Type->Array.Count * Types_GetSizeOf(Type->Array.Type);
	case TYPECLASS_STRUCTURE: {
		size_t	ret = 0;
		for(int i = 0; i < Type->StructUnion->nFields; i ++ )
			ret += Types_GetSizeOf(Type->StructUnion->Entries[i].Type);
		return ret; }
	case TYPECLASS_UNION: {
		size_t	ret = 0;
		for(int i = 0; i < Type->StructUnion->nFields; i ++ )
			ret = max_size_t(ret, Types_GetSizeOf(Type->StructUnion->Entries[i].Type));
		return ret; }
	case TYPECLASS_ENUM:
		if( Type->Enum->Max == 0 )
			return 0;
		if( Type->Enum->Max < 256 )
			return 1;
		if( Type->Enum->Max < 256*256 )
			return 2;
		return 4;
	case TYPECLASS_FUNCTION:
		// Function can't be 'sizeof'd
		return 0;
	}
	return 0;
}