[Asterisk-Dev] Asterisk support for Solaris 10 X86

Steve Drach sdrach at gmail.com
Tue Aug 2 14:07:59 MST 2005


> The bit that stops it compiling on Solaris is the implementation of vasprintf()
> in utils.c - as far as I can see, it's only used once, in cli.c

And in res_agi.c

> It didn't want to compile because the varargs stuff seemed to be completely
> wrong for solaris.

Yes. it's very broken in several places.  It has a memory leak also.
I've fixed and tested it.

> But, whatever combination of tmp size and the '20' in the first vsnprintf,
> it always coredumps when it runs at the moment. I'm not a varargs expert, so
> I got a bit bogged down in trying to fix it.

It's not obvious to me why you get the core dump, but you are on the
right track.  It turns out Solaris 9 and below implement SUSv2 (Single
Unix Specification) and Solaris 10 implements SUSv3, and the semantics
of vsnprintf have changed between the two versions.  The following
code compiles and executes on Solaris 9/10 x86/sparc.  I will submit a
formal patch in a few minutes:

int vasprintf(char **strp, const char *fmt, va_list ap)
{
	int size;
	va_list ap2;
	char s;

	*strp = NULL;
	va_copy(ap2, ap);
	size = vsnprintf(&s, 1, fmt, ap2);
	va_end(ap2);
	*strp = malloc(size + 1);
	if (!*strp)
		return -1;
	vsnprintf(*strp, size + 1, fmt, ap);
	free(*strp);

	return size;
}



More information about the asterisk-dev mailing list