web commit by http://blakej.myopenid.com/
parent
c7f8c5fad1
commit
b4ee8390a7
|
@ -32,4 +32,42 @@ Thanks, Joey et al., for a really cool tool.
|
||||||
>> one that uses portable functions (safely), rather than one that includes
|
>> one that uses portable functions (safely), rather than one that includes
|
||||||
>> an asprintf implementation in ikiwiki. --[[Joey]]
|
>> an asprintf implementation in ikiwiki. --[[Joey]]
|
||||||
|
|
||||||
|
> I got ikiwiki working (sort of) on OpenSolaris today. I ran into this problem too, and wrote a version of asprintf() from scratch which uses more portable APIs:
|
||||||
|
|
||||||
|
<code>
|
||||||
|
#include <stdarg.h>
|
||||||
|
|
||||||
|
int
|
||||||
|
asprintf(char **string_ptr, const char *format, ...)
|
||||||
|
{
|
||||||
|
va_list arg;
|
||||||
|
char *str;
|
||||||
|
int size;
|
||||||
|
int rv;
|
||||||
|
|
||||||
|
va_start(arg, format);
|
||||||
|
size = vsnprintf(NULL, 0, format, arg);
|
||||||
|
size++;
|
||||||
|
va_start(arg, format);
|
||||||
|
str = malloc(size);
|
||||||
|
if (str == NULL) {
|
||||||
|
va_end(arg);
|
||||||
|
/*
|
||||||
|
* Strictly speaking, GNU asprintf doesn't do this,
|
||||||
|
* but the caller isn't checking the return value.
|
||||||
|
*/
|
||||||
|
fprintf(stderr, "failed to allocate memory\\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
rv = vsnprintf(str, size, format, arg);
|
||||||
|
va_end(arg);
|
||||||
|
|
||||||
|
*string_ptr = str;
|
||||||
|
return (rv);
|
||||||
|
}
|
||||||
|
|
||||||
|
</code>
|
||||||
|
|
||||||
|
> I added this after the rest of the #include's in Wrapper.pm, and it seems to work. --Blake
|
||||||
|
|
||||||
[[bugs/done]]
|
[[bugs/done]]
|
||||||
|
|
Loading…
Reference in New Issue