TRIO_PRIVATE BOOLEAN_T TrioReadPointer TRIO_ARGS3((self, target, flags), trio_class_t* self,
                                                  trio_pointer_t* target, trio_flags_t flags)
{
	trio_uintmax_t number;
	char buffer[sizeof(internalNullString)];

	flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE | FLAGS_NILPADDING);

	if (TrioReadNumber(self, &number, flags, POINTER_WIDTH, BASE_HEX))
	{
		if (target)
		{
#if defined(TRIO_COMPILER_GCC) || defined(TRIO_COMPILER_MIPSPRO)
			/*
			 * The strange assignment of number is a workaround for a compiler
			 * warning
			 */
			*target = &((char*)0)[number];
#else
			*target = (trio_pointer_t)number;
#endif
		}
		return TRUE;
	}
	else if (TrioReadString(self, (flags & FLAGS_IGNORE) ? NULL : buffer, 0,
	                        sizeof(internalNullString) - 1))
	{
		if (trio_equal_case(buffer, internalNullString))
		{
			if (target)
				*target = NULL;
			return TRUE;
		}
	}
	return FALSE;
}
TRIO_PRIVATE BOOLEAN_T TrioReadPointer TRIO_ARGS3((self, target, flags), trio_class_t* self,
                                                  trio_pointer_t* target, trio_flags_t flags)
{
	trio_uintmax_t number;
	char buffer[sizeof(internalNullString)];

	flags |= (FLAGS_UNSIGNED | FLAGS_ALTERNATIVE | FLAGS_NILPADDING);

	if (TrioReadNumber(self, &number, flags, POINTER_WIDTH, BASE_HEX))
	{
		if (target)
		{
#if defined(TRIO_COMPILER_GCC) || defined(TRIO_COMPILER_MIPSPRO)
			 
			*target = &((char*)0)[number];
#else
			*target = (trio_pointer_t)number;
#endif
		}
		return TRUE;
	}
	else if (TrioReadString(self, (flags & FLAGS_IGNORE) ? NULL : buffer, 0,
	                        sizeof(internalNullString) - 1))
	{
		if (trio_equal_case(buffer, internalNullString))
		{
			if (target)
				*target = NULL;
			return TRUE;
		}
	}
	return FALSE;
}